@qilitt-mickey/vue3-temp-skill 1.1.36 → 1.1.38

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 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
- - 落地一份设计变更集 JSON(上游 project-ui-design 产出,含语义 ID + 抽象样式字段)
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
- - **输入为设计变更集时**:不走常规闭环,改走 `design-apply.md` 协议——变更集是设计技能(project-ui-design)的中立产出(设计侧不感知下游),本 Skill 是统一获取与执行方;parser 匹配出施工坐标后按「结构先行、样式两层转换」落地,并过变更集合规闸门。
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
 
@@ -6,6 +6,7 @@ export const themeVars = {
6
6
  brandPrimary: '',
7
7
  brandHover: '',
8
8
  brandActive: '',
9
+ sidebarBg: '',
9
10
  successColor: '',
10
11
  warningColor: '',
11
12
  errorColor: '',
@@ -3,6 +3,7 @@ export const themeVars = {
3
3
  /** --brand-primary */
4
4
  /** --brand-hover */
5
5
  /** --brand-active */
6
+ /** --sidebar-bg */
6
7
  /** --success-color */
7
8
  /** --warning-color */
8
9
  /** --error-color */
@@ -56,6 +57,7 @@ export const themeVars = {
56
57
  brandPrimary: '' as string,
57
58
  brandHover: '' as string,
58
59
  brandActive: '' as string,
60
+ sidebarBg: '' as string,
59
61
  successColor: '' as string,
60
62
  warningColor: '' as string,
61
63
  errorColor: '' as string,
package/dist/theme.css CHANGED
@@ -6,6 +6,7 @@
6
6
  /* brand_primary → --brand-primary(无出厂值,需项目侧定值) */
7
7
  /* brand_hover → --brand-hover(无出厂值,需项目侧定值) */
8
8
  /* brand_active → --brand-active(无出厂值,需项目侧定值) */
9
+ /* sidebar_bg → --sidebar-bg(无出厂值,需项目侧定值) */
9
10
  /* success_color → --success-color(无出厂值,需项目侧定值) */
10
11
  /* warning_color → --warning-color(无出厂值,需项目侧定值) */
11
12
  /* error_color → --error-color(无出厂值,需项目侧定值) */
@@ -11,6 +11,7 @@
11
11
  "brand_primary": { "token": "--brand-primary", "type": "color", "desc": "品牌主色" },
12
12
  "brand_hover": { "token": "--brand-hover", "type": "color", "desc": "品牌悬停色" },
13
13
  "brand_active": { "token": "--brand-active", "type": "color", "desc": "品牌激活色" },
14
+ "sidebar_bg": { "token": "--sidebar-bg", "type": "color", "desc": "侧栏底色(经 theme.scss data-theme=default → --vts-theme-menu-bg 链生效;浅色侧栏主题勿用此字段)" },
14
15
  "success_color": { "token": "--success-color", "type": "color", "desc": "成功功能色" },
15
16
  "warning_color": { "token": "--warning-color", "type": "color", "desc": "警告功能色" },
16
17
  "error_color": { "token": "--error-color", "type": "color", "desc": "错误功能色" },
@@ -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.0.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。列级声明方式:表格列单元格内 Tag 的形态字段写入该列所属内容点位(如 admin.content.table.area 的 notes 或页面级 pending),组件词典只承接全局默认"
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,5 +1,5 @@
1
1
  {
2
- "$comment": "admin 场景 · 内容区功能点位映射。admin.content.container 为壳层高度模式通道(源码实证,lay-content/index.vue);其余 6 条为页面构图点位:类名为 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,无自定义语义类)。",
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。",
3
3
  "meta": {
4
4
  "layer": "scene",
5
5
  "scene": "admin",
@@ -70,6 +70,55 @@
70
70
  },
71
71
  "custom_style_map": {}
72
72
  },
73
+ "admin.content.table.operation_column": {
74
+ "type": "element",
75
+ "selector": ".vts-table-area .el-table__cell.re-table-operate, .vts-table-area .el-table-fixed-column--right",
76
+ "file": "业务 views(ReTableOperate 渲染,crud-pages.md L9 强制;fixed=right)",
77
+ "style_scope": ".vts-page-card",
78
+ "forms": {
79
+ "text_link": "纯文字链接无图标(对应设计 list-table-action-no-icon=true;ReTableOperate text 档位)",
80
+ "icon_text": "图标+文字(ReTableOperate icon 字段,出厂常见形态)"
81
+ },
82
+ "css_vars": {
83
+ "link_color": "--el-color-primary",
84
+ "danger_color": "--el-color-danger",
85
+ "divider_color": "--vts-border-color"
86
+ },
87
+ "custom_style_map": {
88
+ "align": "text-align",
89
+ "min_width": "min-width",
90
+ "divider_width": "width",
91
+ "divider_height": "height",
92
+ "more_arrow_size": "font-size"
93
+ },
94
+ "$note": "对应设计侧 list-page §5/§26.14:纯文字链接、无图标、短分割线隔离(1px×14px)、>=3 个折叠到更多(带 10px 箭头)、表头文字居中。项目侧落地手段:ReTableOperate 的 list 项去 icon 字段 + type:danger 表达红色删除 + limit 折叠;折叠阈值为组件 props(结构层),不在样式映射内。新增(源自 2026-09-07 场景还原差异分析:操作列带图标/删除非红色为主因之一)"
95
+ },
96
+ "admin.content.table.cell_amount": {
97
+ "type": "element",
98
+ "selector": ".vts-table-area .el-table__cell.col-price, .vts-table-area .el-table__cell.is-right",
99
+ "file": "业务 views(金额列 className 约定,对齐设计 list-table-col-price)",
100
+ "style_scope": ".vts-page-card",
101
+ "css_vars": {},
102
+ "custom_style_map": {
103
+ "align": "text-align",
104
+ "font_variant_numeric": "font-variant-numeric"
105
+ },
106
+ "$note": "对应设计侧 §11.110 col-price:右对齐 + tabular-nums 等宽数字。落地手段:列定义加 class-name=col-price + align=right;「等宽数字」为定性词,施工时译为 font-variant-numeric: tabular-nums。新增(同上差异分析:金额列左对齐/格式异常)"
107
+ },
108
+ "admin.content.table.cell_thumb": {
109
+ "type": "element",
110
+ "selector": ".vts-table-area .el-table__cell.col-thumb",
111
+ "file": "业务 views(缩略图列 className 约定,对齐设计 col-thumb/thumb-box)",
112
+ "style_scope": ".vts-page-card",
113
+ "css_vars": {},
114
+ "custom_style_map": {
115
+ "thumb_width": "width",
116
+ "thumb_height": "height",
117
+ "thumb_radius": "border-radius",
118
+ "column_width": "width"
119
+ },
120
+ "$note": "对应设计侧 §11.108-11.109:列宽 72px 居中,缩略盒 40×40 圆角 6px。落地手段:列 className=col-thumb + el-image 40×40;设计侧按数值字面量直书 thumb_width/height=40px(v1.0 协议第 3 条)。新增(同上差异分析:图片列大图 vs 缩略盒)"
121
+ },
73
122
  "admin.content.table.area": {
74
123
  "type": "component",
75
124
  "component": "ElTable(useTableSearch tableHeight 定高)",
@@ -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",
@@ -146,7 +146,8 @@
146
146
  "file": "src/components/ReLanguageSwitch/src/index.vue",
147
147
  "style_scope": ".navbar",
148
148
  "forms": {
149
- "icon_only": "出厂现状:纯图标触发器(.language-trigger > .language-icon),下拉菜单选语言"
149
+ "icon_only": "出厂现状:纯图标触发器(.language-trigger > .language-icon),下拉菜单选语言",
150
+ "inline_switch": "并排切换形态(下拉项平铺为触发器旁的切换组,按 V3.0 §4.2 v-if 保形切换,不删原代码)"
150
151
  },
151
152
  "css_vars": {
152
153
  "icon_color": "--el-text-color-regular",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qilitt-mickey/vue3-temp-skill",
3
- "version": "1.1.36",
3
+ "version": "1.1.38",
4
4
  "type": "module",
5
5
  "description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块",
6
6
  "bin": {
@@ -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;
@@ -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-H 端到端一键回归 ===\n");
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-H 全部通过,mapping/parser 可提交或发版");
144
+ console.log("\n✔ A-I 全部通过,mapping/parser 可提交或发版");
@@ -117,7 +117,7 @@ node parser/index.js match --batch <changesets-dir>
117
117
  3. **两层都未命中** → 不写任何样式,进待补充清单。
118
118
  4. **值未命中译表且非 hex**(parser 会提示)→ 施工前向用户确认精确值,不猜。
119
119
 
120
- 全局令牌(`global` 字段,**整套主题切换优先通道**)→ `design-tokens.scss` 对应变量(`basic/` 词典翻译,语义值走 `mapping/basic/semantic-values.json` 译表),主色走 `setEpThemeColor()` 链路。
120
+ 全局令牌(`global` 字段,**整套主题切换优先通道**)→ `design-tokens.scss` 对应变量(`basic/` 词典翻译,语义值走 `mapping/basic/semantic-values.json` 译表),主色走 `setEpThemeColor()` 链路。**壳层模块底色注意**:顶栏底色不走 global(无独立令牌),须以 `{"id": "admin.layout.header", "style": {"bg": "<值>"}}` 场景条目声明(scoped 覆盖 .navbar 底色);侧栏底色两者皆可——global 走 `sidebar_bg`(--sidebar-bg 令牌链),场景条目走 `admin.layout.sidebar` 的 `bg`(--vts-theme-menu-bg)。
121
121
 
122
122
  ### 第 4 步 · L3 新模块处理(分级布局)
123
123
 
@@ -134,6 +134,8 @@ node parser/index.js match --batch <changesets-dir>
134
134
  - [ ] 未修改 `src/components/`(Re* 组件库源码——**底线一**)
135
135
  - [ ] 未改动业务逻辑层(API/状态/事件——**底线二**;样式与结构通道内的 DOM 调整除外)
136
136
  - [ ] 两层样式全部落在 `style_scope` 作用域内,无全局泄漏
137
+ - [ ] **类名冲突检查(AI 施工硬性步骤)**:新增 class 之前先在目标文件与同作用域全局样式中检索同名类——已存在时禁止直接追加重复定义,按三选一处理并在交付说明申报:① 语义相同 → **合并**进既有规则;② 语义不同 → 改用带点位前缀的新类名(如 `vts-<语义id末段>`);③ 确需覆盖 → 走作用域内更高优先级(不写 `!important`)。重复类名(尤其跨 `<style>` 块的 scoped 样式重复定义)会触发编辑器/构建报错,**本项不通过不得交付**
138
+ - [ ] **文本溢出回归检查**:改动侧栏菜单/顶栏/页签等含文字的模块后,必须确认「长文本显示」未被破坏(菜单项名称完整可见,必要时保留 ellipsis 溢出策略而不是隐藏/截断);宽度相关字段(width/min-width/padding)改动后逐项目视验证
137
139
  - [ ] `dark.scss` 暗色同步:新增视觉规则在 `html.dark` 有对应覆盖
138
140
  - [ ] 待补充清单已如实反馈(含点位 ID + 缺失字段名),未擅自补映射
139
141
  - [ ] `node parser/index.js build --dry` 通过(mapping 若有临时新增)
@@ -151,7 +153,7 @@ node parser/index.js match --batch <changesets-dir>
151
153
  ## 端到端回归(改 parser/mapping 后必跑)
152
154
 
153
155
  ```bash
154
- node parser/regression.js # 一键跑完 A-H 八步(自动断言退出码与关键输出,任一失败 exit 1 并回显详情)
156
+ node parser/regression.js # 一键跑完 A-I 九步(自动断言退出码与关键输出,任一失败 exit 1 并回显详情)
155
157
  npm run regression # 等价写法
156
158
  ```
157
159
 
@@ -165,10 +167,11 @@ node parser/index.js match parser/fixtures/changeset-neg1.json # D. 负例1
165
167
  node parser/index.js match parser/fixtures/changeset-neg2.json # E. 负例2:exit 1(mapping_version 不匹配)
166
168
  node parser/index.js match parser/fixtures/changeset-neg3.json # F. 负例3:exit 1(禁词/非法 ID/位置违规,逐条列出)
167
169
  node parser/index.js match parser/fixtures/changeset-legacy.json # G. 旧协议:exit 0 + layout 键/schema 历史值两条告警
168
- node parser/index.js build --dry # H. 产物链自检
170
+ node parser/index.js match parser/fixtures/changeset-fullpage-restore.json # H. 整页场景还原样例:exit 0;壳层+内容区全模块 L1 命中;数值字面量(40px 等)透传无 ⚠
171
+ node parser/index.js build --dry # I. 产物链自检
169
172
  ```
170
173
 
171
- 通过标准:regression.js 输出 `A✔ B✔ … H✔` 且 exit 0;分步跑时各步符合注释预期。夹具含义见各文件 `$comment`。
174
+ 通过标准:regression.js 输出 `A✔ B✔ … I✔` 且 exit 0;分步跑时各步符合注释预期。夹具含义见各文件 `$comment`。
172
175
 
173
176
  ## 配套工具(作者/维护侧)
174
177