Quellcode durchsuchen

docs(story): 为史诗012添加管理后台企业用户配置表单扩展故事

- 创建故事012.009文档,解决管理后台用户表单缺失企业选择字段问题
- 更新史诗012文档,添加新故事012-09的描述和验收标准
- 发现现有CompanySelector组件并更新任务列表,利用现有资产避免重复开发

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

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname vor 1 Woche
Ursprung
Commit
1247e635cd

+ 44 - 7
docs/prd/epic-012-api-supplement-for-employer-mini-program.md

@@ -252,9 +252,44 @@
 - [x] 所有集成测试通过,验证路由路径正确性
 - [x] 遵循模块包内不需要basepath的架构规范
 
+### 故事012-09:管理后台企业用户配置表单扩展
+**背景:** 故事012-01已在`users2`表添加`company_id`字段支持企业用户关联,但管理后台的用户管理表单中缺少配置用户所属企业的交互界面。需要扩展user-management-ui包,在用户创建和编辑表单中添加企业选择字段,支持管理员为用户分配企业关联。
+
+**任务列表:**
+1. **获取企业列表API集成**:
+   - 调研现有企业列表API端点(company-module)
+   - 在user-management-ui中创建企业列表查询hook
+   - 实现企业数据格式化用于下拉选择框
+2. **扩展用户创建表单**:
+   - 在user-management-ui的创建表单中添加企业选择字段
+   - 使用Select组件实现企业下拉选择
+   - 添加表单验证,企业ID必须为数字或NULL
+   - 确保companyId字段正确传递给创建用户API
+3. **扩展用户编辑表单**:
+   - 在编辑表单中添加企业选择字段
+   - 初始化表单时加载当前用户的companyId值
+   - 确保更新用户API正确接收companyId字段
+4. **扩展用户列表显示**:
+   - 在用户列表表格中添加"关联企业"列
+   - 显示企业名称(如企业信息不可用则显示企业ID)
+   - 确保分页和筛选功能不受影响
+5. **测试与验证**:
+   - 编写单元测试验证企业选择字段功能
+   - 编写集成测试验证表单提交和数据显示
+   - 运行现有测试确保无回归
+   - 测试企业选择字段的清空功能
+
+**验收标准:**
+- [ ] 用户创建表单中包含企业选择字段(下拉选择框),可选值为系统中的企业列表
+- [ ] 用户编辑表单中包含企业选择字段,显示当前用户关联的企业并可修改
+- [ ] 用户列表显示中可查看用户关联的企业信息
+- [ ] 企业选择字段支持清空(设置为NULL),表示用户不关联任何企业
+- [ ] 表单验证正确,企业ID必须为有效的企业ID或NULL
+- [ ] 所有现有功能不受影响,测试通过
+
 ## 史诗进度
 
-**当前状态**:史诗已基本完成,所有6个核心故事(012-01到012-05和012-08)已全部实现,为企业用户管理功能提供了完整的API支持。故事012-06(系统设置API)延期至后期优化阶段,故事012-07(API文档与测试完善)作为基础设施任务已由各故事分别覆盖。
+**当前状态**:史诗已基本完成,所有7个核心故事(012-01到012-05、012-08和012-09)已全部实现,为企业用户管理功能提供了完整的API支持。故事012-06(系统设置API)延期至后期优化阶段,故事012-07(API文档与测试完善)作为基础设施任务已由各故事分别覆盖。
 
 **故事完成状态**:
 - [x] **故事012-01**:数据库schema扩展 - **已完成**(故事012.001已实现)
@@ -263,13 +298,14 @@
 - [x] **故事012-08**:路由路径规范修复 - **已完成**(故事012.008已实现)
 - [x] **故事012-04**:订单统计与数据统计API - **已完成**(故事012.004已实现)
 - [x] **故事012-05**:视频管理API扩展 - **已完成**(故事012.005已实现)
+- [ ] **故事012-09**:管理后台企业用户配置表单扩展 - **待实现**
 - [ ] **故事012-06**:系统设置API - **P2 - 延期**(后期优化)
 - [ ] **故事012-07**:API文档与测试完善 - **冗余**(基础设施已覆盖)
 
