1
0
Files
DiAL/openspec/specs/target-detail-modal/spec.md
lanyuanxiaoyao f48e39a615 refactor: 全面重构前端 Dashboard 为 TDesign + TanStack Query 分组表格布局
- 卡片式布局改为分组 PrimaryTable,Modal 改为 Drawer
- 手写 hooks 替换为 TanStack Query(轮询/缓存/条件查询)
- CSS 607行精简至73行,颜色迁移至 TDesign tokens
- 可用率进度条颜色按 10% 一档红→绿渐变
- 新增纯函数测试 34 项全通过(排序/筛选/色阶阈值)
- 同步更新主 specs 并归档变更文档
2026-05-12 01:06:53 +08:00

92 lines
4.3 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.
## Purpose
定义目标详情 Drawer时间范围筛选TDesign RadioGroup 快捷按钮 + DateRangePicker、Tabs 组织概览/趋势/记录三个面板、统计图表和分页检查结果列表。
## Requirements
### Requirement: 目标详情 Drawer
Dashboard SHALL 在用户点击目标表格行后从右侧滑出 Drawer展示该目标的详细统计图表和检查结果列表。
#### Scenario: 打开 Drawer
- **WHEN** 用户点击某个目标表格行
- **THEN** 系统 SHALL 从右侧滑出 Drawerplacement="right", size="60%"),展示该目标的详情
#### Scenario: Drawer 默认时间范围
- **WHEN** Drawer 打开
- **THEN** 筛选器 SHALL 默认选中 "24h" 快捷按钮
#### Scenario: 关闭 Drawer
- **WHEN** 用户点击 Drawer 关闭按钮、ESC 键或遮罩层
- **THEN** Drawer SHALL 关闭
### Requirement: 时间范围筛选
Drawer SHALL 支持通过 TDesign RadioGroup 快捷按钮和 DateRangePicker 筛选数据的时间范围。
#### Scenario: 快捷时间范围按钮
- **WHEN** Drawer 渲染
- **THEN** 筛选栏 SHALL 显示 TDesign RadioGroupvariant=default-filled快捷按钮1h、6h、24h、7d当前选中的按钮高亮显示
#### Scenario: 点击快捷按钮
- **WHEN** 用户点击快捷按钮(如 "24h"
- **THEN** 筛选器 SHALL 自动设置对应的起止时间DateRangePicker 显示对应的时间范围,该按钮高亮
#### Scenario: 自定义日期时间选择
- **WHEN** 用户通过 TDesign DateRangePickermode=date, enableTimePicker修改起止时间
- **THEN** 快捷按钮 SHALL 取消高亮,表示当前为自定义时间范围
#### Scenario: 筛选触发数据刷新
- **WHEN** 时间范围发生变化(快捷按钮或自定义选择)
- **THEN** 系统 SHALL 通过 TanStack Query 重新请求该时间范围内的趋势数据和历史记录
### Requirement: 统计图表展示
Drawer 概览和趋势面板 SHALL 展示统计数值、目标元信息和可用率趋势折线图、状态分布环形图。
#### Scenario: 概览面板统计数值
- **WHEN** 概览 Tab 加载完成
- **THEN** 面板 SHALL 使用 TDesign Statistic 组件展示总检查、正常、异常、可用率四个数值,使用 TDesign Row/Col 横向排列
#### Scenario: 概览面板元信息
- **WHEN** 概览 Tab 加载完成
- **THEN** 面板 SHALL 使用 TDesign Descriptions 组件展示目标地址、检查间隔、最新检查时间、状态详情
#### Scenario: 可用率趋势折线图
- **WHEN** 趋势 Tab 加载完成且数据可用
- **THEN** 面板 SHALL 展示 recharts 双 Y 轴折线图:耗时线颜色使用 --td-brand-color可用率线颜色使用 --td-success-color
#### Scenario: 状态分布环形图
- **WHEN** 概览 Tab 加载完成
- **THEN** 面板 SHALL 展示 recharts 环形图Donut ChartUP 颜色使用 --td-success-colorDOWN 颜色使用 --td-error-color中间显示可用率百分比数字
### Requirement: 检查结果列表
Drawer 记录面板 SHALL 使用 TDesign PrimaryTable 展示检查结果,支持服务端分页。
#### Scenario: 展示检查结果
- **WHEN** 记录 Tab 加载完成且历史记录可用
- **THEN** 表格 SHALL 展示检查结果每条包含状态TDesign Tag、时间戳、statusDetail、耗时毫秒数和 failure 信息
#### Scenario: 分页导航
- **WHEN** 检查结果总数超过一页
- **THEN** 表格底部 SHALL 展示内建 pagination 分页器disableDataPage=true
#### Scenario: 翻页刷新
- **WHEN** 用户切换分页页码
- **THEN** 系统 SHALL 通过 TanStack Query 请求对应页码的历史记录数据,表格更新
### Requirement: 内容组织布局
Drawer SHALL 使用 TDesign Tabs 组织概览、趋势、记录三个面板。
#### Scenario: Tabs 组织内容
- **WHEN** Drawer 渲染
- **THEN** 内容区域 SHALL 使用 TDesign Tabs 组件分为概览、趋势、记录三个标签页
### Requirement: 标题栏类型标签
Drawer 标题栏 SHALL 显示目标类型标签,使用统一的类型显示映射系统。
#### Scenario: 类型标签显示
- **WHEN** Drawer 标题栏渲染
- **THEN** 标题栏 SHALL 在目标名称旁显示 TDesign Tag 类型标签HTTP / CMD
#### Scenario: 类型标签使用映射系统
- **WHEN** Drawer 渲染类型标签
- **THEN** 类型标签 SHALL 使用统一的类型显示映射函数,不硬编码映射逻辑