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

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
@@ -8,6 +8,8 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
8
8
 
9
9
  # Vue 3 项目开发技能
10
10
 
11
+ > **体系版本:1.0.0**(双 Skill 唯一版本声明点之一;设计侧 project-ui-design 同版)。版本恒定策略:双侧始终同版,不随内容修改递增,仅协议破坏性变更时双侧同步升版。mapping/*.json 的 `meta.version` 与变更集校验均恒为 `1.0.0`,不单独演进。
12
+
11
13
  ## 目标
12
14
 
13
15
  把产品点子快速落到真实 Vue 3 项目中,先形成客户可看的完整 Demo,再保留后续正式开发所需的代码边界。页面可以使用 mock 和最小数据,但不得使用模板演示噪音、虚构项目能力或堆叠无法维护的代码。
@@ -1,5 +1,5 @@
1
1
  {
2
- "$comment": "全局原子层 · 按钮组件映射(EP 原生)。css_vars 优先走 EP 官方变量;custom_style_map 为兜底。作用域 :root(全局组件)。",
2
+ "$comment": "全局原子层 · 按钮组件映射(EP 原生)。EP el-button 无 --el-button-primary-*/--el-button-danger-* 命名空间变量:variant 类(.el-button--primary/--danger)= 给通用变量 --el-button-* 赋语义色值(theme-chalk 源码实证),故 primary/danger 的 css_vars 均指向通用变量,semantic_source 标注该 variant 的语义色源。版本恒 1.0.0(由 SKILL.md 体系版本统一管理)。",
3
3
  "meta": {
4
4
  "layer": "basic",
5
5
  "domain": "component_button",
@@ -12,20 +12,22 @@
12
12
  "type": "global_component",
13
13
  "component": "ElButton",
14
14
  "default_props": { "type": "primary" },
15
- "style_scope": ":root",
15
+ "style_scope": ".el-button--primary(variant 类作用域;禁止裸写 :root——通用变量全按钮共享,作用域纪律是硬约束)",
16
16
  "css_vars": {
17
- "bg_color": "--el-button-primary-bg-color",
18
- "text_color": "--el-button-primary-text-color",
19
- "border_color": "--el-button-primary-border-color",
20
- "hover_bg_color": "--el-button-primary-hover-bg-color",
21
- "active_bg_color": "--el-button-primary-active-bg-color",
22
- "disabled_bg_color": "--el-button-primary-disabled-bg-color"
17
+ "bg_color": "--el-button-bg-color",
18
+ "text_color": "--el-button-text-color",
19
+ "border_color": "--el-button-border-color",
20
+ "hover_bg_color": "--el-button-hover-bg-color",
21
+ "active_bg_color": "--el-button-active-bg-color",
22
+ "disabled_bg_color": "--el-button-disabled-bg-color",
23
+ "semantic_source": "--el-color-primary"
23
24
  },
24
25
  "custom_style_map": {
25
26
  "font_weight": "font-weight",
26
27
  "padding_x": "padding-inline",
27
28
  "shadow": "box-shadow"
28
- }
29
+ },
30
+ "$note": "EP 实证:.el-button--primary 类 = 给通用变量 --el-button-* 赋 --el-color-primary 系列值,无 --el-button-primary-* 独立变量。AI 施工必须以 .el-button--primary 限定选择器作用域(禁止裸写 :root);设计侧调主题主色优先动 --el-color-primary,按钮自动跟随。未列变量(hover-border/outline 等)按同规则推导"
29
31
  },
