Browse Source

docs(story-008.004): 添加薪资选择器组件任务

- 添加AC 8:创建薪资选择器组件供其他UI包调用
- 基于订单管理模块需求分析,确认有薪资选择器需求
- 添加任务5:创建薪资选择器组件
- 添加薪资选择器组件设计说明和测试要求
- 更新Change Log版本为1.1

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 week ago
parent
commit
b6c99bf99a
1 changed files with 75 additions and 5 deletions
  1. 75 5
      docs/stories/008.004.transplant-salary-management-ui.story.md

+ 75 - 5
docs/stories/008.004.transplant-salary-management-ui.story.md

@@ -16,8 +16,9 @@ Draft
 5. 完成状态管理转换:数值计算状态
 6. 完成表单转换:复杂数值验证
 7. 配置package.json:依赖`@d8d/area-management-ui`
-8. 编写组件测试:验证数值计算和验证
-9. 通过类型检查和基本测试验证
+8. **创建薪资选择器组件**:作为可复用组件供其他UI包调用,支持按区域查询薪资
+9. 编写组件测试:验证数值计算和验证
+10. 通过类型检查和基本测试验证
 
 **集成测试要求**:
 - 测试文件:`tests/integration/salary.integration.test.tsx`
@@ -31,6 +32,14 @@ Draft
 - 表单验证包含区域ID验证
 - 测试区域选择功能
 
+**薪资选择器组件要求**:
+- 组件文件:`src/components/SalarySelector.tsx`
+- 功能:根据区域选择(省份、城市)查询并显示薪资水平
+- 集成:与`AreaSelect`组件配合使用,支持区域选择后自动查询薪资
+- 导出:作为可复用组件供其他UI包(如订单管理UI)调用
+- 测试文件:`tests/integration/salary-selector.integration.test.tsx`
+- 测试覆盖:区域选择、薪资查询、错误处理、组件复用
+
 ## Tasks / Subtasks
 - [ ] 任务1:创建薪资管理UI包基础结构 (AC: 1, 7)
   - [ ] 创建目录:`allin-packages/salary-management-ui/`
@@ -62,18 +71,29 @@ Draft
   - [ ] 集成数值计算逻辑:基本工资、津贴、保险、公积金等计算
   - [ ] 实现复杂数值验证:正数验证、范围验证等
 
-- [ ] 任务5:编写集成测试 (AC: 8)
-  - [ ] 创建测试文件:`tests/integration/salary.integration.test.tsx`
+- [ ] 任务5:创建薪资选择器组件 (AC: 8)
+  - [ ] 分析订单管理模块中的薪资选择需求:查看`allin_system-master/client/app/admin/dashboard/order/OrderDetailModal.tsx`和`AddOrderModal.tsx`
+  - [ ] 参考现有选择器组件模式:`allin-packages/platform-management-ui/src/components/PlatformSelector.tsx`
+  - [ ] 创建薪资选择器组件:`src/components/SalarySelector.tsx`
+  - [ ] 集成区域选择器:与`AreaSelect`组件配合,支持区域选择后自动查询薪资
+  - [ ] 实现薪资查询逻辑:调用`getByProvinceCity` API查询薪资水平
+  - [ ] 添加组件导出:在`src/components/index.ts`中导出`SalarySelector`组件
+
+- [ ] 任务6:编写集成测试 (AC: 9)
+  - [ ] 创建主测试文件:`tests/integration/salary.integration.test.tsx`
   - [ ] 实现完整CRUD流程测试:创建薪资 → 查询薪资列表 → 更新薪资 → 删除薪资
   - [ ] 实现区域选择器集成测试:验证省份→城市→区县三级联动
   - [ ] 实现数值计算测试:验证薪资计算逻辑
   - [ ] 实现错误处理测试:API错误、网络错误、验证错误
+  - [ ] 创建薪资选择器测试文件:`tests/integration/salary-selector.integration.test.tsx`
+  - [ ] 实现薪资选择器测试:区域选择、薪资查询、错误处理、组件复用
 
-- [ ] 任务6:验证和测试 (AC: 9)
+- [ ] 任务7:验证和测试 (AC: 10)
   - [ ] 运行`pnpm typecheck`确保无类型错误
   - [ ] 运行`pnpm test`确保所有集成测试通过
   - [ ] 验证区域选择器组件集成正常工作
   - [ ] 验证数值计算和表单验证功能
