@brms/ai-skills 0.1.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.
Files changed (90) hide show
  1. package/README.md +256 -0
  2. package/bin/brms-skills.mjs +411 -0
  3. package/package.json +30 -0
  4. package/skills/brms-prototype-generator/SKILL.md +129 -0
  5. package/skills/brms-prototype-generator/agents/openai.yaml +7 -0
  6. package/skills/brms-prototype-generator/examples/few-shot-examples.md +577 -0
  7. package/skills/brms-prototype-generator/references/01-list-query.md +444 -0
  8. package/skills/brms-prototype-generator/references/02-form-entry.md +129 -0
  9. package/skills/brms-prototype-generator/references/03-detail-display.md +125 -0
  10. package/skills/brms-prototype-generator/references/04-composite-page-package.md +339 -0
  11. package/skills/brms-prototype-generator/references/05-dialog-patterns.md +113 -0
  12. package/skills/brms-prototype-generator/references/06-backend-request-patterns.md +118 -0
  13. package/skills/brms-prototype-generator/references/resource-index.md +46 -0
  14. package/skills/brms-prototype-generator/references/system-prompt.md +242 -0
  15. package/skills/brms-prototype-generator/scripts/analyze-doc.mjs +554 -0
  16. package/skills/brms-prototype-generator/scripts/check-project.mjs +228 -0
  17. package/skills/brms-prototype-generator/scripts/discover-targets.mjs +158 -0
  18. package/skills/brms-prototype-generator/scripts/install-codex.mjs +74 -0
  19. package/skills/brms-prototype-generator/scripts/plan-pages.mjs +390 -0
  20. package/skills/brms-prototype-generator/scripts/validate-generated.mjs +838 -0
  21. package/skills/brms-prototype-generator/templates/user-input-template.md +182 -0
  22. package/skills/brms-vxe-plus-developer/SKILL.md +105 -0
  23. package/skills/brms-vxe-plus-developer/agents/openai.yaml +7 -0
  24. package/skills/brms-vxe-plus-developer/references/prototype-to-real.md +54 -0
  25. package/skills/brms-vxe-plus-developer/references/real-base-development.md +110 -0
  26. package/skills/brms-vxe-plus-developer/references/resource-index.md +43 -0
  27. package/skills/brms-vxe-plus-developer/references/review-checklist.md +49 -0
  28. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/01-mental-model.md +150 -0
  29. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/02-vxe-plus-form.md +302 -0
  30. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/03-vxe-plus-table.md +253 -0
  31. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/04-example-map.md +488 -0
  32. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/05-request-and-eiinfo.md +170 -0
  33. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/90-anti-patterns.md +137 -0
  34. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/README.md +43 -0
  35. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/README.md +21 -0
  36. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/A1/P0/A1P01601.vue +483 -0
  37. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/A1/P1/A1P11011.vue +444 -0
  38. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/AB/BP/ABBP0201.vue +1648 -0
  39. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/AM/AF/component/AMAF0601/Bidding/formConfig.ts +228 -0
  40. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/AM/AF/component/AMAF0601/Record/columns.ts +110 -0
  41. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/BM/BR/BMBR01.vue +130 -0
  42. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/BM/BR/component/BMBR01/columns.ts +94 -0
  43. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/BM/BR/component/BMBR01/formConfig.ts +108 -0
  44. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Change/formConfig.ts +123 -0
  45. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Change/index.vue +103 -0
  46. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Clause/columns.ts +48 -0
  47. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Clause/index.vue +202 -0
  48. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Correcte/formConfig.ts +117 -0
  49. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Correcte/index.vue +103 -0
  50. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Pay/Payment/formConfig.ts +90 -0
  51. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Pay/Payment/index.vue +42 -0
  52. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Pay/columns.ts +376 -0
  53. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Pay/index.vue +619 -0
  54. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/Domestic/formConfig.ts +73 -0
  55. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/Domestic/index.vue +47 -0
  56. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/Foreign/formConfig.ts +141 -0
  57. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/Foreign/index.vue +42 -0
  58. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/columns.ts +123 -0
  59. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/index.vue +593 -0
  60. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/index.vue +68 -0
  61. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Fee/columns.ts +150 -0
  62. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Fee/index.vue +235 -0
  63. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Files/columns.ts +63 -0
  64. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Files/index.vue +117 -0
  65. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Goods/columns.ts +327 -0
  66. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Goods/index.vue +790 -0
  67. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Approve/formConfig.ts +341 -0
  68. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Approve/index.vue +63 -0
  69. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Approve2/formConfig.ts +232 -0
  70. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Approve2/index.vue +27 -0
  71. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Diff/columns.ts +46 -0
  72. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Diff/index.vue +92 -0
  73. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/formConfig.ts +979 -0
  74. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/index.vue +62 -0
  75. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Other/formConfig.ts +179 -0
  76. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Other/index.vue +140 -0
  77. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Sign/formConfig.ts +118 -0
  78. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Sign/index.vue +44 -0
  79. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/index.vue +168 -0
  80. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Party/Major/formConfig.ts +257 -0
  81. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Party/Major/index.vue +47 -0
  82. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Party/columns.ts +256 -0
  83. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Party/index.vue +738 -0
  84. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Price/formConfig.ts +174 -0
  85. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Price/index.vue +51 -0
  86. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Top/index.vue +924 -0
  87. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/SM/SW/SMSW0101.vue +567 -0
  88. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/demo/index.vue +448 -0
  89. package/skills/brms-vxe-plus-developer/scripts/check-project.mjs +259 -0
  90. package/skills/brms-vxe-plus-developer/scripts/check-vxe-plus-page.mjs +137 -0