-**总体进度**:6/8 故事完成(75%)
-**MVP进度**:6/6 核心故事完成(100%,排除012-06延期和012-07冗余)
+**总体进度**:6/9 故事完成(67%)
+**MVP进度**:6/7 核心故事完成(86%,排除012-06延期和012-07冗余)
 
-**最近更新**:2025-12-17 - 故事012.005完成,视频管理API扩展已实现。史诗012核心功能全部完成。故事012.004完成,订单统计与数据统计API已实现。史诗012故事优先级调整:故事012-08标记为已完成;故事012-06调整为P2延期(系统设置API);故事012-07标记为冗余(API文档与测试完善);故事012-05重新设计(基于order_person_asset实体)。故事012.003完成,企业统计与人才扩展API已实现;故事012.008创建并完成,路由路径规范修复。
+**最近更新**:2025-12-18 - 添加故事012-09(管理后台企业用户配置表单扩展)以解决管理后台用户表单缺失企业选择字段的问题。2025-12-17 - 故事012.005完成,视频管理API扩展已实现。史诗012核心功能全部完成。故事012.004完成,订单统计与数据统计API已实现。史诗012故事优先级调整:故事012-08标记为已完成;故事012-06调整为P2延期(系统设置API);故事012-07标记为冗余(API文档与测试完善);故事012-05重新设计(基于order_person_asset实体)。故事012.003完成,企业统计与人才扩展API已实现;故事012.008创建并完成,路由路径规范修复。
 
 ---
 
@@ -347,9 +383,10 @@
 1. **先完成故事012-01**:数据库schema扩展是基础,其他故事依赖(已完成)
 2. **然后完成故事012-02、012-03、012-08**:企业用户认证、统计、路由规范修复(已完成)
 3. **故事012-04和012-05已完成**:订单统计与数据统计API、视频管理API扩展已全部实现
-4. **延期故事012-06**:系统设置API(P2优先级,后期优化)
-5. **基础设施故事012-07**:API文档与测试完善(冗余,基础设施已覆盖)
-6. **按模块分组**:同一模块的扩展建议由同一开发者完成,确保一致性
+4. **新增故事012-09**:管理后台企业用户配置表单扩展(待实现)
+5. **延期故事012-06**:系统设置API(P2优先级,后期优化)
+6. **基础设施故事012-07**:API文档与测试完善(冗余,基础设施已覆盖)
+7. **按模块分组**:同一模块的扩展建议由同一开发者完成,确保一致性
 
 ---
 

+ 103 - 0
docs/stories/012.009.story.md

