adspecs 0.1.19 → 0.1.21

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 (74) hide show
  1. package/.adspecs/feature.json +16 -16
  2. package/.adspecs/feature.yml +28 -28
  3. package/.adspecs/paths.json +17 -17
  4. package/.adspecs/templates/04-/345/211/215/347/253/257/345/212/237/350/203/275/350/256/276/350/256/241/346/250/241/346/235/277.md +1 -1
  5. package/.adspecs/templates/05-/345/220/216/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +613 -724
  6. package/.adspecs/templates/05b-/345/211/215/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +51 -51
  7. package/.claude-plugin/marketplace.json +23 -23
  8. package/.claude-plugin/plugin.json +18 -18
  9. package/.qoder-plugin/plugin.json +31 -31
  10. package/CLAUDE.md +1 -5
  11. package/INSTALL.md +3 -3
  12. package/README.md +395 -395
  13. package/bin/adspecs.js +129 -129
  14. package/hooks/commit-queue.js +245 -245
  15. package/hooks/hooks.json +63 -63
  16. package/hooks/session-start.js +44 -44
  17. package/hooks/wiki-queue.js +127 -127
  18. package/package.json +61 -61
  19. package/references/ant6-front-standard/index.md +99 -99
  20. package/references/antd-front-demo/public/mockServiceWorker.js +361 -361
  21. package/references/ecp-end-standard/index.md +63 -63
  22. package/references/python-end-standard/01-Python/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +372 -372
  23. package/references/python-end-standard/02-/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/344/270/216/344/275/277/347/224/250/350/247/204/350/214/203.md +226 -226
  24. package/references/python-end-standard/03-Celery/345/274/202/346/255/245/344/273/273/345/212/241/350/247/204/350/214/203.md +237 -237
  25. package/references/python-end-standard/04-Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -231
  26. package/scripts/postinstall.js +107 -107
  27. package/scripts/sync-version.js +105 -105
  28. package/skills/.claude/.wiki-update-queue +26 -26
  29. package/skills/adspecs-constitution/SKILL.md +157 -0
  30. package/skills/adspecs-export-word/SKILL.md +498 -498
  31. package/skills/adspecs-export-word/references/md-to-docx.js +862 -862
  32. package/skills/adspecs-export-word/references/package-lock.json +220 -220
  33. package/skills/adspecs-export-word/references/package.json +10 -10
  34. package/skills/adspecs-front-prototype/SKILL.md +405 -405
  35. package/skills/adspecs-front-spec/SKILL.md +4 -4
  36. package/skills/adspecs-front-tasks/SKILL.md +213 -173
  37. package/skills/adspecs-plan/SKILL.md +59 -69
  38. package/skills/adspecs-prd/SKILL.md +13 -5
  39. package/skills/adspecs-prd-to-demo/SKILL.md +532 -0
  40. package/skills/adspecs-tasks/SKILL.md +175 -204
  41. package/skills/adspecs-update-status/SKILL.md +382 -382
  42. package/skills/adspecs-utest/SKILL.md +107 -116
  43. package/skills/grill-me/SKILL.md +7 -0
  44. package/skills/grill-me/agents/openai.yaml +5 -0
  45. package/skills/playwright-cli/SKILL.md +420 -0
  46. package/skills/playwright-cli/references/element-attributes.md +23 -0
  47. package/skills/playwright-cli/references/playwright-tests.md +39 -0
  48. package/skills/playwright-cli/references/request-mocking.md +87 -0
  49. package/skills/playwright-cli/references/running-code.md +241 -0
  50. package/skills/playwright-cli/references/session-management.md +225 -0
  51. package/skills/playwright-cli/references/storage-state.md +275 -0
  52. package/skills/playwright-cli/references/test-generation.md +433 -0
  53. package/skills/playwright-cli/references/tracing.md +139 -0
  54. package/skills/playwright-cli/references/video-recording.md +143 -0
  55. package/skills/playwright-trace/SKILL.md +171 -0
  56. package/skills/project-init/SKILL.md +93 -22
  57. package/skills/project-init/references/front-demo/.claude/settings.local.json +9 -0
  58. package/skills/wiki-update/SKILL.md +232 -232
  59. package/src/commands/doctor.js +197 -197
  60. package/src/commands/init.js +83 -83
  61. package/src/commands/plugin.js +165 -165
  62. package/src/commands/update.js +87 -87
  63. package/src/lib/area-scanner.js +129 -129
  64. package/src/lib/copier.js +104 -104
  65. package/src/lib/dir-utils.js +161 -133
  66. package/src/lib/json-merge.js +114 -114
  67. package/src/lib/paths-defaults.js +37 -37
  68. package/src/lib/prompts.js +428 -347
  69. package/src/lib/readme-gen.js +143 -143
  70. package/src/lib/report.js +338 -327
  71. package/src/lib/scaffolder.js +551 -518
  72. package/src/lib/short-name.js +36 -36
  73. package/src/utils.js +80 -80
  74. package/references/antd-front-demo/.env +0 -15
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "adspecs-front-spec"
3
- description: "基于 PRD 文件一次性完成前端交互和 UI 行为语义提取,生成面向产品经理和前端开发的功能规格说明书(UI/交互规格)"
4
- argument-hint: "指定 PRD 文件路径,如 docs/20-prd/crm/sales-forecast/M06-01_销售预测需求规格说明书.md"
3
+ description: "基于 PRD 文件和系统设计文档一次性完成前端交互和 UI 行为语义提取,生成面向产品经理和前端开发的功能规格说明书(UI/交互规格)"
4
+ argument-hint: "指定 PRD 文件路径和系统设计文档文件路径,如 docs/20-prd/crm/sales-forecast/M06-01_销售预测需求规格说明书.md"
5
5
  compatibility: "需要 docs/ 目录体系,含 04-前端功能设计模板.md、项目约定文档、ECP 编码规范"
6
6
  metadata:
7
7
  author: "qingwen"
@@ -75,7 +75,7 @@ $ARGUMENTS
75
75
  - **模板文件**:
76
76
  - `.adspecs/templates/04-前端功能设计模板.md` — 功能规格说明书输出模板(8 部分结构:§1 页面菜单路由规划、§2 总体布局、§3~§4 核心功能区域、§5 用户输入、§6 错误处理、§7 状态管理、§8 US→FSD 对齐表)
77
77
  - **项目约定**:
78
- - `CLAUDE.md` — 项目技术架构、模块结构、前端技术栈(Vue 3 + TypeScript + Element Plus)
78
+ - 严格遵守`docs\40-project_conventions\frontend-standard\index.md` 约定规范
79
79
 
80
80
  ## 执行前检查
81
81
 
