# 故事 011.005:数据统计功能实现 ## 状态 Draft ## 故事 **作为**企业用户, **我希望**查看企业残疾人就业的数据统计图表, **以便**进行数据分析和决策支持。 ## 验收标准 1. [ ] 数据统计页展示完整的统计图表集合 2. [ ] 残疾类型分布图表正确显示,数据准确 3. [ ] 性别分布、年龄分布、户籍省份分布图表功能正常 4. [ ] 支持数据筛选(时间范围、部门等)和图表交互 5. [ ] 页面设计符合原型标准,图表加载性能良好 ## 任务 / 子任务 - [ ] 任务1:实现数据统计页面框架(AC:1) - [ ] 创建数据统计页面组件,使用基础布局组件 - [ ] 设计图表布局(网格或选项卡布局) - [ ] 实现页面标题和筛选条件区域 - [ ] 添加图表加载状态和错误提示 - [ ] 任务2:实现残疾类型分布图表(AC:2) - [ ] 集成数据统计API(史诗012提供) - [ ] 实现饼图或环形图展示残疾类型分布 - [ ] 添加图例和百分比显示 - [ ] 支持图表点击交互(查看详情) - [ ] 添加数据表格展示(可选) - [ ] 任务3:实现人口统计图表组(AC:3) - [ ] 实现性别分布图表(饼图或柱状图) - [ ] 实现年龄分布图表(柱状图,按年龄段分组) - [ ] 实现户籍省份分布图表(地图或条形图) - [ ] 添加图表联动和筛选功能 - [ ] 优化多图表同时加载的性能 - [ ] 任务4:实现数据筛选和交互功能(AC:4) - [ ] 添加时间范围筛选器(年、月、季度) - [ ] 添加部门/岗位筛选器(如有多部门) - [ ] 实现图表数据下钻功能(如点击省份查看城市分布) - [ ] 添加数据导出功能(图表图片、数据表格) - [ ] 实现图表类型切换(如柱状图/折线图切换) - [ ] 任务5:优化性能和用户体验(AC:5) - [ ] 参考原型设计:`docs/小程序原型/yongren.html`中的数据统计页面 - [ ] 实现图表懒加载和渐进式渲染 - [ ] 添加图表数据缓存机制 - [ ] 优化移动端图表显示和交互 - [ ] 确保页面加载速度符合性能要求 - [ ] 任务6:编写集成测试 - [ ] 编写图表数据加载测试 - [ ] 测试数据筛选功能 - [ ] 测试图表交互功能 - [ ] 性能测试(大数据量图表渲染) ## 开发笔记 ### 依赖关系 **依赖故事**: - 011.001(基础框架搭建):提供API客户端、路由、基础布局 - 011.002(认证与首页):提供认证状态管理 - 011.003(人才管理):统计基于人才数据 - 011.004(订单管理):统计可能涉及订单数据 ### API规范 **数据统计API**(史诗012提供): - 残疾类型统计接口 - 性别年龄统计接口 - 地域分布统计接口 - 时间趋势统计接口 **企业统计API**(史诗012提供): - 企业维度数据统计接口 - 实时数据更新接口 **技术集成**: - 使用故事011.001集成的RPC客户端 - API路径前缀:`api/v1/yongren` ### 组件规范 **数据统计页设计规范**: 必须严格对照原型文件 `docs/小程序原型/yongren.html` 第865-1113行的数据统计页面设计实现: **页面结构**: - **注意**:小程序环境中状态栏由宿主提供,无需自行实现 - 内容区域:`h-[calc(100%-60px)] overflow-y-auto p-4`(仅减去底部导航60px) - 底部导航:数据标签激活状态 **时间筛选区域**(第880-886行): - 容器:`flex justify-between items-center mb-4` - 标题:`

数据统计

` - 时间选择器:`flex items-center bg-gray-100 rounded-lg px-3 py-1` - 时间显示:`2023年11月` - 下拉图标:`` **统计卡片网格**(第889-910行): - 容器:`grid grid-cols-2 gap-3 mb-4` - 统计卡片:`stat-card`(复用基础样式) - 标题:`

在职人数

` - 数值:`

24

` - 趋势指示:`

↑ 比上月增加2人

`(绿色-上涨,红色-下降) - 卡片类型:在职人数、平均薪资、在职率、新增人数 **残疾类型分布图表**(第913-931行): - 容器:`card bg-white p-4 mb-4` - 标题:`