30
32
  "component.button.default": {
31
33
  "type": "global_component",
@@ -43,7 +45,31 @@
43
45
  "custom_style_map": {
44
46
  "font_weight": "font-weight",
45
47
  "padding_x": "padding-inline"
46
- }
48
+ },
49
+ "$note": "default 按钮直接消费通用变量本体,无 variant 类覆写;primary/danger 与本条目共用通用变量,靠 variant 类作用域隔离"
50
+ },
51
+ "component.button.danger": {
52
+ "type": "global_component",
53
+ "component": "ElButton",
54
+ "default_props": { "type": "danger" },
55
+ "style_scope": ".el-button--danger(variant 类作用域;禁止裸写 :root——通用变量全按钮共享,作用域纪律是硬约束)",
56
+ "css_vars": {
57
+ "bg_color": "--el-button-bg-color",
58
+ "text_color": "--el-button-text-color",
59
+ "border_color": "--el-button-border-color",
60
+ "hover_bg_color": "--el-button-hover-bg-color",
61
+ "hover_text_color": "--el-button-hover-text-color",
62
+ "hover_border_color": "--el-button-hover-border-color",
63
+ "active_bg_color": "--el-button-active-bg-color",
64
+ "disabled_bg_color": "--el-button-disabled-bg-color",
65
+ "semantic_source": "--el-color-danger"
66
+ },
67
+ "custom_style_map": {
68
+ "font_weight": "font-weight",
69
+ "padding_x": "padding-inline",
70
+ "radius": "border-radius"
71
+ },
72
+ "$note": "承接批量删除等危险操作按钮(admin.content.table.operation_bar 引用)。EP 实证:.el-button--danger 类 = 给通用变量 --el-button-* 赋 --el-color-danger 系列值,无 --el-button-danger-* 独立变量。AI 施工必须以 .el-button--danger 限定选择器作用域(禁止裸写 :root);调红的深浅优先动 --el-color-danger"
47
73
  },
48
74
  "component.button.height": {
49
75
  "type": "global_token",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$comment": "全局原子层 · 状态标签组件映射(EP 原生 el-tag)。对应设计侧 list-page §7 状态标签(filled 默认变体)与 component-spec 3.4 状态色映射。新增(2026-09-07 场景还原差异分析:状态/类型列纯文本无 Tag 是还原差异主因之一)。",
2
+ "$comment": "全局原子层 · 状态标签组件映射(EP 原生 el-tag)。对应设计侧 list-page §7 状态标签(filled 默认变体)与 component-spec 3.4 状态色映射。版本恒 1.0.0(由 SKILL.md 体系版本统一管理)。",
3
3
  "meta": {
4
4
  "layer": "basic",
5
5
  "domain": "component_tag",
@@ -30,7 +30,7 @@
30
30
  "font_size": "font-size",
31
31
  "padding_x": "padding"
32
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),组件词典只承接全局默认"
33
+ "$note": "状态语义色走 EP 功能色变量:success=--el-color-success / processing=--el-color-primary / warning=--el-color-warning / error=--el-color-danger。列级声明机制:component.tag.status :root 全局默认,逐列差异必须声明为内容点位(admin.content.table.cell_tag.<列语义> pending/L3,或写入该列 notes),禁止对全局 ID 声明多份互相覆盖的 form"
34
34
  },