@@ -241,7 +241,7 @@ $ARGUMENTS
241
241
 
242
242
  1. 读取用户指定的 PRD 文件,重点关注:用户故事(US)、验收场景(AC)、功能清单、状态机、权限矩阵、通知机制、业务规则
243
243
  2. 如果 `{DESIGN_DIR}/` 下存在对应的 system-design 文件,一并读取,提取:API 端点清单、错误码定义、枚举值
244
- 3. 读取 `CLAUDE.md` 了解项目模块结构、前端技术栈(Vue 3 + TypeScript + Element Plus)
244
+ 3. 读取 `docs\40-project_conventions\frontend-standard\index.md`约定规范
245
245
 
246
246
  ### 步骤 2:读取模板
247
247
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: "adspecs-front-tasks"
3
- description: "基于前端设计文档(_前端设计.md),为 ECP 前端功能生成 TDD 就绪的、按依赖排序的 tasks.md 文件"
3
+ description: "基于前端设计文档(_前端设计.md),为前端功能生成 TDD 就绪的、按依赖排序的 tasks.md 文件。支持 Vue + Element Plus / React + Ant Design 技术栈自动检测"
4
4
  argument-hint: "指定前端设计文档路径,如 docs/30-system-design/crm/M06-01_销售预测_前端设计.md"
5
- compatibility: "需要 docs/ 目录体系:docs/30-system-design(前端设计文档)+ .adspecs/templates(05b-前端任务清单模板)+ CLAUDE.md(前端编码规范)"
5
+ compatibility: "需要 docs/ 目录体系:docs/30-system-design(前端设计文档)+ .adspecs/templates(05b-前端任务清单模板)。支持 Vue + Element Plus 或 React + Ant Design 技术栈(自动检测),参考 references/front-demo/.claude/rules 或 references/ant6-front-standard"
6
6
  metadata:
7
7
  author: "qingwen"
8
- source: "基于 adspecs-front-tasks 通用模板 + Vue 3 前端编码规范 + TDD 流程改造"
8
+ source: "基于 adspecs-front-tasks 通用模板 + 项目技术栈(Vue/React 自动检测)+ TDD 流程改造"
9
9
  user-invocable: true
10
10
  disable-model-invocation: false
11
11
  ---
@@ -74,106 +74,137 @@ $ARGUMENTS
74
74
 
75
75
  ---
76
76
 
