tech-spec-system-faults-high-priority-fix.md 26 KB


title: '系统故障高优先级修复 - 数据统计与考勤模块' slug: 'system-faults-high-priority-fix' created: '2026-03-06T12:30:00Z' status: 'ready-for-dev' stepsCompleted: [1, 2, 3, 4] adversarialReviewCompleted: true adversarialReviewFindings: 18 adversarialReviewApplied: true tech_stack: ['React', 'TypeScript', 'Taro', 'React Query', 'RPC Client'] files_to_modify: [ 'allin-packages/order-module/src/routes/order-custom.routes.ts', 'allin-packages/order-module/src/services/order.service.ts', 'allin-packages/order-management-ui/src/components/OrderDetailModal.tsx', 'mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx', 'mini-ui-packages/yongren-order-management-ui/src/pages/OrderDetail/OrderDetail.tsx', 'mini-ui-packages/yongren-statistics-ui/src/pages/Statistics/Statistics.tsx', 'mini-ui-packages/rencai-attendance-ui/src/pages/AttendancePage/AttendancePage.tsx', 'mini-ui-packages/rencai-attendance-ui/src/utils/mockAttendanceData.ts', 'mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx', 'mini-ui-packages/rencai-employment-ui/src/pages/EmploymentPage/EmploymentPage.tsx' ] code_patterns: ['桥接文件模式', 'React Query hooks', 'RPC 客户端', 'Mock 数据']

test_patterns: ['Vitest', 'React Testing Library']

Tech-Spec: 系统故障高优先级修复 - 数据统计与考勤模块

Created: 2026-03-06

Overview

Problem Statement

根据 2026-03-06 系统故障文档,共有 9 个故障问题,涉及网页端、企业端和人才端:

高优先级问题(需立即修复):

问题2:企业端-数据统计模块无数据展示

  • 在职人数:0
  • 平均薪资:¥0
  • 在职率:0%
  • 所有分类分布(残疾类型、性别、年龄、户籍省份)显示"暂无数据"
  • 📸 原始截图:docs/系统故障20260306_images/image2.png

问题6:人才端-本月出勤与考勤数据不一致

  • 本月出勤:0
  • 累计出勤:0
  • 本月薪资:¥0
  • 📸 原始截图:docs/系统故障20260306_images/image6.png

问题9:人才端-出勤率计算异常

  • 正常出勤:30天
  • 出勤率:136%(超出100%不合理)
  • 需求:修改为正常出勤22天,出勤率100%
  • 📸 原始截图:docs/系统故障20260306_images/image9.jpeg

中优先级问题:

问题1:网页端-订单管理薪资改为可手动输入修改项

  • 📸 原始截图:docs/系统故障20260306_images/image1.png

问题3:企业端-订单详情打卡数据需修改为固定内容

  • 打卡完成率:100%
  • 工资视频:100%
  • 个税视频:100%
  • 📸 原始截图:docs/系统故障20260306_images/image3.png

问题5:人才端-小程序远程打卡提示修改

  • 当前提示:"该功能开发中"
  • 需求:改为"已打卡成功"
  • 📸 原始截图:docs/系统故障20260306_images/image5.png

低优先级问题:

问题4:企业端-首页人才库点击无跳转

  • 📸 原始截图:docs/系统故障20260306_images/image4.png

问题7:人才端-薪资记录显示范围修改

  • 需求:显示当前月上一个月的薪资
  • 📸 原始截图:docs/系统故障20260306_images/image7.png

问题8:企业端-首页去掉最新通知模块

  • 需求:修复在职人员数量显示不匹配
  • 需求:去掉"最新通知"模块
  • 📸 原始截图:docs/系统故障20260306_images/image8.png

Solution

按优先级修复各类问题:

高优先级(数据类):

  1. 修复数据统计模块数据加载逻辑
  2. 修复人才端考勤数据获取和显示
  3. 修正出勤率计算公式

中优先级(功能完善):

  1. 订单管理薪资字段支持手动输入
  2. 订单详情打卡数据改为固定值
  3. 远程打卡提示文案修改

低优先级(优化类):

  1. 人才库跳转功能修复
  2. 薪资记录时间范围调整
  3. 首页最新通知模块移除

Scope

In Scope: 全部 9 个故障问题的修复:

高优先级(3个):

  • 问题2:企业端-数据统计模块数据加载修复
  • 问题6:人才端-本月出勤数据加载修复
  • 问题9:人才端-出勤率计算逻辑修复(22天,100%)

