# 项目管理页面交互改进设计文档 **日期**: 2026-02-27 **模块**: 初核项目管理 (ccdiProject) **作者**: Claude Code ## 概述 本文档描述了项目管理页面的三个交互改进:搜索框按钮、状态标签简约化和分页 loading 效果。 ## 改进项目 ### 1. 搜索框添加搜索按钮 #### 当前状态 - 搜索框只支持回车键搜索和清空按钮 - 没有明确的搜索按钮,用户可能不知道如何触发搜索 #### 改进方案 - 在输入框内右侧添加一个可点击的搜索图标按钮 - 使用 Element UI 的 `suffix` 插槽实现 - 图标使用 `el-icon-search` - 点击图标触发 `handleSearch` 方法,与回车键效果一致 #### 实现位置 - 文件: `ruoyi-ui/src/views/ccdiProject/components/SearchBar.vue` - 行数: 第 3-12 行(el-input 组件) #### 技术细节 ```vue ``` #### 样式 ```scss .search-icon { cursor: pointer; color: #909399; transition: color 0.2s; &:hover { color: #3B82F6; } } ``` --- ### 2. 状态标签简约化 #### 当前状态 - 使用 `el-tag` 组件显示状态 - 有背景色:蓝色(进行中)、绿色(已完成)、灰色(已归档) - 视觉上较为突出,占用空间较大 #### 改进方案 - 移除 `el-tag` 组件,使用自定义简约样式 - GitHub 风格标签:左侧彩色圆点 + 右侧文字 - 无背景色,无边框 - 圆点颜色: - 进行中 (`status='0'`): 蓝色 `#1890ff` - 已完成 (`status='1'`): 绿色 `#52c41a` - 已归档 (`status='2'`): 灰色 `#8c8c8c` #### 实现位置 - 文件: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue` - 行数: 第 43-54 行(状态列) #### 技术细节 ```vue ``` #### 新增方法 ```javascript getStatusColor(status) { const colorMap = { '0': '#1890ff', // 进行中 - 蓝色 '1': '#52c41a', // 已完成 - 绿色 '2': '#8c8c8c' // 已归档 - 灰色 } return colorMap[status] || '#8c8c8c' } ``` #### 样式 ```scss .status-tag { display: inline-flex; align-items: center; gap: 6px; .status-dot { font-size: 10px; line-height: 1; } } ``` --- ### 3. 分页 loading 效果 #### 当前状态 - 分页切换时调用 `getList()` 方法 - `getList()` 内部会设置 `loading = true` - `el-table` 有 `:loading="loading"` 属性绑定 - 理论上应该显示 loading 效果 #### 改进方案 - 确认 `el-table` 的 loading 属性正确绑定 - 确保分页切换时 loading 状态正确设置 - Element UI 会自动显示表格遮罩层和加载动画 #### 实现位置 - 文件: `ruoyi-ui/src/views/ccdiProject/index.vue` - `handlePagination` 方法(第 155-161 行) - `getList` 方法(第 122-134 行) - 文件: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue` - `el-table` 组件(第 3-7 行) #### 技术细节 **index.vue - 分页处理** ```javascript handlePagination(pagination) { if (pagination) { this.queryParams.pageNum = pagination.pageNum this.queryParams.pageSize = pagination.pageSize } this.getList() // 开始加载,loading = true } ``` **index.vue - 数据加载** ```javascript getList() { this.loading = true // 立即显示 loading listProject(this.queryParams).then(response => { this.projectList = response.rows this.total = response.total this.loading = false // 加载完成,隐藏 loading this.calculateTabCounts() }).catch(() => { this.loading = false // 加载失败,隐藏 loading }) } ``` **ProjectTable.vue - 表格绑定** ```vue ``` #### 验证要点 - 分页切换时,表格应立即显示半透明遮罩层 - 遮罩层中央显示加载图标和"加载中..."文字 - 数据加载完成后,遮罩层自动消失 --- ## 视觉效果对比 ### 搜索框 - **改进前**: 只有输入框,用户不知道如何触发搜索 - **改进后**: 输入框右侧有可点击的搜索图标,鼠标悬停时变蓝色 ### 状态标签 - **改进前**: 彩色背景标签,视觉突出 - **改进后**: 简约的圆点+文字,更轻量现代 ### 分页 loading - **改进前**: 分页切换时无明显反馈 - **改进后**: 表格显示 loading 遮罩,明确告知用户正在加载 --- ## 兼容性 - 所有改进基于现有 Element UI 组件,无需引入新的依赖 - 保持与现有代码风格一致 - 不影响其他功能模块 --- ## 测试要点 1. **搜索按钮**: - 点击搜索图标,应触发搜索 - 图标悬停时变蓝色 - 回车键仍然有效 2. **状态标签**: - 三种状态显示正确的圆点颜色 - 文字显示正常 - 标签对齐居中 3. **分页 loading**: - 切换分页时,表格显示 loading - 数据加载完成后,loading 消失 - 加载失败时,loading 也应消失 --- ## 实施步骤 1. 修改 `SearchBar.vue`,添加搜索图标按钮 2. 修改 `ProjectTable.vue`,实现简约状态标签 3. 验证 `index.vue` 和 `ProjectTable.vue` 的 loading 绑定 4. 测试三个改进点的功能 5. 生成测试报告 --- ## 文件清单 - `ruoyi-ui/src/views/ccdiProject/components/SearchBar.vue` - 搜索框改进 - `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue` - 状态标签和 loading 验证 - `ruoyi-ui/src/views/ccdiProject/index.vue` - loading 逻辑验证