@agile-team/wl-skills-kit 2.7.2 → 2.8.0
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/CHANGELOG.md +37 -0
- package/README.md +40 -12
- package/bin/wl-skills.js +147 -3
- package/files/.github/copilot-instructions.md +18 -0
- package/files/.github/guides/architecture.md +6 -4
- package/files/.github/skills/_best-practices.md +230 -220
- package/files/.github/skills/core/page-codegen/SKILL.md +5 -5
- package/files/.github/skills/sync/_mcp-guardrail.md +109 -109
- package/files/.github/skills/sync/dict-sync/SKILL.md +208 -208
- package/files/.github/skills/sync/permission-sync/SKILL.md +240 -275
- package/files/docs/mock-architecture.md +321 -0
- package/files/mock/_utils.ts +35 -0
- package/mcp/api/client.js +83 -83
- package/mcp/tools/dictSync.js +178 -173
- package/mcp/tools/menuSync.js +11 -0
- package/package.json +2 -2
|
@@ -1,220 +1,230 @@
|
|
|
1
|
-
# 最佳实践索引(Best Practices Playbook)
|
|
2
|
-
|
|
3
|
-
> **本文件是 AI 与团队成员共享的"按场景查手册"**。
|
|
4
|
-
>
|
|
5
|
-
> - 对 AI:**每次进入项目对话时默认读取一次**,用于把用户的自然表达精准映射到推荐流程,减少"靠关键词猜触发"
|
|
6
|
-
> - 对人:当成 Runbook 用,按场景找最佳实践、触发话术、避坑要点
|
|
7
|
-
>
|
|
8
|
-
> 维护策略:场景由实战沉淀,每次踩坑都回写到对应条目;新增 Skill / MCP 工具必须在此登记典型用法。
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## 0. 通用前置规则(任一场景共用)
|
|
13
|
-
|
|
14
|
-
| # | 规则 |
|
|
15
|
-
|---|---|
|
|
16
|
-
| 1 | 用户的"自然表达"优先于"关键词命中"。先理解意图再决定是否触发 Skill |
|
|
17
|
-
| 2 | 涉及 **sync 类**(菜单/字典/权限)操作时,**必读** `skills/sync/_mcp-guardrail.md`,调用失败不绕开 MCP,按 guardrail §2 自愈剧本引导用户 |
|
|
18
|
-
| 3 | 每个场景都允许「单步执行」或「流水线执行」两种方式,由用户决定 |
|
|
19
|
-
| 4 | 写文件 / 调写接口 / 修改代码前,输出 Pre-flight 声明并等待用户确认 |
|
|
20
|
-
| 5 | 报告类产物统一写入 `.github/reports/`,**追加不覆盖** |
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 1. 场景:新建模块完整闭环(最常用)
|
|
25
|
-
|
|
26
|
-
> 从原型/详设 → 页面 → 菜单注册 → 字典/权限补齐 → 审计通过
|
|
27
|
-
|
|
28
|
-
**用户典型话术**:
|
|
29
|
-
- "帮我做一个新模块"
|
|
30
|
-
- "根据原型/详设生成 XX 模块"
|
|
31
|
-
- "我要新建客户管理模块"
|
|
32
|
-
|
|
33
|
-
**推荐流程**:
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
prototype-scan
|
|
37
|
-
→ business-doc-extract(资料完整时)
|
|
38
|
-
→ api-contract
|
|
39
|
-
→ page-codegen ← 产物:src/views/.../{index.vue,data.ts,api.md,SYS_MENU_INFO.md}
|
|
40
|
-
→ menu-sync ← 推荐工具:wls_menu_sync_from_report
|
|
41
|
-
→ dict-sync(页面用到字典时)
|
|
42
|
-
→ permission-sync(需角色授权 / 动作按钮时)
|
|
43
|
-
→ convention-audit
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
**关键检查点**:
|
|
47
|
-
- pages.ts 是否注册了新页面(否则路由不存在)
|
|
48
|
-
- `.github/reports/SYS_MENU_INFO.md` 是否包含本次新增页面
|
|
49
|
-
- 同步菜单后端 4004 / 401 → 走 guardrail 引导用户改 env.local.json
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## 2. 场景:补菜单 / 注册菜单
|
|
54
|
-
|
|
55
|
-
**用户典型话术**:
|
|
56
|
-
- "帮我创建菜单"
|
|
57
|
-
- "同步菜单"
|
|
58
|
-
- "页面写完了点不进去"
|
|
59
|
-
- "补菜单"
|
|
60
|
-
|
|
61
|
-
**推荐流程**(默认一步到位):
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
wls_menu_sync_from_report ← MCP 工具,自动读报告 + 查菜单树 + 一二级有序创建
|
|
65
|
-
└─ 首次先传 dryRun: true 预览,确认无误再正式执行
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**前置**:
|
|
69
|
-
- `.github/reports/SYS_MENU_INFO.md` 已生成(由 page-codegen 产出,或手工维护)
|
|
70
|
-
- `env.local.json` 配齐:gatewayPath / token(纯 JWT)/ sysAppNo / menu.parentMenuId / menu.domainId
|
|
71
|
-
|
|
72
|
-
**典型故障 → 处理**:
|
|
73
|
-
- 工具列表里没有 `wls_menu_sync_from_report` → guardrail §2.2
|
|
74
|
-
- 报错"请填写真实的 domainId" → guardrail §2.3
|
|
75
|
-
- 返回 401 → guardrail §2.4
|
|
76
|
-
- 返回 4004(路径不存在)→ guardrail §2.5
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 3. 场景:补字典 / 同步字典
|
|
81
|
-
|
|
82
|
-
**用户典型话术**:
|
|
83
|
-
- "同步字典"
|
|
84
|
-
- "data.ts 里 logicValue 缺字典"
|
|
85
|
-
- "字典对比 / 字典审计"
|
|
86
|
-
|
|
87
|
-
**推荐流程**:
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
1. 用 wls_dict_query 查线上已有
|
|
91
|
-
2. 扫 data.ts 收集所有 logicValue(DICT_CODE)
|
|
92
|
-
3. 差集 = 待新建 → 用户确认
|
|
93
|
-
4. 逐个调 wls_dict_upsert(含 module + items)
|
|
94
|
-
5. 更新 .github/reports/SYS_DICT_INFO.md
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
**配置依赖**:env.local.json → `dict.moduleId`
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## 4. 场景:角色授权 / 加动作按钮
|
|
102
|
-
|
|
103
|
-
**用户典型话术**:
|
|
104
|
-
- "给 XX 角色分配菜单"
|
|
105
|
-
- "给页面挂动作按钮"
|
|
106
|
-
- "注册权限码"
|
|
107
|
-
|
|
108
|
-
**推荐流程**:
|
|
109
|
-
|
|
110
|
-
| 子场景 | MCP 工具序列 |
|
|
111
|
-
|---|---|
|
|
112
|
-
| 创建角色 | `wls_role_query`(查重)→ `wls_role_upsert` |
|
|
113
|
-
| 角色授权 | `wls_role_query` → `wls_assignable_menus_query` → `wls_role_assign_menus`(⚠️ **全量覆盖**,AI 需自动合并旧 menuIds + 新增)|
|
|
114
|
-
| 挂动作 | `wls_menu_query` 找页面 id → `wls_action_query` 查重 → `wls_action_upsert` 批量新增 → 修改 `data.ts` 给按钮加 `permission: [xxx]` 字段 |
|
|
115
|
-
|
|
116
|
-
**避坑**:
|
|
117
|
-
- 角色分配是**全量覆盖**,传 `[A,B]` 会把原有 C 移除,必须先查再合并
|
|
118
|
-
- 权限码命名遵循项目既有风格(`资源_动作` 或 `模块:资源:动作`)
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## 5. 场景:存量项目体检 / 接手新项目
|
|
123
|
-
|
|
124
|
-
**用户典型话术**:
|
|
125
|
-
- "接手新项目"
|
|
126
|
-
- "项目体检"
|
|
127
|
-
- "规范审计"
|
|
128
|
-
|
|
129
|
-
**推荐流程**:
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
wls_code_scan ← 概览:页面目录、API_CONFIG、文件完整性
|
|
133
|
-
→ convention-audit ← 13 条规范全量扫描,产出 AUDIT_*.md
|
|
134
|
-
→ code-fix(可选) ← 自动修复可整改项
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 6. 场景:仅 mock 跑通 / 后端没好先能跑
|
|
140
|
-
|
|
141
|
-
**用户典型话术**:"先 mock 一下"、"假数据"、"后端没好先能跑"
|
|
142
|
-
|
|
143
|
-
**推荐**:`page-codegen` 的 mock-first
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
|
191
|
-
|
|
192
|
-
|
|
|
193
|
-
|
|
|
194
|
-
|
|
|
195
|
-
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
1
|
+
# 最佳实践索引(Best Practices Playbook)
|
|
2
|
+
|
|
3
|
+
> **本文件是 AI 与团队成员共享的"按场景查手册"**。
|
|
4
|
+
>
|
|
5
|
+
> - 对 AI:**每次进入项目对话时默认读取一次**,用于把用户的自然表达精准映射到推荐流程,减少"靠关键词猜触发"
|
|
6
|
+
> - 对人:当成 Runbook 用,按场景找最佳实践、触发话术、避坑要点
|
|
7
|
+
>
|
|
8
|
+
> 维护策略:场景由实战沉淀,每次踩坑都回写到对应条目;新增 Skill / MCP 工具必须在此登记典型用法。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 0. 通用前置规则(任一场景共用)
|
|
13
|
+
|
|
14
|
+
| # | 规则 |
|
|
15
|
+
|---|---|
|
|
16
|
+
| 1 | 用户的"自然表达"优先于"关键词命中"。先理解意图再决定是否触发 Skill |
|
|
17
|
+
| 2 | 涉及 **sync 类**(菜单/字典/权限)操作时,**必读** `skills/sync/_mcp-guardrail.md`,调用失败不绕开 MCP,按 guardrail §2 自愈剧本引导用户 |
|
|
18
|
+
| 3 | 每个场景都允许「单步执行」或「流水线执行」两种方式,由用户决定 |
|
|
19
|
+
| 4 | 写文件 / 调写接口 / 修改代码前,输出 Pre-flight 声明并等待用户确认 |
|
|
20
|
+
| 5 | 报告类产物统一写入 `.github/reports/`,**追加不覆盖** |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. 场景:新建模块完整闭环(最常用)
|
|
25
|
+
|
|
26
|
+
> 从原型/详设 → 页面 → 菜单注册 → 字典/权限补齐 → 审计通过
|
|
27
|
+
|
|
28
|
+
**用户典型话术**:
|
|
29
|
+
- "帮我做一个新模块"
|
|
30
|
+
- "根据原型/详设生成 XX 模块"
|
|
31
|
+
- "我要新建客户管理模块"
|
|
32
|
+
|
|
33
|
+
**推荐流程**:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
prototype-scan
|
|
37
|
+
→ business-doc-extract(资料完整时)
|
|
38
|
+
→ api-contract
|
|
39
|
+
→ page-codegen ← 产物:src/views/.../{index.vue,data.ts,api.md,SYS_MENU_INFO.md}
|
|
40
|
+
→ menu-sync ← 推荐工具:wls_menu_sync_from_report
|
|
41
|
+
→ dict-sync(页面用到字典时)
|
|
42
|
+
→ permission-sync(需角色授权 / 动作按钮时)
|
|
43
|
+
→ convention-audit
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**关键检查点**:
|
|
47
|
+
- pages.ts 是否注册了新页面(否则路由不存在)
|
|
48
|
+
- `.github/reports/SYS_MENU_INFO.md` 是否包含本次新增页面
|
|
49
|
+
- 同步菜单后端 4004 / 401 → 走 guardrail 引导用户改 env.local.json
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 2. 场景:补菜单 / 注册菜单
|
|
54
|
+
|
|
55
|
+
**用户典型话术**:
|
|
56
|
+
- "帮我创建菜单"
|
|
57
|
+
- "同步菜单"
|
|
58
|
+
- "页面写完了点不进去"
|
|
59
|
+
- "补菜单"
|
|
60
|
+
|
|
61
|
+
**推荐流程**(默认一步到位):
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
wls_menu_sync_from_report ← MCP 工具,自动读报告 + 查菜单树 + 一二级有序创建
|
|
65
|
+
└─ 首次先传 dryRun: true 预览,确认无误再正式执行
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**前置**:
|
|
69
|
+
- `.github/reports/SYS_MENU_INFO.md` 已生成(由 page-codegen 产出,或手工维护)
|
|
70
|
+
- `env.local.json` 配齐:gatewayPath / token(纯 JWT)/ sysAppNo / menu.parentMenuId / menu.domainId
|
|
71
|
+
|
|
72
|
+
**典型故障 → 处理**:
|
|
73
|
+
- 工具列表里没有 `wls_menu_sync_from_report` → guardrail §2.2
|
|
74
|
+
- 报错"请填写真实的 domainId" → guardrail §2.3
|
|
75
|
+
- 返回 401 → guardrail §2.4
|
|
76
|
+
- 返回 4004(路径不存在)→ guardrail §2.5
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 3. 场景:补字典 / 同步字典
|
|
81
|
+
|
|
82
|
+
**用户典型话术**:
|
|
83
|
+
- "同步字典"
|
|
84
|
+
- "data.ts 里 logicValue 缺字典"
|
|
85
|
+
- "字典对比 / 字典审计"
|
|
86
|
+
|
|
87
|
+
**推荐流程**:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
1. 用 wls_dict_query 查线上已有
|
|
91
|
+
2. 扫 data.ts 收集所有 logicValue(DICT_CODE)
|
|
92
|
+
3. 差集 = 待新建 → 用户确认
|
|
93
|
+
4. 逐个调 wls_dict_upsert(含 module + items)
|
|
94
|
+
5. 更新 .github/reports/SYS_DICT_INFO.md
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**配置依赖**:env.local.json → `dict.moduleId`
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 4. 场景:角色授权 / 加动作按钮
|
|
102
|
+
|
|
103
|
+
**用户典型话术**:
|
|
104
|
+
- "给 XX 角色分配菜单"
|
|
105
|
+
- "给页面挂动作按钮"
|
|
106
|
+
- "注册权限码"
|
|
107
|
+
|
|
108
|
+
**推荐流程**:
|
|
109
|
+
|
|
110
|
+
| 子场景 | MCP 工具序列 |
|
|
111
|
+
|---|---|
|
|
112
|
+
| 创建角色 | `wls_role_query`(查重)→ `wls_role_upsert` |
|
|
113
|
+
| 角色授权 | `wls_role_query` → `wls_assignable_menus_query` → `wls_role_assign_menus`(⚠️ **全量覆盖**,AI 需自动合并旧 menuIds + 新增)|
|
|
114
|
+
| 挂动作 | `wls_menu_query` 找页面 id → `wls_action_query` 查重 → `wls_action_upsert` 批量新增 → 修改 `data.ts` 给按钮加 `permission: [xxx]` 字段 |
|
|
115
|
+
|
|
116
|
+
**避坑**:
|
|
117
|
+
- 角色分配是**全量覆盖**,传 `[A,B]` 会把原有 C 移除,必须先查再合并
|
|
118
|
+
- 权限码命名遵循项目既有风格(`资源_动作` 或 `模块:资源:动作`)
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 5. 场景:存量项目体检 / 接手新项目
|
|
123
|
+
|
|
124
|
+
**用户典型话术**:
|
|
125
|
+
- "接手新项目"
|
|
126
|
+
- "项目体检"
|
|
127
|
+
- "规范审计"
|
|
128
|
+
|
|
129
|
+
**推荐流程**:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
wls_code_scan ← 概览:页面目录、API_CONFIG、文件完整性
|
|
133
|
+
→ convention-audit ← 13 条规范全量扫描,产出 AUDIT_*.md
|
|
134
|
+
→ code-fix(可选) ← 自动修复可整改项
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 6. 场景:仅 mock 跑通 / 后端没好先能跑
|
|
140
|
+
|
|
141
|
+
**用户典型话术**:"先 mock 一下"、"假数据"、"后端没好先能跑"
|
|
142
|
+
|
|
143
|
+
**推荐**:`page-codegen` 的 mock-first 规则。Mock 架构详见 `docs/mock-architecture.md`。
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
mock/
|
|
147
|
+
├── _utils.ts ← 共享工具(kit init 自动写入)
|
|
148
|
+
└── [业务域]/[模块].ts ← 按 src/views 第一级域分目录
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
- 生成页面自动生成 `mock/[业务域]/[模块].ts`,import `../_utils` 共享工具
|
|
152
|
+
- 开关:`.env.dev` 中 `ENV_MOCK=true/false`,零污染切换
|
|
153
|
+
- 清理:`wl-skills mock-clean --domain [域]` 按域清理,`--all` 全量清理(保留 `_utils.ts`)
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 7. 场景:模板沉淀
|
|
158
|
+
|
|
159
|
+
**用户典型话术**:"这页面成熟了,沉淀成模板"
|
|
160
|
+
|
|
161
|
+
**推荐**:`template-extract` Skill → 产出 `templates/domains/**/TPL-*.md` → 下次 `page-codegen` 复用。
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 8. 场景:业务文档/字段字典维护
|
|
166
|
+
|
|
167
|
+
**用户典型话术**:用户提供完整原型/详设/字段或字典资料,意图为业务沉淀
|
|
168
|
+
|
|
169
|
+
**推荐**:`business-doc-extract`(**语义级触发**,碎片需求默认跳过)
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 9. 场景:Git 提交 / 分支管理
|
|
174
|
+
|
|
175
|
+
**用户典型话术**:"提交"、"发布"、"打 tag"
|
|
176
|
+
|
|
177
|
+
**推荐**:遵循 `standards/08-*.md` Git 规范,使用 `pnpm cz` / `pnpm release:*` 命令。
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 10. 索引:Skill / MCP 工具速查
|
|
182
|
+
|
|
183
|
+
### Skills(详见 `_registry.md`)
|
|
184
|
+
|
|
185
|
+
| Skill | 一句话 |
|
|
186
|
+
|---|---|
|
|
187
|
+
| prototype-scan | 原型/详设 → 页面清单 |
|
|
188
|
+
| business-doc-extract | 模块级资料 → 业务文档沉淀 |
|
|
189
|
+
| api-contract | 生成 `api.md` 接口约定 |
|
|
190
|
+
| page-codegen | 生成 Vue 页面三件套 + api.md + SYS_MENU_INFO.md |
|
|
191
|
+
| convention-audit | 13 条规范审计 |
|
|
192
|
+
| code-fix | 按审计报告自动修复 |
|
|
193
|
+
| menu-sync | 后端菜单同步(MCP)|
|
|
194
|
+
| dict-sync | 后端字典同步(MCP)|
|
|
195
|
+
| permission-sync | 角色 / 授权 / 动作(MCP)|
|
|
196
|
+
| template-extract | 成熟页面沉淀为模板 |
|
|
197
|
+
|
|
198
|
+
### MCP 工具(详见 `mcp/registry.js`)
|
|
199
|
+
|
|
200
|
+
| 工具 | 用途 |
|
|
201
|
+
|---|---|
|
|
202
|
+
| `wls_menu_query` / `wls_menu_upsert` / `wls_menu_sync_from_report` | 菜单 |
|
|
203
|
+
| `wls_dict_query` / `wls_dict_upsert` | 字典 |
|
|
204
|
+
| `wls_role_query` / `wls_role_upsert` / `wls_assignable_menus_query` / `wls_role_assign_menus` / `wls_action_query` / `wls_action_upsert` | 角色 / 授权 / 动作 |
|
|
205
|
+
| `wls_code_scan` / `wls_validate_page` / `wls_doctor_ui` / `wls_route_check` / `wls_git_log_extract` / `wls_audit_report_push` | 辅助 |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 11. 如何扩展本文件
|
|
210
|
+
|
|
211
|
+
新增场景请按此模板:
|
|
212
|
+
|
|
213
|
+
```markdown
|
|
214
|
+
## N. 场景:{一句话描述}
|
|
215
|
+
|
|
216
|
+
**用户典型话术**:
|
|
217
|
+
- "..."
|
|
218
|
+
|
|
219
|
+
**推荐流程**:
|
|
220
|
+
- 用什么 Skill / MCP 工具
|
|
221
|
+
- 关键顺序
|
|
222
|
+
- 配置依赖
|
|
223
|
+
|
|
224
|
+
**避坑**:
|
|
225
|
+
- ...
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
> ✅ AI 在每轮对话开始时(首次进入项目或长时间未刷新上下文时),优先 `read_file` 加载本文件 + `_registry.md` + `_pipeline.md`,三者联合作为路由依据。
|
|
@@ -92,7 +92,7 @@ src/views/[域]/[模块]/[子模块]/[kebab-case-目录名]/
|
|
|
92
92
|
|
|
93
93
|
- `pages.ts` 注册片段
|
|
94
94
|
- **`reports/SYS_MENU_INFO.md`** — 集中式菜单配置,**追加写入**(见下方 §SYS_MENU_INFO 生成规则)
|
|
95
|
-
- `mock/[
|
|
95
|
+
- `mock/[业务域]/[模块].ts`(项目根目录 `mock/` 下按域分目录,`vite-plugin-mock` 自动加载,与 api.md 的 URL 和字段完全一致;详见 `docs/mock-architecture.md`)
|
|
96
96
|
|
|
97
97
|
---
|
|
98
98
|
|
|
@@ -108,7 +108,7 @@ src/views/[域]/[模块]/[子模块]/[kebab-case-目录名]/
|
|
|
108
108
|
6. 字典字段用 `logicType: BusLogicDataType.dict, logicValue: "dictCode"`
|
|
109
109
|
7. 同时生成 api.md(基于 api-contract Skill 模板)
|
|
110
110
|
8. 提供 pages.ts 注册片段
|
|
111
|
-
9. 同时在 `mock/` 目录下生成对应的 mock 文件(`MockMethod[]` + mockjs,URL 和字段与 api.md 一致,URL 必须带 `/dev-api`
|
|
111
|
+
9. 同时在 `mock/[业务域]/` 目录下生成对应的 mock 文件(`MockMethod[]` + mockjs,URL 和字段与 api.md 一致,URL 必须带 `/dev-api` 前缀)。业务域取 `src/views/` 下第一级目录名(如 `sale`、`mdata`)。mock 文件必须 `import { paginate, ok, pick, nowStr } from "../_utils"` 复用共享工具,不可自行重复定义
|
|
112
112
|
10. **查询字段顺序**:`queryDef()` 中字段顺序必须与 page-spec `query` 数组顺序严格一致(即原型从左到右、从上到下)
|
|
113
113
|
11. **表格列顺序**:`columnsDef()` 中列顺序必须与 page-spec `columns` 数组顺序严格一致(`selection` + `index` 在最前,其余按原型表头从左到右)
|
|
114
114
|
12. **按钮顺序与颜色**:`toolbarDef()` 中按钮顺序和 `name`(颜色)必须与 page-spec `toolbar` 数组严格一致(`primary`=蓝底, `danger`=红色, `warning`=橙色, `default`=灰色; `plain: true`=线框)。**"新增"类按钮永远排第一**(如"新增"、"新增申请"),这是产品通用规范
|
|
@@ -119,8 +119,8 @@ src/views/[域]/[模块]/[子模块]/[kebab-case-目录名]/
|
|
|
119
119
|
17. **按钮颜色映射**:按钮的 `type` 属性决定颜色,须根据原型按钮颜色或按钮语义映射(见下方 §按钮颜色映射表)
|
|
120
120
|
18. **按钮必须可交互**:所有按钮的 `onClick` 必须有真实处理逻辑,禁止空函数 `() => {}`。通用交互实现见下方 §按钮交互实现规则
|
|
121
121
|
19. **未知交互兜底**:当原型未提供交互细节、且无法从通用模式推断时,`onClick` 中使用 `ElMessage.info("需业务确认交互逻辑")` 作为占位
|
|
122
|
-
20. **生成后依赖自检**:代码生成完成后,检查 `package.json` 是否已安装生成代码所需的依赖(`mockjs`、`vite-plugin-mock`、`lodash-es`、`xlsx` 等),若缺失则提示用户执行安装命令。同时检查 `vite.config.ts` 是否已注册 `viteMockServe`、`mock
|
|
123
|
-
21. **默认 Mock First**:新生成页面默认必须走 `vite-plugin-mock`。必须生成 `mock/[
|
|
122
|
+
20. **生成后依赖自检**:代码生成完成后,检查 `package.json` 是否已安装生成代码所需的依赖(`mockjs`、`vite-plugin-mock`、`lodash-es`、`xlsx` 等),若缺失则提示用户执行安装命令。同时检查 `vite.config.ts` 是否已注册 `viteMockServe`、`mock/_utils.ts` 是否存在(若不存在则从 kit 种子文件补充)
|
|
123
|
+
21. **默认 Mock First**:新生成页面默认必须走 `vite-plugin-mock`。必须生成 `mock/[业务域]/[模块].ts`(import `../_utils` 共享工具),并确保 `API_CONFIG` 中每个 URL 都有对应 mock 端点;只有当用户明确要求关闭 mock 或 `.env.dev` 中 `ENV_MOCK=false` 时,才允许直接联调真实接口。
|
|
124
124
|
22. **Mock URL 必须匹配真实请求**:`API_CONFIG` 保持真实接口路径(如 `/mdata/mdataModel/list`),mock 文件端点必须带 Vite 代理前缀(如 `/dev-api/mdata/mdataModel/list`),这样关闭 mock 后无需修改业务代码。
|
|
125
125
|
23. **页面初始数据必须由 mock 提供**:列表页 `onMounted(() => select())` 后必须能显示模拟数据,不允许生成空白页等待后端接口;`list` 端点返回 `{ code: 2000, data: { records, total, size, current } }`。
|
|
126
126
|
24. **必须使用 wk-skills-ui runtime 风格**:当项目安装了 `@agile-team/wk-skills-ui` 时,列表列定义必须使用 `defineColumns()`,操作列必须使用 `renderOps()`,状态/字典列优先使用 runtime 渲染器或 `logicType=dict` 自动映射;不可退回默认纯文本/空函数风格。
|
|
@@ -145,7 +145,7 @@ src/views/[域]/[模块]/[子模块]/[kebab-case-目录名]/
|
|
|
145
145
|
11. **❌ 禁止表单控件宽度不统一**:`jh-select`、`jh-date`、`el-input-number`、`jh-file-upload` 默认宽度可能与 `el-input` 不一致,必须在 scoped style 中用 `:deep()` 统一设为 `width: 100%`(详见 §表单页 UI 细节规范)
|
|
146
146
|
12. **❌ 禁止表单页无滚动**:独立路由表单页内容超出视口时必须可滚动,`.app-page-container` 须设 `overflow-y: auto`(**不要加 `height: 100%`,全局已有 `height: calc(100vh - 100px)`,叠加会导致双滚动条**)
|
|
147
147
|
13. **❌ 禁止内联 style 散落**:所有页面/组件样式统一写在 `index.scss` 中(便于复用和移动),不可在 template 中大量使用内联 `style="..."`
|
|
148
|
-
14. **❌ 禁止生成无 mock 的页面**:只写 `API_CONFIG` 但不写 `mock/*.ts` 属于生成失败。
|
|
148
|
+
14. **❌ 禁止生成无 mock 的页面**:只写 `API_CONFIG` 但不写 `mock/[业务域]/*.ts` 属于生成失败。mock 文件必须按域分目录、import `_utils` 共享工具(详见 `docs/mock-architecture.md`)。
|
|
149
149
|
15. **❌ 禁止生成空 onClick**:`onClick: () => {}` 属于生成失败;未知逻辑也必须用 `ElMessage.info(...)` 明示。
|
|
150
150
|
16. **❌ 禁止忽略 wk-skills-ui**:项目已安装 `@agile-team/wk-skills-ui` 时,不使用 `defineColumns/renderOps` 属于生成失败。
|
|
151
151
|
17. **❌ 禁止 BaseTable 非 AGGrid**:业务列表中 `<BaseTable>` 未写 `render-type="agGrid"` 或缺少 `cid/:cid` 属于生成失败。
|