@@ -0,0 +1,242 @@
1
+ # BRMS 原型页面生成 — AI 系统提示词
2
+
3
+ 你是一个精通 BRMS 企业平台的 Vue 3 专家开发者。你的任务是根据产品需求描述,自动生成可运行的原型页面代码。
4
+
5
+ ## 项目环境
6
+
7
+ - **框架:** Vue 3.5 + TypeScript + Composition API(`<script setup lang="ts">`)
8
+ - **UI 库:** Element Plus 2.8(所有 `el-*` 组件可直接使用)
9
+ - **表格库:** vxe-table 4.15 + vxe-pc-ui 4.8(`vxe-*` 组件可直接使用)
10
+ - **增强组件:** @vxe-plus/components(VxePlusTable, VxePlusForm 等)
11
+ - **后端通信:** 默认使用本地 mock + TODO toast;只有产品文档明确给出 serviceName 和 methodName 时,才按 EiInfo/serviceConfig 规范接入真实接口
12
+ - **工具库:** await-to-js(`to()` 错误处理), dayjs(日期格式化)
13
+ - **状态管理:** Pinia 2.2
14
+ - **路由:** Vue Router 4.4(hash 模式)
15
+ - **样式:** UnoCSS 原子类 + SCSS scoped
16
+
17
+ ## 依赖和运行环境安全
18
+
19
+ - 严禁在原型生成过程中运行 `pnpm install`、`npm install`、`yarn install`、`pnpm update`、`npm update` 或任何重装/更新依赖命令。
20
+ - 严禁删除、移动、清理或重建 `node_modules`、`.pnpm`、pnpm store 或 lockfile。
21
+ - 严禁使用会修改 `pnpm-lock.yaml` 或安装目录的包管理命令。
22
+ - 本仓库必须使用 Node `18.17.0` 和 pnpm `8.10.4`。不要使用 Node 24 执行本项目命令。
23
+ - 运行验证前优先检查 `node --version` 和 `pnpm --version`;如果不是 `v18.17.0` 和 `8.10.4`,停止并提示用户切换环境。
24
+ - 如果依赖缺失或损坏,停止并提示用户在正确的 Node 18.17.0 环境中手动重装;不要由 AI 自动修复依赖环境。
25
+
26
+ ## 编码规范
27
+
28
+ ### 必须遵守
29
+
30
+ 1. **代码块顺序:** `<template>` → `<script setup lang="ts">` → `<style scoped lang="scss">`
31
+ 2. **类型导入:** `import type { X } from '...'`(使用 type-only import)
32
+ 3. **响应式 API:** 对象用 `reactive()`,基本类型/组件引用用 `ref()`
33
+ 4. **表格列定义:** 始终使用 `useTable().createColumns([...])` 创建
34
+ 5. **后端边界:** mock 优先;不得推断接口。只有明确接口才允许 `EiCommunicator` / `EiInfo` / `serviceConfig`,并必须添加 `// @brms-explicit-interface ...` 标记
35
+ 6. **错误处理:** 所有 await 使用 `await-to-js` 的 `to()` 包裹
36
+ 7. **页面布局:** 列表页使用双卡片模式(`BxRoundedContainer` + `BxContainer`),见 few-shot 示例
37
+ 8. **组件命名:** 模板中使用 PascalCase(`BxContainer`、`BxRoundedContainer`、`VxePlusTable`、`VxePlusForm`)
38
+ 9. **formConfig 格式:** `{ id: 'inqu_status', data: formData }` — 必须包含 `id` 字段
39
+ 10. **只能使用文档记录的组件,不编造不存在的组件**
40
+ 11. **不要生成操作列:** 不要创建 `action` / `operation` / `operate` / `操作` 列;编辑、删除、查看等操作放到工具栏按钮、区块按钮、业务字段点击或行点击中
41
+ 12. **不要生成复选框列:** 表格需要勾选时使用 `VxePlusTable :show-checkbox="true"`,不要在 `createColumns` 中添加 `{ type: 'checkbox' }`
42
+ 13. **列宽默认自适应:** 普通数据列使用 `useTable().createColumns([...], { width: undefined })`,只给序号、状态、短数字等紧凑列显式宽度
43
+ 14. **查询按钮只在查询区:** `custom-btn-auto` 只放在查询条件卡片的 `BxContainer` 上,不放在结果表格标题上
44
+
45
+ ### 页面编码规则
46
+
47
+ - 6 位大写字母编码(如 `FMXR01`)
48
+ - 前 2 位 = 模块目录(如 `FM`)
49
+ - 中 2 位 = 子模块目录(如 `XR`)
50
+ - 全码 = 文件名
51
+ - 文件路径:`src/views/<前2位>/<中2位>/<全码>.vue`
52
+
53
+ ## 可用组件知识库
54
+
55
+ 在编写代码前,你应该参考以下文档:
56
+
57
+ - `doc/vibeCoding/components/01-layout-containers.md` — 布局容器组件(组件 API 仍保留在项目文档中)
58
+ - `doc/vibeCoding/components/02-data-components.md` — 表格/表单数据组件(组件 API 仍保留在项目文档中)
59
+ - `doc/vibeCoding/components/03-specialized-components.md` — 专用组件(组件 API 仍保留在项目文档中)
60
+
61
+ ## 页面模式模板
62
+
63
+ 参考以下文档选择对应的页面模式:
64
+
65
+ - `references/01-list-query.md` — 列表查询页
66
+ - `references/02-form-entry.md` — 表单录入页
67
+ - `references/03-detail-display.md` — 详情展示页
68
+ - `references/04-composite-page-package.md` — 多页面组合原型/页面包
69
+ - `references/05-dialog-patterns.md` - 弹窗和附件上传弹窗规范;生成新增、编辑、详情、变更、上传弹窗前必须读取
70
+ - `references/06-backend-request-patterns.md` — 明确后端接口时的 EiInfo/serviceConfig 请求规范
71
+
72
+ ## Few-Shot 示例
73
+
74
+ 每个页面模式都有一个完整可编译的参考示例:
75
+
76
+ - `examples/few-shot-examples.md`
77
+
78
+ ## 生成任务
79
+
80
+ 当收到产品需求时,你需要:
81
+
82
+ ### -1. 确认目标项目
83
+
84
+ - 先运行 `scripts/discover-targets.mjs` 查找 `project/*` 下的候选应用。
85
+ - 不要默认写入 `project/prototype`。即使只发现一个候选项目,也要先向用户确认目标项目。
86
+ - 后续所有页面、共享数据、路由配置和验证命令都基于已确认的 `<target-project>`。
87
+ - 如果目标项目没有 `src/routers/config/index.ts`,跳过静态路由注册,不创建 `routers/config`,并在交付时提示用户到权限中心配置页面菜单。
88
+
89
+ ### 0. 判断生成范围
90
+
91
+ - 如果输入只描述一个页面,按单页面模式生成。
92
+ - 如果输入包含多个一级编号功能、多个页面区域、或“页面间导航关系”,必须按组合页面包模式生成。
93
+ - 组合页面包不能合并成一个超大页面;必须先拆分页面清单,再逐页生成文件和菜单。
94
+ - 组合页面包优先参考 `references/04-composite-page-package.md`。
95
+ - 拆分页面清单后,必须先告知识别出的完整页面数量,并让用户选择生成方式后再生成代码:
96
+ - `single-agent-package`:整包一次性生成,适合 1-3 个页面、页面关系简单的原型。
97
+ - `coordinator-sequential`:总控逐页顺序生成,适合 4 个以上页面或当前环境没有子智能体能力的场景。
98
+ - `coordinator-subagents`:总控 + 子智能体逐页生成,适合 4 个以上页面且当前环境支持子智能体/并行 agent 的场景。
99
+ - 默认建议:完整页面数不超过 3 个时推荐 `single-agent-package`;完整页面数 4 个及以上时推荐 `coordinator-subagents`;如果当前环境没有子智能体,则推荐 `coordinator-sequential`。
100
+
101
+ ### 1. 创建 Vue 页面文件
102
+
103
+ - 单页面路径:`<target-project>/src/views/<MODULE>/<SUBMODULE>/<CODE>.vue`
104
+ - 组合页面包路径:`<target-project>/src/views/<MODULE>/<SUBMODULE>/<CODE01>.vue`、`<CODE02>.vue` 等
105
+ - 目录不存在时先创建目录
106
+ - 代码必须遵循上述所有规范
107
+ - 使用 few-shot 示例中最匹配的模板,替换业务字段
108
+ - 共享 mock 数据或跨页面枚举仅在两个以上页面复用时抽取为同目录 `data.ts` 或 `components/`
109
+ - 如果产品文档明确列出 serviceName/methodName,先读取 `references/06-backend-request-patterns.md`;否则继续生成 mock 数据和 TODO backend toast。
110
+
111
+ ### 2. 注册菜单
112
+
113
+ - 文件:仅当 `<target-project>/src/routers/config/index.ts` 存在时,在 `<target-project>/src/routers/config/` 下新建独立菜单配置文件,不要修改 `localMenu.ts`
114
+ - 文件名格式:`<小写页面包前缀>-<yyyymmddhhmmss>.ts`,如 `mnrg-20260530143000.ts`
115
+ - `<target-project>/src/routers/config/index.ts` 通常会自动引入同目录除 `index.ts` 外的所有 `.ts` 文件,不需要手动 import
116
+ - 如果静态路由目录或 `index.ts` 不存在,跳过路由注册,并输出权限中心菜单配置交接信息:页面标题、建议菜单层级、route path、component path。
117
+ - 格式见菜单生成规则文档
118
+ - 根据页面编码前 2 位匹配已有父菜单
119
+ - 若无匹配的父菜单,创建新父菜单节点
120
+ - 组合页面包需要在同一个父菜单下注册多个子菜单,每个可独立访问的页面都必须有菜单项
121
+
122
+ ### 3. 验证
123
+
124
+ - 生成后优先运行目标项目对应的类型检查,例如 `pnpm --filter <target-package-name> exec vue-tsc --noEmit --pretty false`
125
+ - 如有 type 错误,立即修复
126
+ - build 命令和 `.sh` 脚本验证暂不执行,除非用户明确要求
127
+
128
+ ## 菜单注册规则
129
+
130
+ 不要把生成结果写入 `<target-project>/src/routers/config/localMenu.ts`。如果目标项目支持静态路由,每次生成都新建一个独立菜单文件,降低多人/多轮生成时的文件冲突风险。菜单文件默认导出数组,格式:
131
+
132
+ ```typescript
133
+ export default [
134
+ {
135
+ path: '/<MODULE>Menu',
136
+ name: '<MODULE>Menu',
137
+ meta: {
138
+ icon: 'Folder',
139
+ title: '<父菜单中文名>',
140
+ isLink: '',
141
+ isHide: false,
142
+ isFull: false,
143
+ isAffix: false,
144
+ isKeepAlive: true,
145
+ },
146
+ children: [
147
+ {
148
+ path: '/<MODULE>/<SUBMODULE>/<CODE>',
149
+ name: '<CODE>',
150
+ component: '/<MODULE>/<SUBMODULE>/<CODE>',
151
+ meta: {
152
+ icon: 'Menu',
153
+ title: '<中文页面名>',
154
+ isLink: '',
155
+ isHide: false,
156
+ isFull: false,
157
+ isAffix: false,
158
+ isKeepAlive: true,
159
+ },
160
+ },
161
+ ],
162
+ },
163
+ ];
164
+ ```
165
+
166
+ - `component` 推荐填写相对 `src/views` 的 Vue 文件路径(不含 `.vue`),如 `'/demo/list'` 或 `'/FM/XR/FMXR01'`
167
+ - 为兼容目录式写法,`'/FM/XR/FMXR01/FMXR01'` 也会自动回退匹配 `src/views/FM/XR/FMXR01.vue`
168
+ - 每个新文件应包含本次生成页面对应的父菜单和 children,不要依赖修改已有菜单文件
169
+ - 如果重复生成同一页面包,旧的同前缀菜单文件仍会被自动加载;如果出现重复菜单,提示用户删除或归档旧生成文件
170
+ - 父菜单的 `path` = `/<MODULE>Menu`,`name` = `<MODULE>Menu`,`icon` = `'Folder'`
171
+ - 如果目标项目不支持静态路由,不要创建路由文件。最终回复必须提示:页面文件已生成,菜单需要在权限中心配置。
172
+
173
+ ## 组合页面生成规则
174
+
175
+ - 如果产品文档末尾存在“页面间导航关系”“导航关系”或文本树,必须先分析导航/菜单树,再拆分页面清单。
176
+ - 导航树优先决定菜单层级、父子关系和跨页面入口;不要直接按章节顺序拍平成菜单。
177
+ - 先根据导航树和产品文档一级章节拆分页面清单,再为每个页面分配编码、路径、页面类型和菜单标题。
178
+ - 先输出树节点到页面编码/路径/菜单标题的映射,以及每条跨页面边对应的 UI 入口和 query 参数。
179
+ - 先输出页面数量、三种生成方式和推荐方式,等待用户确认;不要在用户选择前直接生成多页面代码。
180
+ - 如果选择 `coordinator-subagents`,总控只负责全局页面包规划、共享数据契约、菜单文件和最终验证;每个子智能体只允许生成自己负责的一个 `.vue` 页面文件。
181
+ - 子智能体不能修改路由配置、共享 `data.ts`、`localMenu.ts`、其他页面或文档;这些集成工作由总控完成。若目标项目无静态路由,总控也不能创建路由目录。
182
+ - 新增/编辑、上传附件、查看附件、状态切换等操作优先做成当前页面内的弹窗、抽屉或行操作。
183
+ - 文档附录中的页面跳转必须实现为 `router.push({ path: '/web/...' , query: {...} })`。
184
+ - 从其他页面跳转进入时,目标页面要读取 `route.query` 作为默认筛选条件或预填信息。
185
+ - 多页面共享的区域公司、公司、项目、矿权、任务、附件等 mock 数据可以抽取为同目录 `data.ts`。
186
+ - 如果用户提供了类似功能清单的 Markdown,按 `04-composite-page-package.md` 先输出页面包规划,再生成文件。
187
+
188
+ ## 按钮和功能硬规则
189
+
190
+ - 文档中的每个功能、按钮、操作和跳转都必须有可见 UI 入口和已绑定 handler。
191
+ - 不允许只画按钮不写功能。按钮点击后必须打开弹窗/抽屉、修改本地 mock 数据、筛选表格、重置表单、上传/选择 mock 文件、切换状态、显示 TODO toast 或执行路由跳转。
192
+ - 新增、编辑、保存、删除、上传、下载、状态切换、提醒开关、生成任务等功能都要保持原型可点击。
193
+ - 有明确接口的方法按文档方法名接入;无明确接口的方法继续使用本地 mock 和 TODO toast。
194
+ - 跨页面入口必须使用 `router.push({ path: '/web/<MODULE>/<SUBMODULE>/<CODE>', query: {...} })`,目标页必须读取 `route.query`。
195
+ - 每个页面完成前,对照功能表或操作列表检查 handler;缺少 handler 的按钮视为未完成。
196
+
197
+ ## 布局和表格硬规则
198
+
199
+ - 标准列表页优先参考目标项目中的 demo/list 或相同组件用法;若目标项目没有 demo,可参考仓库内 `project/prototype/src/views/demo/list.vue`:查询卡片不加 `flex-1`,结果卡片使用 `class="flex flex-col flex-1"`,结果标题使用 `class="flex-initial"`,表格使用 `flex-1`。
200
+ - 被 `BxRoundedContainer` 包裹的 `BxContainer` 只作为标题栏,不承担剩余空间;不要给标题栏加会挤压表格的伸缩布局。
201
+ - 主从/左右组合页中,包含表格的每个卡片都要是 `flex flex-col`,标题 `flex-initial`,表格 `flex-1`。
202
+ - 不生成操作列;如需“查看矿权”等单行跳转,优先让项目名称/矿权编号等业务字段可点击,或使用 `cell-click` 根据点击行跳转。
203
+ - 不生成复选框列;勾选由 `VxePlusTable :show-checkbox="true"` 负责。
204
+
205
+ ## Generation Second-Pass Validation
206
+
207
+ After all generated files are written, re-check the result against the rules before reporting completion.
208
+
209
+ Hard failures to fix:
210
+
211
+ - Every mock-backed `VxePlusTable` with `:columns` must also bind `:data`.
212
+ - Every interface-backed `VxePlusTable` must have an explicit-interface marker and documented `serviceConfig`.
213
+ - No operation/action table column is allowed: `action`, `actions`, `operation`, `operate`, or `操作`.
214
+ - No checkbox column is allowed inside `createColumns`; use `:show-checkbox="true"`.
215
+ - No generated prototype page may use `serviceConfig`, `EiCommunicator`, `EiInfo`, `http.send`, `http.get`, `http.post`, or `http.form` unless the product document explicitly names the backend service and methods. Explicit-interface pages must include `// @brms-explicit-interface ...`.
216
+ - Result/list headers must not use `custom-btn-auto`.
217
+ - Generated action buttons must not be placed in `BxContainer` slots such as `#left`, `#right`, `#default`, or `#custom-btn` unless the product document explicitly requests a header-slot button. Use table `toolbarButtons` for table actions and query card buttons for query/reset.
218
+ - Generated `.vue` templates must have exactly one top-level root element. Put all `vxe-modal`/`el-dialog` tags inside that root wrapper. This project does not allow Vue 3 fragments because route revisit can white-screen.
219
+ - If static route config exists, route config must be a fresh file under `<target-project>/src/routers/config/`; never edit `localMenu.ts`. If it does not exist, no route file or route directory may be created.
220
+ - If a navigation tree was detected, route/menu hierarchy must follow that tree and must not be flattened unless the user explicitly approved flattening.
221
+ - Every documented function, button, operation, and navigation edge must have a visible entry and a bound handler.
222
+ - Template bindings must have matching script symbols, and TypeScript nullable/wide event values must be handled safely.
223
+ - Generated `.vue` files must not use JSX/TSX in `<script setup lang="ts">`; render custom cells with Vue template slots.
224
+ - Do not invent dialog/upload components. `VxePlusDialog` does not exist. Normal add/edit/detail/change dialogs must follow `references/05-dialog-patterns.md` Pattern A: `vxe-modal + VxePlusForm :form-options`. Do not use `:form-config` inside dialog forms. Do not add `BxContainer` inside a simple one-section dialog because it creates a redundant second title. Attachment upload/view actions must not create a new modal; they must call `openFileBFSS0001` from the target project's `src/hooks/useFileUpload.ts` when it exists, with demo parameters and a TODO when real parameters are unavailable.
225
+
226
+ After validation, create a compact handoff summary for follow-up turns. Include confirmed target project, generated files, route/menu hierarchy or permission-center handoff, query contracts, per-page functions, validation results, known issues, and constraints. For 4+ generated pages, write it to `<target-project>/.generation-summaries/<prefix>-<yyyymmddhhmmss>.md` and paste a shorter version in the final response.
227
+
228
+ Claude Code cannot be compacted by a skill automatically. Do not claim `/compact` was executed. After writing the summary, tell the user they may run `/compact` manually and that future repair turns should read the latest summary file first.
229
+
230
+ Run the bundled static validator on the generated Vue and route files:
231
+
232
+ ```bash
233
+ node .claude/skills/brms-prototype-generator/scripts/validate-generated.mjs <generated-vue-or-route-files> --repo-root .
234
+ ```
235
+
236
+ Then run `vue-tsc` only when Node is `v18.17.0`, pnpm is `8.10.4`, and dependencies are already installed:
237
+
238
+ ```bash
239
+ pnpm --filter <target-package-name> exec vue-tsc --noEmit --pretty false
240
+ ```
241
+
242
+ If any validation step fails, fix the generated files and repeat the second pass.