+  - [ ] 验证薪资选择器组件可被其他UI包导入使用
 
 ## Dev Notes
 
@@ -103,6 +123,10 @@ Draft
 
 ### 源系统文件路径
 - **需要移植的源文件**:`allin_system-master/client/app/admin/dashboard/salary/page.tsx`
+- **薪资选择器需求分析文件**:
+  - `allin_system-master/client/app/admin/dashboard/order/OrderDetailModal.tsx` - 使用`getSalaryByLocation`函数
+  - `allin_system-master/client/app/admin/dashboard/order/AddOrderModal.tsx` - 使用`getSalaryByLocation`函数
+  - `allin_system-master/client/app/admin/dashboard/order/orderService.ts` - `getSalaryByLocation`函数实现
 - **需要对照参考的文件**:
   - `allin-packages/platform-management-ui/src/components/PlatformManagement.tsx`
   - `allin-packages/platform-management-ui/src/api/platformClient.ts`
@@ -111,6 +135,9 @@ Draft
   - `allin-packages/company-management-ui/src/components/CompanyManagement.tsx`
   - `allin-packages/company-management-ui/src/api/companyClient.ts`
   - `allin-packages/company-management-ui/src/types/index.ts`
+- **选择器组件参考文件**:
+  - `allin-packages/platform-management-ui/src/components/PlatformSelector.tsx` - 平台选择器组件模式
+  - `allin-packages/company-management-ui/src/components/CompanySelector.tsx` - 公司选择器组件模式
 - **区域选择器组件文件**:
   - `packages/area-management-ui/src/components/AreaSelect.tsx`
   - `packages/area-management-ui/src/api/areaClient.ts`
@@ -154,6 +181,38 @@ Draft
 - **总额计算**:前端计算显示总额(基本工资 + 津贴 - 保险 - 公积金)
 - **表单验证**:使用Zod Schema进行数值范围验证
 
+### 薪资选择器组件设计
+- **组件目的**:供订单管理UI包使用,根据区域选择查询薪资水平
+- **功能需求**(基于订单管理模块分析):
+  1. 根据省份和城市查询薪资水平
+  2. 显示查询到的薪资详细信息(基本工资、津贴、保险、公积金、总额)
+  3. 支持手动调整薪资(订单模块中允许手动修改)
+  4. 集成区域选择器,支持区域选择后自动查询
+- **组件接口**:
+  ```typescript
+  interface SalarySelectorProps {
+    value?: {
+      provinceId?: number;
+      cityId?: number;
+      salary?: number; // 查询到的薪资或手动调整的薪资
+      salaryDetail?: SalaryLevel; // 完整的薪资详情(可选)
+    };
+    onChange?: (value: {
+      provinceId?: number;
+      cityId?: number;
+      salary?: number;
+      salaryDetail?: SalaryLevel;
+    }) => void;
+    disabled?: boolean;
+    allowManualAdjust?: boolean; // 是否允许手动调整薪资
+  }
+  ```
+- **实现要点**:
+  1. 使用`AreaSelect`组件进行区域选择
+  2. 区域选择后自动调用`getByProvinceCity` API查询薪资
+  3. 显示薪资详情,支持手动调整(如果允许)
+  4. 导出为可复用组件
+
 ### Testing
 **测试标准**:
 - **测试框架**:Vitest + Testing Library
@@ -174,10 +233,21 @@ Draft
 - 测试数值计算和验证逻辑
 - 覆盖各种错误场景
 
+**薪资选择器测试要求**:
+- **测试文件**:`tests/integration/salary-selector.integration.test.tsx`
+- **测试场景**:
+  1. 区域选择后自动查询薪资
+  2. 薪资详情显示正确性
+  3. 手动调整薪资功能(如果允许)
+  4. 错误处理:区域不存在、API错误等
+  5. 组件复用:验证其他UI包可以正确导入和使用
+- **参考测试**:`allin-packages/platform-management-ui/tests/integration/platform-selector.integration.test.tsx`
+
 ## Change Log
 | Date | Version | Description | Author |
 |------|---------|-------------|--------|
 | 2025-12-03 | 1.0 | 初始创建故事008.004 | Scrum Master Bob |
+| 2025-12-03 | 1.1 | 添加薪资选择器组件任务,基于订单管理模块需求分析 | Scrum Master Bob |
 
 ## Dev Agent Record
 *This section is populated by the development agent during implementation*