@qilitt-mickey/vue3-temp-skill 1.1.76 → 1.2.2
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/README.md +99 -82
- package/SKILL.md +65 -28
- package/bin/cli.js +5 -6
- package/mapping/admin.json +60 -0
- package/package.json +5 -13
- package/references/adapters/_new-adapter.md +88 -0
- package/references/adapters/vue-antdv.md +110 -0
- package/references/adapters/vue-element-plus.md +132 -0
- package/references/design-apply.md +259 -122
- package/scripts/check-landing.mjs +419 -0
- package/scripts/modules.json +2 -2
- package/dist/mapping-type.d.ts +0 -33
- package/dist/theme-vars.js +0 -62
- package/dist/theme-vars.ts +0 -113
- package/dist/theme.css +0 -73
- package/mapping/basic/color.json +0 -35
- package/mapping/basic/radius.json +0 -17
- package/mapping/basic/semantic-values.json +0 -72
- package/mapping/basic/spacing.json +0 -21
- package/mapping/basic/typography.json +0 -21
- package/mapping/component/button.json +0 -90
- package/mapping/component/card.json +0 -31
- package/mapping/component/input.json +0 -42
- package/mapping/component/overlay.json +0 -79
- package/mapping/component/pagination.json +0 -34
- package/mapping/component/table.json +0 -42
- package/mapping/component/tag.json +0 -48
- package/mapping/layout/breakpoint.json +0 -20
- package/mapping/layout/shell-geometry.json +0 -26
- package/mapping/scenes/admin/content.json +0 -497
- package/mapping/scenes/admin/layout.json +0 -577
- package/parser/fixtures/changeset-fullpage-restore.json +0 -259
- package/parser/fixtures/changeset-gap-block.json +0 -24
- package/parser/fixtures/changeset-legacy.json +0 -11
- package/parser/fixtures/changeset-neg1.json +0 -8
- package/parser/fixtures/changeset-neg2.json +0 -10
- package/parser/fixtures/changeset-neg3.json +0 -22
- package/parser/fixtures/changeset-neg4-g8.json +0 -15
- package/parser/fixtures/changeset-neg5-g8-stub.json +0 -26
- package/parser/fixtures/changeset-neg6-g9-identity.json +0 -39
- package/parser/fixtures/changeset-neg7-g10-dims.json +0 -57
- package/parser/fixtures/changeset-neg8-g11-oracle.json +0 -57
- package/parser/fixtures/changeset-neg9-g6-token-chain.json +0 -34
- package/parser/fixtures/changeset-pos-g6-token-chain.json +0 -35
- package/parser/fixtures/changeset-pos-theme-neutral.json +0 -264
- package/parser/fixtures/changeset-pos-theme-nometa.json +0 -260
- package/parser/fixtures/changeset-pos.json +0 -50
- package/parser/fixtures/changeset-registry-gap.json +0 -29
- package/parser/fixtures/changeset-v32-fields.json +0 -71
- package/parser/fixtures/fake-project/src/styles/app.scss +0 -5
- package/parser/fixtures/fake-project/src/views/list.vue +0 -13
- package/parser/fixtures/registry-bad.json +0 -11
- package/parser/fixtures/registry-g6-token-chain.json +0 -10
- package/parser/fixtures/registry-sample.json +0 -15
- package/parser/fixtures/verify/actual-clean.json +0 -35
- package/parser/fixtures/verify/actual.json +0 -33
- package/parser/fixtures/verify/mockup-baseline-admin-list.html +0 -27
- package/parser/fixtures/verify/mockup-g6-content.html +0 -12
- package/parser/fixtures/verify/mockup-neutral.html +0 -26
- package/parser/fixtures/verify/mockup-nometa.html +0 -26
- package/parser/fixtures/verify/oracle.json +0 -37
- package/parser/fixtures/verify/snapshot-latest.json +0 -103
- package/parser/generator.js +0 -178
- package/parser/index.js +0 -2706
- package/parser/loader.js +0 -66
- package/parser/override.js +0 -119
- package/parser/regression.js +0 -301
- package/parser/validator.js +0 -206
- package/parser/watch.js +0 -103
- package/references/steps/maintenance.md +0 -31
- package/references/steps/regression.md +0 -49
- package/references/steps/step0-preflight.md +0 -58
- package/references/steps/step1-match.md +0 -67
- package/references/steps/step1b-audit.md +0 -23
- package/references/steps/step1c-registry.md +0 -29
- package/references/steps/step2-structure.md +0 -73
- package/references/steps/step3-style.md +0 -38
- package/references/steps/step3b-shell.md +0 -63
- package/references/steps/step3c-priority.md +0 -26
- package/references/steps/step4-l3.md +0 -14
- package/references/steps/step5-gates.md +0 -65
- package/references/steps/step6-verify.md +0 -77
- package/scripts/apply-final-gate.mjs +0 -170
- package/scripts/check.mjs +0 -207
- package/scripts/design-audit.mjs +0 -1707
- package/scripts/validate.mjs +0 -106
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "布局规则 · 断点映射。项目断点由 useResizeObserver(layout/index.vue)与 UnoCSS presetWind3 决定,映射为设计侧抽象断点字段。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "layout",
|
|
5
|
-
"domain": "breakpoint",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"tokens": {
|
|
11
|
-
"bp_mobile": { "value": 760, "type": "breakpoint", "unit": "px", "desc": "≤760 判定移动端:隐藏侧栏,强制 vertical", "hook": "useResizeObserver → toggle('mobile')" },
|
|
12
|
-
"bp_collapse": { "value": 990, "type": "breakpoint", "unit": "px", "desc": "760~990 折叠侧栏", "hook": "useResizeObserver → toggle('desktop', false)" },
|
|
13
|
-
"bp_expand": { "value": 990, "type": "breakpoint", "unit": "px", "desc": ">990 展开侧栏(非点击折叠态)", "hook": "useResizeObserver → toggle('desktop', true)" },
|
|
14
|
-
"unocss_sm": { "value": 640, "type": "breakpoint", "unit": "px", "desc": "UnoCSS sm 断点(presetWind3)" },
|
|
15
|
-
"unocss_md": { "value": 768, "type": "breakpoint", "unit": "px", "desc": "UnoCSS md 断点" },
|
|
16
|
-
"unocss_lg": { "value": 1024, "type": "breakpoint", "unit": "px", "desc": "UnoCSS lg 断点" },
|
|
17
|
-
"unocss_xl": { "value": 1280, "type": "breakpoint", "unit": "px", "desc": "UnoCSS xl 断点" }
|
|
18
|
-
},
|
|
19
|
-
"$note": "断点值为只读事实映射:设计侧应适配上述断点输出响应式意图;修改断点属于模板行为变更,不在主题变更集范围内。"
|
|
20
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "布局规则 · 壳层几何令牌映射(admin 场景标准布局:vertical/horizontal/mix 三模式共用)。设计侧输出 layout_geometry.* 抽象字段或对 layout.* 语义 ID 的 style.width/height 即可转换。header 顶栏(navbar)、tabs 页签栏、sidebar 侧栏、content 内容区。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "layout",
|
|
5
|
-
"domain": "shell_geometry",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "admin",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"tokens": {
|
|
11
|
-
"header_height": { "token": "--header-height → --vts-bar-height", "type": "size", "default": "48px", "desc": "顶栏高度;改后壳层 padding-top 自动跟随(--layout-header-offset)" },
|
|
12
|
-
"tabs_height": { "token": "--tabs-height → --vts-tabs-height", "type": "size", "default": "32px", "desc": "多标签页签栏高度(≠ EP 内容区 Tabs --tabs-item-height)" },
|
|
13
|
-
"sidebar_width": { "token": "--sidebar-width", "type": "size", "default": "208px", "desc": "侧栏展开宽度(sidebar.scss mixin 三布局共用)" },
|
|
14
|
-
"sidebar_collapsed_width": { "token": "--sidebar-collapsed-width", "type": "size", "default": "64px", "desc": "侧栏折叠宽度" },
|
|
15
|
-
"sidebar_collapse_bar_height": { "token": "--sidebar-collapse-bar-height", "type": "size", "default": "40px", "desc": "侧栏底部折叠条高度" },
|
|
16
|
-
"layout_footer_height": { "token": "--layout-footer-height", "type": "size", "default": "48px", "desc": "页脚高度" },
|
|
17
|
-
"tabs_item_height": { "token": "--tabs-item-height", "type": "size", "default": "46px", "desc": "EP 内容区 Tabs 项高(非壳层页签)" },
|
|
18
|
-
"menu_item_height": { "token": "--el-menu-item-height", "type": "size", "default": "40px", "desc": "侧栏菜单项高度" }
|
|
19
|
-
},
|
|
20
|
-
"layout_modes": {
|
|
21
|
-
"$comment": "标准布局枚举:现有三模式即标准布局(platform-config.json Layout 字段)。变体/定制布局按布局分级规则派生。",
|
|
22
|
-
"vertical": { "desc": "侧边导航(出厂默认)", "switch": "platform-config.json Layout=vertical", "sidebar": true },
|
|
23
|
-
"horizontal": { "desc": "顶部导航(菜单入顶栏)", "switch": "Layout=horizontal", "sidebar": false },
|
|
24
|
-
"mix": { "desc": "混合(一级菜单侧栏 + 二级顶部)", "switch": "Layout=mix", "sidebar": true }
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,497 +0,0 @@
|
|
|
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 构图令牌,dark.scss 消费 vts-filter-area),存量表格 demo(views/table/{base,treeTable,vxe-table})已对齐样板;pagination 为 Element Plus 实证类(RePagination 根节点即 el-pagination)。版本恒 1.0.0(由 SKILL.md 体系版本统一管理)。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "scene",
|
|
5
|
-
"scene": "admin",
|
|
6
|
-
"domain": "content",
|
|
7
|
-
"version": "1.0.0",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"mappings": {
|
|
11
|
-
"admin.content.container": {
|
|
12
|
-
"type": "element",
|
|
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(滚动归属:data-content-mode 显式优先,自动探测带 :not([data-content-mode]) 守卫兜底)+ src/styles/element-plus.scss(填满通道:中性属性 [data-fill])",
|
|
15
|
-
"style_scope": ":global(壳层样式,非 scoped 页面样式)",
|
|
16
|
-
"css_vars": {
|
|
17
|
-
"content_padding": "--vts-margin",
|
|
18
|
-
"header_offset": "--vts-layout-header-offset",
|
|
19
|
-
"header_offset_no_tabs": "--vts-layout-header-offset-no-tabs",
|
|
20
|
-
"tabs_height": "--vts-tabs-height"
|
|
21
|
-
},
|
|
22
|
-
"custom_style_map": {},
|
|
23
|
-
"forms": {
|
|
24
|
-
"mode": ["fixed", "scroll", "auto"]
|
|
25
|
-
},
|
|
26
|
-
"modes": {
|
|
27
|
-
"fixed": "data-content-mode='fixed':display:flex; flex:1 1 auto; height:100%; min-height:0; overflow:hidden(收回 el-scrollbar__view/.grow 祖先链)",
|
|
28
|
-
"scroll": "data-content-mode='scroll':flex:0 0 auto; min-height:100%; overflow:visible(整页滚动)",
|
|
29
|
-
"auto": ":has(.vts-page-card|.vts-page-fill) 自动定高;未标记且无钩子类 → 滚动页(向后兼容)。自动分支带 :not([data-content-mode]) 守卫,与显式声明互斥"
|
|
30
|
-
},
|
|
31
|
-
"preconditions": [
|
|
32
|
-
"层间令牌链对账:本点位(.main-content)与 admin.layout.content(.app-main)是同一视觉间距的父子两层,同链令牌 --layout-content-padding → --vts-margin(basic/spacing.json content_padding)——同一间距只允许一个权威来源。style 声明几何字段(padding 族)时必须同步声明 suppress_inner(同链父层接管/清零口径:写明由哪层承载间距、另一层如何归零),否则父层设计值 + 本层令牌值叠加(如 24px + 8px = 32px/侧)。"
|
|
33
|
-
],
|
|
34
|
-
"$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 挂载点。"
|
|
35
|
-
},
|
|
36
|
-
"admin.content.page_header": {
|
|
37
|
-
"type": "element",
|
|
38
|
-
"selector": ".vts-page-header",
|
|
39
|
-
"file": "业务 views(crud-pages L1 样板)",
|
|
40
|
-
"style_scope": ".vts-page-card",
|
|
41
|
-
"css_vars": {
|
|
42
|
-
"margin_bottom": "--page-header-margin",
|
|
43
|
-
"title_size": "--page-title-size",
|
|
44
|
-
"title_weight": "--page-title-weight",
|
|
45
|
-
"desc_size": "--page-desc-size",
|
|
46
|
-
"desc_color": "--page-desc-color",
|
|
47
|
-
"actions_gap": "--page-header-actions-gap"
|
|
48
|
-
},
|
|
49
|
-
"custom_style_map": {
|
|
50
|
-
"padding_y": "padding-block",
|
|
51
|
-
"padding_x": "padding-inline",
|
|
52
|
-
"text_color": "color"
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
"admin.content.filter_area": {
|
|
56
|
-
"type": "element",
|
|
57
|
-
"selector": ".vts-filter-area",
|
|
58
|
-
"file": "crud-pages.md L3 约定 + src/styles/element-plus.scss(消费 design-tokens.scss 构图令牌);存量 demo 已对齐:views/table/{base,treeTable,vxe-table}",
|
|
59
|
-
"style_scope": ".vts-page-card",
|
|
60
|
-
"css_vars": {
|
|
61
|
-
"radius": "--filter-area-radius",
|
|
62
|
-
"padding_y": "--filter-area-padding-y",
|
|
63
|
-
"padding_x": "--filter-area-padding-x",
|
|
64
|
-
"margin_bottom": "--filter-area-margin-bottom",
|
|
65
|
-
"bg": "--filter-area-bg",
|
|
66
|
-
"border_bottom": "--filter-area-border-bottom"
|
|
67
|
-
},
|
|
68
|
-
"custom_style_map": {
|
|
69
|
-
"gap": "gap",
|
|
70
|
-
"text_color": "color",
|
|
71
|
-
"font_size": "font-size",
|
|
72
|
-
"text_align": "text-align",
|
|
73
|
-
"icon_size": "font-size",
|
|
74
|
-
"border_color": "border-color"
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
"admin.content.table.operation_bar": {
|
|
78
|
-
"type": "element",
|
|
79
|
-
"selector": ".vts-page-card .flex-between > .flex-end(ReTableBar 内部工具栏行右侧容器,bar.vue JSX 实证 div.flex-end)",
|
|
80
|
-
"file": "条件通道实证:.vts-action-bar 类**全项目无模板挂载**(仅 element-plus.scss 有样式定义、无消费者)——若 selector 锚定 .vts-action-bar,属锚定「应该在」而非「实际在」的 DOM,会导致设计层规则全部落空。本 selector 锚定真实出厂 DOM;.vts-action-bar 作为可选增强通道保留在 element-plus.scss,页面按需自行挂载后设计层规则自动命中。右侧工具三件套源码实证:刷新 svg-icon + el-dropdown 密度(宽松/默认/紧凑)+ el-popover 列设置",
|
|
81
|
-
"style_scope": ".vts-page-card",
|
|
82
|
-
"forms": {
|
|
83
|
-
"with_tools": "工具三件套(刷新/密度/列设置)齐全——设计规范 list-page §4 要求三件套缺一不可(ReTableBar 出厂已具备,此为默认形态)",
|
|
84
|
-
"tools_labeled": "边框文字钮形态:三件套从「纯图标 + 竖分隔线」换装为「图标 + 文案」的 1px 边框钮(高/圆角/字号走 tools_* 字段族,hover 文字与边框变主色)——出厂 svg-icon 结构保留,文案由业务侧 slots 或 AI 增量插入 span 补齐(结构增量,不删原节点);suppress 必含 tool_divider(出厂两条 el-divider direction=vertical 与边框钮观感互斥,不收口 = 图标钮与边框钮混排)",
|
|
85
|
-
"left_batch": "左侧批量操作区(批量删除红底 + 批量导出白底,未选中置灰 opacity 0.4 + cursor not-allowed)——经 slots.buttons 插入,出厂多数 demo 未用"
|
|
86
|
-
},
|
|
87
|
-
"suppress_rules": {
|
|
88
|
-
"tools_labeled": ["tool_divider"]
|
|
89
|
-
},
|
|
90
|
-
"field_forms": {
|
|
91
|
-
"tools_btn_height": ["tools_labeled"],
|
|
92
|
-
"tools_btn_radius": ["tools_labeled"],
|
|
93
|
-
"tools_font_size": ["tools_labeled"],
|
|
94
|
-
"tools_icon_size": ["tools_labeled"],
|
|
95
|
-
"tools_text_color": ["tools_labeled"],
|
|
96
|
-
"tools_hover_color": ["tools_labeled"],
|
|
97
|
-
"tools_btn_gap": ["tools_labeled"]
|
|
98
|
-
},
|
|
99
|
-
"css_vars": {
|
|
100
|
-
"gap": "--action-bar-gap",
|
|
101
|
-
"padding_y": "--action-bar-padding-y"
|
|
102
|
-
},
|
|
103
|
-
"custom_style_map": {
|
|
104
|
-
"btn_height": "height",
|
|
105
|
-
"btn_radius": "border-radius",
|
|
106
|
-
"btn_font_size": "font-size",
|
|
107
|
-
"batch_delete_bg": "background-color",
|
|
108
|
-
"batch_disabled_opacity": "opacity",
|
|
109
|
-
"tools_btn_height": "height",
|
|
110
|
-
"tools_btn_radius": "border-radius",
|
|
111
|
-
"tools_font_size": "font-size",
|
|
112
|
-
"tools_btn_gap": "gap"
|
|
113
|
-
},
|
|
114
|
-
"anchors": [
|
|
115
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-page-card .flex-between > .flex-end" },
|
|
116
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-page-card .flex-end .el-button" },
|
|
117
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-page-card .flex-end .vts-tool-btn" },
|
|
118
|
-
{ "kind": "css_var", "target": "--action-bar-gap" },
|
|
119
|
-
{ "kind": "css_var", "target": "--action-bar-padding-y" }
|
|
120
|
-
],
|
|
121
|
-
"sub_selectors": {
|
|
122
|
-
"$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 时按钮壳与文案按此定位增量插入",
|
|
123
|
-
"tools": ".vts-page-card .flex-between > .flex-end",
|
|
124
|
-
"tool_btn": ".vts-page-card .flex-end .vts-tool-btn"
|
|
125
|
-
},
|
|
126
|
-
"preconditions": [
|
|
127
|
-
"挂载点实证:出厂右侧容器是 .flex-between > .flex-end(真实存在),而 .vts-action-bar 全项目无模板挂载(仅样式定义、零消费者)——设计层规则写到 .vts-action-bar 上会全部落空。词典 selector 必须锚定源码实证存在的 DOM;「应该在」的点位未经 structure_ops 补挂 = 不存在。",
|
|
128
|
-
"本条目样式落点是 ReTableBar 内部工具栏行内容器——禁止把容器级样式(flex-direction 等)写到 ReTableBar 根节点:根节点是「工具栏行 + 表格 + 分页」的纵向复合容器,写根节点会让工具栏与表格并排、表格被挤压、tableHeight 实测失准(已发生的事故,勿复发)。",
|
|
129
|
-
"gap / padding 的 CSS 变量必须在项目样式中存在消费者(var() 引用),只定义不消费 = 死通道。--action-bar-padding-y 供 padding-block,最多两个值(如 20px 8px),给三个值整条声明即失效。"
|
|
130
|
-
],
|
|
131
|
-
"priority": {
|
|
132
|
-
"strategy": "scope_qualified",
|
|
133
|
-
"reason": "出厂 .flex-end 类位 1(uno 约定类,无 scoped 竞争),作用域限定到 .vts-page-card 前缀即可覆盖;但不得把容器级样式写到 ReTableBar 根节点上。"
|
|
134
|
-
},
|
|
135
|
-
"$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 底线二豁免)。"
|
|
136
|
-
},
|
|
137
|
-
"admin.content.table.operation_column": {
|
|
138
|
-
"type": "element",
|
|
139
|
-
"selector": ".vts-table-area .el-table__cell:has(.re-table-operate), .vts-table-area .el-table-fixed-column--right",
|
|
140
|
-
"file": "业务 views(ReTableOperate 渲染于默认插槽,无列语义类;单元格命中靠 :has(.re-table-operate))",
|
|
141
|
-
"style_scope": ".vts-page-card",
|
|
142
|
-
"forms": {
|
|
143
|
-
"text_link": "纯文字链接无图标(对应设计 list-table-action-no-icon=true;ReTableOperate text 档位)",
|
|
144
|
-
"icon_text": "图标+文字(ReTableOperate icon 字段,出厂常见形态)"
|
|
145
|
-
},
|
|
146
|
-
"css_vars": {
|
|
147
|
-
"link_color": "--el-color-primary",
|
|
148
|
-
"danger_color": "--el-color-danger",
|
|
149
|
-
"divider_color": "--re-op-divider-color",
|
|
150
|
-
"divider_gap": "--re-op-divider-gap"
|
|
151
|
-
},
|
|
152
|
-
"field_forms": {
|
|
153
|
-
"slot_width": ["text_link", "icon_text"]
|
|
154
|
-
},
|
|
155
|
-
"data_channels": {
|
|
156
|
-
"slot_width": "等宽槽宽度通道(动态优先):**槽宽默认由组件按按钮文案动态自适应**(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"
|
|
157
|
-
},
|
|
158
|
-
"$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;其余业务列(含选择列、序号列)逐列声明 width 或 min_width,见 admin.content.table.column_width(§11.132)。",
|
|
159
|
-
"custom_style_map": {
|
|
160
|
-
"align": "text-align",
|
|
161
|
-
"min_width": "min-width",
|
|
162
|
-
"column_width": "width",
|
|
163
|
-
"nowrap": "white-space",
|
|
164
|
-
"divider_width": "width",
|
|
165
|
-
"divider_height": "height",
|
|
166
|
-
"divider_margin_x": "margin-inline",
|
|
167
|
-
"divider_color": "background-color",
|
|
168
|
-
"more_arrow_size": "font-size",
|
|
169
|
-
"more_arrow_gap": "gap",
|
|
170
|
-
"vertical_align": "vertical-align",
|
|
171
|
-
"font_size": "font-size",
|
|
172
|
-
"gap": "gap",
|
|
173
|
-
"bg": "background-color",
|
|
174
|
-
"box_shadow": "box-shadow",
|
|
175
|
-
"radius": "border-radius"
|
|
176
|
-
},
|
|
177
|
-
"anchors": [
|
|
178
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell:has(.re-table-operate)" },
|
|
179
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell:has(.re-table-operate) > .cell" }
|
|
180
|
-
],
|
|
181
|
-
"sub_selectors": {
|
|
182
|
-
"$comment": "divider_* 字段按前缀路由到分割线元素本体(出厂平铺按钮间 v-if=\"i > 0\" 已有 .re-table-operate__divider;「更多」槽前无元素须按 structure_ops 增量补挂)",
|
|
183
|
-
"divider": ".vts-page-card .re-table-operate .re-table-operate__divider"
|
|
184
|
-
},
|
|
185
|
-
"preconditions": [
|
|
186
|
-
"按钮之间的间距由分割线元素的左右 margin 承载,不是按钮自身 gap:必须先存在分割线元素(ReTableOperate 默认不渲染 divider,需按 structure_ops 补槽位),divider_width / divider_height / divider_margin_x 才有落点——这是「操作列按钮间距没还原」的根因。",
|
|
187
|
-
"「纯文字无图标」是数据侧结论:图标来自业务页列定义的 operateButtons[].icon,只写 form=text_link 而不移除数据里的 icon = 未落地(改 CSS 不算)。",
|
|
188
|
-
"「更多」折叠槽前必须有分割线:组件出厂模板只在平铺按钮之间渲染 divider(v-if=\"i > 0\"),平铺末位与「更多」槽之间无分割线元素——效果图口径是每个按钮之间都要有且等距,施工时须按 structure_ops 给「更多」槽前补 divider(或把「更多」并入 v-for 让 i 计数覆盖),缺线 = 最后一段间距失真。",
|
|
189
|
-
"等宽槽(--re-op-slot-w)是行间纵向对齐的唯一机制:设计层禁止覆写 .re-table-operate__slot 宽度为 auto,CSS 收口 auto = 各行按钮漂移、竖线间距不一致。",
|
|
190
|
-
"⚠槽宽三态判定(与 data_channels.slot_width 配套):①**默认=动态自适应**——组件按最长文案自动推算槽宽,变更集不声明 slot_width、业务页不传 slot-min-width(设计只管 divider 几何;钉死固定值 = 短文案按钮残白堆到分割线前侧、线距视觉不等);②**例外=统一槽宽**——设计效果图明确所有操作列等宽网格时才声明 slot_width,施工落业务页 prop 禁 CSS 仿冒;③**机制不可 CSS 化**——无论哪态,禁在设计层覆写 __slot 宽度。判据一句话:**槽宽是内容推算的机制值,不是设计声明值;设计声明divider,不声明槽宽**。",
|
|
191
|
-
"⚠对齐语义两级契约:**容器级 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。"
|
|
192
|
-
],
|
|
193
|
-
"priority": {
|
|
194
|
-
"strategy": "scope_qualified",
|
|
195
|
-
"reason": "操作列无行内样式竞争,作用域限定即可覆盖。"
|
|
196
|
-
},
|
|
197
|
-
"$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 并在交付说明注明,禁止留空导致按钮换行"
|
|
198
|
-
},
|
|
199
|
-
"admin.content.table.header_cell": {
|
|
200
|
-
"type": "element",
|
|
201
|
-
"selector": ".vts-table-area .el-table__header th.el-table__cell",
|
|
202
|
-
"file": "src/styles/element-plus.scss(Element Plus 表头结构类,无业务定制类)",
|
|
203
|
-
"style_scope": ".vts-page-card",
|
|
204
|
-
"css_vars": {
|
|
205
|
-
"bg": "--el-table-header-bg-color",
|
|
206
|
-
"text": "--el-table-header-text-color"
|
|
207
|
-
},
|
|
208
|
-
"custom_style_map": {
|
|
209
|
-
"height": "height",
|
|
210
|
-
"padding": "padding",
|
|
211
|
-
"font_weight": "font-weight",
|
|
212
|
-
"font_size": "font-size",
|
|
213
|
-
"text_align": "text-align",
|
|
214
|
-
"border_bottom": "border-bottom",
|
|
215
|
-
"nowrap": "white-space",
|
|
216
|
-
"gap": "gap",
|
|
217
|
-
"icon_size": "font-size"
|
|
218
|
-
},
|
|
219
|
-
"anchors": [
|
|
220
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__header th.el-table__cell" },
|
|
221
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__header th.el-table__cell > .cell" },
|
|
222
|
-
{ "kind": "css_var", "target": "--el-table-header-bg-color" },
|
|
223
|
-
{ "kind": "css_var", "target": "--el-table-header-text-color" }
|
|
224
|
-
],
|
|
225
|
-
"preconditions": [
|
|
226
|
-
"Element Plus 表头是「宿主 th.el-table__cell + 内层 .cell 文本盒」两层结构;EP 出厂给内层 .cell 写了 white-space: normal,因此 nowrap / text-overflow 这类文本控制必须落在 inner 层,写在宿主 th 上会被内层覆盖(这是「表头竖排换行」的根因)。高度 / padding / 背景落在 host 层。",
|
|
227
|
-
"几何语境随值迁移:EP 内层 .cell 出厂自带 padding 0 12px,设计的 16px 落到 host 后必须同步把内层 .cell 的 padding 归零,否则实际内边距 16+12=28px/侧 → 列宽被挤、表头标题被省略号截断(类…/包…/操…),视觉不适配常规。数据单元格(td)同理。",
|
|
228
|
-
"表头单元格可能被业务页用 :header-cell-style 注入行内样式,行内样式优先级高于一切类规则;使用本条目时须确认页面未在列上写死行内表头样式,若有则在页面侧移除、改由本条目承载。"
|
|
229
|
-
],
|
|
230
|
-
"priority": {
|
|
231
|
-
"strategy": "self_plus_important",
|
|
232
|
-
"reason": "页面可能用 :header-cell-style 注入行内样式,普通类规则无法取胜。"
|
|
233
|
-
},
|
|
234
|
-
"$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 保证只命中业务卡片内表格。"
|
|
235
|
-
},
|
|
236
|
-
"admin.content.table.cell": {
|
|
237
|
-
"type": "element",
|
|
238
|
-
"selector": ".vts-table-area .el-table__body td.el-table__cell",
|
|
239
|
-
"file": "src/styles/element-plus.scss(Element Plus 行单元格结构类,无业务定制类)",
|
|
240
|
-
"style_scope": ".vts-page-card",
|
|
241
|
-
"css_vars": {},
|
|
242
|
-
"custom_style_map": {
|
|
243
|
-
"padding": "padding",
|
|
244
|
-
"padding_y": "padding-block",
|
|
245
|
-
"padding_x": "padding-inline",
|
|
246
|
-
"height": "height",
|
|
247
|
-
"font_size": "font-size",
|
|
248
|
-
"font_weight": "font-weight",
|
|
249
|
-
"text_color": "color",
|
|
250
|
-
"border_bottom": "border-bottom",
|
|
251
|
-
"nowrap": "white-space",
|
|
252
|
-
"vertical_align": "vertical-align"
|
|
253
|
-
},
|
|
254
|
-
"anchors": [
|
|
255
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__body td.el-table__cell" },
|
|
256
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__body td.el-table__cell > .cell" }
|
|
257
|
-
],
|
|
258
|
-
"preconditions": [
|
|
259
|
-
"出厂 element-plus.scss 已给 .el-table .el-table__cell 设了 padding(var(--vts-space-xs) 0),本条目字段必须落 host 层才能覆盖它;写在 inner 层只改内层文本盒,观感上「改了没反应」。",
|
|
260
|
-
"几何语境随值迁移:padding/padding_x/padding_y 落宿主 td 时必须同步声明 suppress_inner(内层 .cell padding 清零口径)——出厂内层 .cell 自带 padding 0 12px,不清零则两层之和 ≠ 设计值(28px/侧 → 列挤坏)。",
|
|
261
|
-
"行高由「单元格 padding + 内容行高」共同决定;声明行高档位时必须同时给出 padding 取值,只改其一会得到非预期行高。",
|
|
262
|
-
"white-space:nowrap 为强制维度(登记表 §11.43 always:true,与表头一致):数据单元格禁止换行。nowrap 属内层盒属性族,解析器自动路由到 inner 锚点(.cell),无需显式声明 layer;落 host 会被 EP 内层 .cell{white-space:normal} 覆盖,导致「牛奶乳品」类竖排换行。"
|
|
263
|
-
],
|
|
264
|
-
"priority": {
|
|
265
|
-
"strategy": "scope_qualified",
|
|
266
|
-
"reason": "出厂 padding 规则与本条目同属全局样式,作用域限定到 .vts-page-card 即可覆盖。"
|
|
267
|
-
},
|
|
268
|
-
"$note": "设计意图(list-page §11.43):padding 16px、字号 14px、字重 400、文字色 #000000E0、底边框 1px solid #F0F0F0、垂直居中。不声明时项目侧保留出厂值,效果图要求的 16px 必须显式给出。"
|
|
269
|
-
},
|
|
270
|
-
"admin.content.table.index_column": {
|
|
271
|
-
"type": "element",
|
|
272
|
-
"selector": ".vts-table-area .el-table__cell.col-index",
|
|
273
|
-
"file": "业务 views(序号列 el-table-column type=\"index\" 需绑定 class-name=\"col-index\")",
|
|
274
|
-
"style_scope": ".vts-page-card",
|
|
275
|
-
"data_channels": {
|
|
276
|
-
"column_width": "序号列宽度通道(结构通道:列定义绑定 class-name=col-index + 设 width prop;设计只声明列宽意图,禁 CSS 仿冒)"
|
|
277
|
-
},
|
|
278
|
-
"custom_style_map": {
|
|
279
|
-
"align": "text-align"
|
|
280
|
-
},
|
|
281
|
-
"anchors": [
|
|
282
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell.col-index" },
|
|
283
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell.col-index > .cell" }
|
|
284
|
-
],
|
|
285
|
-
"$note": "序号列宽度由设计侧给出意图(§11.131):固定 → structure_ops 在列定义绑定 class-name=col-index 并设 width prop;自适应 → 设 min-width prop。两种都必须显式声明,禁 CSS 收口 width(对表格列无效)。不声明 = 该列被相邻固定宽列挤压。"
|
|
286
|
-
},
|
|
287
|
-
"admin.content.table.column_width": {
|
|
288
|
-
"type": "element",
|
|
289
|
-
"selector": ".vts-table-area .el-table__cell",
|
|
290
|
-
"file": "业务 views(el-table-column 的 width / min-width prop;禁止写 CSS)",
|
|
291
|
-
"style_scope": ".vts-page-card",
|
|
292
|
-
"data_channels": {
|
|
293
|
-
"column_width": "固定宽通道:逐列映射到 el-table-column 的 width prop(该列不参与剩余空间分配)",
|
|
294
|
-
"min_width": "伸缩下限通道:逐列映射到 min-width prop(按比例吃剩余空间,容器不足时保住下限并触发横向滚动)",
|
|
295
|
-
"budget": "容器预算通道:Σ(width) + Σ(min-width) 与容器可用宽的比对结论(设计侧先算,项目侧据此决定是否启用横向滚动)"
|
|
296
|
-
},
|
|
297
|
-
"anchors": [
|
|
298
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell" }
|
|
299
|
-
],
|
|
300
|
-
"preconditions": [
|
|
301
|
-
"列宽必须落列定义(width / min-width prop),落 CSS 无效 —— 表格布局由列定义驱动,样式层写 width 对该列不产生效果。",
|
|
302
|
-
"每一列都必须给出宽度意图:既无 width 又无 min-width 的列,表格布局只能按出厂默认下限兜底,并被相邻固定宽列挤压。",
|
|
303
|
-
"伸缩列下限不得低于「表头文案宽 + 左右内边距」,否则表头文案会被压到换行或省略号截断。"
|
|
304
|
-
],
|
|
305
|
-
"$note": "列宽契约(list-page §11.132):逐列声明 width(固定)或 min_width(伸缩),二者必居其一;设计侧同时给出容器预算结论(Σ 列宽 vs 容器可用宽),预算不足时以横向滚动为唯一出口,禁止留给项目侧隐形压缩。"
|
|
306
|
-
},
|
|
307
|
-
"admin.content.table.cell_status": {
|
|
308
|
-
"type": "element",
|
|
309
|
-
"selector": ".vts-table-area .el-table__cell .el-tag",
|
|
310
|
-
"file": "业务 views(状态列,Element Plus el-tag 渲染)",
|
|
311
|
-
"style_scope": ".vts-page-card",
|
|
312
|
-
"forms": {
|
|
313
|
-
"filled": "浅色背景 + 浅边框 + 语义色文字(设计规范默认变体,list-page §7)",
|
|
314
|
-
"outlined": "透明背景 + 语义色边框 + 语义色文字",
|
|
315
|
-
"solid": "纯色填充 + 白字",
|
|
316
|
-
"with_icon": "filled + 16px 语义图标"
|
|
317
|
-
},
|
|
318
|
-
"css_vars": {},
|
|
319
|
-
"custom_style_map": {
|
|
320
|
-
"bg": "background-color",
|
|
321
|
-
"border_color": "border-color",
|
|
322
|
-
"text_color": "color",
|
|
323
|
-
"font_size": "font-size",
|
|
324
|
-
"icon_size": "font-size",
|
|
325
|
-
"radius": "border-radius"
|
|
326
|
-
},
|
|
327
|
-
"anchors": [
|
|
328
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell .el-tag" },
|
|
329
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell .el-tag .el-tag__content" }
|
|
330
|
-
],
|
|
331
|
-
"preconditions": [
|
|
332
|
-
"本条目只对「已渲染的 el-tag」生效:状态列必须在页面模板里真的渲染 el-tag(formatter 返回纯文本不会产生 el-tag)。因此 form 声明必须与 structure_ops 配对——只改样式、不改模板分支 = 声明无效(这是「列中状态样式不对」的根因)。",
|
|
333
|
-
"五态配色是「浅底 + 浅边框 + 语义色文字」三项组合,缺任一项即不是 filled 变体。"
|
|
334
|
-
],
|
|
335
|
-
"priority": {
|
|
336
|
-
"strategy": "scope_qualified",
|
|
337
|
-
"reason": "出厂该列多为纯文本或 el-tag 默认色,作用域限定即可覆盖。"
|
|
338
|
-
},
|
|
339
|
-
"$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)。"
|
|
340
|
-
},
|
|
341
|
-
"admin.content.table.cell_amount": {
|
|
342
|
-
"type": "element",
|
|
343
|
-
"selector": ".vts-table-area .el-table__cell.col-price, .vts-table-area .el-table__cell.is-right",
|
|
344
|
-
"file": "业务 views(金额列 className 约定,对齐设计 list-table-col-price)",
|
|
345
|
-
"style_scope": ".vts-page-card",
|
|
346
|
-
"css_vars": {},
|
|
347
|
-
"custom_style_map": {
|
|
348
|
-
"align": "text-align",
|
|
349
|
-
"font_variant_numeric": "font-variant-numeric"
|
|
350
|
-
},
|
|
351
|
-
"anchors": [
|
|
352
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell.col-price" },
|
|
353
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell.col-price > .cell" },
|
|
354
|
-
{ "kind": "attr", "layer": "host", "target": "td.el-table__cell.is-right" }
|
|
355
|
-
],
|
|
356
|
-
"preconditions": [
|
|
357
|
-
"选择器依赖业务列绑定 class-name(col-price)或列 align=right(EP 渲染时给单元格加 is-right);两者都没绑时规则永不命中。因此本条目含**结构施工要求**(列定义补 class-name / align),不是纯样式条目——只写样式不绑类名 = 声明无效(这是「金额列没右对齐」的根因)。",
|
|
358
|
-
"右对齐需与表头对齐一致,否则表头与数据错位;表头对齐由 admin.content.table.header_cell 的 text_align 承载。"
|
|
359
|
-
],
|
|
360
|
-
"priority": {
|
|
361
|
-
"strategy": "scope_qualified",
|
|
362
|
-
"reason": "列级类名落位后,作用域限定即可覆盖 EP 默认的左对齐。"
|
|
363
|
-
},
|
|
364
|
-
"$note": "设计意图(§11.110 col-price):右对齐 + tabular-nums 等宽数字。落地手段:列定义加 class-name=col-price + align=right;「等宽数字」译为 font-variant-numeric: tabular-nums"
|
|
365
|
-
},
|
|
366
|
-
"admin.content.table.cell_thumb": {
|
|
367
|
-
"type": "element",
|
|
368
|
-
"selector": ".vts-table-area .el-table__cell.col-thumb",
|
|
369
|
-
"file": "业务 views(缩略图列 className 约定,对齐设计 col-thumb/thumb-box)",
|
|
370
|
-
"style_scope": ".vts-page-card",
|
|
371
|
-
"css_vars": {},
|
|
372
|
-
"custom_style_map": {
|
|
373
|
-
"thumb_width": "width",
|
|
374
|
-
"thumb_height": "height",
|
|
375
|
-
"thumb_radius": "border-radius",
|
|
376
|
-
"column_width": "width"
|
|
377
|
-
},
|
|
378
|
-
"anchors": [
|
|
379
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell.col-thumb" },
|
|
380
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell.col-thumb .el-image" }
|
|
381
|
-
],
|
|
382
|
-
"preconditions": [
|
|
383
|
-
"选择器依赖业务列绑定 class-name(col-thumb);未绑定时规则永不命中——本条目含**结构施工要求**(列定义补 class-name),不是纯样式条目。",
|
|
384
|
-
"缩略盒尺寸必须真正约束到图片元素;页面若在模板里用工具类直写尺寸(如 h-30 w-30),其优先级会压过本条目,须先移除页面级尺寸再靠本条目承载。"
|
|
385
|
-
],
|
|
386
|
-
"priority": {
|
|
387
|
-
"strategy": "self_plus_important",
|
|
388
|
-
"reason": "页面常以工具类直写图片尺寸,与设计层规则同层竞争,需显式提权。"
|
|
389
|
-
},
|
|
390
|
-
"$note": "设计意图(§11.108-11.109):列宽 72px 居中,缩略盒 40×40 圆角 6px。落地手段:列 className=col-thumb + el-image 40×40"
|
|
391
|
-
},
|
|
392
|
-
"admin.content.table.selection_column": {
|
|
393
|
-
"type": "element",
|
|
394
|
-
"selector": ".vts-table-area .el-table__cell.el-table-column--selection",
|
|
395
|
-
"file": "业务 views(el-table-column type=\"selection\";Element Plus 给选择列表头与单元格自动加 el-table-column--selection 类,无需业务自定义类名)",
|
|
396
|
-
"style_scope": ".vts-page-card",
|
|
397
|
-
"css_vars": {
|
|
398
|
-
"checked_bg": "--el-checkbox-checked-bg-color",
|
|
399
|
-
"checked_border": "--el-checkbox-checked-input-border-color",
|
|
400
|
-
"hover_border": "--el-checkbox-input-border-color-hover"
|
|
401
|
-
},
|
|
402
|
-
"custom_style_map": {
|
|
403
|
-
"text_align": "text-align",
|
|
404
|
-
"padding": "padding"
|
|
405
|
-
},
|
|
406
|
-
"anchors": [
|
|
407
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table__cell.el-table-column--selection" },
|
|
408
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table__cell.el-table-column--selection > .cell" },
|
|
409
|
-
{ "kind": "css_var", "target": "--el-checkbox-checked-bg-color" }
|
|
410
|
-
],
|
|
411
|
-
"preconditions": [
|
|
412
|
-
"选择列由 el-table-column type=\"selection\" 渲染,Element Plus 自动在表头与单元格上加 el-table-column--selection 类——列未声明 type=selection 时本条目永不命中(项目源码实证:views/table/base/index.vue 已用 <el-table-column type=\"selection\" reserve-selection />)。",
|
|
413
|
-
"列宽经 admin.content.table.column_width 逐列声明(§11.132,width 或 min_width 必居其一);本条目只承载对齐与勾选态配色。"
|
|
414
|
-
],
|
|
415
|
-
"priority": {
|
|
416
|
-
"strategy": "scope_qualified",
|
|
417
|
-
"reason": "选择列无行内样式竞争,作用域限定到 .vts-page-card 即可覆盖。"
|
|
418
|
-
},
|
|
419
|
-
"$note": "设计意图(list-page §11.44 选择列):窄列、居中、勾选态用主题主色。勾选色走 EP 原生 --el-checkbox-* 令牌,随主题切换。"
|
|
420
|
-
},
|
|
421
|
-
"admin.content.table.row_density": {
|
|
422
|
-
"type": "element",
|
|
423
|
-
"selector": ".vts-table-area .el-table .el-table__cell",
|
|
424
|
-
"file": "src/components/ReTableBar/src/bar.vue(密度下拉:宽松/默认/紧凑 → el-table size = large/default/small)+ src/styles/element-plus.scss(单元格 padding 承载行高)",
|
|
425
|
-
"style_scope": ".vts-page-card",
|
|
426
|
-
"forms": {
|
|
427
|
-
"density": ["loose", "default", "compact"]
|
|
428
|
-
},
|
|
429
|
-
"css_vars": {},
|
|
430
|
-
"custom_style_map": {
|
|
431
|
-
"row_height": "min-height",
|
|
432
|
-
"cell_padding_y": "padding-block"
|
|
433
|
-
},
|
|
434
|
-
"anchors": [
|
|
435
|
-
{ "kind": "class", "layer": "host", "target": ".vts-table-area .el-table .el-table__cell" },
|
|
436
|
-
{ "kind": "class", "layer": "inner", "target": ".vts-table-area .el-table .el-table__cell > .cell" }
|
|
437
|
-
],
|
|
438
|
-
"preconditions": [
|
|
439
|
-
"行高由「单元格 padding + 内容行高」共同决定(见 admin.content.table.cell)——声明行高档位时必须同时给出 padding 取值,只改其一会得到非预期行高。",
|
|
440
|
-
"几何语境随值迁移:padding_x 落宿主 th/td 时必须同步声明 suppress_inner(内层 .cell padding 清零口径)——出厂内层 .cell 自带 padding 0 12px,不清零则两层之和 ≠ 设计值。",
|
|
441
|
-
"出厂密度档位由 ReTableBar 的 size(large/default/small,源码实证 bar.vue 的宽松/默认/紧凑三项)驱动;设计侧只声明档位意图(form.density),具体 padding 由本项目按常规取值落定,不得照抄效果图某实例数据的行高。"
|
|
442
|
-
],
|
|
443
|
-
"priority": {
|
|
444
|
-
"strategy": "scope_qualified",
|
|
445
|
-
"reason": "单元格 padding 属全局样式,作用域限定到 .vts-page-card 即可覆盖。"
|
|
446
|
-
},
|
|
447
|
-
"$note": "设计意图(list-page §11.40 行密度):表格行高三档取一(宽松/默认/紧凑)。语义档位 loose/default/compact ↔ 出厂 size large/default/small,项目侧负责映射。"
|
|
448
|
-
},
|
|
449
|
-
"admin.content.table.area": {
|
|
450
|
-
"type": "component",
|
|
451
|
-
"component": "ElTable(useTableSearch tableHeight 定高)",
|
|
452
|
-
"selector": ".vts-table-area",
|
|
453
|
-
"file": "crud-pages.md L3 约定 + src/styles/element-plus.scss(flex 定高链 + 圆角令牌);存量 demo 已对齐:views/table/{base,treeTable,vxe-table}",
|
|
454
|
-
"style_scope": ".vts-page-card",
|
|
455
|
-
"css_vars": {
|
|
456
|
-
"radius": "--table-area-border-radius",
|
|
457
|
-
"header_bg": "--el-table-header-bg-color",
|
|
458
|
-
"header_text": "--el-table-header-text-color",
|
|
459
|
-
"row_hover_bg": "--el-table-row-hover-bg-color"
|
|
460
|
-
},
|
|
461
|
-
"custom_style_map": {
|
|
462
|
-
"bg_color": "background-color"
|
|
463
|
-
}
|
|
464
|
-
},
|
|
465
|
-
"admin.content.pagination": {
|
|
466
|
-
"type": "component",
|
|
467
|
-
"component": "RePagination",
|
|
468
|
-
"selector": ".vts-page-card .el-pagination",
|
|
469
|
-
"file": "src/components/RePagination/src/pagination.vue(根节点 el-pagination,无自定义语义类;style_scope 前缀 .vts-page-card 保证只命中卡片内分页)",
|
|
470
|
-
"style_scope": ".vts-page-card",
|
|
471
|
-
"css_vars": {
|
|
472
|
-
"button_hover_color": "--el-pagination-button-hover-color",
|
|
473
|
-
"hover_color": "--el-pagination-hover-color",
|
|
474
|
-
"active_bg": "--pagination-active-bg",
|
|
475
|
-
"active_color": "--pagination-active-color"
|
|
476
|
-
},
|
|
477
|
-
"custom_style_map": {
|
|
478
|
-
"margin_bottom": "margin-bottom",
|
|
479
|
-
"padding_y": "padding-block",
|
|
480
|
-
"gap": "gap",
|
|
481
|
-
"text_color": "color",
|
|
482
|
-
"font_size": "font-size",
|
|
483
|
-
"border_color": "border-color"
|
|
484
|
-
}
|
|
485
|
-
},
|
|
486
|
-
"admin.content.empty_state": {
|
|
487
|
-
"type": "element",
|
|
488
|
-
"selector": ".vts-page-card .el-empty",
|
|
489
|
-
"file": "业务 views(Element Plus el-empty 空态,EP 原生类,全局生效)",
|
|
490
|
-
"style_scope": ".vts-page-card",
|
|
491
|
-
"css_vars": {
|
|
492
|
-
"padding": "--empty-state-padding"
|
|
493
|
-
},
|
|
494
|
-
"custom_style_map": {}
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
}
|