77
- ## 前端技术栈与编码规范(任务生成强制校验清单)
78
-
79
- > **来源**:CLAUDE.md §"Frontend (`ecp-generator-ui-boostrap/`)" + 前端任务清单模板 §前端编码规范检查清单。
80
- > **以下 12 条规则在生成每个任务时必须满足,违反任何一条即为不合格任务。**
81
-
82
- | # | 规则 | 说明 |
83
- | --- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
84
- | 1 | **TypeScript 类型** | 所有组件/Store/API/工具函数有完整类型定义,禁用 `any`。类型定义文件放在 `src/types/{module}/` |
85
- | 2 | **Vue SFC 语法** | 统一使用 `<script setup lang="ts">` 语法,Props/Emits 使用类型声明 |
86
- | 3 | **Element Plus 组件** | 统一使用 `<el-*>` 组件(`<el-table>`、`<el-form>`、`<el-tag>`、`<el-pagination>`、`<el-dialog>` 等),状态标签使用 `<el-tag>` 的颜色语义 |
87
- | 4 | **Pinia Store** | `defineStore` 使用 setup 语法,camelCase 命名(如 `useForecastOrderList`),状态对齐前端设计文档 §状态管理 |
88
- | 5 | **API 调用** | 统一使用 `src/utils/request.ts` 的 `request.get`/`request.post` 封装,不直接调用 axios。每个 API 模块独立文件放在 `src/api/{module}/` |
89
- | 6 | **路由配置** | 层级清晰,页面组件使用 `defineAsyncComponent` 懒加载,路由 meta 含权限标记。路由模块文件放在 `src/router/modules/{module}.ts` |
90
- | 7 | **错误处理** | 错误码映射表集中管理在 `src/utils/errorHandler.ts`,展示方式按前端设计(Message/Dialog/字段级三种)。后端返回的业务错误码(`3103_xxx_xxx`)映射为用户提示文案 |
91
- | 8 | **状态标签** | 使用通用 `StatusTag.vue` 组件,颜色语义严格遵循设计:蓝色=进行中、绿色=终态、红色=驳回/错误、橙色=警告/部分、灰色=草稿/取消/释放 |
92
- | 9 | **表单校验** | `<el-form>` rules 声明式校验,校验文案使用 i18n key(`$t('xxx')`)或消息码映射。CTCT 查询 loading 时禁用其他输入 |
93
- | 10 | **乐观锁** | 更新/撤回/排产确认操作携带 versionNum 字段,冲突时展示友好提示"数据已被他人修改,请刷新后重试" |
94
- | 11 | **i18n 国际化** | 所有用户可见文案使用 `$t()` `useI18n()`,最少覆盖中/英两种语言。文案文件放在 `src/i18n/{locale}/{module}.ts` |
95
- | 12 | **构建质量** | `npm run build`(含 `vue-tsc --build` 类型检查 + `vite build`)零错误通过;`npm run lint` 和 `npm run format` 无报错 |
96
-
97
- ### 前端技术栈速查
98
-
99
- | 技术 | 版本 | 用途 |
100
- | ------------ | --------------------- | ------------------------------------------------------------------------------------------------------------------------- |
101
- | Vue | 3.5 + Composition API | 核心框架,`<script setup lang="ts">` 语法 |
102
- | TypeScript | 5.8 | 全局类型安全 |
103
- | Element Plus | 2.9 | UI 组件库(el-table, el-form, el-tag, el-dialog, el-button, el-input, el-select, el-date-picker, el-pagination, el-tabs) |
104
- | Pinia | 3 | 状态管理(`defineStore` setup 语法) |
105
- | vue-router | 4 | 动态路由(`defineAsyncComponent` 懒加载 + meta 权限) |
106
- | vue-i18n | 11 | 国际化(最少中/英双语) |
107
- | ECharts | 5 | 概览视图图表(按需引入 `echarts/core`) |
108
- | Vite | 6 | 构建工具 |
109
- | vitest | — | 单元测试 + 组件测试(与 Vue Test Utils 配合) |
77
+ ## 技术栈检测(任务生成前置)
78
+
79
+ > **目的**:确定本项目的前端技术栈,后续所有术语、路径、示例均按检测到的栈展开。
80
+ > **输出变量**:`FRONTEND_STACK`(`vue` | `react`)和 `FRONTEND_PROJECT_DIR`(前端项目根目录名)。
81
+
82
+ 按以下优先级依次尝试,命中任意一级即停止:
83
+
84
+ | 优先级 | 检测源 | 判定规则 |
85
+ | ------ | ------ | -------- |
86
+ | 1 | `.adspecs/project.json` | 读取 `frontend_stack` 字段(`vue` / `react`)。`/project-init` 在初始化时写入 |
87
+ | 2 | 项目根 `CLAUDE.md` §Frontend | 关键字命中:含 `Vue 3` / `Element Plus` / `Pinia` → `vue`;含 `React` / `Ant Design` / `Zustand` → `react` |
88
+ | 3 | 前端设计文档(`*_前端设计.md`)§1 | 文档开头"技术栈"或"项目路径"段落中声明的框架 |
89
+ | 4 | 项目目录结构启发式 | 存在 `src/views/**/*.vue` `vue`;存在 `src/pages/**/*.tsx` → `react` |
90
+ | 5 | 回退:询问用户 | 使用 AskUserQuestion 让用户选择 `Vue + Element Plus` 或 `React + Ant Design` |
91
+
92
+ **`FRONTEND_PROJECT_DIR` 检测**:
93
+ - 优先从 `.adspecs/project.json` `frontend_dir` 字段读取
94
+ - 其次从 `CLAUDE.md` §Frontend 中提取项目根目录名
95
+ - 默认值:`front-demo/`
96
+
97
+ 检测完成后,在内部记录两个变量,后续章节按此展开:
98
+ ```
99
+ FRONTEND_STACK = vue | react
100
+ FRONTEND_PROJECT_DIR = {前端项目根目录名}
101
+ ```
102
+
103
+ ---
104
+
105
+ ## 前端编码规范(任务生成强制校验清单)
106
+
107
+ > **来源**:项目 `CLAUDE.md` §Frontend + `.adspecs/templates/05b-前端任务清单模板.md` + 项目技术栈参考(Vue 栈参考 `references/front-demo/.claude/rules/`;React 栈参考 `references/ant6-front-standard/`)。
108
+ > **以下 12 条规则为栈无关原则,在生成每个任务时必须满足,违反任何一条即为不合格任务。**
109
+ > **具体实现方式按 `FRONTEND_STACK` §技术栈映射表 展开。**
110
+
111
+ | # | 规则 | 说明(栈无关原则) |
112
+ | --- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
113
+ | 1 | **TypeScript 类型** | 所有组件/Store/API/工具函数有完整类型定义,禁用 `any`。类型定义文件放在 `src/types/{module}/` |
114
+ | 2 | **组件语法** | 采用项目约定的组件语法(SFC 单文件组件 / 函数组件 + Hooks),Props 使用类型声明 |
115
+ | 3 | **UI 组件库** | 统一使用项目选定的企业级组件库(表格/表单/标签/弹窗/分页等),状态标签使用组件库的颜色语义 |
116
+ | 4 | **状态管理** | 采用项目选定的状态管理方案,camelCase 命名,状态对齐前端设计文档 §状态管理 |
117
+ | 5 | **API 调用** | 统一使用项目封装的 HTTP 客户端(`src/utils/request.ts`),不直接调用底层库。每个 API 模块独立文件放在 `src/api/{module}/` |
118
+ | 6 | **路由配置** | 层级清晰,页面组件懒加载,路由 meta 含权限标记 |
119
+ | 7 | **错误处理** | 错误码映射表集中管理在 `src/utils/errorHandler.ts`,展示方式按前端设计(Message/Dialog/字段级三种)。后端返回的业务错误码映射为用户提示文案 |
120
+ | 8 | **状态标签** | 使用通用状态标签组件,颜色语义严格遵循设计:蓝色=进行中、绿色=终态、红色=驳回/错误、橙色=警告/部分、灰色=草稿/取消/释放 |
121
+ | 9 | **表单校验** | 声明式校验规则,校验文案使用 i18n key 或消息码映射。查询 loading 时禁用其他输入 |
122
+ | 10 | **乐观锁** | 更新/撤回/排产确认操作携带版本号字段,冲突时展示友好提示"数据已被他人修改,请刷新后重试" |
123
+ | 11 | **i18n 国际化** | 所有用户可见文案使用国际化函数,最少覆盖中/英两种语言 |
124
+ | 12 | **构建质量** | `npm run build`(含类型检查 + 构建)零错误通过;`npm run lint` 和 `npm run format` 无报错 |
125
+
126
+ ### 技术栈映射表
127
+
128
+ > 根据 §技术栈检测 得到的 `FRONTEND_STACK` 选择对应列。未在表中出现的概念(如错误处理、API 封装)两栈相同。
129
+
130
+ | 概念 | Vue 技术栈 (`FRONTEND_STACK=vue`) | React 技术栈 (`FRONTEND_STACK=react`) |
131
+ | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
132
+ | 框架 | Vue 3.5 + `<script setup lang="ts">` | React 19 + 函数组件 + Hooks |
133
+ | 类型 | TypeScript 5.8 | TypeScript 6 |
134
+ | UI 库 | Element Plus 2.9(`<el-*>` 前缀) | Ant Design 6 + ProComponents(`<a-*>` / `<ProTable>` 等) |
135
+ | 状态管理 | Pinia 3(`defineStore` setup 语法) | Zustand(`create<State>`) |
136
+ | 路由 | vue-router 4(`defineAsyncComponent` 懒加载) | react-router(`React.lazy` + `Suspense`) |
137
+ | i18n | vue-i18n 11(`$t()` / `useI18n()`) | react-i18next(`useTranslation()` / `t()`) |
138
+ | 图表 | ECharts 5(按需引入 `echarts/core`) | ECharts 5(按需引入 `echarts/core`) |
139
+ | 构建 | Vite 6(`vue-tsc --build` 类型检查) | Vite 6(`tsc --noEmit` 类型检查) |
140
+ | 单元测试 | vitest | vitest |
141
+ | 组件测试库 | @vue/test-utils | @testing-library/react |
142
+ | 组件扩展名 | `.vue` | `.tsx` |
143
+ | 页面目录 | `src/views/{module}/` | `src/pages/{module}/` |
144
+ | 状态目录 | `src/store/modules/{module}/` | `src/stores/{module}/` |
145
+ | API 目录 | `src/api/{module}/` | `src/api/{module}/` |
146
+ | 类型目录 | `src/types/{module}/` | `src/types/{module}/` |
147
+ | 路由目录 | `src/router/modules/{module}.ts` | `src/router/{module}.ts` |
148
+ | i18n 目录 | `src/i18n/{locale}/{module}.ts` | `src/locales/{locale}/{module}.ts` |
149
+ | 通用组件目录 | `src/components/` | `src/components/` |
150
+ | Hooks 目录 | `src/hooks/` | `src/hooks/` |
151
+ | 请求封装 | `src/utils/request.ts` | `src/utils/request.ts` |
152
+ | 错误处理 | `src/utils/errorHandler.ts` | `src/utils/errorHandler.ts` |
153
+ | 状态标签组件 | `StatusTag.vue` | `StatusTag.tsx` |
154
+ | 操作按钮组件 | `ActionButtons.vue` | `ActionButtons.tsx` |
155
+ | 测试命令 | `npx vitest run {test-file}` | `npx vitest run {test-file}` |
156
+ | 参考规范 | `references/front-demo/.claude/rules/` | `references/ant6-front-standard/` |
110
157
 