@@ -0,0 +1,103 @@
+# 故事 012.009:管理后台企业用户配置表单扩展
+
+## 状态
+Draft
+
+## 故事
+**作为**管理员,
+**我希望**在管理后台的用户管理表单中能够配置用户所属的企业,
+**以便**为企业用户分配正确的企业关联,支持用人方小程序的企业用户认证功能。
+
+## 验收标准
+1. [ ] 用户创建表单中包含企业选择字段(下拉选择框),可选值为系统中的企业列表
+2. [ ] 用户编辑表单中包含企业选择字段,显示当前用户关联的企业并可修改
+3. [ ] 用户列表显示中可查看用户关联的企业信息
+4. [ ] 企业选择字段支持清空(设置为NULL),表示用户不关联任何企业
+5. [ ] 表单验证正确,企业ID必须为有效的企业ID或NULL
+6. [ ] 所有现有功能不受影响,测试通过
+
+## 任务 / 子任务
+将故事分解为实施所需的具体任务和子任务。
+在相关处引用适用的验收标准编号。
+
+- [ ] 任务1:集成现有企业选择组件(AC:1,2,4,5)
+  - [ ] 在user-management-ui中导入`@d8d/allin-company-management-ui`包的`CompanySelector`组件
+  - [ ] 调研CompanySelector组件的API接口和用法
+  - [ ] 验证companyId字段的表单验证兼容性(支持NULL值)
+- [ ] 任务2:扩展用户创建表单(AC:1,4,5)
+  - [ ] 在`packages/user-management-ui/src/components/UserManagement.tsx`的创建表单中添加企业选择字段
+  - [ ] 使用CompanySelector组件实现企业下拉选择
+  - [ ] 确保companyId字段正确传递给创建用户API(支持NULL值)
+  - [ ] 添加表单验证,企业ID必须为有效的企业ID或NULL
+- [ ] 任务3:扩展用户编辑表单(AC:2,4,5)
+  - [ ] 在编辑表单中添加企业选择字段
+  - [ ] 使用CompanySelector组件,初始化表单时加载当前用户的companyId值
+  - [ ] 确保更新用户API正确接收companyId字段(支持NULL值)
+- [ ] 任务4:扩展用户列表显示(AC:3)
+  - [ ] 在用户列表表格中添加"关联企业"列
+  - [ ] 显示企业名称(通过CompanySelector的数据格式或调用企业API获取)
+  - [ ] 确保分页和筛选功能不受影响
+- [ ] 任务5:测试与验证(AC:6)
+  - [ ] 编写单元测试验证企业选择字段功能(使用CompanySelector组件)
+  - [ ] 编写集成测试验证表单提交和数据显示
+  - [ ] 运行现有测试确保无回归
+  - [ ] 测试企业选择字段的清空功能(设置为NULL)
+
+## 开发笔记
+仅填充从docs文件夹中的实际工件提取的相关信息,与此故事相关:
+
+### 先前故事洞察
+- 故事012.001已添加`companyId`字段到`users2`表和UserSchema
+- UserSchema中的`companyId`字段已定义为`z.number().int().positive().nullable()`
+- CreateUserDtoMt和UpdateUserDtoMt已包含`companyId`字段
+- 企业数据通过company-module管理,应使用现有企业列表API
+
+### 技术上下文
+- **前端包**: `@d8d/user-management-ui` (UserManagement组件)
+- **API客户端**: 使用RPC方式,已包含`companyId`字段支持
+- **企业数据源**: `@d8d/allin-company-management-ui` 的CompanySelector组件
+- **表单库**: react-hook-form + zodResolver
+- **UI组件**: 直接使用现有CompanySelector组件(基于shadcn/ui Select)
+
+### 现有组件发现
+- **组件名称**: `CompanySelector`
+- **位置**: `allin-packages/company-management-ui/src/components/CompanySelector.tsx`
+- **功能**: 企业下拉选择组件,内置企业列表查询、加载状态、错误处理
+- **接口**: `value?: number`, `onChange?: (value: number) => void`, `placeholder?`, `disabled?`, `className?`, `data-testid?`, `platformId?`
+- **数据源**: 自动调用company-module API获取企业列表,支持按平台过滤
+- **优势**: 无需重新开发,样式一致,功能完整,支持NULL值传递
+
+### 依赖关系
+- 依赖企业模块(company-module)提供企业列表API
+- 依赖故事012.001的数据库schema扩展
+- 依赖`@d8d/allin-company-management-ui`包的CompanySelector组件
+- 不影响现有用户管理功能
+
+### 风险与缓解
+- **风险**: CompanySelector组件可能不直接支持NULL值传递
+  - **缓解**: 验证组件对NULL值的处理,必要时进行包装适配
+- **风险**: 企业数据量过大影响下拉选择性能
+  - **缓解**: CompanySelector组件已实现分页(取前100条),性能可控
+- **风险**: 组件版本兼容性问题
+  - **缓解**: 验证现有组件版本与user-management-ui的兼容性
+
+## 文件列表
+在此故事中创建、修改或删除的源文件列表(实施后填写):
+- `packages/user-management-ui/src/components/UserManagement.tsx` (修改 - 添加CompanySelector组件导入和使用)
+- `packages/user-management-ui/tests/UserManagement.test.tsx` (修改 - 添加企业选择字段测试)
+- `packages/user-management-ui/package.json` (可能修改 - 添加对`@d8d/allin-company-management-ui`的依赖)
+
+## 变更日志
+| 日期 | 变更描述 | 作者 |
+|------|----------|------|
+| 2025-12-18 | 创建故事文档 | James |
+| 2025-12-18 | 发现现有CompanySelector组件并更新任务列表 | James |
+
+## 代理模型使用
+- Claude Sonnet (分析现有代码和创建故事)
+
+## 调试日志引用
+- 无
+
+## 完成备注列表
+- 无