35
35
  "component.tag.size": {
36
36
  "type": "global_token",
@@ -1,5 +1,5 @@
1
1
  {
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。",
2
+ "$comment": "admin 场景 · 内容区功能点位映射。admin.content.container 为壳层高度模式通道(lay-content/index.vue 实证);其余为页面构图点位:类名为 vue3-temp-skill crud-pages.md L1-L9 标准样板约定,样式规则与令牌已落地(element-plus.scss 消费 design-tokens.scss 构图令牌,dark.scss 消费 vts-filter-area),存量表格 demo(views/table/{base,treeTable,vxe-table})已对齐样板;pagination 为 Element Plus 实证类(RePagination 根节点即 el-pagination)。版本恒 1.0.0(由 SKILL.md 体系版本统一管理)。",
3
3
  "meta": {
4
4
  "layer": "scene",
5
5
  "scene": "admin",
@@ -62,18 +62,29 @@
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、左侧批量(未选中置灰 opacity 0.4 + not-allowed)、右侧工具三件套缺一不可。分工:本条目管容器布局与置灰;批量删除红色按钮本体走 component.button.danger。demo 噪音按钮去留属业务层,交付说明申报后由项目侧业务闭环移除"
72
83
  },
73
84
  "admin.content.table.operation_column": {
74
85
  "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)",
86
+ "selector": ".vts-table-area .el-table__cell:has(.re-table-operate), .vts-table-area .el-table-fixed-column--right",
87
+ "file": "业务 views(ReTableOperate 渲染于默认插槽,无列语义类;单元格命中靠 :has(.re-table-operate))",
77
88
  "style_scope": ".vts-page-card",
78
89
  "forms": {
79
90
  "text_link": "纯文字链接无图标(对应设计 list-table-action-no-icon=true;ReTableOperate text 档位)",
@@ -87,11 +98,13 @@
87
98
  "custom_style_map": {
88
99
  "align": "text-align",
89
100
  "min_width": "min-width",
101
+ "column_width": "width",
102
+ "nowrap": "white-space",
90
103
  "divider_width": "width",
91
104
  "divider_height": "height",
92
105
  "more_arrow_size": "font-size"
93
106
  },
94
- "$note": "对应设计侧 list-page §5/§26.14:纯文字链接、无图标、短分割线隔离(1px×14px)、>=3 个折叠到更多(带 10px 箭头)、表头文字居中。项目侧落地手段:ReTableOperate list 项去 icon 字段 + type:danger 表达红色删除 + limit 折叠;折叠阈值为组件 props(结构层),不在样式映射内。新增(源自 2026-09-07 场景还原差异分析:操作列带图标/删除非红色为主因之一)"
107
+ "$note": "设计意图(list-page §5/§26.14):纯文字链接无图标、短分割线隔离(1px×14px)、≥3 个折叠到更多(带箭头)、列宽 160px + nowrap 禁止换行。落地断言:form 即结构意图(design-apply 底线二豁免)——form=text_link 时必须删除业务页列定义 operateButtons 各项的 icon 字段,禁止只改 CSS 保留图标冒充落地;设计侧未声明 min_width/column_width AI 施工必须回填出厂值 160px/nowrap 并在交付说明注明,禁止留空导致按钮换行"
95
108
  },
96
109
  "admin.content.table.cell_amount": {
97
110
  "type": "element",
@@ -103,7 +116,7 @@
103
116
  "align": "text-align",
104
117
  "font_variant_numeric": "font-variant-numeric"
105
118
  },
106
- "$note": "对应设计侧 §11.110 col-price:右对齐 + tabular-nums 等宽数字。落地手段:列定义加 class-name=col-price + align=right;「等宽数字」为定性词,施工时译为 font-variant-numeric: tabular-nums。新增(同上差异分析:金额列左对齐/格式异常)"
119
+ "$note": "设计意图(§11.110 col-price):右对齐 + tabular-nums 等宽数字。落地手段:列定义加 class-name=col-price + align=right;「等宽数字」译为 font-variant-numeric: tabular-nums"
107
120
  },
108
121
  "admin.content.table.cell_thumb": {
109
122
  "type": "element",
@@ -117,7 +130,7 @@
117
130
  "thumb_radius": "border-radius",
118
131
  "column_width": "width"
119
132
  },
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 缩略盒)"
133
+ "$note": "设计意图(§11.108-11.109):列宽 72px 居中,缩略盒 40×40 圆角 6px。落地手段:列 className=col-thumb + el-image 40×40"
121
134
  },
