@agile-team/wl-skills-kit 1.1.3 → 1.1.5
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 +18 -0
- package/README.md +5 -3
- package/files/.github/copilot-instructions.md +6 -3
- package/files/.github/docs/use-skill.md +8 -6
- package/files/.github/skills/menu-sync/env/env.local.json +5 -0
- package/files/.github/skills/page-codegen/SKILL.md +104 -1
- package/files/.github/skills/page-codegen/TPL-DETAIL-TABS.md +7 -29
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.1.5] - 2026-04-09
|
|
4
|
+
|
|
5
|
+
### 修复:page-codegen → menu-sync 数据闭环
|
|
6
|
+
|
|
7
|
+
- **问题**:page-codegen 生成分散的 `menu-config.md`(各页面目录下),menu-sync 却读取集中式 `SYS_MENU_INFO.md`,两者断裂
|
|
8
|
+
- **修复**:page-codegen 统一输出到 `.github/docs/SYS_MENU_INFO.md`(追加/覆盖模式,生成前必须询问用户)
|
|
9
|
+
- TPL-DETAIL-TABS 原有的 menu-config.md 模板移除,改为引用 SKILL.md 主文件的统一规则
|
|
10
|
+
- 新增「api.md 生成时序」章节:明确 api.md 先于 page-codegen(Step 2 → Step 3),确保 API_CONFIG 与接口一致
|
|
11
|
+
- copilot-instructions.md 流水线描述更新:Step 3 注明"追加/覆盖 SYS_MENU_INFO.md",新增数据闭环说明
|
|
12
|
+
- use-skill.md 工作流 A 更新:Step 6 增加写入模式确认,Step 8 增加手动/自动两种菜单创建方式说明
|
|
13
|
+
|
|
14
|
+
## [1.1.4] - 2026-04-09
|
|
15
|
+
|
|
16
|
+
### 修复
|
|
17
|
+
|
|
18
|
+
- 补充遗漏的 `env.local.json` 模板文件到 `files/.github/skills/menu-sync/env/`
|
|
19
|
+
- 文件内容为占位符模板(非真实凭据),安装后用户按 `guide.md` 填写实际值
|
|
20
|
+
|
|
3
21
|
## [1.1.3] - 2026-04-09
|
|
4
22
|
|
|
5
23
|
### 重构:convention-extract → convention-audit(规范审计)
|
package/README.md
CHANGED
|
@@ -50,7 +50,7 @@ npx @agile-team/wl-skills-kit@latest
|
|
|
50
50
|
│ └── docs/ ← 设计文档
|
|
51
51
|
│ ├── use-skill.md ← Skill 使用 + 移植一站式指南
|
|
52
52
|
│ ├── menu-sync-design.md ← 菜单同步方案设计
|
|
53
|
-
│ ├── SYS_MENU_INFO.md ←
|
|
53
|
+
│ ├── SYS_MENU_INFO.md ← 菜单配置(page-codegen 自动生成,menu-sync 读取)
|
|
54
54
|
│ └── wl-skills-kit.md ← 本包详细设计文档
|
|
55
55
|
│
|
|
56
56
|
├── docs/ ← 12 个平台组件 API 文档
|
|
@@ -121,13 +121,15 @@ npx @agile-team/wl-skills-kit@latest
|
|
|
121
121
|
① prototype-scan ─── 扫描 → page-spec JSON(结构化页面描述)
|
|
122
122
|
│
|
|
123
123
|
▼
|
|
124
|
-
② api-contract ───── 生成 → api.md
|
|
124
|
+
② api-contract ───── 生成 → api.md(前后端接口约定,先于代码生成)
|
|
125
125
|
│
|
|
126
126
|
▼
|
|
127
127
|
③ page-codegen ───── 生成 → index.vue + data.ts + index.scss + api.md + mock
|
|
128
128
|
│ (4 文件/页 + pages.ts 注册 + mock 数据)
|
|
129
|
+
│ 写入 → SYS_MENU_INFO.md(询问用户选择覆盖/追加模式)
|
|
129
130
|
▼
|
|
130
|
-
④ menu-sync ────────
|
|
131
|
+
④ menu-sync ──────── 读取 SYS_MENU_INFO.md → 同步到后端菜单表
|
|
132
|
+
(自动调 API 或手动在后台创建,效果等价)
|
|
131
133
|
|
|
132
134
|
⑤ convention-audit 按需:用规范审计代码 → 偏差报告 + 整改建议
|
|
133
135
|
```
|
|
@@ -219,14 +219,17 @@ onMounted(() => select());
|
|
|
219
219
|
|
|
220
220
|
```
|
|
221
221
|
Step 1 → 读取 prototype-scan/SKILL.md → 执行原型扫描 → 输出 page-spec
|
|
222
|
-
Step 2 → 读取 api-contract/SKILL.md → 生成 api.md
|
|
223
|
-
Step 3 → 读取 page-codegen/SKILL.md →
|
|
224
|
-
Step 4 → 读取 menu-sync/SKILL.md → 注册菜单到后端
|
|
222
|
+
Step 2 → 读取 api-contract/SKILL.md → 生成 api.md 接口约定(先于代码生成,确保 API_CONFIG 与接口一致)
|
|
223
|
+
Step 3 → 读取 page-codegen/SKILL.md → 逐页生成代码 + 追加/覆盖 SYS_MENU_INFO.md(询问用户选择写入模式)
|
|
224
|
+
Step 4 → 读取 menu-sync/SKILL.md → 读取 SYS_MENU_INFO.md → 注册菜单到后端
|
|
225
225
|
```
|
|
226
226
|
|
|
227
227
|
每个 Step 开始前读取对应 SKILL.md,**前一个 Step 完成后再进入下一个**。
|
|
228
228
|
上一步的输出(如 page-spec)直接作为下一步的输入,无需用户中间干预。
|
|
229
229
|
|
|
230
|
+
> **数据闭环**:page-codegen 生成的 `SYS_MENU_INFO.md` 是 menu-sync 的唯一输入。
|
|
231
|
+
> 菜单通过 `组件路径` 字段与 pages.ts 注册的文件路径关联,无论自动(menu-sync API)还是手动(系统管理后台)创建菜单,效果等价。
|
|
232
|
+
|
|
230
233
|
### 单独使用
|
|
231
234
|
|
|
232
235
|
用户也可以只执行单个 Skill(如只说"帮我生成客户档案页面"),此时只需读取对应的 SKILL.md,不必执行完整流水线。
|
|
@@ -44,6 +44,7 @@ Step 2 AI 执行 prototype-scan → 输出 page-spec JSON
|
|
|
44
44
|
Step 3 确认 page-spec(检查字段数量,注意 notes 中的歧义项)
|
|
45
45
|
|
|
46
46
|
Step 4 AI 执行 api-contract → 输出每个页面的 api.md
|
|
47
|
+
(api.md 先于代码生成,确保 API_CONFIG 与接口一致)
|
|
47
48
|
|
|
48
49
|
Step 5 确认接口(服务缩写、资源名是否正确)
|
|
49
50
|
|
|
@@ -51,15 +52,16 @@ Step 6 AI 执行 page-codegen → 输出:
|
|
|
51
52
|
- index.vue + data.ts + index.scss + api.md(每页 4 文件)
|
|
52
53
|
- pages.ts 注册片段(已写入)
|
|
53
54
|
- mock/[页面名].ts(与 api.md URL/字段一致,vite-plugin-mock 自动加载)
|
|
54
|
-
- SYS_MENU_INFO.md
|
|
55
|
+
- AI 询问用户:SYS_MENU_INFO.md 选择【覆盖】还是【追加】模式
|
|
56
|
+
- 写入 SYS_MENU_INFO.md(.github/docs/ 下)
|
|
55
57
|
|
|
56
58
|
Step 7 AI 输出校验报告(✅/❌ 各轮 diff 结果)
|
|
57
59
|
|
|
58
|
-
Step 8
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
Step 8 菜单注册(二选一,效果等价)
|
|
61
|
+
方式 A - 自动:对 AI 说「帮我创建菜单」
|
|
62
|
+
→ AI 读取 SYS_MENU_INFO.md + env.local.json → 调 API 逐条创建
|
|
63
|
+
方式 B - 手动:按 SYS_MENU_INFO.md 表格在系统管理后台手动创建菜单
|
|
64
|
+
两种方式的菜单通过「组件路径」与 pages.ts 注册的文件路径关联
|
|
63
65
|
|
|
64
66
|
Step 9 启动开发验证
|
|
65
67
|
pnpm run dev → 打开页面,mock 数据自动生效,可立即调试
|
|
@@ -42,7 +42,7 @@ src/views/[域]/[模块]/[子模块]/[kebab-case-目录名]/
|
|
|
42
42
|
附加输出:
|
|
43
43
|
|
|
44
44
|
- `pages.ts` 注册片段
|
|
45
|
-
-
|
|
45
|
+
- **`SYS_MENU_INFO.md`** — 集中式菜单配置(见下方 §SYS_MENU_INFO 生成规则)
|
|
46
46
|
- `mock/[页面kebab-name].ts`(项目根目录 `mock/` 下,`vite-plugin-mock` 自动加载,与 api.md 的 URL 和字段完全一致)
|
|
47
47
|
|
|
48
48
|
---
|
|
@@ -806,6 +806,109 @@ import { BaseQueryItemDesc } from "@jhlc/common-core/src/components/form/base-qu
|
|
|
806
806
|
|
|
807
807
|
---
|
|
808
808
|
|
|
809
|
+
## api.md 生成时序
|
|
810
|
+
|
|
811
|
+
> **api.md 在页面代码之前生成**(Step 2: api-contract → Step 3: page-codegen)。
|
|
812
|
+
> page-codegen 读取已生成的 api.md 中的 URL 和字段定义,确保 `API_CONFIG`、mock、data.ts 与接口约定一致。
|
|
813
|
+
> 未来使用真实 API 设计文档时,api.md 由后端提供或 api-contract Skill 从设计文档提取,page-codegen 直接消费。
|
|
814
|
+
|
|
815
|
+
---
|
|
816
|
+
|
|
817
|
+
## SYS_MENU_INFO 生成规则(所有模板通用)
|
|
818
|
+
|
|
819
|
+
page-codegen 生成页面代码后,**必须同步生成菜单配置信息到 `.github/docs/SYS_MENU_INFO.md`**。
|
|
820
|
+
|
|
821
|
+
### 写入模式确认(必须询问用户)
|
|
822
|
+
|
|
823
|
+
**在写入 SYS_MENU_INFO.md 之前,必须询问用户选择写入模式**:
|
|
824
|
+
|
|
825
|
+
| 模式 | 说明 | 适用场景 |
|
|
826
|
+
|------|------|---------|
|
|
827
|
+
| **覆盖模式** | 清空已有内容,只写入本次生成的菜单 | 首个模块 / 上次生成失败需要重来 |
|
|
828
|
+
| **追加模式** | 保留已有内容,在末尾追加本次生成的菜单 | 第二个、第三个模块接续生成 |
|
|
829
|
+
|
|
830
|
+
> AI 提问示例:`本次生成了 N 个页面的菜单配置,是【覆盖】还是【追加】写入 SYS_MENU_INFO.md?`
|
|
831
|
+
|
|
832
|
+
### 生成模板
|
|
833
|
+
|
|
834
|
+
每个页面生成一个菜单条目,格式如下:
|
|
835
|
+
|
|
836
|
+
```markdown
|
|
837
|
+
## [序号]. [菜单名称]
|
|
838
|
+
|
|
839
|
+
| 字段 | 填写值 |
|
|
840
|
+
| ------------ | ------ |
|
|
841
|
+
| 类型 Tab | 选择 **菜单** |
|
|
842
|
+
| 上级目录 | `[父目录名]` |
|
|
843
|
+
| 应用选择 | `[应用名]` |
|
|
844
|
+
| 使用缓存 | ◉ 使用 |
|
|
845
|
+
| 显示排序 | `[序号]` |
|
|
846
|
+
| 菜单路径 | `[camelCase目录名]` |
|
|
847
|
+
| 菜单名称 | `[中文名]` |
|
|
848
|
+
| 名称编码后缀 | `[菜单路径拼音小写]` |
|
|
849
|
+
| 组件路径 | `[域]/[模块]/[子模块]/[kebab-目录名]/index.vue` |
|
|
850
|
+
| 权限标识 | `[camelCase目录名]` |
|
|
851
|
+
| 是否隐藏 | **否** / **是** |
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
### 字段生成规则
|
|
855
|
+
|
|
856
|
+
| 字段 | 来源 | 规则 |
|
|
857
|
+
|------|------|------|
|
|
858
|
+
| 菜单路径 | page-spec.kebabName | kebab-case → camelCase(`mmwr-customer-archive` → `mmwrCustomerArchive`) |
|
|
859
|
+
| 菜单名称 | page-spec.pageName | 直接使用中文名 |
|
|
860
|
+
| 组件路径 | pages.ts 注册路径 | `[域]/[模块]/[子模块]/[kebab-目录名]/index.vue` |
|
|
861
|
+
| 权限标识 | 同菜单路径 | camelCase |
|
|
862
|
+
| 是否隐藏 | page-spec.features.hiddenMenu | `true` → 是,`false` → 否 |
|
|
863
|
+
| 上级目录 | 用户指定 / page-spec 推断 | 如果用户在原型扫描阶段指定了上级目录,使用该值 |
|
|
864
|
+
| 应用选择 | pages.ts 域名 | `produce` → 生产,`sale` → 销售 |
|
|
865
|
+
| 显示排序 | 页面在模块内的序号 | 从 1 开始递增 |
|
|
866
|
+
|
|
867
|
+
### 隐藏页面判断规则
|
|
868
|
+
|
|
869
|
+
以下页面类型应设置 `是否隐藏: 是`:
|
|
870
|
+
- 目录名含 `-form`(独立路由表单页)
|
|
871
|
+
- 目录名含 `-detail`(详情页)
|
|
872
|
+
- 目录名含 `-history`(历史查询页)
|
|
873
|
+
- page-spec.features.hiddenMenu === true
|
|
874
|
+
|
|
875
|
+
### SYS_MENU_INFO.md 文件结构
|
|
876
|
+
|
|
877
|
+
```markdown
|
|
878
|
+
# 系统菜单配置 — [模块名称]([域] / [子模块路径])
|
|
879
|
+
|
|
880
|
+
> 对应系统管理 → 菜单管理 → 新增菜单,每栏直接复制粘贴。
|
|
881
|
+
> **操作顺序:先建目录(第 0 步),再逐个添加菜单。**
|
|
882
|
+
>
|
|
883
|
+
> **pages.ts 注册位置**:`vite/plugins/shared/pages.ts` → `[模块变量名]` → `[子模块key]`
|
|
884
|
+
|
|
885
|
+
## 第 0 步:新建目录(如需要)
|
|
886
|
+
|
|
887
|
+
| 字段 | 值 |
|
|
888
|
+
| -------- | -- |
|
|
889
|
+
| 上级目录 | `[上级目录名]` |
|
|
890
|
+
| 菜单名称 | `[目录名]` |
|
|
891
|
+
| 显示排序 | `[序号]` |
|
|
892
|
+
|
|
893
|
+
## 第 1 步:[页面名称]
|
|
894
|
+
|
|
895
|
+
[菜单条目表格]
|
|
896
|
+
|
|
897
|
+
> pages.ts 对应:`["[kebab-name]", "[中文名]"]`
|
|
898
|
+
|
|
899
|
+
## 第 2 步:[页面名称]
|
|
900
|
+
...
|
|
901
|
+
```
|
|
902
|
+
|
|
903
|
+
### 与 menu-sync 的衔接
|
|
904
|
+
|
|
905
|
+
SYS_MENU_INFO.md 是 menu-sync Skill 的输入数据源:
|
|
906
|
+
- **自动创建**:用户说"帮我创建菜单" → menu-sync 读取 SYS_MENU_INFO.md → 调 API 逐条创建
|
|
907
|
+
- **手动创建**:用户也可直接按 SYS_MENU_INFO.md 的表格在系统管理后台手动创建菜单
|
|
908
|
+
- 两种方式等价,菜单创建后通过 `组件路径` 字段与 pages.ts 注册的文件路径关联
|
|
909
|
+
|
|
910
|
+
---
|
|
911
|
+
|
|
809
912
|
## 代码模板索引
|
|
810
913
|
|
|
811
914
|
> 各模板完整代码见对应独立文件,按需读取。主文件(SKILL.md)包含前置检查、约束、按钮规则、Mock规范等所有共用规则。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# DETAIL_TABS:详情Tab+子表页
|
|
2
|
-
|
|
3
|
-
> 见 SKILL.md 主文件(约束 + 按钮规则 + Mock 规范等共用规则)。
|
|
4
|
-
|
|
1
|
+
# DETAIL_TABS:详情Tab+子表页
|
|
2
|
+
|
|
3
|
+
> 见 SKILL.md 主文件(约束 + 按钮规则 + Mock 规范等共用规则)。
|
|
4
|
+
|
|
5
5
|
|
|
6
6
|
> 适用场景:编辑/维护页面,上半区为多 Tab 表单(基本信息/客户信息/其他信息),下半区为子项表格。
|
|
7
7
|
> 布局核心:`C_Splitter direction="vertical"` 垂直分割上下区域。
|
|
@@ -973,31 +973,9 @@ spec.features.hiddenMenu === true:
|
|
|
973
973
|
["[kebab-case-目录名]", "[页面中文名]"],
|
|
974
974
|
```
|
|
975
975
|
|
|
976
|
-
###
|
|
977
|
-
|
|
978
|
-
在模块目录下生成 `menu-config.md`,每个菜单一个表格,字段对应系统管理后台的创建菜单表单:
|
|
979
|
-
|
|
980
|
-
```markdown
|
|
981
|
-
## [序号]. [菜单名称]
|
|
982
|
-
|
|
983
|
-
| 字段 | 填写值 |
|
|
984
|
-
| -------- | ------ |
|
|
985
|
-
| 类型 Tab | 选择 **菜单** |
|
|
986
|
-
| 上级目录 | `[父目录名]` |
|
|
987
|
-
| 菜单图标 | 按需选择 |
|
|
988
|
-
| 应用选择 | `[应用名]` |
|
|
989
|
-
| 使用缓存 | ◉ 使用 |
|
|
990
|
-
| 页面 | 请选择 |
|
|
991
|
-
| 显示排序 | `[序号]` |
|
|
992
|
-
| 菜单路径 | `[camelCase目录名]` |
|
|
993
|
-
| 菜单名称 | `[中文名]` |
|
|
994
|
-
| 名称编码 | 前缀 `menu:[模块拼音]:` → 后缀填 `[菜单路径拼音]` |
|
|
995
|
-
| 组件路径 | `[域]/[模块]/[子模块]/[kebab-目录名]/index.vue` |
|
|
996
|
-
| 权限标识 | `[camelCase目录名]` |
|
|
997
|
-
| 是否隐藏 | **否** 或 **是**(page-spec.features.hiddenMenu) |
|
|
998
|
-
```
|
|
976
|
+
### 菜单配置
|
|
999
977
|
|
|
1000
|
-
>
|
|
978
|
+
> 菜单配置统一生成到 `.github/docs/SYS_MENU_INFO.md`(集中式),生成规则见 SKILL.md 主文件的「SYS_MENU_INFO 生成规则」章节。
|
|
1001
979
|
|
|
1002
980
|
---
|
|
1003
981
|
|
|
@@ -1109,4 +1087,4 @@ export default mockApi;
|
|
|
1109
1087
|
>
|
|
1110
1088
|
> 参考实现:`mock/customer-archive.ts`、`mock/temp-customer-archive.ts`、`mock/customer-apply.ts`
|
|
1111
1089
|
|
|
1112
|
-
---
|
|
1090
|
+
---
|
package/package.json
CHANGED