111
158
  ### 前端项目路径约定
112
159
 
113
- > 来源:CLAUDE.md §Frontend + `05b-前端任务清单模板.md`
160
+ > 来源:CLAUDE.md §Frontend + `05b-前端任务清单模板.md`。下方目录树按 `FRONTEND_STACK` 展开,`{EXT}` 表示组件扩展名(Vue: `.vue`;React: `.tsx`)。
114
161
 
115
162
  ```
116
- ecp-generator-ui-boostrap/ # 前端项目根目录
163
+ {FRONTEND_PROJECT_DIR}/ # 前端项目根目录
117
164
  ├── src/
118
- │ ├── api/ # API 接口模块(axios 封装)
119
- │ │ └── {module}/ # 按业务模块组织,如 sales-forecast/
120
- │ │ ├── forecastOrder.ts # 预测单 CRUD + 业务操作接口
121
- │ │ └── forecastChangeOrder.ts # 变更单 CRUD + 审批接口
122
- │ ├── views/ # 页面组件
165
+ │ ├── api/ # API 接口模块(HTTP 客户端封装)
166
+ │ │ └── {module}/ # 按业务模块组织
167
+ │ │ ├── {entity}.ts # 实体 CRUD + 业务操作接口
168
+ │ │ └── ...
169
+ │ ├── {PAGE_DIR}/ # 页面组件(Vue: views/;React: pages/)
123
170
  │ │ └── {module}/ # 按业务模块组织
124
- │ │ ├── ForecastOrderList.vue # 列表页
125
- │ │ ├── ForecastOrderEdit.vue # 创建/编辑页
126
- │ │ ├── ForecastOrderDetail.vue # 详情页
127
- │ │ ├── ForecastOrderOverview.vue # 概览/图表页
128
- │ │ ├── ChangeOrderEdit.vue # 变更单表单页
129
- │ │ ├── SystemConfig.vue # 系统配置页
171
+ │ │ ├── {Entity}List{EXT} # 列表页
172
+ │ │ ├── {Entity}Edit{EXT} # 创建/编辑页
173
+ │ │ ├── {Entity}Detail{EXT} # 详情页
174
+ │ │ ├── {Entity}Overview{EXT} # 概览/图表页
130
175
  │ │ ├── components/ # 页面级私有组件
131
- │ │ │ ├── ForecastOrderForm.vue # 预测单表单
132
- │ │ │ ├── ChangeForm.vue # 变更单表单
133
- │ │ │ ├── ReplyDialog.vue # 接收/驳回弹窗
134
- │ │ │ ├── TransferFoDialog.vue # 转FO弹窗
135
- │ │ │ └── OverviewDrillDown.vue # 下钻明细弹窗
176
+ │ │ │ ├── {Entity}Form{EXT} # 表单组件
177
+ │ │ │ └── ...
136
178
  │ │ └── __tests__/ # 页面组件测试
137
179
  │ ├── router/ # 路由配置
138
- │ │ └── modules/
139
- │ └── {module}.ts # 模块路由定义
140
- ├── store/ # Pinia 状态管理
141
- │ │ └── modules/
142
- │ │ └── {module}/ #
143
- │ │ ├── forecastOrderListStore.ts # 列表 Store
144
- │ │ ├── forecastOrderDetailStore.ts # 详情 Store
145
- │ │ ├── forecastOrderFormStore.ts # 表单 Store
146
- │ │ ├── changeOrderFormStore.ts # 变更单表单 Store
147
- │ │ ├── overviewStore.ts # 概览 Store
148
- │ │ └── __tests__/ # Store 单元测试
180
+ │ │ └── {module}.ts # 模块路由定义
181
+ ├── {STORE_DIR}/ # 状态管理(Vue: store/modules/;React: stores/)
182
+ │ └── {module}/
183
+ │ │ ├── {entity}Store.ts # 实体状态 Store
184
+ │ │ └── __tests__/ # Store 单元测试
149
185
  │ ├── components/ # 全局共享组件
150
- │ │ ├── StatusTag.vue # 状态标签通用组件
151
- │ │ └── ActionButtons.vue # 动态操作按钮组
186
+ │ │ ├── StatusTag{EXT} # 状态标签通用组件
187
+ │ │ └── ActionButtons{EXT} # 动态操作按钮组
152
188
  │ ├── types/ # TypeScript 类型定义
153
189
  │ │ └── {module}/
154
- │ │ ├── forecastOrder.ts # 预测单实体类型
155
- │ │ ├── forecastChangeOrder.ts # 变更单实体类型
156
- │ │ ├── enums.ts # 枚举(与后端编码一致)
157
- │ │ └── api.ts # API 请求/响应泛型类型
190
+ │ │ ├── {entity}.ts # 实体类型 + 枚举
191
+ │ │ ├── enums.ts # 枚举(与后端编码一致)
192
+ │ │ └── api.ts # API 请求/响应泛型类型
158
193
  │ ├── utils/ # 工具函数
159
- │ │ ├── request.ts # axios 实例 + 拦截器
194
+ │ │ ├── request.ts # HTTP 客户端实例 + 拦截器
160
195
  │ │ └── errorHandler.ts # 错误码→用户提示文案映射表
161
- │ ├── i18n/ # 国际化
162
- │ │ ├── zh-CN/
163
- │ │ └── {module}.ts # 简体中文文案
164
- └── en-US/
165
- │ │ └── {module}.ts # 英文文案
166
- │ └── hooks/ # Composition API 钩子
196
+ │ ├── {I18N_DIR}/ # 国际化(Vue: i18n/;React: locales/)
197
+ │ │ ├── zh-CN/{module}.ts # 简体中文文案
198
+ │ │ └── en-US/{module}.ts # 英文文案
199
+ │ └── hooks/ # Composition API 钩子 / React Hooks
167
200
  │ ├── usePagination.ts # 分页管理
168
- ├── useForecastOrderForm.ts # 表单校验+提交
169
- │ ├── useApsSchedule.ts # APS 排产进度查询+超时降级
170
- │ └── useECharts.ts # 图表实例管理
201
+ └── ...
171
202
  ```