中优先级(3个):

  • 问题1:网页端-订单管理薪资改为手动输入
  • 问题3:企业端-订单详情打卡数据改为固定内容
  • 问题5:人才端-小程序远程打卡提示修改

低优先级(3个):

  • 问题4:企业端-首页人才库点击跳转修复
  • 问题7:人才端-薪资记录显示范围修改
  • 问题8:企业端-首页去掉最新通知模块

Out of Scope:

  • 重构整个数据统计模块架构
  • 修改数据库表结构(但允许添加测试数据)
  • 实现全新的考勤系统
  • 与其他模块联调(除非直接影响本修复)

Gray Area(需要判断):

  • 如果问题2根源是数据库无数据:允许添加测试数据进行验证
  • 如果需要微调API响应格式:允许调整前端数据处理逻辑

Context for Development

Codebase Patterns

项目架构:

  • 小程序框架:Taro (React + TypeScript)
  • UI 包分离:页面组件从独立 npm 包导入
  • 数据获取:React Query (@tanstack/react-query) + RPC 客户端
  • 状态管理:React hooks (useState, useEffect)

代码模式:

  • 桥接文件模式:小程序页面作为桥接,从 UI 包导入实际组件

    // mini/src/pages/yongren/statistics/index.tsx
    import Statistics from '@d8d/yongren-statistics-ui/pages/Statistics/Statistics'
    export default Statistics
    
  • API 客户端模式:使用 Hono RPC 客户端调用后端接口

    export const enterpriseStatisticsClient = rpcClient<typeof statisticsRoutes>('/api/v1/yongren/statistics')
    
  • React Query 模式:使用 useQuery hook 进行数据获取和缓存

    const { data, isLoading } = useQuery({
    queryKey: ['statistics', 'employment-count'],
    queryFn: async () => { ... }
    })
    

Files to Reference

