@qilitt-mickey/vue3-temp-skill 1.1.45 → 1.1.46
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.
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"admin.content.table.operation_bar": {
|
|
75
75
|
"type": "element",
|
|
76
76
|
"selector": ".vts-action-bar",
|
|
77
|
-
"file": "
|
|
77
|
+
"file": "出厂 src/components/ReTableBar/src/bar.vue 的工具栏行(标题/按钮/工具三件套所在行)已挂 .vts-action-bar;右侧工具三件套源码实证:刷新 svg-icon + el-dropdown 密度(宽松/默认/紧凑)+ el-popover 列设置(bar.vue 内层行)",
|
|
78
78
|
"style_scope": ".vts-page-card",
|
|
79
79
|
"forms": {
|
|
80
80
|
"with_tools": "工具三件套(刷新/密度/列设置)齐全——设计规范 list-page §4 要求三件套缺一不可(ReTableBar 出厂已具备,此为默认形态)",
|
|
@@ -92,18 +92,19 @@
|
|
|
92
92
|
"batch_disabled_opacity": "opacity"
|
|
93
93
|
},
|
|
94
94
|
"anchors": [
|
|
95
|
-
{ "kind": "class", "layer": "
|
|
95
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-action-bar" },
|
|
96
96
|
{ "kind": "class", "layer": "inner", "target": ".vts-action-bar .el-button" },
|
|
97
97
|
{ "kind": "css_var", "target": "--action-bar-gap" },
|
|
98
98
|
{ "kind": "css_var", "target": "--action-bar-padding-y" }
|
|
99
99
|
],
|
|
100
100
|
"preconditions": [
|
|
101
|
-
"
|
|
102
|
-
"
|
|
101
|
+
"挂载点唯一合法位置 = ReTableBar 内部工具栏行(出厂已挂 .vts-action-bar)。禁止把 .vts-action-bar 挂到 ReTableBar 根节点:根节点是「工具栏行 + 表格 + 分页」的纵向复合容器,而 .vts-action-bar 是 flex-direction: row —— 挂根节点会让工具栏与表格并排、表格被挤压、tableHeight 实测失准(已发生的事故,勿复发)。",
|
|
102
|
+
"本条目 sid 锚点只能落在 ReTableBar 根节点(页面透传 attrs 到根),样式落点是内层工具栏行 —— anchors 的 layer 必须区分 host / inner,verify 抽取按 anchors.target 而非 sid 所在节点。",
|
|
103
|
+
"gap / padding 的 CSS 变量必须在项目样式中存在消费者(var() 引用),只定义不消费 = 死通道。--action-bar-padding-y 供 padding-block,最多两个值(如 20px 8px),给三个值整条声明即失效。"
|
|
103
104
|
],
|
|
104
105
|
"priority": {
|
|
105
106
|
"strategy": "scope_qualified",
|
|
106
|
-
"reason": "
|
|
107
|
+
"reason": "出厂 .vts-action-bar 类位 1,作用域限定(html body .vts-table-area .vts-action-bar)即可覆盖;但不得把样式写到 ReTableBar 根节点上。"
|
|
107
108
|
},
|
|
108
109
|
"$note": "设计意图(list-page §4/§11.25-11.36):flex 两端对齐、pad 20px 20px 8px、左侧批量(未选中置灰 opacity 0.4 + not-allowed)、右侧工具三件套缺一不可。分工:本条目管容器布局与置灰;批量删除红色按钮本体走 component.button.danger。demo 噪音按钮去留属业务层,交付说明申报后由项目侧业务闭环移除"
|
|
109
110
|
},
|
|
@@ -54,11 +54,11 @@
|
|
|
54
54
|
"file": "src/layout/components/lay-sidebar/NavVertical.vue",
|
|
55
55
|
"style_scope": ".sidebar-container",
|
|
56
56
|
"forms": {
|
|
57
|
-
"pill": "
|
|
58
|
-
"indicator_left": "左侧竖条指示:先在本作用域覆写 --vts-theme-menu-active-bg: transparent 关胶囊,再于设计层新建 ::after 竖条(left:0)消费 --vts-theme-menu-active-before",
|
|
59
|
-
"indicator_right": "右侧竖条指示:同上关胶囊后 ::after 挂 right:0
|
|
60
|
-
"indicator_underline": "底部横线指示:关胶囊后 ::after 挂 bottom:0(宽取 100% 或指定宽度,厚取 indicator_thickness
|
|
61
|
-
"none": "
|
|
57
|
+
"pill": "整块胶囊底色高亮(sidebar.scss 消费 --vts-theme-menu-active-bg,带 !important)。suppress 必含 right_indicator_legacy——出厂 element-plus.scss 的 .el-menu-item.is-active{border-right:var(--menu-active-border-right)} 是活通道,不收口会出现左右两根竖条并存",
|
|
58
|
+
"indicator_left": "左侧竖条指示:先在本作用域覆写 --vts-theme-menu-active-bg: transparent 关胶囊,再于设计层新建 ::after 竖条(left:0)消费 --vts-theme-menu-active-before。suppress 必含 right_indicator_legacy",
|
|
59
|
+
"indicator_right": "右侧竖条指示:同上关胶囊后 ::after 挂 right:0。出厂右竖条通道 --menu-active-border-right(element-plus.scss 消费、design-tokens.scss 定义为 3px solid 品牌色)是活通道,可复用也可收口后自建,二选一必须显式声明",
|
|
60
|
+
"indicator_underline": "底部横线指示:关胶囊后 ::after 挂 bottom:0(宽取 100% 或指定宽度,厚取 indicator_thickness)。suppress 必含 right_indicator_legacy",
|
|
61
|
+
"none": "无指示:胶囊与竖条均关闭,仅文字变色。suppress 必含 right_indicator_legacy"
|
|
62
62
|
},
|
|
63
63
|
"css_vars": {
|
|
64
64
|
"menu_bg": "--vts-theme-menu-bg",
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
"sub_menu_active_text": "--vts-theme-sub-menu-active-text",
|
|
70
70
|
"menu_active_bg": "--vts-theme-menu-active-bg",
|
|
71
71
|
"menu_active_indicator": "--vts-theme-menu-active-before",
|
|
72
|
+
"right_indicator_legacy": "--menu-active-border-right",
|
|
72
73
|
"sidebar_border": "--vts-sidebar-border-color",
|
|
73
74
|
"item_height": "--el-menu-item-height"
|
|
74
75
|
},
|
package/package.json
CHANGED
|
@@ -55,6 +55,7 @@ lint / type-check **过了也不能放过**下列项。发现即改代码,禁
|
|
|
55
55
|
| 设计变更集落地(`design-apply`) | 声明已落地但节点无对应锚点(`anchor.kind` 目标不存在:类未绑 / 变量无消费者 / 属性未挂) | 先补锚点(属「补通道」申报);锚点缺失即为挂载点缺口,禁止用更宽选择器蒙混 |
|
|
56
56
|
| 同上 | `apply_via` 为 `class_name` / `attribute` / `slot_content` / `data_source` 之一,却只写了 CSS 而没改结构/绑定 | 按 `structure_ops` 施工(改模板 / 绑 `class-name` / 改 formatter / 挂 `data-*`),CSS 换不掉数据驱动点位 |
|
|
57
57
|
| 同上 | 全局覆写与组件 `scoped` 同权重生效失败(收口 `visible:false` / opacity / 几何覆盖不生效) | 按 `priority` 声明提权(`scope_qualified` / `self_plus_important` / `deep_qualified`),不得靠「后置加载」赌注入顺序 |
|
|
58
|
+
| 同上 | 容器语义类挂错节点:把「行/栏」语义类挂到**纵向复合容器**根节点(如把 `.vts-action-bar`(`flex-direction: row`)挂到 `ReTableBar` 根节点,而根节点是「工具栏行 + 表格 + 分页」) | 只能挂到该语义真正对应的那一层(工具栏行在 `ReTableBar` 组件内部);挂错会让兄弟节点并排、几何与 `tableHeight` 实测失准。修法是**移动挂载点**,不是给根节点补 `flex-direction: column` 打补丁 |
|
|
58
59
|
| 同上 | 词典 `selector` / `css_vars` 指向的选择器在真实 DOM 不存在(死通道 / 死令牌) | 跑 `node parser/index.js audit` 复核;死令牌双删、死通道补消费者挂载点 |
|
|
59
60
|
| 同上 | 变更集带登记表时 `C < A`(有规范子项未落进 `changes[]` / `visible` / `pending`)——组级台账过了但组内子项被静默丢失 | 跑 `node parser/index.js match --registry`;缺口逐条点名回流设计侧,**禁止采信自报的 `coverage` 数字**(parser 当场重算) |
|
|
60
61
|
|
|
@@ -153,7 +154,8 @@ lint / type-check **过了也不能放过**下列项。发现即改代码,禁
|
|
|
153
154
|
- [ ] **映射通道活性**:本轮用到的词典条目,其 `selector` / `css_vars` 在真实 DOM 可命中、CSS 变量有消费者(已跑 `audit` 或逐条核对,无死通道 / 死令牌)
|
|
154
155
|
- [ ] **锚点契约**:变更集 `anchor` 声明的锚点存在;`layer=inner` 的点位已解析到内层文本盒(`.cell` / 文本节点宿主),未错落在宿主盒上
|
|
155
156
|
- [ ] **结构施工**:`apply_via` 非 `style_override` 的点位已按 `structure_ops` 改结构/绑定(`class-name` / formatter / `data-*` / 渲染分支),未只用 CSS 冒充落地;申报了结构增量施工
|
|
156
|
-
- [ ]
|
|
157
|
+
- [ ] **出厂形态互斥收口(`suppress` 兑现)**:变更集每条带 `form` 的点位,其 `suppress` 清单逐通道收口完毕(优先令牌重映射),交付说明给出「通道 → 收口方式」对照;漏一条 = 出厂旧装饰残留(右竖条 / 旧激活底色块 / hover 才显关闭钮等都属此类)
|
|
158
|
+
- [ ] **覆写提权 / 同权重失效检查**:`priority` 声明的每条规则都**真数过权重**——写出特异度三元组 `(a,b,c)` **逐位比较(先 `b` 后 `c`)**:对手为组件 `<style scoped>` 时本条 `b` 必须严格更高(**平手即判失效**并提权);对手带 `!important` 时本条必须同样 `!important`;**`html` / `body` 只加 `c` 位,对手 `b` 更高时无效**(如出厂 `body[layout] .sidebar-container .el-menu-item` 为 `b=3`,本层 `html body .sidebar-container .el-menu-item` 只有 `b=2` → 一律失效,须靠**加祖先类**把 `b` 抬平)。**出厂用 `var(--vts-theme-*)` 间接设属性时,先走「令牌重映射」**(在令牌宿主作用域重声明令牌)而不是抢属性。收口(`display:none` 等)与几何覆盖必须实测生效,未被组件 `scoped` / 出厂全局规则反压
|
|
157
159
|
- [ ] **模板源码注释中性**:对模板文件的改动中,注释只描述「这段代码做什么」;语义 ID / 协议步骤号 / 缺口·自举·申报等面向 AI 的纪律条款不得写入模板源码注释(一律留在技能侧文档)
|
|
158
160
|
|
|
159
161
|
### 渲染态验收(变更集含 `oracle` / 效果图有 `data-sid` 时强制)
|
|
@@ -231,8 +231,15 @@ node parser/index.js registry <restore-registry.json> [--verbose] # 只
|
|
|
231
231
|
|
|
232
232
|
- 变更集给了 `layer` → 严格按 `layer` 从条目 `anchors` 取对应选择器(parser 已在转换计划里给出 `@ … · host/inner 层`)。
|
|
233
233
|
- 变更集**没给** `layer`、但条目 `preconditions` 指出必须落内层(如 EP 表头 `white-space`)→ 按 `preconditions` 落 inner 层,并在交付说明注明「设计侧未给 layer,按条目前置条件处理」。
|
|
234
|
+
- **内层盒属性族强制校验**:`white-space` / `text-overflow` / `overflow` / `word-break` / `text-align` / `line-height` / `vertical-align` 这组属性**只在内层文本盒生效**——逐字段核对 `layer`;未指认且条目前置条件也没说 → **退回设计侧补声明**,禁止默认落 host(历史缺口:表头「禁止换行」落 host 被内层默认 `normal` 吃掉 → 表头竖排、行高撑大、列内容被压)。
|
|
234
235
|
- 常规分工:高度 / 背景 / padding 落 host;文本换行、省略、对齐落 inner。
|
|
235
236
|
|
|
237
|
+
**B2. 出厂形态互斥收口 `suppress`(治「新形态上了、旧形态残留」)**——条目带 `suppress` 时,逐通道执行收口,**收口优先走令牌重映射**(在令牌宿主作用域重声明令牌,零权重战争),令牌不存在才写属性:
|
|
238
|
+
|
|
239
|
+
- 每条通道收口后必须在交付说明列出「通道名 → 收口方式 → 落点」,漏一条 = 出厂旧装饰残留。
|
|
240
|
+
- 实例:侧栏 `form=pill` → `suppress: ["右指示条通道"]` → 在侧栏作用域把出厂右竖条令牌重映射为 `none`(出厂 `.el-menu-item.is-active { border-right: var(--…) }` 与 `design-tokens` 的 `3px solid` 令牌都无需改动)。
|
|
241
|
+
- 页签 `form=flat` 属**多通道收口**:透明化激活底色块 + 去圆角间距 + 关闭钮常显 + 贯穿分割线 + 首页页签仅图标——必须逐通道列出并收口,漏任何一条 = 「整个样式和设计不一样」。
|
|
242
|
+
|
|
236
243
|
**C. 覆写优先级 `priority`(禁止逐点硬堆 `!important`)**——条目 `priority.strategy` 给出本点位该怎么赢:
|
|
237
244
|
|
|
238
245
|
| 策略 | 施工口径 |
|
|
@@ -278,6 +285,34 @@ node parser/index.js registry <restore-registry.json> [--verbose] # 只
|
|
|
278
285
|
|
|
279
286
|
每写一条新规则前,先按第 1 步输出的 `▸ 覆写优先级 priority` 判定对手类型与取胜方式(见下节)。
|
|
280
287
|
|
|
288
|
+
#### 特异度必须**逐位比较**(`html` / `body` 抬不动「类位」)
|
|
289
|
+
|
|
290
|
+
特异度写成三元组 `(a, b, c)`:`a` = id,`b` = **类 / 属性选择器 / 伪类**,`c` = 类型选择器 / 伪元素。比较顺序是**先比 `a` → 再比 `b` → 最后比 `c`**,`b` 位为 0 时 `c` 再大也没用。
|
|
291
|
+
|
|
292
|
+
- `html` / `body` 是**类型选择器**,只加 `c` 位。对手 `b` 位更高时,加 `html body` **完全无效**。
|
|
293
|
+
- 对手是组件 scoped(末元素 `[data-v-x]` 只加一个类,`b` 通常 ≤2)时,「抬一级作用域」有效;对手是 `body[layout='vertical'] .sidebar-container .el-menu-item`(属性 + 2 类 = `b=3`)时,`html body .sidebar-container .el-menu-item`(`b=2`)无论再加多少 `html`/`body` 都赢不了。
|
|
294
|
+
- 正确的抬法是**加类**:在祖先链上补稳定的语义类(如 `.el-menu`)把 `b` 抬到与对手相等,再靠 `c`(`html body`)胜出。
|
|
295
|
+
|
|
296
|
+
> **实例(已发生的回归)**:`sidebar.scss` 的 `body[layout='vertical'] .sidebar-container .el-menu-item { color: var(--vts-theme-menu-text) !important }`(`b=3`)压掉了设计层的 `html body .sidebar-container .el-menu-item { color: rgb(255 255 255 / 65%) !important }`(`b=2`)→ 菜单文字改用出厂令牌的**浅色主题值(黑)**落在设计强制的深色侧栏上 → **整栏菜单字全部消失**。规则没写错,是权重没算对。
|
|
297
|
+
|
|
298
|
+
#### 改通道(令牌)优先于抢属性
|
|
299
|
+
|
|
300
|
+
出厂用**语义令牌间接**设置属性时(`color: var(--vts-theme-menu-text)`、`background: var(--vts-theme-menu-bg)`…),**不要写同名属性去抢**,而是**在令牌宿主作用域重映射令牌**:
|
|
301
|
+
|
|
302
|
+
```scss
|
|
303
|
+
html body .sidebar-container { /* 令牌宿主 = 该令牌被消费的元素所在作用域 */
|
|
304
|
+
--vts-theme-menu-text: rgb(255 255 255 / 65%);
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
判据:**令牌在哪个元素上被声明,就在那个作用域重映射**。自定义属性按继承解析,出厂规则自己会消费新值 ⇒ **零权重战争**,也不受对手 `!important` 影响。适用范围:`--vts-theme-*` 全族。
|
|
309
|
+
|
|
310
|
+
只有在「出厂没有该令牌」或「令牌语义与设计不符(如胶囊几何 `inset`/`radius`)」时才回到抢属性,并按上一条逐位比较。
|
|
311
|
+
|
|
312
|
+
**统一顺序:① 先找令牌通道 → ② 无通道才抢属性(逐位比特异度)→ ③ 都不行才 `!important` + 注释对手。**
|
|
313
|
+
|
|
314
|
+
> 上例的正解就是①:在设计层把 `--vts-theme-menu-text/bg/hover/active-bg` 在 `.sidebar-container` 上重映射,出厂规则自己就画出白色的字与蓝色胶囊。
|
|
315
|
+
|
|
281
316
|
写入纪律:
|
|
282
317
|
|
|
283
318
|
- 每条规则带来源标注(`/* <语义 ID> · <变更条目> */`),换设计时整段可替换;
|
|
@@ -292,7 +327,7 @@ node parser/index.js registry <restore-registry.json> [--verbose] # 只
|
|
|
292
327
|
|
|
293
328
|
| `priority.strategy` | 对手 | 必须的写法 | 自检判据 |
|
|
294
329
|
|---|---|---|---|
|
|
295
|
-
| `scope_qualified` |
|
|
330
|
+
| `scope_qualified` | 无,或出厂**全局样式**(`sidebar.scss` / `element-plus.scss` / `theme.scss`,注意它们也在 `index.scss` 的 `@use` 链里、可能带 `!important` 且 `b` 位更高) | 按词典 selector 原样落;**逐位比过对手**(先 b 后 c);出厂用 `var(--vts-theme-*)` 时优先重映射令牌 | 若实测仍被覆盖 → 升格按 `deep_qualified` 处理 |
|
|
296
331
|
| `deep_qualified` | 组件 `<style scoped>`(平手 + 后注入) | **禁止裸类名**。≥3 层作用域限定(如 `html .a .b`)或叠加属性/伪类;仍平手才对本条补 `!important` | 写前自问:这条与组件 scoped 谁特异度高?**平手即错** |
|
|
297
332
|
| `self_plus_important` | 出厂规则带 `!important` | 本条必须 `!important` + 注释写明「对手带 `!important`」;能改走通道变量时优先改通道 | 只抬特异度无效,别白费 |
|
|
298
333
|
|
|
@@ -341,7 +376,8 @@ html .navbar .navbar-breadcrumb-wrap {
|
|
|
341
376
|
- 表头 / 行 / 分页都在视口内,仅表格体内滚动,无外层滚动条、无拉伸 / 塌陷 / 双滚动条,`tableHeight > 0`;
|
|
342
377
|
- **结构层 diff 为空**:`lay-content/index.vue` 的 `.main-content[data-content-mode]` 与 `element-plus.scss` 的 `[data-fill]` 未被改动;同时确认没有「为保高度而放弃设计还原」(出厂卡片 / 内边距 / 内部排布原样未动而变更集声明了改动)——两个方向任一命中即返工
|
|
343
378
|
- [ ] **映射通道活性检查(杂必查)**:样式落地引用的每个 CSS 变量必须在项目样式中**存在消费者**(`变量名` 有 `var(--xxx)` 引用点);只定义不消费的变量 = 通道死路,翻译再准也不生效(menu_active_indicator 曾因 --vts-theme-menu-active-before 无消费者而「映射了却没效果」)。施工时 grep 核对,无消费者时改走消费者存在的作用域或补挂载点并申报。
|
|
344
|
-
- [ ]
|
|
379
|
+
- [ ] **结构施工兑现检查(structure_ops 逐条对账,与红线同级)**:变更集 `structure_ops[]` 的**每一条 op** 都必须在交付说明给出「op → 落在哪个文件 / 哪个节点 / 怎么落的」;`add_node` 必须真的新增了元素或渲染分支(模板 diff 可验),`bind_source` 必须真的改了绑定(`class-name` / `align` / `formatter`)。出现「声明了 op、代码里找不到对应改动」= 交付不完整,禁止只改 CSS 冒充结构施工(历史缺口:操作列分割线 `add_node` 声明了但从未施工 → 按钮间竖线一直缺失)
|
|
380
|
+
- [ ] **同权重失效检查( · 专查「写了不生效」)**:逐条核对设计层新增规则是否真能取胜——① 对手是组件 `<style scoped>` 时,本条特异度必须**严格高于**它(**平手即错**,因为组件样式在全局之后注入);② 对手带 `!important` 时本条必须同样 `!important`,或改走通道变量。**判定方法(必须真数,不许目测)**:对每条新规则与其对手分别写出特异度三元组 `(a,b,c)` 并**逐位比较(先 b 后 c)**,本条的 `b` 不大于对手即判为「失效」;`html` / `body` 只加 `c` 位,**对手 `b` 更高时加 `html body` 无效**,必须靠**加类**(祖先链补稳定语义类,如 `.el-menu`)把 `b` 抬到相等。同 `b` 时,`c` 更高者胜。③ **出厂用语义令牌间接设置该属性时(`var(--vts-theme-*)`),必须先走「令牌重映射」而不是抢属性**——在令牌宿主作用域重声明令牌即生效、零权重战争;只有无令牌或令牌语义不符时才抢属性。历史缺口全部命中本项:面包屑 `display:none`(与组件 scoped 同为 0,2,0)→ 照旧显示;页签关闭钮 `opacity`(同为 0,5,0)→ 仍要 hover 才显;页签项 `padding`(对手带 `!important`)→ 无论怎么抬特异度都改不动;**侧栏菜单 `color`(`b=2` 输给出厂 `b=3` + `!important`)→ 整栏菜单文字用浅色主题的黑色落在深色侧栏上、字全部消失**
|
|
345
381
|
- [ ] **oracle 基线可用性检查**:变更集带 `oracle` 时——① `oracle.mockup` 必须与**本次主题、本次页面**一致(禁止复用异主题效果图:主题错配会让逐点比对必然全红);② `oracle.sids` 与 `changes[]` **双向闭合**:效果图里有、changes[] 未声明 = **欠声明**(该点位永远不可能被还原);changes[] 已声明、效果图无 sid = **无基线**(落地后无法机器验收)。两类出现即回流设计侧补齐,**不得直接开工**(`parser match` 已自动报出)
|
|
346
382
|
- [ ] **dark.scss 暗色同步**:新增视觉规则在 `html.dark` 有对应覆盖
|
|
347
383
|
- [ ] **缺口清单只含意图缺口**:清单每一项都必须是「设计侧未给值 / 值非法」且已注明「回流设计侧补齐」;能力缺口(词典缺 ID / 缺字段枚举 / 缺 form)不得出现在清单里——出现即把可落地项搁置
|