@agile-team/wl-skills-ui 1.6.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.
Files changed (150) hide show
  1. package/CHANGELOG.md +207 -0
  2. package/README.md +623 -0
  3. package/SKILL.md +632 -0
  4. package/bin/wl-ui.js +794 -0
  5. package/design/spec/color.md +41 -0
  6. package/design/spec/spacing.md +28 -0
  7. package/design/spec/typography.md +29 -0
  8. package/design/tokens/base.css +144 -0
  9. package/design/tokens/index.css +8 -0
  10. package/dist/ag-grid-override.scss +1 -0
  11. package/dist/element.scss +1 -0
  12. package/dist/index.scss +1 -0
  13. package/dist/portal.scss +1 -0
  14. package/dist/style-override.scss +1 -0
  15. package/dist/tokens.css +144 -0
  16. package/es/chunk-GBB7LDKQ.js +261 -0
  17. package/es/chunk-MDI2SCUP.js +281 -0
  18. package/es/chunk-QDTNMM7W.js +286 -0
  19. package/es/chunk-YLNAFAWE.js +233 -0
  20. package/es/common-preset.d.ts +38 -0
  21. package/es/common-preset.js +157 -0
  22. package/es/index.d.ts +32 -0
  23. package/es/index.js +1 -0
  24. package/es/presets/security.d.ts +16 -0
  25. package/es/presets/security.js +99 -0
  26. package/es/renderers-BFRSp2BH.d.ts +51 -0
  27. package/es/renderers-DMZbi_Gs.d.ts +51 -0
  28. package/es/renderers-DWhUlI2y.d.ts +47 -0
  29. package/es/types-04qLKHMt.d.ts +62 -0
  30. package/es/types-BrCPjAH6.d.ts +62 -0
  31. package/es/types-QZ1gy9KX.d.ts +63 -0
  32. package/examples/migration-operations-to-renderOps.md +107 -0
  33. package/examples/wk-exempt.example.json +30 -0
  34. package/mcp/server.js +394 -0
  35. package/package.json +130 -0
  36. package/reference/SelectPopupCom.vue +634 -0
  37. package/reference/ag-cell-renders.ts +644 -0
  38. package/reference/define-columns.ts +185 -0
  39. package/reference/jhlc.d.ts +1 -0
  40. package/scanner/coverage.mjs +287 -0
  41. package/scanner/exempt.mjs +127 -0
  42. package/scanner/fix.mjs +216 -0
  43. package/scanner/index.mjs +403 -0
  44. package/scanner/integration.mjs +155 -0
  45. package/scanner/report.mjs +459 -0
  46. package/scanner/rules/_shared.mjs +134 -0
  47. package/scanner/rules/button.mjs +97 -0
  48. package/scanner/rules/color.mjs +118 -0
  49. package/scanner/rules/componentFamily.mjs +184 -0
  50. package/scanner/rules/dialog.mjs +42 -0
  51. package/scanner/rules/form.mjs +86 -0
  52. package/scanner/rules/index.mjs +58 -0
  53. package/scanner/rules/table.mjs +170 -0
  54. package/scanner/rules/tag.mjs +245 -0
  55. package/scanner/snapshot.mjs +198 -0
  56. package/skills/_flows/full-audit.md +65 -0
  57. package/skills/_flows/legacy-skin-align.md +71 -0
  58. package/skills/_flows/new-project-init.md +80 -0
  59. package/skills/_flows/progressive-migrate.md +49 -0
  60. package/skills/_meta/_compat/README.md +47 -0
  61. package/skills/_meta/_compat/editors.json +76 -0
  62. package/skills/_meta/_compat/headers/agents.txt +7 -0
  63. package/skills/_meta/_compat/headers/claude-code.txt +7 -0
  64. package/skills/_meta/_compat/headers/cline.txt +7 -0
  65. package/skills/_meta/_compat/headers/cursor-mdc.txt +5 -0
  66. package/skills/_meta/_compat/headers/github-copilot.txt +5 -0
  67. package/skills/_meta/_compat/headers/kiro.txt +4 -0
  68. package/skills/_meta/_compat/headers/qoder.txt +4 -0
  69. package/skills/_meta/_compat/headers/trae.txt +3 -0
  70. package/skills/_meta/_compat/headers/windsurf.txt +5 -0
  71. package/skills/_meta/_detection.md +81 -0
  72. package/skills/_meta/_registry.md +96 -0
  73. package/skills/element/component-family/SKILL.md +71 -0
  74. package/skills/element/el-dialog/SKILL.md +124 -0
  75. package/skills/element/el-form/SKILL.md +84 -0
  76. package/skills/element/el-table/SKILL.md +86 -0
  77. package/skills/element/el-tag/SKILL.md +127 -0
  78. package/skills/layouts/detail-page/SKILL.md +99 -0
  79. package/skills/layouts/form-dialog/SKILL.md +128 -0
  80. package/skills/layouts/list-page/SKILL.md +111 -0
  81. package/skills/layouts/tree-list/SKILL.md +108 -0
  82. package/skills/ops/audit/SKILL.md +109 -0
  83. package/skills/ops/fix/SKILL.md +52 -0
  84. package/skills/ops/fix/USAGE.md +24 -0
  85. package/skills/ops/migrate/SKILL.md +157 -0
  86. package/skills/ops/scan/SKILL.md +71 -0
  87. package/skills/ops/scan/USAGE.md +16 -0
  88. package/skills/runtime/design-tokens/SKILL.md +88 -0
  89. package/skills/runtime/design-tokens/USAGE.md +19 -0
  90. package/skills/runtime/migration/SKILL.md +106 -0
  91. package/skills/runtime/migration/USAGE.md +34 -0
  92. package/skills/runtime/style-align/SKILL.md +124 -0
  93. package/skills/runtime/style-align/USAGE.md +52 -0
  94. package/skills/vendors/ag-grid/SKILL.md +94 -0
  95. package/skills/vendors/base-table/SKILL.md +57 -0
  96. package/skills/vendors/c-components/SKILL.md +36 -0
  97. package/skills/vendors/custom-wrappers/SKILL.md +45 -0
  98. package/skills/vendors/jh-components/SKILL.md +42 -0
  99. package/skills/vendors/unknown-wrapper/SKILL.md +44 -0
  100. package/standards/engineering/01-import-order.md +46 -0
  101. package/standards/engineering/02-naming.md +54 -0
  102. package/standards/engineering/03-scss-structure.md +59 -0
  103. package/standards/ui/01-table.md +111 -0
  104. package/standards/ui/02-button.md +83 -0
  105. package/standards/ui/03-form.md +118 -0
  106. package/standards/ui/04-tag-status.md +110 -0
  107. package/standards/ui/05-dialog-pagination.md +118 -0
  108. package/styles/element/_card.scss +26 -0
  109. package/styles/element/_descriptions.scss +22 -0
  110. package/styles/element/_dialog.scss +43 -0
  111. package/styles/element/_drawer.scss +22 -0
  112. package/styles/element/_feedback.scss +52 -0
  113. package/styles/element/_form.scss +22 -0
  114. package/styles/element/_navigation.scss +36 -0
  115. package/styles/element/_overlay.scss +32 -0
  116. package/styles/element/_pagination.scss +16 -0
  117. package/styles/element/_steps.scss +32 -0
  118. package/styles/element/_table.scss +13 -0
  119. package/styles/element/_tabs.scss +40 -0
  120. package/styles/element/_tree.scss +27 -0
  121. package/styles/element/_upload.scss +34 -0
  122. package/styles/element/index.scss +17 -0
  123. package/styles/index.scss +21 -0
  124. package/styles/layouts/_detail-page.scss +27 -0
  125. package/styles/layouts/_form-dialog.scss +19 -0
  126. package/styles/layouts/_list-page.scss +47 -0
  127. package/styles/layouts/_tree-list.scss +33 -0
  128. package/styles/layouts/index.scss +6 -0
  129. package/styles/presets/element-only.scss +6 -0
  130. package/styles/presets/full.scss +12 -0
  131. package/styles/presets/security.scss +37 -0
  132. package/styles/presets/skin.scss +14 -0
  133. package/styles/presets/tokens-only.scss +7 -0
  134. package/styles/tokens/index.scss +79 -0
  135. package/styles/vendors/_ag-grid.scss +273 -0
  136. package/styles/vendors/_base-components.scss +480 -0
  137. package/styles/vendors/_base-query-toolbar.scss +253 -0
  138. package/styles/vendors/_base-table.scss +41 -0
  139. package/styles/vendors/_c-components.scss +34 -0
  140. package/styles/vendors/_custom-wrappers.scss +30 -0
  141. package/styles/vendors/_jh-drag-col.scss +63 -0
  142. package/styles/vendors/_jh-pagination.scss +81 -0
  143. package/styles/vendors/_jh-tree.scss +196 -0
  144. package/styles/vendors/_portal.scss +114 -0
  145. package/styles/vendors/index.scss +17 -0
  146. package/templates/ag-grid-page/TPL-AG-GRID.md +76 -0
  147. package/templates/form-dialog/TPL-FORM-DIALOG.md +165 -0
  148. package/templates/list-page/TPL-LIST.md +139 -0
  149. package/templates/tree-list/TPL-TREE-LIST.md +176 -0
  150. package/templates/ui-optimization-report/TPL-UI-OPTIM-REPORT.md +343 -0
