|
@@ -0,0 +1,462 @@
|
|
|
|
|
+# Story 13.9: 人才列表页完整验证
|
|
|
|
|
+
|
|
|
|
|
+Status: backlog
|
|
|
|
|
+
|
|
|
|
|
+<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
|
|
|
+
|
|
|
|
|
+## Story
|
|
|
|
|
+
|
|
|
|
|
+作为测试开发者,
|
|
|
|
|
+我想要验证企业小程序人才列表页的完整功能,
|
|
|
|
|
+以便确保用户能够正确查看、筛选和搜索人才信息,并且后台添加/编辑人员后能正确同步。
|
|
|
|
|
+
|
|
|
|
|
+## Acceptance Criteria
|
|
|
|
|
+
|
|
|
|
|
+### AC1: 人才列表基础功能验证
|
|
|
|
|
+**Given** 企业用户已登录小程序
|
|
|
|
|
+**When** 进入人才列表页
|
|
|
|
|
+**Then** 测试应验证以下功能:
|
|
|
|
|
+- 验证人才列表按预期加载
|
|
|
|
|
+- 验证人才卡片显示正确的姓名
|
|
|
|
|
+- 验证残疾类型显示正确(视力残疾、听力残疾、肢体残疾等)
|
|
|
|
|
+- 验证残疾等级显示正确(一级、二级、三级、四级)
|
|
|
|
|
+- 验证性别显示正确(男、女)
|
|
|
|
|
+- 验证年龄显示正确
|
|
|
|
|
+- 验证工作状态显示正确(未就业、待就业、已就业、已离职)
|
|
|
|
|
+
|
|
|
|
|
+### AC2: 人才状态筛选功能验证
|
|
|
|
|
+**Given** 人才列表页已加载
|
|
|
|
|
+**When** 使用人才状态筛选器
|
|
|
|
|
+**Then** 测试应验证以下场景:
|
|
|
|
|
+- 验证可以按工作状态筛选(未就业、待就业、已就业、已离职)
|
|
|
|
|
+- 验证可以按残疾类型筛选(视力残疾、听力残疾、肢体残疾等)
|
|
|
|
|
+- 验证可以按残疾等级筛选(一级、二级、三级、四级)
|
|
|
|
|
+- 验证筛选后列表只显示符合条件的人才
|
|
|
|
|
+- 验证筛选器状态切换正确
|
|
|
|
|
+- 验证重置筛选后显示所有人才
|
|
|
|
|
+- 验证后台更新状态后,小程序筛选结果正确
|
|
|
|
|
+
|
|
|
|
|
+### AC3: 人才卡片所有信息显示验证
|
|
|
|
|
+**Given** 人才列表显示多个人才
|
|
|
|
|
+**When** 查看人才卡片
|
|
|
|
|
+**Then** 测试应验证以下字段:
|
|
|
|
|
+- 姓名(name)正确显示
|
|
|
|
|
+- 残疾类型(disabilityType)正确显示
|
|
|
|
|
+- 残疾等级(disabilityLevel)正确显示
|
|
|
|
|
+- 性别(gender)正确显示
|
|
|
|
|
+- 年龄(age)正确显示
|
|
|
|
|
+- 工作状态(workStatus)正确显示
|
|
|
|
|
+- 身份证号(idCard)脱敏显示(如适用)
|
|
|
|
|
+- 联系电话(phone)脱敏显示(如适用)
|
|
|
|
|
+- 所属订单(orderName)正确显示(如已分配)
|
|
|
|
|
+- 验证所有字段在后台编辑后正确同步
|
|
|
|
|
+
|
|
|
|
|
+### AC4: 人才搜索功能验证
|
|
|
|
|
+**Given** 人才列表页已加载
|
|
|
|
|
+**When** 使用人才搜索功能
|
|
|
|
|
+**Then** 测试应验证以下场景:
|
|
|
|
|
+- 验证可以按姓名搜索
|
|
|
|
|
+- 验证可以按身份证号搜索(脱敏)
|
|
|
|
|
+- 验证可以按联系电话搜索(脱敏)
|
|
|
|
|
+- 验证搜索结果正确显示匹配的人才
|
|
|
|
|
+- 验证搜索后可以清除搜索条件
|
|
|
|
|
+- 验证搜索 + 筛选组合使用正确
|
|
|
|
|
+
|
|
|
|
|
+### AC5: 后台添加/编辑人员后人才列表同步验证
|
|
|
|
|
+**Given** 后台可以操作残疾人数据
|
|
|
|
|
+**When** 在后台添加或编辑人员信息
|
|
|
|
|
+**Then** 测试应验证以下场景:
|
|
|
|
|
+- 后台添加人员后,小程序人才列表显示新增人员
|
|
|
|
|
+- 后台修改人员姓名后,小程序列表显示更新后的姓名
|
|
|
|
|
+- 后台修改残疾类型后,小程序列表显示更新后的残疾类型
|
|
|
|
|
+- 后台修改残疾等级后,小程序列表显示更新后的残疾等级
|
|
|
|
|
+- 后台修改工作状态后,小程序列表显示更新后的工作状态
|
|
|
|
|
+- 后台分配人员到订单后,小程序列表显示所属订单
|
|
|
|
|
+- 验证所有更新在合理时间内同步(≤ 10 秒)
|
|
|
|
|
+
|
|
|
|
|
+### AC6: 分页功能验证(如适用)
|
|
|
|
|
+**Given** 人才列表包含多个人才
|
|
|
|
|
+**When** 人才数量超过单页显示数量
|
|
|
|
|
+**Then** 测试应验证以下功能:
|
|
|
|
|
+- 验证分页控件显示正确
|
|
|
|
|
+- 验证可以切换到下一页
|
|
|
|
|
+- 验证可以切换到上一页
|
|
|
|
|
+- 验证可以跳转到指定页
|
|
|
|
|
+- 验证分页后人才列表正确更新
|
|
|
|
|
+
|
|
|
|
|
+### AC7: 人才列表交互功能验证
|
|
|
|
|
+**Given** 人才列表已加载
|
|
|
|
|
+**When** 用户与人才列表交互
|
|
|
|
|
+**Then** 测试应验证以下功能:
|
|
|
|
|
+- 验证点击人才卡片跳转到人才详情页
|
|
|
|
|
+- 验证详情页显示正确的人才信息
|
|
|
|
|
+- 验证可以从详情页返回列表页
|
|
|
|
|
+- 验证列表页保持原有筛选和搜索状态
|
|
|
|
|
+
|
|
|
|
|
+### AC8: 代码质量标准
|
|
|
|
|
+**Given** 遵循项目测试规范
|
|
|
|
|
+**When** 编写测试代码
|
|
|
|
|
+**Then** 代码应符合以下标准:
|
|
|
|
|
+- 使用 TIMEOUTS 常量定义超时
|
|
|
|
|
+- 使用 data-testid 选择器(优先级高于文本选择器)
|
|
|
|
|
+- 测试文件命名:`talent-list-validation.spec.ts`
|
|
|
|
|
+- 完整的测试描述和注释
|
|
|
|
|
+- TypeScript 类型安全
|
|
|
|
|
+- 通过 `pnpm typecheck` 类型检查
|
|
|
|
|
+
|
|
|
|
|
+## Tasks / Subtasks
|
|
|
|
|
+
|
|
|
|
|
+### 阶段 1: EXPLORE - Playwright MCP 探索(RED 之前)
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务 0: Playwright MCP 探索验证**
|
|
|
|
|
+ - [ ] 0.1 启动子代理使用 Playwright MCP 手动验证人才列表页功能
|
|
|
|
|
+ - [ ] 0.2 记录验证的选择器(优先 data-testid,避免文本选择器)
|
|
|
|
|
+ - [ ] 0.3 记录人才卡片的所有字段(姓名、残疾类型、等级、性别、年龄等)
|
|
|
|
|
+ - [ ] 0.4 验证筛选和搜索功能的交互模式
|
|
|
|
|
+ - [ ] 0.5 记录数据同步时间(后台编辑后小程序更新时间)
|
|
|
|
|
+ - [ ] 0.6 生成测试代码骨架
|
|
|
|
|
+ - [ ] 0.7 将探索结果更新到本文档 Dev Notes
|
|
|
|
|
+
|
|
|
|
|
+### 阶段 2: RED - 编写测试(基于任务 0 的探索结果)
|
|
|
|
|
+
|
|
|
|
|
+- [ ] 任务 1: 创建人才列表验证测试文件 (AC: #8)
|
|
|
|
|
+ - [ ] 1.1 基于任务 0 的探索结果创建 `web/tests/e2e/specs/cross-platform/talent-list-validation.spec.ts`
|
|
|
|
|
+ - [ ] 1.2 配置测试 fixtures(enterpriseMiniPage)
|
|
|
|
|
+ - [ ] 1.3 添加测试前置条件(企业用户登录、测试人才数据)
|
|
|
|
|
+
|
|
|
|
|
+- [ ] 任务 2: 实现人才列表基础功能测试 (AC: #1, #7)
|
|
|
|
|
+ - [ ] 2.1 编写"人才列表加载并显示人才卡片"测试
|
|
|
|
|
+ - [ ] 2.2 编写"人才卡片显示所有字段"测试
|
|
|
|
|
+ - [ ] 2.3 编写"点击人才卡片跳转到详情页"测试
|
|
|
|
|
+ - [ ] 2.4 编写"从详情页返回列表页"测试
|
|
|
|
|
+
|
|
|
|
|
+- [ ] 任务 3: 实现人才状态筛选测试 (AC: #2)
|
|
|
|
|
+ - [ ] 3.1 编写"按工作状态筛选 - 未就业"测试
|
|
|
|
|
+ - [ ] 3.2 编写"按工作状态筛选 - 待就业"测试
|
|
|
|
|
+ - [ ] 3.3 编写"按工作状态筛选 - 已就业"测试
|
|
|
|
|
+ - [ ] 3.4 编写"按工作状态筛选 - 已离职"测试
|
|
|
|
|
+ - [ ] 3.5 编写"按残疾类型筛选"测试
|
|
|
|
|
+ - [ ] 3.6 编写"按残疾等级筛选"测试
|
|
|
|
|
+ - [ ] 3.7 编写"重置筛选显示所有人才"测试
|
|
|
|
|
+
|
|
|
|
|
+- [ ] 任务 4: 实现人才搜索测试 (AC: #4)
|
|
|
|
|
+ - [ ] 4.1 编写"按姓名搜索"测试
|
|
|
|
|
+ - [ ] 4.2 编写"按身份证号搜索"测试
|
|
|
|
|
+ - [ ] 4.3 编写"按联系电话搜索"测试
|
|
|
|
|
+ - [ ] 4.4 编写"清除搜索条件"测试
|
|
|
|
|
+ - [ ] 4.5 编写"搜索 + 筛选组合使用"测试
|
|
|
|
|
+
|
|
|
|
|
+### 阶段 3: GREEN - 实现代码(让测试通过)
|
|
|
|
|
+
|
|
|
|
|
+- [ ] 任务 5: 实现后台添加/编辑人员后人才列表同步测试 (AC: #3, #5)
|
|
|
|
|
+ - [ ] 5.1 编写"后台添加人员后小程序同步"测试
|
|
|
|
|
+ - [ ] 5.2 编写"后台修改人员姓名后小程序同步"测试
|
|
|
|
|
+ - [ ] 5.3 编写"后台修改残疾类型后小程序同步"测试
|
|
|
|
|
+ - [ ] 5.4 编写"后台修改残疾等级后小程序同步"测试
|
|
|
|
|
+ - [ ] 5.5 编写"后台修改工作状态后小程序同步"测试
|
|
|
|
|
+ - [ ] 5.6 编写"后台分配人员到订单后小程序同步"测试
|
|
|
|
|
+ - [ ] 5.7 验证数据同步时间(≤ 10 秒)
|
|
|
|
|
+
|
|
|
|
|
+- [ ] 任务 6: 实现分页功能测试 (AC: #6)(如适用)
|
|
|
|
|
+ - [ ] 6.1 编写"分页控件显示正确"测试
|
|
|
|
|
+ - [ ] 6.2 编写"切换到下一页"测试
|
|
|
|
|
+ - [ ] 6.3 编写"切换到上一页"测试
|
|
|
|
|
+ - [ ] 6.4 编写"跳转到指定页"测试
|
|
|
|
|
+
|
|
|
|
|
+### 阶段 4: REFACTOR - 优化代码质量
|
|
|
|
|
+
|
|
|
|
|
+- [ ] 任务 7: 验证代码质量 (AC: #8)
|
|
|
|
|
+ - [ ] 7.1 运行 `pnpm typecheck` 验证类型检查
|
|
|
|
|
+ - [ ] 7.2 运行测试确保所有测试通过
|
|
|
|
|
+ - [ ] 7.3 验证选择器使用 data-testid
|
|
|
|
|
+ - [ ] 7.4 优化测试执行时间
|
|
|
|
|
+
|
|
|
|
|
+## Dev Notes
|
|
|
|
|
+
|
|
|
|
|
+### Epic 13 背景和依赖
|
|
|
|
|
+
|
|
|
|
|
+**Epic 13: 跨端数据同步测试 (Epic E)**
|
|
|
|
|
+
|
|
|
|
|
+- **目标**: 验证后台操作后小程序端的数据同步,覆盖完整的业务流程
|
|
|
|
|
+- **业务分组**: Epic E(跨端数据同步测试)
|
|
|
|
|
+- **背景**: 真实用户旅程跨越管理后台和小程序,需要验证数据同步的正确性和时效性
|
|
|
|
|
+- **依赖**:
|
|
|
|
|
+ - Epic 9: ✅ 已完成(残疾人管理 E2E 测试)
|
|
|
|
|
+ - Epic 12: ✅ 已完成(小程序登录测试)
|
|
|
|
|
+ - Story 13.3: 🔄 进行中(后台添加人员 → 人才小程序验证)
|
|
|
|
|
+ - Story 13.6: ✅ 已完成(后台添加人员 → 企业小程序首页验证)
|
|
|
|
|
+
|
|
|
|
|
+**Epic 13 Story 依赖关系:**
|
|
|
|
|
+```
|
|
|
|
|
+Story 13.1: 后台创建订单 → 企业小程序**订单列表**验证 ✅
|
|
|
|
|
+Story 13.2: 后台编辑订单 → 企业小程序验证
|
|
|
|
|
+Story 13.3: 后台添加人员 → 人才小程序**人才列表**验证
|
|
|
|
|
+Story 13.4: 后台更新状态 → 双小程序验证
|
|
|
|
|
+Story 13.5: 跨端测试稳定性验证
|
|
|
|
|
+Story 13.6: 后台添加人员 → 企业小程序**首页 dashboard** 人才数据验证 ✅
|
|
|
|
|
+Story 13.7: 企业小程序首页 **导航和交互**测试
|
|
|
|
|
+Story 13.8: 企业小程序**订单列表页**完整验证
|
|
|
|
|
+Story 13.9: 企业小程序**人才列表页**完整验证 ← 当前 Story
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 与 Story 13.3 和 13.6 的关系
|
|
|
|
|
+
|
|
|
|
|
+| Story | 验证目标 | 测试场景 |
|
|
|
|
|
+|-------|---------|---------|
|
|
|
|
|
+| Story 13.3 | 后台添加人员 → 人才小程序人才列表验证 | 验证新增人员出现在列表中 |
|
|
|
|
|
+| Story 13.6 | 后台添加人员 → 企业小程序首页人才卡片验证 | 验证首页人才卡片显示正确 |
|
|
|
|
|
+| Story 13.9 | 企业小程序人才列表页完整功能验证 | 验证列表页所有功能:筛选、搜索、分页、字段显示、交互 |
|
|
|
|
|
+
|
|
|
|
|
+**Story 13.9 是 Story 13.3 的扩展和深化**:
|
|
|
|
|
+- 13.3 只验证了基本的人员添加同步
|
|
|
|
|
+- 13.9 验证人才列表页的所有功能点
|
|
|
|
|
+
|
|
|
|
|
+### 企业小程序人才列表页结构
|
|
|
|
|
+
|
|
|
|
|
+**人才列表页结构(待验证):**
|
|
|
|
|
+```
|
|
|
|
|
+┌─────────────────────────────────┐
|
|
|
|
|
+│ 人才列表 (mini-talent-list) │
|
|
|
|
|
+├─────────────────────────────────┤
|
|
|
|
|
+│ 筛选区域: │
|
|
|
|
|
+│ ┌─────────┬─────────┬─────────┐│
|
|
|
|
|
+│ │状态筛选 │类型筛选 │等级筛选 ││
|
|
|
|
|
+│ ├─────────┴─────────┴─────────┤│
|
|
|
|
|
+│ │搜索框 │重置按钮 ││
|
|
|
|
|
+│ └─────────────────────────────┘│
|
|
|
|
|
+├─────────────────────────────────┤
|
|
|
|
|
+│ 人才列表: │
|
|
|
|
|
+│ ┌─────────────────────────────┐│
|
|
|
|
|
+│ │ 人才卡片 1 ││
|
|
|
|
|
+│ │ - 姓名 (张三) ││
|
|
|
|
|
+│ │ - 残疾类型 (视力残疾) ││
|
|
|
|
|
+│ │ - 等级 (一级) ││
|
|
|
|
|
+│ │ - 性别/年龄 (男/30) ││
|
|
|
|
|
+│ │ - 工作状态 (待就业) ││
|
|
|
|
|
+│ └─────────────────────────────┘│
|
|
|
|
|
+│ ┌─────────────────────────────┐│
|
|
|
|
|
+│ │ 人才卡片 2 ││
|
|
|
|
|
+│ │ - ... ││
|
|
|
|
|
+│ └─────────────────────────────┘│
|
|
|
|
|
+├─────────────────────────────────┤
|
|
|
|
|
+│ 分页控件(如适用) │
|
|
|
|
|
+└─────────────────────────────────┘
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### EnterpriseMiniPage 扩展方法
|
|
|
|
|
+
|
|
|
|
|
+需要添加以下方法到 `enterprise-mini.page.ts`:
|
|
|
|
|
+
|
|
|
|
|
+```typescript
|
|
|
|
|
+/**
|
|
|
|
|
+ * 获取人才列表
|
|
|
|
|
+ */
|
|
|
|
|
+async getTalentList(): Promise<TalentListItem[]> {
|
|
|
|
|
+ // 实现获取人才列表的逻辑
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 按工作状态筛选人才
|
|
|
|
|
+ * @param workStatus 工作状态
|
|
|
|
|
+ */
|
|
|
|
|
+async filterByWorkStatus(workStatus: string): Promise<void> {
|
|
|
|
|
+ // 实现状态筛选逻辑
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 按残疾类型筛选人才
|
|
|
|
|
+ * @param disabilityType 残疾类型
|
|
|
|
|
+ */
|
|
|
|
|
+async filterByDisabilityType(disabilityType: string): Promise<void> {
|
|
|
|
|
+ // 实现残疾类型筛选逻辑
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 按残疾等级筛选人才
|
|
|
|
|
+ * @param disabilityLevel 残疾等级
|
|
|
|
|
+ */
|
|
|
|
|
+async filterByDisabilityLevel(disabilityLevel: string): Promise<void> {
|
|
|
|
|
+ // 实现残疾等级筛选逻辑
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 搜索人才
|
|
|
|
|
+ * @param keyword 搜索关键词
|
|
|
|
|
+ */
|
|
|
|
|
+async searchTalents(keyword: string): Promise<void> {
|
|
|
|
|
+ // 实现搜索逻辑
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 重置筛选和搜索
|
|
|
|
|
+ */
|
|
|
|
|
+async resetTalentFilters(): Promise<void> {
|
|
|
|
|
+ // 实现重置逻辑
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 获取人才卡片详细信息
|
|
|
|
|
+ * @param talentName 人才姓名
|
|
|
|
|
+ */
|
|
|
|
|
+async getTalentCardInfo(talentName: string): Promise<TalentCardInfo> {
|
|
|
|
|
+ // 实现获取人才卡片信息的逻辑
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 人才卡片字段定义
|
|
|
|
|
+
|
|
|
|
|
+**人才卡片数据结构:**
|
|
|
|
|
+```typescript
|
|
|
|
|
+interface TalentCardInfo {
|
|
|
|
|
+ /** 人员 ID */
|
|
|
|
|
+ personId: string;
|
|
|
|
|
+ /** 姓名 */
|
|
|
|
|
+ name: string;
|
|
|
|
|
+ /** 残疾类型 */
|
|
|
|
|
+ disabilityType: '视力残疾' | '听力残疾' | '言语残疾' | '肢体残疾' | '智力残疾' | '精神残疾' | '多重残疾';
|
|
|
|
|
+ /** 残疾等级 */
|
|
|
|
|
+ disabilityLevel: '一级' | '二级' | '三级' | '四级';
|
|
|
|
|
+ /** 性别 */
|
|
|
|
|
+ gender: '男' | '女';
|
|
|
|
|
+ /** 年龄 */
|
|
|
|
|
+ age: number;
|
|
|
|
|
+ /** 工作状态 */
|
|
|
|
|
+ workStatus: '未就业' | '待就业' | '已就业' | '已离职';
|
|
|
|
|
+ /** 身份证号(脱敏) */
|
|
|
|
|
+ idCard?: string;
|
|
|
|
|
+ /** 联系电话(脱敏) */
|
|
|
|
|
+ phone?: string;
|
|
|
|
|
+ /** 所属订单 */
|
|
|
|
|
+ orderName?: string;
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 选择器策略(待验证)
|
|
|
|
|
+
|
|
|
|
|
+**人才列表页选择器(待 Playwright MCP 验证):**
|
|
|
|
|
+| 功能 | data-testid |
|
|
|
|
|
+|------|-------------|
|
|
|
|
|
+| 人才列表容器 | `mini-talent-list` |
|
|
|
|
|
+| 人才卡片 | `mini-talent-card` |
|
|
|
|
|
+| 姓名 | `mini-talent-name` |
|
|
|
|
|
+| 残疾类型 | `mini-disability-type` |
|
|
|
|
|
+| 残疾等级 | `mini-disability-level` |
|
|
|
|
|
+| 性别 | `mini-gender` |
|
|
|
|
|
+| 年龄 | `mini-age` |
|
|
|
|
|
+| 工作状态 | `mini-work-status` |
|
|
|
|
|
+| 身份证号 | `mini-id-card` |
|
|
|
|
|
+| 联系电话 | `mini-phone` |
|
|
|
|
|
+| 所属订单 | `mini-order-name` |
|
|
|
|
|
+| 工作状态筛选器 | `mini-work-status-filter` |
|
|
|
|
|
+| 残疾类型筛选器 | `mini-disability-type-filter` |
|
|
|
|
|
+| 残疾等级筛选器 | `mini-disability-level-filter` |
|
|
|
|
|
+| 搜索框 | `mini-talent-search` |
|
|
|
|
|
+| 重置按钮 | `mini-talent-filter-reset` |
|
|
|
|
|
+
|
|
|
|
|
+### 测试数据准备策略
|
|
|
|
|
+
|
|
|
|
|
+**前置条件:**
|
|
|
|
|
+1. 需要企业用户数据(使用 Story 12.2 创建的企业用户)
|
|
|
|
|
+2. 需要测试残疾人数据(使用 Story 9.5 创建的残疾人数据)
|
|
|
|
|
+
|
|
|
|
|
+**测试数据准备:**
|
|
|
|
|
+```typescript
|
|
|
|
|
+// 创建不同状态的残疾人用于筛选测试
|
|
|
|
|
+const persons = {
|
|
|
|
|
+ unemployed: await createDisabilityPerson({
|
|
|
|
|
+ workStatus: '未就业',
|
|
|
|
|
+ name: `未就业_${Date.now()}`,
|
|
|
|
|
+ disabilityType: '视力残疾',
|
|
|
|
|
+ disabilityLevel: '一级',
|
|
|
|
|
+ }),
|
|
|
|
|
+ pending: await createDisabilityPerson({
|
|
|
|
|
+ workStatus: '待就业',
|
|
|
|
|
+ name: `待就业_${Date.now()}`,
|
|
|
|
|
+ disabilityType: '听力残疾',
|
|
|
|
|
+ disabilityLevel: '二级',
|
|
|
|
|
+ }),
|
|
|
|
|
+ employed: await createDisabilityPerson({
|
|
|
|
|
+ workStatus: '已就业',
|
|
|
|
|
+ name: `已就业_${Date.now()}`,
|
|
|
|
|
+ disabilityType: '肢体残疾',
|
|
|
|
|
+ disabilityLevel: '三级',
|
|
|
|
|
+ }),
|
|
|
|
|
+};
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 后台编辑同步验证策略
|
|
|
|
|
+
|
|
|
|
|
+**后台编辑后验证小程序同步:**
|
|
|
|
|
+```typescript
|
|
|
|
|
+test('后台修改人员姓名后小程序同步', async ({ disabilityPersonPage, enterpriseMiniPage }) => {
|
|
|
|
|
+ // 1. 后台创建残疾人
|
|
|
|
|
+ const originalName = `测试残疾人_${Date.now()}`;
|
|
|
|
|
+ await disabilityPersonPage.create({
|
|
|
|
|
+ name: originalName,
|
|
|
|
|
+ disabilityType: '视力残疾',
|
|
|
|
|
+ disabilityLevel: '一级',
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 小程序验证残疾人显示
|
|
|
|
|
+ await enterpriseMiniPage.goto();
|
|
|
|
|
+ await enterpriseMiniPage.login(TEST_USER.phone, TEST_USER.password);
|
|
|
|
|
+ await enterpriseMiniPage.gotoTalentList();
|
|
|
|
|
+ let talentInfo = await enterpriseMiniPage.getTalentCardInfo(originalName);
|
|
|
|
|
+ expect(talentInfo.name).toBe(originalName);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 后台修改残疾人姓名
|
|
|
|
|
+ const updatedName = `${originalName}_更新`;
|
|
|
|
|
+ await disabilityPersonPage.edit(originalName, { name: updatedName });
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 小程序验证残疾人姓名更新
|
|
|
|
|
+ await enterpriseMiniPage.waitForTalentUpdate(originalName, TIMEOUTS.SYNC);
|
|
|
|
|
+ talentInfo = await enterpriseMiniPage.getTalentCardInfo(updatedName);
|
|
|
|
|
+ expect(talentInfo.name).toBe(updatedName);
|
|
|
|
|
+});
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 参考文档
|
|
|
|
|
+
|
|
|
|
|
+**架构文档:**
|
|
|
|
|
+- `_bmad-output/planning-artifacts/epics.md#Epic 13`
|
|
|
|
|
+- `_bmad-output/project-context.md`
|
|
|
|
|
+- `docs/standards/e2e-radix-testing.md`
|
|
|
|
|
+
|
|
|
|
|
+**相关 Story 文档:**
|
|
|
|
|
+- `9-5-crud-tests.md` (残疾人管理 CRUD 测试)
|
|
|
|
|
+- `12-4-enterprise-mini-page-object.md` (企业小程序 Page Object)
|
|
|
|
|
+- `12-5-enterprise-mini-login.md` (企业小程序登录测试)
|
|
|
|
|
+- `13-3-person-add-sync.md` (人员添加同步测试)
|
|
|
|
|
+- `13-6-dashboard-sync.md` (首页看板数据联动测试)
|
|
|
|
|
+
|
|
|
|
|
+## Dev Agent Record
|
|
|
|
|
+
|
|
|
|
|
+### Agent Model Used
|
|
|
|
|
+
|
|
|
|
|
+_Created by create-story workflow_
|
|
|
|
|
+
|
|
|
|
|
+### Debug Log References
|
|
|
|
|
+
|
|
|
|
|
+_Story 13.9 created - not yet started_
|
|
|
|
|
+
|
|
|
|
|
+### Completion Notes List
|
|
|
|
|
+
|
|
|
|
|
+_Story 13.9 创建完成,状态:backlog_
|
|
|
|
|
+
|
|
|
|
|
+### File List
|
|
|
|
|
+
|
|
|
|
|
+_Created files:_
|
|
|
|
|
+- `/mnt/code/188-179-template-6/_bmad-output/implementation-artifacts/13-9-talent-list-validation.md`
|
|
|
|
|
+
|
|
|
|
|
+## Change Log
|
|
|
|
|
+
|
|
|
|
|
+- 2026-01-14: Story 13.9 创建完成
|
|
|
|
|
+ - 人才列表页完整验证需求
|
|
|
|
|
+ - 人才列表基础功能验证
|
|
|
|
|
+ - 人才状态筛选功能验证
|
|
|
|
|
+ - 人才卡片所有信息显示验证
|
|
|
|
|
+ - 人才搜索功能验证
|
|
|
|
|
+ - 后台添加/编辑人员后人才列表同步验证
|
|
|
|
|
+ - 分页功能验证(如适用)
|
|
|
|
|
+ - 人才列表交互功能验证
|
|
|
|
|
+ - 状态:backlog
|