2
0
Эх сурвалжийг харах

✨ feat(文档): 更新系统测试优化史诗和故事文档

- 更新史诗009文档,将验收标准标记为已完成并更新状态为进行中
- 更新故事009.001文档,添加任务完成记录和优化实现说明
- 新增故事009.002文档,定义邮箱输入优化需求
yourname 1 долоо хоног өмнө
parent
commit
df40c26d87

+ 4 - 4
docs/prd/epic-009-system-test-optimization.md

@@ -32,9 +32,9 @@
 **以便** 简化操作流程,提高工作效率
 
 **验收标准:**
-- [ ] 区域选择组件支持只选择到市级
-- [ ] 区县字段不再设为必选项
-- [ ] 现有数据兼容性保持
+- [x] 区域选择组件支持只选择到市级
+- [x] 区县字段不再设为必选项
+- [x] 现有数据兼容性保持
 
 **技术说明:**
 - 页面路径:平台管理 > 薪资管理 > 添加薪资 > 区域选择
@@ -196,4 +196,4 @@
 ---
 
 *史诗创建时间: 2025-12-09*
-*状态: 待开发*
+*状态: 进行中 (1/9 故事完成)*

+ 17 - 5
docs/stories/009.001.story.md

@@ -22,6 +22,11 @@ Ready for Review
   - [x] 检查allin-packages/salary-management-ui/src/components/SalaryManagement.tsx中AreaSelect组件的使用
   - [x] 确保required参数传递正确
   - [x] 验证表单提交时区县字段可为空
+- [x] 优化薪资管理表单的地区选择实现 (AC: 1, 2)
+  - [x] 将创建表单中的AreaSelect替换为AreaSelectForm
+  - [x] 将编辑表单中的静态显示替换为AreaSelectForm
+  - [x] 清理不再需要的状态同步逻辑
+  - [x] 更新AreaSelectForm组件,添加根元素data-testid支持
 - [x] 验证后端schema兼容性 (AC: 3)
   - [x] 检查allin-packages/salary-module/src/schemas/salary.schema.ts中的CreateSalarySchema和UpdateSalarySchema
   - [x] 确认districtId字段已经是optional
@@ -140,18 +145,25 @@ d8d-model
 ### Completion Notes List
 1. 修改了AreaSelect组件,移除了区县字段的必填标记显示逻辑
 2. 验证了薪资管理UI包中AreaSelect组件的使用正确,required参数传递正确
-3. 验证了后端schema兼容性:districtId字段已经是optional和nullable
-4. 添加了AreaSelect组件的单元测试,验证区县字段不为必填
-5. 添加了薪资管理表单的集成测试,验证区县字段可为空的表单提交
-6. 所有测试通过,无回归问题
+3. 优化了薪资管理表单的地区选择实现:
+   - 将创建表单中的AreaSelect替换为AreaSelectForm,实现更好的表单集成
+   - 将编辑表单中的静态显示替换为AreaSelectForm,支持编辑时修改地区信息
+   - 清理了不再需要的状态同步逻辑,简化了代码
+   - 更新了AreaSelectForm组件,添加根元素data-testid支持
+4. 验证了后端schema兼容性:districtId字段已经是optional和nullable
+5. 添加了AreaSelect组件的单元测试,验证区县字段不为必填
+6. 添加了薪资管理表单的集成测试,验证区县字段可为空的表单提交
+7. 所有测试通过,无回归问题
 
 ### File List
-- packages/area-management-ui/src/components/AreaSelect.tsx
+- packages/area-management-ui/src/components/areas/composite/AreaSelect.tsx
+- packages/area-management-ui/src/components/areas/composite/AreaSelectForm.tsx
 - allin-packages/salary-management-ui/src/components/SalaryManagement.tsx
 - allin-packages/salary-module/src/schemas/salary.schema.ts
 - allin-packages/salary-module/src/entities/salary-level.entity.ts
 - packages/area-management-ui/tests/unit/AreaSelect.test.tsx
 - allin-packages/salary-management-ui/tests/integration/salary.integration.test.tsx
