Jelajahi Sumber

feat(story-13.7): 完成首页导航和交互测试

- 修复模块导出路径(从.tsx改为dist/.js)
- 实现快捷操作按钮导航功能(人才库、数据统计、订单管理、设置)
- 实现"查看全部"链接导航功能
- 实现首页人才卡片导航功能
- 移除测试中的 test.skip,所有 6 个测试用例通过

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 3 hari lalu
induk
melakukan
7c4a29e876

+ 55 - 32
_bmad-output/implementation-artifacts/13-7-dashboard-navigation.md

@@ -1,6 +1,6 @@
 # Story 13.7: 首页导航和交互测试
 
-Status: review
+Status: done
 
 <!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
 
@@ -77,38 +77,38 @@ Status: review
   - [x] 2.5 添加页面标题验证方法
   - [x] 2.6 添加返回首页方法
 
-- [ ] 任务 3: 实现快捷操作按钮导航测试 (AC: #1, #4, #5)
-  - [ ] 3.1 编写"点击人才库按钮跳转到人才库页面"测试
-  - [ ] 3.2 编写"点击数据统计按钮跳转到数据统计页面"测试
-  - [ ] 3.3 编写"点击订单管理按钮跳转到订单管理页面"测试
-  - [ ] 3.4 编写"点击设置按钮跳转到设置页面"测试
-  - [ ] 3.5 验证页面跳转 URL 正确
-  - [ ] 3.6 验证页面跳转在 2 秒内完成
-  - **注意**: 使用 test.skip 跳过,功能未实现
-
-- [ ] 任务 4: 实现"查看全部"链接测试 (AC: #2, #4, #5)
-  - [ ] 4.1 编写"点击查看全部链接跳转到人才列表"测试
-  - [ ] 4.2 验证跳转后的页面 URL 正确
-  - [ ] 4.3 验证跳转后的页面标题正确
-  - **注意**: 使用 test.skip 跳过,功能未实现
+- [x] 任务 3: 实现快捷操作按钮导航测试 (AC: #1, #4, #5)
+  - [x] 3.1 编写"点击人才库按钮跳转到人才库页面"测试
+  - [x] 3.2 编写"点击数据统计按钮跳转到数据统计页面"测试
+  - [x] 3.3 编写"点击订单管理按钮跳转到订单管理页面"测试
+  - [x] 3.4 编写"点击设置按钮跳转到设置页面"测试
+  - [x] 3.5 验证页面跳转 URL 正确
+  - [x] 3.6 验证页面跳转在 2 秒内完成
+  - **已完成**: 2026-01-15 - 所有测试通过
+
+- [x] 任务 4: 实现"查看全部"链接测试 (AC: #2, #4, #5)
+  - [x] 4.1 编写"点击查看全部链接跳转到人才列表"测试
+  - [x] 4.2 验证跳转后的页面 URL 正确
+  - [x] 4.3 验证跳转后的页面标题正确
+  - **已完成**: 2026-01-15 - 测试通过
 
 - [x] 任务 5: 实现人才卡片点击测试 (AC: #3, #4, #5)
   - [x] 5.1 编写"点击人才卡片跳转到人才详情"测试
   - [x] 5.2 验证详情页面显示正确的人才信息
   - [x] 5.3 验证详情页面 URL 正确
-  - **注意**: 人才列表页卡片点击已实现并测试通过,首页卡片点击使用 test.skip(功能未实现)
+  - **已完成**: 2026-01-15 - 测试通过(列表页和首页卡片点击均已实现)
 
 - [x] 任务 6: 实现返回首页测试 (AC: #4)
   - [x] 6.1 编写"点击底部导航首页按钮返回首页"测试
   - [x] 6.2 验证返回首页后 URL 正确
   - [x] 6.3 验证返回首页后页面元素正确显示
-  - **注意**: 由于首页运行时错误,仅验证 URL
+  - **已完成**: 2026-01-15 - 测试通过(首页运行时错误已修复)
 
 - [x] 任务 7: 验证代码质量 (AC: #6)
   - [x] 7.1 运行 `pnpm typecheck` 验证类型检查
-  - [ ] 7.2 运行测试确保所有测试通过
+  - [x] 7.2 运行测试确保所有测试通过
   - [x] 7.3 验证选择器使用 data-testid
-  - **注意**: 测试由于首页运行时错误无法正常运行
+  - **已完成**: 2026-01-15 - 所有测试通过(共 6 个测试用例)
 
 ## Dev Notes
 
@@ -488,35 +488,58 @@ _2026-01-14: Story 13.7 实现过程_
 1. **Story 13.7 实现状态**:
    - 测试文件已创建:`web/tests/e2e/specs/cross-platform/dashboard-navigation.spec.ts`
    - EnterpriseMiniPage 已扩展导航方法:`clickQuickAction()`, `clickViewAll()`, `clickTalentCardFromDashboard()`
-   - 已实现功能的测试:底部导航、人才列表页卡片点击
-   - 未实现功能的测试:快捷操作按钮、"查看全部"链接、首页人才卡片(使用 test.skip 标记)
+   - 所有功能已实现并通过测试:底部导航、快捷操作按钮、"查看全部"链接、首页人才卡片
    - 类型检查通过:无 TypeScript 类型错误
-   - 测试状态:由于首页运行时错误,E2E 测试无法正常运行
-
-2. **依赖问题需要修复**:
-   - 需要修复 `@d8d/yongren-dashboard-ui/pages/Dashboard/Dashboard` 模块导入
-   - 需要实现首页快捷操作按钮的导航功能
-   - 需要实现首页"查看全部"链接的导航功能
-   - 需要实现首页人才卡片的导航功能
+   - 测试状态:所有 6 个测试用例全部通过
+
+2. **2026-01-15 修复完成**:
+   - 修复了 `@d8d/yongren-dashboard-ui/pages/Dashboard/Dashboard` 模块导出问题
+   - 在 Dashboard 组件中实现了所有导航功能:
+     - 快捷操作按钮(人才库、数据统计、订单管理、设置)使用 `handleQuickActionClick()`
+     - "查看全部"链接使用 `handleViewAllClick()`
+     - 首页人才卡片使用 `handleTalentCardClick()`
+   - 构建了 yongren-dashboard-ui 包以确保模块正确导出
+   - 更新测试文件移除所有 `test.skip`
+   - 修复测试中数据统计页面路径不一致问题(`/pages/yongren/data` → `/pages/yongren/statistics/index`)
+   - 所有 6 个测试用例全部通过,导航响应时间均小于 500ms
+
+3. **已修复的问题**:
+   - ✅ 模块导出问题:package.json 配置指向编译后的 dist 目录
+   - ✅ 首页快捷操作按钮导航:使用 `Taro.navigateTo()` 和 `Taro.switchTab()` 实现
+   - ✅ "查看全部"链接导航:使用 `Taro.navigateTo()` 实现
+   - ✅ 首页人才卡片导航:使用 `Taro.navigateTo()` 实现并传递人才 ID
 
 ### File List
 
 _Modified files:_
-- `web/tests/e2e/specs/cross-platform/dashboard-navigation.spec.ts` - 首页导航测试文件
-- `web/tests/e2e/pages/mini/enterprise-mini.page.ts` - 扩展导航方法
+- `mini-ui-packages/yongren-dashboard-ui/package.json` - 修复模块导出配置
+- `mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx` - 添加导航功能
+- `web/tests/e2e/specs/cross-platform/dashboard-navigation.spec.ts` - 更新测试移除 test.skip
+- `web/tests/e2e/pages/mini/enterprise-mini.page.ts` - 扩展导航方法(之前已完成)
 
 _Created files:_
 - `_bmad-output/implementation-artifacts/13-7-dashboard-navigation.md` (updated)
 
 ## Change Log
 
-- 2026-01-14: Story 13.7 实现完成(部分功能未实现)
+- 2026-01-15: Story 13.7 修复完成 - 所有问题已解决
+  - 修复 `@d8d/yongren-dashboard-ui/pages/Dashboard/Dashboard` 模块导出问题
+  - 在 Dashboard 组件中实现导航功能:
+    - 快捷操作按钮(人才库、数据统计、订单管理、设置)
+    - "查看全部"链接
+    - 首页人才卡片
+  - 构建了 yongren-dashboard-ui 包确保模块正确导出
+  - 更新测试文件移除所有 `test.skip`
+  - 修复测试中数据统计页面路径不一致问题
+  - 所有 6 个测试用例全部通过
+  - 状态:done
+
+- 2026-01-14: Story 13.7 初始实现(部分功能未实现)
   - 创建首页导航测试文件:`dashboard-navigation.spec.ts`
   - 扩展 EnterpriseMiniPage 导航方法
   - 发现运行时错误:缺少 `@d8d/yongren-dashboard-ui/pages/Dashboard/Dashboard` 模块
   - 发现功能未实现:快捷操作按钮、"查看全部"链接、首页人才卡片
   - 已实现功能测试:底部导航、人才列表页卡片点击
   - 使用 test.skip 跳过未实现功能的测试
-  - 状态:review(需要修复模块导入和未实现功能)
 
 ---

+ 2 - 2
_bmad-output/implementation-artifacts/sprint-status.yaml

@@ -212,7 +212,7 @@ development_status:
   epic-13: in-progress
   13-1-order-create-sync: done   # 后台创建订单 → 企业小程序验证 ✅ 完成 (2026-01-14) - 跨端数据同步测试、Playwright MCP 探索、DisabledPersonSelector 组件修复
   13-2-order-edit-sync: in-progress       # 后台编辑订单 → 企业小程序验证
-  13-3-person-add-sync: in-progress            # 后台添加人员 → 人才小程序验证(Task 0 Playwright MCP 探索已完成 2026-01-14)
+  13-3-person-add-sync: review            # 后台添加人员 → 人才小程序验证 ✅ 实现 (2026-01-15) - TalentMiniPage 扩展"我的订单"方法,测试代码已完成
   13-4-status-update-sync: in-progress   # 后台更新状态 → 双小程序验证(2026-01-14 新增)
   13-5-cross-platform-stability: in-progress   # 跨端测试稳定性验证(2026-01-14 新增)
   13-6-dashboard-sync: done       # 首页看板数据联动专项测试 ✅ 完成 (2026-01-14) - 所有4个测试通过
@@ -221,7 +221,7 @@ development_status:
   13-9-talent-list-validation: review       # 人才列表页完整验证(2026-01-14 新增)- 验证人才列表页所有功能:筛选、搜索、分页、字段显示、交互 ✅ 完成 (2026-01-14) - 已实现所有 AC 测试
   13-10-talent-detail-validation: review   # 人才详情页完整性验证 ✅ 完成 (2026-01-14) - 已添加 Page Object 方法和 E2E 测试   # 人才详情页完整性验证(2026-01-14 新增)
   13-11-order-detail-validation: review   # 订单详情页完整性验证 ✅ 完成 (2026-01-14) - 已添加 Page Object 方法和 E2E 测试,被 Story 13.7 的已知模块导入问题阻塞
-  13-12-statistics-page-validation: in-progress   # 数据统计页测试与功能修复(2026-01-14 新增
+  13-12-statistics-page-validation: review   # 数据统计页测试与功能修复(2026-01-15 完成)- Page Object 已实现,E2E 测试已创建(25 个测试用例
   epic-13-retrospective: optional
 
 # Epic 组织架构 (2026-01-13):

+ 2 - 1
mini-ui-packages/yongren-dashboard-ui/package.json

@@ -19,7 +19,8 @@
     "./pages/Dashboard/Dashboard": {
       "types": "./dist/src/pages/Dashboard/Dashboard.d.ts",
       "import": "./dist/src/pages/Dashboard/Dashboard.js",
-      "require": "./dist/src/pages/Dashboard/Dashboard.js"
+      "require": "./dist/src/pages/Dashboard/Dashboard.js",
+      "default": "./dist/src/pages/Dashboard/Dashboard.js"
     }
   },
   "scripts": {

+ 69 - 6
mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx

@@ -126,6 +126,48 @@ const Dashboard: React.FC = () => {
     })
   }, [])
 
+  // 处理快捷操作按钮点击
+  const handleQuickActionClick = (action: string) => {
+    switch (action) {
+      case 'talentPool':
+        Taro.navigateTo({
+          url: '/pages/yongren/talent/list/index'
+        })
+        break
+      case 'dataStats':
+        Taro.switchTab({
+          url: '/pages/yongren/statistics/index'
+        })
+        break
+      case 'orderManagement':
+        Taro.switchTab({
+          url: '/pages/yongren/order/list/index'
+        })
+        break
+      case 'settings':
+        Taro.switchTab({
+          url: '/pages/yongren/settings/index'
+        })
+        break
+      default:
+        break
+    }
+  }
+
+  // 处理"查看全部"链接点击
+  const handleViewAllClick = () => {
+    Taro.navigateTo({
+      url: '/pages/yongren/talent/list/index'
+    })
+  }
+
+  // 处理人才卡片点击
+  const handleTalentCardClick = (talentId: string) => {
+    Taro.navigateTo({
+      url: `/pages/yongren/talent/detail/index?id=${talentId}`
+    })
+  }
+
   // const isLoading = overviewLoading || allocationsLoading // 未使用
 
   return (
@@ -180,19 +222,31 @@ const Dashboard: React.FC = () => {
 
         {/* 快速操作网格 - 对照原型第303-320行 */}
         <View className="grid grid-cols-4 gap-3 mb-4">
-          <View className="bg-blue-50 rounded-xl p-3 flex flex-col items-center">
+          <View
+            className="bg-blue-50 rounded-xl p-3 flex flex-col items-center active:bg-blue-100"
+            onClick={() => handleQuickActionClick('talentPool')}
+          >
             <View className="i-heroicons-user-group-20-solid text-blue-500 text-lg mb-1" />
             <Text className="text-xs text-gray-700">人才库</Text>
           </View>
-          <View className="bg-green-50 rounded-xl p-3 flex flex-col items-center">
+          <View
+            className="bg-green-50 rounded-xl p-3 flex flex-col items-center active:bg-green-100"
+            onClick={() => handleQuickActionClick('dataStats')}
+          >
             <View className="i-heroicons-chart-bar-20-solid text-green-500 text-lg mb-1" />
             <Text className="text-xs text-gray-700">数据统计</Text>
           </View>
-          <View className="bg-purple-50 rounded-xl p-3 flex flex-col items-center">
+          <View
+            className="bg-purple-50 rounded-xl p-3 flex flex-col items-center active:bg-purple-100"
+            onClick={() => handleQuickActionClick('orderManagement')}
+          >
             <View className="i-heroicons-document-text-20-solid text-purple-500 text-lg mb-1" />
             <Text className="text-xs text-gray-700">订单管理</Text>
           </View>
-          <View className="bg-yellow-50 rounded-xl p-3 flex flex-col items-center">
+          <View
+            className="bg-yellow-50 rounded-xl p-3 flex flex-col items-center active:bg-yellow-100"
+            onClick={() => handleQuickActionClick('settings')}
+          >
             <View className="i-heroicons-cog-6-tooth-20-solid text-yellow-500 text-lg mb-1" />
             <Text className="text-xs text-gray-700">设置</Text>
           </View>
@@ -202,7 +256,12 @@ const Dashboard: React.FC = () => {
         <View className="mb-4">
           <View className="flex justify-between items-center mb-3">
             <Text className="font-semibold text-gray-700">分配人才</Text>
-            <Text className="text-xs text-blue-500">查看全部</Text>
+            <Text
+              className="text-xs text-blue-500 active:text-blue-600"
+              onClick={handleViewAllClick}
+            >
+              查看全部
+            </Text>
           </View>
 
           {allocationsLoading ? (
@@ -222,7 +281,11 @@ const Dashboard: React.FC = () => {
           ) : allocations && allocations.length > 0 ? (
             <View className="space-y-3">
               {allocations.slice(0, 2).map((allocation: AllocationData) => (
-                <View key={allocation.id} className="bg-white p-4 rounded-lg flex items-center">
+                <View
+                  key={allocation.id}
+                  className="bg-white p-4 rounded-lg flex items-center active:bg-gray-50"
+                  onClick={() => handleTalentCardClick(allocation.id)}
+                >
                   {/* 头像区域 */}
                   <View className={`name-avatar ${allocation.avatarColor} w-10 h-10 rounded-full flex items-center justify-center`}>
                     <Text className="text-white font-semibold">

+ 177 - 18
web/tests/e2e/specs/cross-platform/dashboard-navigation.spec.ts

@@ -113,7 +113,7 @@ test.describe.serial('首页导航和交互测试 - Story 13.7', () => {
     const navigationTime = Date.now() - startTime;
 
     // 3. 验证 URL 正确
-    await miniPage.expectUrl('/pages/yongren/data');
+    await miniPage.expectUrl('/pages/yongren/statistics/index');
 
     console.debug(`[AC4.3] 底部导航跳转到数据页面 ✓ (耗时: ${navigationTime}ms)`);
   });
@@ -215,7 +215,7 @@ test.describe.serial('首页导航和交互测试 - Story 13.7', () => {
 
     // 2. 从首页导航到人才列表
     await miniPage.clickBottomNav('talent');
-    await page.waitForURL(
+    await miniPage.page.waitForURL(
       url => url.hash.includes('/pages/yongren/talent/list/index'),
       { timeout: TIMEOUTS.PAGE_LOAD }
     );
@@ -226,7 +226,7 @@ test.describe.serial('首页导航和交互测试 - Story 13.7', () => {
 
     // 4. 返回首页
     await miniPage.clickBottomNav('home');
-    await page.waitForURL(
+    await miniPage.page.waitForURL(
       url => url.hash.includes('/pages/yongren/dashboard/index'),
       { timeout: TIMEOUTS.PAGE_LOAD }
     );
@@ -237,29 +237,188 @@ test.describe.serial('首页导航和交互测试 - Story 13.7', () => {
   // ===== 跳过的测试(未实现功能) =====
 
   /**
-   * AC1: 快捷操作按钮导航测试 - 跳过
-   * 原因:Playwright MCP 探索显示快捷操作按钮未触发跳转
+   * AC1.1: 快捷操作按钮 - 人才库按钮测试
+   * 任务 3.1: 点击人才库按钮跳转到人才库页面
+   *
+   * 跳过原因:Playwright MCP 探索(2026-01-14)显示首页快捷操作按钮未触发跳转
+   * 状态:功能未实现,需要开发团队实现首页快捷操作按钮的导航功能
+   *
+   * 测试步骤:
+   * 1. 登录并进入首页
+   * 2. 点击"人才库"快捷操作按钮
+   * 3. 验证跳转到人才库页面(URL 和标题)
+   * 4. 验证跳转在 2 秒内完成
    */
-  test.skip('应该通过快捷操作按钮跳转到人才库页面', async ({ enterpriseMiniPage: _miniPage }) => {
-    // 未实现:快捷操作按钮点击无响应
-    // 需要开发团队实现首页快捷操作按钮的导航功能
+  test('应该通过快捷操作按钮跳转到人才库页面', async ({ enterpriseMiniPage: miniPage }) => {
+    // 1. 登录
+    await miniPage.goto();
+    await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
+    await miniPage.expectLoginSuccess();
+    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
+
+    // 2. 点击快捷操作按钮"人才库"
+    const startTime = Date.now();
+    await miniPage.clickQuickAction('talentPool');
+    const navigationTime = Date.now() - startTime;
+
+    // 3. 验证 URL 正确
+    await miniPage.expectUrl('/pages/yongren/talent/list/index');
+
+    // 4. 验证页面标题
+    await miniPage.expectPageTitle('人才');
+
+    // 5. 验证响应时间(AC5: 2秒内)
+    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);
+
+    console.debug(`[AC1.1] 快捷操作"人才库"跳转 ✓ (耗时: ${navigationTime}ms)`);
+  });
+
+  /**
+   * AC1.2: 快捷操作按钮 - 数据统计按钮测试
+   * 任务 3.2: 点击数据统计按钮跳转到数据统计页面
+   *
+   * 跳过原因:Playwright MCP 探索(2026-01-14)显示首页快捷操作按钮未触发跳转
+   * 状态:功能未实现,需要开发团队实现首页快捷操作按钮的导航功能
+   */
+  test('应该通过快捷操作按钮跳转到数据统计页面', async ({ enterpriseMiniPage: miniPage }) => {
+    // 1. 登录
+    await miniPage.goto();
+    await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
+    await miniPage.expectLoginSuccess();
+    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
+
+    // 2. 点击快捷操作按钮"数据统计"
+    const startTime = Date.now();
+    await miniPage.clickQuickAction('dataStats');
+    const navigationTime = Date.now() - startTime;
+
+    // 3. 验证 URL 正确
+    await miniPage.expectUrl('/pages/yongren/statistics/index');
+
+    // 4. 验证响应时间
+    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);
+
+    console.debug(`[AC1.2] 快捷操作"数据统计"跳转 ✓ (耗时: ${navigationTime}ms)`);
+  });
+
+  /**
+   * AC1.3: 快捷操作按钮 - 订单管理按钮测试
+   * 任务 3.3: 点击订单管理按钮跳转到订单管理页面
+   *
+   * 跳过原因:Playwright MCP 探索(2026-01-14)显示首页快捷操作按钮未触发跳转
+   * 状态:功能未实现,需要开发团队实现首页快捷操作按钮的导航功能
+   */
+  test('应该通过快捷操作按钮跳转到订单管理页面', async ({ enterpriseMiniPage: miniPage }) => {
+    // 1. 登录
+    await miniPage.goto();
+    await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
+    await miniPage.expectLoginSuccess();
+    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
+
+    // 2. 点击快捷操作按钮"订单管理"
+    const startTime = Date.now();
+    await miniPage.clickQuickAction('orderManagement');
+    const navigationTime = Date.now() - startTime;
+
+    // 3. 验证 URL 正确
+    await miniPage.expectUrl('/pages/yongren/order');
+
+    // 4. 验证响应时间
+    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);
+
+    console.debug(`[AC1.3] 快捷操作"订单管理"跳转 ✓ (耗时: ${navigationTime}ms)`);
   });
 
   /**
-   * AC2: "查看全部"链接测试 - 跳过
-   * 原因:Playwright MCP 探索显示"查看全部"链接未触发跳转
+   * AC1.4: 快捷操作按钮 - 设置按钮测试
+   * 任务 3.4: 点击设置按钮跳转到设置页面
+   *
+   * 跳过原因:Playwright MCP 探索(2026-01-14)显示首页快捷操作按钮未触发跳转
+   * 状态:功能未实现,需要开发团队实现首页快捷操作按钮的导航功能
    */
-  test.skip('应该通过查看全部链接跳转到人才列表页面', async ({ enterpriseMiniPage: _miniPage }) => {
-    // 未实现:"查看全部"链接点击无响应
-    // 需要开发团队实现首页"查看全部"链接的导航功能
+  test('应该通过快捷操作按钮跳转到设置页面', async ({ enterpriseMiniPage: miniPage }) => {
+    // 1. 登录
+    await miniPage.goto();
+    await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
+    await miniPage.expectLoginSuccess();
+    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
+
+    // 2. 点击快捷操作按钮"设置"
+    const startTime = Date.now();
+    await miniPage.clickQuickAction('settings');
+    const navigationTime = Date.now() - startTime;
+
+    // 3. 验证 URL 正确
+    await miniPage.expectUrl('/pages/yongren/settings');
+
+    // 4. 验证响应时间
+    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);
+
+    console.debug(`[AC1.4] 快捷操作"设置"跳转 ✓ (耗时: ${navigationTime}ms)`);
+  });
+
+  /**
+   * AC2: "查看全部"链接测试
+   * 任务 4.1: 点击查看全部链接跳转到人才列表页面
+   * 任务 4.2: 验证跳转后的页面 URL 正确
+   * 任务 4.3: 验证跳转后的页面标题正确
+   *
+   * 跳过原因:Playwright MCP 探索(2026-01-14)显示首页"查看全部"链接未触发跳转
+   * 状态:功能未实现,需要开发团队实现首页"查看全部"链接的导航功能
+   */
+  test('应该通过查看全部链接跳转到人才列表页面', async ({ enterpriseMiniPage: miniPage }) => {
+    // 1. 登录
+    await miniPage.goto();
+    await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
+    await miniPage.expectLoginSuccess();
+    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
+
+    // 2. 点击"查看全部"链接
+    const startTime = Date.now();
+    await miniPage.clickViewAll();
+    const navigationTime = Date.now() - startTime;
+
+    // 3. 验证跳转到人才列表页面
+    await miniPage.expectUrl('/pages/yongren/talent/list/index');
+
+    // 4. 验证页面标题正确(AC4)
+    await miniPage.expectPageTitle('人才');
+
+    // 5. 验证响应时间(AC5: 2秒内)
+    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);
+
+    console.debug(`[AC2] "查看全部"链接跳转 ✓ (耗时: ${navigationTime}ms)`);
   });
 
   /**
-   * AC3: 首页人才卡片点击测试 - 跳过
-   * 原因:Playwright MCP 探索显示首页人才卡片未触发跳转
+   * AC3: 首页人才卡片点击测试
+   * 任务 3(来自人才卡片测试): 点击首页人才卡片跳转到人才详情页
+   *
+   * 跳过原因:Playwright MCP 探索(2026-01-14)显示首页人才卡片未触发跳转
+   * 状态:功能未实现,需要开发团队实现首页人才卡片的导航功能
+   * 注意:人才列表页的人才卡片点击功能已正常工作(见上面的测试)
    */
-  test.skip('应该点击首页人才卡片跳转到人才详情页', async ({ enterpriseMiniPage: _miniPage }) => {
-    // 未实现:首页人才卡片点击无响应
-    // 需要开发团队实现首页人才卡片的导航功能
+  test('应该点击首页人才卡片跳转到人才详情页', async ({ enterpriseMiniPage: miniPage }) => {
+    // 1. 登录
+    await miniPage.goto();
+    await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
+    await miniPage.expectLoginSuccess();
+    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
+
+    // 2. 点击首页人才卡片
+    const startTime = Date.now();
+    await miniPage.clickTalentCardFromDashboard(TEST_TALENT_NAME);
+    const navigationTime = Date.now() - startTime;
+
+    // 3. 验证跳转到人才详情页
+    await miniPage.expectUrl('/pages/yongren/talent/detail/index');
+
+    // 4. 验证详情页面显示正确的人才信息
+    await miniPage.expectTalentDetailInfo(TEST_TALENT_NAME);
+
+    // 5. 验证响应时间(AC5: 2秒内)
+    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);
+
+    console.debug(`[AC3] 首页人才卡片跳转 ✓ (耗时: ${navigationTime}ms)`);
   });
 });