@qilitt-mickey/vue3-temp-skill 1.1.32 → 1.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -33
- package/SKILL.md +84 -236
- package/bin/cli.js +31 -34
- package/package.json +5 -13
- package/references/code-quality.md +17 -117
- package/references/core-kernel.md +4 -1
- package/references/design-handoff.md +34 -63
- package/references/design-system.md +25 -0
- package/references/design-verify.md +6 -6
- package/references/project-inventory.md +431 -431
- package/scripts/check.cmd +7 -5
- package/scripts/check.mjs +10 -21
- package/scripts/cli.mjs +15 -58
- package/scripts/handoff.mjs +108 -0
- package/scripts/match.py +81 -270
- package/scripts/modules.json +92 -347
- package/scripts/validate.mjs +68 -218
- package/references/handoff-governance.md +0 -74
- package/scripts/ai-content-audit.mjs +0 -244
- package/scripts/ai-match-audit.mjs +0 -348
- package/scripts/ai-workflow-sim.mjs +0 -393
- package/scripts/analyze-deps.mjs +0 -278
- package/scripts/generate-index.mjs +0 -214
- package/scripts/handoff-governance.mjs +0 -77
- package/scripts/handoff-lib.mjs +0 -128
- package/scripts/handoff-session-init.mjs +0 -71
- package/scripts/handoff-spec-check.mjs +0 -195
- package/scripts/handoff-step-check.mjs +0 -81
- package/scripts/scaffold-module.mjs +0 -232
package/bin/cli.js
CHANGED
|
@@ -21,13 +21,15 @@
|
|
|
21
21
|
const fs = require("fs");
|
|
22
22
|
const path = require("path");
|
|
23
23
|
const os = require("os");
|
|
24
|
-
const { execSync } = require("child_process");
|
|
24
|
+
const { execFileSync, execSync } = require("child_process");
|
|
25
25
|
|
|
26
26
|
const HOME = os.homedir();
|
|
27
27
|
// bin/cli.js → 上一级即包根目录
|
|
28
28
|
const SKILL_DIR = path.resolve(__dirname, "..");
|
|
29
29
|
const SKILL_NAME = "vue3-temp-skill";
|
|
30
30
|
const TRACK_FILE = path.join(HOME, ".vue3-temp-skill.json");
|
|
31
|
+
// 只复制 AI 运行时真正需要的文件;validate/check/cli 属于作者侧工具,不随技能分发
|
|
32
|
+
const RUNTIME_SCRIPT_FILES = ["match.py", "modules.json", "handoff.mjs"];
|
|
31
33
|
|
|
32
34
|
// ============================================================
|
|
33
35
|
// 版本
|
|
@@ -253,7 +255,11 @@ function installSkills(targetKey, projectDir) {
|
|
|
253
255
|
|
|
254
256
|
const scriptsSrc = path.join(SKILL_DIR, "scripts");
|
|
255
257
|
if (fs.existsSync(scriptsSrc)) {
|
|
256
|
-
|
|
258
|
+
const scriptsDest = path.join(dest, "scripts");
|
|
259
|
+
ensureDir(scriptsDest);
|
|
260
|
+
for (const file of RUNTIME_SCRIPT_FILES) {
|
|
261
|
+
copyFile(path.join(scriptsSrc, file), path.join(scriptsDest, file));
|
|
262
|
+
}
|
|
257
263
|
}
|
|
258
264
|
|
|
259
265
|
// Cursor:清理旧版 rules/*.mdc,避免与 skills 重复
|
|
@@ -342,8 +348,8 @@ ${bold("命令:")}
|
|
|
342
348
|
update [target] 更新已安装的技能(默认更新全部已安装目标)
|
|
343
349
|
uninstall [target] 卸载技能(默认卸载全部已安装目标)
|
|
344
350
|
list 查看已安装的目标和版本
|
|
345
|
-
handoff init
|
|
346
|
-
handoff check
|
|
351
|
+
handoff init 校验 handoff JSON 规格,在用户级目录建立会话(不污染业务项目)
|
|
352
|
+
handoff check 确认目标项目存在设计落地所需的关键接线
|
|
347
353
|
|
|
348
354
|
${bold("目标 (target):")}
|
|
349
355
|
cursor → Cursor ~/.cursor/skills/
|
|
@@ -377,8 +383,8 @@ ${bold("示例:")}
|
|
|
377
383
|
${dim("# 查看已安装情况")}
|
|
378
384
|
npx @qilitt-mickey/vue3-temp-skill list
|
|
379
385
|
|
|
380
|
-
${dim("#
|
|
381
|
-
npx @qilitt-mickey/vue3-temp-skill handoff init --project ./my-app --file
|
|
386
|
+
${dim("# 设计交接(在业务项目根目录执行)")}
|
|
387
|
+
npx @qilitt-mickey/vue3-temp-skill handoff init --project ./my-app --file C:/temp/handoff.json
|
|
382
388
|
npx @qilitt-mickey/vue3-temp-skill handoff check --project ./my-app --require-session
|
|
383
389
|
`);
|
|
384
390
|
}
|
|
@@ -602,40 +608,31 @@ function cmdList() {
|
|
|
602
608
|
function cmdHandoff(sub, args, projectDir) {
|
|
603
609
|
const proj = projectDir || process.cwd();
|
|
604
610
|
const fileIdx = args.indexOf("--file");
|
|
605
|
-
const handoffFile =
|
|
606
|
-
|
|
611
|
+
const handoffFile = fileIdx !== -1 ? path.resolve(args[fileIdx + 1]) : null;
|
|
612
|
+
const stateDirIdx = args.indexOf("--state-dir");
|
|
613
|
+
const stateDir = stateDirIdx !== -1 ? path.resolve(args[stateDirIdx + 1]) : null;
|
|
607
614
|
const requireSession = args.includes("--require-session");
|
|
608
615
|
const scriptDir = path.join(SKILL_DIR, "scripts");
|
|
609
616
|
|
|
610
|
-
if (sub
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
} catch (e) {
|
|
617
|
-
process.exit(e.status ?? 1);
|
|
618
|
-
}
|
|
619
|
-
return;
|
|
617
|
+
if (sub !== "init" && sub !== "check") {
|
|
618
|
+
console.error(red("✗ handoff 子命令: init | check"));
|
|
619
|
+
console.error(dim(" handoff init --project <dir> --file <handoff.json> [--state-dir <dir>]"));
|
|
620
|
+
console.error(dim(" handoff check --project <dir> [--state-dir <dir>] [--require-session]"));
|
|
621
|
+
console.error(dim(" 默认状态目录见 README.md「设计落地」"));
|
|
622
|
+
process.exit(1);
|
|
620
623
|
}
|
|
621
624
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
stdio: "inherit",
|
|
628
|
-
});
|
|
629
|
-
} catch (e) {
|
|
630
|
-
process.exit(e.status ?? 1);
|
|
631
|
-
}
|
|
632
|
-
return;
|
|
633
|
-
}
|
|
625
|
+
const script = path.join(scriptDir, "handoff.mjs");
|
|
626
|
+
const childArgs = [script, sub, "--project", proj];
|
|
627
|
+
if (sub === "init" && handoffFile) childArgs.push("--file", handoffFile);
|
|
628
|
+
if (stateDir) childArgs.push("--state-dir", stateDir);
|
|
629
|
+
if (sub === "check" && requireSession) childArgs.push("--require-session");
|
|
634
630
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
631
|
+
try {
|
|
632
|
+
execFileSync(process.execPath, childArgs, { stdio: "inherit" });
|
|
633
|
+
} catch (e) {
|
|
634
|
+
process.exit(e.status ?? 1);
|
|
635
|
+
}
|
|
639
636
|
}
|
|
640
637
|
|
|
641
638
|
// ============================================================
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qilitt-mickey/vue3-temp-skill",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.34",
|
|
4
4
|
"description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块",
|
|
5
5
|
"bin": {
|
|
6
6
|
"vue3-temp-skill": "./bin/cli.js"
|
|
@@ -23,21 +23,13 @@
|
|
|
23
23
|
"release": "node release.js",
|
|
24
24
|
"release:minor": "node release.js minor",
|
|
25
25
|
"release:major": "node release.js major",
|
|
26
|
-
"check": "scripts
|
|
27
|
-
"prepack": "scripts
|
|
26
|
+
"check": "node scripts/check.mjs",
|
|
27
|
+
"prepack": "node scripts/check.mjs",
|
|
28
28
|
"validate": "node scripts/validate.mjs",
|
|
29
|
-
"audit": "node scripts/ai-match-audit.mjs",
|
|
30
|
-
"content": "node scripts/ai-content-audit.mjs",
|
|
31
|
-
"deps": "node scripts/analyze-deps.mjs",
|
|
32
|
-
"deps:hot": "node scripts/analyze-deps.mjs --hot",
|
|
33
|
-
"deps:mermaid": "node scripts/analyze-deps.mjs --mermaid",
|
|
34
29
|
"match": "python scripts/match.py",
|
|
35
30
|
"match:batch": "python scripts/match.py --batch",
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"scaffold": "node scripts/scaffold-module.mjs",
|
|
39
|
-
"handoff:init": "node scripts/handoff-session-init.mjs",
|
|
40
|
-
"handoff:check": "node scripts/handoff-governance.mjs",
|
|
31
|
+
"handoff:init": "node scripts/handoff.mjs init",
|
|
32
|
+
"handoff:check": "node scripts/handoff.mjs check",
|
|
41
33
|
"postpublish": "echo 'Published @qilitt-mickey/vue3-temp-skill to npmjs.org'"
|
|
42
34
|
},
|
|
43
35
|
"keywords": [
|
|
@@ -13,7 +13,7 @@ tags: [code-review, quality, checklist, lint, typescript, vue3, security, perfor
|
|
|
13
13
|
|
|
14
14
|
1. 重读本文件
|
|
15
15
|
2. 列出本轮改动路径,对照下方清单;**硬失败表命中则先改代码再继续**
|
|
16
|
-
3. **有 handoff
|
|
16
|
+
3. **有 handoff 时**:动手前 init session;落地完成后 handoff check(`--require-session`)须 **exit 0** 才能声称设计落地完成
|
|
17
17
|
4. 业务项目根目录必跑:`pnpm lint:fix` → `pnpm type-check`
|
|
18
18
|
5. 失败则修代码并重跑,直至通过或写明阻塞
|
|
19
19
|
6. 最终回复追加:
|
|
@@ -24,7 +24,7 @@ tags: [code-review, quality, checklist, lint, typescript, vue3, security, perfor
|
|
|
24
24
|
- 改动文件:`path/a`、`path/b`、…
|
|
25
25
|
- 清单:选型 ✅ / 类型 ✅ / 组件 ✅ / API ✅ / 安全 ✅ / 业务 ✅ / 列表→详情 ✅或N/A / 列表布局 ✅或N/A / 风格 ✅
|
|
26
26
|
- 硬失败:无 | 已拦截并修正:…
|
|
27
|
-
- handoff
|
|
27
|
+
- handoff 检查(如有):通过 | 失败项:…
|
|
28
28
|
- 已修正:…(无则写「无」)
|
|
29
29
|
- 命令:`pnpm lint:fix` → …;`pnpm type-check` → …
|
|
30
30
|
- 待确认:…
|
|
@@ -48,122 +48,22 @@ lint / type-check **过了也不能放过**下列项。发现即改代码,禁
|
|
|
48
48
|
| 新菜单路由 | 父级无 `icon` 或业务页二次挂 `Layout` | `icons` + `core-kernel` |
|
|
49
49
|
| 列表查询区 `el-form` / 查询按钮 | 写了 `size="small"`(紧凑主题用户未要求) | 不写 size,用 default=`--control-height` |
|
|
50
50
|
| 本轮新增 addon 并引用对应 `Re*` / Vant / 微信 | 已装包但 `tsconfig exclude` 仍含该路径,或 `addon-enable` 要求的 build/src 未改 | 按 **`addon-enable.md`** 对应章节恢复后重跑 type-check |
|
|
51
|
+
| `element-plus.scss` / `sidebar.scss` 等样式消费层 | `var(--font-size-*)` 用于 `line-height` / `height` 等非字号属性 | 查 TSB:`classifyToken` + `PROPERTY_FORBIDDEN`;`line-height` → `--line-height` 或 `--el-menu-item-height` |
|
|
51
52
|
| `element-plus.scss` 内视觉规则(shadow/hover/transition) | 出现非令牌引用的裸 hex / px / rgba 值 | 全部改为 `var()` 引用令牌 |
|
|
52
53
|
| 视觉规则新增 | `dark.scss` 缺少对应暗色覆盖 | 每条新规则在 `html.dark` 内有对应覆盖 |
|
|
53
54
|
|
|
54
|
-
###
|
|
55
|
-
|
|
56
|
-
>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
- [ ]
|
|
62
|
-
- [ ]
|
|
63
|
-
- [ ]
|
|
64
|
-
- [ ]
|
|
65
|
-
|
|
66
|
-
#### 令牌层(5 项)
|
|
67
|
-
|
|
68
|
-
- [ ] `--primary-0` ~ `--primary-9` 完整 10 级色阶
|
|
69
|
-
- [ ] 几何尺寸令牌与设计一致(header/tabs/sidebar/margin)
|
|
70
|
-
- [ ] 控件高度令牌与设计一致(`--control-height*`)
|
|
71
|
-
- [ ] 视觉令牌完整(shadow/transition/transform)
|
|
72
|
-
- [ ] 无硬编码 hex 值出现在令牌以外的位置
|
|
73
|
-
|
|
74
|
-
#### 框架层(7 项)
|
|
75
|
-
|
|
76
|
-
- [ ] 顶栏元素组成与设计一致(不多不少:设置/通知/全屏/搜索/面包屑)
|
|
77
|
-
- [ ] 语言切换为内联文字(非下拉框)
|
|
78
|
-
- [ ] 侧栏底部折叠按钮设计无则已隐藏(折叠按钮移至顶部)
|
|
79
|
-
- [ ] 菜单 hover 折叠功能设计无则已禁用
|
|
80
|
-
- [ ] 菜单激活态:品牌色极浅底 + 右侧强调条(非纯蓝底白字)
|
|
81
|
-
- [ ] 页签横线居中,关闭按钮行为正确
|
|
82
|
-
- [ ] Logo 区:品牌色方块 + 白字首字(非默认彩色图标)
|
|
83
|
-
|
|
84
|
-
#### 样式层(6 项)
|
|
85
|
-
|
|
86
|
-
- [ ] 卡片 hover 有浮起效果(transform + shadow)
|
|
87
|
-
- [ ] 按钮 hover 有上浮效果(位移 + 阴影)
|
|
88
|
-
- [ ] 输入框聚焦有光环(品牌色边框 + 外阴影)
|
|
89
|
-
- [ ] 表格行 hover 有品牌色底
|
|
90
|
-
- [ ] 展开收起按钮 hover 文字不变淡(加深为品牌色)
|
|
91
|
-
- [ ] 所有视觉规则在暗色模式下有对应覆盖
|
|
92
|
-
|
|
93
|
-
#### 共享组件层(10 项)
|
|
94
|
-
|
|
95
|
-
- [ ] ReTableBar 工具栏按钮样式符合设计规范(刷新/密度/列设置:icon 16px、按钮 32px、分隔线 1px)
|
|
96
|
-
- [ ] ReTableBar 工具栏左右布局正确(左批量操作、右工具按钮)
|
|
97
|
-
- [ ] ReTableBar 标题区:设计模式下无多余「展示列表」标题文字
|
|
98
|
-
- [ ] ReTableOperate 操作列:纯文字链接,无图标,按钮间有 1px×14px 竖分隔线
|
|
99
|
-
- [ ] ReTableOperate「更多」按钮:带 10px 下拉箭头,下拉菜单样式正确
|
|
100
|
-
- [ ] ReTableOperate 折叠阈值:limit 默认 3,列宽动态计算(`resolveOperateColumnWidth`)
|
|
101
|
-
- [ ] RePagination 分页样式符合设计规范(两段式布局、可选 10/20/50 条)
|
|
102
|
-
- [ ] 侧栏菜单激活态:实色品牌底 + 左侧 3px 指示条 + 白色文字(非 8% 透明底)
|
|
103
|
-
- [ ] 顶栏折叠按钮:垂直居中,40×40px;设置按钮:已隐藏/删除
|
|
104
|
-
- [ ] 内容区模块分割线:各区域间距与设计规范一致(标题 20px / 筛选 20px / 工具栏 20px 8px / 表格 0 20px / 分页 8px 20px 20px)
|
|
105
|
-
|
|
106
|
-
#### 页面层(11 项)
|
|
107
|
-
|
|
108
|
-
- [ ] 页面有标题区(`.vts-page-header`:标题 + 描述 + 操作按钮)
|
|
109
|
-
- [ ] 筛选区有容器感(`.vts-filter-area`:背景 + 底部分割线)
|
|
110
|
-
- [ ] 操作栏存在(`.vts-action-bar`:批量操作 + 工具按钮)
|
|
111
|
-
- [ ] 表格区有包裹感(`.vts-table-area`)
|
|
112
|
-
- [ ] 状态标签样式符合规范(filled/outlined/solid 按列分配)
|
|
113
|
-
- [ ] 操作列统一为文字链接 + "更多"下拉(ReTableOperate)
|
|
114
|
-
- [ ] 设计中未体现的元素已隐藏/移除(对照元素自查隐藏清单 4.1-4.4)
|
|
115
|
-
- [ ] 所有样式值引用 CSS 变量,无裸 hex/px 值
|
|
116
|
-
- [ ] 页面无「展示列表」等多余标题文字
|
|
117
|
-
- [ ] 页面无「左侧按钮可以增加多个」「增加一行可编辑数据」等示例按钮
|
|
118
|
-
- [ ] 操作列按钮无多余图标,仅保留文字 + 竖分隔线
|
|
119
|
-
|
|
120
|
-
#### 项目级完成性(transformScope=project 时额外执行)
|
|
121
|
-
|
|
122
|
-
- [ ] 已扫描全部路由模块(`src/router/modules/`),页面清单完整
|
|
123
|
-
- [ ] 所有列表页均已按设计规范改造(base/tree/vxe-table 等)
|
|
124
|
-
- [ ] 所有表单页均已按设计规范改造
|
|
125
|
-
- [ ] 所有详情页均已按设计规范改造
|
|
126
|
-
- [ ] 工作台/仪表盘/数据大屏等其他页面均已按设计规范改造
|
|
127
|
-
- [ ] 共享组件(ReTableBar/ReTableOperate/RePagination)已全局修改
|
|
128
|
-
- [ ] 框架组件(navbar/sidebar/tabs/app-main)已全局修改
|
|
129
|
-
- [ ] 元素隐藏清单已逐项检查并处理(顶栏/侧栏/列表/共享组件 四类)
|
|
130
|
-
- [ ] 无遗漏页面(对照路由清单逐一核对)
|
|
131
|
-
- [ ] 所有页面的多余元素(「展示列表」「左侧按钮...」等)均已清除
|
|
132
|
-
|
|
133
|
-
#### 设计落地管控(有 `.handoff/session.json` 时必须执行)
|
|
134
|
-
|
|
135
|
-
> 详见 `references/handoff-governance.md`。lint/type-check **不能**代替本段。
|
|
136
|
-
|
|
137
|
-
- [ ] 动手前已 `handoff-session-init`,`.handoff/session.json` 含完整 handoff + baseline
|
|
138
|
-
- [ ] handoff JSON 含 `structureRequirements` + `interactionSpecs`
|
|
139
|
-
- [ ] C/T/F/Co/S/P 全流程已执行(`handoff-step-check` 通过)
|
|
140
|
-
- [ ] 代码与当次 JSON 一致(`handoff-spec-check` 通过)
|
|
141
|
-
- [ ] 已落盘 `.handoff/verify-report.json`(`overallPass: true`)
|
|
142
|
-
- [ ] **`vue3-temp-skill handoff check --project <业务项目> --require-session` → exit 0**
|
|
143
|
-
|
|
144
|
-
#### 设计还原度验证(有 handoff JSON 时必须执行)
|
|
145
|
-
|
|
146
|
-
> 验证依据:设计 skill 的规范文件(design-tokens.md / unified-framework.md / list-page.md / component-spec.md)
|
|
147
|
-
> 验证方法:代码级对照——读取设计规范预期值 → 检查项目代码实际值 → 比对是否一致
|
|
148
|
-
> 验证顺序:框架层 → 页面层 → 共享组件层 → 细节项 → 元素清理
|
|
149
|
-
|
|
150
|
-
- [ ] **框架层还原度**:顶栏高度/元素/折叠位置、侧栏宽度/背景/激活态、页签高度/激活态、内容区背景/padding,共 10 项已逐项对照
|
|
151
|
-
- [ ] **页面层还原度**:卡片阴影圆角、标题区字号/padding、筛选区背景/分隔线、工具栏布局/按钮、表格表头/行高/hover、操作列样式、分页布局、模块分割线/间距,共 12 项已逐项对照
|
|
152
|
-
- [ ] **共享组件还原度**:ReTableBar(按钮样式/布局/分页集成)、ReTableOperate(文字链接/分隔线/更多箭头/折叠逻辑)、RePagination(样式/布局),共 10 项已逐项对照
|
|
153
|
-
- [ ] **核心组件还原度**:按钮(高度/圆角/主色三态)、输入框(高度/圆角/focus 光环)、Tag(5 种状态色)、下拉菜单、空状态,已逐项对照
|
|
154
|
-
- [ ] **细节项还原度**:图标大小 16px、分隔线 #F0F0F0、hover 文字加深不变浅、行高正确、字重正确、圆角统一、阴影自然、更多按钮有箭头、操作列有竖分隔线、页签下划线居中、操作列 sticky、选择列 48px、状态标签颜色对应、卡片有阴影,共 15 项已逐项检查
|
|
155
|
-
- [ ] **令牌溯源检查**:颜色/尺寸/间距均通过 CSS 变量传递,变量值与 design-tokens.md 一致,无裸 hex/px 值
|
|
156
|
-
- [ ] **元素清理检查**:设置按钮、展示列表标题、示例按钮、操作列多余图标等已全部移除
|
|
157
|
-
- [ ] **已输出「设计还原度验证报告」**(格式见 `design-verify.md` 10.7),包含整体还原度、各层通过率、偏差项及修正方案
|
|
158
|
-
- [ ] **CSS 冲突检测已执行**(`design-verify.md` 10.7.5):选择器重复扫描完成,无意冲突已消除,导入顺序已验证,新增 CSS 文件已注册
|
|
159
|
-
- [ ] **已输出「CSS 冲突检测报告」**(格式见 `design-verify.md` 10.7.5.5),包含扫描范围、重复选择器明细、导入顺序验证结果
|
|
160
|
-
- [ ] **逐属性 CSS 校验已执行**(`design-verify.md` 10.8):从设计源文件提取 CSS 属性清单,逐条比对项目代码,不一致项已修正并回读校验通过
|
|
161
|
-
- [ ] **已输出「逐属性 CSS 校验报告」**(格式见 `design-verify.md` 10.8.5),包含校验范围、偏差明细、待确认项
|
|
162
|
-
- [ ] **设计落盘范围**:设计产出 HTML 未写入项目文件,设计规范未另存到非业务目录,所有修改只在 src/ 等业务代码中
|
|
163
|
-
- [ ] **功能完整性核查**:样式改造后原有功能全部正常(框架层/共享组件层/页面层均已逐项核查,无按钮失效、事件丢失、数据绑定断裂等功能回归问题)
|
|
164
|
-
- [ ] **已输出「功能完整性核查报告」**(格式见 design-handoff.md 第十一章 11.7),包含整体通过率、各层核查结果、发现的问题及修正方案
|
|
165
|
-
|
|
166
|
-
> ⚠️ 硬约束:设计还原度验证未通过的项,必须修正后重新验证,直至全部通过。禁止带着未修正的偏差项进入后续环节。
|
|
55
|
+
### 设计 handoff(有 `design-handoff/v1` JSON 时)
|
|
56
|
+
|
|
57
|
+
> 对照 `design-handoff.md` **第八章**硬失败表;**第九章**落地清单;**design-verify.md** 还原度验证;**design-handoff.md 第十一章**功能完整性核查。lint/type-check 不能代替上述检查。
|
|
58
|
+
|
|
59
|
+
- [ ] 动手前已 init handoff session
|
|
60
|
+
- [ ] handoff JSON 含 `meta` / `shell` / `geometry` / `tokens`;有 `structureRequirements` 时同时有 `interactionSpecs`
|
|
61
|
+
- [ ] 只改了 handoff 明确覆盖的文件和页面,没有为凑数虚构修改
|
|
62
|
+
- [ ] 业务逻辑在视觉改造后未被破坏(按钮、事件、数据绑定仍可用)
|
|
63
|
+
- [ ] 第九章各层清单已逐项核对
|
|
64
|
+
- [ ] design-verify 还原度验证已通过(有偏差须修正)
|
|
65
|
+
- [ ] 第十一章功能完整性核查已通过
|
|
66
|
+
- [ ] 落地完成后 handoff check(`--require-session`)→ **exit 0**
|
|
167
67
|
|
|
168
68
|
## 选型与硬约束
|
|
169
69
|
|
|
@@ -219,8 +119,8 @@ lint / type-check **过了也不能放过**下列项。发现即改代码,禁
|
|
|
219
119
|
|
|
220
120
|
### design-system(命中时)
|
|
221
121
|
|
|
222
|
-
- [ ] 有设计
|
|
223
|
-
- [ ]
|
|
122
|
+
- [ ] 有设计 handoff 时已读 `design-handoff.md` 并按 C/T/F/Co/S/P 执行
|
|
123
|
+
- [ ] 设计还原对照 `design-verify.md` 与当次 JSON
|
|
224
124
|
- [ ] 令牌 / `platform-config.json` / 侧栏主题三处一致
|
|
225
125
|
- [ ] **无**设计落地时未改出厂主色 / ShowModel / 壳层 / 弹窗几何默认
|
|
226
126
|
- [ ] 组件尺寸三档已落地并桥接 `--el-component-size*`;缺档回退至 default;查询区不写 size
|
|
@@ -171,5 +171,8 @@ export function getCustomerList(data: CustomerQuery, url: string) {
|
|
|
171
171
|
| 详情跳转 | `detail-page` |
|
|
172
172
|
| 主题布局 | `layout-theme` |
|
|
173
173
|
| 设计规范适配 | `design-system` + 有产出时 `design-handoff` + `design-verify` |
|
|
174
|
-
|
|
|
174
|
+
| 依赖盘点 / 装包 / addon 接线 | `project-inventory` + `addon-enable` |
|
|
175
|
+
| 多语言 | `i18n-localization` |
|
|
175
176
|
| 生成后审查 | `code-quality` |
|
|
177
|
+
|
|
178
|
+
能力组与关键词的完整定义见 `scripts/modules.json`,运行时由 `scripts/match.py` 路由。
|
|
@@ -22,41 +22,21 @@ tags: [handoff, design-tokens, upstream, artifacts, json, modification-checklist
|
|
|
22
22
|
- ✅ 所有修改只动 `src/`、`public/`、`platform-config.json` 等业务代码
|
|
23
23
|
- ❌ 不得把设计 HTML / 规范文档写入项目内非业务目录
|
|
24
24
|
|
|
25
|
-
##
|
|
25
|
+
## 双轨与模式
|
|
26
26
|
|
|
27
27
|
| 场景 | 行为 |
|
|
28
28
|
|------|------|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
29
|
+
| 无 handoff | 保持模板出厂视觉 |
|
|
30
|
+
| 有 `design-handoff/v1` | 按本清单 C/T/F/Co/S/P 执行;只改主色不改 Theme/Version = 落地失败 |
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
**改造范围**(`meta.transformScope`):
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
|
37
|
-
|
|
38
|
-
| **先开发 → 后调设计** | 业务页面已用 vue3-temp-skill 开发完成,用户不满意效果,调设计技能输出 handoff JSON | C/T/F/S/P **全 5 步** | 页面组件保留业务逻辑(API/路由/状态/事件),**重写 `<template>` 和样式**,使页面结构与设计输出一致 |
|
|
39
|
-
| **先设计 → 后开发** | 新项目先调设计技能输出 handoff JSON,再调 vue3-temp-skill | 先执行 C/T/F/S(配置/令牌/框架/样式),后续业务开发时 P 步骤随页面生成同步落地 | 后续每个新页面开发都须遵循已落地设计规范,不以出厂样板覆盖设计输出 |
|
|
40
|
-
|
|
41
|
-
**两种场景均须执行完整 C/T/F/Co/S/P 流程,不可跳步。**
|
|
42
|
-
|
|
43
|
-
### 项目级模式 vs 单页模式
|
|
44
|
-
|
|
45
|
-
通过 `meta.transformScope` 字段识别改造范围:
|
|
46
|
-
|
|
47
|
-
| 模式 | transformScope 值 | 执行逻辑 |
|
|
48
|
-
|------|-------------------|---------|
|
|
49
|
-
| **单页模式**(默认) | `"single-page"` 或未设置 | 仅处理当前页面,C/T/F/Co/S 若已落地则跳过 |
|
|
50
|
-
| **项目级模式** | `"project"` | 全局执行 C/T/F/Co/S(一次),然后遍历所有路由页面逐一改造 |
|
|
51
|
-
|
|
52
|
-
**项目级模式执行要点**:
|
|
53
|
-
1. **Step 0 — 页面清单初始化**:扫描 `src/router/modules/` 所有路由文件,按页面类型(list/form/detail/dashboard 等)分组,构建待改造页面清单
|
|
54
|
-
2. **Step 1-5 — 全局层落地**:C/T/F/Co/S 五步是项目全局的,只执行一次(配置/令牌/框架/共享组件/样式)
|
|
55
|
-
3. **Step 6 — 全页面遍历**:按页面清单逐页执行 P1-P7,每页标记完成状态
|
|
56
|
-
4. **断点续改**:单次对话未完成全部页面时,记录已完成页面,用户说「继续」时从下一个 pending 页面开始
|
|
57
|
-
5. **完成性校验**:全部页面完成后,执行项目级完成性校验(见第九章末)
|
|
34
|
+
| 模式 | 条件 | 范围 |
|
|
35
|
+
|------|------|------|
|
|
36
|
+
| 单页(默认) | 未设置或 `single-page` | 当前页面 + 必要共享组件;C/T/F/Co/S 已落地则跳过 |
|
|
37
|
+
| 项目级 | `project` | 全局 C/T/F/Co/S 一次,再遍历全部路由页;未完成前不得声称完成 |
|
|
58
38
|
|
|
59
|
-
|
|
39
|
+
**先开发后设计 / 先设计后开发**:均须完整 C/T/F/Co/S/P;页面保留业务逻辑,重写 template 与样式以对齐设计结构。
|
|
60
40
|
|
|
61
41
|
## 设计为准原则
|
|
62
42
|
|
|
@@ -68,21 +48,13 @@ tags: [handoff, design-tokens, upstream, artifacts, json, modification-checklist
|
|
|
68
48
|
4. **设计输出未覆盖的区域 → 保持项目已有实现**,仅同步令牌(色彩/字体/圆角等)
|
|
69
49
|
5. **隐藏/移除功能性元素时**:在回复中明确列出被移除的元素,供用户确认是否需要补回
|
|
70
50
|
|
|
71
|
-
##
|
|
72
|
-
|
|
73
|
-
> 设计技能每次产出时**始终自动附加 `design-handoff/v1` JSON**。
|
|
74
|
-
> 本技能检测到 JSON 存在 → 自动触发完整 C/T/F/S/P 流程,用户无需提及「JSON」「handoff」「桥接」等技术词。
|
|
51
|
+
## 触发
|
|
75
52
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
1. 会话中存在 `design-handoff/v1` JSON(设计技能自动产出)
|
|
79
|
-
2. 会话中存在设计技能的 HTML 产出 + 用户要求按设计结果适配工程代码
|
|
80
|
-
|
|
81
|
-
⚠️ 触发后 **必须执行完整 C/T/F/S/P 五步**,禁止只改主色或只改令牌。
|
|
53
|
+
会话中存在 `design-handoff/v1` JSON,或存在设计 HTML 且用户要求按设计适配工程代码 → 自动执行完整 C/T/F/Co/S/P,禁止只改主色或只改令牌。
|
|
82
54
|
|
|
83
55
|
## 规范识别回执(动手前必出)
|
|
84
56
|
|
|
85
|
-
>
|
|
57
|
+
> 动手前先 init handoff session(保存当次 JSON 规格);不在业务项目创建 `.handoff/`。
|
|
86
58
|
|
|
87
59
|
```markdown
|
|
88
60
|
## 规范识别回执
|
|
@@ -151,7 +123,7 @@ tags: [handoff, design-tokens, upstream, artifacts, json, modification-checklist
|
|
|
151
123
|
|
|
152
124
|
| # | JSON 来源 | 项目文件 | 修改内容 | 验证 |
|
|
153
125
|
|---|---------|---------|---------|------|
|
|
154
|
-
| F1 | `structureRequirements.frameworkShell.header` | `src/layout/components/navbar/index.vue` | 顶栏组成:折叠按钮(左)+ 语言切换 + 功能图标组 + 分割线 + 欢迎区 + 头像(右)。**设计中未体现的元素必须移除**(设置/通知/全屏/搜索/面包屑等) | 元素与设计完全一致,不多不少 |
|
|
126
|
+
| F1 | `structureRequirements.frameworkShell.header` | `src/layout/components/lay-navbar/index.vue` | 顶栏组成:折叠按钮(左)+ 语言切换 + 功能图标组 + 分割线 + 欢迎区 + 头像(右)。**设计中未体现的元素必须移除**(设置/通知/全屏/搜索/面包屑等) | 元素与设计完全一致,不多不少 |
|
|
155
127
|
| F2 | `interactionSpecs.languageSwitch` | navbar/ 语言切换组件 | **改为内联文字**(中 / EN),竖线分隔。激活态品牌色文字,非激活次要色。**禁止下拉框** | 语言切换为内联文字 |
|
|
156
128
|
| F3 | `structureRequirements.frameworkShell.headerLayout` | navbar/index.vue | flex 两端对齐:左侧折叠按钮,右侧功能组 | 布局与设计一致 |
|
|
157
129
|
| F4 | `interactionSpecs.menuActive` → 头像区 | navbar/ 欢迎区 | 悬停态:头像微浮起 + 欢迎文字变品牌色 | hover 效果与设计一致 |
|
|
@@ -408,8 +380,9 @@ tags: [handoff, design-tokens, upstream, artifacts, json, modification-checklist
|
|
|
408
380
|
1. 读取 JSON 的 `visual` + `interactionSpecs` 字段
|
|
409
381
|
2. 按「区域映射表」逐项将 JSON 值写入 `element-plus.scss` 对应 CSS 选择器
|
|
410
382
|
3. **所有值引用 `design-tokens.scss` 令牌变量**,不硬编码
|
|
411
|
-
4.
|
|
412
|
-
5. `
|
|
383
|
+
4. **令牌语义绑定(TSB)**:引用前按 `design-system.md`「TSB」— `classifyToken(--name)` + `PROPERTY_FORBIDDEN[property]`;禁止为凑变量跨域(如 `line-height: var(--font-size-base)`)
|
|
384
|
+
5. JSON 无值时回退 `design-tokens.md` 默认值(设计技能令牌库)
|
|
385
|
+
6. `dark.scss` 对以上规则逐条提供暗色覆盖
|
|
413
386
|
|
|
414
387
|
### 5.2 原则(硬约束,不随设计变化而失效)
|
|
415
388
|
|
|
@@ -500,28 +473,28 @@ tags: [handoff, design-tokens, upstream, artifacts, json, modification-checklist
|
|
|
500
473
|
|
|
501
474
|
## 八、硬失败(任一项命中 = 落地失败,必须修正)
|
|
502
475
|
|
|
503
|
-
>
|
|
504
|
-
> -
|
|
476
|
+
> **硬失败分两类**:
|
|
477
|
+
> - **流程类**:无 session、跳过关键步骤、lint 代替交接检查 — **与设计无关,永远检查**
|
|
505
478
|
> - **规格类**:代码与**当次** handoff JSON 的 `structureRequirements` / `interactionSpecs` 不一致 — **随设计变,不写死在本表**
|
|
479
|
+
>
|
|
480
|
+
> 单页 Demo 默认只处理当前页面及必要共享组件;只有用户明确要求项目级改造时才遍历全部路由。
|
|
506
481
|
|
|
507
|
-
### 8.1
|
|
482
|
+
### 8.1 流程硬失败
|
|
508
483
|
|
|
509
484
|
| 类别 | 条件 | 处理 |
|
|
510
485
|
|------|------|------|
|
|
511
|
-
|
|
|
512
|
-
|
|
|
513
|
-
|
|
|
514
|
-
|
|
|
515
|
-
|
|
|
516
|
-
|
|
|
517
|
-
| 项目级 | 项目级模式下未扫描全部路由即开始改造 | 硬失败:先完成 Step 0 页面清单初始化 |
|
|
486
|
+
| 流程 | 有 handoff 但未 init session | 硬失败:先建立 session |
|
|
487
|
+
| 流程 | 只改令牌未改共享组件即声称完成 | 硬失败:补齐共享组件改造 |
|
|
488
|
+
| 流程 | 未执行 handoff check(`--require-session`)或未 exit 0 | 硬失败:检查通过后才能完成 |
|
|
489
|
+
| 流程 | 以 `lint:fix` / `type-check` 通过代替 handoff 检查 | 硬失败:二者是必要非充分条件 |
|
|
490
|
+
| 流程 | 为通过检查而修改 handoff 未覆盖的文件 | 硬失败:撤销无关修改 |
|
|
491
|
+
| 项目级 | 项目级模式下未扫描全部路由即开始改造 | 硬失败:先完成页面清单 |
|
|
518
492
|
| 项目级 | 项目级模式下未完成全部页面即声称完成 | 硬失败:必须告知进度和剩余页面 |
|
|
519
493
|
| 设计落地 | 设计 HTML / 规范文档被写入项目非业务目录 | 硬失败:撤销,设计修改只落在 src/ 等业务代码 |
|
|
520
494
|
| 功能回归 | 样式改造后原有功能被破坏 | 硬失败:修复后重新验证 |
|
|
521
|
-
| 逐属性校验 |
|
|
522
|
-
| CSS 冲突 | 10.7.5 未执行就进 10.8 | 硬失败:先冲突检测 |
|
|
495
|
+
| 逐属性校验 | 发现不一致且未修复 | 硬失败:零差异后才能声明完成 |
|
|
523
496
|
|
|
524
|
-
### 8.2 规格硬失败(读当次 JSON
|
|
497
|
+
### 8.2 规格硬失败(读当次 JSON 逐项对照)
|
|
525
498
|
|
|
526
499
|
| 类别 | 条件 | 处理 |
|
|
527
500
|
|------|------|------|
|
|
@@ -555,10 +528,9 @@ tags: [handoff, design-tokens, upstream, artifacts, json, modification-checklist
|
|
|
555
528
|
|
|
556
529
|
---
|
|
557
530
|
|
|
558
|
-
##
|
|
531
|
+
## 九、落地完整性校验
|
|
559
532
|
|
|
560
|
-
>
|
|
561
|
-
> 任一项未通过 = 硬失败,必须修正后重新生成。
|
|
533
|
+
> `code-quality` 闸门引用本节。任一项未通过 = 硬失败。
|
|
562
534
|
|
|
563
535
|
### 配置层
|
|
564
536
|
|
|
@@ -588,6 +560,7 @@ tags: [handoff, design-tokens, upstream, artifacts, json, modification-checklist
|
|
|
588
560
|
|
|
589
561
|
- [ ] `element-plus.scss` 视觉规则按 S1 区域映射表逐项写入,值来自 JSON `visual` / `interactionSpecs`
|
|
590
562
|
- [ ] `dark.scss` 对以上视觉规则有暗色覆盖
|
|
563
|
+
- [ ] 样式消费层无跨域 `var()` 引用(见 `design-system.md` TSB 规则)
|
|
591
564
|
|
|
592
565
|
### 共享组件层
|
|
593
566
|
|
|
@@ -632,11 +605,9 @@ tags: [handoff, design-tokens, upstream, artifacts, json, modification-checklist
|
|
|
632
605
|
|
|
633
606
|
---
|
|
634
607
|
|
|
635
|
-
##
|
|
608
|
+
## 十、设计还原度验证
|
|
636
609
|
|
|
637
|
-
> C/T/F/Co/S/P
|
|
638
|
-
> 验证流程包含:区域级验证(10.1-10.7) → 逐属性CSS校验(10.8) → 设计变更同步(10.9)。
|
|
639
|
-
> **未通过项必须修正后才能进入第十一章功能完整性核查。**
|
|
610
|
+
> C/T/F/Co/S/P 完成后读 `references/design-verify.md` 逐项验证;通过后进入第十一章功能核查。
|
|
640
611
|
|
|
641
612
|
---
|
|
642
613
|
|
|
@@ -63,6 +63,31 @@ tags: [design-system, design-tokens, element-plus, theme, css-variables, dark-mo
|
|
|
63
63
|
| `--el-menu-item-height` | 侧栏/垂直菜单项、子菜单 title | 顶栏、页签栏 |
|
|
64
64
|
| `--vts-tabs-height` / `--tabs-height` | 多标签页签栏 | 菜单、表单控件 |
|
|
65
65
|
|
|
66
|
+
## 令牌语义绑定(TSB · Token Semantic Binding)
|
|
67
|
+
|
|
68
|
+
> **统一识别规则**:`--token` 后缀/前缀 → 令牌域;CSS 属性 → 禁止域列表(`PROPERTY_FORBIDDEN`)。只拦截**已知跨域错误**,不靠穷举合法组合。
|
|
69
|
+
|
|
70
|
+
### 识别算法(AI 与机器共用)
|
|
71
|
+
|
|
72
|
+
1. **令牌域** = `classifyToken(--name)`:先看后缀(`-height` / `-width` / `font-size` / `-padding` …),再看前缀表
|
|
73
|
+
2. **属性禁止域** = `PROPERTY_FORBIDDEN[property]`:命中则硬失败
|
|
74
|
+
3. 未列入禁止域的引用默认放行(含 theme-bridge、box-shadow 用色值变量等)
|
|
75
|
+
|
|
76
|
+
### 高频禁止(摘要)
|
|
77
|
+
|
|
78
|
+
| CSS 属性 | 禁止令牌域 | 典型错误 |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `line-height` | typography-size | `var(--font-size-base)` |
|
|
81
|
+
| `height` / `min-height` | typography-size、typography-flow | 用字号变量填高度 |
|
|
82
|
+
| `font-size` | geometry-height、spacing、color | 用 `--control-height` 填字号 |
|
|
83
|
+
| `padding` / `margin` | typography-size | 用 `--font-size-*` 填间距 |
|
|
84
|
+
|
|
85
|
+
### 纪律
|
|
86
|
+
|
|
87
|
+
1. **先语义、后数值** — 看变量定义的是什么,不是数字是否一样
|
|
88
|
+
2. **能 inherit 不重复** — 父级已设行高/高度时,子元素用 `inherit`
|
|
89
|
+
3. **新增 `--*` 先归类** — 按下方后缀/前缀规则归入正确令牌域,禁止在业务样式里混用语义
|
|
90
|
+
|
|
66
91
|
壳层令牌接线关系(值来源:上游设计产出 > 用户/预设 > 模版默认):
|
|
67
92
|
|
|
68
93
|
| 模版令牌 | 执行层消费位置 |
|
|
@@ -7,9 +7,7 @@ tags: [handoff, verify, css-audit, design-sync, hard-fail]
|
|
|
7
7
|
|
|
8
8
|
# 设计还原度验证
|
|
9
9
|
|
|
10
|
-
>
|
|
11
|
-
> C/T/F/Co/S/P 改造执行完毕后,按本文件逐项验证还原度。
|
|
12
|
-
> **未通过项必须修正后才能进入功能完整性核查和 code-quality 闸门。**
|
|
10
|
+
> C/T/F/Co/S/P 完成后按本文件逐项验证;未通过项修正后再做 `design-handoff.md` 第十一章功能核查。
|
|
13
11
|
|
|
14
12
|
## 验证流程总览
|
|
15
13
|
|
|
@@ -37,18 +35,20 @@ tags: [handoff, verify, css-audit, design-sync, hard-fail]
|
|
|
37
35
|
|
|
38
36
|
> **验证真相源顺序**:当次 handoff JSON(`structureRequirements` + `interactionSpecs`)> 设计 HTML > 设计 skill references > 模板出厂默认值。
|
|
39
37
|
|
|
40
|
-
1. 读取
|
|
38
|
+
1. 读取 session 或会话中的 handoff JSON(业务项目不创建 `.handoff/`)
|
|
41
39
|
2. 从 JSON 展开**本次验证清单**(非 skill 静态表):
|
|
42
40
|
- `frameworkShell.header` → 顶栏元素逐项
|
|
43
41
|
- `interactionSpecs.tabsActive.underline` → 决定是否检查下划线
|
|
44
42
|
- `interactionSpecs.tableOperate.showIcon` → 决定是否禁止 icon
|
|
45
43
|
- `interactionSpecs.menuActive.*` → 侧栏激活 inset/通栏/圆角
|
|
46
|
-
3. 执行
|
|
44
|
+
3. 执行 handoff check(`--require-session`)作为机器预检,须 **exit 0**
|
|
47
45
|
4. 人工/AI 区域验证(10.2–10.5)对照 JSON 展开项,**禁止**用上一版设计的静态预期
|
|
48
46
|
|
|
49
47
|
### 10.0.1 verify-report 落盘
|
|
50
48
|
|
|
51
|
-
|
|
49
|
+
> 报告是 AI 执行期的内部状态,不作为业务项目交付物;最终回复只汇总结论和待确认偏差。
|
|
50
|
+
|
|
51
|
+
design-verify 完成后可在 session 状态目录写入 `verify-report.json`(可选):
|
|
52
52
|
|
|
53
53
|
```json
|
|
54
54
|
{
|