# 设计文档 ## 概述 本设计为测试流程列表页面添加颜色图例功能。图例将显示在表格上方,展示所有测试分类及其对应的颜色,帮助用户快速理解表格中彩色标签的含义。 ## 架构 ### 前端组件架构 ``` test_flow/index.vue ├── 查询表单区域 ├── 操作按钮区域 ├── 颜色图例组件 (新增) │ └── 分类颜色映射显示 ├── 数据表格 │ └── 测试项列(使用彩色标签) └── 分页组件 ``` ### 颜色分配策略 使用一致的颜色分配算法,确保同一测试分类在所有地方都显示相同的颜色: - 基于分类ID的哈希值来分配颜色索引 - 使用模运算确保颜色索引在可用颜色范围内 - 颜色数组:`['#409EFF', '#67C23A', '#909399', '#E6A23C', '#F56C6C', '#8E44AD', '#FF7F50']` ## 组件和接口 ### 1. 颜色图例组件 **位置**: 在操作按钮行和数据表格之间 **数据源**: - `categoryOptions`: 从后端API获取的所有测试分类列表 - `tagColors`: 预定义的颜色数组 **显示逻辑**: ```javascript // 为每个分类计算一致的颜色索引 getCategoryColor(categoryId) { const colorIndex = categoryId % this.tagColors.length; return this.tagColors[colorIndex]; } ``` ### 2. 表格标签渲染更新 **当前实现问题**: - 使用数组索引 `index % tagColors.length` 分配颜色 - 同一分类在不同行可能显示不同颜色 **改进方案**: - 改用分类ID来计算颜色索引 - 确保同一分类始终显示相同颜色 ```javascript // 修改前 :style="{backgroundColor: tagColors[index % tagColors.length]}" // 修改后 :style="{backgroundColor: getCategoryColor(tag.test_category_id)}" ``` ## 数据模型 ### 测试分类数据结构 ```javascript { id: Number, // 分类ID name: String, // 分类名称 // ... 其他字段 } ``` ### 图例项数据结构 ```javascript { categoryId: Number, // 分类ID categoryName: String, // 分类名称 color: String // 十六进制颜色值 } ``` ## 正确性属性 *属性是指在系统所有有效执行中都应该成立的特征或行为——本质上是关于系统应该做什么的正式声明。属性作为人类可读规范和机器可验证正确性保证之间的桥梁。* ### 属性 1: 颜色一致性 *对于任何* 测试分类ID,无论在图例中还是在表格标签中,多次调用颜色计算函数都应该返回相同的颜色值 **验证: 需求 1.2, 2.1, 3.1, 3.2, 3.4** ### 属性 2: 图例完整性 *对于任何* 分类列表,图例中显示的分类数量应该等于输入的分类数量 **验证: 需求 1.4** ### 属性 3: 图例项结构完整性 *对于任何* 图例项,渲染后的DOM元素应该同时包含颜色方块和分类名称文本 **验证: 需求 1.3** ### 属性 4: 颜色来源有效性 *对于任何* 分类ID,分配的颜色应该存在于预定义的tagColors数组中 **验证: 需求 3.3** ### 属性 5: 图例项间距一致性 *对于任何* 相邻的图例项对,它们之间的间距应该相等 **验证: 需求 2.4** ## 错误处理 ### 1. 分类数据加载失败 - **场景**: API请求失败或返回空数据 - **处理**: 显示空图例或提示信息,不影响表格正常显示 ### 2. 颜色数组未定义 - **场景**: tagColors数组为空或未初始化 - **处理**: 使用默认颜色或灰色作为后备方案 ### 3. 分类ID无效 - **场景**: 分类ID为null、undefined或非数字 - **处理**: 使用默认颜色索引0 ## 测试策略 ### 单元测试 1. **颜色计算函数测试** - 测试相同ID返回相同颜色 - 测试不同ID可能返回不同颜色 - 测试边界情况(ID为0、负数、很大的数) 2. **图例渲染测试** - 测试空分类列表的渲染 - 测试单个分类的渲染 - 测试多个分类的渲染 ### 集成测试 1. **端到端显示测试** - 验证图例和表格标签颜色一致 - 验证页面加载后图例正确显示 - 验证响应式布局在不同屏幕尺寸下的表现 ### 视觉回归测试 1. 截图对比测试,确保UI变更不影响现有布局 2. 验证颜色对比度满足可访问性标准 ## UI设计规范 ### 图例布局 ``` ┌─────────────────────────────────────────────────┐ │ 测试项图例: │ │ ■ 分类1 ■ 分类2 ■ 分类3 ■ 分类4 ■ 分类5 │ └─────────────────────────────────────────────────┘ ``` ### 样式规范 - **图例容器**: - 背景色: `#f5f7fa` - 内边距: `10px 15px` - 边框圆角: `4px` - 外边距: `10px 0` - **图例项**: - 颜色方块: `12px × 12px` - 方块圆角: `2px` - 文字大小: `14px` - 项间距: `15px` - **响应式**: - 小屏幕: 垂直堆叠 - 大屏幕: 水平排列,自动换行