1
0
Files
DiAL/openspec/specs/tanstack-query-data-layer/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

2.9 KiB
Raw Blame History

Purpose

定义 TanStack Query 数据层QueryClient 配置、queryKey 工厂、轮询策略、条件查询和开发调试面板。

Requirements

Requirement: TanStack Query 数据层

前端 SHALL 使用 TanStack Query@tanstack/react-query管理所有 API 请求,替代手写 fetch hooks。

Scenario: QueryClient 配置

  • WHEN 应用启动
  • THEN 系统 SHALL 创建 QueryClient默认配置 retry=1、refetchOnWindowFocus=true、staleTime=5000

Scenario: QueryClientProvider 挂载

  • WHEN 应用渲染
  • THEN 根组件 SHALL 包裹在 QueryClientProvider 中,提供 QueryClient 实例

Requirement: queryKey 工厂

系统 SHALL 提供统一的 queryKey 工厂函数,确保 queryKey 的唯一性和一致性。

Scenario: summary queryKey

  • WHEN 查询 summary 数据
  • THEN queryKey SHALL 为 ["summary"]

Scenario: targets queryKey

  • WHEN 查询 targets 数据
  • THEN queryKey SHALL 为 ["targets"]

Scenario: trend queryKey

  • WHEN 查询某目标的趋势数据
  • THEN queryKey SHALL 为 ["trend", targetId, from, to]

Scenario: history queryKey

  • WHEN 查询某目标的历史记录
  • THEN queryKey SHALL 为 ["history", targetId, from, to, page]

Requirement: Summary 轮询查询

系统 SHALL 使用 useQuery 实现总览统计的自动轮询。

Scenario: summary 自动轮询

  • WHEN Dashboard 页面处于打开状态
  • THEN 系统 SHALL 每 8 秒自动请求 /api/summary使用 refetchInterval=8000

Scenario: summary 后台刷新

  • WHEN 页面处于后台标签页
  • THEN 系统 SHALL 暂停轮询refetchIntervalInBackground=false

Requirement: Targets 轮询查询

系统 SHALL 使用 useQuery 实现目标列表的自动轮询。

Scenario: targets 自动轮询

  • WHEN Dashboard 页面处于打开状态
  • THEN 系统 SHALL 每 8 秒自动请求 /api/targets使用 refetchInterval=8000

Requirement: 条件查询

趋势和历史记录查询 SHALL 使用 enabled 条件控制,仅在目标被选中时触发。

Scenario: 未选中目标时不请求

  • WHEN 用户未点击任何目标表格行
  • THEN trend 和 history 的 useQuery SHALL enabled=false不发起请求

Scenario: 选中目标时自动请求

  • WHEN 用户点击目标表格行
  • THEN trend 和 history 的 useQuery SHALL enabled=true自动发起请求

Scenario: 时间范围变化时重新请求

  • WHEN 用户更改时间范围
  • THEN trend 和 history 的 useQuery SHALL 因 queryKey 变化自动重新请求

Requirement: 开发调试面板

开发环境下 SHALL 挂载 TanStack Query Devtools。

Scenario: 开发环境显示 Devtools

  • WHEN 应用在开发模式下运行
  • THEN 页面 SHALL 显示 ReactQueryDevtools 浮动面板

Scenario: 生产环境排除 Devtools

  • WHEN 应用在生产模式下构建
  • THEN ReactQueryDevtools SHALL 不被包含在产物中