@qilitt-mickey/vue3-temp-skill 1.1.43 → 1.1.45

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
@@ -93,6 +93,7 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
93
93
  - 对照 `references/code-quality.md` 检查类型、组件复用、API、路由、权限、安全、异常反馈、响应式和可演进性。
94
94
  - 在目标项目执行 `pnpm lint:fix`、`pnpm type-check`;改动构建配置时再执行 `pnpm build`。
95
95
  - **设计文件落地时追加渲染态验收**:变更集含 `oracle`(或效果图带 `data-sid`)时,跑 `node parser/index.js verify`——抽取项目同名 `data-sid` 元素的 computed style,与效果图期望值逐点 diff;缺口按三类归因(选择器落空 / 权重被压 / 语境错位)修正,禁止用 `!important` 掩盖。
96
+ - **设计文件落地时核对登记表覆盖率**:变更集带登记表(`coverage.registry` 或 `--registry`)时,跑 `node parser/index.js match <cs.json> --registry <restore-registry.json>`——`C = A` 且无缺口才可交付;parser **当场以登记表为权威重算**,设计侧自报的 `coverage` 数字不参与。单独核验登记表对词典的通道就绪度用 `node parser/index.js registry <restore-registry.json>`(硬缺口 exit 1、通道缺口列出待补字段)。
96
97
  - 最终说明:命中能力组、修改文件、功能验证、命令结果、未解决问题和下一步。
97
98
 
98
99
  ## 出厂中性 · 变更集驱动(design-apply 架构红线)
package/bin/cli.js CHANGED
@@ -263,7 +263,7 @@ function installSkills(targetKey, projectDir) {
263
263
  }
264
264
 
265
265
  // design-apply 能力组依赖:mapping/ 词典 + parser/ 解析器(变更集落地的运行时依赖)
266
- // parser/fixtures/ 为作者侧回归夹具(A-L 回归步骤的测试数据),不随技能分发,保留在仓库
266
+ // parser/fixtures/ 为作者侧回归夹具(A-O 回归步骤的测试数据),不随技能分发,保留在仓库
267
267
  for (const runtimeDir of ["mapping", "parser"]) {
268
268
  const src = path.join(SKILL_DIR, runtimeDir);
269
269
  if (fs.existsSync(src)) copyDir(src, path.join(dest, runtimeDir), ["fixtures"]);
@@ -25,7 +25,9 @@
25
25
  "custom_style_map": {
26
26
  "font_weight": "font-weight",
27
27
  "padding_x": "padding-inline",
28
- "shadow": "box-shadow"
28
+ "shadow": "box-shadow",
29
+ "height": "height",
30
+ "radius": "border-radius"
29
31
  },
30
32
  "$note": "EP 实证:.el-button--primary 类 = 给通用变量 --el-button-* 赋 --el-color-primary 系列值,无 --el-button-primary-* 独立变量。AI 施工必须以 .el-button--primary 限定选择器作用域(禁止裸写 :root);设计侧调主题主色优先动 --el-color-primary,按钮自动跟随。未列变量(hover-border/outline 等)按同规则推导"
31
33
  },
@@ -44,7 +46,9 @@
44
46
  },
45
47
  "custom_style_map": {
46
48
  "font_weight": "font-weight",
47
- "padding_x": "padding-inline"
49
+ "padding_x": "padding-inline",
50
+ "height": "height",
51
+ "radius": "border-radius"
48
52
  },
49
53
  "$note": "default 按钮直接消费通用变量本体,无 variant 类覆写;primary/danger 与本条目共用通用变量,靠 variant 类作用域隔离"
50
54
  },
@@ -67,7 +71,8 @@
67
71
  "custom_style_map": {
68
72
  "font_weight": "font-weight",
69
73
  "padding_x": "padding-inline",
70
- "radius": "border-radius"
74
+ "radius": "border-radius",
75
+ "height": "height"
71
76
  },
72
77
  "$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"
73
78
  },
