@qilitt-mickey/vue3-temp-skill 1.1.37 → 1.1.39
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/SKILL.md +11 -2
- package/mapping/component/tag.json +47 -0
- package/mapping/scenes/admin/content.json +66 -4
- package/mapping/scenes/admin/layout.json +28 -4
- package/package.json +1 -1
- package/parser/fixtures/changeset-fullpage-restore.json +81 -0
- package/parser/index.js +8 -2
- package/parser/regression.js +9 -2
- package/references/design-apply.md +13 -4
package/SKILL.md
CHANGED
|
@@ -24,7 +24,7 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
|
|
|
24
24
|
- 做一个订单仪表盘,含统计卡片和趋势图
|
|
25
25
|
- 给现有 Demo 增加附件上传、导出或审批流
|
|
26
26
|
- 把一个页面从 mock 改成真实 API
|
|
27
|
-
-
|
|
27
|
+
- 「按这份设计方案改造全系统」/ 落地设计技能产出的设计文件(用户可能是小白,只会给文件路径或拖入文件;见 §3b)
|
|
28
28
|
|
|
29
29
|
## 运行时只保留三件事
|
|
30
30
|
|
|
@@ -74,7 +74,16 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
|
|
|
74
74
|
- Demo 可以最小化数据和接口,但目录、类型、命名和组件边界要能承接后续开发。
|
|
75
75
|
- 新依赖先检查目标项目;缺失时说明精确版本、原因和构建接线,确认后再安装。
|
|
76
76
|
- 只有目标项目确实存在排除项、占位插件或缺失接线时,才读取 `addon-enable.md` 恢复配置。
|
|
77
|
-
-
|
|
77
|
+
- **输入为设计文件时**:用户给出设计技能(project-ui-design)产出的 JSON 文件(无论叫"设计方案/设计文件/变更集")→ 不走常规闭环,改走 `design-apply.md` 协议——parser 匹配出施工坐标后按「结构先行、样式两层转换」落地,并过变更集合规闸门。
|
|
78
|
+
|
|
79
|
+
### 3b. 小白用户执行纪律(design-apply 场景)
|
|
80
|
+
|
|
81
|
+
使用者默认**不懂设计也不懂代码**,交互遵守四条:
|
|
82
|
+
|
|
83
|
+
1. **全自动默认**:识别为设计文件落地后**直接开始执行 parser match → 结构 → 样式 → 闸门全流程**,不等用户逐步确认,不询问"是否继续";唯一停顿点是文件缺失/版本不匹配/parser 报错——此时用大白话报告并给选择题。
|
|
84
|
+
2. **术语不对用户出现**:对用户不说"变更集/语义 ID/三级匹配/pending/令牌"——说"设计方案/设计点位/自动适配/新增点位/全局样式"。这些词只出现在内部文档与交付说明里。
|
|
85
|
+
3. **无文件时的引导**:用户说"全系统改成 XX 风格"但没给设计文件 → 提示一句话:"请先在设计助手(project-ui-design 技能)里说『我要 XX 风格的全系统设计』拿到设计文件,再回来发给我"。如果本机同时装有设计技能,可直接引导用户回到设计会话完成设计,再回本项目落地。
|
|
86
|
+
4. **交付话术**:完成后用大白话总结(改了哪些页面/哪些地方变了/怎么验收),不输出施工坐标等技术细节;验收引导统一为"运行 `pnpm dev` 打开页面对照看效果,哪里不满意直接说"。
|
|
78
87
|
|
|
79
88
|
### 4. 验证与交付
|
|
80
89
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "全局原子层 · 状态标签组件映射(EP 原生 el-tag)。对应设计侧 list-page §7 状态标签(filled 默认变体)与 component-spec 3.4 状态色映射。新增(2026-09-07 场景还原差异分析:状态/类型列纯文本无 Tag 是还原差异主因之一)。",
|
|
3
|
+
"meta": {
|
|
4
|
+
"layer": "basic",
|
|
5
|
+
"domain": "component_tag",
|
|
6
|
+
"version": "1.1.0",
|
|
7
|
+
"scene": "global",
|
|
8
|
+
"tech_stack": "vue3 + element-plus"
|
|
9
|
+
},
|
|
10
|
+
"mappings": {
|
|
11
|
+
"component.tag.status": {
|
|
12
|
+
"type": "global_component",
|
|
13
|
+
"component": "ElTag",
|
|
14
|
+
"default_props": { "effect": "light" },
|
|
15
|
+
"style_scope": ":root",
|
|
16
|
+
"forms": {
|
|
17
|
+
"filled": "浅色背景+浅边框+语义色文字(EP effect=light,设计侧默认变体)",
|
|
18
|
+
"outlined": "透明背景+语义色边框+语义色文字(EP effect=plain)",
|
|
19
|
+
"solid": "纯色填充+白字(EP effect=dark)",
|
|
20
|
+
"with_icon": "filled + 16px 图标(物流状态等带图标场景)"
|
|
21
|
+
},
|
|
22
|
+
"css_vars": {
|
|
23
|
+
"bg_color": "--el-tag-bg-color",
|
|
24
|
+
"text_color": "--el-tag-text-color",
|
|
25
|
+
"border_color": "--el-tag-border-color"
|
|
26
|
+
},
|
|
27
|
+
"custom_style_map": {
|
|
28
|
+
"height": "height",
|
|
29
|
+
"radius": "border-radius",
|
|
30
|
+
"font_size": "font-size",
|
|
31
|
+
"padding_x": "padding"
|
|
32
|
+
},
|
|
33
|
+
"$note": "状态语义色走 EP 功能色变量:success=--el-color-success / processing=--el-color-primary / warning=--el-color-warning / error=--el-color-danger。设计侧值口径:filled(默认)/outlined/solid/with_icon 四形态;多 Tag 列 >=3 列时四选二规则由设计侧在 changes 中按列声明 form,项目侧按 form 翻译 EP effect。列级声明机制(v1.1.0 澄清):component.tag.status 是 :root 全局默认,逐列差异必须声明为内容点位(admin.content.table.cell_tag.<列语义> 走 pending/L3,或写入该列所属点位的 notes),禁止对全局 ID 声明多份互相覆盖的 form"
|
|
34
|
+
},
|
|
35
|
+
"component.tag.size": {
|
|
36
|
+
"type": "global_token",
|
|
37
|
+
"style_scope": ":root",
|
|
38
|
+
"css_vars": {},
|
|
39
|
+
"custom_style_map": {
|
|
40
|
+
"height": "height",
|
|
41
|
+
"font_size": "font-size",
|
|
42
|
+
"padding_x": "padding"
|
|
43
|
+
},
|
|
44
|
+
"$note": "设计值:高 24px、圆角 6px、字号 12px、内边距 0 8px(list-page §11.64)"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "admin 场景 · 内容区功能点位映射。admin.content.container 为壳层高度模式通道(源码实证,lay-content/index.vue
|
|
2
|
+
"$comment": "admin 场景 · 内容区功能点位映射。admin.content.container 为壳层高度模式通道(源码实证,lay-content/index.vue);其余为页面构图点位:类名为 vue3-temp-skill crud-pages.md L1-L9 标准样板约定,样式规则与令牌已落地(element-plus.scss 消费 design-tokens.scss L235-251 构图令牌,dark.scss 消费 vts-filter-area),存量表格 demo(views/table/{base,treeTable,vxe-table})已对齐样板;pagination 为 Element Plus 实证类(RePagination 根节点即 el-pagination,无自定义语义类)。新增表格细粒度点位(operation_column/cell_amount/cell_thumb),对应设计侧 list-page §26.12-26.15。v1.1.0:operation_column 补 column_width/nowrap(按钮挤行修复);operation_bar 补 with_tools/left_batch 形态与批量按钮配色置灰字段(对应 list-page §4 三件套与批量区规范)。",
|
|
3
3
|
"meta": {
|
|
4
4
|
"layer": "scene",
|
|
5
5
|
"scene": "admin",
|
|
6
6
|
"domain": "content",
|
|
7
|
-
"version": "1.
|
|
7
|
+
"version": "1.1.0",
|
|
8
8
|
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
9
|
},
|
|
10
10
|
"mappings": {
|
|
@@ -62,13 +62,75 @@
|
|
|
62
62
|
"admin.content.table.operation_bar": {
|
|
63
63
|
"type": "element",
|
|
64
64
|
"selector": ".vts-action-bar",
|
|
65
|
-
"file": "业务 views(crud-pages 操作栏 / ReTableBar)",
|
|
65
|
+
"file": "业务 views(crud-pages 操作栏 / ReTableBar);ReTableBar 右侧工具三件套源码实证:刷新 svg-icon + el-dropdown 密度(宽松/默认/紧凑)+ el-popover 列设置(bar.vue L155-243)",
|
|
66
66
|
"style_scope": ".vts-page-card",
|
|
67
|
+
"forms": {
|
|
68
|
+
"with_tools": "工具三件套(刷新/密度/列设置)齐全——设计规范 list-page §4 要求三件套缺一不可(ReTableBar 出厂已具备,此为默认形态)",
|
|
69
|
+
"left_batch": "左侧批量操作区(批量删除红底 + 批量导出白底,未选中置灰 opacity 0.4 + cursor not-allowed)——经 slots.buttons 插入,出厂多数 demo 未用"
|
|
70
|
+
},
|
|
67
71
|
"css_vars": {
|
|
68
72
|
"gap": "--action-bar-gap",
|
|
69
73
|
"padding_y": "--action-bar-padding-y"
|
|
70
74
|
},
|
|
71
|
-
"custom_style_map": {
|
|
75
|
+
"custom_style_map": {
|
|
76
|
+
"btn_height": "height",
|
|
77
|
+
"btn_radius": "border-radius",
|
|
78
|
+
"btn_font_size": "font-size",
|
|
79
|
+
"batch_delete_bg": "background-color",
|
|
80
|
+
"batch_disabled_opacity": "opacity"
|
|
81
|
+
},
|
|
82
|
+
"$note": "对应设计侧 list-page §4/§11.25-11.36:flex 两端对齐、pad 20px 20px 8px、左侧批量(始终展示未选中置灰)、右侧工具三件套。批量删除红底走 batch_delete_bg(--el-color-danger 链);置灰态走 batch_disabled_opacity。v1.1.0 扩字段(2026-09-08 对账:原仅 gap/padding_y 两字段,批量按钮配色/置灰/三件套存在性无承接)。demo 噪音按钮(如『表单提交』)去留属业务层,变更集 notes 申报双层交付后由项目侧业务闭环移除"
|
|
83
|
+
},
|
|
84
|
+
"admin.content.table.operation_column": {
|
|
85
|
+
"type": "element",
|
|
86
|
+
"selector": ".vts-table-area .el-table__cell.re-table-operate, .vts-table-area .el-table-fixed-column--right",
|
|
87
|
+
"file": "业务 views(ReTableOperate 渲染,crud-pages.md L9 强制;fixed=right)",
|
|
88
|
+
"style_scope": ".vts-page-card",
|
|
89
|
+
"forms": {
|
|
90
|
+
"text_link": "纯文字链接无图标(对应设计 list-table-action-no-icon=true;ReTableOperate text 档位)",
|
|
91
|
+
"icon_text": "图标+文字(ReTableOperate icon 字段,出厂常见形态)"
|
|
92
|
+
},
|
|
93
|
+
"css_vars": {
|
|
94
|
+
"link_color": "--el-color-primary",
|
|
95
|
+
"danger_color": "--el-color-danger",
|
|
96
|
+
"divider_color": "--vts-border-color"
|
|
97
|
+
},
|
|
98
|
+
"custom_style_map": {
|
|
99
|
+
"align": "text-align",
|
|
100
|
+
"min_width": "min-width",
|
|
101
|
+
"column_width": "width",
|
|
102
|
+
"nowrap": "white-space",
|
|
103
|
+
"divider_width": "width",
|
|
104
|
+
"divider_height": "height",
|
|
105
|
+
"more_arrow_size": "font-size"
|
|
106
|
+
},
|
|
107
|
+
"$note": "对应设计侧 list-page §5/§26.14:纯文字链接、无图标、短分割线隔离(1px×14px)、>=3 个折叠到更多(带 10px 箭头)、表头文字居中;操作列固定宽 160px + white-space:nowrap 禁止换行(按钮挤行多行 = 还原差异主因之一,v1.1.0 补 column_width/nowrap 字段)。项目侧落地手段:ReTableOperate 的 list 项去 icon 字段 + type:danger 表达红色删除 + limit 折叠 + 列宽 props;折叠阈值为组件 props(结构层),不在样式映射内。fieldPending 机制提示:设计侧声明本点位但未带 min_width/column_width 时,AI 施工必须回填出厂值 160px/nowrap 并在交付说明注明,禁止留空导致按钮换行"
|
|
108
|
+
},
|
|
109
|
+
"admin.content.table.cell_amount": {
|
|
110
|
+
"type": "element",
|
|
111
|
+
"selector": ".vts-table-area .el-table__cell.col-price, .vts-table-area .el-table__cell.is-right",
|
|
112
|
+
"file": "业务 views(金额列 className 约定,对齐设计 list-table-col-price)",
|
|
113
|
+
"style_scope": ".vts-page-card",
|
|
114
|
+
"css_vars": {},
|
|
115
|
+
"custom_style_map": {
|
|
116
|
+
"align": "text-align",
|
|
117
|
+
"font_variant_numeric": "font-variant-numeric"
|
|
118
|
+
},
|
|
119
|
+
"$note": "对应设计侧 §11.110 col-price:右对齐 + tabular-nums 等宽数字。落地手段:列定义加 class-name=col-price + align=right;「等宽数字」为定性词,施工时译为 font-variant-numeric: tabular-nums。新增(同上差异分析:金额列左对齐/格式异常)"
|
|
120
|
+
},
|
|
121
|
+
"admin.content.table.cell_thumb": {
|
|
122
|
+
"type": "element",
|
|
123
|
+
"selector": ".vts-table-area .el-table__cell.col-thumb",
|
|
124
|
+
"file": "业务 views(缩略图列 className 约定,对齐设计 col-thumb/thumb-box)",
|
|
125
|
+
"style_scope": ".vts-page-card",
|
|
126
|
+
"css_vars": {},
|
|
127
|
+
"custom_style_map": {
|
|
128
|
+
"thumb_width": "width",
|
|
129
|
+
"thumb_height": "height",
|
|
130
|
+
"thumb_radius": "border-radius",
|
|
131
|
+
"column_width": "width"
|
|
132
|
+
},
|
|
133
|
+
"$note": "对应设计侧 §11.108-11.109:列宽 72px 居中,缩略盒 40×40 圆角 6px。落地手段:列 className=col-thumb + el-image 40×40;设计侧按数值字面量直书 thumb_width/height=40px(v1.0 协议第 3 条)。新增(同上差异分析:图片列大图 vs 缩略盒)"
|
|
72
134
|
},
|
|
73
135
|
"admin.content.table.area": {
|
|
74
136
|
"type": "component",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "admin 场景 · 布局模块语义 ID 全属性映射(vue3-web-temp 框架组件实证)。每条含结构定位(selector/file)、形态切换(forms)、样式映射(css_vars 优先 + custom_style_map 兜底)。style_scope 为样式必须包裹的容器类名;:root 表示全局令牌层。",
|
|
2
|
+
"$comment": "admin 场景 · 布局模块语义 ID 全属性映射(vue3-web-temp 框架组件实证)。每条含结构定位(selector/file)、形态切换(forms)、样式映射(css_vars 优先 + custom_style_map 兜底)。style_scope 为样式必须包裹的容器类名;:root 表示全局令牌层。v1.1.0:新增 admin.layout.header.collapse_trigger(顶栏内嵌折叠按钮,对应设计侧 unified-framework §6.23;出厂折叠在侧栏底部,header_inline 形态走 v-if 保形插入)。",
|
|
3
3
|
"meta": {
|
|
4
4
|
"layer": "scene",
|
|
5
5
|
"scene": "admin",
|
|
6
6
|
"domain": "layout",
|
|
7
|
-
"version": "1.
|
|
7
|
+
"version": "1.1.0",
|
|
8
8
|
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
9
|
},
|
|
10
10
|
"mappings": {
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"active_indicator_width": "width",
|
|
70
70
|
"active_indicator_style": "border-radius"
|
|
71
71
|
},
|
|
72
|
-
"$note": "侧栏配色挂载点为 html[data-theme='xxx'](theme.scss 8 套预设);设计输出深色侧栏 → Theme=default + Version++(useTheme 规则),浅色 → Theme=light。menu_active_* 主题变量可被 --sidebar-*
|
|
72
|
+
"$note": "侧栏配色挂载点为 html[data-theme='xxx'](theme.scss 8 套预设);设计输出深色侧栏 → Theme=default + Version++(useTheme 规则),浅色 → Theme=light。menu_active_* 主题变量可被 --sidebar-* 覆写变量替换。⚠文本完整性红线:菜单项名称必须完整显示(el-menu 自带 ellipsis 折叠溢出菜单),禁止改 menu 文本截断/隐藏策略;item_height 加大时确认行高不挤压文字。宽度类改动(--sidebar-width)后必须目视验证长菜单名显示。"
|
|
73
73
|
},
|
|
74
74
|
"admin.layout.sidebar.collapse_trigger": {
|
|
75
75
|
"type": "element",
|
|
@@ -96,6 +96,7 @@
|
|
|
96
96
|
"style_scope": ".navbar",
|
|
97
97
|
"default_props": { "height": "var(--vts-bar-height)" },
|
|
98
98
|
"children": [
|
|
99
|
+
"admin.layout.header.collapse_trigger",
|
|
99
100
|
"admin.layout.header.logo_area",
|
|
100
101
|
"admin.layout.header.breadcrumb",
|
|
101
102
|
"admin.layout.header.lang_switch",
|
|
@@ -146,7 +147,8 @@
|
|
|
146
147
|
"file": "src/components/ReLanguageSwitch/src/index.vue",
|
|
147
148
|
"style_scope": ".navbar",
|
|
148
149
|
"forms": {
|
|
149
|
-
"icon_only": "出厂现状:纯图标触发器(.language-trigger > .language-icon),下拉菜单选语言"
|
|
150
|
+
"icon_only": "出厂现状:纯图标触发器(.language-trigger > .language-icon),下拉菜单选语言",
|
|
151
|
+
"inline_switch": "并排切换形态(下拉项平铺为触发器旁的切换组,按 V3.0 §4.2 v-if 保形切换,不删原代码)"
|
|
150
152
|
},
|
|
151
153
|
"css_vars": {
|
|
152
154
|
"icon_color": "--el-text-color-regular",
|
|
@@ -163,6 +165,28 @@
|
|
|
163
165
|
},
|
|
164
166
|
"$note": "inline_switch 并排切换形态需增量插入片段(变更集 form=inline_switch 时按 V3.0 §4.2 v-if 保形切换,不删原代码)"
|
|
165
167
|
},
|
|
168
|
+
"admin.layout.header.collapse_trigger": {
|
|
169
|
+
"type": "element",
|
|
170
|
+
"selector": ".navbar .header-collapse-btn",
|
|
171
|
+
"file": "src/layout/components/lay-navbar/index.vue(顶栏内嵌形态为增量插入;出厂折叠按钮位于侧栏,见 admin.layout.sidebar.collapse_trigger)",
|
|
172
|
+
"style_scope": ".navbar",
|
|
173
|
+
"forms": {
|
|
174
|
+
"header_inline": "顶栏内嵌折叠按钮(设计规范 unified-framework §6.23:40×40 纯图标、无左内边距、与首页页签左对齐、hover 仅文字加深无背景变化)——出厂无此元素,按 ReLanguageSwitch inline_switch 同款 v-if 保形插入机制落地,不删侧栏折叠条代码",
|
|
175
|
+
"sidebar_bottom": "出厂现状:侧栏底部折叠条(SidebarLeftCollapse)",
|
|
176
|
+
"sidebar_center": "侧栏侧缘中点(SidebarCenterCollapse)"
|
|
177
|
+
},
|
|
178
|
+
"css_vars": {
|
|
179
|
+
"icon_color": "--el-text-color-regular",
|
|
180
|
+
"hover_bg": "--el-fill-color-light"
|
|
181
|
+
},
|
|
182
|
+
"custom_style_map": {
|
|
183
|
+
"btn_width": "width",
|
|
184
|
+
"btn_height": "height",
|
|
185
|
+
"icon_size": "font-size",
|
|
186
|
+
"border_radius": "border-radius"
|
|
187
|
+
},
|
|
188
|
+
"$note": "设计规范把折叠按钮定义在顶栏最左(与页签栏首页页签左对齐)。form=header_inline 时 AI 增量插入按钮片段(useApp isCollapse 切换),样式全部走 custom_style_map 生成的 :deep 隔离规则;出厂 sidebar_bottom 形态保留不删(显隐≠删除)。新增(2026-09-08 场景还原对账:设计侧有 §6.23 参数、项目侧无承接点位,折叠按钮位置还原失败的主因)"
|
|
189
|
+
},
|
|
166
190
|
"admin.layout.header.fullscreen": {
|
|
167
191
|
"type": "component",
|
|
168
192
|
"component": "SidebarFullScreen",
|
package/package.json
CHANGED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "端到端示例 · 整页场景还原(对照效果图逐模块提取的完整交付样例,模拟设计技能真实产出)。覆盖:global 主题 + 壳层全模块 + 列表页全字段 + 表格细粒度点位(操作列形态/状态Tag/金额对齐/缩略图)+ pending 新点位。值口径演示:主题色用语义值(钴蓝-N/错误色)、尺寸用数值字面量(28px/40px 等,设计侧 v1.0 协议第 3 条合法通道)、灰阶用临时主题 hex + notes 申报。业务功能差异(新增运单按钮功能、demo 演示按钮去留)不在本变更集范围,走项目侧业务闭环开发(双层交付)。运行:node parser/index.js match <本文件>(cwd 为 skill 根)。",
|
|
3
|
+
"schema": "design.changeset/1.0",
|
|
4
|
+
"changeset_version": "1.0.0",
|
|
5
|
+
"mapping_version": "1.0.0",
|
|
6
|
+
"scene": "admin",
|
|
7
|
+
"layout_type": "vertical",
|
|
8
|
+
"global": {
|
|
9
|
+
"brand_primary": "钴蓝-5",
|
|
10
|
+
"sidebar_bg": "钴蓝-10"
|
|
11
|
+
},
|
|
12
|
+
"changes": [
|
|
13
|
+
{ "id": "admin.layout.sidebar", "style": { "bg": "钴蓝-10" } },
|
|
14
|
+
{ "id": "admin.layout.sidebar.logo_area", "style": { "bg": "钴蓝-10", "title_color": "#FFFFFF" } },
|
|
15
|
+
{
|
|
16
|
+
"id": "admin.layout.sidebar.menu",
|
|
17
|
+
"style": {
|
|
18
|
+
"menu_bg": "钴蓝-10",
|
|
19
|
+
"menu_text": "钴蓝-2",
|
|
20
|
+
"menu_hover_bg": "钴蓝-8",
|
|
21
|
+
"menu_title_hover": "#FFFFFF",
|
|
22
|
+
"sub_menu_bg": "钴蓝-9",
|
|
23
|
+
"sub_menu_active_text": "#FFFFFF",
|
|
24
|
+
"menu_active_bg": "钴蓝-5",
|
|
25
|
+
"menu_active_indicator": "钴蓝-5"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{ "id": "admin.layout.header", "style": { "bg": "#FFFFFF" } },
|
|
29
|
+
{ "id": "admin.layout.header.lang_switch", "form": "inline_switch" },
|
|
30
|
+
{
|
|
31
|
+
"id": "admin.layout.header.user_profile",
|
|
32
|
+
"style": { "avatar_width": "28px", "avatar_height": "28px", "avatar_radius": "全圆角", "name_font_size": "14px", "name_font_weight": "中等" }
|
|
33
|
+
},
|
|
34
|
+
{ "id": "admin.layout.tabs", "form": "chrome", "style": { "bg": "#FFFFFF" } },
|
|
35
|
+
{
|
|
36
|
+
"id": "admin.content.page_header",
|
|
37
|
+
"style": { "title_size": "20px", "title_weight": "加粗", "desc_color": "钴蓝-3", "actions_gap": "8px" }
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "admin.content.filter_area",
|
|
41
|
+
"style": { "radius": "小圆角", "padding_y": "宽松", "padding_x": "宽松", "bg": "#FFFFFF", "border_bottom": "1px solid #F0F0F0" }
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "admin.content.table.operation_bar",
|
|
45
|
+
"style": { "gap": "8px", "padding_y": "紧凑" }
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "admin.content.table.operation_column",
|
|
49
|
+
"form": "text_link",
|
|
50
|
+
"style": { "link_color": "钴蓝-5", "danger_color": "错误色", "align": "center", "divider_color": "#F0F0F0" }
|
|
51
|
+
},
|
|
52
|
+
{ "id": "admin.content.table.area", "style": { "header_bg": "#FAFAFA", "row_hover_bg": "#FAFAFA", "radius": "小圆角" } },
|
|
53
|
+
{ "id": "admin.content.table.cell_amount", "style": { "align": "right", "font_variant_numeric": "等宽数字" } },
|
|
54
|
+
{ "id": "admin.content.table.cell_thumb", "style": { "thumb_width": "40px", "thumb_height": "40px", "thumb_radius": "小圆角" } },
|
|
55
|
+
{ "id": "component.tag.status", "form": "filled", "style": { "height": "24px", "radius": "小圆角" } },
|
|
56
|
+
{ "id": "admin.content.pagination", "style": { "active_bg": "钴蓝-5", "active_color": "#FFFFFF" } }
|
|
57
|
+
],
|
|
58
|
+
"pending": [
|
|
59
|
+
{
|
|
60
|
+
"proposed_id": "admin.content.page_header.greeting",
|
|
61
|
+
"function": "页面标题下的说明副标题(一句话描述页面用途)",
|
|
62
|
+
"parent": "admin.content.page_header"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"proposed_id": "admin.content.table.cell_status_badge",
|
|
66
|
+
"function": "表格状态列的带图标状态胶囊(图标+文字+浅色底)",
|
|
67
|
+
"parent": "admin.content.table.area"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"proposed_id": "admin.content.table.cell_route_arrow",
|
|
71
|
+
"function": "表格线路列的起点到终点箭头展示(如 上海→北京)",
|
|
72
|
+
"parent": "admin.content.table.area"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"proposed_id": "admin.content.table.cell_link",
|
|
76
|
+
"function": "表格内可点击的链接文字单元(如运单号)",
|
|
77
|
+
"parent": "admin.content.table.area"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"notes": "整页场景还原样例(对照效果图逐模块提取)。效果图定制冲突项:侧栏底色用钴蓝-10(极深)而非模板默认 #001529,以用户效果图为准;顶栏保持白底。灰阶临时色申报:白 #FFFFFF、浅灰 #FAFAFA、边框灰 #F0F0F0 为中性色(不属任何主题梯度),按临时主题 hex 直写,全主题通用。页面存在业务结构改动(标题区按钮数量与功能、demo 演示内容去留),需项目侧双层交付:页面结构层走业务闭环开发重建,视觉语义层按本变更集落地。问候语(下午好,张伟)文案属业务层,本变更集只声明其载体形态与样式。"
|
|
81
|
+
}
|
package/parser/index.js
CHANGED
|
@@ -33,7 +33,11 @@ const ROOT = path.resolve(__dirname, "..");
|
|
|
33
33
|
|
|
34
34
|
/** 定性值(非色彩类语义描述,如 中等/全圆角/宽松):不参与译表,AI 按字段语义施工,不告警。
|
|
35
35
|
* 注意:模块级常量必须在 main() 调用前声明(TDZ),勿下移到文件底部。 */
|
|
36
|
-
const QUALITATIVE_RE = /^(
|
|
36
|
+
const QUALITATIVE_RE = /^(中等|加粗|常规|细|粗|小圆角|全圆角|直角|宽松|紧凑|标准|大|中|小|等宽数字)$/;
|
|
37
|
+
/** 数值字面量:带 CSS 单位的精确尺寸(40px / 1.5rem / 50%)——设计侧已消歧的精确值,透传不提示 */
|
|
38
|
+
const NUMERIC_VALUE_RE = /^\d+(\.\d+)?(px|rem|em|%|vh|vw|pt)$/i;
|
|
39
|
+
/** 复合样式字面量:含空格的多段值(如 1px solid #F0F0F0)按已消歧处理(hex 已被禁词校验限定位置) */
|
|
40
|
+
const COMPOSITE_VALUE_RE = /\s/;
|
|
37
41
|
|
|
38
42
|
main();
|
|
39
43
|
|
|
@@ -503,11 +507,13 @@ function buildSemanticValueIndex(dataset) {
|
|
|
503
507
|
return dict;
|
|
504
508
|
}
|
|
505
509
|
|
|
506
|
-
/** 语义值解析:hex 透传 → 中文名查表 → 英文名查表 → null(未命中) */
|
|
510
|
+
/** 语义值解析:hex/rgb/hsl 透传 → 数值/复合字面量透传 → 中文名查表 → 英文名查表 → null(未命中) */
|
|
507
511
|
function resolveSemanticValue(value, valueDict) {
|
|
508
512
|
const v = String(value).trim();
|
|
509
513
|
if (/^#([0-9a-fA-F]{3,8})$/.test(v) || /^(rgb|hsl)a?\(/i.test(v))
|
|
510
514
|
return v;
|
|
515
|
+
if (NUMERIC_VALUE_RE.test(v) || COMPOSITE_VALUE_RE.test(v))
|
|
516
|
+
return v;
|
|
511
517
|
if (valueDict && valueDict[v])
|
|
512
518
|
return valueDict[v];
|
|
513
519
|
return null;
|
package/parser/regression.js
CHANGED
|
@@ -91,6 +91,13 @@ const steps = [
|
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
key: "H",
|
|
94
|
+
name: "match 整页场景还原样例(壳层+内容区全模块 L1 + 数值字面量透传)",
|
|
95
|
+
script: INDEX,
|
|
96
|
+
args: ["match", path.join(FIXTURES, "changeset-fullpage-restore.json")],
|
|
97
|
+
expect: { code: 0, includes: "#245BFF" },
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
key: "I",
|
|
94
101
|
name: "build --dry 产物链自检",
|
|
95
102
|
script: INDEX,
|
|
96
103
|
args: ["build", "--dry"],
|
|
@@ -101,7 +108,7 @@ const steps = [
|
|
|
101
108
|
const results = [];
|
|
102
109
|
let failed = 0;
|
|
103
110
|
|
|
104
|
-
console.log("=== A-
|
|
111
|
+
console.log("=== A-I 端到端一键回归 ===\n");
|
|
105
112
|
|
|
106
113
|
for (const step of steps) {
|
|
107
114
|
const { status, stdout, stderr } = spawnSync(
|
|
@@ -134,4 +141,4 @@ if (failed > 0) {
|
|
|
134
141
|
console.error(`\n✖ ${failed} 步未通过,见上方详情`);
|
|
135
142
|
process.exit(1);
|
|
136
143
|
}
|
|
137
|
-
console.log("\n✔ A-
|
|
144
|
+
console.log("\n✔ A-I 全部通过,mapping/parser 可提交或发版");
|
|
@@ -134,7 +134,15 @@ node parser/index.js match --batch <changesets-dir>
|
|
|
134
134
|
- [ ] 未修改 `src/components/`(Re* 组件库源码——**底线一**)
|
|
135
135
|
- [ ] 未改动业务逻辑层(API/状态/事件——**底线二**;样式与结构通道内的 DOM 调整除外)
|
|
136
136
|
- [ ] 两层样式全部落在 `style_scope` 作用域内,无全局泄漏
|
|
137
|
-
- [ ]
|
|
137
|
+
- [ ] **类名冲突检查(AI 施工硬性步骤)**:新增 class 之前先在目标文件与同作用域全局样式中检索同名类——已存在时禁止直接追加重复定义,按三选一处理并在交付说明申报:① 语义相同 → **合并**进既有规则;② 语义不同 → 改用带点位前缀的新类名(如 `vts-<语义id末段>`);③ 确需覆盖 → 走作用域内更高优先级(不写 `!important`)。重复类名(尤其跨 `<style>` 块的 scoped 样式重复定义)会触发编辑器/构建报错,**本项不通过不得交付**
|
|
138
|
+
- [ ] **文本溢出回归检查**:改动侧栏菜单/顶栏/页签等含文字的模块后,必须确认「长文本显示」未被破坏(菜单项名称完整可见,必要时保留 ellipsis 溢出策略而不是隐藏/截断);宽度相关字段(width/min-width/padding)改动后逐项目视验证
|
|
139
|
+
- [ ] **形态与存在性目视验证(2026-09-08 追加,历史漏还原高发区)**:变更集声明了以下意图时,逐项在页面上确认真实生效,声明了但没做的视同未交付——
|
|
140
|
+
- 语言切换 form=inline_switch → 顶栏出现「中|EN」并排文字(不再是纯图标)
|
|
141
|
+
- 折叠按钮 form=header_inline → 顶栏最左出现 40×40 折叠按钮且与首页页签左对齐
|
|
142
|
+
- 操作栏 form=with_tools/left_batch → 刷新/密度/列设置三件套齐全;批量删除红底/导出白底/未选中置灰
|
|
143
|
+
- 操作列声明过 form 或样式 → 按钮单行不换行(列宽 ≥160px + nowrap)
|
|
144
|
+
- tabs form → 页签形态切换生效(chrome/card);激活态无主题色下划线(设计规范口径)
|
|
145
|
+
- [ ] **dark.scss 暗色同步**:新增视觉规则在 `html.dark` 有对应覆盖
|
|
138
146
|
- [ ] 待补充清单已如实反馈(含点位 ID + 缺失字段名),未擅自补映射
|
|
139
147
|
- [ ] `node parser/index.js build --dry` 通过(mapping 若有临时新增)
|
|
140
148
|
|
|
@@ -151,7 +159,7 @@ node parser/index.js match --batch <changesets-dir>
|
|
|
151
159
|
## 端到端回归(改 parser/mapping 后必跑)
|
|
152
160
|
|
|
153
161
|
```bash
|
|
154
|
-
node parser/regression.js # 一键跑完 A-
|
|
162
|
+
node parser/regression.js # 一键跑完 A-I 九步(自动断言退出码与关键输出,任一失败 exit 1 并回显详情)
|
|
155
163
|
npm run regression # 等价写法
|
|
156
164
|
```
|
|
157
165
|
|
|
@@ -165,10 +173,11 @@ node parser/index.js match parser/fixtures/changeset-neg1.json # D. 负例1
|
|
|
165
173
|
node parser/index.js match parser/fixtures/changeset-neg2.json # E. 负例2:exit 1(mapping_version 不匹配)
|
|
166
174
|
node parser/index.js match parser/fixtures/changeset-neg3.json # F. 负例3:exit 1(禁词/非法 ID/位置违规,逐条列出)
|
|
167
175
|
node parser/index.js match parser/fixtures/changeset-legacy.json # G. 旧协议:exit 0 + layout 键/schema 历史值两条告警
|
|
168
|
-
node parser/index.js
|
|
176
|
+
node parser/index.js match parser/fixtures/changeset-fullpage-restore.json # H. 整页场景还原样例:exit 0;壳层+内容区全模块 L1 命中;数值字面量(40px 等)透传无 ⚠
|
|
177
|
+
node parser/index.js build --dry # I. 产物链自检
|
|
169
178
|
```
|
|
170
179
|
|
|
171
|
-
通过标准:regression.js 输出 `A✔ B✔ …
|
|
180
|
+
通过标准:regression.js 输出 `A✔ B✔ … I✔` 且 exit 0;分步跑时各步符合注释预期。夹具含义见各文件 `$comment`。
|
|
172
181
|
|
|
173
182
|
## 配套工具(作者/维护侧)
|
|
174
183
|
|