package/README.md ADDED
@@ -0,0 +1,623 @@
1
+ # @agile-team/wl-skills-ui
2
+
3
+ > **企业级 UI 风格对齐框架** — 让 Vue + Element Plus 业务系统获得一致的视觉、可被 AI 精确识别和修复的设计规范,以及可演进的工程能力。
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@agile-team/wl-skills-ui.svg)](https://www.npmjs.com/package/@agile-team/wl-skills-ui)
6
+ [![Node](https://img.shields.io/badge/node-%3E%3D18-green.svg)]()
7
+
8
+ ---
9
+
10
+ ## 这是什么?
11
+
12
+ 一套 "**设计令牌 + 控件对齐 + 封装组件化妆 + 页面骨架 + 业务渲染 + 自动化扫描修复 + AI Skills**" 的全栈式风格框架。
13
+
14
+ 它解决的问题:
15
+
16
+ > 团队有多个 Vue 项目,新老共存。新项目可以从零按规范搭建;老项目用了大量内部封装组件(`Base*` / `jh-*` / `C_*` / `c_*` / 还有野路子自封装),改源码代价大。如何在 **不改业务代码** 的前提下,做到全项目视觉一致;同时给新项目和拿到源码后的老项目,提供更精简、更高效的演进路径?
17
+
18
+ ---
19
+
20
+ ## 架构总览
21
+
22
+ ### 五层模型 (L0 → L4)
23
+
24
+ ```
25
+ ┌─────────────────────────────────────────────────────────────────┐
26
+ │ L0 Design Tokens 颜色 / 间距 / 圆角 / 字号 / 阴影 │
27
+ │ → 所有上层依赖的"宪法" │
28
+ ├─────────────────────────────────────────────────────────────────┤
29
+ │ L1 Element Plus 原子层 el-button / el-input / el-table ... │
30
+ │ → 一控件一规则、一控件一 SCSS、一控件一 SKILL │
31
+ ├─────────────────────────────────────────────────────────────────┤
32
+ │ L2 Vendors 封装组件层 ⭐ Base* / jh-* / C_*/c_* / custom / AG │
33
+ │ → 老项目化妆主战场(无源码也能覆盖) │
34
+ ├─────────────────────────────────────────────────────────────────┤
35
+ │ L3 Page Layouts 骨架层 list-page / tree-list / form-dialog │
36
+ │ → 团队约定的页面 DNA │
37
+ ├─────────────────────────────────────────────────────────────────┤
38
+ │ L4 Runtime 业务渲染层 defineColumns / renderOps / preset │
39
+ │ → 让业务代码"消失"(仅有源码场景) │
40
+ └─────────────────────────────────────────────────────────────────┘
41
+ ```
42
+
43
+ ### 两种运行模式
44
+
45
+ | 模式 | 适用 | 包含层 | 接入方式 |
46
+ | ------------------ | ------------------------ | -------------- | ------------------------------------------------------ |
47
+ | **Native(原生)** | 新项目、能完全可控的项目 | L0+L1+L2+L3+L4 | `@use '.../styles' as *;` + `installCommonPreset()` |
48
+ | **Skin(化妆)** | 老项目、第三方封装无源码 | L0+L1+L2 | `@use '.../styles/presets/skin' as *;`(不动业务代码) |
49
+
50
+ ---
51
+
52
+ ## 目录结构
53
+
54
+ ```
55
+ wl-skills-ui/
56
+ ├── design/ # L0 — 设计令牌
57
+ │ ├── tokens/
58
+ │ │ ├── base.css # CSS 变量声明(:root --el-color-primary 等)
59
+ │ │ └── index.css
60
+ │ └── spec/ # 设计规范文档(color / typography / spacing)
61
+
62
+ ├── styles/ # L1+L2+L3 SCSS 实现
63
+ │ ├── tokens/ # SCSS 变量映射层($wk-* → CSS 变量)
64
+ │ ├── element/ # L1 Element Plus 控件对齐
65
+ │ │ ├── _table.scss
66
+ │ │ ├── _form.scss
67
+ │ │ ├── _dialog.scss
68
+ │ │ ├── _pagination.scss
69
+ │ │ └── index.scss
70
+ │ ├── vendors/ # ⭐ L2 封装组件化妆层
71
+ │ │ ├── _base-table.scss # Base* 表格类(优先级 #1)
72
+ │ │ ├── _base-components.scss # Base* 通用(按钮组/徽标/Tag)
73
+ │ │ ├── _base-query-toolbar.scss # BaseQuery / BaseToolbar
74
+ │ │ ├── _jh-tree.scss # jh-tree(优先级 #2)
75
+ │ │ ├── _jh-pagination.scss # jh-pagination
76
+ │ │ ├── _jh-drag-col.scss # jh-drag-col 拖拽分割条
77
+ │ │ ├── _c-components.scss # C_/c_ 前缀(优先级 #3,团队未来主流)
78
+ │ │ ├── _custom-wrappers.scss # 野路子兜底(优先级 #4)
79
+ │ │ ├── _ag-grid.scss # AG Grid 主题
80
+ │ │ ├── _portal.scss # 弹层/popper
81
+ │ │ └── index.scss
82
+ │ ├── layouts/ # L3 页面骨架
83
+ │ │ ├── _list-page.scss # .list-page 列表页
84
+ │ │ ├── _tree-list.scss # .tree-list 左树右表
85
+ │ │ ├── _form-dialog.scss # .form-dialog 表单弹窗
86
+ │ │ ├── _detail-page.scss # .detail-page 详情页
87
+ │ │ └── index.scss
88
+ │ ├── presets/ # 组合预设(用户一行接入)
89
+ │ │ ├── full.scss # L0+L1+L2+L3(默认 = styles/index.scss)
90
+ │ │ ├── skin.scss # L0+L1+L2(老项目化妆)
91
+ │ │ ├── element-only.scss # L0+L1
92
+ │ │ └── tokens-only.scss # L0
93
+ │ └── index.scss # = presets/full
94
+
95
+ ├── runtime/ # L4 业务渲染(TS)
96
+ │ ├── core/ # 不可变核心
97
+ │ │ ├── types.ts # 类型定义
98
+ │ │ ├── renderers.ts # renderTagNode / renderOps / renderClassifyTag ...
99
+ │ │ ├── registry.ts # COLUMN_AUTO_MAP + defineColumns
100
+ │ │ └── index.ts
101
+ │ ├── presets/ # 业务预设(可扩展)
102
+ │ │ ├── registry.ts # createPreset / installPreset
103
+ │ │ ├── common.ts # 通用业务预设(enable/audit/verify + 起步包)
104
+ │ │ └── index.ts
105
+ │ └── index.ts # 公共 API 入口
106
+
107
+ ├── scanner/ # 自动化扫描 / 修复
108
+ │ ├── index.mjs # CLI(含 --layer/--vendor/--mode 过滤)
109
+ │ ├── rules/ # 规则集
110
+ │ │ ├── _shared.mjs # 公共工具 + inferMeta(layer/vendor)
111
+ │ │ ├── table.mjs # R001 R002 R003 R014
112
+ │ │ ├── form.mjs # R006 R007 R008
113
+ │ │ ├── button.mjs # R004 R005 R015
114
+ │ │ ├── tag.mjs # R009 R010 R012
115
+ │ │ ├── dialog.mjs # R011
116
+ │ │ ├── color.mjs # R016 R017 R018
117
+ │ │ └── index.mjs # 聚合 + addRules() 插件机制
118
+ │ ├── fix.mjs # 自动修复引擎
119
+ │ ├── integration.mjs # 接入完整性检查
120
+ │ └── report.mjs # 报告生成器
121
+
122
+ ├── skills/ # ⭐ AI 编辑器知识库
123
+ │ ├── _meta/
124
+ │ │ ├── _registry.md # Skills 总索引
125
+ │ │ ├── _detection.md # vendor / layout 识别速查表
126
+ │ │ └── _compat/ # 多编辑器适配(Copilot/Cursor/Windsurf/Kiro/Trae/Claude/Cline/Agents/Qoder)
127
+ │ ├── _flows/ # ⭐ 组合流程(一句话跑全套)
128
+ │ │ ├── new-project-init.md # 新项目从零接入
129
+ │ │ ├── legacy-skin-align.md # 老项目化妆对齐 ⭐ 杀手级
130
+ │ │ ├── full-audit.md # 全量审计(不修)
131
+ │ │ └── progressive-migrate.md # 渐进迁移到 runtime
132
+ │ ├── element/ # L1 控件 SKILL
133
+ │ │ ├── el-table/SKILL.md
134
+ │ │ ├── el-form/SKILL.md
135
+ │ │ ├── el-dialog/SKILL.md
136
+ │ │ └── el-tag/SKILL.md
137
+ │ ├── vendors/ # ⭐ L2 封装识别 SKILL
138
+ │ │ ├── base-table/SKILL.md # 优先级 #1
139
+ │ │ ├── jh-components/SKILL.md # 优先级 #2
140
+ │ │ ├── c-components/SKILL.md # 优先级 #3
141
+ │ │ ├── custom-wrappers/SKILL.md # 优先级 #4 兜底
142
+ │ │ ├── ag-grid/SKILL.md
143
+ │ │ └── unknown-wrapper/SKILL.md # 兜底探测
144
+ │ ├── layouts/ # L3 页面骨架 SKILL(按需扩展)
145
+ │ ├── runtime/ # L4 业务渲染 SKILL
146
+ │ │ ├── style-align/SKILL.md
147
+ │ │ ├── design-tokens/SKILL.md
148
+ │ │ └── migration/SKILL.md
149
+ │ └── ops/ # 操作类 SKILL
150
+ │ ├── scan/SKILL.md
151
+ │ └── fix/SKILL.md
152
+
153
+ ├── templates/ # 代码生成模板
154
+ │ ├── list-page/TPL-LIST.md
155
+ │ ├── form-dialog/TPL-FORM-DIALOG.md
156
+ │ ├── tree-list/TPL-TREE-LIST.md
157
+ │ └── ag-grid-page/TPL-AG-GRID.md
158
+
159
+ ├── standards/ # 团队规范文档
160
+ │ ├── ui/ # UI 规范(01-table / 02-button / ...)
161
+ │ └── engineering/ # 工程规范(import 顺序 / 命名 / SCSS 结构)
162
+
163
+ ├── bin/ # CLI
164
+ │ └── wl-ui.js # 统一入口(init/update/diff/clean/doctor/prompts/scan/fix/add-preset)
165
+
166
+ ├── dist/ # 构建产物 + 兼容重定向
167
+ │ ├── tokens.css # = design/tokens/base.css
168
+ │ ├── index.scss # @use '../styles/index'
169
+ │ ├── element.scss # @use '../styles/element/index'
170
+ │ ├── ag-grid-override.scss # @use '../styles/vendors/ag-grid'
171
+ │ └── portal.scss # @use '../styles/vendors/portal'
172
+
173
+ └── es/ # tsup 构建产物(runtime ESM + d.ts)
174
+ ├── index.js
175
+ ├── common-preset.js
176
+ └── *.d.ts
177
+ ```
178
+
179
+ ---
180
+
181
+ ## 安装
182
+
183
+ ```bash
184
+ pnpm add @agile-team/wl-skills-ui
185
+ # 或
186
+ npm i @agile-team/wl-skills-ui
187
+ yarn add @agile-team/wl-skills-ui
188
+ ```
189
+
190
+ 要求:Node ≥ 18,Vue ≥ 3.2,Element Plus ≥ 2.2。
191
+
192
+ ---
193
+
194
+ ## 版本亮点
195
+
196
+ 当前 v1.6.2 版本重点补齐 AI Skill 的安装、更新、清理和编辑器集成体验,并强化多组件样式覆盖精度:
197
+
198
+ - vendors 层各组件样式精细化调整:`_base-components`、`_ag-grid`、`_portal`、`_jh-tree`、`_jh-pagination`、`_jh-drag-col`、`_c-components`、`_base-query-toolbar` 全面优化
199
+ - design tokens(`base.css` / `dist/tokens.css`)同步更新,security preset 样式调整
200
+ - `wl-ui init/update` 会安装 Skill、触发提示、MCP 配置和 manifest 清单
201
+ - `wl-ui diff/clean/doctor/prompts` 覆盖升级前对比、卸载清理、环境体检和提示词查看
202
+ - 内置 `wl-skills-ui` MCP Server,供 AI 编辑器调用扫描、检查和 dry-run 修复
203
+ - 支持 GitHub Copilot、Cursor、Windsurf、Kiro、Trae、Claude Code、Cline、Qoder、通用 Agents
204
+ - 与 `@agile-team/wl-skills-kit` 只做可选桥接提醒,不建立强依赖
205
+ - 接入 `@robot-admin/git-standards`,仓库维护和业务项目均可复用提交/检查规范
206
+
207
+ ---
208
+
209
+ ## 与 wl-skills-kit 的协同闭环
210
+
211
+ `wl-skills-ui` 与 `wl-skills-kit` 不强耦合,但可以互相配合形成“先统一视觉,再按团队规范渐进修复”的闭环:
212
+
213
+ - `wl-skills-ui` 负责整体设计体系、tokens、样式风格、化妆层和 UI runtime;无论项目是 kit 最佳写法、纯 Element Plus、老旧 `Base*` 封装,还是其他基于 Element Plus 的封装,都应尽量覆盖成统一视觉风格。
214
+ - `wl-skills-kit` 负责 AI 生成页面和前端工作流必须遵守的团队规范、最佳实践、业务模板、mock、api.md、菜单/字典/权限同步等,不直接负责样式体系。
215
+ - `wl-ui scan/check` 先识别项目中的多种 UI 写法并给出风格/结构结论;如果需要从“样式统一”进一步升级为“团队最佳实践写法”,再提示使用 `wl-skills-kit` 按扫描结论进行规范化重构。
216
+ - 即使暂不重构,`wl-skills-ui` 的 Skin/Native 样式覆盖也应继续生效,保证老项目和非标准写法至少获得统一视觉。
217
+
218
+ 当页面由 `wl-skills-kit` 生成或重构时,推荐最终页面骨架保持:
219
+
220
+ ```text
221
+ AbstractPageQueryHook + BaseQuery + BaseToolbar + BaseTable(render-type="agGrid", cid) + jh-pagination
222
+ ```
223
+
224
+ ---
225
+
226
+ ## 快速开始
227
+
228
+ ### 场景 A — 新项目(Native Mode)
229
+
230
+ ```bash
231
+ # 1. 自动安装 skills + 配置接入
232
+ npx wl-ui init --mode native
233
+ ```
234
+
235
+ ```html
236
+ <!-- 2. index.html -->
237
+ <head>
238
+ <link
239
+ rel="stylesheet"
240
+ href="/node_modules/@agile-team/wl-skills-ui/design/tokens/base.css"
241
+ />
242
+ </head>
243
+ ```
244
+
245
+ ```scss
246
+ // 3. src/styles/index.scss
247
+ @use "@agile-team/wl-skills-ui/styles" as *;
248
+ ```
249
+
250
+ ```ts
251
+ // 4. src/main.ts
252
+ import { installCommonPreset } from "@agile-team/wl-skills-ui/runtime/common-preset";
253
+ installCommonPreset();
254
+ ```
255
+
256
+ ```vue
257
+ <!-- 5. 业务代码用 runtime API(参考 templates/list-page/) -->
258
+ <script setup>
259
+ import { defineColumns, renderOps } from "@agile-team/wl-skills-ui/runtime";
260
+
261
+ const columns = defineColumns([
262
+ { type: "index", label: "序号", width: 60, align: "center" },
263
+ { name: "name", label: "名称", minWidth: 150 },
264
+ { name: "enableStatus", label: "状态", width: 90 }, // ← 自动渲染 Tag(已注册)
265
+ {
266
+ label: "操作",
267
+ width: 120,
268
+ fixed: "right",
269
+ align: "center",
270
+ defaultSlot: ({ row }) =>
271
+ renderOps([
272
+ { type: "view", onClick: () => modal.value.view(row.id) },
273
+ { type: "edit", onClick: () => modal.value.edit(row.id) },
274
+ { type: "del", onClick: () => handleDel(row.id) },
275
+ ]),
276
+ },
277
+ ]);
278
+ </script>
279
+ ```
280
+
281
+ ### 场景 B — 老项目(Skin Mode)
282
+
283
+ ```bash
284
+ # 1. 化妆模式接入(不安装 runtime/layouts 类 skill)
285
+ npx wl-ui init --mode skin
286
+ ```
287
+
288
+ ```scss
289
+ // 2. 仅引入 skin preset(不引入 layouts,避免冲击老布局)
290
+ @use "@agile-team/wl-skills-ui/styles/presets/skin" as *;
291
+ ```
292
+
293
+ ```bash
294
+ # 3. AI 编辑器中触发:
295
+ # "用 wl-ui 的 legacy-skin-align 流程跑一下当前项目"
296
+ # → AI 按 _flows/legacy-skin-align.md 顺序执行 6 个 phase
297
+
298
+ # 或纯审计(不修):
299
+ npx wl-ui scan --target src --mode skin --outFile audit.md
300
+ ```
301
+
302
+ ### 场景 C — AI 编辑器 / MCP 接入
303
+
304
+ ```bash
305
+ # 安装或更新 Skill 到当前业务项目
306
+ npx wl-ui init --project . --editor auto
307
+ npx wl-ui update --project .
308
+
309
+ # 查看 AI 触发提示
310
+ npx wl-ui prompts
311
+
312
+ # 体检安装结果和 MCP/规范插件提示
313
+ npx wl-ui doctor --project .
314
+ ```
315
+
316
+ 安装后会写入 `.github/wl-skills-ui/TRIGGER_PROMPTS.md`、`.mcp.json` 和 `.wl-skills-ui-manifest.json`。支持的编辑器可以单独指定,例如 `--editor claude-code`、`--editor cline`、`--editor agents-generic`、`--editor qoder`。
317
+
318
+ ### 场景 D — 仅 CI 检查
319
+
320
+ ```json
321
+ // package.json
322
+ {
323
+ "scripts": {
324
+ "ui:check": "wl-ui check --project .",
325
+ "ui:audit": "wl-ui scan --target src --outFile ui-audit.md",
326
+ "ui:fix": "wl-ui fix --target src --dry-run"
327
+ }
328
+ }
329
+ ```
330
+
331
+ ---
332
+
333
+ ## CLI 速查
334
+
335
+ ```bash
336
+ wl-ui init [--project .] [--editor <e>] [--mode native|skin]
337
+ [--dry-run] [--skills-only]
338
+ wl-ui update [--project .] [--force] [--dry-run]
339
+ wl-ui diff [--project .]
340
+ wl-ui clean [--project .] [--dry-run]
341
+ wl-ui doctor [--project .]
342
+ wl-ui prompts
343
+ wl-ui scan --target src [--layer L0,L1,L2] [--vendor base-table,jh]
344
+ [--mode skin|native] [--outFile report.md]
345
+ wl-ui check --project .
346
+ wl-ui fix --target src [--dry-run]
347
+ wl-ui all --project .
348
+ wl-ui add-preset <name> # 脚手架新业务 preset
349
+ ```
350
+
351
+ 支持的 AI 编辑器:`github-copilot` / `cursor` / `windsurf` / `kiro` / `trae` / `claude-code` / `cline` / `agents-generic` / `qoder`(自动检测)
352
+
353
+ `init/update` 会同时写入:
354
+
355
+ - AI Skill 规则文件
356
+ - `.github/wl-skills-ui/TRIGGER_PROMPTS.md` 触发提示
357
+ - `.mcp.json` 中的 `wl-skills-ui` MCP Server 配置
358
+ - `.wl-skills-ui-manifest.json` 安装清单,供 `update/diff/clean/doctor` 使用
359
+
360
+ > 可选桥接:如项目也安装了 `@agile-team/wl-skills-kit`,两者保持独立分工,不互相强依赖。kit 负责编码规范/页面生成/菜单字典权限,wl-skills-ui 负责 UI 风格/化妆层/Runtime 渲染。
361
+
362
+ > 规范插件建议:项目可执行 `npx @robot-admin/git-standards init` 接入 ESLint/Prettier/Husky/提交规范,形成代码质量闭环。
363
+
364
+ ---
365
+
366
+ ## AI Skills 触发模型
367
+
368
+ ### 组合流程触发(一句话跑全套)
369
+
370
+ ```
371
+ @workspace 用 wl-ui 的 legacy-skin-align 流程对当前项目做老项目化妆对齐
372
+
373
+ AI 按 _flows/legacy-skin-align.md 严格 6 phase 执行:
374
+ 1. 接入 tokens
375
+ 2. 接入 skin preset
376
+ 3. 触发 vendors/* skill 修复(按优先级 Base > jh > C_ > custom)
377
+ 4. 触发 element/* skill 修复
378
+ 5. 触发 tokens/* 规则修复
379
+ 6. 不动业务代码
380
+ ```
381
+
382
+ ### 单点 Skill 触发(精准修复)
383
+
384
+ ```
385
+ @workspace 用 wl-ui 的 vendors/base-table skill 检查这个文件
386
+ ↓ AI 仅加载 base-table SKILL.md,针对 R001/R002/R003/R014 修复
387
+ ```
388
+
389
+ ### Skin 模式优先级(团队约定)
390
+
391
+ ```
392
+ Base* > jh-* > C_*/c_* > custom wrappers
393
+ (高) (低)
394
+ ```
395
+
396
+ 样式文件加载顺序在 `styles/vendors/index.scss` 中固化,确保高优先级覆盖低优先级。
397
+
398
+ ---
399
+
400
+ ## 扩展机制
401
+
402
+ ### 1. 新增一个业务 preset
403
+
404
+ ```bash
405
+ npx wl-ui add-preset my-biz
406
+ # 生成 runtime/presets/my-biz.ts,按提示填字段映射,然后:
407
+ ```
408
+
409
+ ```ts
410
+ // main.ts
411
+ import { installMyBizPreset } from "@agile-team/wl-skills-ui/runtime/presets/my-biz";
412
+ installMyBizPreset();
413
+ ```
414
+
415
+ ### 2. 新增一类 vendor 封装组件
416
+
417
+ 1. 在 `styles/vendors/` 新建 `_xxx.scss`
418
+ 2. 在 `styles/vendors/index.scss` 按优先级 `@forward` 进去
419
+ 3. 在 `skills/vendors/xxx/` 新建 `SKILL.md`(含 Detect/Diagnose/Repair 三段)
420
+ 4. 在 `skills/_meta/_detection.md` 追加识别特征
421
+ 5. 在 `scanner/rules/` 追加规则(带 `category: 'vendor-xxx'`,自动获得 `layer:'L2'`)
422
+
423
+ ### 3. 新增一类页面骨架
424
+
425
+ 1. 在 `styles/layouts/` 新建 `_xxx.scss`
426
+ 2. 在 `styles/layouts/index.scss` `@forward` 进去
427
+ 3. 在 `templates/xxx/` 新建 `TPL-XXX.md`
428
+ 4. 在 `skills/layouts/xxx/` 新建 `SKILL.md`
429
+
430
+ ### 4. 新增一条扫描规则
431
+
432
+ ```js
433
+ // scanner/rules/my-rule.mjs
434
+ export const myRules = [
435
+ {
436
+ id: "R200",
437
+ category: "vendor-base-table", // 自动 layer=L2 / vendor=base-table
438
+ severity: "warning",
439
+ name: "...",
440
+ check(template, file, lineOffset) {
441
+ /* return issue[] */
442
+ },
443
+ },
444
+ ];
445
+
446
+ // scanner/rules/index.mjs 中追加 import + addRules
447
+ ```
448
+
449
+ ---
450
+
451
+ ## Element Plus 组件族样式管控
452
+
453
+ `wl-skills-ui` 的核心是样式绝对管控。加载 `styles`、`styles/presets/skin` 或 `styles/presets/element-only` 后,会统一覆盖首批 B 端高频 Element Plus 组件族:
454
+
455
+ | 组件族 | 覆盖标签 | 典型场景 |
456
+ | ------------ | ---------------------------------------------------------- | -------------------------------- |
457
+ | card | `el-card` | 列表容器、详情卡片、统计卡片 |
458
+ | tabs | `el-tabs` `el-tab-pane` | 详情页 Tab、配置页 Tab、主从切换 |
459
+ | descriptions | `el-descriptions` | 详情页字段展示、只读信息区 |
460
+ | tree | `el-tree` | 左树右表、组织树、区域树 |
461
+ | drawer | `el-drawer` | 抽屉详情、抽屉编辑 |
462
+ | upload | `el-upload` | 附件上传、图片上传、文件列表 |
463
+ | steps | `el-steps` `el-step` | 审批流、流程状态 |
464
+ | overlay | `el-popover` `el-tooltip` `el-dropdown` | 辅助说明、溢出提示、更多操作 |
465
+ | navigation | `el-menu` `el-breadcrumb` | 导航、面包屑 |
466
+ | feedback | `el-empty` `el-result` `el-alert` `el-badge` `el-timeline` | 空状态、异常状态、提示反馈 |
467
+
468
+ 扫描器会在 JSON/Markdown 报告中输出 `componentCoverage`、`recommendedSkills`、`recommendations` 和 `kitBridge`,用于 AI 自动判断下一步是继续由 `wl-skills-ui` 做 Skin/Native 视觉统一,还是桥接 `wl-skills-kit` 做页面结构规范化。
469
+
470
+ 同时会识别以下 B 端组合业务场景:
471
+
472
+ | 场景 | 识别含义 |
473
+ | ------------------- | ---------------------------- |
474
+ | `query-table` | 查询区 + 表格 |
475
+ | `toolbar-actions` | 工具栏 / 批量操作栏 |
476
+ | `tree-table` | 左树右表 |
477
+ | `dialog-form` | 弹窗表单 |
478
+ | `drawer-detail` | 抽屉详情 / 抽屉编辑 |
479
+ | `detail-card` | 详情卡片 |
480
+ | `tab-workbench` | Tab 工作台 / Tab 详情 |
481
+ | `attachment-upload` | 附件上传 |
482
+ | `process-flow` | 流程 / 审批 |
483
+ | `feedback-state` | 空状态 / 异常状态 / 反馈提示 |
484
+
485
+ ---
486
+
487
+ ## AI/MCP 智能引导
488
+
489
+ | MCP Tool | 作用 |
490
+ | ----------------------- | ---------------------------------------------------------- |
491
+ | `wks_ui_check` | 检查 tokens/styles/runtime 接入完整性 |
492
+ | `wks_ui_scan` | 扫描 UI 风格偏差,输出 Markdown 或 JSON |
493
+ | `wks_ui_fix_dry_run` | 预览自动修复,不实际写入 |
494
+ | `wks_ui_skill_prompt` | 输出 AI 触发提示 |
495
+ | `wks_ui_route_intent` | 根据自然语言识别 UI 治理意图并推荐 flow/tool/skill |
496
+ | `wks_ui_recommend_flow` | 根据扫描 JSON 推荐 nextActions 和 `wl-skills-kit` 桥接动作 |
497
+
498
+ 推荐智能体流程:
499
+
500
+ ```text
501
+ 用户自然语言
502
+ → wks_ui_route_intent
503
+ → wks_ui_scan --output json
504
+ → wks_ui_recommend_flow
505
+ → 先保证样式统一
506
+ → 如需规范化,再桥接 wl-skills-kit validate-page / doctor-ui
507
+ ```
508
+
509
+ ---
510
+
511
+ ## Runtime API 概览
512
+
513
+ | API | 说明 |
514
+ | ------------------------------------------------ | -------------------------------------------------- |
515
+ | `defineColumns(cols)` | 列定义,自动应用 `COLUMN_AUTO_MAP` |
516
+ | `renderOps(items)` | 操作列图标按钮组(view/edit/del/log/ok/send 预设) |
517
+ | `renderTagNode(v, map)` | 状态 Tag 渲染 |
518
+ | `renderClassifyTag(v, map)` | 分类 Tag 渲染 |
519
+ | `renderBadge(v)` / `renderCountBadge(v)` | 编号 / 计数徽标 |
520
+ | `renderRatingLevel(v)` | 评级颜色 |
521
+ | `registerColumnAutoMap(field, config)` | 注册新字段自动渲染 |
522
+ | `installCommonPreset()` | 安装通用业务预设 |
523
+ | `setDictResolver(fn)` | 解耦动态字典查询 |
524
+ | `createPreset(config)` / `installPreset(config)` | 自定义 preset 工厂 |
525
+
526
+ ---
527
+
528
+ ## 设计令牌
529
+
530
+ 详见 `design/spec/`:
531
+
532
+ | 维度 | 文档 |
533
+ | ---- | ------------------------------------------------------ |
534
+ | 颜色 | [design/spec/color.md](design/spec/color.md) |
535
+ | 字号 | [design/spec/typography.md](design/spec/typography.md) |
536
+ | 间距 | [design/spec/spacing.md](design/spec/spacing.md) |
537
+
538
+ 主色:`#4368ff` → `--el-color-primary`(与 Element Plus 默认蓝对齐)
539
+
540
+ ---
541
+
542
+ ## 规范清单
543
+
544
+ ### UI 规则(R001-R037,按 layer 自动分组)
545
+
546
+ | Rule | Layer | Vendor | 说明 |
547
+ | ---- | ----- | --------- | ------------------------------------ |
548
+ | R001 | L1 | element | el-table-column 缺 `align="center"` |
549
+ | R002 | L1 | element | el-table 缺 `empty-text` |
550
+ | R003 | L1 | element | BaseTable 缺 `empty-text` |
551
+ | R004 | L1 | element | 操作列按钮非文字按钮 |
552
+ | R005 | L1 | element | 工具栏按钮缺 icon |
553
+ | R006 | L1 | element | 表单控件缺 `size="small"` |
554
+ | R007 | L1 | element | el-date-picker 缺 `width:100%` |
555
+ | R008 | L1 | element | label-width ≥ 150px |
556
+ | R009 | L1 | element | 状态字段纯文本渲染 |
557
+ | R010 | L1 | element | 分类字段缺 `effect="plain"` |
558
+ | R011 | L1 | element | 分页器位置错误 |
559
+ | R012 | L1 | element | 弹窗内 el-table 缺 `empty-text` |
560
+ | R013 | L4 | runtime | columnsDef 用旧格式 `operations: []` |
561
+ | R014 | L1 | element | selection 列缺 header-align |
562
+ | R015 | L1 | element | modal 内表格按钮非 link |
563
+ | R016 | L0 | — | `<style>` 块硬编码颜色 |
564
+ | R017 | L0 | — | `<template>` 块硬编码颜色 |
565
+ | R018 | L0 | — | `<script>` 块硬编码颜色 |
566
+ | R021 | L2 | BaseTable | BaseTable 缺 `render-type="agGrid"` |
567
+ | R022 | L2 | BaseTable | BaseTable 缺唯一 `cid/:cid` |
568
+ | R031 | L1 | element | el-card 建议使用统一场景 class |
569
+ | R032 | L1 | element | el-tabs 建议明确页面场景 |
570
+ | R033 | L1 | element | el-descriptions 建议 bordered/容器 |
571
+ | R034 | L1 | element | el-drawer 建议明确 size |
572
+ | R035 | L1 | element | el-upload 建议配置 tip/限制说明 |
573
+ | R036 | L1 | element | el-steps 建议明确状态来源 |
574
+ | R037 | L1 | element | 空/异常反馈建议统一操作入口 |
575
+
576
+ ### 工程规范
577
+
578
+ - [01-import-order.md](standards/engineering/01-import-order.md)
579
+ - [02-naming.md](standards/engineering/02-naming.md)
580
+ - [03-scss-structure.md](standards/engineering/03-scss-structure.md)
581
+
582
+ ---
583
+
584
+ ## 未来路线图
585
+
586
+ | 阶段 | 目标 |
587
+ | ---------- | ------------------------------------------------------------------- |
588
+ | **v1.5.x** | 生命周期 CLI + manifest + MCP + 多编辑器适配 + 规范插件接入 |
589
+ | **v1.6** | 多业务 preset 矩阵(safe / hr / asset / ops 等)和更多 MCP 辅助工具 |
590
+ | **v2.0** | 稳定接口冻结,正式标记 stable |
591
+
592
+ ---
593
+
594
+ ## 贡献
595
+
596
+ ```bash
597
+ git clone git@github.com:ChenyCHENYU/wl-skills-ui.git
598
+ cd wl-skills-ui
599
+ pnpm install
600
+ pnpm lint
601
+ pnpm build
602
+ node scanner/index.mjs scan --target reference
603
+ ```
604
+
605
+ 约定:
606
+
607
+ - 提交规范见 [Git Commit Convention](#git-commit-convention)
608
+ - 新增规则必须带 `category` → 自动获得 `layer/vendor`
609
+ - 新增 vendor 必须同时更新:styles + skills + \_detection.md + scanner
610
+
611
+ ### Git Commit Convention
612
+
613
+ ```
614
+ 类型(作用域): 内容
615
+ ```
616
+
617
+ 类型:`feat` `fix` `docs` `style` `refactor` `chore` `perf`
618
+
619
+ ---
620
+
621
+ ## License
622
+
623
+ UNLICENSED — 内部专用,未经授权不得外传