@qilitt-mickey/vue3-temp-skill 1.1.41 → 1.1.43
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 +6 -3
- package/bin/cli.js +1 -1
- package/mapping/scenes/admin/content.json +157 -5
- package/mapping/scenes/admin/layout.json +105 -3
- package/package.json +1 -1
- package/parser/fixtures/changeset-neg1.json +2 -11
- package/parser/fixtures/changeset-v32-fields.json +56 -0
- package/parser/fixtures/fake-project/src/styles/app.scss +5 -0
- package/parser/fixtures/fake-project/src/views/list.vue +13 -0
- package/parser/fixtures/verify/actual.json +18 -0
- package/parser/fixtures/verify/oracle.json +21 -0
- package/parser/index.js +581 -8
- package/parser/regression.js +35 -6
- package/parser/validator.js +69 -0
- package/references/code-quality.md +25 -6
- package/references/crud-pages.md +35 -9
- package/references/design-apply.md +149 -15
package/SKILL.md
CHANGED
|
@@ -51,7 +51,7 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
|
|
|
51
51
|
| `files-and-editors` | 附件、预览、下载、富文本、二维码 | `file-management.md`、`download-export.md`、`rich-text.md`、`qrcode-barcode.md` |
|
|
52
52
|
| `realtime-and-mobile` | WebSocket、移动端、微信、验证码、动效 | 对应专项 reference |
|
|
53
53
|
| `data-compare` | 编辑页变更对比和汇总 | `data-compare.md` |
|
|
54
|
-
| `design-apply` | 设计变更集落地:语义 ID
|
|
54
|
+
| `design-apply` | 设计变更集落地:语义 ID 三级匹配、结构/形态/两层样式转换、锚点与结构施工、覆写提权、渲染态验收、合规闸门 | `design-apply.md`、`mapping/`、`parser/` |
|
|
55
55
|
|
|
56
56
|
## 工作流
|
|
57
57
|
|
|
@@ -76,13 +76,14 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
|
|
|
76
76
|
- Demo 可以最小化数据和接口,但目录、类型、命名和组件边界要能承接后续开发。
|
|
77
77
|
- 新依赖先检查目标项目;缺失时说明精确版本、原因和构建接线,确认后再安装。
|
|
78
78
|
- 只有目标项目确实存在排除项、占位插件或缺失接线时,才读取 `addon-enable.md` 恢复配置。
|
|
79
|
-
- **输入为设计文件时**:用户给出设计技能(project-ui-design)产出的 JSON 文件(无论叫"设计方案/设计文件/变更集")→ 不走常规闭环,改走 `design-apply.md`
|
|
79
|
+
- **输入为设计文件时**:用户给出设计技能(project-ui-design)产出的 JSON 文件(无论叫"设计方案/设计文件/变更集")→ 不走常规闭环,改走 `design-apply.md` 协议——先跑 `node parser/index.js audit` 复核锚点(挂载点/死通道),再按「结构先行(`structure_ops`)、样式两层转换、必要时覆写提权(`priority`)」落地,最后过变更集合规闸门。变更集新增三类声明维度:`apply_via`(落点通道)/ `layer`(`host` 宿主盒 / `inner` 内层文本盒)/ `structure_ops`(数据·结构驱动点位的结构操作);词典条目对应新增 `anchors` / `preconditions` / `priority`。
|
|
80
80
|
|
|
81
81
|
### 3b. 小白用户执行纪律(design-apply 场景)
|
|
82
82
|
|
|
83
83
|
使用者默认**不懂设计也不懂代码**,交互遵守四条:
|
|
84
84
|
|
|
85
85
|
1. **全自动默认**:识别为设计文件落地后**直接开始执行 parser match → 结构 → 样式 → 闸门全流程**,不等用户逐步确认,不询问"是否继续";唯一停顿点是文件缺失/版本不匹配/parser 报错——此时用大白话报告并给选择题。
|
|
86
|
+
**禁止以「待确认」搁置可落地项**:词典缺 ID / 缺字段枚举 / 缺 form 属**能力缺口**,当场补临时映射并落地(出厂文件仅在补通道时可动,交付说明单列申报);只有「设计侧没给值」才是**意图缺口**,去向是回流设计侧补齐,不是问用户要不要做。
|
|
86
87
|
2. **术语不对用户出现**:对用户不说"变更集/语义 ID/三级匹配/pending/令牌"——说"设计方案/设计点位/自动适配/新增点位/全局样式"。这些词只出现在内部文档与交付说明里。
|
|
87
88
|
3. **无文件时的引导**:用户说"全系统改成 XX 风格"但没给设计文件 → 提示一句话:"请先在设计助手(project-ui-design 技能)里说『我要 XX 风格的全系统设计』拿到设计文件,再回来发给我"。如果本机同时装有设计技能,可直接引导用户回到设计会话完成设计,再回本项目落地。
|
|
88
89
|
4. **交付话术**:完成后用大白话总结(改了哪些页面/哪些地方变了/怎么验收),不输出施工坐标等技术细节;验收引导统一为"运行 `pnpm dev` 打开页面对照看效果,哪里不满意直接说"。
|
|
@@ -91,6 +92,7 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
|
|
|
91
92
|
|
|
92
93
|
- 对照 `references/code-quality.md` 检查类型、组件复用、API、路由、权限、安全、异常反馈、响应式和可演进性。
|
|
93
94
|
- 在目标项目执行 `pnpm lint:fix`、`pnpm type-check`;改动构建配置时再执行 `pnpm build`。
|
|
95
|
+
- **设计文件落地时追加渲染态验收**:变更集含 `oracle`(或效果图带 `data-sid`)时,跑 `node parser/index.js verify`——抽取项目同名 `data-sid` 元素的 computed style,与效果图期望值逐点 diff;缺口按三类归因(选择器落空 / 权重被压 / 语境错位)修正,禁止用 `!important` 掩盖。
|
|
94
96
|
- 最终说明:命中能力组、修改文件、功能验证、命令结果、未解决问题和下一步。
|
|
95
97
|
|
|
96
98
|
## 出厂中性 · 变更集驱动(design-apply 架构红线)
|
|
@@ -126,5 +128,6 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
|
|
|
126
128
|
- 功能:...
|
|
127
129
|
- `pnpm lint:fix`:通过 | 失败(原因)
|
|
128
130
|
- `pnpm type-check`:通过 | 失败(原因)
|
|
129
|
-
-
|
|
131
|
+
- 设计验收:无 oracle 时 N/A | 逐点 diff 结果(命中 N / 缺口 M,归因与修正)
|
|
132
|
+
- 缺口回流:无 | 仅限「设计侧未给值」的维度(列出维度名,注明已回流设计侧补齐)
|
|
130
133
|
```
|
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-
|
|
266
|
+
// parser/fixtures/ 为作者侧回归夹具(A-L 回归步骤的测试数据),不随技能分发,保留在仓库
|
|
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"]);
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"admin.content.container": {
|
|
12
12
|
"type": "element",
|
|
13
13
|
"selector": ".main-content[data-content-mode='fixed'], .main-content[data-content-mode='scroll'], .main-content:has(.vts-page-card), .main-content:has(.vts-page-fill)",
|
|
14
|
-
"file": "src/layout/components/lay-content/index.vue
|
|
14
|
+
"file": "src/layout/components/lay-content/index.vue(滚动归属:data-content-mode 显式优先,自动探测带 :not([data-content-mode]) 守卫兜底)+ src/styles/element-plus.scss(填满通道:中性属性 [data-fill])",
|
|
15
15
|
"style_scope": ":global(壳层样式,非 scoped 页面样式)",
|
|
16
16
|
"css_vars": {
|
|
17
17
|
"content_padding": "--vts-margin",
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"modes": {
|
|
27
27
|
"fixed": "data-content-mode='fixed':display:flex; flex:1 1 auto; height:100%; min-height:0; overflow:hidden(收回 el-scrollbar__view/.grow 祖先链)",
|
|
28
28
|
"scroll": "data-content-mode='scroll':flex:0 0 auto; min-height:100%; overflow:visible(整页滚动)",
|
|
29
|
-
"auto": ":has(.vts-page-card|.vts-page-fill) 自动定高;未标记且无钩子类 →
|
|
29
|
+
"auto": ":has(.vts-page-card|.vts-page-fill) 自动定高;未标记且无钩子类 → 滚动页(向后兼容)。自动分支带 :not([data-content-mode]) 守卫,与显式声明互斥"
|
|
30
30
|
},
|
|
31
|
-
"$note": "
|
|
31
|
+
"$note": "⚠列表区保命通道(**结构层**,设计还原禁止改写):**滚动归属** = 页面根节点 data-content-mode(fixed/scroll 优先;未声明走 :has() 自动探测兜底,自动分支带 :not([data-content-mode]) 守卫与显式声明互斥——显式 scroll 的页面内含 .vts-page-card 时定高分支不得反压,否则整页滚动断裂)。**填满剩余高度** = 中性属性 data-fill(element-plus.scss 已实现:display:flex; flex:1 1 auto; min-height:0; overflow:hidden;data-fill=\"row\" 横向分栏),从页面根到表格/画布容器之间**每个需填满的层级节点**都要挂。⚠**结构/视觉解耦(本通道存在的意义)**:定高链只认属性不认类名 ⇒ 视觉容器可被设计层整体替换(el-card.vts-page-card → 通栏 div / 自绘容器),换容器时把 data-fill 平移到新容器及其「体」层即可,高度链不断、useTableSearch 几何实测照常、表格自滚动正常。双向禁止:① 改写壳层结构层规则(lay-content 的 .main-content[data-content-mode]、element-plus.scss 的 [data-fill])来换还原效果;② 以「保高度」为由拒绝设计改容器/内边距/去卡片。⚠壳层 lay-content 禁止硬编码 data-content-mode(曾因壳层代打 scroll 压掉自动探测,vts-page-card 列表页定高链断裂、useTableSearch 高度失准、列表区整体崩坏——已实证回退)。出厂 DOM 不带模式属性(中性),换设计只换页面根节点的声明值与 data-fill 挂载点。"
|
|
32
32
|
},
|
|
33
33
|
"admin.content.page_header": {
|
|
34
34
|
"type": "element",
|
|
@@ -80,6 +80,20 @@
|
|
|
80
80
|
"batch_delete_bg": "background-color",
|
|
81
81
|
"batch_disabled_opacity": "opacity"
|
|
82
82
|
},
|
|
83
|
+
"anchors": [
|
|
84
|
+
{ "kind": "class", "layer": "host", "target": ".vts-action-bar" },
|
|
85
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-action-bar .el-button" },
|
|
86
|
+
{ "kind": "css_var", "target": "--action-bar-gap" },
|
|
87
|
+
{ "kind": "css_var", "target": "--action-bar-padding-y" }
|
|
88
|
+
],
|
|
89
|
+
"preconditions": [
|
|
90
|
+
"本条目选择器 .vts-action-bar 依赖页面给操作栏容器挂上该语义类;若页面用的是出厂 ReTableBar 且未挂该类,选择器在项目 DOM 里不存在,规则再准也落不下去(这是「操作栏规则写了却没生效」的根因,属挂载点缺失)。施工前须先按 structure_ops 给容器补类,或改用项目实际容器选择器并回写本条目。",
|
|
91
|
+
"gap / padding 的 CSS 变量必须在项目样式中存在消费者(var() 引用),只定义不消费 = 死通道。"
|
|
92
|
+
],
|
|
93
|
+
"priority": {
|
|
94
|
+
"strategy": "scope_qualified",
|
|
95
|
+
"reason": "容器语义类挂上后,作用域限定即可覆盖。"
|
|
96
|
+
},
|
|
83
97
|
"$note": "设计意图(list-page §4/§11.25-11.36):flex 两端对齐、pad 20px 20px 8px、左侧批量(未选中置灰 opacity 0.4 + not-allowed)、右侧工具三件套缺一不可。分工:本条目管容器布局与置灰;批量删除红色按钮本体走 component.button.danger。demo 噪音按钮去留属业务层,交付说明申报后由项目侧业务闭环移除"
|
|
84
98
|
},
|
|
85
99
|
"admin.content.table.operation_column": {
|
|
@@ -103,9 +117,122 @@
|
|
|
103
117
|
"nowrap": "white-space",
|
|
104
118
|
"divider_width": "width",
|
|
105
119
|
"divider_height": "height",
|
|
106
|
-
"
|
|
120
|
+
"divider_margin_x": "margin-inline",
|
|
121
|
+
"more_arrow_size": "font-size",
|
|
122
|
+
"more_arrow_gap": "gap"
|
|
123
|
+
},
|
|
124
|
+
"anchors": [
|
|
125
|
+
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell:has(.re-table-operate)" },
|
|
126
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell:has(.re-table-operate) > .cell" }
|
|
127
|
+
],
|
|
128
|
+
"preconditions": [
|
|
129
|
+
"按钮之间的间距由分割线元素的左右 margin 承载,不是按钮自身 gap:必须先存在分割线元素(ReTableOperate 默认不渲染 divider,需按 structure_ops 补槽位),divider_width / divider_height / divider_margin_x 才有落点——这是「操作列按钮间距没还原」的根因。",
|
|
130
|
+
"「纯文字无图标」是数据侧结论:图标来自业务页列定义的 operateButtons[].icon,只写 form=text_link 而不移除数据里的 icon = 未落地(改 CSS 不算)。"
|
|
131
|
+
],
|
|
132
|
+
"priority": {
|
|
133
|
+
"strategy": "scope_qualified",
|
|
134
|
+
"reason": "操作列无行内样式竞争,作用域限定即可覆盖。"
|
|
135
|
+
},
|
|
136
|
+
"$note": "设计意图(list-page §5/§26.14/§11.52-11.60):纯文字链接无图标、短分割线隔离(1px×14px、左右 margin 0 8px)、≥3 个折叠到更多(带 10px 下拉箭头、箭头↔文字 gap 2px)、列宽 160px + nowrap 禁止换行。⚠ **按钮之间的间距由分割线的 divider_margin_x 承载**(不是按钮自身 gap)——设计侧不声明该字段,项目侧无从还原图上间距,这是「操作列间距没还原」的根因。落地断言:form 即结构意图(design-apply 底线二豁免)——form=text_link 时必须删除业务页列定义 operateButtons 各项的 icon 字段,禁止只改 CSS 保留图标冒充落地;设计侧未声明 min_width/column_width 时 AI 施工必须回填出厂值 160px/nowrap 并在交付说明注明,禁止留空导致按钮换行"
|
|
137
|
+
},
|
|
138
|
+
"admin.content.table.header_cell": {
|
|
139
|
+
"type": "element",
|
|
140
|
+
"selector": ".vts-table-area .el-table__header th.el-table__cell",
|
|
141
|
+
"file": "src/styles/element-plus.scss(Element Plus 表头结构类,无业务定制类)",
|
|
142
|
+
"style_scope": ".vts-page-card",
|
|
143
|
+
"css_vars": {
|
|
144
|
+
"bg": "--el-table-header-bg-color",
|
|
145
|
+
"text": "--el-table-header-text-color"
|
|
146
|
+
},
|
|
147
|
+
"custom_style_map": {
|
|
148
|
+
"height": "height",
|
|
149
|
+
"padding": "padding",
|
|
150
|
+
"font_weight": "font-weight",
|
|
151
|
+
"font_size": "font-size",
|
|
152
|
+
"text_align": "text-align",
|
|
153
|
+
"border_bottom": "border-bottom",
|
|
154
|
+
"nowrap": "white-space"
|
|
155
|
+
},
|
|
156
|
+
"anchors": [
|
|
157
|
+
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__header th.el-table__cell" },
|
|
158
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__header th.el-table__cell > .cell" },
|
|
159
|
+
{ "kind": "css_var", "target": "--el-table-header-bg-color" },
|
|
160
|
+
{ "kind": "css_var", "target": "--el-table-header-text-color" }
|
|
161
|
+
],
|
|
162
|
+
"preconditions": [
|
|
163
|
+
"Element Plus 表头是「宿主 th.el-table__cell + 内层 .cell 文本盒」两层结构;EP 出厂给内层 .cell 写了 white-space: normal,因此 nowrap / text-overflow 这类文本控制必须落在 inner 层,写在宿主 th 上会被内层覆盖(这是「表头竖排换行」的根因)。高度 / padding / 背景落在 host 层。",
|
|
164
|
+
"表头单元格可能被业务页用 :header-cell-style 注入行内样式,行内样式优先级高于一切类规则;使用本条目时须确认页面未在列上写死行内表头样式,若有则在页面侧移除、改由本条目承载。"
|
|
165
|
+
],
|
|
166
|
+
"priority": {
|
|
167
|
+
"strategy": "self_plus_important",
|
|
168
|
+
"reason": "页面可能用 :header-cell-style 注入行内样式,普通类规则无法取胜。"
|
|
169
|
+
},
|
|
170
|
+
"$note": "设计意图(list-page §11.39):高 48px、padding 16px、背景 #FAFAFA、字号 14px、字重 500、文字色 #000000E0、左对齐、底边框 1px solid #F0F0F0、nowrap、吸顶。⚠ 出厂只有「背景色 / 文字色」可经 --el-table-* 令牌表达;字重与对齐没有对应令牌——出厂仅设了 .el-table__header th 的 font-weight,对齐沿用浏览器 th 默认,两者都**不能靠换令牌得到**,必须由本条目字段显式承载,这是「表头样式不对」的根因。⚠ 文本换行控制必须落 inner 层(见 anchors),落宿主无效。作用域前缀 .vts-page-card 保证只命中业务卡片内表格。"
|
|
171
|
+
},
|
|
172
|
+
"admin.content.table.cell": {
|
|
173
|
+
"type": "element",
|
|
174
|
+
"selector": ".vts-table-area .el-table__body td.el-table__cell",
|
|
175
|
+
"file": "src/styles/element-plus.scss(Element Plus 行单元格结构类,无业务定制类)",
|
|
176
|
+
"style_scope": ".vts-page-card",
|
|
177
|
+
"css_vars": {},
|
|
178
|
+
"custom_style_map": {
|
|
179
|
+
"padding": "padding",
|
|
180
|
+
"padding_y": "padding-block",
|
|
181
|
+
"padding_x": "padding-inline",
|
|
182
|
+
"height": "height",
|
|
183
|
+
"font_size": "font-size",
|
|
184
|
+
"font_weight": "font-weight",
|
|
185
|
+
"text_color": "color",
|
|
186
|
+
"border_bottom": "border-bottom",
|
|
187
|
+
"vertical_align": "vertical-align"
|
|
188
|
+
},
|
|
189
|
+
"anchors": [
|
|
190
|
+
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__body td.el-table__cell" },
|
|
191
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__body td.el-table__cell > .cell" }
|
|
192
|
+
],
|
|
193
|
+
"preconditions": [
|
|
194
|
+
"出厂 element-plus.scss 已给 .el-table .el-table__cell 设了 padding(var(--vts-space-xs) 0),本条目字段必须落 host 层才能覆盖它;写在 inner 层只改内层文本盒,观感上「改了没反应」。",
|
|
195
|
+
"行高由「单元格 padding + 内容行高」共同决定;声明行高档位时必须同时给出 padding 取值,只改其一会得到非预期行高。"
|
|
196
|
+
],
|
|
197
|
+
"priority": {
|
|
198
|
+
"strategy": "scope_qualified",
|
|
199
|
+
"reason": "出厂 padding 规则与本条目同属全局样式,作用域限定到 .vts-page-card 即可覆盖。"
|
|
200
|
+
},
|
|
201
|
+
"$note": "设计意图(list-page §11.43):padding 16px、字号 14px、字重 400、文字色 #000000E0、底边框 1px solid #F0F0F0、垂直居中。⚠ 数据单元格此前无承载点位(历史缺口:只覆盖了表头,单元格 padding 改不动),本条目即为补建的通道。不声明时项目侧保留出厂值,效果图要求的 16px 必须显式给出。"
|
|
202
|
+
},
|
|
203
|
+
"admin.content.table.cell_status": {
|
|
204
|
+
"type": "element",
|
|
205
|
+
"selector": ".vts-table-area .el-table__cell .el-tag",
|
|
206
|
+
"file": "业务 views(状态列,Element Plus el-tag 渲染)",
|
|
207
|
+
"style_scope": ".vts-page-card",
|
|
208
|
+
"forms": {
|
|
209
|
+
"filled": "浅色背景 + 浅边框 + 语义色文字(设计规范默认变体,list-page §7)",
|
|
210
|
+
"outlined": "透明背景 + 语义色边框 + 语义色文字",
|
|
211
|
+
"solid": "纯色填充 + 白字",
|
|
212
|
+
"with_icon": "filled + 16px 语义图标"
|
|
213
|
+
},
|
|
214
|
+
"css_vars": {},
|
|
215
|
+
"custom_style_map": {
|
|
216
|
+
"bg": "background-color",
|
|
217
|
+
"border_color": "border-color",
|
|
218
|
+
"text_color": "color",
|
|
219
|
+
"font_size": "font-size",
|
|
220
|
+
"icon_size": "font-size",
|
|
221
|
+
"radius": "border-radius"
|
|
107
222
|
},
|
|
108
|
-
"
|
|
223
|
+
"anchors": [
|
|
224
|
+
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell .el-tag" },
|
|
225
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell .el-tag .el-tag__content" }
|
|
226
|
+
],
|
|
227
|
+
"preconditions": [
|
|
228
|
+
"本条目只对「已渲染的 el-tag」生效:状态列必须在页面模板里真的渲染 el-tag(formatter 返回纯文本不会产生 el-tag)。因此 form 声明必须与 structure_ops 配对——只改样式、不改模板分支 = 声明无效(这是「列中状态样式不对」的根因)。",
|
|
229
|
+
"五态配色是「浅底 + 浅边框 + 语义色文字」三项组合,缺任一项即不是 filled 变体。"
|
|
230
|
+
],
|
|
231
|
+
"priority": {
|
|
232
|
+
"strategy": "scope_qualified",
|
|
233
|
+
"reason": "出厂该列多为纯文本或 el-tag 默认色,作用域限定即可覆盖。"
|
|
234
|
+
},
|
|
235
|
+
"$note": "设计意图(list-page §7 / §11.64-11.75):默认 **filled** 变体,五态取值 = success #F6FFED / 1px #D9F7BE / #52C41A / check-circle;processing 主色-1 / 主色-3 / 主色-5 / sync;warning #FFFBE6 / #FFE58F / #FAAD14 / exclamation-circle;error #FFF1F0 / #FFCCC2 / #FF4D4F / close-circle;default rgba(0,0,0,0.04) / #F0F0F0 / #000000A6 / clock-circle(图标 16px)。⚠ 出厂 demo 该列多为**纯文本或 el-tag 默认色**——变体与五态配色必须由变更集显式声明,否则停留在默认蓝/灰,这是「列中状态样式不对」的根因。⚠ 本条目**不是纯样式点位**:Tag 化本身是结构施工(见 preconditions 与 structure_ops),只声明 style 落不下去。通用 Tag 规范见 component.tag.status;≥3 个 Tag 列时按「四选二」逐列分配(list-page §8)。"
|
|
109
236
|
},
|
|
110
237
|
"admin.content.table.cell_amount": {
|
|
111
238
|
"type": "element",
|
|
@@ -117,6 +244,19 @@
|
|
|
117
244
|
"align": "text-align",
|
|
118
245
|
"font_variant_numeric": "font-variant-numeric"
|
|
119
246
|
},
|
|
247
|
+
"anchors": [
|
|
248
|
+
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell.col-price" },
|
|
249
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell.col-price > .cell" },
|
|
250
|
+
{ "kind": "attr", "layer": "host", "target": "td.el-table__cell.is-right" }
|
|
251
|
+
],
|
|
252
|
+
"preconditions": [
|
|
253
|
+
"选择器依赖业务列绑定 class-name(col-price)或列 align=right(EP 渲染时给单元格加 is-right);两者都没绑时规则永不命中。因此本条目含**结构施工要求**(列定义补 class-name / align),不是纯样式条目——只写样式不绑类名 = 声明无效(这是「金额列没右对齐」的根因)。",
|
|
254
|
+
"右对齐需与表头对齐一致,否则表头与数据错位;表头对齐由 admin.content.table.header_cell 的 text_align 承载。"
|
|
255
|
+
],
|
|
256
|
+
"priority": {
|
|
257
|
+
"strategy": "scope_qualified",
|
|
258
|
+
"reason": "列级类名落位后,作用域限定即可覆盖 EP 默认的左对齐。"
|
|
259
|
+
},
|
|
120
260
|
"$note": "设计意图(§11.110 col-price):右对齐 + tabular-nums 等宽数字。落地手段:列定义加 class-name=col-price + align=right;「等宽数字」译为 font-variant-numeric: tabular-nums"
|
|
121
261
|
},
|
|
122
262
|
"admin.content.table.cell_thumb": {
|
|
@@ -131,6 +271,18 @@
|
|
|
131
271
|
"thumb_radius": "border-radius",
|
|
132
272
|
"column_width": "width"
|
|
133
273
|
},
|
|
274
|
+
"anchors": [
|
|
275
|
+
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell.col-thumb" },
|
|
276
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell.col-thumb .el-image" }
|
|
277
|
+
],
|
|
278
|
+
"preconditions": [
|
|
279
|
+
"选择器依赖业务列绑定 class-name(col-thumb);未绑定时规则永不命中——本条目含**结构施工要求**(列定义补 class-name),不是纯样式条目。",
|
|
280
|
+
"缩略盒尺寸必须真正约束到图片元素;页面若在模板里用工具类直写尺寸(如 h-30 w-30),其优先级会压过本条目,须先移除页面级尺寸再靠本条目承载。"
|
|
281
|
+
],
|
|
282
|
+
"priority": {
|
|
283
|
+
"strategy": "self_plus_important",
|
|
284
|
+
"reason": "页面常以工具类直写图片尺寸,与设计层规则同层竞争,需显式提权。"
|
|
285
|
+
},
|
|
134
286
|
"$note": "设计意图(§11.108-11.109):列宽 72px 居中,缩略盒 40×40 圆角 6px。落地手段:列 className=col-thumb + el-image 40×40"
|
|
135
287
|
},
|
|
136
288
|
"admin.content.table.area": {
|
|
@@ -77,6 +77,20 @@
|
|
|
77
77
|
"active_indicator_thickness": "height",
|
|
78
78
|
"active_indicator_style": "border-radius"
|
|
79
79
|
},
|
|
80
|
+
"anchors": [
|
|
81
|
+
{ "kind": "class", "layer": "host", "target": ".sidebar-container .el-menu-item" },
|
|
82
|
+
{ "kind": "class", "layer": "inner", "target": ".sidebar-container .el-menu-item > .el-menu-item__content" },
|
|
83
|
+
{ "kind": "css_var", "target": "--vts-theme-menu-active-bg" },
|
|
84
|
+
{ "kind": "css_var", "target": "--vts-theme-menu-active-before" }
|
|
85
|
+
],
|
|
86
|
+
"preconditions": [
|
|
87
|
+
"出厂菜单项盒模型是「无横向 margin(margin: 4px 0)+ 胶囊用 inset 内缩」;指示条几何必须以这个宿主盒为基准计算偏移。照搬外部效果图上「依赖菜单项横向 margin」的负偏移量会落进容器外并被 overflow 裁掉(这是指示条「映射了却没效果」的根因:值搬了、让该值成立的宿主盒模型没搬)。",
|
|
88
|
+
"--vts-theme-menu-active-before 出厂为透明且全项目无消费者;声明 indicator_* 形态必须成对落地「关胶囊令牌 + 新建消费者」,只改色值不建消费者 = 未施工。"
|
|
89
|
+
],
|
|
90
|
+
"priority": {
|
|
91
|
+
"strategy": "deep_qualified",
|
|
92
|
+
"reason": "出厂 sidebar.scss 的胶囊规则用 !important,设计层需以同等或更高权重覆盖。"
|
|
93
|
+
},
|
|
80
94
|
"$note": "侧栏配色挂载点为 html[data-theme='xxx'](theme.scss 8 套预设);设计输出深色侧栏 → Theme=default + Version++(useTheme 规则),浅色 → Theme=light。⚠文本完整性红线:菜单项名称必须完整显示(el-menu 自带 ellipsis 折叠溢出菜单),禁止改 menu 文本截断/隐藏策略;item_height 加大时确认行高不挤压文字。宽度类改动(--sidebar-width)后必须目视验证长菜单名显示。⚠激活态出厂中性基线(禁止把某张图的结论写进源码):出厂形态 = pill 胶囊高亮;--vts-theme-menu-active-before 出厂默认 transparent 且**全项目无消费者**(死通道)。因此 form=indicator_* 时必须在本条目 style_scope 内成对落地两件事才算施工完成——① 覆写 --vts-theme-menu-active-bg: transparent 关胶囊;② 在设计层文件(不可写出厂 sidebar.scss)新建 ::after 消费者引用 var(--vts-theme-menu-active-before)。缺任一项 = 「映射了却没效果」。所有几何参数(方位/粗细/长度/圆角/内缩)取自变更集 style 字段,禁止写死 left:0 / 3px 等常量。"
|
|
81
95
|
},
|
|
82
96
|
"admin.layout.sidebar.collapse_trigger": {
|
|
@@ -146,6 +160,13 @@
|
|
|
146
160
|
"custom_style_map": {
|
|
147
161
|
"font_size": "font-size"
|
|
148
162
|
},
|
|
163
|
+
"anchors": [
|
|
164
|
+
{ "kind": "class", "layer": "host", "target": ".navbar .navbar-breadcrumb-wrap" }
|
|
165
|
+
],
|
|
166
|
+
"priority": {
|
|
167
|
+
"strategy": "deep_qualified",
|
|
168
|
+
"reason": "出厂组件自身 scoped 规则与设计层同权重,仅靠后置加载顺序不可靠;显隐收口与样式覆盖都必须显式提权(历史缺口:display:none 被同权重 scoped 规则反压,面包屑仍显示)。"
|
|
169
|
+
},
|
|
149
170
|
"$note": "分隔符为结构属性(breadcrumb separator 字符),不在样式映射范围"
|
|
150
171
|
},
|
|
151
172
|
"admin.layout.header.lang_switch": {
|
|
@@ -256,6 +277,15 @@
|
|
|
256
277
|
"greeting_font_weight": "font-weight",
|
|
257
278
|
"gap": "gap"
|
|
258
279
|
},
|
|
280
|
+
"anchors": [
|
|
281
|
+
{ "kind": "class", "layer": "host", "target": ".navbar .navbar-right .el-dropdown-link" },
|
|
282
|
+
{ "kind": "class", "layer": "inner", "target": ".navbar .navbar-right .el-dropdown-link img" },
|
|
283
|
+
{ "kind": "class", "layer": "inner", "target": ".navbar .navbar-right .el-dropdown-link p" }
|
|
284
|
+
],
|
|
285
|
+
"preconditions": [
|
|
286
|
+
"出厂 DOM 只有「头像 img + 用户名 p」,任何 greeting 组合都必须**先做结构增量**再谈样式;未新增节点时 greeting_* 样式字段无落点(这是「欢迎区没出现」的根因)。",
|
|
287
|
+
"组合形态由 form 决定,样式字段按 sub_selectors 前缀路由到对应部件选择器。"
|
|
288
|
+
],
|
|
259
289
|
"$note": "⚠出厂中性基线:出厂 DOM 只有「头像 img + 用户名 p」,**没有任何问候语节点**(词典曾误记 .header-welcome 已实现,属虚假前提)。因此 form 含 greeting 时必须走结构增量新增 DOM,且节点文案模板(时段问候语 + 用户名)由业务层提供,本点位只承载组合形态与样式——禁止把具体问候文案写进组件。反向同理:设计只要纯头像/纯用户名时以 form=avatar_only/name_only 声明,出厂多余节点同样按收口处理(隐藏不删)。"
|
|
260
290
|
},
|
|
261
291
|
"admin.layout.tabs": {
|
|
@@ -266,8 +296,9 @@
|
|
|
266
296
|
"visible_prop": "HideTabs(platform-config.json)",
|
|
267
297
|
"children": ["admin.layout.tabs.home_tab", "admin.layout.tabs.item", "admin.layout.tabs.context_menu"],
|
|
268
298
|
"forms": {
|
|
269
|
-
"chrome": "谷歌页签(出厂 ShowModel=chrome
|
|
270
|
-
"card": "卡片页签(ShowModel=card)"
|
|
299
|
+
"chrome": "谷歌页签(出厂 ShowModel=chrome):SVG 梯形外形 + .chrome-tab-divider(1px×14px 深色)+ 关闭钮 16px 主色;激活态白字 + box-shadow",
|
|
300
|
+
"card": "卡片页签(ShowModel=card):圆角卡片底 + --vts-tag-card-* 整组令牌 + 关闭钮 hover 才显现(出厂 opacity:0)",
|
|
301
|
+
"flat": "平面页签(设计规范口径,出厂无此形态):ShowModel 仍设 card(复用 card 结构 = 图标槽 + 关闭钮 + resolveCardTabIcon 数据驱动),平面观感全部由设计层覆写达成 —— ① --vts-tag-card-idle-bg/hover-bg/active-bg 置 transparent;② --vts-tag-card-radius 与 --vts-tag-card-gap 置 0;③ 激活态仅文字/图标变主色 + font-weight 500,不加 border-bottom / box-shadow;④ 关闭钮 opacity 覆写为常显值(出厂 card 为 0);⑤ 首页页签项宽=高=--vts-tag-card-height 居中呈方块;⑥ 页签间 1px×100% 贯穿分割线(card 无该元素,需设计层 ::after/::before 新建)。几何与色值一律取自变更集 style 字段,禁止写死常量"
|
|
271
302
|
},
|
|
272
303
|
"css_vars": {
|
|
273
304
|
"height": "--tabs-height",
|
|
@@ -284,7 +315,20 @@
|
|
|
284
315
|
},
|
|
285
316
|
"custom_style_map": {
|
|
286
317
|
"bg": "background-color",
|
|
287
|
-
"border_bottom": "border-bottom"
|
|
318
|
+
"border_bottom": "border-bottom",
|
|
319
|
+
"padding_inline": "padding-inline",
|
|
320
|
+
"padding_block": "padding-block"
|
|
321
|
+
},
|
|
322
|
+
"anchors": [
|
|
323
|
+
{ "kind": "class", "layer": "host", "target": ".tags-view" },
|
|
324
|
+
{ "kind": "class", "layer": "inner", "target": ".tags-view .scroll-container" }
|
|
325
|
+
],
|
|
326
|
+
"preconditions": [
|
|
327
|
+
"容器内边距出厂由组件样式给出(非 0),设计要求「内边距归零、首页页签与折叠按钮左对齐」时必须显式声明 padding_inline,不声明即保留出厂值(这是「首页页签不贴左缘」的根因)。"
|
|
328
|
+
],
|
|
329
|
+
"priority": {
|
|
330
|
+
"strategy": "deep_qualified",
|
|
331
|
+
"reason": "容器内边距规则写在组件 scoped 内,与设计层同权重,需显式提权。"
|
|
288
332
|
},
|
|
289
333
|
"$note": "showModel 由 platform-config.json ShowModel 字段切换;smart/line 模板未实现,映射层按 chrome/card 两形态处理"
|
|
290
334
|
},
|
|
@@ -333,11 +377,69 @@
|
|
|
333
377
|
"custom_style_map": {
|
|
334
378
|
"padding_x": "padding-inline",
|
|
335
379
|
"divider_color": "border-left-color",
|
|
380
|
+
"title_gap": "gap",
|
|
336
381
|
"close_size": "font-size",
|
|
382
|
+
"close_opacity": "opacity",
|
|
337
383
|
"close_hover_color": "color"
|
|
338
384
|
},
|
|
385
|
+
"anchors": [
|
|
386
|
+
{ "kind": "class", "layer": "host", "target": ".tags-view .scroll-item .card-tab" },
|
|
387
|
+
{ "kind": "class", "layer": "inner", "target": ".tags-view .scroll-item .card-tab .el-icon-close" }
|
|
388
|
+
],
|
|
389
|
+
"priority": {
|
|
390
|
+
"strategy": "deep_qualified",
|
|
391
|
+
"reason": "关闭钮透明度等出厂规则写在组件 scoped 内且权重与设计层相当,仅靠后置加载顺序不可靠(历史缺口:声明 0.45 常显,被 scoped 的 opacity:0 反压、只在 hover 才显),必须显式提权。"
|
|
392
|
+
},
|
|
339
393
|
"$note": "card 形态专属令牌挂在父级 admin.layout.tabs 的 css_vars(整组切换);本条目为页签项级字段补充。chrome 形态梯形样式为模板结构样式,不走样式映射"
|
|
340
394
|
},
|
|
395
|
+
"admin.layout.tabs.item_active": {
|
|
396
|
+
"type": "element",
|
|
397
|
+
"selector": ".tags-view .scroll-item.is-active",
|
|
398
|
+
"file": "src/layout/components/lay-tag/index.vue",
|
|
399
|
+
"style_scope": ".tags-view",
|
|
400
|
+
"forms": {
|
|
401
|
+
"text_color_only": "仅文字/图标变色 + 字重加重(设计规范口径,unified-framework §6.46:font-weight 500、无下划线、无 border-bottom、无 box-shadow)",
|
|
402
|
+
"with_bg": "带底色块(出厂 card 形态即此:--vts-tag-card-active-bg)",
|
|
403
|
+
"with_underline": "带下划线/底线(出厂未实现,需设计层 ::after 新建并取变更集几何字段)"
|
|
404
|
+
},
|
|
405
|
+
"sub_selectors": {
|
|
406
|
+
"title": ".tags-view .scroll-item.is-active .tag-title",
|
|
407
|
+
"icon": ".tags-view .scroll-item.is-active .card-tab-icon"
|
|
408
|
+
},
|
|
409
|
+
"css_vars": {
|
|
410
|
+
"active_text": "--vts-tag-card-active-text",
|
|
411
|
+
"active_bg": "--vts-tag-card-active-bg"
|
|
412
|
+
},
|
|
413
|
+
"custom_style_map": {
|
|
414
|
+
"text_color": "color",
|
|
415
|
+
"font_weight": "font-weight",
|
|
416
|
+
"underline_height": "height",
|
|
417
|
+
"underline_color": "background-color"
|
|
418
|
+
},
|
|
419
|
+
"$note": "⚠出厂中性基线:chrome 形态激活态 = 白字 + box-shadow + 主色底(.scroll-item.is-active:not(.card-item)),card 形态 = --vts-tag-card-active-bg 底 + active-text 文字;**两者都不等于设计规范的「仅文字变色 + 字重 500、无下划线」**。form=text_color_only 时必须在设计层显式覆写出厂的 box-shadow / 背景块,缺任一项 = 激活态样式不对。card 形态专属令牌挂在父级 admin.layout.tabs 的 css_vars(整组切换)。"
|
|
420
|
+
},
|
|
421
|
+
"admin.layout.tabs.divider": {
|
|
422
|
+
"type": "element",
|
|
423
|
+
"selector": "chrome 形态:.chrome-tab .chrome-tab-divider;card / flat 形态:无独立元素(需设计层新建)",
|
|
424
|
+
"file": "src/layout/components/lay-tag/index.vue",
|
|
425
|
+
"style_scope": ".tags-view",
|
|
426
|
+
"$comment": "真实 DOM:chrome 形态有 .chrome-tab-divider(position:absolute; right:7px; width:1px; height:14px; background-color:#2b2d2f;激活时 opacity:0),card 形态无分割线元素、用 --vts-tag-card-gap 间距代替。设计规范要求页签之间 1px×100% 贯穿分割线(unified-framework §6.47),与出厂两种形态都不符。",
|
|
427
|
+
"css_vars": {},
|
|
428
|
+
"custom_style_map": {
|
|
429
|
+
"width": "width",
|
|
430
|
+
"height": "height",
|
|
431
|
+
"bg": "background-color",
|
|
432
|
+
"opacity": "opacity"
|
|
433
|
+
},
|
|
434
|
+
"anchors": [
|
|
435
|
+
{ "kind": "class", "layer": "host", "target": ".tags-view .chrome-tab .chrome-tab-divider" },
|
|
436
|
+
{ "kind": "class", "layer": "inner", "target": ".tags-view .scroll-item:not(:first-child)::before" }
|
|
437
|
+
],
|
|
438
|
+
"preconditions": [
|
|
439
|
+
"chrome 形态自带分割线元素;card / flat 形态没有该元素,须先由结构/样式层新建 —— 元素不存在时 width / height / bg 全部无落点(这是「页签分割线声明了却不见」的根因)。"
|
|
440
|
+
],
|
|
441
|
+
"$note": "落地口径:chrome 形态可直接覆写 .chrome-tab-divider 的 background-color / height(含激活态 opacity 还原);card / flat 形态须在设计层用 .tags-view .scroll-item:not(:first-child)::before 新建竖线并消费变更集 width/height/bg。禁止把某张图的分割线参数(如 1px×100% #F0F0F0)写进出厂源码——那是单张图的结论。"
|
|
442
|
+
},
|
|
341
443
|
"admin.layout.tabs.context_menu": {
|
|
342
444
|
"type": "element",
|
|
343
445
|
"selector": ".tags-view .el-dropdown-menu(页签栏右侧 arrow-down 触发的下拉菜单;el-dropdown 挂 body)",
|
package/package.json
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "端到端验证夹具 · 负例 1:缺 schema
|
|
2
|
+
"$comment": "端到端验证夹具 · 负例 1:缺 schema。预期在第一步协议校验即被拒绝(exit 1)。",
|
|
3
3
|
"changeset_version": "1.0.0",
|
|
4
4
|
"scene": "admin",
|
|
5
5
|
"changes": [
|
|
6
|
-
{
|
|
7
|
-
"id": "admin.layout.sidebar.menu",
|
|
8
|
-
"position": "left 20px margin-left .sidebar",
|
|
9
|
-
"form": "card",
|
|
10
|
-
"style": { "menu_bg": "#1d223a" }
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"id": "admin.content.sidebar.ElMenu",
|
|
14
|
-
"style": { "bg": "红色" }
|
|
15
|
-
}
|
|
6
|
+
{ "id": "admin.layout.tabs", "form": "card" }
|
|
16
7
|
]
|
|
17
8
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "V3.2 三声明维度正例(apply_via / layer / structure_ops)。预期:match exit 0;输出含「结构施工 structure_ops」「覆写优先级 priority」「inner 层」(表头文本类字段按 layer 落内层文本盒)。",
|
|
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": {
|
|
11
|
+
"bg": "钴蓝-9",
|
|
12
|
+
"padding": "16px",
|
|
13
|
+
"text_align": "左对齐",
|
|
14
|
+
"nowrap": "不换行"
|
|
15
|
+
},
|
|
16
|
+
"layer": {
|
|
17
|
+
"bg": "host",
|
|
18
|
+
"padding": "host",
|
|
19
|
+
"text_align": "inner",
|
|
20
|
+
"nowrap": "inner"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "admin.content.table.cell_status",
|
|
25
|
+
"form": "filled",
|
|
26
|
+
"structure_ops": [
|
|
27
|
+
{ "op": "render_branch", "node": "status_tag", "source": "row.status" }
|
|
28
|
+
],
|
|
29
|
+
"style": {
|
|
30
|
+
"bg": "成功色",
|
|
31
|
+
"text_color": "成功色",
|
|
32
|
+
"radius": "4px"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "admin.content.table.cell_amount",
|
|
37
|
+
"apply_via": "admin.content.table.cell_amount",
|
|
38
|
+
"structure_ops": [
|
|
39
|
+
{ "op": "bind_source", "node": "amount_column", "source": "column_class_name" }
|
|
40
|
+
],
|
|
41
|
+
"style": {
|
|
42
|
+
"align": "右对齐",
|
|
43
|
+
"font_variant_numeric": "等宽数字"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"oracle": {
|
|
48
|
+
"mockup": "page-specs/styles/default/scenes/admin/mockups/list-page/运单管理-钴蓝.html",
|
|
49
|
+
"sids": [
|
|
50
|
+
"admin.content.table.header_cell",
|
|
51
|
+
"admin.content.table.cell_status",
|
|
52
|
+
"admin.content.table.cell_amount"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"notes": "本夹具只用于回归 V3.2 三个声明维度的解析与输出,不是真实设计交付件。"
|
|
56
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<!-- audit 夹具:模拟「已挂载」的构图钩子(结构挂载点存在) -->
|
|
3
|
+
<div class="vts-page-card">
|
|
4
|
+
<div class="vts-filter-area"></div>
|
|
5
|
+
<div class="vts-table-area">
|
|
6
|
+
<el-table :data="rows" />
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
</template>
|
|
10
|
+
|
|
11
|
+
<script setup lang="ts">
|
|
12
|
+
const rows: unknown[] = [];
|
|
13
|
+
</script>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "verify 夹具 · 项目实测(含 3 类故意缺口,用于回归):header_cell 字重被压 + 对齐语境错位;cell_amount 选择器落空;user_profile gap 语境错位。",
|
|
3
|
+
"sids": {
|
|
4
|
+
"admin.content.table.header_cell": {
|
|
5
|
+
"padding": "16px",
|
|
6
|
+
"font-weight": "400",
|
|
7
|
+
"text-align": "center",
|
|
8
|
+
"background-color": "#fafafa"
|
|
9
|
+
},
|
|
10
|
+
"admin.layout.tabs.item_active": {
|
|
11
|
+
"font-weight": "500",
|
|
12
|
+
"color": "#245bff"
|
|
13
|
+
},
|
|
14
|
+
"admin.layout.header.user_profile": {
|
|
15
|
+
"gap": "8px"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "verify 夹具 · 效果图期望(computed style 转储外形)。真实抽取由浏览器链路完成,本文件仅用于回归。",
|
|
3
|
+
"sids": {
|
|
4
|
+
"admin.content.table.header_cell": {
|
|
5
|
+
"padding": "16px",
|
|
6
|
+
"font-weight": "500",
|
|
7
|
+
"text-align": "left",
|
|
8
|
+
"background-color": "#FAFAFA"
|
|
9
|
+
},
|
|
10
|
+
"admin.content.table.cell_amount": {
|
|
11
|
+
"text-align": "right"
|
|
12
|
+
},
|
|
13
|
+
"admin.layout.tabs.item_active": {
|
|
14
|
+
"font-weight": "500",
|
|
15
|
+
"color": "#245BFF"
|
|
16
|
+
},
|
|
17
|
+
"admin.layout.header.user_profile": {
|
|
18
|
+
"gap": "12px"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|