2.6 KiB
2.6 KiB
实现方案 —— 2026-04-19-00-24-02
方案目标
完善 Dashboard 数据概览:新增全部报告卡片、修复图表重叠、增加时间维度切换。
需求 1:新增"全部报告总数"卡片
修改文件:src/pages/Dashboard.tsx
- 扩展 stats 结构:增加
totalCount字段,表示全部报告总数(原reportCount改为仅统计本月)。 - 更新计算逻辑:在 useEffect 中计算
userReports.length作为totalCount,原reportCount保留为当月数量。 - 调整卡片布局:将原来的 4 卡片网格改为包含 5 个统计项,或保持 4 卡片但替换/调整内容。根据用户要求,在"本月报告总数"左侧插入"全部报告总数",并将网格列数从 4 改为 5(
lg:grid-cols-5)或保持 4 列但替换其中一个卡片。
需求 2:修复图表日期文字与 X 轴重叠
修改文件:src/pages/Dashboard.tsx
- 增大底部留白:将 Canvas 的
padding或图表绘制区域的高度计算中加入更大的底部偏移(如bottomPadding = 30而非原来的 10)。 - 调整文字 Y 坐标:将
ctx.fillText(label, x, h - 10)改为ctx.fillText(label, x, h - 5)或更下方,确保文字不会与 X 轴线(通常在h - padding位置绘制)重叠。 - 调整字体大小:30 天模式下缩小字体到 9px,避免文字过密。
需求 3:时间维度切换
修改文件:src/pages/Dashboard.tsx
- 增加状态:
const [timeRange, setTimeRange] = useState<'7days' | '1month'>('7days'); - 响应式计算:将
useEffect的依赖数组增加timeRange,当切换时重新计算trend和trendLabels。 - 标签格式化:
- 7 天模式:显示
MM-DD(如 04-13) - 30 天模式:显示
DD(如 13),避免过密
- 7 天模式:显示
- UI 控件:在图表标题右侧增加切换按钮组(最近 7 天 / 最近 30 天)。
涉及文件及修改点
| 文件 | 修改点 |
|---|---|
src/pages/Dashboard.tsx |
stats 结构扩展、totalCount 计算、卡片布局调整、timeRange 状态、趋势数据响应式计算、Canvas 绘制坐标修复、时间切换 UI |
风险与注意事项
- 原代码中
reportCount可能表示的是全部报告数,需要确认其原意。如果原意是全部报告数,则需要新增monthCount而非修改reportCount。根据用户方案,将reportCount改为当月数,totalCount为全部数。 - Canvas 绘制中
padding、chartH的计算需要同步调整,确保数据线不会画到文字区域。 - 30 天模式下数据点密集,需要考虑是否跳点显示标签(如只显示奇数天)。