@@ -0,0 +1,31 @@
1
+ {
2
+ "$comment": "全局原子层 · 卡片容器组件映射(admin 列表页 .vts-page-card 壳层卡片;registry list-page §11.24 登记的 always 子项 bg_color/radius/border_color/padding_x/padding_y/box_shadow)。样式规则经 src/styles/design-shell.scss 落在 .vts-page-card(设计层文件,非出厂源码)。字段名严格对齐 restore-registry 的 dim(parser 逐项校验)。版本恒 1.0.0(由 SKILL.md 体系版本统一管理)。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "component_card",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus + vue3-web-temp"
9
+ },
10
+ "mappings": {
11
+ "component.card.base": {
12
+ "type": "global_component",
13
+ "component": "VtsPageCard(.vts-page-card 壳层卡片容器)",
14
+ "style_scope": ".vts-page-card",
15
+ "css_vars": {},
16
+ "custom_style_map": {
17
+ "bg_color": "background-color",
18
+ "radius": "border-radius",
19
+ "border_color": "border-color",
20
+ "padding_x": "padding-inline",
21
+ "padding_y": "padding-block",
22
+ "box_shadow": "box-shadow"
23
+ },
24
+ "priority": {
25
+ "strategy": "scope_qualified",
26
+ "reason": "设计层文件以 .vts-page-card 作用域限定即可覆盖出厂卡片默认样式。"
27
+ },
28
+ "$note": "列表页主卡片容器(crud-pages L1 样板 .vts-page-card)。registry §11.24 六项均为 always,变更集必须声明;bg_color/radius/border_color/box_shadow 为视觉,padding_x/padding_y 为卡片内边距(卡片本身内边距归零时由页面内容点位自行内缩)。字段名严格对齐 restore-registry 的 dim,禁止改用 border_radius/shadow/padding 等旧词(那是「声明了落不下去」的头号成因)。"
29
+ }
30
+ }
31
+ }
@@ -22,7 +22,10 @@
22
22
  },
23
23
  "custom_style_map": {
24
24
  "radius": "border-radius",
25
- "height": "height"
25
+ "height": "height",
26
+ "padding_x": "padding-inline",
27
+ "font_size": "font-size",
28
+ "icon_size": "font-size"
26
29
  }
27
30
  },
28
31
  "component.input.height": {
@@ -0,0 +1,34 @@
1
+ {
2
+ "$comment": "全局原子层 · 分页组件映射(EP el-pagination / RePagination 根节点即 el-pagination)。registry list-page §11.83-11.94 登记的 always 子项 height/radius/hover_color/icon_size/gap/text_color/active_bg/active_color/border_color。样式规则经 src/styles/design-shell.scss 落在 .vts-page-card .el-pagination(设计层文件,非出厂源码)。字段名严格对齐 restore-registry 的 dim(parser 逐项校验;registry 11.88 原为 button_hover_color,已对齐为 hover_color 以匹配 host admin.content.pagination 与变更集)。版本恒 1.0.0(由 SKILL.md 体系版本统一管理)。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "component_pagination",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus"
9
+ },
10
+ "mappings": {
11
+ "component.pagination.base": {
12
+ "type": "global_component",
13
+ "component": "ElPagination(RePagination 根节点即 el-pagination)",
14
+ "style_scope": ".vts-page-card .el-pagination",
15
+ "css_vars": {},
16
+ "custom_style_map": {
17
+ "height": "height",
18
+ "radius": "border-radius",
19
+ "hover_color": "color",
20
+ "icon_size": "font-size",
21
+ "gap": "gap",
22
+ "active_bg": "background-color",
23
+ "active_color": "color",
24
+ "border_color": "border-color",
25
+ "text_color": "color"
26
+ },
27
+ "priority": {
28
+ "strategy": "scope_qualified",
29
+ "reason": "作用域限定到 .vts-page-card .el-pagination 即可覆盖 EP 出厂分页样式。"
30
+ },
31
+ "$note": "registry §11.83-11.94 多项均为 always,变更集必须声明;hover_color 为分页整体悬停/激活文字色(对齐 host 的 hover_color 字段名);active_bg/active_color 为当前页按钮底色与文字色;border_color 为分页器边框;text_color/gap/icon_size 为整体文字、间距与翻页图标尺寸。字段名严格对齐 restore-registry 的 dim。"
32
+ }
33
+ }
34
+ }
@@ -28,7 +28,8 @@
28
28
  "height": "height",
