@qilitt-mickey/vue3-temp-skill 1.1.35 → 1.1.37

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.
Files changed (56) hide show
  1. package/README.md +6 -36
  2. package/SKILL.md +11 -19
  3. package/bin/cli.js +19 -65
  4. package/dist/mapping-type.d.ts +33 -0
  5. package/dist/theme-vars.js +62 -0
  6. package/dist/theme-vars.ts +113 -0
  7. package/dist/theme.css +73 -0
  8. package/mapping/basic/color.json +35 -0
  9. package/mapping/basic/radius.json +17 -0
  10. package/mapping/basic/semantic-values.json +72 -0
  11. package/mapping/basic/spacing.json +21 -0
  12. package/mapping/basic/typography.json +21 -0
  13. package/mapping/component/button.json +59 -0
  14. package/mapping/component/input.json +39 -0
  15. package/mapping/component/overlay.json +63 -0
  16. package/mapping/component/table.json +42 -0
  17. package/mapping/layout/breakpoint.json +20 -0
  18. package/mapping/layout/shell-geometry.json +26 -0
  19. package/mapping/scenes/admin/content.json +112 -0
  20. package/mapping/scenes/admin/layout.json +331 -0
  21. package/package.json +8 -4
  22. package/parser/fixtures/changeset-legacy.json +11 -0
  23. package/parser/fixtures/changeset-neg1.json +17 -0
  24. package/parser/fixtures/changeset-neg2.json +10 -0
  25. package/parser/fixtures/changeset-neg3.json +22 -0
  26. package/parser/fixtures/changeset-pos.json +43 -0
  27. package/parser/generator.js +178 -0
  28. package/parser/index.js +553 -0
  29. package/parser/loader.js +66 -0
  30. package/parser/override.js +119 -0
  31. package/parser/regression.js +137 -0
  32. package/parser/validator.js +137 -0
  33. package/parser/watch.js +103 -0
  34. package/references/code-quality.md +24 -23
  35. package/references/core-kernel.md +2 -4
  36. package/references/crud-pages.md +18 -290
  37. package/references/data-mapping.md +229 -229
  38. package/references/data-screen.md +102 -102
  39. package/references/design-apply.md +177 -0
  40. package/references/flowchart-g6.md +260 -260
  41. package/references/form-advanced.md +1 -1
  42. package/references/graph-relation.md +1 -1
  43. package/references/layout-theme.md +513 -520
  44. package/references/qrcode-barcode.md +117 -117
  45. package/references/workflow-bpmn.md +214 -214
  46. package/scripts/check.mjs +84 -90
  47. package/scripts/cli.mjs +115 -120
  48. package/scripts/match.py +134 -134
  49. package/scripts/modules.json +109 -103
  50. package/scripts/validate.mjs +106 -106
  51. package/references/design-handoff.md +0 -767
  52. package/references/design-system.md +0 -142
  53. package/references/design-verify.md +0 -469
  54. package/scripts/check.cmd +0 -9
  55. package/scripts/field-schema-audit.mjs +0 -246
  56. package/scripts/handoff.mjs +0 -474
