表格布局替换为按分组展示的卡片式布局,新增 group 字段配置和 TargetBoard/TargetCard 等组件。模态框详情页支持时间范围筛选和分页,SummaryCards 减为 3 个。API 端点变更:trend/history 改用 from/to 参数,history 支持分页。recentSampleCount 硬编码为 30。
46 lines
2.0 KiB
Markdown
46 lines
2.0 KiB
Markdown
## Purpose
|
||
|
||
定义 target 分组能力:YAML 配置中的 group 字段、后端存储、API 传递和前端分组排序。
|
||
|
||
## Requirements
|
||
|
||
### Requirement: target 分组配置
|
||
系统 SHALL 支持在每个 target 上配置可选的 `group` 字段,用于将目标归类到不同分组。未指定 `group` 的 target SHALL 归入 `"default"` 分组。
|
||
|
||
#### Scenario: 配置分组名称
|
||
- **WHEN** YAML 配置中某个 target 指定 `group: "搜索引擎"`
|
||
- **THEN** 系统 SHALL 将该 target 归类到 "搜索引擎" 分组
|
||
|
||
#### Scenario: 不配置分组
|
||
- **WHEN** YAML 配置中某个 target 未指定 `group` 字段
|
||
- **THEN** 系统 SHALL 将该 target 归类到 "default" 分组
|
||
|
||
#### Scenario: group 字段类型校验
|
||
- **WHEN** YAML 配置中某个 target 的 `group` 字段不是字符串
|
||
- **THEN** 系统 SHALL 以错误退出并提示 group 字段类型错误
|
||
|
||
### Requirement: 分组排序
|
||
系统 SHALL 保证 "default" 分组始终排在最前面,其余分组按配置文件中首次出现的顺序排列。
|
||
|
||
#### Scenario: default 分组排最前
|
||
- **WHEN** 配置中存在多个分组(包括 "default" 和自定义分组)
|
||
- **THEN** API 返回的目标列表中 "default" 分组的目标 SHALL 排在其他分组之前
|
||
|
||
#### Scenario: 自定义分组按出现顺序
|
||
- **WHEN** 配置中 "搜索引擎" 分组在 "后端服务" 分组之前首次出现
|
||
- **THEN** API 返回中 "搜索引擎" 分组 SHALL 排在 "后端服务" 分组之前
|
||
|
||
### Requirement: 分组信息 API 传递
|
||
系统 SHALL 在 API 响应中返回每个 target 的分组信息。
|
||
|
||
#### Scenario: targets 列表包含分组
|
||
- **WHEN** 客户端请求 `GET /api/targets`
|
||
- **THEN** 响应中每个目标 SHALL 包含 `group` 字段,值为该目标所属的分组名称
|
||
|
||
### Requirement: 分组存储
|
||
系统 SHALL 在数据库 targets 表中持久化每个 target 的分组信息。
|
||
|
||
#### Scenario: 持久化分组信息
|
||
- **WHEN** 系统同步 targets 到数据库
|
||
- **THEN** 每个 target 的 `grp` 列 SHALL 存储其分组名称,未配置分组的存储 `"default"`
|