29
29
  "radius": "border-radius",
30
30
  "font_size": "font-size",
31
- "padding_x": "padding"
31
+ "padding_x": "padding",
32
+ "icon_size": "font-size"
32
33
  },
33
34
  "$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
35
  },
@@ -43,7 +43,11 @@
43
43
  "desc_color": "--page-desc-color",
44
44
  "actions_gap": "--page-header-actions-gap"
45
45
  },
46
- "custom_style_map": {}
46
+ "custom_style_map": {
47
+ "padding_y": "padding-block",
48
+ "padding_x": "padding-inline",
49
+ "text_color": "color"
50
+ }
47
51
  },
48
52
  "admin.content.filter_area": {
49
53
  "type": "element",
@@ -58,7 +62,14 @@
58
62
  "bg": "--filter-area-bg",
59
63
  "border_bottom": "--filter-area-border-bottom"
60
64
  },
61
- "custom_style_map": {}
65
+ "custom_style_map": {
66
+ "gap": "gap",
67
+ "text_color": "color",
68
+ "font_size": "font-size",
69
+ "text_align": "text-align",
70
+ "icon_size": "font-size",
71
+ "border_color": "border-color"
72
+ }
62
73
  },
63
74
  "admin.content.table.operation_bar": {
64
75
  "type": "element",
@@ -119,7 +130,13 @@
119
130
  "divider_height": "height",
120
131
  "divider_margin_x": "margin-inline",
121
132
  "more_arrow_size": "font-size",
122
- "more_arrow_gap": "gap"
133
+ "more_arrow_gap": "gap",
134
+ "vertical_align": "vertical-align",
135
+ "font_size": "font-size",
136
+ "gap": "gap",
137
+ "bg": "background-color",
138
+ "box_shadow": "box-shadow",
139
+ "radius": "border-radius"
123
140
  },
124
141
  "anchors": [
125
142
  { "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell:has(.re-table-operate)" },
@@ -151,7 +168,9 @@
151
168
  "font_size": "font-size",
152
169
  "text_align": "text-align",
153
170
  "border_bottom": "border-bottom",
154
- "nowrap": "white-space"
171
+ "nowrap": "white-space",
172
+ "gap": "gap",
173
+ "icon_size": "font-size"
155
174
  },
156
175
  "anchors": [
157
176
  { "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__header th.el-table__cell" },
@@ -297,7 +316,9 @@
297
316
  "header_text": "--el-table-header-text-color",
298
317
  "row_hover_bg": "--el-table-row-hover-bg-color"
299
318
  },
300
- "custom_style_map": {}
319
+ "custom_style_map": {
320
+ "bg_color": "background-color"
321
+ }
301
322
  },
302
323
  "admin.content.pagination": {
303
324
  "type": "component",
@@ -311,7 +332,14 @@
311
332
  "active_bg": "--pagination-active-bg",
312
333
  "active_color": "--pagination-active-color"
313
334
  },
314
- "custom_style_map": {}
335
+ "custom_style_map": {
336
+ "margin_bottom": "margin-bottom",
337
+ "padding_y": "padding-block",
338
+ "gap": "gap",
339
+ "text_color": "color",
340
+ "font_size": "font-size",
341
+ "border_color": "border-color"
342
+ }
315
343
  },