@@ -0,0 +1,17 @@
1
+ {
2
+ "$comment": "全局原子层 · 圆角令牌映射。radius 为设计侧抽象字段;token 为项目实现令牌(design-tokens.scss :root,并桥接 EP --el-border-radius-*)。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "radius",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus + vue3-web-temp"
9
+ },
10
+ "tokens": {
11
+ "radius_sm": { "token": "--radius-sm → --border-radius-sm", "type": "size", "default": "4px", "desc": "小控件圆角(Tag/小按钮)", "el_bridge": "--el-border-radius-small" },
12
+ "radius_base": { "token": "--radius-base → --border-radius-base", "type": "size", "default": "6px", "desc": "标准控件圆角(按钮/输入框)", "el_bridge": "--el-border-radius-base" },
13
+ "radius_lg": { "token": "--radius-lg → --border-radius-lg", "type": "size", "default": "8px", "desc": "卡片级圆角", "el_bridge": null },
14
+ "dialog_radius": { "token": "--dialog-border-radius", "type": "size", "default": "10px", "desc": "弹窗圆角(出厂 ReDialog 观感)", "el_bridge": null },
15
+ "switch_radius": { "token": "--switch-border-radius", "type": "size", "default": "10px", "desc": "开关圆角", "el_bridge": null }
16
+ }
17
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "$comment": "全局原子层 · 语义值译表(设计侧语义值 → 精确值)。设计侧 style/global 的值用语义名(如 钴蓝-5)时,parser 与 AI 施工按本表翻译为精确值。aliases 同时收录中文名(规范输出)与英文 token 名(cobalt-5,兼容拼写),两种写法等价。数据源:设计侧 skill page-specs/design-tokens.md §2-§5b(v1.0 对齐)。功能色五套主题同值,各主题各列一份便于按主题整体切换。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "semantic_values",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus + vue3-web-temp"
9
+ },
10
+ "themes": {
11
+ "$comment": "每套主题的语义值全集。level 1-10 为主色渐变(5 = 品牌主色)。",
12
+ "cobalt": {
13
+ "label": "钴蓝",
14
+ "values": {
15
+ "钴蓝-1": "#E8F0FF", "钴蓝-2": "#C5D5FF", "钴蓝-3": "#8FB0FF", "钴蓝-4": "#407BFF",
16
+ "钴蓝-5": "#245BFF", "钴蓝-6": "#1546E0", "钴蓝-7": "#1546C9", "钴蓝-8": "#1239A8",
17
+ "钴蓝-9": "#0D2A7F", "钴蓝-10": "#081952",
18
+ "成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#245BFF", "链接色": "#245BFF"
19
+ }
20
+ },
21
+ "emerald": {
22
+ "label": "翠蓝",
23
+ "values": {
24
+ "翠蓝-1": "#E6FFFC", "翠蓝-2": "#B3F5EF", "翠蓝-3": "#7FE8E0", "翠蓝-4": "#33CFCE",
25
+ "翠蓝-5": "#00A8B5", "翠蓝-6": "#008F9C", "翠蓝-7": "#007A89", "翠蓝-8": "#005A6E",
26
+ "翠蓝-9": "#003F55", "翠蓝-10": "#002838",
27
+ "成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#00A8B5", "链接色": "#00A8B5"
28
+ }
29
+ },
30
+ "peacock": {
31
+ "label": "孔雀绿",
32
+ "values": {
33
+ "孔雀绿-1": "#E6FFF8", "孔雀绿-2": "#B3F5E3", "孔雀绿-3": "#7FE8CC", "孔雀绿-4": "#33D4A8",
34
+ "孔雀绿-5": "#009A7A", "孔雀绿-6": "#008566", "孔雀绿-7": "#006E55", "孔雀绿-8": "#005240",
35
+ "孔雀绿-9": "#003A2E", "孔雀绿-10": "#00261E",
36
+ "成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#009A7A", "链接色": "#009A7A"
37
+ }
38
+ },
39
+ "tangerine": {
40
+ "label": "橘橙",
41
+ "values": {
42
+ "橘橙-1": "#FFF3E6", "橘橙-2": "#FFDFC0", "橘橙-3": "#FFC080", "橘橙-4": "#FF9333",
43
+ "橘橙-5": "#FF6A00", "橘橙-6": "#E55A00", "橘橙-7": "#C44E00", "橘橙-8": "#9A3D00",
44
+ "橘橙-9": "#7A3000", "橘橙-10": "#522000",
45
+ "成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#FF6A00", "链接色": "#FF6A00"
46
+ }
47
+ },
48
+ "dawn": {
49
+ "label": "拂晓蓝",
50
+ "values": {
51
+ "拂晓蓝-1": "#E6F7FF", "拂晓蓝-2": "#BAE7FF", "拂晓蓝-3": "#91D5FF", "拂晓蓝-4": "#69C0FF",
52
+ "拂晓蓝-5": "#40A9FF", "拂晓蓝-6": "#1890FF", "拂晓蓝-7": "#096DD9", "拂晓蓝-8": "#0050B3",
53
+ "拂晓蓝-9": "#003A8C", "拂晓蓝-10": "#002766",
54
+ "成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#1890FF", "链接色": "#1890FF"
55
+ },
56
+ "$note": "拂晓蓝品牌主色为 L6 #1890FF(Ant Design 原生),与其他主题 L5=主色不同;输出 拂晓蓝-6 或 品牌主色 均可命中"
57
+ }
58
+ },
59
+ "neutral_aliases": {
60
+ "$comment": "主题无关的通用语义值(不属任何一套主题,任意主题下等值)。",
61
+ "values": {
62
+ "品牌主色": "$theme.5",
63
+ "品牌悬停色": "$theme.4",
64
+ "品牌点击色": "$theme.6"
65
+ },
66
+ "$note": "$theme.N 为占位:多套主题混用时 parser 无法消歧——AI 施工前须确认当次变更集的主題(global.brand_primary 或 notes 申报);单主题变更集按其主题取 N 级值(拂晓蓝取 N+1,主色在 6)"
67
+ },
68
+ "usage": {
69
+ "parser": "match 时对 style/global 值做查表:命中本表 → 输出精确值;hex(#开头)→ 透传;未命中且非 hex → 记入字段级待补充并提示「非法定义语义值」",
70
+ "design_side": "官方 5 套主题一律语义值(中文名规范,如 钴蓝-5;英文 cobalt-5 兼容);库外颜色走临时主题 hex + notes 申报"
71
+ }
72
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$comment": "全局原子层 · 间距令牌映射。spacing 为设计侧抽象字段;token 为项目实现令牌(design-tokens.scss :root)。注意 UnoCSS presetRemToPx(baseFontSize:4) 下工具类数字即 px。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "spacing",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus + vue3-web-temp"
9
+ },
10
+ "tokens": {
11
+ "space_unit": { "token": "--space-unit", "type": "size", "default": "4px", "desc": "间距基准单位" },
12
+ "spacing_sm": { "token": "--spacing-sm", "type": "size", "default": "8px", "desc": "小间距(桥接 --vts-space-xs)" },
13
+ "spacing_md": { "token": "--spacing-md", "type": "size", "default": "16px", "desc": "中间距" },
14
+ "spacing_lg": { "token": "--spacing-lg", "type": "size", "default": "24px", "desc": "大间距" },
15
+ "content_padding": { "token": "--layout-content-padding → --vts-margin", "type": "size", "default": "8px", "desc": "内容区内边距(出厂 8,设计规范常 24)" },
16
+ "card_padding": { "token": "--card-padding → --vts-card-padding", "type": "size", "default": "24px", "desc": "卡片内边距" },
17
+ "control_padding_x": { "token": "--control-padding-x", "type": "size", "default": "12px", "desc": "控件水平内边距" },
18
+ "button_padding_x": { "token": "--button-padding-x", "type": "size", "default": "15px", "desc": "按钮水平内边距" },
19
+ "header_padding_x": { "token": "--header-padding-x", "type": "size", "default": "16px", "desc": "顶栏水平内边距" }
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$comment": "全局原子层 · 字体令牌映射。typography 为设计侧抽象字段;token 为项目实现令牌(design-tokens.scss :root,桥接 EP --el-font-*)。字号超 5 档需设计侧自证场景(展示型页面除外)。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "typography",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus + vue3-web-temp"
9
+ },
10
+ "tokens": {
11
+ "font_family": { "token": "--font-family → --el-font-family", "type": "font-family", "default": "系统栈(PingFang SC / Microsoft YaHei 等)", "desc": "全局字体族" },
12
+ "font_size_sm": { "token": "--font-size-sm → --el-font-size-small", "type": "size", "default": "12px", "desc": "辅助/标注字号" },
13
+ "font_size_base": { "token": "--font-size-base → --el-font-size-base", "type": "size", "default": "14px", "desc": "正文字号" },
14
+ "font_size_lg": { "token": "--font-size-lg → --el-font-size-large", "type": "size", "default": "16px", "desc": "小标题字号" },
15
+ "font_size_xl": { "token": "--font-size-xl → --el-font-size-extra-large", "type": "size", "default": "20px", "desc": "卡片/页面标题字号" },
16
+ "font_weight_regular": { "token": "--font-weight-regular → --el-font-weight-primary", "type": "number", "default": 400, "desc": "常规字重" },
17
+ "font_weight_medium": { "token": "--font-weight-medium", "type": "number", "default": 500, "desc": "中字重(激活态文字)" },
18
+ "font_weight_semibold": { "token": "--font-weight-semibold", "type": "number", "default": 600, "desc": "标题字重" },
19
+ "line_height": { "token": "--line-height", "type": "ratio", "default": 1.5715, "desc": "全局行高比" }
20
+ }
21
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "$comment": "全局原子层 · 按钮组件映射(EP 原生)。css_vars 优先走 EP 官方变量;custom_style_map 为兜底。作用域 :root(全局组件)。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "component_button",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus"
9
+ },
10
+ "mappings": {
11
+ "component.button.primary": {
12
+ "type": "global_component",
13
+ "component": "ElButton",
14
+ "default_props": { "type": "primary" },
15
+ "style_scope": ":root",
16
+ "css_vars": {
17
+ "bg_color": "--el-button-primary-bg-color",
18
+ "text_color": "--el-button-primary-text-color",
19
+ "border_color": "--el-button-primary-border-color",
20
+ "hover_bg_color": "--el-button-primary-hover-bg-color",
21
+ "active_bg_color": "--el-button-primary-active-bg-color",
22
+ "disabled_bg_color": "--el-button-primary-disabled-bg-color"
23
+ },
24
+ "custom_style_map": {
25
+ "font_weight": "font-weight",
26
+ "padding_x": "padding-inline",
27
+ "shadow": "box-shadow"
28
+ }
29
+ },
30
+ "component.button.default": {
31
+ "type": "global_component",
32
+ "component": "ElButton",
33
+ "default_props": { "type": "default" },
34
+ "style_scope": ":root",
35
+ "css_vars": {
36
+ "bg_color": "--el-button-bg-color",
37
+ "text_color": "--el-button-text-color",
38
+ "border_color": "--el-button-border-color",
39
+ "hover_bg_color": "--el-button-hover-bg-color",
40
+ "hover_text_color": "--el-button-hover-text-color",
41
+ "hover_border_color": "--el-button-hover-border-color"
42
+ },
43
+ "custom_style_map": {
44
+ "font_weight": "font-weight",
45
+ "padding_x": "padding-inline"
46
+ }
47
+ },
48
+ "component.button.height": {
49
+ "type": "global_token",
50
+ "style_scope": ":root",
51
+ "css_vars": {
52
+ "size_sm": "--el-component-size-small",
53
+ "size_base": "--el-component-size",
54
+ "size_lg": "--el-component-size-large"
55
+ },
56
+ "custom_style_map": {}
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$comment": "全局原子层 · 输入类组件映射(EP 原生:input/select/datepicker 等输入族共用)。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "component_input",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus"
9
+ },
10
+ "mappings": {
11
+ "component.input.base": {
12
+ "type": "global_component",
13
+ "component": "ElInput",
14
+ "style_scope": ":root",
15
+ "css_vars": {
16
+ "bg_color": "--el-input-bg-color",
17
+ "text_color": "--el-input-text-color",
18
+ "border_color": "--el-input-border-color",
19
+ "hover_border_color": "--el-input-hover-border-color",
20
+ "focus_border_color": "--el-input-focus-border-color",
21
+ "placeholder_color": "--el-input-placeholder-color"
22
+ },
23
+ "custom_style_map": {
24
+ "radius": "border-radius",
25
+ "height": "height"
26
+ }
27
+ },
28
+ "component.input.height": {
29
+ "type": "global_token",
30
+ "style_scope": ":root",
31
+ "css_vars": {
32
+ "size_sm": "--el-component-size-small",
33
+ "size_base": "--el-component-size",
34
+ "size_lg": "--el-component-size-large"
35
+ },
36
+ "custom_style_map": {}
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "$comment": "全局原子层 · 弹窗/抽屉/分页等通用组件映射。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "component_overlay",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus"
9
+ },
10
+ "mappings": {
11
+ "component.modal.base": {
12
+ "type": "global_component",
13
+ "component": "ElDialog / ReDialog",
14
+ "style_scope": ":root",
15
+ "css_vars": {
16
+ "radius": "--dialog-border-radius",
17
+ "header_height": "--dialog-header-height",
18
+ "footer_height": "--dialog-footer-height",
19
+ "body_padding": "--dialog-body-padding"
20
+ },
21
+ "custom_style_map": {
22
+ "bg": "background",
23
+ "shadow": "box-shadow"
24
+ }
25
+ },
26
+ "component.drawer.base": {
27
+ "type": "global_component",
28
+ "component": "ElDrawer",
29
+ "style_scope": ":root",
30
+ "css_vars": {
31
+ "bg_color": "--el-drawer-bg-color"
32
+ },
33
+ "custom_style_map": {
34
+ "padding": "padding"
35
+ }
36
+ },
37
+ "component.card.base": {
38
+ "type": "global_component",
39
+ "component": "ElCard",
40
+ "style_scope": ":root",
41
+ "css_vars": {
42
+ "bg_color": "--el-card-bg-color",
43
+ "border_color": "--el-card-border-color",
44
+ "border_radius": "--el-card-border-radius",
45
+ "padding": "--el-card-padding"
46
+ },
47
+ "custom_style_map": {
48
+ "shadow": "box-shadow"
49
+ }
50
+ },
51
+ "component.pagination.base": {
52
+ "type": "global_component",
53
+ "component": "ElPagination",
54
+ "style_scope": ":root",
55
+ "css_vars": {
56
+ "button_bg_color": "--el-pagination-bg-color",
57
+ "button_hover_color": "--el-pagination-button-hover-color",
58
+ "hover_color": "--el-pagination-hover-color"
59
+ },
60
+ "custom_style_map": {}
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "$comment": "全局原子层 · 表格组件映射(EP 原生 el-table + 项目 element-plus.scss 表头变量化 --vts-table-header-*)。",
3
+ "meta": {
4
+ "layer": "basic",
5
+ "domain": "component_table",
6
+ "version": "1.0.0",
7
+ "scene": "global",
8
+ "tech_stack": "vue3 + element-plus"
9
+ },
10
+ "mappings": {
11
+ "component.table.base": {
12
+ "type": "global_component",
13
+ "component": "ElTable",
14
+ "style_scope": ":root",
15
+ "css_vars": {
16
+ "header_bg": "--el-table-header-bg-color",
17
+ "header_text_color": "--el-table-header-text-color",
18
+ "row_hover_bg": "--el-table-row-hover-bg-color",
19
+ "border_color": "--el-table-border-color",
20
+ "text_color": "--el-table-text-color",
21
+ "bg_color": "--el-table-bg-color",
22
+ "tr_bg_color": "--el-table-tr-bg-color",
23
+ "expanded_row_bg_color": "--el-table-expanded-cell-bg-color",
24
+ "fixed_box_shadow": "--el-table-fixed-box-shadow"
25
+ },
26
+ "custom_style_map": {
27
+ "header_border_bottom": "border-bottom",
28
+ "header_font_weight": "font-weight"
29
+ }
30
+ },
31
+ "component.table.header_ext": {
32
+ "type": "global_token",
33
+ "style_scope": ":root",
34
+ "$note": "项目扩展表头令牌(element-plus.scss 消费),与 --el-table-header-* 并存",
35
+ "css_vars": {
36
+ "vts_header_bg": "--vts-table-header-bg",
37
+ "vts_header_text": "--vts-table-header-text"
38
+ },
39
+ "custom_style_map": {}
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,20 @@
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
+ }
@@ -0,0 +1,26 @@
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 字段)。变体/定制布局按 V3.0 §五 分级派生。",
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
+ }
@@ -0,0 +1,112 @@
1
+ {
2
+ "$comment": "admin 场景 · 内容区功能点位映射。admin.content.container 为壳层高度模式通道(源码实证,lay-content/index.vue);其余 6 条为页面构图点位:类名为 vue3-temp-skill crud-pages.md L1-L9 标准样板约定,样式规则与令牌已落地(element-plus.scss 消费 design-tokens.scss L235-251 构图令牌,dark.scss 消费 vts-filter-area),存量表格 demo(views/table/{base,treeTable,vxe-table})已对齐样板;pagination 为 Element Plus 实证类(RePagination 根节点即 el-pagination,无自定义语义类)。",
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 优先,:has() 钩子类自动探测兜底)",
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) 自动定高;未标记且无钩子类 → 滚动页(向后兼容)"
30
+ }
31
+ },
32
+ "admin.content.page_header": {
33
+ "type": "element",
34
+ "selector": ".vts-page-header",
35
+ "file": "业务 views(crud-pages L1 样板)",
36
+ "style_scope": ".vts-page-card",
37
+ "css_vars": {
38
+ "margin_bottom": "--page-header-margin",
39
+ "title_size": "--page-title-size",
40
+ "title_weight": "--page-title-weight",
41
+ "desc_size": "--page-desc-size",
42
+ "desc_color": "--page-desc-color",
43
+ "actions_gap": "--page-header-actions-gap"
44
+ },
45
+ "custom_style_map": {}
46
+ },
47
+ "admin.content.filter_area": {
48
+ "type": "element",
49
+ "selector": ".vts-filter-area",
50
+ "file": "crud-pages.md L3 约定 + src/styles/element-plus.scss(消费 design-tokens.scss 构图令牌);存量 demo 已对齐:views/table/{base,treeTable,vxe-table}",
51
+ "style_scope": ".vts-page-card",
52
+ "css_vars": {
53
+ "radius": "--filter-area-radius",
54
+ "padding_y": "--filter-area-padding-y",
55
+ "padding_x": "--filter-area-padding-x",
56
+ "margin_bottom": "--filter-area-margin-bottom",
57
+ "bg": "--filter-area-bg",
58
+ "border_bottom": "--filter-area-border-bottom"
59
+ },
60
+ "custom_style_map": {}
61
+ },
62
+ "admin.content.table.operation_bar": {
63
+ "type": "element",
64
+ "selector": ".vts-action-bar",
65
+ "file": "业务 views(crud-pages 操作栏 / ReTableBar)",
66
+ "style_scope": ".vts-page-card",
67
+ "css_vars": {
68
+ "gap": "--action-bar-gap",
69
+ "padding_y": "--action-bar-padding-y"
70
+ },
71
+ "custom_style_map": {}
72
+ },
73
+ "admin.content.table.area": {
74
+ "type": "component",
75
+ "component": "ElTable(useTableSearch tableHeight 定高)",
76
+ "selector": ".vts-table-area",
77
+ "file": "crud-pages.md L3 约定 + src/styles/element-plus.scss(flex 定高链 + 圆角令牌);存量 demo 已对齐:views/table/{base,treeTable,vxe-table}",
78
+ "style_scope": ".vts-page-card",
79
+ "css_vars": {
80
+ "radius": "--table-area-border-radius",
81
+ "header_bg": "--el-table-header-bg-color",
82
+ "header_text": "--el-table-header-text-color",
83
+ "row_hover_bg": "--el-table-row-hover-bg-color"
84
+ },
85
+ "custom_style_map": {}
86
+ },
87
+ "admin.content.pagination": {
88
+ "type": "component",
89
+ "component": "RePagination",
90
+ "selector": ".vts-page-card .el-pagination",
91
+ "file": "src/components/RePagination/src/pagination.vue(根节点 el-pagination,无自定义语义类;style_scope 前缀 .vts-page-card 保证只命中卡片内分页)",
92
+ "style_scope": ".vts-page-card",
93
+ "css_vars": {
94
+ "button_hover_color": "--el-pagination-button-hover-color",
95
+ "hover_color": "--el-pagination-hover-color",
96
+ "active_bg": "--pagination-active-bg",
97
+ "active_color": "--pagination-active-color"
98
+ },
99
+ "custom_style_map": {}
100
+ },
101
+ "admin.content.empty_state": {
102
+ "type": "element",
103
+ "selector": ".vts-page-card .el-empty",
104
+ "file": "业务 views(Element Plus el-empty 空态,EP 原生类,全局生效)",
105
+ "style_scope": ".vts-page-card",
106
+ "css_vars": {
107
+ "padding": "--empty-state-padding"
108
+ },
109
+ "custom_style_map": {}
110
+ }
111
+ }
112
+ }