残疾类型分布

` - 图表容器:`chart-container mb-2`(高度200px,相对定位) - 柱状图实现:使用 `.chart-bar` 样式(绝对定位,底部对齐) - 样式:`position: absolute; bottom: 0; width: 30px; background-color: #3b82f6; border-radius: 4px 4px 0 0;` - 通过内联样式设置 left 和 height - 横坐标标签:`flex justify-between text-xs text-gray-500`,标签:肢体、听力、视力、言语、智力、精神 **性别分布图表**(第934-948行): - 容器:`card bg-white p-4 mb-4` - 标题:`

性别分布

` - 图表容器:`.bar-chart`(`height: 120px; display: flex; align-items: end; justify-content: center; gap: 40px;`) - 柱状图组件:`.bar-container`(`display: flex; flex-direction: column; align-items: center;`) - 数值:`.bar-value`(`font-size: 14px; font-weight: 600; margin-bottom: 4px;`) - 柱体:`.bar`(`width: 40px; border-radius: 4px 4px 0 0;`,通过内联样式设置 height 和 background-color) - 标签:`.bar-label`(`margin-top: 8px; font-size: 12px; color: #6b7280;`) - 颜色:男性 `#3b82f6`,女性 `#ec4899` **年龄分布图表**(第951-...行): - 容器:`card bg-white p-4 mb-4` - 标题:`

年龄分布

` - 饼图容器:`.pie-chart`(`width: 200px; height: 200px; border-radius: 50%; position: relative; margin: 0 auto;`) - 使用 `conic-gradient` 实现饼图分区(见基础样式规范) - 图例区域:`.pie-legend`(`display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 16px;`) - 图例项:`.legend-item`(`display: flex; align-items: center; font-size: 12px;`) - 颜色块:`.legend-color`(`width: 12px; height: 12px; border-radius: 2px; margin-right: 6px;`) - 标签:年龄分段和百分比 **图表组件要求**: - 响应式设计,适配不同屏幕尺寸 - 清晰的视觉层次和颜色方案 - 必要的辅助信息(标题、图例、数据标签) - 交互反馈(悬停、点击、选中状态) **UI组件使用**: - 使用图表库(如Recharts、Chart.js等,根据项目现有选择) - 复用基础UI组件(卡片、筛选器、按钮等) - 遵循UI包开发规范 [来源:docs/architecture/coding-standards.md#ui包开发提示] ### 文件位置 **页面组件位置**: - `mini/src/pages/yongren/statistics/` - 数据统计页面 **图表组件位置**: - `mini/src/components/charts/` - 图表组件目录 - `DisabilityTypeChart.tsx` - 残疾类型分布图表 - `GenderDistributionChart.tsx` - 性别分布图表 - `AgeDistributionChart.tsx` - 年龄分布图表 - `ProvinceDistributionChart.tsx` - 省份分布图表 - `ChartFilters.tsx` - 图表筛选组件 ### 技术约束 - **性能优化**:多个图表同时加载需优化请求和渲染性能 - **数据准确性**:统计口径需明确,与企业业务逻辑一致 - **移动端适配**:图表在移动端需保持良好的可读性和交互性 - **数据权限**:统计仅限本企业数据,不能跨企业访问 ### 图表技术选型 **现有技术栈参考**: - 根据项目现有图表库选择(需检查mini项目现有依赖) - 如无现有图表库,推荐使用Recharts(React友好,TypeScript支持好) - 地图图表可能需要额外库(如中国地图数据) ### 测试要求 **测试框架**:Jest + Testing Library **关键测试场景**: 1. **图表数据测试**: - 数据加载准确性测试 - 空数据状态处理测试 - 数据错误处理测试 2. **交互功能测试**: - 筛选条件功能测试 - 图表点击交互测试 - 数据下钻功能测试 3. **性能测试**: - 多图表同时加载性能测试 - 大数据量渲染性能测试 - 移动端渲染性能测试 4. **集成测试**: - 与统计API的集成测试 - 页面导航和数据流测试 ## 变更日志 | 日期 | 版本 | 描述 | 作者 | |------|------|------|------| | 2025-12-17 | 1.0 | 初始创建(数据统计故事) | Bob(Scrum Master) | ## 开发代理记录 *此部分由开发代理在实施过程中填充* ## QA结果 *来自QA代理对已完成故事实施的QA审查结果*