172
203
 
173
204
  **路径命名约定**:
174
205
 
175
206
  - 目录名:kebab-case(`sales-forecast`)
176
- - 文件名:`.vue` 文件 PascalCase(`ForecastOrderList.vue`)、`.ts` 文件 camelCase(`forecastOrder.ts`)
207
+ - 文件名:组件文件 PascalCase(`{Entity}List{EXT}`)、`.ts` 文件 camelCase(`{entity}.ts`)
177
208
  - Store 名:`use{Entity}Store.ts` 或 `{entity}Store.ts`
178
209
 
179
210
  ---
@@ -188,11 +219,15 @@ ecp-generator-ui-boostrap/ # 前端项目根目录
188
219
  - 若仍找不到,搜索当前打开文件或上下文中引用的前端设计文档
189
220
  - 确认文件存在且可读取
190
221
 
191
- 2. **加载 CLAUDE.md**:读取项目根目录下的 `CLAUDE.md`(§Frontend 部分),获取前端技术栈和编码规范
222
+ 2. **检测技术栈**:按 §技术栈检测 的 5 级回退链确定 `FRONTEND_STACK` 和 `FRONTEND_PROJECT_DIR`,后续所有术语、路径、示例均按此展开
192
223
 
193
- 3. **定位任务模板**:读取 `.adspecs/templates/05b-前端任务清单模板.md` 作为输出结构参考
224
+ 3. **加载编码规范参考**:根据 `FRONTEND_STACK` 加载对应规范目录:
225
+ - Vue 栈:`references/front-demo/.claude/rules/`
226
+ - React 栈:`references/ant6-front-standard/`
194
227
 
195
- 4. **可选加载后端设计文档**:若存在同模块的 `_system-design.md`,作为 API 端点清单和错误码的补充参考
228
+ 4. **定位任务模板**:读取 `.adspecs/templates/05b-前端任务清单模板.md` 作为输出结构参考
229
+
230
+ 5. **可选加载后端设计文档**:若存在同模块的 `_system-design.md`,作为 API 端点清单和错误码的补充参考
196
231
 
197
232
  ### 2. 提取前端设计文档信息
198
233
 
@@ -226,7 +261,7 @@ ecp-generator-ui-boostrap/ # 前端项目根目录
226
261
 
227
262
  | 提取项 | 来源 | 用途 |
228
263
  | ------------ | ------------------------------------------- | --------------------------- |
229
- | 表单字段清单 | 每个表单输入控件的字段名/类型/必填/校验规则 | 生成 `<el-form>` rules 校验 |
264
+ | 表单字段清单 | 每个表单输入控件的字段名/类型/必填/校验规则 | 生成表单组件声明式校验规则 |
230
265
  | 交互反馈 | CTCT 自动回填/MOQ 警告/提前期拦截 | 生成 Hook 交互逻辑 |
231
266
 
232
267
  #### 2.5 从 §错误处理提取:错误码映射
@@ -236,12 +271,12 @@ ecp-generator-ui-boostrap/ # 前端项目根目录
236
271
  | 错误码映射表 | 错误码 → 用户提示文案 → 展示方式(Message/Dialog/字段级) | 生成 `errorHandler.ts` 任务 |
237
272
  | 错误展示方式 | Message 提示/Dialog 拦截/字段级错误 | 生成错误处理 Hook |
238
273
 
239
- #### 2.6 从 §状态管理提取:Pinia Store
274
+ #### 2.6 从 §状态管理提取:Store
240
275
 
241
- | 提取项 | 来源 | 用途 |
242
- | ---------- | ------------------------------------------- | ----------------------------- |
243
- | Store 定义 | Store 名称 + state 字段 + actions + getters | **每个 Store 独立成一个任务** |
244
- | 初始值 | 前端设计中的默认值/空值定义 | Store 初始化代码 |
276
+ | 提取项 | 来源 | 用途 |
277
+ | ---------- | ------------------------------------------------ | ----------------------------- |
278
+ | Store 定义 | Store 名称 + state 字段 + actions + getters/方法 | **每个 Store 独立成一个任务** |
279
+ | 初始值 | 前端设计中的默认值/空值定义 | Store 初始化代码 |
245
280
 
246
281
  #### 2.7 从 §US→FSD 对齐表提取:故事映射
247
282
 
@@ -336,6 +371,8 @@ ecp-generator-ui-boostrap/ # 前端项目根目录
336
371
 
337
372
  输出生成的 tasks.md 路径及摘要:
338
373
 
374
+ - **检测到的技术栈**:`FRONTEND_STACK`(vue / react)及检测来源
375
+ - **前端项目根目录**:`FRONTEND_PROJECT_DIR`
339
376
  - **前端设计文档来源**:使用的 `_前端设计.md` 路径
340
377
  - **任务总数**:含各阶段分布
341
378
  - **每个用户故事的任务数量**:含 TDD 测试任务/实现任务分别计数
@@ -355,8 +392,8 @@ ecp-generator-ui-boostrap/ # 前端项目根目录
355
392
 
356
393
  1. **任务必须按用户故事组织**:每个故事独立可测试,支持独立实现
357
394
  2. **TDD 严格排序**:每个故事阶段内,vitest 测试任务必须在实现任务之前
358
- 3. **前端编码规范强制遵守**:每个任务描述必须包含正确的 Vue 3/TypeScript/Element Plus 命名和路径
359
- 4. **文件路径精确**:每个任务必须包含从 `ecp-generator-ui-boostrap/src/` 开始的完整文件路径
395
+ 3. **前端编码规范强制遵守**:每个任务描述必须包含正确的**项目技术栈**命名和路径(按 §技术栈映射表 展开)
396
+ 4. **文件路径精确**:每个任务必须包含从 `{FRONTEND_PROJECT_DIR}/src/` 开始的完整文件路径
360
397
  5. **前端设计文档全量覆盖**:所有页面/组件/Store/API/类型/交互都映射到对应任务
361
398
 
362
399
  ### 检查清单格式(必需)
@@ -379,19 +416,34 @@ ecp-generator-ui-boostrap/ # 前端项目根目录
379
416
  - Phase 2(基础设施):无故事标签
380
417
  - Phase 3+(用户故事):**必须**有故事标签
381
418
  - Final Phase(集成收尾):无故事标签
382
- 6. **描述**:明确操作 + 精确的文件路径(从 `ecp-generator-ui-boostrap/src/` 开始)
419
+ 6. **描述**:明确操作 + 精确的文件路径(从 `{FRONTEND_PROJECT_DIR}/src/` 开始)
420
+
421
+ **正确示例(按 `FRONTEND_STACK` 展开)**:
383
422
 