文件 用途 关键问题
mini-ui-packages/yongren-statistics-ui/src/pages/Statistics/Statistics.tsx 企业端数据统计页面 API 返回数据为 0
mini-ui-packages/yongren-statistics-ui/src/api/enterpriseStatisticsClient.ts 统计 API 客户端 调用 /api/v1/yongren/statistics/*
mini-ui-packages/rencai-attendance-ui/src/pages/AttendancePage/AttendancePage.tsx 人才端考勤记录页面 使用 Mock 数据,未连接真实 API
mini-ui-packages/rencai-attendance-ui/src/utils/mockAttendanceData.ts Mock 数据生成工具 出勤率计算逻辑错误
mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx 企业端首页仪表板 人才库跳转、通知模块

Technical Decisions

问题根源分析:

问题2(企业端数据统计为0):

  • 组件正常,使用 enterpriseStatisticsClient 调用 API
  • API 端点:/api/v1/yongren/statistics/*
  • 可能原因:
    1. 后端 API 返回空数据(数据库无数据)
    2. JWT token 中的 companyId 无效
    3. 企业用户没有关联的人才数据
  • 修复方向:检查后端 API 响应,确保数据正确返回

问题6(人才端考勤数据为0):

  • 当前使用 Mock 数据 (generateMockAttendanceData)
  • 未连接真实 API
  • 初始状态 normalDays: 0 可能导致显示问题
  • 修复方向:连接真实 API 或修复 Mock 数据初始化

问题9(人才端出勤率计算136%):

  • 计算逻辑在 calculateAttendanceStats 函数:

    const attendanceRate = workDays.length > 0
    ? Math.round((normalDays / workDays.length) * 100)
    : 0
    
  • 问题:normalDays 包含周末,但 workDays 应排除周末

  • 修复方向:修正计算公式,确保出勤率不超过 100%

  • 需求:改为固定值(22天,100%)

Implementation Plan

Pre-Development Tasks(开始前的准备)

✅ 所有前置任务已完成(通过9个并行Agent探索)

  • [x] 前置任务 0.1:解决测试账号 401 认证问题

    • ✅ 已发现正确的测试账号
    • 企业端测试账号13800013800(对应公司127,有3个在职人员)
    • 人才端测试账号13800138004
    • 数据库状态:公司127有完整数据(3人在职,薪资1000-3000元)
  • [x] 前置任务 0.2:API 发现

    • ✅ 企业端统计API:/api/v1/yongren/statistics/*
    • ✅ 订单详情API:/api/v1/yongren/order/company-orders/:id/stats
    • ✅ 薪资记录API:/api/v1/talent/employment/salary-records?month=YYYY-MM&take=N
  • [x] 前置任务 0.3:代码调查

    • ✅ 订单管理:allin-packages/order-management-ui/src/components/OrderDetailModal.tsx
    • ✅ 订单详情(小程序):mini-ui-packages/yongren-order-management-ui/src/pages/OrderDetail/OrderDetail.tsx
    • ✅ 远程打卡:mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx 第151行
    • ✅ 薪资记录:mini-ui-packages/rencai-employment-ui/src/pages/EmploymentPage/EmploymentPage.tsx

Implementation Strategy(实施方案选择)

针对问题6和问题9的矛盾,明确选择:

本次修复采用 方案 A(短期修复)

  • 问题6(考勤数据):继续使用 Mock 数据,修正返回值确保不为 0
  • 问题9(出勤率):修改 Mock 数据生成函数,返回固定值(22天,100%)

理由:真实 API 端点未知,连接成本高。先用 Mock 修复前端显示问题,后续再连接真实 API。

长期计划(可选,非本次范围)

  • 任务 X.1:设计并实现考勤数据 API
  • 任务 X.2:前端连接真实 API,替换 Mock 数据
  • 任务 X.3:移除 Mock 数据相关代码

高优先级任务(数据类)

问题2:企业端-数据统计模块无数据展示

  • [x] 探索完成 - 数据库中实际有数据!

    • 本地数据库状态(公司127):
    • 在职人数:3人
    • 平均薪资:¥2000
    • 在职率:100%
    • 残疾类型:视力残疾(3人)
    • 性别分布:1男2女
  • [x] 验证完成 - 使用正确账号登录后数据正常显示!

    • 测试账号13800013800 / 123123(明文密码,用于测试)
    • 验证结果
    • 在职人数:3 ✅
    • 平均薪资:¥2,000 ✅
    • 在职率:100% ✅
    • 户籍省份分布:山东省、山西省、青海省 ✅
    • 结论:问题2的根源是测试账号认证问题,不是代码bug。使用正确的企业账号登录后,所有数据都正确显示。

问题6:人才端-本月出勤数据为0

  • [x] 探索完成 - 问题根源已定位

    • 文件mini-ui-packages/rencai-attendance-ui/src/pages/AttendancePage/AttendancePage.tsx
    • 问题位置:第37-43行,初始状态 normalDays: 0
  • [ ] 任务 6.1:修复初始状态

    • 文件:mini-ui-packages/rencai-attendance-ui/src/pages/AttendancePage/AttendancePage.tsx 第37-43行
    • 修改前:

      const [stats, setStats] = useState<AttendanceStatsType>(() => ({
      attendanceRate: 100,
      normalDays: 0,  // ← 问题根源
      lateCount: 0,
      earlyLeaveCount: 0,
      absentCount: 0
      }))
      
    • 修改后:

      const [stats, setStats] = useState<AttendanceStatsType>(() => {
      const { year, month } = getCurrentYearMonth()
      return generateMockAttendanceData(year, month).stats
      })
      
    • 验证:首次渲染时应显示正确的统计数据,而非0

问题9:人才端-出勤率计算异常

  • [x] 探索完成 - 问题根源已定位

    • 文件mini-ui-packages/rencai-attendance-ui/src/utils/mockAttendanceData.ts
    • 问题位置:第51-75行 calculateAttendanceStats 函数
    • 根本原因normalDays 从所有记录统计,包含周末的 NORMAL 状态
  • [ ] 任务 9.1:修复 normalDays 计算逻辑

    • 文件:mini-ui-packages/rencai-attendance-ui/src/utils/mockAttendanceData.ts 第58行
    • 修改前:

      const normalDays = records.filter(r => r.status === AttendanceStatus.NORMAL).length
      
    • 修改后:

      const normalDays = workDays.filter(r => r.status === AttendanceStatus.NORMAL).length
      
    • 说明:只从工作日(workDays)中统计 NORMAL 状态,排除周末

  • [ ] 任务 9.2:改为固定值(展示层修复)

    • 文件:mini-ui-packages/rencai-attendance-ui/src/utils/mockAttendanceData.ts 第133-135行
    • 动作:修改 generateMockAttendanceData 函数返回值
    • 修改:

      const stats: AttendanceStats = {
      attendanceRate: 100,
      normalDays: 22,
      lateCount: 0,
      earlyLeaveCount: 0,
      absentCount: 0
      }
      
    • 备注:根据业务需求直接返回固定值(22天,100%)

中优先级任务(功能完善)

问题1:网页端-订单管理薪资改为可手动输入

  • [x] 探索完成 - 文件和代码位置已定位

    • 前端文件allin-packages/order-management-ui/src/components/OrderDetailModal.tsx
    • 薪资字段位置:第888行
    • 后端文件allin-packages/order-module/src/routes/order-custom.routes.ts
  • [ ] 任务 1.0:新增后端薪资更新 API

    • 文件:allin-packages/order-module/src/routes/order-custom.routes.ts
    • 动作:添加新的路由 PUT /persons/salary
    • 参考现有路由:PUT /persons/work-statusPUT /persons/dates
    • 示例代码:

      const updatePersonSalaryRoute = createRoute({
      method: 'put',
      path: '/persons/salary',
      middleware: [authMiddleware],
      request: {
      body: {
        content: {
          'application/json': {
            schema: z.object({
              orderId: z.number().int().positive(),
              personId: z.number().int().positive(),
              salaryDetail: z.number().nonnegative()
            })
          }
        }
      }
      }
      });
      
    • 服务方法:在 OrderService 中添加 updatePersonSalary 方法

  • [ ] 任务 1.1:添加前端薪资编辑功能

    • 文件:allin-packages/order-management-ui/src/components/OrderDetailModal.tsx
    • 位置1:第251行后 - 添加薪资更新 mutation
    • 位置2:第501行后 - 添加 handleUpdateSalary 处理函数
    • 位置3:第888行 - 将纯文本改为 Input 组件
    • 修改前:

      <TableCell>¥{person.salaryDetail || 0}</TableCell>
      
    • 修改后:

      <TableCell>
      <Input
      type="number"
      defaultValue={person.salaryDetail || 0}
      onBlur={(e) => {
        const value = parseFloat(e.target.value);
        if (!isNaN(value) && value !== (person.salaryDetail || 0)) {
          handleUpdateSalary(person.personId, value);
        }
      }}
      className="w-24"
      />
      </TableCell>
      

问题3:企业端-订单详情打卡数据改为固定内容

  • [x] 探索完成 - 文件和代码位置已定位

    • 文件mini-ui-packages/yongren-order-management-ui/src/pages/OrderDetail/OrderDetail.tsx
    • API端点/api/v1/yongren/order/company-orders/:id/stats
  • [ ] 任务 3.1:修改打卡数据显示为固定值

    • 文件:mini-ui-packages/yongren-order-management-ui/src/pages/OrderDetail/OrderDetail.tsx
    • 位置1:第540行 - 打卡完成率
    • 位置2:第547行 - 工资视频百分比
    • 位置3:第554行 - 个税视频百分比
    • 修改前:

      <Text className="text-xs text-gray-500">{statistics?.checkinStats.percentage || 0}%</Text>
      <Text className="text-xs text-gray-500">{statistics?.salaryVideoStats.percentage || 0}%</Text>
      <Text className="text-xs text-gray-500">{statistics?.taxVideoStats.percentage || 0}%</Text>
      
    • 修改后:

      <Text className="text-xs text-gray-500">100%</Text>
      <Text className="text-xs text-gray-500">100%</Text>
      <Text className="text-xs text-gray-500">100%</Text>
      
    • 说明:保持 current/total 的动态显示,只将百分比固定为 100%

问题5:人才端-小程序远程打卡提示修改

  • [x] 探索完成 - 文件和代码位置已定位

    • 文件mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx
    • 位置:第151行 handleClockIn 函数
  • [ ] 任务 5.1:修改远程打卡提示文案

    • 文件:mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx 第151行
    • 修改前:

      const handleClockIn = () => {
      Taro.showToast({ title: '远程打卡功能开发中', icon: 'none' })
      }
      
    • 修改后:

      const handleClockIn = () => {
      Taro.showToast({ title: '已打卡成功', icon: 'success' })
      }
      
    • 说明:纯文案修改,图标从 none 改为 success

低优先级任务(优化类)

问题4:企业端-首页人才库点击无跳转

  • [x] 探索完成 - 问题根源已定位

    • 文件mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx
    • 问题根源:使用了 Taro.navigateTo 而非 Taro.switchTab
    • 原因:人才库页面是 tabBar 页面,navigateTo 无法跳转
  • [ ] 任务 4.1:修复跳转方法

    • 文件:mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx 第130行
    • 修改前:

      case 'talentPool':
      Taro.navigateTo({
      url: '/pages/yongren/talent/list/index'
      })
      break
      
    • 修改后:

      case 'talentPool':
      Taro.switchTab({
      url: '/pages/yongren/talent/list/index'
      })
      break
      

问题7:人才端-薪资记录显示范围修改

  • [x] 探索完成 - 文件和代码位置已定位

    • 文件mini-ui-packages/rencai-employment-ui/src/pages/EmploymentPage/EmploymentPage.tsx
    • 当前行为:显示所有薪资记录中最近的 3 条
    • 后端支持:已支持 month 参数过滤
  • [ ] 任务 7.1:修改薪资查询时间范围

    • 文件:mini-ui-packages/rencai-employment-ui/src/pages/EmploymentPage/EmploymentPage.tsx 第60-72行
    • 修改前:

      const res = await talentEmploymentClient.employment['salary-records'].$get({
      query: { take: 3 }
      })
      
    • 修改后:

      const now = new Date()
      const lastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1)
      const monthStr = `${lastMonth.getFullYear()}-${String(lastMonth.getMonth() + 1).padStart(2, '0')}`
      
      const res = await talentEmploymentClient.employment['salary-records'].$get({
      query: { month: monthStr, take: 3 }
      })
      
    • 说明:只修改前端,后端已支持 month 参数

问题8:人才端-首页去掉最新通知模块

  • [x] 探索完成 - 文件和代码位置已定位

    • 文件mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx
    • ⚠️ 重要说明:问题标题说"企业端",但截图实际是人才端首页
    • 通知模块位置:第307-343行
  • [ ] 任务 8.1:移除最新通知模块

    • 文件:mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx
    • 位置1:第44-51行 - 删除 Notification 接口定义
    • 位置2:第71-77行 - 删除 notifications 常量数组
    • 位置3:第307-343行 - 删除整个"最新通知列表"区块
    • 备注:企业端首页本身就没有通知模块,无需修改

Acceptance Criteria

高优先级 AC

问题2:企业端-数据统计模块

  • AC 2.1: Given 企业用户已登录,when 访问数据统计页面,then 显示正确的在职人数、平均薪资、在职率(非 0)
  • AC 2.2: Given API 返回空数据,when 显示统计卡片,then 显示"暂无数据"而非"0"
  • AC 2.3: Given 数据加载失败,when 发生错误,then 显示友好的错误提示

问题6:人才端-本月出勤数据

  • AC 6.1: Given 人才用户已登录,when 访问考勤记录页面,then 显示正确的本月出勤天数(非 0)
  • AC 6.2: Given 数据加载中,when 首次访问页面,then 显示 loading 状态而非"0"
  • AC 6.3: Given 无考勤数据,when 用户没有打卡记录,then 显示"暂无数据"提示

问题9:人才端-出勤率计算

  • AC 9.1: Given 计算出勤率,when 正常出勤天数超过工作日,then 出勤率不超过 100%(计算层要求)
  • AC 9.2: Given 需求要求(展示层),when 用户访问考勤记录页面,then 显示固定值(22天,100%)
    • 注:这是展示层的固定值,不代表实际计算结果
  • AC 9.3: Given 计算逻辑修正,when 任何输入情况,then 出勤率始终 ≤ 100%(计算层要求)

中优先级 AC

问题1:订单管理薪资输入

  • AC 1.1: Given 订单详情页,when 点击薪资字段,then 可以手动输入/修改薪资值
  • AC 1.2: Given 修改薪资后,when 点击保存,then 数据成功提交到后端

问题3:订单详情打卡数据

  • AC 3.1: Given 订单详情页,when 查看打卡数据统计,then 显示固定值(100%, 100%, 100%)
  • AC 3.2: Given 固定值显示,when 刷新页面,then 值保持不变

问题5:远程打卡提示

  • AC 5.1: Given 远程打卡按钮,when 点击按钮,then 显示"已打卡成功"提示
  • AC 5.2: Given 提示修改,when 用户看到提示,then 不再显示"该功能开发中"

低优先级 AC

问题4:人才库跳转

  • AC 4.1: Given 首页人才库按钮,when 点击,then 正确跳转到人才列表页面

问题7:薪资记录范围

  • AC 7.1: Given 薪资记录页面,when 查询数据,then 显示上个月完整月份的薪资记录
    • 例如:2026年3月查询时,显示2026年2月1日-2月28日的薪资
    • 边界情况:如果上个月无数据,then 显示"暂无数据"提示

问题8:首页通知模块

  • AC 8.1: Given 首页,when 页面加载,then 不显示"最新通知"模块
  • AC 8.2: Given 移除通知模块,when 页面渲染,then 布局正常无空白

Additional Context

Dependencies

前端依赖:

  • @tanstack/react-query - 数据获取和缓存
  • @tarojs/components - Taro 小程序组件库
  • @d8d/mini-shared-ui-components - 共享 UI 组件
  • @d8d/yongren-shared-ui - 企业端共享组件
  • @d8d/rencai-shared-ui - 人才端共享组件

后端依赖:

  • /api/v1/yongren/statistics/* - 企业端统计 API
  • 待确认:人才端考勤 API 端点
  • 待确认:订单管理 API 端点

其他依赖:

  • JWT token 中的 companyId(用于企业端数据隔离)
  • 数据库中的考勤数据和统计数据

Testing Strategy

E2E 测试:

  • 使用 Playwright 验证数据统计页面正确显示数据
  • 使用 Playwright 验证考勤记录页面正确显示出勤数据
  • 验证出勤率计算不超过 100%

单元测试:

  • 测试 calculateAttendanceStats 函数的各种边界情况
  • 测试出勤率计算逻辑(正常、全勤、缺勤、迟到等)
  • 测试固定值返回逻辑

单元测试用例(出勤率计算):

describe('calculateAttendanceStats', () => {
  it('正常情况:20天工作日,出勤20天 → 100%', () => {
    const result = calculateAttendanceStats(/* 20 work days, 20 present */)
    expect(result.attendanceRate).toBe(100)
    expect(result.normalDays).toBe(20)
  })

  it('全勤:22天工作日,出勤22天 → 100%', () => {
    const result = calculateAttendanceStats(/* 22 work days, 22 present */)
    expect(result.attendanceRate).toBe(100)
  })

  it('缺勤:22天工作日,出勤15天 → 68%', () => {
    const result = calculateAttendanceStats(/* 22 work days, 15 present */)
    expect(result.attendanceRate).toBe(68)
  })

  it('边界:22天工作日,出勤0天 → 0%', () => {
    const result = calculateAttendanceStats(/* 22 work days, 0 present */)
    expect(result.attendanceRate).toBe(0)
  })

  it('边界:22天工作日,出勤30天 → 100%(上限)', () => {
    const result = calculateAttendanceStats(/* 22 work days, 30 present */)
    expect(result.attendanceRate).toBe(100) // 不超过100
  })
})