122
135
  "admin.content.table.area": {
123
136
  "type": "component",
@@ -1,5 +1,5 @@
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 表示全局令牌层。版本恒 1.0.0(由 SKILL.md 体系版本统一管理,不单独演进)。",
3
3
  "meta": {
4
4
  "layer": "scene",
5
5
  "scene": "admin",
@@ -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",
@@ -147,7 +148,7 @@
147
148
  "style_scope": ".navbar",
148
149
  "forms": {
149
150
  "icon_only": "出厂现状:纯图标触发器(.language-trigger > .language-icon),下拉菜单选语言",
150
- "inline_switch": "并排切换形态(下拉项平铺为触发器旁的切换组,按 V3.0 §4.2 v-if 保形切换,不删原代码)"
151
+ "inline_switch": "并排切换形态(下拉项平铺为触发器旁的切换组)"
151
152
  },
152
153
  "css_vars": {
153
154
  "icon_color": "--el-text-color-regular",
@@ -162,7 +163,29 @@
162
163
  "gap": "gap",
163
164
  "text_font_size": "font-size"
164
165
  },
165
- "$note": "inline_switch 并排切换形态需增量插入片段(变更集 form=inline_switch 时按 V3.0 §4.2 v-if 保形切换,不删原代码)"
166
+ "$note": "inline_switch 并排切换形态:下拉项平铺为触发器旁切换组,按 v-if 保形切换增量插入,不删原代码"
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": "顶栏内嵌折叠按钮:40×40 纯图标、与首页页签左对齐、hover 仅文字加深(出厂无此元素,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 形态代码保留不删(显隐≠删除),设计侧 visible:false 时隐藏侧栏折叠条避免双按钮并存"
166
189
  },
167
190
  "admin.layout.header.fullscreen": {
168
191
  "type": "component",
@@ -247,10 +270,10 @@
247
270
  },
248
271
  "admin.layout.tabs.home_tab": {
249
272
  "type": "element",
250
- "selector": ".tags-view .tags-view-item.is-active.home-item, .tags-view .home-item",
251
- "file": "src/layout/components/lay-tag/index.vue(首页页签,固定首位)",
273
+ "selector": ".tags-view .scroll-item:nth-child(1)",
274
+ "file": "src/layout/components/lay-tag/index.vue(首页页签 = multiTags 首项;真实 DOM 无 .home-item 类)",
252
275
  "style_scope": ".tags-view",
253
- "$comment": "设计侧描述(unified-framework §3):40×40 纯图标按钮(16px home 图标),不可关闭、不可拖拽。项目侧选择器按 vue3-web-temp lay-tag 实证类名核;若类名不符,落地时以源码实证为准并回写本条目",
276
+ "$comment": "真实 DOM:.scroll-item(首项)> .card-tab,图标经 resolveCardTabIcon 渲染 svg-icon.card-tab-icon。设计意图:40×40 纯图标按钮,不可关闭、不可拖拽",
254
277
  "css_vars": {
255
278
  "width": "--vts-tag-card-height",
256
279
  "height": "--vts-tag-card-height"
@@ -260,14 +283,14 @@
260
283
  "icon_color": "color",
261
284
  "divider_color": "border-left-color"
262
285
  },
263
- "$note": "divider(首页页签与首个业务页签间的 1px 竖线分割)属子元素结构样式,设计侧通过 divider_color 表达视觉意图"
286
+ "$note": "divider(首页页签与首个业务页签间的 1px 竖线分割)属子元素结构样式,设计侧通过 divider_color 表达视觉意图。落地口径:首页页签项宽=高=--vts-tag-card-height(40px) 居中,经 .tags-view .scroll-item:nth-child(1) 覆写 padding 实现正方形图标钮"
264
287
  },
265
288
  "admin.layout.tabs.item": {
266
289
  "type": "element",
267
- "selector": ".tags-view .tags-view-item:not(.home-item)",
268
- "file": "src/layout/components/lay-tag/index.vue(业务页签)",
290
+ "selector": ".tags-view .scroll-item:not(:nth-child(1))",
291
+ "file": "src/layout/components/lay-tag/index.vue(业务页签 = multiTags 非首项;真实 DOM 无 .tags-view-item 类)",
269
292
  "style_scope": ".tags-view",
270
- "$comment": "设计侧描述(unified-framework §3):点击菜单新增、同路由不重复,padding 0 12px;激活态仅文字变主色+字重 500,无下划线/背景变化;关闭钮 12×12 始终可见,hover #FF4D4F。样式字段优先走 --vts-tag-card-*(layout-theme.md:card 改色/几何优先改 --vts-tag-card-*,勿另复制选择器)",
293
+ "$comment": "真实 DOM:.scroll-item.is-closable > .card-tab(title + el-icon-close),激活态类 .is-active。设计意图:padding 0 12px、激活态仅文字变主色+字重 500 无下划线、关闭钮 12×12 常显 hover #FF4D4F。card 改色/几何优先走 --vts-tag-card-*(见 layout-theme.md),勿另复制选择器",
271
294
  "css_vars": {
272
295
  "card_height": "--vts-tag-card-height",
273
296
  "card_radius": "--vts-tag-card-radius",
@@ -289,10 +312,10 @@
289
312
  },
290
313
  "admin.layout.tabs.context_menu": {
291
314
  "type": "element",
292
- "selector": ".tags-view .tags-options",
293
- "file": "src/layout/components/lay-tag/index.vue(右键菜单容器)",
294
- "style_scope": ".tags-view",
295
- "$comment": "设计侧描述(unified-framework §3):右键菜单含刷新/关闭左侧/关闭右侧/关闭其他,宽 160px,圆角 8px。vue3-web-temp 实证容器类名为 .tags-options(lay-tag/index.vue 结构实证)",
315
+ "selector": ".tags-view .el-dropdown-menu(页签栏右侧 arrow-down 触发的下拉菜单;el-dropdown 挂 body)",
316
+ "file": "src/layout/components/lay-tag/index.vue(右侧功能按钮 el-dropdown @command=handleCommand)",
317
+ "style_scope": ":global(popper 挂 body,需全局作用域 + .translation 类限定)",
318
+ "$comment": "真实 DOM:el-dropdown(trigger=click placement=bottom-end)+ el-dropdown-menu(class=translation)。设计意图:宽 160px、圆角 8px",
296
319
  "css_vars": {
297
320
  "radius": "--el-popper-border-radius",
298
321
  "item_height": "--el-dropdown-menuItem-height"
@@ -302,7 +325,7 @@
302
325
  "bg": "background-color",
303
326
  "item_font_size": "font-size"
304
327
  },
305
- "$note": "item_height 若 EP 未暴露 popper 级变量,AI 施工时以 .tags-options li { height } 自定义实现并回写本条目——两层机制天然兜底"
328
+ "$note": "item_height 若 EP 未暴露 popper 级变量,AI 施工时以 .translation.el-dropdown-menu li { height } 自定义实现并回写本条目——两层机制天然兜底。作用域注意:dropdown 挂 body,样式不得写 scoped,需全局样式 + .translation 类限定防泄漏"
306
329
  },
307
330
  "admin.layout.content": {
308
331
  "type": "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qilitt-mickey/vue3-temp-skill",
3
- "version": "1.1.38",
3
+ "version": "1.1.40",
4
4
  "type": "module",
5
5
  "description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块",
6
6
  "bin": {
@@ -53,6 +53,7 @@
53
53
  { "id": "admin.content.table.cell_amount", "style": { "align": "right", "font_variant_numeric": "等宽数字" } },
54
54
  { "id": "admin.content.table.cell_thumb", "style": { "thumb_width": "40px", "thumb_height": "40px", "thumb_radius": "小圆角" } },
55
55
  { "id": "component.tag.status", "form": "filled", "style": { "height": "24px", "radius": "小圆角" } },
56
+ { "id": "component.button.danger", "style": { "bg_color": "错误色", "border_color": "错误色", "text_color": "#FFFFFF" } },
56
57
  { "id": "admin.content.pagination", "style": { "active_bg": "钴蓝-5", "active_color": "#FFFFFF" } }
57
58
  ],
58
59
  "pending": [
package/parser/index.js CHANGED
@@ -189,20 +189,20 @@ function matchOne(file, dataset, batchSummary) {
189
189
  console.warn(` ⚠ schema "${changeset.schema}" 为历史值,建议设计侧升级为 "design.changeset/1.0"`);
190
190
  }
191
191
 
192
- // 版本校验(v1.0 硬校验:mapping_version 缺失或不匹配 → 拒绝,与双侧文档承诺一致)
192
+ // 版本校验(mapping_version 缺失或不匹配 → 拒绝。版本恒定 1.0.0,此校验为破坏性升级保险丝:仅双侧同步升版时才会拦截)
193
193
  const versions = new Set(
194
194
  Object.values(dataset.files).map(d => d.meta?.version).filter(Boolean),
195
195
  );
196
196
  const required = changeset.mapping_version;
197
197
  if (!required) {
198
- console.error(`✖ 缺少 mapping_version(v1.0 协议必填;获取方式:parser list 输出头部的映射集版本)`);
198
+ console.error(`✖ 缺少 mapping_version(v1.0 协议必填;恒填 "1.0.0"——词典版本恒定策略)`);
199
199
  batchSummary?.invalid.push(path.basename(file));
200
200
  if (!batchSummary)
201
201
  process.exit(1);
202
202
  return;
203
203
  }
204
204
  if (!versions.has(required)) {
205
- console.error(`✖ 变更集依赖映射表版本 ${required},当前映射集版本为 ${[...versions].join("/")},不兼容 → 拒绝执行`);
205
+ console.error(`✖ 变更集依赖映射表版本 ${required},当前映射集版本为 ${[...versions].join("/")},不兼容 → 拒绝执行(正常应恒填 "1.0.0";出现此错误通常意味着词典已发生破坏性协议升级,请与项目侧核对)`);
206
206
  batchSummary?.invalid.push(path.basename(file));
207
207
  if (!batchSummary)
208
208
  process.exit(1);
@@ -527,9 +527,9 @@ function cmdList(args, dataset) {
527
527
  const index = buildMergedIndex(dataset);
528
528
  const ids = Object.keys(index).sort();
529
529
  const filtered = scene ? ids.filter(id => id.startsWith(`${scene}.`) || !/^(admin|portal|dashboard)\./.test(id)) : ids;
530
- // v1.0:头部输出映射集版本(供设计侧填 mapping_version,词汇约束下发时随清单同步)
530
+ // v1.0:头部输出映射集版本(版本恒定 1.0.0,由 SKILL.md 体系版本统一管理;此处仅健康检查展示)
531
531
  const versions = [...new Set(Object.values(dataset.files).map(d => d.meta?.version).filter(Boolean))];
532
- console.log(`映射集版本:${versions.join(" / ")}(变更集 mapping_version 应填其中之一)`);
532
+ console.log(`映射集版本:${versions.join(" / ")}(变更集 mapping_version 恒填 1.0.0)`);
533
533
  console.log(`共 ${filtered.length} 条语义 ID${scene ? `(scene=${scene} + 全局)` : ""}:`);
534
534
  for (const id of filtered) {
535
535
  const e = index[id];
File without changes
@@ -9,7 +9,7 @@ tags: [design-apply, changeset, semantic-id, mapping, parser, theme, layout]
9
9
 
10
10
  ## 定位
11
11
 
12
- 本能力组是**双 Skill 链路的项目侧执行端**:统一获取上游设计技能产出的「语义 ID 变更集」JSON(`design.changeset/1.0`,协议技术栈中立),由本 Skill 负责翻译并落地到目标项目(vue3-web-temp 及派生项目)。上游设计技能为 **project-ui-design**,协议文档 `references/changeset-schema.md` v1.0)。
12
+ 本能力组是**双 Skill 链路的项目侧执行端**:统一获取上游设计技能产出的「语义 ID 变更集」JSON(`design.changeset/1.0`,协议技术栈中立),由本 Skill 负责翻译并落地到目标项目(vue3-web-temp 及派生项目)。上游设计技能为 **project-ui-design**,协议文档见其 `references/changeset-schema.md`。
13
13
 
14
14
  ```
15
15
  设计变更集 JSON(设计技能产出,中立协议)
@@ -26,7 +26,7 @@ parser match(确定性翻译)→ 施工坐标 → AI 按坐标改代码 →
26
26
  变更集输入有两条来路,处理方式相同:
27
27
 
28
28
  1. **直接输入**:用户/上游直接给出变更集 JSON 文件或内容。
29
- 2. **设计技能产出**:用户在设计会话产出变更集后转来落地。若用户尚未产出,可先**下发词汇约束**提升命中率——把 `node parser/index.js list --verbose` 的点位清单(ID + 字段 + 形态枚举)与头部映射集版本号一并提供给设计侧(设计侧据此填 `mapping_version`),设计侧按约束输出(约束外意图走其 pending 通道,落地时按 L3 处理)。
29
+ 2. **设计技能产出**:用户在设计会话产出变更集后转来落地。若用户尚未产出,可先**下发词汇约束**提升命中率——把 `node parser/index.js list --verbose` 的点位清单(ID + 字段 + 形态枚举)一并提供给设计侧(`mapping_version` 恒为 `1.0.0`,设计侧无需查询版本),设计侧按约束输出(约束外意图走其 pending 通道,落地时按 L3 处理)。
30
30
 
31
31
  无论哪条来路,落地流程一律走下文「执行流程」。
32
32
 
@@ -35,8 +35,8 @@ parser match(确定性翻译)→ 施工坐标 → AI 按坐标改代码 →
35
35
  ```jsonc
36
36
  {
37
37
  "schema": "design.changeset/1.0", // 协议版本(parser 兼容历史值 design-changeset/v1,新输出一律用 1.0)
38
- "changeset_version": "1.0.0", // 变更集自身版本
39
- "mapping_version": "1.0.0", // 必填:依赖的映射集版本(parser list 头部输出;缺失/不匹配 parser 拒绝)
38
+ "changeset_version": "1.0.0", // 恒填 "1.0.0"
39
+ "mapping_version": "1.0.0", // 恒填 "1.0.0":版本由双侧 SKILL.md 体系版本统一管理,词典不单独演进。parser 校验口径 = 变更集值 ∈ 词典版本集合(恒通过);仅协议破坏性升级时双侧同步升版
40
40
  "scene": "admin", // 场景前缀,须与 mapping 场景域一致
41
41
  "layout_type": "vertical", // 标准布局枚举:vertical / horizontal / mix(字段名固定 layout_type,非 layout)
42
42
  "global": { "brand_primary": "钴蓝-5" }, // 可选:全局令牌通道(整套主题切换优先走此节点;值 = 语义名或临时主题 hex)
@@ -60,8 +60,8 @@ parser match(确定性翻译)→ 施工坐标 → AI 按坐标改代码 →
60
60
  - `style` 字段为**抽象视觉语义**(`menu_bg`、`radius`),不得出现 CSS 变量名、选择器、`!important`、技术栈词汇。值口径:官方 5 套主题用语义名(`钴蓝-5`,译表见 `mapping/basic/semantic-values.json`);库外临时主题直接 hex + `notes` 申报派生口径。
61
61
  - `position` 用相对方位词,不用像素坐标。
62
62
  - `visible: false` 只做隐藏,**永不删除代码**。
63
- - `pending` 数组声明的是设计侧新点位,直接归入 L3 处理(不是错误)。
64
- - parser v1.0 校验已实现:schema 硬校验、mapping_version 缺失/不匹配拒绝、禁词与 hex 位置校验、语义 ID 命名校验。
63
+ - `pending` 数组声明的是设计侧新点位,直接归入 L3 处理(不是错误)。**注意:pending 不是施工指令**——L3 施工的内容以 `changes[]` 中同 ID 新条目声明的意图为准;设计侧只登记 pending、未在 changes[] 声明意图的点位,落地时按出厂现状处理并在待补充清单中反馈「该点位设计意图缺失」。
64
+ - parser 校验已实现:schema 硬校验、mapping_version 缺失/不匹配拒绝、禁词与 hex 位置校验、语义 ID 命名校验。
65
65
 
66
66
  ## 执行流程(按序,禁止跳步)
67
67
 
@@ -99,7 +99,7 @@ node parser/index.js match --batch <changesets-dir>
99
99
 
100
100
  ### 第 3 步 · 样式落地(两层转换 + 语义值译表)
101
101
 
102
- 对每个 `style` 字段,按 parser 转换指令执行(parser 已把语义值解析为精确值,如 `钴蓝-5` → `#245BFF`):
102
+ 对每个 `style` 字段,按 parser 转换指令执行(parser 已把语义值解析为精确值,如 `钴蓝-5` → `#245BFF`)。**冲突裁决规则(免问):凡变更集声明与项目出厂现状/模板既有口径冲突,一律按变更集执行——变更集是唯一施工依据,不反问、不逐次确认。**
103
103
 
104
104
  1. **css_vars 层(优先)**:在条目 `style_scope` 作用域内覆盖该 CSS 变量。
105
105
  ```scss
@@ -136,7 +136,13 @@ node parser/index.js match --batch <changesets-dir>
136
136
  - [ ] 两层样式全部落在 `style_scope` 作用域内,无全局泄漏
137
137
  - [ ] **类名冲突检查(AI 施工硬性步骤)**:新增 class 之前先在目标文件与同作用域全局样式中检索同名类——已存在时禁止直接追加重复定义,按三选一处理并在交付说明申报:① 语义相同 → **合并**进既有规则;② 语义不同 → 改用带点位前缀的新类名(如 `vts-<语义id末段>`);③ 确需覆盖 → 走作用域内更高优先级(不写 `!important`)。重复类名(尤其跨 `<style>` 块的 scoped 样式重复定义)会触发编辑器/构建报错,**本项不通过不得交付**
138
138
  - [ ] **文本溢出回归检查**:改动侧栏菜单/顶栏/页签等含文字的模块后,必须确认「长文本显示」未被破坏(菜单项名称完整可见,必要时保留 ellipsis 溢出策略而不是隐藏/截断);宽度相关字段(width/min-width/padding)改动后逐项目视验证
139
- - [ ] `dark.scss` 暗色同步:新增视觉规则在 `html.dark` 有对应覆盖
139
+ - [ ] **形态与存在性目视验证(历史漏还原高发区,声明即必须验证,没做视同未交付)**:变更集声明了以下意图时,逐项在页面上确认真实生效——
140
+ - 语言切换 form=inline_switch → 顶栏出现「中|EN」并排文字(不再是纯图标)
141
+ - 折叠按钮 form=header_inline → 顶栏最左出现 40×40 折叠按钮且与首页页签左对齐;**同时侧栏底部出厂折叠条按设计隐藏(visible:false 声明时)**,避免双折叠按钮并存
142
+ - 操作栏 form=with_tools/left_batch → 刷新/密度/列设置三件套齐全;批量删除红底/导出白底/未选中置灰
143
+ - 操作列 form=text_link → **业务列定义的 icon 字段已移除**(纯文字无图标,只改 CSS 保留图标 = 未还原);按钮单行不换行(列宽 ≥160px + nowrap);删除项红色;≥3 个折叠「更多」带箭头
144
+ - tabs form → 页签形态切换生效(chrome/card);激活态无主题色下划线(设计规范口径)
145
+ - [ ] **dark.scss 暗色同步**:新增视觉规则在 `html.dark` 有对应覆盖
140
146
  - [ ] 待补充清单已如实反馈(含点位 ID + 缺失字段名),未擅自补映射
141
147
  - [ ] `node parser/index.js build --dry` 通过(mapping 若有临时新增)
142
148
 
@@ -175,6 +181,6 @@ node parser/index.js build --dry # I. 产物链自检
175
181
 
176
182
  ## 配套工具(作者/维护侧)
177
183
 
178
- - **watch 模式(§3.4.3 开发调试)**:`node parser/watch.js` 或 `npm run mapping:watch`——监听 mapping/ 下 JSON 变更,自动「校验 + 重编 dist/」;校验失败不杀进程,修正后自动重试。
179
- - **业务级覆写 API(§3.4.4.3,链路 A 配套)**:`import { themeVars, overrideMapping } from '<skill>/dist/theme-vars.js'`——仅覆写指定字段,不改动基础映射;strict 模式下覆写词典外字段直接报错(防拼错静默失效)。当前 vue3-web-temp 不引入(链路 A 后置),服务于未来空白项目。
180
- - **mapping 版本流程(§3.4.5)**:mapping/ 各文件 `meta.version` 语义化递增;`release.js` 发版前自动执行 `parser build` 刷新 dist/(§3.4.3 正式发布),产物随 NPM 包发布。
184
+ - **watch 模式**:`node parser/watch.js` 或 `npm run mapping:watch`——监听 mapping/ 下 JSON 变更,自动「校验 + 重编 dist/」;校验失败不杀进程,修正后自动重试。
185
+ - **业务级覆写 API**:`import { themeVars, overrideMapping } from '<skill>/dist/theme-vars.js'`——仅覆写指定字段,不改动基础映射;strict 模式下覆写词典外字段直接报错(防拼错静默失效)。当前 vue3-web-temp 不引入,服务于未来空白项目。
186
+ - **mapping 版本流程**:所有 mapping/*.json `meta.version` 恒为 `1.0.0`(由 SKILL.md 体系版本统一管理);`release.js` 发版前自动执行 `parser build` 刷新 dist/,产物随 NPM 包发布。