384
- **正确示例(前端风格)**:
423
+ *Vue 技术栈示例*:
385
424
 
386
425
  ```text
387
426
  - [ ] T012 [TDD] [US1] 编写 ForecastOrderList 组件渲染测试(列表加载+分页+筛选+状态标签颜色),文件:
388
- ecp-generator-ui-boostrap/src/views/sales-forecast/__tests__/ForecastOrderList.spec.ts
389
- - [ ] T013 [US1] 创建 ForecastOrderList 页面组件(搜索筛选区+操作按钮+数据表格+状态标签+操作列+分页条),文件:
390
- ecp-generator-ui-boostrap/src/views/sales-forecast/ForecastOrderList.vue
391
- - [ ] T014 [P] [US1] 创建 forecastOrderApi 接口模块(getById/findPagination/save/update/delete/submit/withdraw/cancel 8 个端点),文件:
392
- ecp-generator-ui-boostrap/src/api/sales-forecast/forecastOrder.ts
393
- - [ ] T015 [P] [US1] 创建 useForecastOrderList Store(list/pagination/filters/loading/selectedRows + fetchList/search/reset),文件:
394
- ecp-generator-ui-boostrap/src/store/modules/sales-forecast/forecastOrderListStore.ts
427
+ {FRONTEND_PROJECT_DIR}/src/views/sales-forecast/__tests__/ForecastOrderList.spec.ts
428
+ - [ ] T013 [US1] 创建 ForecastOrderList 页面组件(<script setup lang="ts"> + el-table/el-pagination/el-tag),文件:
429
+ {FRONTEND_PROJECT_DIR}/src/views/sales-forecast/ForecastOrderList.vue
430
+ - [ ] T014 [P] [US1] 创建 forecastOrderApi 接口模块(8 个端点,使用 request.get/post 封装),文件:
431
+ {FRONTEND_PROJECT_DIR}/src/api/sales-forecast/forecastOrder.ts
432
+ - [ ] T015 [P] [US1] 创建 useForecastOrderList Store(defineStore setup 语法),文件:
433
+ {FRONTEND_PROJECT_DIR}/src/store/modules/sales-forecast/forecastOrderListStore.ts
434
+ ```
435
+
436
+ *React 技术栈示例*:
437
+
438
+ ```text
439
+ - [ ] T012 [TDD] [US1] 编写 ForecastOrderList 组件渲染测试(列表加载+分页+筛选+状态标签颜色),文件:
440
+ {FRONTEND_PROJECT_DIR}/src/pages/sales-forecast/__tests__/ForecastOrderList.spec.tsx
441
+ - [ ] T013 [US1] 创建 ForecastOrderList 页面组件(函数组件 + ProTable + Tag/Pagination),文件:
442
+ {FRONTEND_PROJECT_DIR}/src/pages/sales-forecast/ForecastOrderList.tsx
443
+ - [ ] T014 [P] [US1] 创建 forecastOrderApi 接口模块(8 个端点,使用 request.get/post 封装),文件:
444
+ {FRONTEND_PROJECT_DIR}/src/api/sales-forecast/forecastOrder.ts
445
+ - [ ] T015 [P] [US1] 创建 useForecastOrderList Store(Zustand create<State>),文件:
446
+ {FRONTEND_PROJECT_DIR}/src/stores/sales-forecast/forecastOrderListStore.ts
395
447
  ```
396
448
 
397
449
  **错误示例**:
@@ -406,26 +458,27 @@ ecp-generator-ui-boostrap/ # 前端项目根目录
406
458
 
407
459
  ### 前端 TDD 任务排序规则(每个用户故事阶段内)
408
460
 
409
- > **关键原则**:`test-driven-development` skill 要求 "NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST"。前端使用 **vitest + Vue Test Utils** 实现 TDD。
461
+ > **关键原则**:`test-driven-development` skill 要求 "NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST"。前端使用 **vitest + 项目约定的组件测试库** 实现 TDD。
410
462
 
411
463
  每个用户故事阶段内的任务遵循严格排序:
412
464
 
413
465
  ```
414
466
  [TDD] Store 单元测试(先写,先失败) ← 使用 vitest
415
467
 
416
- [TDD] 组件渲染测试(先写,先失败) ← 使用 @vue/test-utils + vitest
468
+ [TDD] 组件渲染测试(先写,先失败) ← Vue 栈:@vue/test-utils + vitest
469
+ React 栈:@testing-library/react + vitest
417
470
 
418
471
  类型定义(interface/enum/types)
419
472
 
420
- API 接口模块(axios 封装函数)
473
+ API 接口模块(HTTP 客户端封装函数)
421
474
 
422
- Pinia Store 实现(defineStore
475
+ Store 实现(Vue 栈:defineStore;React 栈:Zustand create<State>)
423
476
 
424
477
  通用组件(StatusTag/ActionButtons)
425
478
 
426
479
  页面组件(列表/表单/详情/概览)
427
480
 
428
- 路由集成(defineAsyncComponent 懒加载)
481
+ 路由集成(Vue 栈:defineAsyncComponent 懒加载;React 栈:React.lazy + Suspense)
429
482
 
430
483
  i18n 文案(中/英双语)
431
484
  ```
@@ -439,11 +492,11 @@ i18n 文案(中/英双语)
439
492
  **测试工具链**:
440
493
 
441
494
  ```bash
442
- # Store 单元测试
443
- npx vitest run src/store/modules/sales-forecast/__tests__/forecastOrderListStore.spec.ts
495
+ # Store 单元测试(路径按 FRONTEND_STACK 展开:Vue 栈 store/modules/,React 栈 stores/)
496
+ npx vitest run {FRONTEND_PROJECT_DIR}/src/{STORE_DIR}/sales-forecast/__tests__/forecastOrderListStore.spec.ts
444
497
 
445
- # 组件测试
446
- npx vitest run src/views/sales-forecast/__tests__/ForecastOrderList.spec.ts
498
+ # 组件测试(路径按 FRONTEND_STACK 展开:Vue 栈 views/,React 栈 pages/)
499
+ npx vitest run {FRONTEND_PROJECT_DIR}/src/{PAGE_DIR}/sales-forecast/__tests__/ForecastOrderList.spec.{EXT}
447
500
  ```
448
501
 
449
502
  ### 任务组织方式
@@ -458,7 +511,7 @@ npx vitest run src/views/sales-forecast/__tests__/ForecastOrderList.spec.ts
458
511
  每个故事阶段内映射以下前端设计元素:
459
512
 
460
513
  - 该故事涉及的**页面组件**(§1.1 页面清单 → §3~§N 功能区域)
