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 @@
<CourseCard />
课程白卡
16:9 预期区(desc ⇄ GIF)· 状态 · 按钮
<CourseCardMedia />
播放态
定时翻转/悬停锁定 + ⏱ GIF 循环
<EventsPanel />
事件栏
彩色条目:类型 · 日期 · 描述 · 时间
-
<CourseGraph />
课程关系图
前置实线 · 关联虚线 · 入口 ①②③
+
<CourseGraph />
课程路线图
一条干线六站点 · 入口 ①②③
<EntryGuide />
入口梳理
读者画像 → 起点与路径
Atoms
原子组件
Pill · CircleButton · Chip · IconTile
@@ -628,51 +632,57 @@
<CourseGraph /> -

课程关系图 · 知识是网,不是线

-
连线复刻参考稿:细长划虚线折线、小圆角、无箭头,直接抵到卡片边缘;深虚线 = 前置(左→右为学习方向),浅虚线 = 关联;①②③ = 读者入口。
+

课程路线图 · 一条主线的学习旅程

+
复刻参考稿的路线语言:一条自上而下的虚线干线串起六个站点,卡片如便签错落两侧;线只管顺序,状态在卡上;①②③ = 读者入口。
- - - - - - - + + + + + + + + + + + + + -
①🌐快速开始
-
②⚛️快速开始 React
-
🧱更多示例
-
📦更多
-
🔗全栈基础
-
③🧠高级教程
+
①🌐快速开始✓
+
②⚛️快速开始 React✓
+
🧱更多示例✓
+
📦更多✓
+
🔗全栈基础🔒
+
③🧠高级教程✓
- 前置 prerequisites(深虚线,左→右为学习方向) - 关联 related(浅虚线) + 推荐学习顺序(自上而下,一站一卡) ①②③读者入口(见下页)
-
+

Args

- - - + + +
Prop类型说明
nodesCourse[]直接取 courses.ts,渲染为迷你章节卡
edges.prerequisites[from,to][]深虚线折线,由每章 prerequisites 派生
edges.related[from,to][]无向浅虚线,由 related 派生
pathcourseId[]推荐学习顺序,站点与干线由此派生
stationsPathNode[]站点圆点 + 错落卡片(可微旋转)
status无 prop不在图上编码,由卡片胶囊 / 🔒 表达
entryPointsEntry[]①②③ 入口徽标,数据见 EntryGuide
-
-

为什么要关系图(skill 依据)

-
1知识是网状:有前置也有旁路,线性目录会掩盖它。
-
2教程是索引:图让「我在哪、缺哪块」一眼可见。
-
3入口不锁死:③ 直达是合法路径(skill 死原则)。
-
4关系现为示例占位;正式关系填 courses.ts 后图自动更新。连线无箭头,方向由布局流向(左→右)表达;卡片 chips 对应:前置实线边框、关联虚线边框。
+
+

为什么是路线,不是图(参考稿原则)

+
1线只管顺序:状态交给卡片(✓ / 🔒),线保持最低音量。
+
2单线无叉的旅程:错落卡片被干线串成路线,顺序自然可读。
+
3网状关系放别处:前置/关联看卡片 chips,多入口见 EntryGuide。
+
4推荐顺序为示例占位,正式顺序填 courses.ts 后自动更新。
+
组件设计稿 · Storybook 拆分 · stack idealjs
diff --git a/design-refs/mockup/components.pdf b/design-refs/mockup/components.pdf index 80a03fe..2adbf4e 100644 Binary files a/design-refs/mockup/components.pdf and b/design-refs/mockup/components.pdf differ