From 124b15d0940efd5e712e647f09a3d91330f6fd87 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Thu, 18 Jun 2026 15:09:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/qc-wo-sample-tab-demos/_shared.css | 334 ++++++ .../compare-all-v2.html | 1057 +++++++++++++++++ docs/qc-wo-sample-tab-demos/compare-all.html | 968 +++++++++++++++ .../independent-pills.html | 422 +++++++ docs/qc-wo-sample-tab-demos/index.html | 263 ++++ ...ebd9226792f74f035c85a080826adb0cc942c.json | 1 + ...1fb4426b82a55965f25cbafd8e4671bbb7e65.json | 1 + 7 files changed, 3046 insertions(+) create mode 100644 docs/qc-wo-sample-tab-demos/_shared.css create mode 100644 docs/qc-wo-sample-tab-demos/compare-all-v2.html create mode 100644 docs/qc-wo-sample-tab-demos/compare-all.html create mode 100644 docs/qc-wo-sample-tab-demos/independent-pills.html create mode 100644 docs/qc-wo-sample-tab-demos/index.html create mode 100644 web-admin/src/graphify-out/cache/ast/31521ad3f25f885d648e347323debd9226792f74f035c85a080826adb0cc942c.json create mode 100644 web-admin/src/graphify-out/cache/ast/b32800f63ee411ce4ce9f1385e11fb4426b82a55965f25cbafd8e4671bbb7e65.json diff --git a/docs/qc-wo-sample-tab-demos/_shared.css b/docs/qc-wo-sample-tab-demos/_shared.css new file mode 100644 index 00000000..75594a89 --- /dev/null +++ b/docs/qc-wo-sample-tab-demos/_shared.css @@ -0,0 +1,334 @@ +/* 质检工单 · 同样本多工单 Tab 选型 Demo(Fresh Mint Token) */ +:root { + --primary: #10b981; + --primary-dark: #059669; + --primary-bg: #ecfdf5; + --text: #1e293b; + --text-muted: #64748b; + --border: #e2e8f0; + --border-soft: #d9e8e2; + --bg-page: #f8fafc; + --surface: #fff; + --radius: 10px; + --radius-sm: 8px; + --reception: #047857; + --reception-bg: #ecfdf5; + --reception-border: #a7f3d0; + --production: #b45309; + --production-bg: #fffbeb; + --production-border: #fcd34d; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-height: 100vh; + font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif; + font-size: 14px; + line-height: 1.5; + color: var(--text); + background: var(--bg-page); +} + +.demo-banner { + position: sticky; + top: 0; + z-index: 200; + padding: 12px 24px; + background: var(--surface); + border-bottom: 1px solid var(--border); + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; + flex-wrap: wrap; + box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04); +} + +.demo-banner h1 { + margin: 0; + font-size: 15px; + font-weight: 600; +} + +.demo-banner p { + margin: 4px 0 0; + font-size: 12px; + color: var(--text-muted); + max-width: 760px; + line-height: 1.55; +} + +.demo-banner__actions { + display: flex; + gap: 8px; + flex-wrap: wrap; + flex-shrink: 0; +} + +.demo-link { + display: inline-flex; + align-items: center; + height: 32px; + padding: 0 12px; + border-radius: var(--radius-sm); + border: 1px solid var(--border); + background: var(--surface); + font-size: 12px; + font-weight: 500; + color: var(--text); + text-decoration: none; + transition: border-color 0.15s, background 0.15s; +} + +.demo-link:hover { + border-color: #a7f3d0; + background: var(--primary-bg); + color: var(--primary-dark); +} + +.page-container { + max-width: 960px; + margin: 0 auto; + padding: 20px 24px 48px; +} + +.compare-stack { + display: flex; + flex-direction: column; + gap: 28px; +} + +.compare-block { + background: var(--surface); + border: 1px solid var(--border-soft); + border-radius: var(--radius); + overflow: hidden; +} + +.compare-block__label { + padding: 14px 18px; + background: #fafafa; + border-bottom: 1px solid var(--border); +} + +.compare-block__label h2 { + margin: 0; + font-size: 14px; + font-weight: 600; + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} + +.compare-block__label p { + margin: 6px 0 0; + font-size: 12px; + color: var(--text-muted); + line-height: 1.55; +} + +.variant-tag { + display: inline-flex; + align-items: center; + height: 22px; + padding: 0 8px; + border-radius: 6px; + font-size: 11px; + font-weight: 700; + letter-spacing: 0.02em; +} + +.variant-tag--baseline { + background: #f1f5f9; + color: #475569; +} + +.variant-tag--rec { + background: var(--primary-bg); + color: var(--primary-dark); + border: 1px solid #a7f3d0; +} + +.compare-block__body { + padding: 16px; + background: #f1f5f9; +} + +.pros-cons { + margin-top: 8px; + display: flex; + flex-direction: column; + gap: 4px; + font-size: 12px; +} + +.pro { + color: #047857; +} + +.con { + color: #94a3b8; +} + +/* ── 样本组卡片骨架 ── */ +.qc-sample-row { + display: flex; + flex-direction: column; + min-width: 0; + border: 1px solid #e2e8f0; + border-radius: 10px; + background: #fff; + overflow: hidden; + transition: border-color 0.15s ease, box-shadow 0.15s ease; +} + +.qc-sample-row:hover { + border-color: #a8d4c4; + box-shadow: 0 2px 8px rgba(4, 120, 87, 0.08); +} + +.qc-sample-row__ctx { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px 12px; + padding: 12px 16px; + background: linear-gradient(180deg, var(--primary-bg) 0%, #fff 100%); + border-bottom: 1px solid #d1fae5; +} + +.qc-sample-row__idx { + flex-shrink: 0; + font-size: 12px; + color: var(--text-muted); + min-width: 20px; +} + +.qc-sample-row__code { + font-size: 14px; + font-weight: 600; + color: #1e293b; + font-family: ui-monospace, Menlo, monospace; +} + +.qc-sample-row__sub { + flex: 1; + min-width: 0; + font-size: 12px; + color: var(--text-muted); +} + +.qc-sample-row__badge { + flex-shrink: 0; + font-size: 11px; + font-weight: 600; + padding: 2px 10px; + border-radius: 999px; + background: var(--primary-bg); + color: #047857; + border: 1px solid #d1fae5; +} + +/* 工单内容占位 */ +.qc-card-placeholder { + padding: 14px 16px; + background: #fafafa; + border-top: 1px solid var(--border); +} + +.qc-card-placeholder__head { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px; + margin-bottom: 10px; +} + +.qc-card-placeholder__no { + font-size: 15px; + font-weight: 600; + font-family: ui-monospace, Menlo, monospace; +} + +.qc-card-placeholder__meta { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 8px; + font-size: 12px; + color: var(--text-muted); +} + +.qc-card-placeholder__meta span strong { + display: block; + font-size: 11px; + font-weight: 500; + color: #94a3b8; +} + +.qc-card-placeholder__tasks { + margin-top: 10px; + padding: 10px 12px; + background: #f8fafc; + border-radius: 8px; + font-size: 12px; + color: var(--text-muted); +} + +/* Tag 模拟 */ +.tag { + display: inline-flex; + align-items: center; + height: 22px; + padding: 0 8px; + border-radius: 4px; + font-size: 12px; + font-weight: 500; + border: 1px solid transparent; +} + +.tag--success { + background: #ecfdf5; + color: #047857; + border-color: #a7f3d0; +} + +.tag--warning { + background: #fffbeb; + color: #b45309; + border-color: #fcd34d; +} + +.tag--info { + background: #f1f5f9; + color: #475569; + border-color: #e2e8f0; +} + +.tag--reception { + background: var(--reception-bg); + color: var(--reception); + border-color: var(--reception-border); +} + +.tag--production { + background: var(--production-bg); + color: var(--production); + border-color: var(--production-border); +} + +/* 通用 tab 按钮 reset */ +.tab-btn { + font-family: inherit; + cursor: pointer; + user-select: none; +} + +.tab-btn:focus-visible { + outline: 2px solid var(--primary); + outline-offset: 2px; +} diff --git a/docs/qc-wo-sample-tab-demos/compare-all-v2.html b/docs/qc-wo-sample-tab-demos/compare-all-v2.html new file mode 100644 index 00000000..d7c9d518 --- /dev/null +++ b/docs/qc-wo-sample-tab-demos/compare-all-v2.html @@ -0,0 +1,1057 @@ + + + + + + 质检工单 · 同样本多工单 Tab 选型 · 第二组(强对比) + + + + + +
+
+

第二组 · 强对比方案(6 套)

+

+ 上一组反馈「不够明显」。本组加大触控面积、始终展示两条工单、强化未选中态的视觉提示(虚线边框、👆 动画、Radio + 清单、大 Toggle 等)。← 第一组 +

+
+
+ 索引 +
+
+ +
+
+ 设计原则:两条工单信息始终可见、未选中必须有明确「可点击」 affordance、来源类别用大面积色块区分(绿=样本接收,琥珀=生产过程)。 +
+
+ +
+
+
+
+

+ 推荐 + N1 + 双色分栏顶栏(整宽可点) +

+

卡片顶部 50/50 分栏:左绿「样本接收」、右琥珀「生产过程」。未选中侧降饱和 + 底部「👆 点击切换」动画;选中侧底部色条 +「当前查看」角标。

+
+
✓ 类别与可点击性一眼可见,占用高度适中
+
+
+
+
+ +
+
+

N2 双行 Radio 清单

+

两条工单以列表行始终展示:Radio 圆点 + 类型 + 工单号。未选中行右侧绿色「切换至此」按钮;选中行左侧 4px 色条高亮。

+
+
✓ 类似表单单选,学习成本最低
+
✓ 两条工单信息完整可见
+
+
+
+
+ +
+
+

+ 推荐 + N3 + 大开关 Toggle(二选一) +

+

居中 oversized 分段开关,emoji 图标 + 15px 粗体类别名。切换时白底滑块 + 阴影动效,下方显示当前工单号。

+
+
✓ 二选一语义最直白
+
+
+
+
+ +
+
+

N4 图标宫格(虚线 = 可点)

+

两个 56px 大图标方块并排:未选中虚线边框 +「点击查看」圆角按钮;选中实线边框 + 整卡染色 + 阴影浮起。

+
+
✓ 视觉重量最大,最难被忽略
+
✗ 垂直空间占用较多
+
+
+
+
+ +
+
+

N5 双摘要条 + 切换按钮

+

顶部提示「本样本有 2 条质检工单,请点击切换」;下方两条摘要 Chip 并排,未选中带绿色「切换」实心按钮。

+
+
+
+ +
+
+

N6 左导航 + 右预览

+

左侧固定 200px 导航列列出两条工单(未选中显示「点击」),右侧预览当前选中工单摘要——Master-Detail 模式。

+
+
✓ 适合 3 条以上工单扩展
+
✗ 横向空间占用大
+
+
+
+
+
+
+ + + + diff --git a/docs/qc-wo-sample-tab-demos/compare-all.html b/docs/qc-wo-sample-tab-demos/compare-all.html new file mode 100644 index 00000000..f5aad22c --- /dev/null +++ b/docs/qc-wo-sample-tab-demos/compare-all.html @@ -0,0 +1,968 @@ + + + + + + 质检工单 · 同样本多工单 Tab 选型 · 对比总览 + + + + + +
+
+

质检工单 · 细胞存储 · 同样本多工单 Tab 选型

+

+ 场景:同一样本编码下存在样本接收与生产过程两条质检工单,需在卡片内切换查看。 + 下方 6 套方案均可点击交互,请对比哪套最能传达「可切换、类别不同」。 +

+
+
+ ← 索引 +
+
+ +
+
+ +
+
+

+ V0 + 现网基线(当前实现) +

+

胶囊 Tab 内嵌序号 + 来源标签 + 工单号 + 状态;未选中时来源与状态均灰化,类别差异不明显。

+
+
✗ 未选中 Tab 全灰,样本接收 / 生产过程难以区分
+
✗ 交互感弱,易被当成静态信息条
+
+
+
+
+ + +
+
+

+ V1 + 分类色保留 + 引导文案 +「点击查看」 +

+

渐进改良:保留横向 Tab 布局,未选中仍保留绿/琥珀来源色,并加一行引导 + 未选中 Tab 后缀「点击查看」。

+
+
✓ 改动量小,与现网结构最接近
+
✓ 类别色始终可见
+
✗ 引导文案熟悉后可能略冗余
+
+
+
+
+ + + + +
+
+

+ 推荐 + V2 + 双卡片切换器 +

+

两条工单并排展示为可点击卡片,图标 + 大标题区分来源,未选中角标「点击切换」,选中侧渐变高亮。

+
+
✓ 可点击性最强,两类工单一眼可辨
+
✓ 移动端可纵向堆叠
+
✗ 占用垂直空间略多
+
+
+
+
+ + +
+
+

V3 流程步骤条(接收 → 生产)

+

强调业务先后顺序:样本接收在前、生产过程在后,中间箭头连接;未选中步骤提示「点击切换至此工单」。

+
+
✓ 传达「同一流程两阶段」的业务语义
+
✗ 若未来出现 3+ 条工单,横向会拥挤
+
+
+
+
+ + +
+
+

V4 全宽分段控制器(iOS Segmented)

+

类似系统分段控件,占满卡片宽度;选中项白底浮起,类型名加粗,下方显示工单号与状态。

+
+
✓ 切换控件形态 familiar,点击区域大
+
✗ 类别色仅体现在选中态文字,未选中时仍偏中性
+
+
+
+
+ + +
+
+

+ 推荐 + V5 + 左侧色条 + 大标签 Tab +

+

+ 「切换工单:」前缀 + 带左侧竖条(绿=接收、琥珀=生产)的大按钮;未选中显示「点此查看」微提示,选中展示完整工单号与状态。 +

+
+
✓ 类别色条 + 44px 触控高度,可发现性与无障碍兼顾
+
✓ 信息密度适中,适合 2~3 条工单
+
✗ 比 V0 略占高度
+
+
+
+
+
+
+ + + + diff --git a/docs/qc-wo-sample-tab-demos/independent-pills.html b/docs/qc-wo-sample-tab-demos/independent-pills.html new file mode 100644 index 00000000..4c47427d --- /dev/null +++ b/docs/qc-wo-sample-tab-demos/independent-pills.html @@ -0,0 +1,422 @@ + + + + + + 质检工单 · 独立胶囊 Tab Demo + + + + + +
+
+

独立胶囊 Tab · 对比 Demo

+

+ 在现网胶囊内容结构不变的前提下,将每个 Tab 从轨道连体改为独立胶囊,并加大间距。 + 下方 A 为现网对照,B/C/D 为独立方案(间距 16 / 24 / 32px,均可点击切换)。 +

+
+
+ ← 索引 + 第二组方案 +
+
+ +
+
+
+
+

+ A + 现网 · 轨道内连体(对照) +

+

多个 Tab 包在同一 panel-pill-tabs__track 绿底容器内,胶囊之间 gap 10px,视觉上像一组。

+
+
+
+ +
+
+

+ 推荐 + B + 独立胶囊 · 间距 16px +

+

去掉外层轨道,每个 Tab 自带白底 + 2px 边框 + 轻阴影;未选中按来源保留绿/琥珀边框色。

+
+
+
+ +
+
+

C 独立胶囊 · 间距 24px

+

同 B,胶囊间距加大到 24px,分离感更强。

+
+
+
+ +
+
+

D 独立胶囊 · 间距 32px + 略放大

+

间距 32px,胶囊 min-height 40px、圆角 12px,点击区域更大。

+
+
+
+
+
+ + + + diff --git a/docs/qc-wo-sample-tab-demos/index.html b/docs/qc-wo-sample-tab-demos/index.html new file mode 100644 index 00000000..f4273023 --- /dev/null +++ b/docs/qc-wo-sample-tab-demos/index.html @@ -0,0 +1,263 @@ + + + + + + 质检工单 · 同样本多工单 Tab 选型 · 索引 + + + + + +
+

质检工单 · 细胞存储 · 同样本多工单 Tab 选型

+

+ 针对 QcWorkOrderSampleGroup.vue 中「同一样本下样本接收 + 生产过程两条工单」的切换区域。 + 共两组 HTML 原型,均可点击交互。 +

+
+ +
+
+ 问题:用户难以感知卡片内存在两类不同质检工单,且需要点击切换。 +
+
+ +
+ 独立胶囊 Tab(最新)→ + 第二组 · 强对比方案 + 第一组 · 渐进改良方案 +
+ +
+

独立胶囊 Tab(现网结构 + 分离间距)

+

去掉轨道连体容器,每个 Tab 独立白底胶囊,间距 16 / 24 / 32px 三档对比。

+
+
+
+

A · 轨道内连体

+

现网对照:panel-pill-tabs__track 绿底容器。

+ 对照 +
+
+

B · 独立胶囊 16px

+

独立边框 + 来源色,间距 16px。

+ 推荐 + 最新 +
+
+

C · 独立胶囊 24px

+

分离感更强。

+ 最新 +
+
+

D · 独立胶囊 32px 放大

+

最大间距 + 略放大点击区域。

+ 最新 +
+
+ +
+

第二组 · 强对比(推荐先看)

+

加大色块面积、两条工单始终可见、未选中显式「切换/点击」 affordance。

+
+
+
+

N1 · 双色分栏顶栏

+

整宽 50/50 绿/琥珀分栏,未选中降饱和 + 👆 动画提示。

+ 推荐 + 第二组 +
+
+

N2 · 双行 Radio 清单

+

列表单选形态,未选中行「切换至此」按钮。

+ 第二组 +
+
+

N3 · 大开关 Toggle

+

居中 oversized 二选一开关,emoji + 粗体类别名。

+ 推荐 + 第二组 +
+
+

N4 · 图标宫格

+

56px 大图标 + 虚线边框 = 可点击,视觉重量最大。

+ 第二组 +
+
+

N5 · 双摘要条

+

提示横幅 + 并排 Chip,未选中绿色「切换」按钮。

+ 第二组 +
+
+

N6 · 左导航 + 右预览

+

Master-Detail,左侧工单列表始终可见。

+ 第二组 +
+
+ +
+

第一组 · 渐进改良

+

在现有 pill-tab 形态上微调,改动量较小。

+
+
+
+

V0–V5

+

胶囊 Tab、双卡片、步骤条、Segmented、色条 Tab 等 6 套。

+ 第一组 +
+
+ + diff --git a/web-admin/src/graphify-out/cache/ast/31521ad3f25f885d648e347323debd9226792f74f035c85a080826adb0cc942c.json b/web-admin/src/graphify-out/cache/ast/31521ad3f25f885d648e347323debd9226792f74f035c85a080826adb0cc942c.json new file mode 100644 index 00000000..8e6996c3 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/31521ad3f25f885d648e347323debd9226792f74f035c85a080826adb0cc942c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/web-admin/src/graphify-out/cache/ast/b32800f63ee411ce4ce9f1385e11fb4426b82a55965f25cbafd8e4671bbb7e65.json b/web-admin/src/graphify-out/cache/ast/b32800f63ee411ce4ce9f1385e11fb4426b82a55965f25cbafd8e4671bbb7e65.json new file mode 100644 index 00000000..c1634176 --- /dev/null +++ b/web-admin/src/graphify-out/cache/ast/b32800f63ee411ce4ce9f1385e11fb4426b82a55965f25cbafd8e4671bbb7e65.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkordersamplegroup_vue", "label": "QcWorkOrderSampleGroup.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSampleGroup.vue", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file