Kaynağa Gözat

fix(e2e): 修复 ESLint 错误

- 注释未使用的导入 selectRadixOption 和 selectProvinceCity
- 修复所有 catch 块未使用变量 e
- 注释未使用的 EnterpriseMiniPage 导入

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 gün önce
ebeveyn
işleme
c9a8218d30

+ 3 - 3
web/tests/e2e/pages/admin/disability-person.page.ts

@@ -1,5 +1,5 @@
 import { Page, Locator } from '@playwright/test';
-import { selectRadixOption, selectProvinceCity } from '@d8d/e2e-test-utils';
+// import { selectRadixOption, selectProvinceCity } from '@d8d/e2e-test-utils';
 import { TIMEOUTS } from '../../utils/timeouts';
 
 // 注意:@d8d/e2e-test-utils 包已安装,将在后续 story (2.2, 2.3) 中实际使用
@@ -148,7 +148,7 @@ export class DisabilityPersonManagementPage {
         let jsonBody = null;
         try {
           jsonBody = JSON.parse(responseBody);
-        } catch (e) {
+        } catch {
           // 不是 JSON
         }
 
@@ -173,7 +173,7 @@ export class DisabilityPersonManagementPage {
     // 等待网络请求完成(增加超时并添加容错处理)
     try {
       await this.page.waitForLoadState('networkidle', { timeout: TIMEOUTS.UPLOAD_LONG });
-    } catch (e) {
+    } catch {
       // networkidle 可能因为长轮询或后台请求而失败,使用 domcontentloaded 作为降级方案
       console.debug('  ⚠ networkidle 超时,使用 domcontentloaded 作为降级方案');
       await this.page.waitForLoadState('domcontentloaded', { timeout: TIMEOUTS.TABLE_LOAD });

+ 199 - 0
web/tests/e2e/specs/cross-platform/dashboard-navigation.spec.ts

@@ -0,0 +1,199 @@
+import { TIMEOUTS } from '../../utils/timeouts';
+import { test, expect } from '../../utils/test-setup';
+// import { EnterpriseMiniPage } from '../../pages/mini/enterprise-mini.page';
+
+/**
+ * 首页导航和交互测试 (Story 13.7)
+ *
+ * 测试目标:验证企业小程序首页 dashboard 的导航和交互功能
+ *
+ * Playwright MCP 探索结果 (2026-01-14):
+ * - 底部导航正常工作 (首页/人才/订单/数据/设置)
+ * - 人才列表页人才卡片点击可导航到详情页
+ * - 首页快捷操作按钮未触发跳转(可能为展示用途)
+ * - 首页"查看全部"链接未触发跳转
+ * - 首页人才卡片未触发跳转
+ */
+
+// 测试数据常量
+const TEST_USER_PHONE = '13800001111';
+const TEST_USER_PASSWORD = 'password123';
+const TEST_TALENT_NAME = '测试残疾人_1768346782426_12_8219';
+
+// 使用 test.describe.serial 确保测试按顺序执行
+test.describe.serial('首页导航和交互测试 - Story 13.7', () => {
+  // 每个测试使用独立的浏览器上下文
+  test.use({ storageState: undefined });
+
+  /**
+   * 测试场景:底部导航 - 点击人才按钮
+   */
+  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. 点击底部导航"人才"按钮
+    await miniPage.clickBottomNav('talent');
+
+    // 3. 验证 URL 正确
+    await miniPage.expectUrl('/pages/yongren/talent/list/index');
+
+    // 4. 验证页面标题(仅记录调试信息)
+    await miniPage.expectPageTitle('人才管理');
+
+    console.debug('[导航] 底部导航跳转到人才页面 ✓');
+  });
+
+  /**
+   * 测试场景:底部导航 - 点击订单按钮
+   */
+  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. 点击底部导航"订单"按钮
+    await miniPage.clickBottomNav('order');
+
+    // 3. 验证 URL 正确
+    await miniPage.expectUrl('/pages/yongren/order');
+
+    // 4. 验证页面标题
+    await miniPage.expectPageTitle('订单列表');
+
+    console.debug('[导航] 底部导航跳转到订单页面 ✓');
+  });
+
+  /**
+   * 测试场景:底部导航 - 点击数据按钮
+   */
+  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. 点击底部导航"数据"按钮
+    await miniPage.clickBottomNav('data');
+
+    // 3. 验证 URL 正确
+    await miniPage.expectUrl('/pages/yongren/data');
+
+    console.debug('[导航] 底部导航跳转到数据页面 ✓');
+  });
+
+  /**
+   * 测试场景:底部导航 - 点击设置按钮
+   */
+  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. 点击底部导航"设置"按钮
+    await miniPage.clickBottomNav('settings');
+
+    // 3. 验证 URL 正确
+    await miniPage.expectUrl('/pages/yongren/settings');
+
+    console.debug('[导航] 底部导航跳转到设置页面 ✓');
+  });
+
+  /**
+   * 测试场景:返回首页功能
+   */
+  test('应该可以通过底部导航首页按钮返回首页', async ({ enterpriseMiniPage: miniPage }) => {
+    const page = miniPage.page;
+
+    // 1. 登录
+    await miniPage.goto();
+    await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
+    await miniPage.expectLoginSuccess();
+    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
+
+    // 2. 先导航到其他页面(人才页面)
+    await miniPage.clickBottomNav('talent');
+    await miniPage.expectUrl('/pages/yongren/talent/list/index');
+
+    // 3. 返回首页
+    await miniPage.goBackToHome();
+
+    // 4. 验证首页元素正确显示
+    const dashboard = page.getByText('分配人才');
+    await expect(dashboard).toBeVisible();
+
+    console.debug('[导航] 返回首页 ✓');
+  });
+
+  /**
+   * 测试场景:人才卡片点击导航
+   */
+  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. 导航到人才列表页面
+    await miniPage.clickBottomNav('talent');
+    await miniPage.expectUrl('/pages/yongren/talent/list/index');
+
+    // 3. 点击人才卡片
+    await miniPage.clickTalentCardFromList(TEST_TALENT_NAME);
+
+    // 4. 验证跳转到详情页
+    await miniPage.expectUrl('/pages/yongren/talent/detail/index');
+
+    // 5. 验证详情页面显示正确的人才信息
+    await miniPage.expectTalentDetailInfo(TEST_TALENT_NAME);
+
+    console.debug('[导航] 人才卡片点击跳转到详情页 ✓');
+  });
+
+  /**
+   * 测试场景:完整导航流程
+   * 验证首页 → 人才列表 → 人才详情 → 返回首页的完整流程
+   */
+  test('应该支持完整的导航流程:首页→人才列表→详情→首页', async ({ enterpriseMiniPage: miniPage }) => {
+    const page = miniPage.page;
+
+    // 1. 登录
+    await miniPage.goto();
+    await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
+    await miniPage.expectLoginSuccess();
+    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
+
+    // 2. 从首页导航到人才列表
+    await miniPage.clickBottomNav('talent');
+    await page.waitForURL(
+      url => url.hash.includes('/pages/yongren/talent/list/index'),
+      { timeout: TIMEOUTS.PAGE_LOAD }
+    );
+
+    // 3. 点击人才卡片进入详情页
+    await miniPage.clickTalentCardFromList(TEST_TALENT_NAME);
+    await miniPage.expectUrl('/pages/yongren/talent/detail/index');
+
+    // 4. 返回首页
+    await miniPage.clickBottomNav('home');
+    await page.waitForURL(
+      url => url.hash.includes('/pages/yongren/dashboard/index'),
+      { timeout: TIMEOUTS.PAGE_LOAD }
+    );
+
+    // 5. 验证首页数据正常显示
+    const dashboard = page.getByText('分配人才');
+    await expect(dashboard).toBeVisible();
+
+    console.debug('[导航] 完整导航流程 ✓');
+  });
+});