@qilitt-mickey/vue3-temp-skill 1.1.48 → 1.1.50
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/mapping/scenes/admin/content.json +50 -10
- package/mapping/scenes/admin/layout.json +53 -7
- package/package.json +1 -1
- package/parser/fixtures/changeset-fullpage-restore.json +56 -2
- package/parser/fixtures/changeset-neg4-g8.json +15 -0
- package/parser/fixtures/changeset-neg5-g8-stub.json +26 -0
- package/parser/fixtures/registry-sample.json +2 -2
- package/parser/fixtures/verify//350/277/220/345/215/225/347/256/241/347/220/206-/351/222/264/350/223/235.html +44 -0
- package/parser/index.js +440 -31
- package/parser/regression.js +21 -5
- package/references/design-apply.md +31 -4
|
@@ -73,13 +73,26 @@
|
|
|
73
73
|
},
|
|
74
74
|
"admin.content.table.operation_bar": {
|
|
75
75
|
"type": "element",
|
|
76
|
-
"selector": ".vts-
|
|
77
|
-
"file": "
|
|
76
|
+
"selector": ".vts-page-card .flex-between > .flex-end(ReTableBar 内部工具栏行右侧容器,bar.vue JSX 实证 div.flex-end)",
|
|
77
|
+
"file": "条件通道实证(2026-09-20 复核):.vts-action-bar 类**全项目无模板挂载**(仅 element-plus.scss 有样式定义、无消费者)——历史 selector 锚定 .vts-action-bar 属「应该在」而非「实际在」,导致设计层规则全部落空(工具钮裸排事故)。本 selector 改锚真实出厂 DOM;.vts-action-bar 作为可选增强通道保留在 element-plus.scss,页面按需自行挂载后设计层规则自动命中。右侧工具三件套源码实证:刷新 svg-icon + el-dropdown 密度(宽松/默认/紧凑)+ el-popover 列设置",
|
|
78
78
|
"style_scope": ".vts-page-card",
|
|
79
79
|
"forms": {
|
|
80
80
|
"with_tools": "工具三件套(刷新/密度/列设置)齐全——设计规范 list-page §4 要求三件套缺一不可(ReTableBar 出厂已具备,此为默认形态)",
|
|
81
|
+
"tools_labeled": "边框文字钮形态:三件套从「纯图标 + 竖分隔线」换装为「图标 + 文案」的 1px 边框钮(高/圆角/字号走 tools_* 字段族,hover 文字与边框变主色)——出厂 svg-icon 结构保留,文案由业务侧 slots 或 AI 增量插入 span 补齐(结构增量,不删原节点);suppress 必含 tool_divider(出厂两条 el-divider direction=vertical 与边框钮观感互斥,不收口 = 图标钮与边框钮混排)",
|
|
81
82
|
"left_batch": "左侧批量操作区(批量删除红底 + 批量导出白底,未选中置灰 opacity 0.4 + cursor not-allowed)——经 slots.buttons 插入,出厂多数 demo 未用"
|
|
82
83
|
},
|
|
84
|
+
"suppress_rules": {
|
|
85
|
+
"tools_labeled": ["tool_divider"]
|
|
86
|
+
},
|
|
87
|
+
"field_forms": {
|
|
88
|
+
"tools_btn_height": ["tools_labeled"],
|
|
89
|
+
"tools_btn_radius": ["tools_labeled"],
|
|
90
|
+
"tools_font_size": ["tools_labeled"],
|
|
91
|
+
"tools_icon_size": ["tools_labeled"],
|
|
92
|
+
"tools_text_color": ["tools_labeled"],
|
|
93
|
+
"tools_hover_color": ["tools_labeled"],
|
|
94
|
+
"tools_btn_gap": ["tools_labeled"]
|
|
95
|
+
},
|
|
83
96
|
"css_vars": {
|
|
84
97
|
"gap": "--action-bar-gap",
|
|
85
98
|
"padding_y": "--action-bar-padding-y"
|
|
@@ -89,24 +102,34 @@
|
|
|
89
102
|
"btn_radius": "border-radius",
|
|
90
103
|
"btn_font_size": "font-size",
|
|
91
104
|
"batch_delete_bg": "background-color",
|
|
92
|
-
"batch_disabled_opacity": "opacity"
|
|
105
|
+
"batch_disabled_opacity": "opacity",
|
|
106
|
+
"tools_btn_height": "height",
|
|
107
|
+
"tools_btn_radius": "border-radius",
|
|
108
|
+
"tools_font_size": "font-size",
|
|
109
|
+
"tools_btn_gap": "gap"
|
|
93
110
|
},
|
|
94
111
|
"anchors": [
|
|
95
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-
|
|
96
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-
|
|
112
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-page-card .flex-between > .flex-end" },
|
|
113
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-page-card .flex-end .el-button" },
|
|
114
|
+
{ "kind": "class", "layer": "inner", "target": ".vts-page-card .flex-end .vts-tool-btn" },
|
|
97
115
|
{ "kind": "css_var", "target": "--action-bar-gap" },
|
|
98
116
|
{ "kind": "css_var", "target": "--action-bar-padding-y" }
|
|
99
117
|
],
|
|
118
|
+
"sub_selectors": {
|
|
119
|
+
"$comment": "工具三件套部件点位(bar.vue JSX 实证):刷新 svg-icon[name=refresh]、密度 el-dropdown>svg-icon[name=collapse]、列设置 el-popover reference 槽 svg-icon[name=tools];出厂右侧容器 = 工具栏行 .flex-between 的 .flex-end 子容器。form=tools_labeled 时按钮壳与文案按此定位增量插入",
|
|
120
|
+
"tools": ".vts-page-card .flex-between > .flex-end",
|
|
121
|
+
"tool_btn": ".vts-page-card .flex-end .vts-tool-btn"
|
|
122
|
+
},
|
|
100
123
|
"preconditions": [
|
|
101
|
-
"
|
|
102
|
-
"
|
|
124
|
+
"挂载点实证(2026-09-20 复核修正):出厂右侧容器是 .flex-between > .flex-end(真实存在),历史锚点 .vts-action-bar 全项目无模板挂载(仅样式定义、零消费者)——设计层规则写到 .vts-action-bar 上全部落空(工具钮裸排事故根因)。词典 selector 必须锚定源码实证存在的 DOM;「应该在」的点位未经 structure_ops 补挂 = 不存在。",
|
|
125
|
+
"本条目样式落点是 ReTableBar 内部工具栏行内容器——禁止把容器级样式(flex-direction 等)写到 ReTableBar 根节点:根节点是「工具栏行 + 表格 + 分页」的纵向复合容器,写根节点会让工具栏与表格并排、表格被挤压、tableHeight 实测失准(已发生的事故,勿复发)。",
|
|
103
126
|
"gap / padding 的 CSS 变量必须在项目样式中存在消费者(var() 引用),只定义不消费 = 死通道。--action-bar-padding-y 供 padding-block,最多两个值(如 20px 8px),给三个值整条声明即失效。"
|
|
104
127
|
],
|
|
105
128
|
"priority": {
|
|
106
129
|
"strategy": "scope_qualified",
|
|
107
|
-
"reason": "出厂 .
|
|
130
|
+
"reason": "出厂 .flex-end 类位 1(uno 约定类,无 scoped 竞争),作用域限定到 .vts-page-card 前缀即可覆盖;但不得把容器级样式写到 ReTableBar 根节点上。"
|
|
108
131
|
},
|
|
109
|
-
"$note": "设计意图(list-page §4/§11.25-11.36):flex 两端对齐、pad 20px 20px 8px、左侧批量(未选中置灰 opacity 0.4 + not-allowed)、右侧工具三件套缺一不可。分工:本条目管容器布局与置灰;批量删除红色按钮本体走 component.button.danger。demo
|
|
132
|
+
"$note": "设计意图(list-page §4/§11.25-11.36):flex 两端对齐、pad 20px 20px 8px、左侧批量(未选中置灰 opacity 0.4 + not-allowed)、右侧工具三件套缺一不可。分工:本条目管容器布局与置灰;批量删除红色按钮本体走 component.button.danger。demo 噪音按钮去留属业务层,交付说明申报后由项目侧业务闭环移除。⚠tools_labeled 形态(效果图口径):三件套为「图标16px+文案」32px 边框钮(border 1px、radius 6px、gap 6px、hover 文字/边框主色),与出厂「纯图标20px+竖分隔线」是**形态互斥**——声明 tools_labeled 必须同时 suppress tool_divider(隐藏出厂 el-divider),并按结构增量给每个 svg-icon 套 .vts-tool-btn 按钮壳 + 文案 span(结构施工,design-apply 底线二豁免)。"
|
|
110
133
|
},
|
|
111
134
|
"admin.content.table.operation_column": {
|
|
112
135
|
"type": "element",
|
|
@@ -123,6 +146,12 @@
|
|
|
123
146
|
"divider_color": "--re-op-divider-color",
|
|
124
147
|
"divider_gap": "--re-op-divider-gap"
|
|
125
148
|
},
|
|
149
|
+
"field_forms": {
|
|
150
|
+
"slot_width": ["text_link", "icon_text"]
|
|
151
|
+
},
|
|
152
|
+
"data_channels": {
|
|
153
|
+
"slot_width": "等宽槽宽度通道(⚠2026-09-20 语义重写·动态优先):**槽宽默认由组件按按钮文案动态自适应**(ReTableOperate 的 --re-op-slot-w 在 slotMinWidth 省略时走 resolveOperateSlotWidthPx 自动推算),变更集**不声明 slot_width、业务页不传 slot-min-width** ——设计只声明 divider 几何(width/height/margin_x),槽宽随内容走、divider_margin_x 对称由槽内居中兑现(历史事故①:声明 60px 钉死槽宽违反动态优先;历史事故②:槽内 flex-start 使短文案按钮残白全堆到分割线前侧 → 线前 40px/线后 8px 视觉不等距,第五轮截图实证)。仅当设计效果图确实要求**统一槽宽**(如所有操作列等宽对齐网格)时例外:变更集显式声明 slot_width → 施工落业务页 prop(结构通道),禁 CSS 仿冒;无此明确设计意图 = 保持动态。等宽槽本体是对齐机制(槽边界保证行间第 N 项对齐),机制本身禁 CSS 收口 width:auto"
|
|
154
|
+
},
|
|
126
155
|
"$note": "操作列分割线为**条件通道**:出厂组件当前**没有**分割线元素——声明 divider_color / divider_gap 时,必须先按 structure_ops 在 ReTableOperate 模板按钮间 add_node `<span class=\"re-table-operate__divider\">`(中性元素,几何与颜色全走令牌:width/height/gap/color 分别挂 --re-op-divider-width/height/gap/color,出厂缺省 0 不可见),并同步给 resolveOperateColumnWidth 公式补分割线占位((limit-1)×(width+2×gap)),否则最后按钮被裁——元素与公式缺一即申报补通道失败。列宽由组件公式推算,业务页禁止写死 width——列宽属业务层,设计侧不声明列宽(操作列除外)。",
|
|
127
156
|
"custom_style_map": {
|
|
128
157
|
"align": "text-align",
|
|
@@ -132,6 +161,7 @@
|
|
|
132
161
|
"divider_width": "width",
|
|
133
162
|
"divider_height": "height",
|
|
134
163
|
"divider_margin_x": "margin-inline",
|
|
164
|
+
"divider_color": "background-color",
|
|
135
165
|
"more_arrow_size": "font-size",
|
|
136
166
|
"more_arrow_gap": "gap",
|
|
137
167
|
"vertical_align": "vertical-align",
|
|
@@ -145,9 +175,17 @@
|
|
|
145
175
|
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell:has(.re-table-operate)" },
|
|
146
176
|
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell:has(.re-table-operate) > .cell" }
|
|
147
177
|
],
|
|
178
|
+
"sub_selectors": {
|
|
179
|
+
"$comment": "divider_* 字段按前缀路由到分割线元素本体(出厂平铺按钮间 v-if=\"i > 0\" 已有 .re-table-operate__divider;「更多」槽前无元素须按 structure_ops 增量补挂)",
|
|
180
|
+
"divider": ".vts-page-card .re-table-operate .re-table-operate__divider"
|
|
181
|
+
},
|
|
148
182
|
"preconditions": [
|
|
149
183
|
"按钮之间的间距由分割线元素的左右 margin 承载,不是按钮自身 gap:必须先存在分割线元素(ReTableOperate 默认不渲染 divider,需按 structure_ops 补槽位),divider_width / divider_height / divider_margin_x 才有落点——这是「操作列按钮间距没还原」的根因。",
|
|
150
|
-
"「纯文字无图标」是数据侧结论:图标来自业务页列定义的 operateButtons[].icon,只写 form=text_link 而不移除数据里的 icon = 未落地(改 CSS 不算)。"
|
|
184
|
+
"「纯文字无图标」是数据侧结论:图标来自业务页列定义的 operateButtons[].icon,只写 form=text_link 而不移除数据里的 icon = 未落地(改 CSS 不算)。",
|
|
185
|
+
"「更多」折叠槽前必须有分割线:组件出厂模板只在平铺按钮之间渲染 divider(v-if=\"i > 0\"),平铺末位与「更多」槽之间无分割线元素——效果图口径是每个按钮之间都要有且等距,施工时须按 structure_ops 给「更多」槽前补 divider(或把「更多」并入 v-for 让 i 计数覆盖),缺线 = 最后一段间距失真(历史缺口:查看│编辑 更多 之间无线)。",
|
|
186
|
+
"等宽槽(--re-op-slot-w)是行间纵向对齐的唯一机制:设计层禁止覆写 .re-table-operate__slot 宽度为 auto,CSS 收口 auto = 各行按钮漂移、竖线间距不一致(历史事故:孔雀绿 160px 紧凑型被 CSS 收口 auto)。",
|
|
187
|
+
"⚠槽宽三态判定(2026-09-20 通用编排,与 data_channels.slot_width 配套):①**默认=动态自适应**——组件按最长文案自动推算槽宽,变更集不声明 slot_width、业务页不传 slot-min-width(设计只管 divider 几何;钉死固定值 = 短文案按钮残白堆到分割线前侧、线距视觉不等,60px 事故实证);②**例外=统一槽宽**——设计效果图明确所有操作列等宽网格时才声明 slot_width,施工落业务页 prop 禁 CSS 仿冒;③**机制不可 CSS 化**——无论哪态,禁在设计层覆写 __slot 宽度。判据一句话:**槽宽是内容推算的机制值,不是设计声明值;设计声明divider,不声明槽宽**。",
|
|
188
|
+
"⚠对齐语义两级契约(2026-09-20 第五轮截图复核,替代第四轮单级结论):**容器级 flex-start + 槽内 center**。①容器级(.re-table-operate)必须 justify-content: flex-start——按钮数不同的行(2 项 vs 3 项)整组从左起点排布,行组不漂移;容器级 center 是历史误结论,禁用(各行各自居中 → 槽边界漂移、竖线竖向错位)。②槽内级(.re-table-operate__slot 与槽内 .el-button)必须 justify-content: center——等宽槽宽按最长文案推算(如「更多」3 字=60px),2 字按钮(28px)靠左会把 32px 残白全堆到分割线前侧 → 线前 40px/线后 8px 视觉不等距(第五轮截图实证:竖线贴右按钮);居中后 divider_margin_x 两侧对称才成立。行间第 N 项对齐由**等宽槽边界**保证(槽宽全行统一),不受槽内对齐影响——第四轮「槽内也 flex-start」是把容器级结论过度泛化到槽级,勿复发。"
|
|
151
189
|
],
|
|
152
190
|
"priority": {
|
|
153
191
|
"strategy": "scope_qualified",
|
|
@@ -215,6 +253,7 @@
|
|
|
215
253
|
],
|
|
216
254
|
"preconditions": [
|
|
217
255
|
"出厂 element-plus.scss 已给 .el-table .el-table__cell 设了 padding(var(--vts-space-xs) 0),本条目字段必须落 host 层才能覆盖它;写在 inner 层只改内层文本盒,观感上「改了没反应」。",
|
|
256
|
+
"几何语境随值迁移:padding/padding_x/padding_y 落宿主 td 时必须同步声明 suppress_inner(内层 .cell padding 清零口径)——出厂内层 .cell 自带 padding 0 12px,不清零则两层之和 ≠ 设计值(28px/侧 → 列挤坏)。",
|
|
218
257
|
"行高由「单元格 padding + 内容行高」共同决定;声明行高档位时必须同时给出 padding 取值,只改其一会得到非预期行高。"
|
|
219
258
|
],
|
|
220
259
|
"priority": {
|
|
@@ -356,6 +395,7 @@
|
|
|
356
395
|
],
|
|
357
396
|
"preconditions": [
|
|
358
397
|
"行高由「单元格 padding + 内容行高」共同决定(见 admin.content.table.cell)——声明行高档位时必须同时给出 padding 取值,只改其一会得到非预期行高。",
|
|
398
|
+
"几何语境随值迁移:padding_x 落宿主 th/td 时必须同步声明 suppress_inner(内层 .cell padding 清零口径)——出厂内层 .cell 自带 padding 0 12px,不清零则两层之和 ≠ 设计值。",
|
|
359
399
|
"出厂密度档位由 ReTableBar 的 size(large/default/small,源码实证 bar.vue 的宽松/默认/紧凑三项)驱动;设计侧只声明档位意图(form.density),具体 padding 由本项目按常规取值落定,不得照抄效果图某实例数据的行高。"
|
|
360
400
|
],
|
|
361
401
|
"priority": {
|
|
@@ -55,10 +55,25 @@
|
|
|
55
55
|
"style_scope": ".sidebar-container",
|
|
56
56
|
"forms": {
|
|
57
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": "
|
|
59
|
-
"indicator_right": "
|
|
60
|
-
"indicator_underline": "
|
|
61
|
-
"none": "无指示:胶囊与竖条均关闭,仅文字变色。suppress 必含 right_indicator_legacy"
|
|
58
|
+
"indicator_left": "仅左竖条指示、无胶囊:先在本作用域覆写 --vts-theme-menu-active-bg: transparent 关胶囊,再于设计层新建 ::after 竖条消费 --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
|
+
"pill_indicator_left": "胶囊底色 + 左竖条**并存**复合形态(设计实证:效果图 .menu-item.active 同时声明 background:var(--primary) 与 ::before 竖条):胶囊照 pill 走 --vts-theme-menu-active-bg;竖条照 indicator_left 走 --vts-theme-menu-active-before(设计层新建 ::after/::before 消费者)。suppress 必含 right_indicator_legacy(出厂右竖条必须收口)。⚠菜单项宿主盒必须声明 margin 横向内缩(custom_style_map margin_x),否则竖条负偏移落进容器外被 overflow 裁掉——竖条偏移值以「容器 padding − 竖条 left 偏移」为语境换算,禁止照搬外部效果图常量"
|
|
63
|
+
},
|
|
64
|
+
"suppress_rules": {
|
|
65
|
+
"pill": ["right_indicator_legacy"],
|
|
66
|
+
"indicator_left": ["right_indicator_legacy"],
|
|
67
|
+
"indicator_right": ["right_indicator_legacy"],
|
|
68
|
+
"indicator_underline": ["right_indicator_legacy"],
|
|
69
|
+
"none": ["right_indicator_legacy"],
|
|
70
|
+
"pill_indicator_left": ["right_indicator_legacy"]
|
|
71
|
+
},
|
|
72
|
+
"field_forms": {
|
|
73
|
+
"active_indicator_width": ["indicator_left", "indicator_right", "indicator_underline", "pill_indicator_left"],
|
|
74
|
+
"active_indicator_thickness": ["indicator_left", "indicator_right", "indicator_underline", "pill_indicator_left"],
|
|
75
|
+
"active_indicator_style": ["indicator_left", "indicator_right", "indicator_underline", "pill_indicator_left"],
|
|
76
|
+
"menu_active_bg": ["pill", "pill_indicator_left"]
|
|
62
77
|
},
|
|
63
78
|
"css_vars": {
|
|
64
79
|
"menu_bg": "--vts-theme-menu-bg",
|
|
@@ -78,6 +93,7 @@
|
|
|
78
93
|
"active_indicator_thickness": "height",
|
|
79
94
|
"active_indicator_style": "border-radius",
|
|
80
95
|
"padding_y": "padding-block",
|
|
96
|
+
"margin_x": "margin-inline",
|
|
81
97
|
"font_size": "font-size",
|
|
82
98
|
"font_weight": "font-weight",
|
|
83
99
|
"text_color": "color"
|
|
@@ -96,7 +112,7 @@
|
|
|
96
112
|
"strategy": "deep_qualified",
|
|
97
113
|
"reason": "出厂 sidebar.scss 的胶囊规则用 !important,设计层需以同等或更高权重覆盖。"
|
|
98
114
|
},
|
|
99
|
-
"$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 内成对落地两件事才算施工完成——①
|
|
115
|
+
"$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_* / pill_indicator_left 时必须在本条目 style_scope 内成对落地两件事才算施工完成——① 竖条消费者(form 不含 pill 时另需覆写 --vts-theme-menu-active-bg: transparent 关胶囊);② 在设计层文件(不可写出厂 sidebar.scss)新建 ::after/::before 消费者引用 var(--vts-theme-menu-active-before)。缺任一项 = 「映射了却没效果」。所有几何参数(方位/粗细/长度/圆角/内缩)取自变更集 style 字段,禁止写死 left:0 / 3px 等常量。⚠field_forms 硬闸(parser G7 机检):style 声明的字段必须被当前 form 消费——如 active_indicator_* 只在 indicator_* / pill_indicator_left 形态下有消费者,声明 pill 却带竖条字段 = 字段被静默丢弃(历史事故:孔雀绿变更集声明 pill + active_indicator_*,设计层按 pill 施工把竖条令牌置透明,效果图要求的左竖条消失)。"
|
|
100
116
|
},
|
|
101
117
|
"admin.layout.sidebar.collapse_trigger": {
|
|
102
118
|
"type": "element",
|
|
@@ -107,6 +123,10 @@
|
|
|
107
123
|
"bottom_bar": "SidebarLeftCollapse(底部条,出厂默认)",
|
|
108
124
|
"center_edge": "SidebarCenterCollapse(侧缘中点,折叠/悬停时显示)"
|
|
109
125
|
},
|
|
126
|
+
"suppress_rules": {
|
|
127
|
+
"center_edge": ["bottom_bar"],
|
|
128
|
+
"bottom_bar": ["center_edge"]
|
|
129
|
+
},
|
|
110
130
|
"css_vars": {
|
|
111
131
|
"bar_height": "--sidebar-collapse-bar-height"
|
|
112
132
|
},
|
|
@@ -190,6 +210,9 @@
|
|
|
190
210
|
"icon_only": "出厂现状:纯图标触发器(.language-trigger > .language-icon),下拉菜单选语言",
|
|
191
211
|
"inline_switch": "并排切换形态(下拉项平铺为触发器旁的切换组)"
|
|
192
212
|
},
|
|
213
|
+
"suppress_rules": {
|
|
214
|
+
"inline_switch": ["icon_only"]
|
|
215
|
+
},
|
|
193
216
|
"css_vars": {
|
|
194
217
|
"icon_color": "--el-text-color-regular",
|
|
195
218
|
"hover_bg": "--el-fill-color-light"
|
|
@@ -216,6 +239,9 @@
|
|
|
216
239
|
"sidebar_bottom": "出厂现状:侧栏底部折叠条(SidebarLeftCollapse)",
|
|
217
240
|
"sidebar_center": "侧栏侧缘中点(SidebarCenterCollapse)"
|
|
218
241
|
},
|
|
242
|
+
"suppress_rules": {
|
|
243
|
+
"header_inline": ["sidebar_bottom", "sidebar_center"]
|
|
244
|
+
},
|
|
219
245
|
"css_vars": {
|
|
220
246
|
"icon_color": "--el-text-color-regular",
|
|
221
247
|
"hover_bg": "--el-fill-color-light"
|
|
@@ -273,6 +299,11 @@
|
|
|
273
299
|
"avatar_only": "仅头像",
|
|
274
300
|
"name_only": "仅用户名"
|
|
275
301
|
},
|
|
302
|
+
"suppress_rules": {
|
|
303
|
+
"greeting_name": ["avatar_name"],
|
|
304
|
+
"avatar_only": ["avatar_name"],
|
|
305
|
+
"name_only": ["avatar_name"]
|
|
306
|
+
},
|
|
276
307
|
"sub_selectors": {
|
|
277
308
|
"$comment": "avatar/name 为点位内部部件,不设独立语义 ID(符合 4 段 ID 上限);样式字段按前缀路由到对应选择器。form 含 greeting 时新增节点统一用 class 前缀 vts-header-greeting / vts-header-username(插入前先查重名)",
|
|
278
309
|
"avatar": ".navbar-right .el-dropdown-link img",
|
|
@@ -315,6 +346,18 @@
|
|
|
315
346
|
"card": "卡片页签(ShowModel=card):圆角卡片底 + --vts-tag-card-* 整组令牌 + 关闭钮 hover 才显现(出厂 opacity:0)",
|
|
316
347
|
"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 字段,禁止写死常量"
|
|
317
348
|
},
|
|
349
|
+
"suppress_rules": {
|
|
350
|
+
"flat": [
|
|
351
|
+
"card_idle_bg",
|
|
352
|
+
"card_active_bg",
|
|
353
|
+
"card_hover_bg",
|
|
354
|
+
"card_radius",
|
|
355
|
+
"card_gap",
|
|
356
|
+
"card_active_text",
|
|
357
|
+
"card_idle_text",
|
|
358
|
+
"card_close_color"
|
|
359
|
+
]
|
|
360
|
+
},
|
|
318
361
|
"css_vars": {
|
|
319
362
|
"height": "--tabs-height",
|
|
320
363
|
"chrome_inset_top": "--vts-tag-chrome-inset-top",
|
|
@@ -339,13 +382,16 @@
|
|
|
339
382
|
{ "kind": "class", "layer": "inner", "target": ".tags-view .scroll-container" }
|
|
340
383
|
],
|
|
341
384
|
"preconditions": [
|
|
342
|
-
"容器内边距出厂由组件样式给出(非 0),设计要求「内边距归零、首页页签与折叠按钮左对齐」时必须显式声明 padding_inline,不声明即保留出厂值(这是「首页页签不贴左缘」的根因)。"
|
|
385
|
+
"容器内边距出厂由组件样式给出(非 0),设计要求「内边距归零、首页页签与折叠按钮左对齐」时必须显式声明 padding_inline,不声明即保留出厂值(这是「首页页签不贴左缘」的根因)。",
|
|
386
|
+
"⚠ShowModel 运行时缓存坑:showModel 经 responsive-storage 持久化于 localStorage(命名空间 responsive-),platform-config.json 改 ShowModel 后**旧缓存仍生效**——项目侧施工 ShowModel 时必须同步清 localStorage(或 Version++ 触发响应式存储失效),否则模板代码已换、运行时仍渲染旧形态,页签「样式完全不对」多半是缓存残留而非映射失败。施工后验证口径:浏览器 DevTools Application→Local Storage 清 responsive-* 键后刷新再比对。",
|
|
387
|
+
"⚠ShowModel 三分支运行时兜底(2026-09-20 截图复核):useTags.ts 实证 showModel 读取链 = localStorage → fallback **'smart'**(platform-config 的 ShowModel 只在 storage 初始化时生效);而模板 DOM 只实现 chrome / card 两分支(v-if / v-else-if),smart 落入 v-else 裸分支——**无 .card-item / .card-tab 类**,锚定 card 结构的设计层规则全部不命中,仅锚定 .scroll-item 的规则(分割线等)命中 → 同一页签栏「半新半旧」混合观感(截图实证:底色块残留 + 分割线在)。因此 form=flat 施工必须**三分支全覆盖**:① 锚定 .card-item / .card-tab 的规则之外,同步给出锚定 .scroll-item 直系(不限形态类)的兜底规则(盒几何/底色透明/激活态),或在词典 preconditions 声明「ShowModel 须确保运行时为 card」(清缓存 + platform-config 双写)——二选一必须做,只写 card 锚点 = smart 残余分支裸奔。",
|
|
388
|
+
"⚠ShowModel 三件套硬闸(2026-09-20 复盘升级,G4 T 通道施工必须项):仅改 platform-config.ShowModel **不生效**——showModel 读 localStorage,而 localStorage 只在 platform-config.Version 变化时经 responsive.ts invalidateStorageIfConfigVersionChanged 重灌(历史事故:孔雀绿还原只改了 ShowModel=card,Version 停留 0.0.5,浏览器残留 chrome 形态缓存 → card/smart 兜底规则双双不命中、页签零变化)。form 涉及页签形态时施工三件套缺一不可:① platform-config.ShowModel = form 对应值(flat→card);② platform-config.Version 自增一位(0.0.5→0.0.6,触发缓存失效重灌);③ 渲染取证断言 .scroll-item.card-item 实际挂载(DevTools 或 DOM 断言),不许只看代码改没改。漏②=代码对但运行时仍旧形态(本轮实证);漏③=无渲染证据自嗨绿。"
|
|
343
389
|
],
|
|
344
390
|
"priority": {
|
|
345
391
|
"strategy": "deep_qualified",
|
|
346
392
|
"reason": "容器内边距规则写在组件 scoped 内,与设计层同权重,需显式提权。"
|
|
347
393
|
},
|
|
348
|
-
"$note": "showModel 由 platform-config.json ShowModel
|
|
394
|
+
"$note": "showModel 由 platform-config.json ShowModel 字段声明、但运行时实值由 localStorage 决定(Version++ 才重灌)——施工按 preconditions 三件套执行;smart/line 模板未实现,映射层按 chrome/card 两形态处理"
|
|
349
395
|
},
|
|
350
396
|
"admin.layout.tabs.home_tab": {
|
|
351
397
|
"type": "element",
|
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "端到端示例 ·
|
|
2
|
+
"$comment": "端到端示例 · 整页场景还原(对照效果图逐模块提取的完整交付样例,模拟设计技能真实产出)。G8 模式闸正例:mode=restore + scheme + oracle(含 mockup) + coverage(含 registry) 齐备。覆盖:global 主题 + 壳层全模块 + 列表页全字段 + 表格细粒度点位(操作列形态/状态Tag/金额对齐/缩略图)+ pending 新点位。值口径演示:主题色用语义值(钴蓝-N/错误色)、尺寸用数值字面量(28px/40px 等,设计侧 v1.0 协议第 3 条合法通道)、灰阶用临时主题 hex + notes 申报。业务功能差异(新增运单按钮功能、demo 演示按钮去留)不在本变更集范围,走项目侧业务闭环开发(双层交付)。运行:node parser/index.js match <本文件>(cwd 为 skill 根)。",
|
|
3
3
|
"schema": "design.changeset/1.0",
|
|
4
4
|
"changeset_version": "1.0.0",
|
|
5
5
|
"mapping_version": "1.0.0",
|
|
6
6
|
"scene": "admin",
|
|
7
|
+
"scheme": "default",
|
|
8
|
+
"mode": "restore",
|
|
7
9
|
"layout_type": "vertical",
|
|
8
10
|
"global": {
|
|
9
11
|
"brand_primary": "钴蓝-5",
|
|
@@ -26,12 +28,32 @@
|
|
|
26
28
|
}
|
|
27
29
|
},
|
|
28
30
|
{ "id": "admin.layout.header", "style": { "bg": "#FFFFFF" } },
|
|
29
|
-
{
|
|
31
|
+
{
|
|
32
|
+
"id": "admin.layout.header.lang_switch",
|
|
33
|
+
"form": "inline_switch",
|
|
34
|
+
"suppress": ["icon_only"],
|
|
35
|
+
"style": { "icon_size": "16px", "gap": "8px", "text_font_size": "14px" }
|
|
36
|
+
},
|
|
30
37
|
{
|
|
31
38
|
"id": "admin.layout.header.user_profile",
|
|
32
39
|
"style": { "avatar_width": "28px", "avatar_height": "28px", "avatar_radius": "全圆角", "name_font_size": "14px", "name_font_weight": "中等" }
|
|
33
40
|
},
|
|
34
41
|
{ "id": "admin.layout.tabs", "form": "chrome", "style": { "bg": "#FFFFFF" } },
|
|
42
|
+
{
|
|
43
|
+
"id": "admin.content.table.header_cell",
|
|
44
|
+
"style": { "height": "48px", "bg": "#FAFAFA", "font_weight": "中等" }
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "admin.content.table.cell",
|
|
48
|
+
"style": { "padding_y": "8px", "vertical_align": "middle" },
|
|
49
|
+
"layer": { "padding_y": "inner", "vertical_align": "inner" },
|
|
50
|
+
"suppress_inner": true
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "admin.content.table.cell_status",
|
|
54
|
+
"form": "filled",
|
|
55
|
+
"style": { "bg": "#E8F3FF", "text_color": "钴蓝-5", "radius": "小圆角" }
|
|
56
|
+
},
|
|
35
57
|
{
|
|
36
58
|
"id": "admin.content.page_header",
|
|
37
59
|
"style": { "title_size": "20px", "title_weight": "加粗", "desc_color": "钴蓝-3", "actions_gap": "8px" }
|
|
@@ -56,6 +78,38 @@
|
|
|
56
78
|
{ "id": "component.button.danger", "style": { "bg_color": "错误色", "border_color": "错误色", "text_color": "#FFFFFF" } },
|
|
57
79
|
{ "id": "admin.content.pagination", "style": { "active_bg": "钴蓝-5", "active_color": "#FFFFFF" } }
|
|
58
80
|
],
|
|
81
|
+
"oracle": {
|
|
82
|
+
"mockup": "verify/运单管理-钴蓝.html",
|
|
83
|
+
"sids": [
|
|
84
|
+
"admin.layout.sidebar",
|
|
85
|
+
"admin.layout.sidebar.logo_area",
|
|
86
|
+
"admin.layout.sidebar.menu",
|
|
87
|
+
"admin.layout.header",
|
|
88
|
+
"admin.layout.header.lang_switch",
|
|
89
|
+
"admin.layout.header.user_profile",
|
|
90
|
+
"admin.layout.tabs",
|
|
91
|
+
"admin.content.page_header",
|
|
92
|
+
"admin.content.filter_area",
|
|
93
|
+
"admin.content.table.operation_bar",
|
|
94
|
+
"admin.content.table.operation_column",
|
|
95
|
+
"admin.content.table.area",
|
|
96
|
+
"admin.content.table.header_cell",
|
|
97
|
+
"admin.content.table.cell",
|
|
98
|
+
"admin.content.table.cell_status",
|
|
99
|
+
"admin.content.table.cell_amount",
|
|
100
|
+
"admin.content.table.cell_thumb",
|
|
101
|
+
"component.tag.status",
|
|
102
|
+
"component.button.danger",
|
|
103
|
+
"admin.content.pagination"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
"coverage": {
|
|
107
|
+
"registry": "registry-sample.json",
|
|
108
|
+
"registrable": 6,
|
|
109
|
+
"applicable": 4,
|
|
110
|
+
"covered": 4,
|
|
111
|
+
"gaps": []
|
|
112
|
+
},
|
|
59
113
|
"pending": [
|
|
60
114
|
{
|
|
61
115
|
"proposed_id": "admin.content.page_header.greeting",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "G8 模式闸负例:mode=restore 但缺 oracle 与 coverage(伪还原变更集,2026-09-20 事故的机检复现件)。预期:match 打印「G8 模式闸」并 exit 1。与 changeset-pos.json 的区别仅此——mode=restore 却没带基线三件套。",
|
|
3
|
+
"schema": "design.changeset/1.0",
|
|
4
|
+
"changeset_version": "1.0.0",
|
|
5
|
+
"mapping_version": "1.0.0",
|
|
6
|
+
"scene": "admin",
|
|
7
|
+
"mode": "restore",
|
|
8
|
+
"layout_type": "vertical",
|
|
9
|
+
"global": { "brand_primary": "钴蓝-5" },
|
|
10
|
+
"changes": [
|
|
11
|
+
{ "id": "admin.layout.sidebar.menu", "style": { "menu_bg": "钴蓝-9", "menu_active_bg": "钴蓝-5" } },
|
|
12
|
+
{ "id": "component.button.primary", "style": { "bg_color": "钴蓝-5" } }
|
|
13
|
+
],
|
|
14
|
+
"notes": "伪还原变更集:只换主题色就宣称场景还原——没有 oracle 验收基线(还原度不可证明)、没有 coverage 登记表记账(组内子项静默丢失不可数)。G8 之前这类变更集只收软提示、一路绿灯,落地后用户看到「只变了主题、布局细节零变化」。"
|
|
15
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "G8 强化负例(二轮):mode=restore,scheme/oracle/coverage 三个对象都在,但 oracle.mockup 与 coverage.registry 为空串 —— 「有壳无芯」的伪基线:验收抽不出效果图、覆盖率无法以登记表重算。预期:match 打印「G8 模式闸」并 exit 1。与 changeset-fullpage-restore.json 的区别仅在此三处。",
|
|
3
|
+
"schema": "design.changeset/1.0",
|
|
4
|
+
"changeset_version": "1.0.0",
|
|
5
|
+
"mapping_version": "1.0.0",
|
|
6
|
+
"scene": "admin",
|
|
7
|
+
"scheme": "default",
|
|
8
|
+
"mode": "restore",
|
|
9
|
+
"layout_type": "vertical",
|
|
10
|
+
"global": { "brand_primary": "钴蓝-5" },
|
|
11
|
+
"changes": [
|
|
12
|
+
{ "id": "admin.layout.sidebar.menu", "style": { "menu_bg": "钴蓝-9", "menu_active_bg": "钴蓝-5" } }
|
|
13
|
+
],
|
|
14
|
+
"oracle": {
|
|
15
|
+
"mockup": "",
|
|
16
|
+
"sids": ["admin.layout.sidebar.menu"]
|
|
17
|
+
},
|
|
18
|
+
"coverage": {
|
|
19
|
+
"registry": "",
|
|
20
|
+
"registrable": 186,
|
|
21
|
+
"applicable": 4,
|
|
22
|
+
"covered": 4,
|
|
23
|
+
"gaps": []
|
|
24
|
+
},
|
|
25
|
+
"notes": "空壳伪基线:oracle/coverage 对象齐全但 mockup 与 registry 为空。过去只校验『对象是否存在』,这类写法能一路绿灯——效果图无从抽取、A/C 无从重算,『完备性可数』形同虚设。G8 强化后予拦截。"
|
|
26
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "回归夹具 · 登记表样例(不是真实交付件)。6 条登记项示范粒度与字段口径:4 条 always(恒存在,必登)、
|
|
2
|
+
"$comment": "回归夹具 · 登记表样例(不是真实交付件)。6 条登记项示范粒度与字段口径:4 条 always(恒存在,必登)、2 条条件项。用于 M/N 两步:M 校验覆盖率重算能报出欠声明并 exit 1,N 校验通道核验能跑通。⚠ selection_column / cell 等点位词典已补建通道,本夹具不再示范 pending 标注(pending 演示见 registry-bad.json 的硬缺口反例)。",
|
|
3
3
|
"schema": "design.restore-registry/1.0",
|
|
4
4
|
"design_scheme": "default",
|
|
5
5
|
"scene": "admin",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
{ "rule": "sample#2", "group": "样例·表格区", "sid": "admin.content.table.cell", "dims": ["padding", "padding_y"], "channel": ["style", "layer"], "source": "both", "always": true },
|
|
10
10
|
{ "rule": "sample#3", "group": "样例·金额列", "sid": "admin.content.table.cell_amount", "dims": ["align"], "channel": ["style", "structure_ops"], "source": "spec", "always": true },
|
|
11
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": ["
|
|
12
|
+
{ "rule": "sample#5", "group": "样例·选择列", "sid": "admin.content.table.selection_column", "dims": ["text_align", "padding"], "channel": ["style"], "source": "spec", "always": false },
|
|
13
13
|
{ "rule": "sample#6", "group": "样例·状态列", "sid": "component.tag.status", "dims": ["bg_color"], "channel": ["style"], "source": "spec", "always": false }
|
|
14
14
|
]
|
|
15
15
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<!-- G8 模式闸正例配套 · 效果图实物(changeset-fullpage-restore.json 的 oracle.mockup 夹具,非真实交付件)。
|
|
3
|
+
文件名带主题词「钴蓝」(oracle 主题一致性校验依据);每个 data-sid 对应 oracle.sids。
|
|
4
|
+
文末注释内含 1 个同形 data-sid(parser 剥注释后不计数,验证 §7.1 注释兜底防线)。 -->
|
|
5
|
+
<html>
|
|
6
|
+
<head><meta charset="utf-8"><title>运单管理-钴蓝</title></head>
|
|
7
|
+
<body>
|
|
8
|
+
<div class="sidebar-container" data-sid="admin.layout.sidebar">
|
|
9
|
+
<div class="sidebar-logo" data-sid="admin.layout.sidebar.logo_area">LOGO</div>
|
|
10
|
+
<ul class="el-menu" data-sid="admin.layout.sidebar.menu"><li>菜单项</li></ul>
|
|
11
|
+
</div>
|
|
12
|
+
<header class="navbar" data-sid="admin.layout.header">
|
|
13
|
+
<div class="language-trigger" data-sid="admin.layout.header.lang_switch"><span class="language-icon">中</span><span class="language-text">简体中文</span></div>
|
|
14
|
+
<div class="navbar-right el-dropdown-link" data-sid="admin.layout.header.user_profile"><img alt=""><p>张伟</p></div>
|
|
15
|
+
</header>
|
|
16
|
+
<div class="tags-view" data-sid="admin.layout.tabs"><span class="scroll-item">首页</span></div>
|
|
17
|
+
<main class="app-main">
|
|
18
|
+
<div class="vts-page-header" data-sid="admin.content.page_header"><h2>运单管理</h2></div>
|
|
19
|
+
<div class="filter-area" data-sid="admin.content.filter_area"><input></div>
|
|
20
|
+
<div class="table-area">
|
|
21
|
+
<div class="table-bar" data-sid="admin.content.table.operation_bar"><button>新增运单</button></div>
|
|
22
|
+
<table data-sid="admin.content.table.area">
|
|
23
|
+
<thead>
|
|
24
|
+
<tr>
|
|
25
|
+
<th class="el-table__cell" data-sid="admin.content.table.header_cell">列名</th>
|
|
26
|
+
</tr>
|
|
27
|
+
</thead>
|
|
28
|
+
<tbody>
|
|
29
|
+
<tr>
|
|
30
|
+
<td class="el-table__cell" data-sid="admin.content.table.cell">单元格文本</td>
|
|
31
|
+
<td class="operate" data-sid="admin.content.table.operation_column"><a>查看</a><span class="divider"></span><a>更多</a></td>
|
|
32
|
+
<td class="amount" data-sid="admin.content.table.cell_amount">¥1,280.00</td>
|
|
33
|
+
<td><img class="thumb" data-sid="admin.content.table.cell_thumb"></td>
|
|
34
|
+
<td><span class="tag" data-sid="admin.content.table.cell_status">已签收</span><span class="tag global" data-sid="component.tag.status">状态</span></td>
|
|
35
|
+
</tr>
|
|
36
|
+
</tbody>
|
|
37
|
+
</table>
|
|
38
|
+
<button class="danger" data-sid="component.button.danger">批量删除</button>
|
|
39
|
+
<div class="pagination" data-sid="admin.content.pagination">1 2 3</div>
|
|
40
|
+
</div>
|
|
41
|
+
</main>
|
|
42
|
+
<!-- 注释内同形串(剥注释后不计数):data-sid="admin.content.page_header" -->
|
|
43
|
+
</body>
|
|
44
|
+
</html>
|