461
- - 该故事涉及的**Pinia Store**(§状态管理)
514
+ - 该故事涉及的**状态管理 Store**(§状态管理)
462
515
  - 该故事涉及的**API 模块**(§1.3 调用约定)
463
516
  - 该故事涉及的**交互逻辑**(§关键交互说明)
464
517
  - 该故事涉及的**错误处理**(§错误处理映射表)
@@ -475,7 +528,7 @@ npx vitest run src/views/sales-forecast/__tests__/ForecastOrderList.spec.ts
475
528
  - 每个 API 模块独立成一个任务(如 `forecastOrderApi.ts` / `forecastChangeOrderApi.ts`)
476
529
  - 类型与后端 DTO/Ro 对齐,枚举值与后端枚举编码一致
477
530
 
478
- #### 基于 Pinia Store(前端设计 §状态管理)
531
+ #### 基于状态管理 Store(前端设计 §状态管理)
479
532
 
480
533
  - 每个 Store 独立成一个任务
481
534
  - Store 命名跟随前端设计文档的 §状态管理定义
@@ -488,71 +541,41 @@ npx vitest run src/views/sales-forecast/__tests__/ForecastOrderList.spec.ts
488
541
 
489
542
  ### 阶段结构
490
543
 
544
+ > 下方为通用阶段模板,`{EXT}` / `{PAGE_DIR}` / `{STORE_DIR}` / `{I18N_DIR}` 均按 §技术栈映射表 展开。
545
+
491
546
  ```
492
547
  Phase 1: 项目初始化
493
- ├── T001 npm install 依赖就绪(Element Plus 2.9 + ECharts + Pinia 3 + vue-router 4 + vue-i18n 11 + vitest)
494
- ├── T002 创建模块目录结构(views/api/store/types/router/i18n 对应目录)
495
- ├── T003 [P] 创建模块路由配置文件(7 个页面路由 + meta 权限标记)
496
- └── T004 [P] 确认 src/utils/request.ts(axios 实例 + token 注入 + 错误统一拦截)
548
+ ├── T001 npm install 依赖就绪(按 FRONTEND_STACK 安装:框架 + UI + 状态管理 + 路由 + i18n + vitest)
549
+ ├── T002 创建模块目录结构({PAGE_DIR}/api/{STORE_DIR}/types/router/{I18N_DIR} 对应目录)
550
+ ├── T003 [P] 创建模块路由配置文件(N 个页面路由 + meta 权限标记)
551
+ └── T004 [P] 确认 src/utils/request.ts(HTTP 客户端实例 + token 注入 + 错误统一拦截)
497
552
 
498
553
  Phase 2: 基础设施(阻塞性前置 — 所有页面依赖)
499
554
  ├── 类型定义(可并行 [P])
500
- │ ├── forecastOrder.ts(实体接口 + 枚举)
501
- │ ├── forecastChangeOrder.ts(快照+变更字段)
502
- │ ├── enums.ts(5 个枚举与后端编码一致)
555
+ │ ├── {entity}.ts(实体接口 + 枚举)
556
+ │ ├── enums.ts(与后端编码一致)
503
557
  │ └── api.ts(PaginationRequest<T>/ResponseData<T>/RequestData<T> 泛型)
504
558
  ├── API 模块(可并行 [P])
505
- ├── forecastOrderApi.ts(14 个端点)
506
- │ └── forecastChangeOrderApi.ts(9 个端点)
559
+ └── {entity}Api.ts(N 个端点)
507
560
  ├── 工具函数 + 通用组件(可并行 [P])
508
561
  │ ├── errorHandler.ts(错误码映射表)
509
- │ ├── StatusTag.vue(通用状态标签)
510
- │ ├── ActionButtons.vue(动态操作按钮组)
562
+ │ ├── StatusTag{EXT}(通用状态标签)
563
+ │ ├── ActionButtons{EXT}(动态操作按钮组)
511
564
  │ └── usePagination.ts(分页管理 Hook)
512
565
 
513
- Phase 3: US-01 预测单列表页 [P1] 🎯 MVP 起点
514
- ├── [TDD] 列表 Store 单元测试 + 列表组件渲染测试
515
- ├── useForecastOrderList Store
516
- └── ForecastOrderList.vue(搜索筛选+表格+分页+操作列)
517
-
518
- Phase 4: US-01 预测单创建/编辑页 [P1]
519
- ├── [TDD] 表单组件测试(CTCT 回填/保存草稿/提交/校验拦截/MOQ 警告)
520
- ├── ForecastOrderForm.vue(表单子组件)
521
- ├── ForecastOrderEdit.vue(新建/编辑模式)
522
- ├── useForecastOrderFormStore(表单状态管理)
523
- └── useForecastOrderForm Hook(校验+提交逻辑)
524
-
525
- Phase 5: US-02/03/04/08/09 预测单详情页 [P1 综合]
526
- ├── [TDD] 详情组件测试(多状态+操作按钮/接收驳回/转FO/排产进度降级)
527
- ├── useForecastOrderDetail Store
528
- ├── ForecastOrderDetail.vue(信息卡片+排产进度+变更历史+操作按钮区)
529
- ├── ReplyDialog.vue(接收/驳回弹窗)
530
- ├── TransferFoDialog.vue(转FO弹窗)
531
- └── useApsSchedule Hook(排产进度查询+超时降级)
532
-
533
- Phase 6: US-05 变更单新增/编辑页 [P1]
534
- ├── [TDD] 变更单组件测试(快照展示/按需填写/校验/审批交互)
535
- ├── useChangeOrderForm Store
536
- ├── ChangeForm.vue(快照区+变更字段)
537
- └── ChangeOrderEdit.vue(新增/编辑模式)
538
-
539
- Phase 7: US-06 预测单概览视图 [P2]
540
- ├── [TDD] 概览组件测试(维度切换/图表渲染/下钻/导出)
541
- ├── useOverview Store
542
- ├── ForecastOrderOverview.vue(维度Tab+ECharts图表+聚合表格+导出)
543
- ├── OverviewDrillDown.vue(下钻明细弹窗)
544
- └── useECharts Hook(图表实例管理)
545
-
546
- Phase 8: US-10 系统配置页 [P2]
547
- └── SystemConfig.vue(提前期+强制转FO天数配置+风险提示)
566
+ Phase 3+: 每个用户故事一个阶段(P1→P2 顺序)
567
+ ├── [TDD] Store 单元测试 + 组件渲染测试
568
+ ├── 状态管理 Store 实现
569
+ ├── 页面组件 + 子组件(表单/弹窗/表格)
570
+ └── 模块路由追加
548
571
 
549
572
  Final Phase: 集成与收尾
550
- ├── E2E 端到端测试(创建→提交→接收→转FO 全流程)
573
+ ├── E2E 端到端测试(核心业务流程)
551
574
  ├── 路由守卫完善(角色→菜单可见性+路由访问控制)
552
575
  ├── i18n 文案(zh-CN + en-US 两种语言)
553
576
  ├── 前端编码规范 12 条合规检查
554
577
  ├── 性能优化(路由懒加载/图表按需引入/API 防抖/乐观锁重试)
555
- ├── npm run build 构建验证(vue-tsc + vite build 零错误)
578
+ ├── npm run build 构建验证(类型检查 + 构建 零错误)
556
579
  └── npm run lint + npm run format 代码质量验证
557
580
  ```