316
344
  "admin.content.empty_state": {
317
345
  "type": "element",
@@ -75,7 +75,11 @@
75
75
  "custom_style_map": {
76
76
  "active_indicator_width": "width",
77
77
  "active_indicator_thickness": "height",
78
- "active_indicator_style": "border-radius"
78
+ "active_indicator_style": "border-radius",
79
+ "padding_y": "padding-block",
80
+ "font_size": "font-size",
81
+ "font_weight": "font-weight",
82
+ "text_color": "color"
79
83
  },
80
84
  "anchors": [
81
85
  { "kind": "class", "layer": "host", "target": ".sidebar-container .el-menu-item" },
@@ -132,7 +136,9 @@
132
136
  },
133
137
  "custom_style_map": {
134
138
  "bg": "background-color",
135
- "box_shadow": "box-shadow"
139
+ "box_shadow": "box-shadow",
140
+ "gap": "gap",
141
+ "border_color": "border-color"
136
142
  }
137
143
  },
138
144
  "admin.layout.header.logo_area": {
@@ -190,7 +196,8 @@
190
196
  "custom_style_map": {
191
197
  "icon_size": "font-size",
192
198
  "gap": "gap",
193
- "text_font_size": "font-size"
199
+ "text_font_size": "font-size",
200
+ "text_color": "color"
194
201
  },
195
202
  "$note": "inline_switch 并排切换形态:下拉项平铺为触发器旁切换组,按 v-if 保形切换增量插入,不删原代码"
196
203
  },
@@ -227,7 +234,8 @@
227
234
  "hover_bg": "--el-fill-color-light"
228
235
  },
229
236
  "custom_style_map": {
230
- "icon_size": "font-size"
237
+ "icon_size": "font-size",
238
+ "width": "width"
231
239
  }
232
240
  },
233
241
  "admin.layout.header.setting_button": {
@@ -241,7 +249,9 @@
241
249
  },
242
250
  "custom_style_map": {
243
251
  "icon_size": "font-size",
244
- "width": "width"
252
+ "width": "width",
253
+ "hover_bg": "background-color",
254
+ "text_color": "color"
245
255
  },
246
256
  "$note": "存在性收口默认对象:效果图未出现该按钮时,变更集以 visible:false 声明 → 落地为设计层文件内 .navbar .set-icon { display:none }(禁止删出厂代码行、禁止直接改 lay-navbar/index.vue 表达「这张图不要按钮」)。反向:设计需要该按钮时不声明即可(出厂已常显)。同一 DOM(含 v-tippy 提示)通用,图标/尺寸经本条目 style 字段动态覆盖。"
247
257
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qilitt-mickey/vue3-temp-skill",
3
- "version": "1.1.43",
3
+ "version": "1.1.45",
4
4
  "type": "module",
5
5
  "description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块",
6
6
  "bin": {
@@ -0,0 +1,29 @@
1
+ {
2
+ "$comment": "回归夹具 · 登记表覆盖率欠声明负例。配 registry-sample.json 使用(--registry):夹具只声明 sample#1/sample#2 两条,sample#3(金额列)与 sample#4(状态列)虽有 oracle.sids 却未声明 → 预期 match exit 1,输出含「登记表覆盖率缺口」。",
3
+ "schema": "design.changeset/1.0",
4
+ "changeset_version": "1.0.0",
5
+ "mapping_version": "1.0.0",
6
+ "scene": "admin",
7
+ "changes": [
8
+ {
9
+ "id": "admin.content.table.header_cell",
10
+ "style": { "bg": "钴蓝-9", "padding": "16px" },
11
+ "layer": { "bg": "host", "padding": "host" }
12
+ },
13
+ {
14
+ "id": "admin.content.table.cell",
15
+ "style": { "padding": "16px" },
16
+ "layer": { "padding": "host" }
17
+ }
18
+ ],
19
+ "oracle": {
20
+ "mockup": "运单管理-钴蓝.html",
21
+ "sids": [
22
+ "admin.content.table.header_cell",
23
+ "admin.content.table.cell",
24
+ "admin.content.table.cell_amount",
25
+ "admin.content.table.cell_status"
26
+ ]
27
+ },
28
+ "notes": "本夹具只用于回归登记表覆盖率细闸,不是真实设计交付件。"
29
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "$comment": "V3.2 三声明维度正例(apply_via / layer / structure_ops)。预期:match exit 0;输出含「结构施工 structure_ops」「覆写优先级 priority」「inner 层」(表头文本类字段按 layer 落内层文本盒)。",
2
+ "$comment": " 三声明维度正例(apply_via / layer / structure_ops)+ coverage 覆盖率记账。预期:match exit 0;输出含「结构施工 structure_ops」「覆写优先级 priority」「inner 层」「覆盖率 coverage」且覆盖率校验通过(C = A、gaps 为空)。",
3
3
  "schema": "design.changeset/1.0",
4
4
  "changeset_version": "1.0.0",
5
5
  "mapping_version": "1.0.0",
@@ -52,5 +52,12 @@
52
52
  "admin.content.table.cell_amount"
53
53
  ]
54
54
  },
