1
0
Files
DiAL/openspec/changes/archive/2026-05-11-card-ui-refactor/tasks.md

65 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 1. 后端:配置与类型
- [x] 1.1 types.ts: BaseTargetConfig 新增 group?: string, ResolvedTarget 新增 group: string
- [x] 1.2 config-loader.ts: 解析 group 字段(默认 "default"
- [x] 1.3 shared/api.ts: 新增 RecentSample 接口和 HistoryResponse 接口,移除 SummaryResponse.avgDurationMs移除 TargetStats.avgDurationMs 和 TargetStats.p99DurationMsTargetStatus 中 sparkline 替换为 recentSamples: RecentSample[],新增 group: string
- [x] 1.4 编写 config-loader 的 group 解析校验测试
## 2. 后端:数据存储
- [x] 2.1 store.ts: targets 表新增 grp 列ALTER TABLE 或重建建表语句syncTargets 写入 grp 值
- [x] 2.2 store.ts: 新增 getRecentSamples(targetId, limit) 方法替代 getSparkline返回包含 timestamp/duration_ms/success/matched 的结构化数据
- [x] 2.3 store.ts: getTrend 改用 from/to 时间范围参数替代 hours
- [x] 2.4 store.ts: getHistory 改用 from/to 时间范围 + page/pageSize 分页参数,返回 { items, total, page, pageSize }
- [x] 2.5 store.ts: getTargets 排序改为 ORDER BY CASE WHEN grp='default' THEN 0 ELSE 1 END, grp, id
- [x] 2.6 store.ts: getSummary 移除 avgDurationMs 计算逻辑
- [x] 2.7 store.ts: 移除 getSparkline 方法
- [x] 2.8 编写 store 的新增/变更方法的完整测试
## 3. 后端API 路由
- [x] 3.1 app.ts: createSummaryResponse 移除 avgDurationMs 字段
- [x] 3.2 app.ts: createTargetsResponse 返回 group 和 recentSamples 替代 sparkline移除 stats 中的 avgDurationMs 和 p99DurationMs
- [x] 3.3 app.ts: handleTrend 改用 from/to 查询参数(替代 hours校验参数格式
- [x] 3.4 app.ts: handleHistory 改用 from/to + page/pageSize 参数,返回 HistoryResponse 结构(含 total
- [x] 3.5 app.ts: 移除 mapCheckResult 中已不需要的字段映射
- [x] 3.6 编写 API 路由的测试,覆盖 from/to 参数校验、分页参数校验、recentSamples 返回结构
## 4. 前端:组件重构
- [x] 4.1 新增 StatusBar 组件:渲染 recentSampleCount 个色块UP 绿/DOWN 红/无数据灰)
- [x] 4.2 改造 SparklineChart 为 MiniSparkline接收 RecentSample[] 数据,提取 durationMs 绘制迷你折线图
- [x] 4.3 新增 GroupHeader 组件:显示分组名称和统计信息(分组名 (N个, X UP / Y DOWN)default 显示"默认分组"
- [x] 4.4 新增 TargetCard 组件:固定 280px 宽行1 为 StatusDot + 名称 + 类型标签行2 为 StatusBar + MiniSparklinehover 上浮效果,点击触发回调
- [x] 4.5 新增 CardGrid 组件CSS Grid auto-fill 280px 响应式布局,接收 targets 数组渲染 TargetCard
- [x] 4.6 新增 TargetGroup 组件:组合 GroupHeader + CardGrid接收分组名和该组 targets
- [x] 4.7 新增 TargetBoard 组件:接收 targets 数组,前端按 group 分组,顺序渲染 TargetGroup
- [x] 4.8 新增 StatusDonut 组件:基于 recharts PieChart 实现环形图,中间显示可用率百分比,外圈 UP/DOWN 比例
- [x] 4.9 新增 TimeRangePicker 组件快捷按钮1h/6h/24h/7d+ 分钟精度日期选择器,联动逻辑
- [x] 4.10 新增 Pagination 组件:显示页码按钮,支持翻页回调
- [x] 4.11 新增 TargetDetailModal 组件模态框布局80% 视口宽),筛选栏 + 左侧图表区40%+ 右侧列表区60%),组合 TrendChart/StatusDonut/Pagination
- [x] 4.12 改造 TrendChart适配 from/to 参数的时间范围,替代 hours
- [x] 4.13 改造 app.tsxSummaryCards 从 4 卡片改为 3 卡片TargetTable 替换为 TargetBoard模态框状态管理
- [x] 4.14 移除 TargetTable、TargetRow、旧版 TargetDetail 组件
## 5. 前端Hooks 与数据层
- [x] 5.1 新增 useTargetDetail hook管理模态框状态封装 trend + history 的并行请求逻辑
- [x] 5.2 改造 useTrend hook改用 from/to 参数请求 trend API
- [x] 5.3 新增 useHistory hook使用 from/to + page/pageSize 请求 history API返回 HistoryResponse 结构
## 6. 前端:样式
- [x] 6.1 重写 styles.css移除表格相关样式新增卡片样式280px 固定宽、圆角、阴影、分组样式、模态框样式backdrop + 居中 + 左右分栏、StatusBar 样式色块、TimeRangePicker 样式、Pagination 样式、响应式媒体查询
- [x] 6.2 SummaryCards grid 改为 repeat(3, 1fr)
## 7. 文档与配置示例
- [x] 7.1 更新 probes.example.yaml新增 group 字段示例
- [x] 7.2 更新 README.md配置说明新增 groupAPI 端点变更说明,项目结构更新组件列表
## 8. 质量保障
- [x] 8.1 执行 bun run checktypecheck + lint + format:check + 单元测试),修复所有问题
- [x] 8.2 执行 bun run verifycheck + build + smoke test确保构建产物正常运行