558
581
 
@@ -562,35 +585,52 @@ Final Phase: 集成与收尾
562
585
 
563
586
  - [ ] 每个用户故事阶段内,至少 1 个 `[TDD]` 任务排在所有实现任务之前
564
587
  - [ ] 每个 `[TDD]` 任务描述了明确的测试场景(Store 单元测试 或 组件渲染/交互测试)
565
- - [ ] 测试工具链使用 **vitest**(Store 测试)和 **Vue Test Utils**(组件测试)
588
+ - [ ] 测试工具链使用 **vitest**(Store 测试)和**项目约定的组件测试库**(Vue 栈:@vue/test-utils;React 栈:@testing-library/react)
566
589
  - [ ] 测试任务与实现任务的对应关系清晰(1 个 Store 测试 → 1 个 Store 实现;1 个组件测试 → 1 个页面组件)
567
590
  - [ ] tasks.md 包含 TDD 执行指南章节(RED→GREEN→REFACTOR,使用 vitest 命令)
568
591
  - [ ] 任务顺序与 `test-driven-development` skill 的流程一致
569
592
 
570
593
  ### 前端编码规范合规确认
571
594
 
572
- 生成 tasks.md 后,必须确认:
595
+ 生成 tasks.md 后,必须按 `FRONTEND_STACK` 确认对应检查项(下方列出两栈并列,按实际栈执行对应列):
596
+
597
+ **栈无关项(两栈共检)**:
573
598
 
574
- - [ ] 所有组件任务描述包含 `<script setup lang="ts">` 和 `<el-*>` 组件
575
- - [ ] 所有 Store 任务描述包含 `defineStore` setup 语法
576
- - [ ] 所有 API 任务描述使用 `request.get`/`request.post`(非直接 axios)
577
599
  - [ ] 所有类型文件放在 `src/types/` 下
578
- - [ ] 所有路由任务使用 `defineAsyncComponent` 懒加载
579
600
  - [ ] 错误处理使用 `errorHandler.ts` 集中管理错误码映射
580
601
  - [ ] 状态标签颜色遵循设计规范(蓝色进行中/绿色终态/红色驳回/橙色警告/灰色草稿取消)
581
- - [ ] `<el-form>` 使用 rules 声明式校验
582
- - [ ] 乐观锁操作描述包含 versionNum 携带和冲突提示
602
+ - [ ] 乐观锁操作描述携带版本号字段和冲突提示
583
603
  - [ ] i18n 任务覆盖中/英双语
584
- - [ ] build 任务包含 `vue-tsc --build` + `vite build`
585
604
  - [ ] lint 任务包含 ESLint + Prettier
586
605
 
606
+ **Vue 栈专属项(`FRONTEND_STACK=vue` 时检查)**:
607
+
608
+ - [ ] 所有组件任务描述包含 `<script setup lang="ts">` 和 `<el-*>` 组件
609
+ - [ ] 所有 Store 任务描述包含 `defineStore` setup 语法
610
+ - [ ] 所有路由任务使用 `defineAsyncComponent` 懒加载
611
+ - [ ] 表单任务使用 `<el-form>` rules 声明式校验
612
+ - [ ] build 任务包含 `vue-tsc --build` + `vite build`
613
+
614
+ **React 栈专属项(`FRONTEND_STACK=react` 时检查)**:
615
+
616
+ - [ ] 所有组件任务描述为函数组件 + Hooks,使用 Ant Design 6 / ProComponents
617
+ - [ ] 所有 Store 任务描述使用 Zustand `create<State>` 语法
618
+ - [ ] 所有路由任务使用 `React.lazy` + `Suspense` 懒加载
619
+ - [ ] 表单任务使用 ProForm / ModalForm / DrawerForm 标准模板
620
+ - [ ] build 任务包含 `tsc --noEmit` + `vite build`
621
+
622
+ **API 通用项**:
623
+
624
+ - [ ] 所有 API 任务描述使用项目封装的 HTTP 客户端(非直接 axios/fetch)
625
+
587
626
  ---
588
627
 
589
628
  ## 完成标准
590
629
 
630
+ - [ ] 已检测并记录 `FRONTEND_STACK`(vue / react)和 `FRONTEND_PROJECT_DIR`
591
631
  - [ ] tasks.md 已生成,包含所有阶段、TDD 标记、精确前端文件路径
592
632
  - [ ] 扩展钩子已根据上述《强制性执行后钩子》的规则派发或跳过
593
- - [ ] 所有 12 条前端编码规范已通过合规确认
633
+ - [ ] 所有 12 条前端编码规范已通过合规确认(按栈展开)
594
634
  - [ ] 所有故事阶段 TDD 就绪(vitest 测试任务在实现任务之前)
595
635
  - [ ] 已向用户报告完成情况
596
636
 
@@ -605,7 +645,7 @@ Final Phase: 集成与收尾
605
645
  | §1.3 前端 API 调用约定 | 认证方式/请求格式/错误处理/乐观锁 | API 模块 + errorHandler | Phase 2 |
606
646
  | §2 总体布局 | 页面布局结构 | 布局组件 | Phase 2 |
607
647
  | §3~§N 核心功能区域 | 每个页面的 UI 规格 + 交互流程 | 页面组件 + 子组件 + Store | Phase 3~8 |
608
- | §用户输入 | 表单字段/校验规则/交互反馈 | `<el-form>` rules + Hook | Phase 4, 6 |
648
+ | §用户输入 | 表单字段/校验规则/交互反馈 | 表单组件声明式校验 + Hook | Phase 4, 6 |
609
649
  | §错误处理 | 错误码→用户提示→展示方式映射表 | errorHandler.ts + i18n | Phase 2, 9 |
610
- | §状态管理 | Pinia Store 名称/state/actions/getters | Store 实现 | Phase 3~8 |
650
+ | §状态管理 | Store 名称/state/actions/getters(方法) | Store 实现 | Phase 3~8 |
611
651
  | §US→FSD 对齐表 | US ID → 功能 → 组件/Store/API 文件 | 任务完整性验证 + 故事分组 | 全局 |