@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
@@ -0,0 +1,71 @@
1
+ ---
2
+ description: |
3
+ wk-ui scan 扫描器使用指南 — 如何运行风格扫描、接入完整性检查,解读报告格式。
4
+ applyTo: "**"
5
+ ---
6
+
7
+ # 扫描器使用指南
8
+
9
+ ## 命令速查
10
+
11
+ ```bash
12
+ # 一站式(推荐):接入完整性 + 风格扫描 + 生成 Markdown 报告
13
+ npx wk-ui all --project . --outFile report.md
14
+
15
+ # 仅风格扫描
16
+ npx wk-ui scan --target src
17
+
18
+ # 仅接入完整性检查(I001~I004)
19
+ npx wk-ui check --project .
20
+
21
+ # JSON 格式输出(方便程序处理)
22
+ npx wk-ui scan --target src --output json
23
+ ```
24
+
25
+ ## 参数说明
26
+
27
+ | 参数 | 默认值 | 说明 |
28
+ | ----------------- | ------------------------ | ---------------------------------------------- |
29
+ | `--target` | `./src` | Vue 文件扫描根目录 |
30
+ | `--project` | `.` | 项目根目录(用于接入完整性检查) |
31
+ | `--output` | `markdown` | 输出格式:`markdown` \| `json` |
32
+ | `--exclude` | `node_modules,dist,.git` | 排除目录(逗号分隔) |
33
+ | `--outFile` | `""` | 写入文件路径,为空则输出到 stdout |
34
+ | `--fail-on-error` | `false` | 存在 error 级别问题时以非零退出码退出(CI 用) |
35
+
36
+ ## CI 集成
37
+
38
+ ```yaml
39
+ # .github/workflows/style-check.yml
40
+ - name: wk-skills-ui 风格检查
41
+ run: npx wk-ui all --project . --fail-on-error
42
+ ```
43
+
44
+ ## 报告格式说明
45
+
46
+ ```
47
+ 一、接入完整性仪表盘
48
+ ✅ I001 — tokens.css 已在 index.html 引入
49
+ ✅ I002 — 全局 SCSS 已引入 wk-skills-ui 样式
50
+ ✅ I003 — runtime 已被引用
51
+ ✅ I004 — peerDependencies 版本满足要求
52
+
53
+ 二、风格扫描摘要
54
+ 扫描文件数:43 总问题数:127
55
+
56
+ 三、按规则统计
57
+ | 规则 | 类别 | 严重级 | 问题数 |
58
+ ...
59
+
60
+ 四、问题明细(按严重级)
61
+ ### error
62
+ - src/views/check/list.vue:34 [R001] el-table-column 缺少 align="center"
63
+ ...
64
+ ```
65
+
66
+ ## 退出码
67
+
68
+ | 退出码 | 含义 |
69
+ | ------ | ------------------------------------------------ |
70
+ | `0` | 扫描完成(无论是否有问题,除非 --fail-on-error) |
71
+ | `1` | 存在 error 级别问题且设置了 --fail-on-error |
@@ -0,0 +1,16 @@
1
+ # USAGE — 扫描器 Skill
2
+
3
+ ## 调用方式
4
+
5
+ ```
6
+ 扫描一下这个项目的 UI 问题
7
+ 帮我检查接入是否完整
8
+ 生成一份扫描报告
9
+ ```
10
+
11
+ ## 一行命令
12
+
13
+ ```bash
14
+ # 一站式扫描并保存报告
15
+ npx wk-ui all --project . --outFile /tmp/wk-scan-$(date +%Y%m%d).md
16
+ ```
@@ -0,0 +1,88 @@
1
+ ---
2
+ description: |
3
+ 设计 Token 使用规范 Skill — 确保颜色、间距、字体全部通过 CSS 变量引用,
4
+ 不使用任何硬编码 hex 值。包含 Token 速查表、扫描规则 R016/R017/R018 详细说明。
5
+ applyTo: "**/*.{vue,scss,css}"
6
+ ---
7
+
8
+ # 设计 Token 使用规范
9
+
10
+ ## 核心原则
11
+
12
+ **任何 hex 颜色值在业务代码中都是禁止的**,必须使用 `--el-color-*` CSS 变量。
13
+
14
+ ---
15
+
16
+ ## Token 速查表
17
+
18
+ ### 品牌色
19
+
20
+ ```css
21
+ --el-color-primary /* #4368ff — 主色:按钮/链接/激活 */
22
+ --el-color-primary-light-9 /* #f0f3ff — 主色浅底:Tag背景 */
23
+ --el-color-success /* #0cc859 — 成功/正常/启用 */
24
+ --el-color-warning /* #ffaf27 — 警告/待处理 */
25
+ --el-color-danger /* #FB2323 — 危险/失败/停用 */
26
+ --el-color-info /* #909399 — 中性/辅助 */
27
+ ```
28
+
29
+ ### 文本色
30
+
31
+ ```css
32
+ --el-text-color-primary /* rgba(0,0,0,0.85) — 主要文本 */
33
+ --el-text-color-regular /* rgba(0,0,0,0.65) — 次要文本 */
34
+ --el-text-color-secondary /* rgba(0,0,0,0.45) — 辅助文本 */
35
+ ```
36
+
37
+ ### 边框/填充
38
+
39
+ ```css
40
+ --el-border-color /* #d9d9d9 */
41
+ --el-fill-color-lighter /* 表格 header 背景 */
42
+ ```
43
+
44
+ ---
45
+
46
+ ## 常见违规与修正
47
+
48
+ ```diff
49
+ /* R016: style 块 */
50
+ - color: #4368ff;
51
+ + color: var(--el-color-primary);
52
+
53
+ - background: #fb2323;
54
+ + background: var(--el-color-danger);
55
+
56
+ - border-color: #0cc859;
57
+ + border-color: var(--el-color-success);
58
+
59
+ /* R017: template 内联 style */
60
+ - <span :style="{ color: '#ffaf27' }">
61
+ + <span :style="{ color: 'var(--el-color-warning)' }">
62
+
63
+ /* R018: script 中 ECharts 等配置 */
64
+ - color: '#4368ff'
65
+ + color: 'var(--el-color-primary)' /* 或使用 CHART_COLORS.primary */
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 扫描与自动修复
71
+
72
+ ```bash
73
+ # 检测 hex 颜色违规
74
+ npx wk-ui scan --target src --outFile color-report.md
75
+
76
+ # 自动修复(仅修已知 Token 的 hex,不修 ECharts 等特殊场景)
77
+ npx wk-ui fix --target src
78
+ ```
79
+
80
+ ## 已覆盖的 hex 映射
81
+
82
+ | hex | → CSS Token |
83
+ | ----------------------------- | --------------------------------- |
84
+ | `#409eff` `#3a7afe` `#4368ff` | `var(--el-color-primary)` |
85
+ | `#fb2323` `#f56c6c` | `var(--el-color-danger)` |
86
+ | `#0cc859` `#67c23a` | `var(--el-color-success)` |
87
+ | `#ffaf27` `#e6a23c` | `var(--el-color-warning)` |
88
+ | `#ecf5ff` | `var(--el-color-primary-light-9)` |
@@ -0,0 +1,19 @@
1
+ # USAGE — 设计 Token Skill
2
+
3
+ ## 调用方式
4
+
5
+ ```
6
+ 帮我检查这个文件里有没有硬编码颜色
7
+ 把 src/views/ 下所有硬编码 hex 替换为 CSS Token
8
+ ```
9
+
10
+ ## 一行修复命令
11
+
12
+ ```bash
13
+ # 扫描
14
+ npx wk-ui scan --target src --output json | grep '"rule":"R01[678]"'
15
+
16
+ # 修复(会替换所有已知映射的 hex)
17
+ npx wk-ui fix --target src --dry-run # 先 dry-run 看效果
18
+ npx wk-ui fix --target src # 确认后执行
19
+ ```
@@ -0,0 +1,106 @@
1
+ ---
2
+ description: |
3
+ 历史项目 UI 全量迁移 Skill — 针对从旧版本(无 wk-skills-ui)升级到标准规范的完整改造流程。
4
+ 包含:依赖安装、tokens 接入、SCSS 替换、runtime 注册、columnsDef 迁移、全量扫描验证。
5
+ applyTo: "**"
6
+ ---
7
+
8
+ # 历史项目 UI 迁移 Skill
9
+
10
+ ## 适用场景
11
+
12
+ - 已有业务系统从零接入 wk-skills-ui
13
+ - 旧版 jh-ui 系统升级到新规范
14
+ - 统一多个历史项目到同一 UI 标准
15
+
16
+ ---
17
+
18
+ ## 迁移五步法
19
+
20
+ ### Step 1 — 安装依赖
21
+
22
+ ```bash
23
+ pnpm add @agile-team/wk-skills-ui
24
+ ```
25
+
26
+ ### Step 2 — 接入 CSS Tokens
27
+
28
+ 在 `index.html` `<head>` 最顶部追加(必须在所有样式之前):
29
+
30
+ ```html
31
+ <link
32
+ rel="stylesheet"
33
+ href="/node_modules/@agile-team/wk-skills-ui/design/tokens/base.css"
34
+ />
35
+ ```
36
+
37
+ ### Step 3 — 替换 SCSS 入口
38
+
39
+ 在全局 SCSS 入口(`src/assets/style/main.scss` 或 `src/styles/index.scss`)追加:
40
+
41
+ ```scss
42
+ @use "@agile-team/wk-skills-ui/styles" as *;
43
+ // 可选 portal 视觉增强:
44
+ // @use '@agile-team/wk-skills-ui/styles/portal';
45
+ ```
46
+
47
+ > 注意:如果项目有旧的 element-plus 覆盖样式,确认无冲突后可删除旧样式。
48
+
49
+ ### Step 4 — 注册运行时预设
50
+
51
+ 在 `src/main.ts` 中(`app.mount` 之前):
52
+
53
+ ```typescript
54
+ import { installCommonPreset } from "@agile-team/wk-skills-ui/runtime/common-preset";
55
+ installCommonPreset();
56
+ ```
57
+
58
+ 这会把所有通用业务字段(riskLevel / permitStatus / trainStatus 等)
59
+ 注册进 COLUMN_AUTO_MAP,之后使用 `defineColumns()` 包裹的列定义会自动渲染。
60
+
61
+ ### Step 5 — 迁移 columnsDef
62
+
63
+ 将所有 `defineColumns()` 调用从本地 `src/util/define-columns.ts` 改为 package:
64
+
65
+ ```typescript
66
+ // ❌ 旧写法
67
+ import { defineColumns } from "@/util/define-columns";
68
+ import { renderOps } from "@/util/ag-cell-renders";
69
+
70
+ // ✅ 新写法
71
+ import { defineColumns, renderOps } from "@agile-team/wk-skills-ui/runtime";
72
+ ```
73
+
74
+ 然后运行扫描:
75
+
76
+ ```bash
77
+ npx wk-ui all --project . --outFile migration-report.md
78
+ ```
79
+
80
+ 按报告逐步修复 R001~R018 违规项。
81
+
82
+ ---
83
+
84
+ ## 验收检查清单
85
+
86
+ ```bash
87
+ npx wk-ui check --project .
88
+ ```
89
+
90
+ 所有 I001~I004 必须全部通过:
91
+
92
+ - ✅ I001:`index.html` 中存在 `tokens.css` link 标签
93
+ - ✅ I002:全局 SCSS 中引入 wk-skills-ui 样式
94
+ - ✅ I003:`runtime` 已被引用(ag-cell-renders 或 package import)
95
+ - ✅ I004:peer dependencies 版本满足要求
96
+
97
+ ---
98
+
99
+ ## 常见迁移问题
100
+
101
+ | 问题 | 解决方案 |
102
+ | ----------------------------- | ------------------------------------------------- |
103
+ | 旧版 ag-cell-renders.ts 冲突 | 删除本地文件,全部改用 package import |
104
+ | SCSS `@use` vs `@import` 冲突 | 统一改为 `@use`,避免重复引入 |
105
+ | ElTagType 类型报错 | 确保 element-plus ≥ 2.2,不使用已废弃的 `""` type |
106
+ | defineColumns 自动映射未生效 | 确认 `installCommonPreset()` 在 `mount` 前调用 |
@@ -0,0 +1,34 @@
1
+ # USAGE — 历史项目迁移 Skill
2
+
3
+ ## 调用方式
4
+
5
+ ```
6
+ 帮我把这个旧项目接入 wk-skills-ui
7
+ 这个项目还没有用统一风格库,帮我按标准接入
8
+ ```
9
+
10
+ ## 快速迁移命令序列
11
+
12
+ ```bash
13
+ # 1. 安装
14
+ pnpm add @agile-team/wk-skills-ui
15
+
16
+ # 2. 接入完整性检查(看缺什么)
17
+ npx wk-ui check --project .
18
+
19
+ # 3. 按 check 输出逐步补齐 Step 2~5
20
+
21
+ # 4. 全量扫描
22
+ npx wk-ui all --project . --outFile report.md
23
+
24
+ # 5. 批量修复 A 类问题
25
+ npx wk-ui fix --target src
26
+ ```
27
+
28
+ ## 预计工作量参考
29
+
30
+ | 项目规模 | Vue 文件数 | 预计迁移时间 |
31
+ | ------------------ | ---------- | ------------ |
32
+ | 小型 | < 50 | 1~2 小时 |
33
+ | 中型 | 50~150 | 半天 |
34
+ | 大型(如 wl-safe) | > 150 | 1~2 天 |
@@ -0,0 +1,124 @@
1
+ ---
2
+ description: |
3
+ UI 风格对齐 Skill — 扫描业务系统 Vue SFC 文件,识别与 wk-skills-ui 标准不一致的写法,
4
+ 生成整改清单,经用户确认后执行自动修复,最终验证归零。
5
+ 覆盖:表格对齐/空状态、按钮图标化、表单控件尺寸、弹窗分页位置、颜色 Token。
6
+ applyTo: "**/*.vue"
7
+ ---
8
+
9
+ # UI 风格对齐 Skill
10
+
11
+ ## 一、工作流程(严格按顺序,不得跳过)
12
+
13
+ ### Phase 1 — 扫描(只读,不修改任何文件)
14
+
15
+ ```bash
16
+ # 推荐:一站式扫描(接入完整性 + 风格 + 报告)
17
+ npx wk-ui all --project [项目根目录] --outFile /tmp/scan-result.md
18
+
19
+ # 单独风格扫描
20
+ npx wk-ui scan --target [项目src目录] --outFile /tmp/scan-result.md
21
+
22
+ # 接入完整性检查
23
+ npx wk-ui check --project [项目根目录]
24
+ ```
25
+
26
+ 读取扫描输出,提取:
27
+
28
+ - 接入完整性 I001~I004 通过情况
29
+ - 总 issue 数、按规则分类统计(R001~R018)
30
+ - 每个 issue:文件路径 + 行号 + 规则 + 建议
31
+
32
+ ### Phase 2 — 汇报
33
+
34
+ 向用户展示摘要:
35
+
36
+ ```
37
+ 扫描结果摘要
38
+ - 扫描文件数:XX
39
+ - 发现问题数:XX(高危 X / 中危 X / 低危 X)
40
+
41
+ 高危(直接影响视觉一致性)
42
+ | 规则 | 说明 | 数量 | 代表文件 |
43
+ ...
44
+ ```
45
+
46
+ ### Phase 3 — 确认(强制门槛)
47
+
48
+ 询问用户:
49
+
50
+ 1. 是否全量修复?还是指定规则/文件?
51
+ 2. 无法自动修复的规则(R008/R009/R010/R013)是否手动处理?
52
+
53
+ **未经用户确认,禁止修改任何文件。**
54
+
55
+ ### Phase 4 — 修复
56
+
57
+ 按确认范围执行:
58
+
59
+ - **A 类(attr 缺失 / hex 颜色)** → `npx wk-ui fix --target [src] [--dry-run]`
60
+ - **B 类(结构改造,R004/R013/R015)** → AI 逐文件编辑
61
+
62
+ 每修复一个文件,输出该文件修改摘要。
63
+
64
+ ### Phase 5 — 验证
65
+
66
+ 重新执行 Phase 1 扫描,验证 issue 数量归零或达到预期水平。
67
+
68
+ ---
69
+
70
+ ## 二、规则速查(R001—R018)
71
+
72
+ ### 表格类 → 详见 [skills/components/table/SKILL.md](../../components/table/SKILL.md)
73
+
74
+ - **R001**【高危】el-table-column 缺少 `align="center"`
75
+ - **R002**【中危】el-table 缺少 `empty-text="暂无数据"`
76
+ - **R003**【中危】BaseTable 缺少 `empty-text="暂无数据"`
77
+ - **R014**【中危】selection 列缺少 `header-align="center"`
78
+
79
+ ### 按钮类 → 详见 [skills/components/table/SKILL.md](../../components/dialog/SKILL.md)
80
+
81
+ - **R004**【高危】操作列使用文字按钮(应改为 renderOps 图标系统)
82
+ - **R005**【中危】工具栏按钮缺少 icon
83
+ - **R015**【高危】弹窗嵌套表格操作列使用 el-button link
84
+
85
+ ### 表单类 → 详见 [skills/components/form/SKILL.md](../../components/form/SKILL.md)
86
+
87
+ - **R006**【中危】el-input / el-select 缺少 `size="small"`
88
+ - **R007**【中危】el-date-picker 缺少 `style="width:100%"`
89
+ - **R008**【低危】el-form labelWidth < 150px
90
+
91
+ ### 弹窗类 → 详见 [skills/components/dialog/SKILL.md](../../components/dialog/SKILL.md)
92
+
93
+ - **R011**【高危】弹窗内分页器未放在 `<template #footer>` 中
94
+
95
+ ### 颜色类
96
+
97
+ - **R016**【中危】`<style>` 块存在硬编码 hex 颜色
98
+ - **R017**【中危】`<template>` 块存在硬编码 hex 颜色
99
+ - **R018**【中危】`<script>` 块存在硬编码 hex 颜色
100
+
101
+ ### 状态标签类 → 详见 [skills/components/tag-status/SKILL.md](../../components/tag-status/SKILL.md)
102
+
103
+ - **R009**【高危】状态字段纯文本渲染(需人工确认)
104
+ - **R010**【中危】分类字段使用填充色 Tag(需人工确认)
105
+
106
+ ---
107
+
108
+ ## 三、无法自动修复的规则
109
+
110
+ | 规则 | 原因 | AI 职责 |
111
+ | ---------------------------- | -------------------------------------------- | ---------------------------------- |
112
+ | R008 labelWidth | 可能有特殊布局需求 | 标注疑似问题 + 给建议 + 等用户确认 |
113
+ | R009 状态字段纯文本 | 需识别业务语义 | 同上 |
114
+ | R010 分类 vs 状态判断 | 需结合字段业务含义 | 同上 |
115
+ | R013(含 Upload 等特殊操作) | Upload 嵌入 operations[] 需抽离到 toolbarDef | 同上 |
116
+
117
+ ---
118
+
119
+ ## 四、执行约束
120
+
121
+ 1. Phase 3 用户确认是强制门槛,未确认不得修改文件
122
+ 2. 每次只修改一类规则,修改后立即验证该类归零再继续
123
+ 3. 不修改路径:`node_modules/`、`dist/`、`*.min.js`、用户标注为"已手动调整"的文件
124
+ 4. 脚本幂等:已符合标准的不会被二次修改
@@ -0,0 +1,52 @@
1
+ # USAGE — UI 风格对齐 Skill
2
+
3
+ ## 调用方式
4
+
5
+ 在 AI 对话中,触发本 Skill 的典型问法:
6
+
7
+ ```
8
+ 帮我检查一下这个项目的 UI 风格是否符合规范
9
+ 扫描 src/ 目录,找出所有不符合 wk-skills-ui 标准的地方
10
+ 对 src/views/safety/ 下的文件做风格对齐修复
11
+ ```
12
+
13
+ ## 完整执行流程(示例)
14
+
15
+ ```
16
+ 用户:帮我对 src/views/check/ 目录做完整的风格扫描修复
17
+
18
+ AI 执行:
19
+ 1. [Phase 1] npx wk-ui all --project . --outFile /tmp/scan.md
20
+ 2. [Phase 2] 展示摘要(文件数、问题数、按规则分类)
21
+ 3. [Phase 3] 询问:是否全量修复?哪些文件需要跳过?
22
+ 4. [Phase 4] 执行修复(A 类 → wk-ui fix;B 类 → 逐文件编辑)
23
+ 5. [Phase 5] 重新扫描,展示 before/after 对比
24
+ ```
25
+
26
+ ## 期望输出格式
27
+
28
+ ```markdown
29
+ ## 扫描结果(Phase 2)
30
+
31
+ - 扫描文件数:43
32
+ - 发现问题数:127(高危 38 / 中危 64 / 低危 25)
33
+
34
+ | 规则 | 类型 | 数量 | 代表文件 |
35
+ | R001 | 高危 | 23 | src/views/check/list.vue:34 |
36
+ ...
37
+
38
+ ## 修复摘要(Phase 4)
39
+
40
+ - src/views/check/list.vue:R001×3, R006×2, R016×1
41
+ ...
42
+
43
+ ## 验证结果(Phase 5)
44
+
45
+ - 剩余问题:12(仅含需人工确认的 R009/R013)✅
46
+ ```
47
+
48
+ ## 相关 Skills
49
+
50
+ - 首次接入新项目 → [core/migration/SKILL.md](../migration/SKILL.md)
51
+ - 仅修复颜色 Token → [core/design-tokens/SKILL.md](../design-tokens/SKILL.md)
52
+ - 仅修复表格问题 → [components/table/SKILL.md](../../components/table/SKILL.md)
@@ -0,0 +1,94 @@
1
+ ---
2
+ description: |
3
+ AG Grid 列渲染规范 Skill — 使用 defineColumns + renderOps + renderTagNode 等运行时函数
4
+ 实现 AG Grid 表格列的自动化配置、状态彩色 Tag、操作列图标按钮。
5
+ applyTo: "**/*.{ts,vue}"
6
+ ---
7
+
8
+ # AG Grid 列渲染规范
9
+
10
+ ## 核心原则
11
+
12
+ 1. 所有列定义用 `defineColumns()` 包裹 — 自动应用已注册字段映射
13
+ 2. 操作列统一用 `renderOps([...])` — 图标按钮系统,自动分隔线 + stopPropagation
14
+ 3. 状态字段用 `renderTagNode()` / `renderClassifyTag()` — 彩色 Tag,见 tag-status/SKILL.md
15
+
16
+ > 与 `wl-skills-kit` 协同说明:本 Skill 负责 AG Grid/列渲染/操作列 runtime 能力,也要服务非 kit 项目的通用 AG Grid 场景。若扫描发现项目希望升级为团队最佳实践,再提示使用 `wl-skills-kit` 进行页面结构和工作流规范化;在此之前,`wk-skills-ui` 仍应保证样式和渲染能力可独立生效。
17
+
18
+ ---
19
+
20
+ ## 标准列定义写法
21
+
22
+ ```typescript
23
+ import { defineColumns, renderOps, renderTagNode, renderBadge } from '@agile-team/wk-skills-ui/runtime';
24
+
25
+ columnsDef(): TableColumnDesc<any>[] {
26
+ return defineColumns([
27
+ // ── 序号/选择列 ──
28
+ { type: 'index', label: '序号', width: 60, align: 'center' },
29
+ { type: 'selection', label: '', width: 55, align: 'center', headerAlign: 'center', fixed: 'left' },
30
+
31
+ // ── 普通数据列 ──
32
+ { name: 'riskNo', label: '风险编号', width: 100 }, // renderBadge 已自动映射
33
+ { name: 'riskLevel', label: '风险分级', width: 90 }, // renderRiskLevel 已自动映射
34
+
35
+ // ── 自定义渲染列 ──
36
+ { name: 'status', label: '状态', width: 90,
37
+ defaultNode: ({ row }) => renderTagNode(row.status, MY_STATUS_MAP) },
38
+
39
+ // ── 操作列 ──
40
+ { label: '操作', width: 120, fixed: 'right',
41
+ defaultSlot: ({ row }) => renderOps([
42
+ { type: 'view', onClick: () => modal.view(row.id) },
43
+ { type: 'edit', show: !isReadonly.value, onClick: () => modal.edit(row.id) },
44
+ { type: 'del', show: !isReadonly.value, onClick: () => handleDel(row.id) },
45
+ ])
46
+ },
47
+ ]);
48
+ }
49
+ ```
50
+
51
+ ---
52
+
53
+ ## renderOps 操作类型
54
+
55
+ | type | 图标 | CSS 类 | 默认 title |
56
+ | ------ | ----------- | ------------ | ---------- |
57
+ | `view` | View | `jh-op-view` | 查看 |
58
+ | `edit` | Edit | `jh-op-edit` | 编辑 |
59
+ | `del` | Delete | `jh-op-del` | 删除 |
60
+ | `log` | Document | `jh-op-log` | 记录 |
61
+ | `ok` | CircleCheck | `jh-op-ok` | 审核 |
62
+ | `send` | Upload | `jh-op-send` | 提交 |
63
+
64
+ ---
65
+
66
+ ## COLUMN_AUTO_MAP 已注册字段
67
+
68
+ 使用 `defineColumns()` 包裹后,以下字段**无需手写 defaultNode**,自动渲染:
69
+
70
+ | 字段名 | 渲染效果 | 需调用 |
71
+ | -------------------- | -------------- | ---------------------------- |
72
+ | `enableStatus` | 启用/停用 Tag | `installCommonPreset()` 后自动 |
73
+ | `riskLevel` | 风险分级 Tag | `installCommonPreset()` 后自动 |
74
+ | `permitStatus` | 作业票状态 Tag | 同上 |
75
+ | `trainStatus` | 培训状态 Tag | 同上 |
76
+ | `credentialStatus` | 证书状态 Tag | 同上 |
77
+ | `riskNo` / `checkNo` | 蓝色编号徽标 | 同上 |
78
+ | `ratingLevel` | 彩色评级徽标 | 同上 |
79
+
80
+ 完整列表见 `runtime/core/registry.ts` + `runtime/presets/common.ts`。
81
+
82
+ ---
83
+
84
+ ## 条件显示操作按钮
85
+
86
+ ```typescript
87
+ renderOps([
88
+ { type: 'edit', show: canEdit.value, onClick: ... }, // 响应式
89
+ { type: 'del', show: row.status !== '3', onClick: ... }, // 行级条件
90
+ { type: 'ok', show: () => row.status === '2', onClick: ... }, // 函数形式
91
+ ])
92
+ ```
93
+
94
+ > `show: false` 时按钮不渲染(不占位)。`show` 支持 `boolean | Ref<boolean> | () => boolean`。
@@ -0,0 +1,57 @@
1
+ ---
2
+ description: |
3
+ BaseTable / <base-table> 系列封装组件的识别、诊断和修复规则。
4
+ Base 前缀是团队约定的最高优先级封装组件,所有 Base* 表格的视觉一致性由本 skill 保障。
5
+ applyTo: "**/*.vue"
6
+ ---
7
+
8
+ # Skill: vendors/base-table
9
+
10
+ > Layer L2 · Vendor priority **#1**(Base > jh > C_/c_ > custom)
11
+
12
+ ## Detect(识别)
13
+
14
+ 满足以下任一条件即视为 Base 系列封装表格组件:
15
+
16
+ | 维度 | 模式 |
17
+ |---|---|
18
+ | 标签名 | `<BaseTable>` / `<base-table>` / `<BaseDataTable>` / `<BaseList>` |
19
+ | Import | `from '@/components/Base*'` / `from '@/components/base-*'` |
20
+ | 类名 | `.base-table-wrapper` / `.base-table-container` / `[class^='base-table-']` |
21
+ | Props | 通常包含 `columns` / `data` / `hook` / `renderType` |
22
+
23
+ ## Diagnose(判定)
24
+
25
+ 底层基于 Element Plus `el-table`,所有 R001-R003、R014 规则同样生效,但需注意:
26
+
27
+ - ❌ 直接给 `<BaseTable>` 加内联 hex 颜色(应通过 token 或全局类名)
28
+ - ❌ 用 `<el-button type="primary">` 当操作按钮(应用 `is-text` 文字按钮,沿用 R004)
29
+ - ❌ 列头未居中(同 R001)
30
+ - ❌ 缺 `empty-text="暂无数据"`(同 R003)
31
+ - ❌ 在 `<BaseTable>` 外层包裹自定义 padding 容器,破坏整体节奏
32
+
33
+ ## Repair(修复)
34
+
35
+ ### A 类(自动修)
36
+ - 缺失 `empty-text` → 补 `empty-text="暂无数据"`
37
+ - 操作列按钮 `type="primary"` → 改为 `link` + `is-text`
38
+ - 内联 hex → CSS 变量
39
+
40
+ ### B 类(建议人工确认)
41
+ - 替换为 `defineColumns(...)` 渲染(迁移到 L4 runtime,业务代码大幅精简)
42
+
43
+ ## 与 wl-skills-kit 的协同闭环
44
+
45
+ 本 Skill 必须保留对多种 BaseTable/封装表格写法的识别和样式覆盖能力,不要求老项目先改成 `wl-skills-kit` 最佳实践。扫描时先判断当前写法能否通过化妆层统一视觉;若用户希望进一步规范化业务代码,再提示可使用 `wl-skills-kit` 按团队模板重构为 `BaseTable render-type="agGrid" + cid + defineColumns/renderOps`。也就是说:`wk-skills-ui` 负责先统一样式,`wl-skills-kit` 负责可选的规范化生成/修复。
46
+
47
+ ## 全局样式来源
48
+
49
+ `styles/vendors/_base-table.scss` — 已注入容器圆角、表头颜色、操作按钮间距。
50
+ 项目侧无需重复写样式,遵循 DOM 约定即可。
51
+
52
+ ## 未来源码迁移
53
+
54
+ 当 BaseTable 源码可用:
55
+ 1. 把 `_base-table.scss` 内容平迁到 `BaseTable.vue` 的 `<style scoped>`
56
+ 2. 在 `runtime/presets/` 新增 `base-table.ts` 提供原生 API
57
+ 3. 业务代码升级为 `<BaseTable :columns="defineColumns(...)" />`