Status: done
作为企业用户, 我想要查看当前在职人员的实时统计数据, 以便了解企业当前的人员状况,避免因历史数据查询功能名不副实造成的困惑。
企业小程序数据统计页面的年月筛选器存在设计与实现不一致的问题:
代码问题:
getEmploymentCount 等方法接收了 year/month 参数,但变量名错误(targetYear vs _targetYear)previousCount = currentCount)用户困惑:选择历史月份时,数据显示的还是当前在职人数,功能名不副实
Given 用户是企业用户 When 用户访问数据统计页面 Then 页面只显示当前统计数据 And 没有年月筛选器 UI
Given 用户访问数据统计页面 When 页面加载完成 Then 统计卡片只显示当前数值 And 没有显示"比上月"对比数据
Given 用户查看统计卡片 When 查看在职人数、平均薪资、在职率 Then 只显示当前数值 And 不显示环比变化数据
Given 用户访问数据统计页面或首页看板 When 查看统计卡片 Then 不显示"新增人数"卡片 And 只显示:在职人数、平均薪资、在职率
Given 后端统计 API When 前端调用统计接口 Then 返回简化的响应数据(只包含当前值) And 不包含 previousCount、previousAverage、previousRate、change 等字段
Given 数据统计页面 When 用户查看分布图(残疾类型、性别、年龄等) Then 分布图显示当前在职人员的统计 And 数据准确反映当前在职人员情况
[ ] Task 1: 后端 API 简化 (AC: #5)
statistics.schema.ts - 移除 YearMonthQuery 类型previousCount、change 等字段statistics.service.ts - 简化方法签名,移除 query 参数_targetYear、_targetMonth、_previousYear 等)previousCount = currentCount 等)statistics.routes.ts - 移除 query 参数传递[ ] Task 2: 前端 UI 简化 (AC: #1, #2, #3)
years、months 状态和 Picker 组件)timeFilter 状态和 setTimeFilter 处理函数queryFilters 相关代码queryFilters 依赖[ ] Task 3: 移除"新增人数"指标 (AC: #4)
getNewCount 方法/new-count 路由NewCountResponseSchemagetNewCount API 调用[ ] Task 4: E2E 测试更新 (AC: #6)
[ ] Task 5: 验证与文档 (AC: 全部)
调查发现"新增人数"指标存在业务逻辑问题:
SELECT COUNT(DISTINCT dp.id) FROM employment_order ... WHERE eo.company_id = ?决定先移除此指标,等产品和技术理清楚业务需求后再决定是否恢复。如果需要恢复,应该:
根据代码分析,当前实现存在以下问题:
后端问题 (statistics.service.ts):
getEmploymentCount 接收 year/month 参数但未使用(lines 382-397)targetYear vs _targetYear_startDate、_endDate 完全未在查询中使用previousCount = currentCount 导致 change 永远为 0getEmploymentRate 有未使用的变量 _targetYear、_targetMonth前端问题 (Statistics.tsx):
queryFilters 传递到后端但后端未实际使用API 层问题:
EnterpriseStatisticsQuerySchema 扩展自 YearMonthQuerySchemaquery 参数但服务层忽略方案 A: 移除年月筛选器(采用)
方案 B: 实现历史数据查询(不采用)
后端模块: allin-packages/statistics-module/
src/services/statistics.service.ts - 统计服务src/schemas/statistics.schema.ts - Zod Schema 定义src/routes/statistics.routes.ts - API 路由tests/integration/statistics.integration.test.ts - 集成测试前端模块: mini-ui-packages/yongren-statistics-ui/
src/pages/Statistics/Statistics.tsx - 数据统计页面src/api/enterpriseStatisticsClient.ts - API 客户端E2E 测试: web/tests/e2e/mini-enterprise/
statistics-page.spec.ts - 数据统计页 E2E 测试(在 Story 13.12 中创建)Schema 修改:
// 移除 YearMonthQuerySchema(可保留以备将来使用,但当前不使用)
// 简化响应 Schema
export const EmploymentCountResponseSchema = z.object({
companyId: z.number().int().positive(),
count: z.number().int().min(0) // 移除 previousCount, change
});
Service 修改:
// 简化方法签名
async getEmploymentCount(companyId: number): Promise<{
companyId: number;
count: number;
}> {
// 移除所有日期相关变量和逻辑
}
前端修改:
// 移除时间筛选状态
const [timeFilter, setTimeFilter] = useState(...)
const [showDatePicker, setShowDatePicker] = useState(...)
const years = ...
const months = ...
// 移除 queryFilters
const queryFilters = useMemo(...)
// 移除对比数据显示
<Text>↑ 比上月增加{change}人</Text>
后端单元测试:
statistics.integration.test.tspreviousCount、change 字段E2E 测试:
Playwright MCP 验证:
遵循项目统一结构:
any 类型parseWithAwait 验证响应/mnt/code/188-179-template-6/allin-packages/statistics-module/src/services/statistics.service.ts/mnt/code/188-179-template-6/mini-ui-packages/yongren-statistics-ui/src/pages/Statistics/Statistics.tsx/mnt/code/188-179-template-6/allin-packages/statistics-module/src/schemas/statistics.schema.ts/mnt/code/188-179-template-6/allin-packages/statistics-module/src/routes/statistics.routes.ts/mnt/code/188-179-template-6/web/tests/e2e/mini-enterprise/statistics-page.spec.ts (Story 13.12)_bmad-output/planning-artifacts/epics.md (Epic 13: 跨端数据同步测试)_bmad-output/project-context.mdClaude Opus 4.5 (claude-opus-4-5-20251101)
allin-packages/statistics-module/src/schemas/statistics.schema.ts - 简化响应 Schema,移除 NewCountResponseSchemaallin-packages/statistics-module/src/services/statistics.service.ts - 简化服务方法,移除 getNewCount 方法allin-packages/statistics-module/src/routes/statistics.routes.ts - 移除 query 参数和 /new-count 路由allin-packages/statistics-module/tests/integration/statistics.integration.test.ts - 更新测试mini-ui-packages/yongren-statistics-ui/src/pages/Statistics/Statistics.tsx - 简化 UI,移除"新增人数"卡片mini-ui-packages/yongren-dashboard-ui/src/components/NewCountCard.tsx - 移除"新增人数"卡片组件(如果存在)mini-ui-packages/yongren-statistics-ui/src/api/enterpriseStatisticsClient.ts - 移除 getNewCount API 调用mini-ui-packages/yongren-statistics-ui/src/api/types.ts - 类型定义web/tests/e2e/mini-enterprise/statistics-page.spec.ts - E2E 测试(Story 13.12)mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx - 首页看板(如果有"新增人数"卡片)