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.
- package/.adspecs/feature.json +16 -16
- package/.adspecs/feature.yml +28 -28
- package/.adspecs/paths.json +17 -17
- 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
- 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
- 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
- package/.claude-plugin/marketplace.json +23 -23
- package/.claude-plugin/plugin.json +18 -18
- package/.qoder-plugin/plugin.json +31 -31
- package/CLAUDE.md +1 -5
- package/INSTALL.md +3 -3
- package/README.md +395 -395
- package/bin/adspecs.js +129 -129
- package/hooks/commit-queue.js +245 -245
- package/hooks/hooks.json +63 -63
- package/hooks/session-start.js +44 -44
- package/hooks/wiki-queue.js +127 -127
- package/package.json +61 -61
- package/references/ant6-front-standard/index.md +99 -99
- package/references/antd-front-demo/public/mockServiceWorker.js +361 -361
- package/references/ecp-end-standard/index.md +63 -63
- 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
- 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
- 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
- package/references/python-end-standard/04-Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -231
- package/scripts/postinstall.js +107 -107
- package/scripts/sync-version.js +105 -105
- package/skills/.claude/.wiki-update-queue +26 -26
- package/skills/adspecs-constitution/SKILL.md +157 -0
- package/skills/adspecs-export-word/SKILL.md +498 -498
- package/skills/adspecs-export-word/references/md-to-docx.js +862 -862
- package/skills/adspecs-export-word/references/package-lock.json +220 -220
- package/skills/adspecs-export-word/references/package.json +10 -10
- package/skills/adspecs-front-prototype/SKILL.md +405 -405
- package/skills/adspecs-front-spec/SKILL.md +4 -4
- package/skills/adspecs-front-tasks/SKILL.md +213 -173
- package/skills/adspecs-plan/SKILL.md +59 -69
- package/skills/adspecs-prd/SKILL.md +13 -5
- package/skills/adspecs-prd-to-demo/SKILL.md +532 -0
- package/skills/adspecs-tasks/SKILL.md +175 -204
- package/skills/adspecs-update-status/SKILL.md +382 -382
- package/skills/adspecs-utest/SKILL.md +107 -116
- package/skills/grill-me/SKILL.md +7 -0
- package/skills/grill-me/agents/openai.yaml +5 -0
- package/skills/playwright-cli/SKILL.md +420 -0
- package/skills/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright-cli/references/running-code.md +241 -0
- package/skills/playwright-cli/references/session-management.md +225 -0
- package/skills/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright-cli/references/test-generation.md +433 -0
- package/skills/playwright-cli/references/tracing.md +139 -0
- package/skills/playwright-cli/references/video-recording.md +143 -0
- package/skills/playwright-trace/SKILL.md +171 -0
- package/skills/project-init/SKILL.md +93 -22
- package/skills/project-init/references/front-demo/.claude/settings.local.json +9 -0
- package/skills/wiki-update/SKILL.md +232 -232
- package/src/commands/doctor.js +197 -197
- package/src/commands/init.js +83 -83
- package/src/commands/plugin.js +165 -165
- package/src/commands/update.js +87 -87
- package/src/lib/area-scanner.js +129 -129
- package/src/lib/copier.js +104 -104
- package/src/lib/dir-utils.js +161 -133
- package/src/lib/json-merge.js +114 -114
- package/src/lib/paths-defaults.js +37 -37
- package/src/lib/prompts.js +428 -347
- package/src/lib/readme-gen.js +143 -143
- package/src/lib/report.js +338 -327
- package/src/lib/scaffolder.js +551 -518
- package/src/lib/short-name.js +36 -36
- package/src/utils.js +80 -80
- package/references/antd-front-demo/.env +0 -15
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "adspecs-front-spec"
|
|
3
|
-
description: "基于 PRD
|
|
4
|
-
argument-hint: "指定 PRD
|
|
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
|
-
-
|
|
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. 读取 `
|
|
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
|
|
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
|
|
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
|
|
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
|
-
>
|
|
80
|
-
>
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
163
|
+
{FRONTEND_PROJECT_DIR}/ # 前端项目根目录
|
|
117
164
|
├── src/
|
|
118
|
-
│ ├── api/ # API 接口模块(
|
|
119
|
-
│ │ └── {module}/ #
|
|
120
|
-
│ │ ├──
|
|
121
|
-
│ │ └──
|
|
122
|
-
│ ├──
|
|
165
|
+
│ ├── api/ # API 接口模块(HTTP 客户端封装)
|
|
166
|
+
│ │ └── {module}/ # 按业务模块组织
|
|
167
|
+
│ │ ├── {entity}.ts # 实体 CRUD + 业务操作接口
|
|
168
|
+
│ │ └── ...
|
|
169
|
+
│ ├── {PAGE_DIR}/ # 页面组件(Vue: views/;React: pages/)
|
|
123
170
|
│ │ └── {module}/ # 按业务模块组织
|
|
124
|
-
│ │ ├──
|
|
125
|
-
│ │ ├──
|
|
126
|
-
│ │ ├──
|
|
127
|
-
│ │ ├──
|
|
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
|
-
│ │ │ ├──
|
|
132
|
-
│ │ │
|
|
133
|
-
│ │ │ ├── ReplyDialog.vue # 接收/驳回弹窗
|
|
134
|
-
│ │ │ ├── TransferFoDialog.vue # 转FO弹窗
|
|
135
|
-
│ │ │ └── OverviewDrillDown.vue # 下钻明细弹窗
|
|
176
|
+
│ │ │ ├── {Entity}Form{EXT} # 表单组件
|
|
177
|
+
│ │ │ └── ...
|
|
136
178
|
│ │ └── __tests__/ # 页面组件测试
|
|
137
179
|
│ ├── router/ # 路由配置
|
|
138
|
-
│ │ └──
|
|
139
|
-
│
|
|
140
|
-
│
|
|
141
|
-
│ │
|
|
142
|
-
│ │ └──
|
|
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
|
|
151
|
-
│ │ └── ActionButtons
|
|
186
|
+
│ │ ├── StatusTag{EXT} # 状态标签通用组件
|
|
187
|
+
│ │ └── ActionButtons{EXT} # 动态操作按钮组
|
|
152
188
|
│ ├── types/ # TypeScript 类型定义
|
|
153
189
|
│ │ └── {module}/
|
|
154
|
-
│ │ ├──
|
|
155
|
-
│ │ ├──
|
|
156
|
-
│ │
|
|
157
|
-
│ │ └── api.ts # API 请求/响应泛型类型
|
|
190
|
+
│ │ ├── {entity}.ts # 实体类型 + 枚举
|
|
191
|
+
│ │ ├── enums.ts # 枚举(与后端编码一致)
|
|
192
|
+
│ │ └── api.ts # API 请求/响应泛型类型
|
|
158
193
|
│ ├── utils/ # 工具函数
|
|
159
|
-
│ │ ├── request.ts #
|
|
194
|
+
│ │ ├── request.ts # HTTP 客户端实例 + 拦截器
|
|
160
195
|
│ │ └── errorHandler.ts # 错误码→用户提示文案映射表
|
|
161
|
-
│ ├──
|
|
162
|
-
│ │ ├── zh-CN/
|
|
163
|
-
│ │
|
|
164
|
-
│
|
|
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
|
-
│
|
|
169
|
-
│ ├── useApsSchedule.ts # APS 排产进度查询+超时降级
|
|
170
|
-
│ └── useECharts.ts # 图表实例管理
|
|
201
|
+
│ └── ...
|
|
171
202
|
```
|
|
172
203
|
|
|
173
204
|
**路径命名约定**:
|
|
174
205
|
|
|
175
206
|
- 目录名:kebab-case(`sales-forecast`)
|
|
176
|
-
-
|
|
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.
|
|
222
|
+
2. **检测技术栈**:按 §技术栈检测 的 5 级回退链确定 `FRONTEND_STACK` 和 `FRONTEND_PROJECT_DIR`,后续所有术语、路径、示例均按此展开
|
|
192
223
|
|
|
193
|
-
3.
|
|
224
|
+
3. **加载编码规范参考**:根据 `FRONTEND_STACK` 加载对应规范目录:
|
|
225
|
+
- Vue 栈:`references/front-demo/.claude/rules/`
|
|
226
|
+
- React 栈:`references/ant6-front-standard/`
|
|
194
227
|
|
|
195
|
-
4.
|
|
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
|
-
| 表单字段清单 | 每个表单输入控件的字段名/类型/必填/校验规则 |
|
|
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 从 §状态管理提取:
|
|
274
|
+
#### 2.6 从 §状态管理提取:Store
|
|
240
275
|
|
|
241
|
-
| 提取项 | 来源
|
|
242
|
-
| ---------- |
|
|
243
|
-
| Store 定义 | Store 名称 + state 字段 + actions + getters | **每个 Store 独立成一个任务** |
|
|
244
|
-
| 初始值 | 前端设计中的默认值/空值定义
|
|
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.
|
|
359
|
-
4. **文件路径精确**:每个任务必须包含从 `
|
|
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. **描述**:明确操作 + 精确的文件路径(从 `
|
|
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
|
-
|
|
389
|
-
- [ ] T013 [US1] 创建 ForecastOrderList
|
|
390
|
-
|
|
391
|
-
- [ ] T014 [P] [US1] 创建 forecastOrderApi 接口模块(
|
|
392
|
-
|
|
393
|
-
- [ ] T015 [P] [US1] 创建 useForecastOrderList Store(
|
|
394
|
-
|
|
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 +
|
|
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] 组件渲染测试(先写,先失败) ←
|
|
468
|
+
[TDD] 组件渲染测试(先写,先失败) ← Vue 栈:@vue/test-utils + vitest
|
|
469
|
+
React 栈:@testing-library/react + vitest
|
|
417
470
|
↓
|
|
418
471
|
类型定义(interface/enum/types)
|
|
419
472
|
↓
|
|
420
|
-
API 接口模块(
|
|
473
|
+
API 接口模块(HTTP 客户端封装函数)
|
|
421
474
|
↓
|
|
422
|
-
|
|
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/
|
|
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/
|
|
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
|
-
-
|
|
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
|
-
####
|
|
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
|
|
494
|
-
├── T002 创建模块目录结构(
|
|
495
|
-
├── T003 [P] 创建模块路由配置文件(
|
|
496
|
-
└── T004 [P] 确认 src/utils/request.ts(
|
|
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
|
-
│ ├──
|
|
501
|
-
│ ├──
|
|
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
|
-
│
|
|
506
|
-
│ └── forecastChangeOrderApi.ts(9 个端点)
|
|
559
|
+
│ └── {entity}Api.ts(N 个端点)
|
|
507
560
|
├── 工具函数 + 通用组件(可并行 [P])
|
|
508
561
|
│ ├── errorHandler.ts(错误码映射表)
|
|
509
|
-
│ ├── StatusTag
|
|
510
|
-
│ ├── ActionButtons
|
|
562
|
+
│ ├── StatusTag{EXT}(通用状态标签)
|
|
563
|
+
│ ├── ActionButtons{EXT}(动态操作按钮组)
|
|
511
564
|
│ └── usePagination.ts(分页管理 Hook)
|
|
512
565
|
|
|
513
|
-
Phase 3
|
|
514
|
-
├── [TDD]
|
|
515
|
-
├──
|
|
516
|
-
|
|
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
|
|
573
|
+
├── E2E 端到端测试(核心业务流程)
|
|
551
574
|
├── 路由守卫完善(角色→菜单可见性+路由访问控制)
|
|
552
575
|
├── i18n 文案(zh-CN + en-US 两种语言)
|
|
553
576
|
├── 前端编码规范 12 条合规检查
|
|
554
577
|
├── 性能优化(路由懒加载/图表按需引入/API 防抖/乐观锁重试)
|
|
555
|
-
├── npm run 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
|
|
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
|
-
- [ ]
|
|
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
|
-
| §用户输入 | 表单字段/校验规则/交互反馈 |
|
|
648
|
+
| §用户输入 | 表单字段/校验规则/交互反馈 | 表单组件声明式校验 + Hook | Phase 4, 6 |
|
|
609
649
|
| §错误处理 | 错误码→用户提示→展示方式映射表 | errorHandler.ts + i18n | Phase 2, 9 |
|
|
610
|
-
| §状态管理 |
|
|
650
|
+
| §状态管理 | Store 名称/state/actions/getters(方法) | Store 实现 | Phase 3~8 |
|
|
611
651
|
| §US→FSD 对齐表 | US ID → 功能 → 组件/Store/API 文件 | 任务完整性验证 + 故事分组 | 全局 |
|