diff --git a/design-refs/mockup/build.sh b/design-refs/mockup/build.sh index 0ca7528..3c4def9 100755 --- a/design-refs/mockup/build.sh +++ b/design-refs/mockup/build.sh @@ -57,7 +57,8 @@ out_dir, stem = sys.argv[1], sys.argv[2] pdfs = sorted(glob.glob(f"{out_dir}/page-*.pdf"), key=lambda p: int(re.search(r"(\d+)", os.path.basename(p)).group(1))) w = PdfWriter() for p in pdfs: - w.append(p) + # 只取第 1 页:Chromium 打印偶发产生一个空白尾页(几何已验证无溢出) + w.append(p, pages=(0, 1)) w.add_metadata({"/Title": f"课程书架设计稿 · {stem} · stack idealjs", "/Author": "Z.ai", "/Creator": "Z.ai"}) with open(f"{stem}.pdf", "wb") as f: w.write(f) diff --git a/design-refs/mockup/components-page-1.png b/design-refs/mockup/components-page-1.png index ce7c97c..f2bfd22 100644 Binary files a/design-refs/mockup/components-page-1.png and b/design-refs/mockup/components-page-1.png differ diff --git a/design-refs/mockup/components-page-7.png b/design-refs/mockup/components-page-7.png index 8ade63a..c231fb6 100644 Binary files a/design-refs/mockup/components-page-7.png and b/design-refs/mockup/components-page-7.png differ diff --git a/design-refs/mockup/components.html b/design-refs/mockup/components.html index 970475d..54b270b 100644 --- a/design-refs/mockup/components.html +++ b/design-refs/mockup/components.html @@ -181,7 +181,12 @@ display: flex; align-items: center; gap: 9px; padding: 0 14px; box-shadow: 0 1px 2px rgba(26,26,26,0.10); } - .gnode .t { font-size: 13px; font-weight: 700; color: #1a1a1a; } + .gnode .t { font-size: 13px; font-weight: 700; color: #1a1a1a; flex: 1; } + .gnode .st { font-size: 10px; padding: 1px 7px; border-radius: 999px; font-weight: 600; } + .gnode .st.done { background: #efe6fb; color: #6d28d9; } + .gnode .st.lock { background: #ffffff; color: #6b6b6b; border: 1px solid #d5d5d3; } + .gnode.rot-l { transform: rotate(-1.5deg); } + .gnode.rot-r { transform: rotate(1.2deg); } .entry-badge { position: absolute; top: -10px; left: -10px; width: 22px; height: 22px; border-radius: 50%; @@ -189,9 +194,8 @@ display: flex; align-items: center; justify-content: center; } .gedges { position: absolute; inset: 0; pointer-events: none; } - .gedges .edge { fill: none; stroke-width: 1.5; stroke-linecap: butt; stroke-dasharray: 9 4; } - .gedges .edge.pre { stroke: #9a9a98; } - .gedges .edge.rel { stroke: #c9c9c7; } + .gedges .edge { fill: none; stroke-width: 1.5; stroke-linecap: butt; stroke-dasharray: 9 4; stroke: #6366f1; } + .gedges .station { fill: #6366f1; } .glegend { display: flex; gap: 22px; font-size: 12px; color: #555; align-items: center; } .glegend .sw { display: inline-block; width: 30px; border-top: 1.5px dashed #9a9a98; margin-right: 6px; vertical-align: middle; } .glegend .sw.rel { border-top-color: #c9c9c7; } @@ -236,7 +240,7 @@
| Prop | 类型 | 说明 |
|---|---|---|
nodes | Course[] | 直接取 courses.ts,渲染为迷你章节卡 |
edges.prerequisites | [from,to][] | 深虚线折线,由每章 prerequisites 派生 |
edges.related | [from,to][] | 无向浅虚线,由 related 派生 |
path | courseId[] | 推荐学习顺序,站点与干线由此派生 |
stations | PathNode[] | 站点圆点 + 错落卡片(可微旋转) |
status | 无 prop | 不在图上编码,由卡片胶囊 / 🔒 表达 |
entryPoints | Entry[] | ①②③ 入口徽标,数据见 EntryGuide |