Status: completed
作为企业管理员, 我在企业小程序的订单列表中查看订单卡片时, 我希望看到准确的订单统计数据(实际人数、本月打卡、工资视频、个税视频), 以便了解订单执行情况和人员合规状态。
当前问题: 企业小程序订单卡片中的统计字段显示为 0:
根本原因: 前端 OrderList.tsx 文件中硬编码了统计值为 0,未调用后端统计 API。
影响范围: 企业用户无法通过小程序了解订单执行情况和人员合规状态,影响业务决策。
Given 企业小程序订单列表页面 When 页面加载订单数据时 Then 应该从后端 API 获取实际统计数据 And "实际人数"应显示订单实际关联的残疾人人数(当前已正确) And "本月打卡"应显示实际的打卡统计数据 And "工资视频"应显示实际的工资视频统计数据 And "个税视频"应显示实际的个税视频统计数据
Given 订单卡片显示本月打卡统计
When 查看统计数据时
Then 应显示格式:实际打卡数/订单总人数 百分比
And 数据来源:order_person_asset 表,asset_type='checkin_video'
And 统计本月内该订单关联人员的打卡视频数量
Example: 24/30 80% 表示 30 人中有 24 人已打卡
Given 订单卡片显示工资视频统计
When 查看统计数据时
Then 应显示格式:实际视频数/订单总人数 百分比
And 数据来源:order_person_asset 表,asset_type='salary_video'
And 统计本月内该订单关联人员的工资确认视频数量
Example: 22/24 92% 表示 24 人中有 22 人已上传工资视频
Given 订单卡片显示个税视频统计
When 查看统计数据时
Then 应显示格式:实际视频数/订单总人数 百分比
And 数据来源:order_person_asset 表,asset_type='tax_video'
And 统计本月内该订单关联人员的个税确认视频数量
Example: 20/24 83% 表示 24 人中有 20 人已上传个税视频
Given 企业小程序订单列表测试 When 运行 E2E 测试时 Then 应验证订单卡片统计字段正确显示 And 应验证数据从 API 获取而非硬编码 And 应验证百分比计算正确
OrderList.tsx 当前的数据转换逻辑order_person_asset 表结构和字段/api/company-orders/{orderId}/stats 端点OrderList.tsx 的数据转换逻辑enterprise-mini.page.ts 中添加订单统计相关方法:
getOrderCardStats(orderName: string)expectOrderStatsField(orderName, fieldName, expected)web/tests/e2e/specs/cross-platform/order-stats-fix.spec.tsEpic 13: 跨端数据同步测试 (Epic E)
根据 PRD 文档(_bmad-output/planning-artifacts/prd.md),订单统计字段定义如下:
| 字段 | 业务含义 | 数据来源 | 计算逻辑 | 显示格式 |
|---|---|---|---|---|
| 实际人数 | 当前订单实际关联的残疾人人数 | order_person 表 |
统计 order_id 等于当前订单 ID 的记录数量 |
XX人 |
| 本月打卡 | 本月内残疾人上下班打卡的视频记录数量统计 | order_person_asset 表,asset_type='checkin_video' |
统计本月内该订单关联人员的打卡视频数量 | 24/30 80% |
| 工资视频 | 残疾人每月薪资确认视频,用于合规证明和薪资发放记录 | order_person_asset 表,asset_type='salary_video' |
统计本月内该订单关联人员的工资确认视频数量 | 22/24 92% |
| 个税视频 | 残疾人每月个税确认视频,用于税务合规证明 | order_person_asset 表,asset_type='tax_video' |
统计本月内该订单关联人员的个税确认视频数量 | 20/24 83% |
前端文件(需修复):
mini-ui-packages/yongren-order-management-ui/src/pages/OrderList/OrderList.tsx
Line 85-87: 硬编码的统计值
checkinStats: { current: 0, total: orderPersonsCount, percentage: 0 },
salaryVideoStats: { current: 0, total: orderPersonsCount, percentage: 0 },
taxVideoStats: { current: 0, total: orderPersonsCount, percentage: 0 }
后端 API 相关(需检查/创建):
allin-packages/company-order-module/src/routes/company-order.routes.tsallin-packages/company-order-module/src/services/company-order.service.tsallin-packages/company-order-module/src/schemas/company-order.schema.tsE2E 测试文件(需创建):
web/tests/e2e/specs/cross-platform/order-stats-fix.spec.tsweb/tests/e2e/pages/mini/enterprise-mini.page.ts端点设计:
GET /api/company-orders/{orderId}/stats
响应格式:
interface OrderStatsResponse {
orderId: number;
actualPeople: number;
checkinStats: {
current: number;
total: number;
percentage: number;
};
salaryVideoStats: {
current: number;
total: number;
percentage: number;
};
taxVideoStats: {
current: number;
total: number;
percentage: number;
};
}
查询参数(可选):
year: 年份(默认当前年)month: 月份(默认当前月)当前代码问题:
// Line 65-88: 数据转换时硬编码统计值
const transformedOrders = (data.data || []).map((order: OrderData) => {
const orderPersonsCount = order.orderPersons?.length || 0
// ...
return {
// ...
checkinStats: { current: 0, total: orderPersonsCount, percentage: 0 },
salaryVideoStats: { current: 0, total: orderPersonsCount, percentage: 0 },
taxVideoStats: { current: 0, total: orderPersonsCount, percentage: 0 }
}
})
修复方案:
enterpriseOrderClient 中添加统计 API 调用方法useQuery 或并行请求获取每个订单的统计数据本 Story 采用 Playwright MCP 持续验证的测试开发流程:
PRD 文档:
_bmad-output/planning-artifacts/prd.md - 订单统计字段业务定义架构文档:
_bmad-output/planning-artifacts/architecture.md - 技术栈和架构决策相关 Story 文档:
13-12-statistics-page-validation.md - 数据统计页修复经验参考12-4-enterprise-mini-page-object.md - 企业小程序 Page Object12-5-enterprise-mini-login.md - 企业小程序登录测试No significant debug issues encountered during implementation.
Implementation Summary:
Backend API Development (allin-packages/order-module/):
OrderStatsResponseSchema and OrderStatsItemSchema to order.schema.tsorderStatsRoute to order-custom.routes.ts (path: /company-orders/{id}/stats)getOrderStats() service method to order.service.tsyear and month query parameters (defaults to current month)Frontend Code Fix (mini-ui-packages/yongren-order-management-ui/):
useOrderStats() hook for fetching stats per orderOrderCard component that fetches its own stats independentlyOrderStatsResponse type export to api/types.tsE2E Testing (web/tests/e2e/):
getOrderCardStats() and expectOrderStatsField() methods to enterprise-mini.page.tsorder-stats-fix.spec.ts covering all ACsTechnical Decisions:
OrderCard fetches its own stats using React Query, enabling independent loading and cachingFiles Modified:
allin-packages/order-module/src/schemas/order.schema.ts (+37 lines)allin-packages/order-module/src/routes/order-custom.routes.ts (+102 lines)allin-packages/order-module/src/services/order.service.ts (+77 lines)mini-ui-packages/yongren-order-management-ui/src/api/types.ts (+1 line)mini-ui-packages/yongren-order-management-ui/src/pages/OrderList/OrderList.tsx (~150 lines modified)web/tests/e2e/pages/mini/enterprise-mini.page.ts (+142 lines)Files Created:
web/tests/e2e/specs/cross-platform/order-stats-fix.spec.ts (+485 lines)已创建的文件:
_bmad-output/implementation-artifacts/13-13-order-stats-fix.md - Story 文档(已更新)web/tests/e2e/specs/cross-platform/order-stats-fix.spec.ts - E2E 测试文件已修改的文件:
allin-packages/order-module/src/schemas/order.schema.ts - 添加 OrderStatsResponseSchemaallin-packages/order-module/src/routes/order-custom.routes.ts - 添加 /company-orders/{id}/stats 路由allin-packages/order-module/src/services/order.service.ts - 添加 getOrderStats() 方法mini-ui-packages/yongren-order-management-ui/src/api/types.ts - 添加 OrderStatsResponse 类型mini-ui-packages/yongren-order-management-ui/src/pages/OrderList/OrderList.tsx - 修复硬编码统计值web/tests/e2e/pages/mini/enterprise-mini.page.ts - Page Object 扩展2026-01-15: Story 13.13 创建完成
2026-01-15: Story 13.13 实现完成
/company-orders/{id}/stats 端点