+- allin-packages/salary-management-ui/tests/integration/salary-area-select.integration.test.tsx
 
 ## QA Results
 *此部分由QA代理在审查期间填写*

+ 128 - 0
docs/stories/009.002.story.md

@@ -0,0 +1,128 @@
+# Story 009.002: 邮箱输入优化
+
+## Status
+Draft
+
+## Story
+**As a** 平台管理员
+**I want** 邮箱字段改为非必要输入项
+**so that** 在不需要邮箱的场景下快速完成平台相关操作
+
+## Acceptance Criteria
+1. 所有平台管理相关页面的邮箱字段改为非必填
+2. 表单验证规则更新
+3. 后端API支持邮箱为空
+
+## Tasks / Subtasks
+- [ ] 更新平台管理前端表单验证 (AC: 1, 2)
+  - [ ] 检查allin-packages/platform-management-ui/src/components/PlatformManagement.tsx中的表单配置
+  - [ ] 验证contactEmail字段的FormLabel没有红色星号标记
+  - [ ] 确保表单提交时邮箱字段可为空
+- [ ] 更新平台模块后端schema验证 (AC: 2, 3)
+  - [ ] 修改allin-packages/platform-module/src/schemas/platform.schema.ts中的CreatePlatformSchema
+  - [ ] 移除contactEmail字段的.email()验证,改为普通字符串验证
+  - [ ] 确保contactEmail字段保持.optional()状态
+  - [ ] 修改UpdatePlatformSchema中的contactEmail字段验证
+- [ ] 验证数据库兼容性 (AC: 3)
+  - [ ] 检查allin-packages/platform-module/src/entities/platform.entity.ts中contactEmail字段为nullable: true
+  - [ ] 验证现有数据可以正常读取和更新
+- [ ] 编写单元测试 (AC: 1, 2, 3)
+  - [ ] 为平台管理表单添加测试,验证邮箱字段可为空的表单提交
+  - [ ] 为平台schema添加测试,验证邮箱字段验证规则
+  - [ ] 添加集成测试验证端到端功能
+- [ ] 执行回归测试 (AC: 3)
+  - [ ] 测试现有平台数据的显示和编辑功能
+  - [ ] 验证API响应格式不变
+  - [ ] 确保其他字段验证不受影响
+
+## Dev Notes
+
+### 技术架构信息
+**前端技术栈**:
+- React 19.1.0 + TypeScript [Source: architecture/tech-stack.md#前端框架]
+- UI组件库: shadcn/ui (基于Radix UI) [Source: architecture/component-architecture.md#技术栈配置]
+- 状态管理: @tanstack/react-query (服务端状态) + Context (本地状态) [Source: architecture/component-architecture.md#技术栈配置]
+- 构建工具: Vite 7.0.0 [Source: architecture/tech-stack.md#构建工具]
+
+**项目结构**:
+- 平台管理UI包: `allin-packages/platform-management-ui` [Source: 实际项目结构检查]
+- 平台模块: `allin-packages/platform-module` [Source: 实际项目结构检查]
+
+### 组件规范
+**UI包开发规范**:
+- 必须遵循[UI包开发规范](./ui-package-standards.md) [Source: architecture/coding-standards.md#UI包开发提示]
+- API路径映射验证:开发前必须验证故事中的API路径映射与实际后端路由定义的一致性 [Source: architecture/coding-standards.md#关键检查点]
+- 类型推断最佳实践:必须使用RPC推断类型,而不是直接导入schema类型 [Source: architecture/coding-standards.md#关键检查点]
+- 测试选择器优化:必须为关键交互元素添加`data-testid`属性 [Source: architecture/coding-standards.md#关键检查点]
+
+### 现有实现分析
+**平台管理表单现状**:
+- 文件位置: `allin-packages/platform-management-ui/src/components/PlatformManagement.tsx:395-406`
+- 当前表单字段:contactEmail字段有FormLabel但没有红色星号标记
+- 表单验证:使用CreatePlatformSchema和UpdatePlatformSchema进行验证
+
+**平台schema现状**:
+- 创建DTO: `allin-packages/platform-module/src/schemas/platform.schema.ts:53` - `contactEmail`字段有`.email()`验证和`.optional()`
+- 更新DTO: `allin-packages/platform-module/src/schemas/platform.schema.ts:77` - `contactEmail`字段有`.email()`验证和`.optional()`
+- 数据库实体: `allin-packages/platform-module/src/entities/platform.entity.ts:47` - `contactEmail`字段为`nullable: true`
+
+**问题分析**:
+当前schema中contactEmail字段有`.email()`验证,这意味着如果用户输入邮箱,必须是有效的邮箱格式。根据故事要求,需要移除`.email()`验证,允许任意字符串或空值。
+
+### 文件位置参考
+1. **平台管理组件**: `allin-packages/platform-management-ui/src/components/PlatformManagement.tsx`
+2. **平台schema**: `allin-packages/platform-module/src/schemas/platform.schema.ts`
+3. **平台实体**: `allin-packages/platform-module/src/entities/platform.entity.ts`
+
+### 技术约束
+- 保持向后兼容性:现有数据必须能正常显示和编辑
+- API兼容性:不能修改现有API的请求/响应格式
+- 数据库兼容性:`contactEmail`字段已经是`nullable: true`,无需修改数据库结构
+
+### 测试
+**测试策略**:
+- 单元测试:使用Vitest框架 [Source: architecture/testing-strategy.md#单元测试]
+- 组件测试:使用Testing Library [Source: architecture/testing-strategy.md#单元测试]
+- 测试位置:`__tests__`文件夹与源码并列 [Source: architecture/coding-standards.md#测试位置]
+
+**测试要求**:
+- 覆盖率目标:核心业务逻辑 > 80% [Source: architecture/coding-standards.md#覆盖率目标]
+- 测试类型:单元测试、集成测试 [Source: architecture/coding-standards.md#测试类型]
+- 错误处理:测试各种错误场景和边界条件 [Source: architecture/coding-standards.md#错误处理]
+
+**具体测试场景**:
+1. 平台表单:验证提交时邮箱字段可为空
+2. 平台表单:验证提交时邮箱字段可为任意字符串(非邮箱格式)
+3. 数据兼容性:验证现有含邮箱数据的显示和编辑
+4. schema验证:验证新的验证规则接受空值和任意字符串
+
+## Testing
+### 测试标准
+- **测试框架**: Vitest + Testing Library [Source: architecture/tech-stack.md#新技术添加]
+- **测试位置**: `__tests__`文件夹与源码并列 [Source: architecture/coding-standards.md#测试位置]
+- **覆盖率要求**: 核心业务逻辑 > 80% [Source: architecture/coding-standards.md#覆盖率目标]
+
+### 组件测试要求
+- 必须为关键交互元素添加`data-testid`属性 [Source: architecture/coding-standards.md#关键检查点]
+- 测试平台管理表单在邮箱字段为空时的提交行为
+- 测试平台管理表单在邮箱字段为任意字符串时的提交行为
+
+### 集成测试要求
+- 测试平台管理表单的完整提交流程
+- 验证邮箱字段为空的表单提交
+- 验证邮箱字段为任意字符串的表单提交
+- 测试现有数据的兼容性
+
+### 测试文件位置
+1. 平台管理测试: `allin-packages/platform-management-ui/tests/integration/platform-management.integration.test.tsx`
+
+## Change Log
+| Date | Version | Description | Author |
+|------|---------|-------------|--------|
+| 2025-12-10 | 1.0 | 初始故事创建 | Scrum Master Bob |
+
+## Dev Agent Record
+*此部分由开发代理在实施期间填写*
+
+## QA Results
+*此部分由QA代理在审查期间填写*