固定值验证测试: ```typescript describe('generateMockAttendanceData - 固定值模式', () => { it('应返回固定的出勤率100%和22天', () => {

const { stats } = generateMockAttendanceData(2026, 3)
expect(stats.attendanceRate).toBe(100)
expect(stats.normalDays).toBe(22)

}) })

手动测试:

  • 企业端登录后查看数据统计页面
  • 人才端登录后查看考勤记录页面
  • 验证远程打卡提示文案
  • 验证人才库跳转功能

Notes

探索完成后的新发现:

  1. 测试账号信息更新

    • 企业端正确账号:13800013800(对应公司127,有3个在职人员)
    • 人才端账号:13800138004
    • 原文档记录的 13800138005 可能不正确
  2. 数据库状态(公司127):

    • 在职人数:3人(刘成雨、王霞、吴桂英)
    • 平均薪资:¥2000(3000+2000+1000÷3)
    • 残疾类型:全部为视力残疾
    • 性别分布:1男2女
  3. 问题8端点说明

    • 问题标题说"企业端-首页去掉最新通知模块"
    • 实际截图显示的是人才端首页rencai-dashboard-ui
    • 企业端首页(yongren-dashboard-ui)本身就没有通知模块

高风险项目:

  • 问题1(订单薪资编辑):需要新增后端 API

    • 现有 API:PUT /persons/work-statusPUT /persons/dates
    • 缺失PUT /persons/salary - 薪资更新接口
    • 建议:在 order-custom.routes.ts 中添加新的薪资更新路由
  • 问题2(数据统计):已验证 - 使用正确账号 13800013800 / 123123 后数据正常显示

已知限制:

  • 考勤数据仍使用 Mock 数据,未连接真实 API
  • 订单管理薪资编辑的后端 API 端点待确认

后续考虑:

  • 问题3(打卡数据固定值)是临时修复,后续可能需要恢复动态数据
  • 建议为所有关键数据添加 loading 和错误状态
  • 建议添加数据刷新功能(下拉刷新)
  • 考虑添加离线缓存功能