diff --git a/.kiro/specs/sample-remark-tooltip/design.md b/.kiro/specs/sample-remark-tooltip/design.md new file mode 100644 index 0000000..8f4772d --- /dev/null +++ b/.kiro/specs/sample-remark-tooltip/design.md @@ -0,0 +1,173 @@ +# Design Document + +## Overview + +本设计文档描述了在样品管理列表中添加备注列并实现 tooltip 功能的技术方案。该功能将利用 Element UI 的 el-table-column 组件的 show-overflow-tooltip 属性,实现当备注内容超出列宽时自动显示省略号,并在鼠标悬停时通过 tooltip 展示完整内容。 + +## Architecture + +该功能是一个纯前端实现,不涉及后端 API 修改。主要修改点在样品管理页面的 Vue 组件中。 + +### 组件层次结构 + +``` +WarehouseSample (Vue Component) + └── el-table + ├── el-table-column (入库单号) + ├── el-table-column (样品型号) + ├── el-table-column (样品SN号) + ├── el-table-column (硬件版本号) + ├── el-table-column (外测状态) + ├── el-table-column (计划测试项) + ├── el-table-column (测试截止日期) + ├── el-table-column (状态) + ├── el-table-column (备注) ← 新增 + └── el-table-column (操作) +``` + +## Components and Interfaces + +### 修改的组件 + +**文件路径**: `ruoyi-fastapi-frontend/src/views/warehouse/sample/index.vue` + +#### 新增表格列 + +在 `` 组件中,在状态列和操作列之间添加备注列: + +```vue + +``` + +### Element UI 组件属性说明 + +- **label**: 列标题,显示为"备注" +- **align**: 对齐方式,设置为"center"居中对齐 +- **prop**: 绑定的数据字段,对应 sampleList 中每个对象的 remark 属性 +- **show-overflow-tooltip**: Element UI 内置属性,当内容超出时自动显示 tooltip +- **width**: 列宽度,设置为 150px 以平衡显示空间和表格整体布局 + +## Data Models + +### 样品数据模型 + +样品列表数据已包含 remark 字段,无需修改数据结构: + +```javascript +{ + sampleId: Number, + receiptNo: String, + sampleModel: String, + sampleSn: String, + hardwareVersion: String, + externalStatus: String, + testItems: String, + testDeadline: String, + status: String, + remark: String // 备注字段,已存在于后端返回数据中 +} +``` + +## Correctness Properties + +*A property is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.* + +### Property 1: 备注列渲染完整性 + +*For any* 样品列表数据,当页面渲染完成后,表格中应该存在一个 label 为"备注"的列,且该列位于状态列之后、操作列之前 + +**Validates: Requirements 1.1, 1.2** + +### Property 2: Tooltip 显示条件 + +*For any* 备注单元格,当且仅当备注内容的实际渲染宽度超过列宽度时,鼠标悬停应触发 tooltip 显示 + +**Validates: Requirements 2.1, 2.2, 2.4** + +### Property 3: 空备注处理 + +*For any* 样品数据,如果 remark 字段为 null、undefined 或空字符串,则对应单元格应显示为空白,且不触发 tooltip + +**Validates: Requirements 1.3** + +### Property 4: 样式一致性 + +*For any* 备注列单元格,其字体、字号、颜色和对齐方式应与同一行其他文本列(如样品型号、样品SN号)保持一致 + +**Validates: Requirements 3.1, 3.2, 3.3** + +## Error Handling + +### 数据缺失处理 + +- 当 API 返回的样品数据中不包含 remark 字段时,Vue 会将其视为 undefined,单元格显示为空白 +- Element UI 的 show-overflow-tooltip 会自动处理 null/undefined 值,不会报错 + +### 浏览器兼容性 + +- Element UI 的 tooltip 功能基于 Popper.js,支持主流浏览器(Chrome, Firefox, Safari, Edge) +- 在不支持的旧版浏览器中,tooltip 可能不显示,但不会影响基本的文本显示功能 + +## Testing Strategy + +### 单元测试 + +由于这是一个简单的 UI 展示功能,主要依赖 Element UI 的内置功能,不需要编写复杂的单元测试。可以通过以下方式验证: + +1. **备注列存在性测试**: 检查渲染后的 DOM 中是否存在包含"备注"文本的表头 +2. **数据绑定测试**: 验证备注列是否正确显示 sampleList 中的 remark 数据 +3. **空值处理测试**: 验证当 remark 为空时,单元格是否正确显示为空白 + +### 手动测试场景 + +1. **正常显示测试** + - 准备包含不同长度备注的样品数据 + - 验证短备注完整显示,长备注显示省略号 + - 验证鼠标悬停时 tooltip 正确显示完整内容 + +2. **边界情况测试** + - 测试备注为空字符串的情况 + - 测试备注为 null 的情况 + - 测试备注恰好等于列宽的情况 + +3. **响应式测试** + - 调整浏览器窗口大小 + - 验证备注列宽度和 tooltip 行为是否正常 + +4. **交互测试** + - 快速移动鼠标经过多个备注单元格 + - 验证 tooltip 显示和隐藏的流畅性 + - 验证 tooltip 不会遮挡操作按钮 + +### 测试库选择 + +对于这个简单的 UI 功能,不需要引入 property-based testing 库。主要通过手动测试和简单的 Vue Test Utils 单元测试即可验证功能正确性。 + +## Implementation Notes + +### 实现步骤 + +1. 在 `ruoyi-fastapi-frontend/src/views/warehouse/sample/index.vue` 文件中定位到 `` 组件 +2. 在状态列(``)之后添加新的备注列 +3. 配置备注列的属性:label、align、prop、show-overflow-tooltip、width +4. 保存文件并测试功能 + +### 注意事项 + +- 列宽度设置为 150px 是一个建议值,可以根据实际显示效果调整 +- show-overflow-tooltip 属性会自动处理文本溢出和 tooltip 显示,无需额外编写 JavaScript 代码 +- 如果需要自定义 tooltip 的样式或行为,可以使用 Element UI 的 tooltip 组件手动实现 + +### 可选优化 + +如果未来需要更高级的功能,可以考虑: + +1. **自定义 tooltip 内容**: 使用 scoped slot 自定义 tooltip 的显示格式 +2. **可配置列宽**: 允许用户拖拽调整备注列宽度 +3. **备注编辑**: 在 tooltip 中添加快速编辑按钮 diff --git a/.kiro/specs/sample-remark-tooltip/requirements.md b/.kiro/specs/sample-remark-tooltip/requirements.md new file mode 100644 index 0000000..a15da22 --- /dev/null +++ b/.kiro/specs/sample-remark-tooltip/requirements.md @@ -0,0 +1,49 @@ +# Requirements Document + +## Introduction + +本文档定义了样品管理库中备注字段显示功能的需求。该功能旨在在样品列表表格中添加备注列,当备注内容较长导致空间不足时,通过鼠标悬停提示(tooltip)的方式完整显示备注信息,提升用户体验。 + +## Glossary + +- **样品管理系统(Sample Management System)**: 用于管理入库样品信息的系统模块 +- **备注列(Remark Column)**: 表格中用于显示样品备注信息的列 +- **Tooltip**: 鼠标悬停提示,当鼠标悬停在元素上时显示的浮动提示框 +- **表格组件(Table Component)**: Element UI 的 el-table 组件 +- **溢出省略(Overflow Ellipsis)**: 当文本内容超出容器宽度时,使用省略号(...)表示被截断的内容 + +## Requirements + +### Requirement 1 + +**User Story:** 作为样品管理员,我希望在样品列表中看到备注信息,以便快速了解每个样品的额外说明。 + +#### Acceptance Criteria + +1. WHEN 用户访问样品管理页面 THEN 样品管理系统 SHALL 在表格中显示备注列 +2. WHEN 备注列被渲染 THEN 样品管理系统 SHALL 将备注列放置在状态列和操作列之间 +3. WHEN 备注内容为空 THEN 样品管理系统 SHALL 在该单元格中显示空白或占位符 +4. WHEN 表格加载完成 THEN 样品管理系统 SHALL 确保备注列的宽度适配表格布局 + +### Requirement 2 + +**User Story:** 作为样品管理员,当备注内容较长时,我希望能够通过鼠标悬停查看完整内容,以便在有限的空间内获取完整信息。 + +#### Acceptance Criteria + +1. WHEN 备注内容超出列宽度 THEN 样品管理系统 SHALL 使用省略号截断显示的文本 +2. WHEN 用户将鼠标悬停在被截断的备注单元格上 THEN 样品管理系统 SHALL 显示包含完整备注内容的 tooltip +3. WHEN 用户移开鼠标 THEN 样品管理系统 SHALL 隐藏 tooltip +4. WHEN 备注内容未超出列宽度 THEN 样品管理系统 SHALL 完整显示备注内容且不显示 tooltip +5. WHEN tooltip 显示时 THEN 样品管理系统 SHALL 确保 tooltip 内容可读且不遮挡重要界面元素 + +### Requirement 3 + +**User Story:** 作为样品管理员,我希望备注列的显示样式与其他列保持一致,以便获得统一的视觉体验。 + +#### Acceptance Criteria + +1. WHEN 备注列被渲染 THEN 样品管理系统 SHALL 使用与其他列相同的字体、字号和颜色 +2. WHEN 备注列被渲染 THEN 样品管理系统 SHALL 使用居中对齐方式 +3. WHEN 表格数据更新 THEN 样品管理系统 SHALL 保持备注列的样式一致性 +4. WHEN 用户调整浏览器窗口大小 THEN 样品管理系统 SHALL 保持备注列的响应式布局 diff --git a/.kiro/specs/sample-remark-tooltip/tasks.md b/.kiro/specs/sample-remark-tooltip/tasks.md new file mode 100644 index 0000000..ce0d1d8 --- /dev/null +++ b/.kiro/specs/sample-remark-tooltip/tasks.md @@ -0,0 +1,19 @@ +# Implementation Plan + +- [-] 1. 在样品管理页面添加备注列 + + - 在 `ruoyi-fastapi-frontend/src/views/warehouse/sample/index.vue` 文件的 `` 组件中添加备注列 + - 将备注列放置在状态列和操作列之间 + - 配置列属性:label="备注", align="center", prop="remark", show-overflow-tooltip="true", width="150" + - _Requirements: 1.1, 1.2, 1.4, 2.1, 2.2, 2.3, 3.1, 3.2_ + + + +- [ ] 1.1 手动测试备注列显示功能 + - 测试备注列是否正确显示在表格中 + - 测试短备注内容是否完整显示 + - 测试长备注内容是否显示省略号 + - 测试鼠标悬停时 tooltip 是否正确显示完整内容 + - 测试空备注是否显示为空白 + - 测试样式是否与其他列保持一致 + - _Requirements: 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 2.4, 2.5, 3.1, 3.2, 3.3, 3.4_ diff --git a/ruoyi-fastapi-frontend/src/views/warehouse/sample/index.vue b/ruoyi-fastapi-frontend/src/views/warehouse/sample/index.vue index 2199184..319a8dc 100644 --- a/ruoyi-fastapi-frontend/src/views/warehouse/sample/index.vue +++ b/ruoyi-fastapi-frontend/src/views/warehouse/sample/index.vue @@ -99,6 +99,7 @@ 已退回 +