55
- "notes": "本夹具只用于回归 V3.2 三个声明维度的解析与输出,不是真实设计交付件。"
55
+ "coverage": {
56
+ "registry": "restore-registry.json",
57
+ "registrable": 62,
58
+ "applicable": 3,
59
+ "covered": 3,
60
+ "gaps": []
61
+ },
62
+ "notes": "本夹具只用于回归 三个声明维度的解析与输出,不是真实设计交付件。"
56
63
  }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$comment": "回归夹具 · 登记表硬缺口负例。registry-sample.json 的姊妹负例:引用了一个词典不存在、又没标 pending 的点位 → 预期 registry 子命令 exit 1,输出含「硬缺口」。",
3
+ "schema": "design.restore-registry/1.0",
4
+ "design_scheme": "default",
5
+ "scene": "admin",
6
+ "counts": { "total": 2 },
7
+ "items": [
8
+ { "rule": "bad#1", "group": "样例·表格区", "sid": "admin.content.table.header_cell", "dims": ["padding"], "channel": ["style"], "source": "both", "always": true },
9
+ { "rule": "bad#2", "group": "样例·不存在的点位", "sid": "admin.layout.nonexistent_zone", "dims": ["bg"], "channel": ["style"], "source": "spec", "always": true }
10
+ ]
11
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$comment": "回归夹具 · 登记表样例(不是真实交付件)。6 条登记项示范粒度与字段口径:4 条 always(恒存在,必登)、1 条 pending(点位待补词典)、1 条条件项。用于 M/N 两步:M 校验覆盖率重算能报出欠声明并 exit 1,N 校验通道核验能跑通。",
3
+ "schema": "design.restore-registry/1.0",
4
+ "design_scheme": "default",
5
+ "scene": "admin",
6
+ "counts": { "total": 6 },
7
+ "items": [
8
+ { "rule": "sample#1", "group": "样例·表格区", "sid": "admin.content.table.header_cell", "dims": ["height", "padding"], "channel": ["style", "layer"], "source": "both", "always": true },
9
+ { "rule": "sample#2", "group": "样例·表格区", "sid": "admin.content.table.cell", "dims": ["padding", "padding_y"], "channel": ["style", "layer"], "source": "both", "always": true },
10
+ { "rule": "sample#3", "group": "样例·金额列", "sid": "admin.content.table.cell_amount", "dims": ["align"], "channel": ["style", "structure_ops"], "source": "spec", "always": true },
11
+ { "rule": "sample#4", "group": "样例·状态列", "sid": "admin.content.table.cell_status", "dims": ["form", "bg"], "channel": ["form", "structure_ops"], "source": "spec", "always": true },
12
+ { "rule": "sample#5", "group": "样例·选择列", "sid": "admin.content.table.selection_column", "dims": ["column_width"], "channel": ["style"], "source": "spec", "always": false, "pending": true },
13
+ { "rule": "sample#6", "group": "样例·状态列", "sid": "component.tag.status", "dims": ["bg_color"], "channel": ["style"], "source": "spec", "always": false }
14
+ ]
15
+ }