# Story 12.1: user-page-object - 用户管理 Page Object Status: done ## Story 作为测试开发者, 我想要扩展用户管理 Page Object 以支持企业用户和人才用户的创建, 以便为 Epic 12 的用户管理和小程序登录测试提供基础的 Page Object 能力。 ## Acceptance Criteria 1. **扩展 UserManagementPage 支持 EMPLOYER 类型用户** - 添加 `createEmployerUser` 方法,支持创建企业用户 - 方法接收 `username`, `password`, `companyId` 以及可选的 `phone`, `email`, `nickname`, `name` - 在表单中选择用户类型为"企业用户" - 使用 Radix UI Select 选择公司 2. **扩展 UserManagementPage 支持 TALENT 类型用户** - 添加 `createTalentUser` 方法,支持创建人才用户 - 方法接收 `username`, `password`, `personId` 以及可选的 `phone`, `email`, `nickname`, `name` - 在表单中选择用户类型为"人才用户" - 使用 Radix UI Select 选择残疾人 3. **保持向后兼容** - 现有的 `createUser` 方法保持不变(默认创建 ADMIN 用户) - 所有现有测试继续通过 4. **类型安全** - 导出 `EmployerUserData` 和 `TalentUserData` 接口 - 使用 TypeScript 严格类型检查 5. **错误处理** - 当公司或残疾人不存在时,正确捕获并报告错误 - 表单验证失败时提供清晰的错误信息 ## Tasks / Subtasks - [ ] 任务 1: 分析用户管理表单结构 (AC: 1, 2) - [ ] 1.1 查看 web 端用户管理 UI 组件,确定表单字段和选择器 - [ ] 1.2 确认用户类型选择器(Radix UI Select) - [ ] 1.3 确认公司选择器(Radix UI Select) - [ ] 1.4 确认残疾人选择器(Radix UI Select) - [ ] 任务 2: 扩展 UserManagementPage 类型定义 (AC: 4) - [ ] 2.1 添加 `EmployerUserData` 接口 - [ ] 2.2 添加 `TalentUserData` 接口 - [ ] 2.3 导出 `UserType` 常量(参考 `@d8d/shared-types`) - [ ] 任务 3: 实现 `createEmployerUser` 方法 (AC: 1) - [ ] 3.1 点击"创建用户"按钮 - [ ] 3.2 选择用户类型为"企业用户" - [ ] 3.3 填写必填字段(用户名、密码、公司) - [ ] 3.4 填写可选字段(手机号、邮箱、昵称、真实姓名) - [ ] 3.5 使用 `selectRadixOptionAsync` 选择公司 - [ ] 3.6 提交表单并等待结果 - [ ] 任务 4: 实现 `createTalentUser` 方法 (AC: 2) - [ ] 4.1 点击"创建用户"按钮 - [ ] 4.2 选择用户类型为"人才用户" - [ ] 4.3 填写必填字段(用户名、密码、残疾人) - [ ] 4.4 填写可选字段(手机号、邮箱、昵称、真实姓名) - [ ] 4.5 使用 `selectRadixOptionAsync` 选择残疾人 - [ ] 4.6 提交表单并等待结果 - [ ] 任务 5: 添加辅助方法 (AC: 5) - [ ] 5.1 添加 `selectUserType` 方法(选择用户类型) - [ ] 5.2 添加 `selectCompany` 方法(选择公司) - [ ] 5.3 添加 `selectPerson` 方法(选择残疾人) - [ ] 5.4 添加错误处理逻辑 - [ ] 任务 6: 编写单元测试验证 Page Object (AC: 3, 5) - [ ] 6.1 验证 `createEmployerUser` 方法正确调用 - [ ] 6.2 验证 `createTalentUser` 方法正确调用 - [ ] 6.3 验证错误处理逻辑 - [ ] 任务 7: 运行现有测试确保向后兼容 (AC: 3) - [ ] 7.1 运行 `users.spec.ts` 所有测试通过 - [ ] 7.2 确认无破坏性变更 ## Dev Notes ### 架构模式 **Page Object 模式** - 文件位置: `web/tests/e2e/pages/admin/user-management.page.ts` - 现有实现已支持基础用户 CRUD - 需要扩展以支持多类型用户创建 **Radix UI Select 集成** - 用户类型、公司、残疾人选择器使用 Radix UI Select 组件 - 使用 `@d8d/e2e-test-utils` 的 `selectRadixOptionAsync` 工具函数 - 参考: `packages/e2e-test-utils/src/select.ts` **依赖的测试数据** - Epic 11 已完成,有 Company 和 Platform 数据可用 - 需要预先创建残疾人数据(可使用 Epic 9 的测试数据) ### 用户类型定义 **来自 `packages/shared-types/src/index.ts`:** ```typescript export enum UserType { ADMIN = 'admin', // 管理员 EMPLOYER = 'employer', // 企业用户 TALENT = 'talent' // 人才用户 } export const TypeNameMap: Record = { [UserType.ADMIN]: '管理员', [UserType.EMPLOYER]: '企业用户', [UserType.TALENT]: '人才用户' }; ``` **创建用户 Schema** (来自 `packages/core-module/user-module/src/schemas/user.schema.ts`): - 企业用户必须字段: `username`, `password`, `companyId` - 人才用户必须字段: `username`, `password`, `personId` - 可选字段: `phone`, `email`, `nickname`, `name`, `avatarFileId`, `isDisabled` ### 项目结构说明 **对齐统一项目结构** - Page Objects 位置: `web/tests/e2e/pages/admin/` - 测试 Fixtures 位置: `web/tests/e2e/fixtures/` - 测试 Specs 位置: `web/tests/e2e/specs/admin/` **测试标准参考** - Page Object 设计参考 `company-management.page.ts` - Select 工具使用参考 `company-create.spec.ts` ### 技术约束 **TypeScript 配置** - 目标: ES2020+ - 严格类型检查,禁止 `any` 类型 **Playwright 配置** - 超时设置: 参考 `TIMEOUTS` 常量 - 测试隔离: 每个测试独立运行,不共享状态 **依赖包** - `@d8d/e2e-test-utils`: 提供测试工具函数 - `@playwright/test`: E2E 测试框架 ## References - **Epic 12 定义**: `_bmad-output/planning-artifacts/epics.md` (第 2383-2425 行) - **PRD**: `_bmad-output/planning-artifacts/prd.md` - **Architecture**: `_bmad-output/planning-artifacts/architecture.md` - **User Schema**: `packages/core-module/user-module/src/schemas/user.schema.ts` - **UserType 定义**: `packages/shared-types/src/index.ts` (第 56-67 行) - **现有 Page Object**: `web/tests/e2e/pages/admin/user-management.page.ts` - **参考 Page Object**: `web/tests/e2e/pages/admin/company-management.page.ts` - **Select 工具**: `packages/e2e-test-utils/src/select.ts` - **现有用户测试**: `web/tests/e2e/specs/admin/users.spec.ts` ## Dev Agent Record ### Agent Model Used Claude Opus 4.5 (model ID: 'claude-opus-4-5-20251101') ### Debug Log References 无(开发过程中记录) ### Completion Notes List 无(开发过程中记录) ### File List 主要文件: - `web/tests/e2e/pages/admin/user-management.page.ts` (主要修改文件) - `web/tests/e2e/specs/admin/users.spec.ts` (现有测试,确保通过) - `web/tests/e2e/fixtures/test-users.json` (测试用户数据)