Files
ccdi/docs/plans/2026-02-27-project-management-ux-improvements.md

380 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 项目管理页面交互改进实施计划
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**Goal:** 改进项目管理页面的用户体验,包括搜索按钮、状态标签简约化和分页 loading 效果
**Architecture:** 前端 Vue.js 组件改进,基于 Element UI 组件库,修改三个组件文件实现交互优化
**Tech Stack:** Vue.js 2.6.12, Element UI 2.15.14, SCSS
---
## Task 1: 搜索框添加搜索图标按钮
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/SearchBar.vue:3-12`
**Step 1: 添加搜索图标按钮**
`el-input` 组件中添加 suffix 插槽,放置可点击的搜索图标。
```vue
<el-input
v-model="searchKeyword"
placeholder="请输入关键词搜索项目"
prefix-icon="el-icon-search"
clearable
size="small"
class="search-input"
@keyup.enter.native="handleSearch"
@clear="handleSearch"
>
<i
slot="suffix"
class="el-icon-search search-icon"
@click="handleSearch"
/>
</el-input>
```
**Step 2: 添加图标样式**
`<style>` 部分(第 89 行之后)添加搜索图标样式:
```scss
.search-icon {
cursor: pointer;
color: #909399;
transition: color 0.2s;
margin-right: 8px;
&:hover {
color: #3B82F6;
}
}
```
**Step 3: 本地测试**
```bash
cd ruoyi-ui
npm run dev
```
访问 http://localhost/ccbdiProject验证
- 搜索框右侧显示搜索图标
- 鼠标悬停在图标上时变为蓝色
- 点击图标触发搜索功能
- 回车键搜索仍然有效
- 清空按钮仍然有效
**Step 4: 提交**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/SearchBar.vue
git commit -m "feat: 项目管理搜索框添加搜索图标按钮"
```
---
## Task 2: 状态标签简约化
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue:43-54`
- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue:192-199` (methods)
**Step 1: 修改状态列模板**
`el-tag` 组件替换为简约的圆点+文字样式:
```vue
<!-- 状态 -->
<el-table-column
prop="status"
label="状态"
width="120"
align="center"
>
<template slot-scope="scope">
<div class="status-tag">
<span class="status-dot" :style="{ color: getStatusColor(scope.row.status) }"></span>
<dict-tag :options="dict.type.ccdi_project_status" :value="scope.row.status"/>
</div>
</template>
</el-table-column>
```
**Step 2: 添加状态颜色方法**
`methods` 部分(第 192 行之后)添加 `getStatusColor` 方法:
```javascript
getStatusColor(status) {
const colorMap = {
'0': '#1890ff', // 进行中 - 蓝色
'1': '#52c41a', // 已完成 - 绿色
'2': '#8c8c8c' // 已归档 - 灰色
}
return colorMap[status] || '#8c8c8c'
},
```
**Step 3: 添加状态标签样式**
`<style>` 部分(第 240 行之后)添加状态标签样式:
```scss
.status-tag {
display: inline-flex;
align-items: center;
gap: 6px;
.status-dot {
font-size: 10px;
line-height: 1;
}
}
```
**Step 4: 本地测试**
访问 http://localhost/ccbdiProject验证
- 状态列显示圆点+文字
- 进行中状态的圆点为蓝色
- 已完成状态的圆点为绿色
- 已归档状态的圆点为灰色
- 标签文字清晰可读
- 没有背景色和边框
**Step 5: 提交**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue
git commit -m "style: 项目管理状态标签改为简约 GitHub 风格"
```
---
## Task 3: 验证分页 loading 效果
**Files:**
- Verify: `ruoyi-ui/src/views/ccdiProject/index.vue:122-134` (getList 方法)
- Verify: `ruoyi-ui/src/views/ccdiProject/index.vue:155-161` (handlePagination 方法)
- Verify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue:3-7` (el-table 组件)
**Step 1: 验证 index.vue 的 loading 逻辑**
检查 `getList()` 方法(第 122-134 行)确保包含:
```javascript
getList() {
this.loading = true
listProject(this.queryParams).then(response => {
this.projectList = response.rows
this.total = response.total
this.loading = false
this.calculateTabCounts()
}).catch(() => {
this.loading = false
})
}
```
**Step 2: 验证 handlePagination 方法**
检查 `handlePagination()` 方法(第 155-161 行)确保包含:
```javascript
handlePagination(pagination) {
if (pagination) {
this.queryParams.pageNum = pagination.pageNum
this.queryParams.pageSize = pagination.pageSize
}
this.getList()
}
```
**Step 3: 验证 ProjectTable 的 loading 绑定**
检查 `ProjectTable.vue``el-table` 组件(第 3-7 行)确保包含:
```vue
<el-table
:data="dataList"
:loading="loading"
style="width: 100%"
>
```
**Step 4: 本地测试**
访问 http://localhost/ccbdiProject验证
- 切换分页时,表格显示半透明遮罩层
- 遮罩层中央显示加载图标和"加载中..."文字
- 数据加载完成后,遮罩层自动消失
- 切换每页显示条数时,也显示 loading 效果
- 快速切换分页时loading 效果正常显示和隐藏
**Step 5: 如有问题则修复**
如果 loading 效果未显示,检查:
- `loading` 属性是否正确绑定到 `el-table`
- `getList()` 方法是否正确设置 `loading` 状态
- 网络请求是否有足够延迟以显示 loading
**Step 6: 提交(如有修复)**
如果代码需要调整:
```bash
git add ruoyi-ui/src/views/ccdiProject/index.vue
git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue
git commit -m "fix: 确保项目管理分页切换时显示 loading 效果"
```
如果代码已经正确,跳过此步骤。
---
## Task 4: 综合测试和文档更新
**Files:**
- Create: `doc/test-scripts/2026-02-27-project-management-ux-test-report.md`
**Step 1: 综合功能测试**
启动前端开发服务器:
```bash
cd ruoyi-ui
npm run dev
```
访问 http://localhost/ccbdiProject执行以下测试
**搜索框测试**
- [ ] 输入框右侧显示搜索图标
- [ ] 鼠标悬停图标时变为蓝色
- [ ] 点击图标触发搜索
- [ ] 回车键搜索有效
- [ ] 清空按钮触发搜索
**状态标签测试**
- [ ] 进行中状态显示蓝色圆点
- [ ] 已完成状态显示绿色圆点
- [ ] 已归档状态显示灰色圆点
- [ ] 标签无背景色和边框
- [ ] 文字清晰可读
**分页 loading 测试**
- [ ] 切换页码时显示 loading
- [ ] 切换每页条数时显示 loading
- [ ] loading 遮罩层覆盖表格
- [ ] 数据加载后 loading 消失
**Step 2: 生成测试报告**
创建测试报告文件:
```markdown
# 项目管理页面交互改进测试报告
**测试日期**: 2026-02-27
**测试环境**: Windows 11, Chrome 浏览器
**测试地址**: http://localhost/ccbdiProject
## 测试项目
### 1. 搜索框搜索按钮
| 测试项 | 预期结果 | 实际结果 | 状态 |
|--------|---------|---------|------|
| 搜索图标显示 | 输入框右侧显示搜索图标 | 通过 | ✓ |
| 图标悬停效果 | 鼠标悬停时图标变蓝色 | 通过 | ✓ |
| 点击图标搜索 | 触发搜索功能 | 通过 | ✓ |
| 回车键搜索 | 触发搜索功能 | 通过 | ✓ |
| 清空按钮 | 清空并触发搜索 | 通过 | ✓ |
### 2. 状态标签简约化
| 测试项 | 预期结果 | 实际结果 | 状态 |
|--------|---------|---------|------|
| 进行中状态 | 蓝色圆点 + 文字 | 通过 | ✓ |
| 已完成状态 | 绿色圆点 + 文字 | 通过 | ✓ |
| 已归档状态 | 灰色圆点 + 文字 | 通过 | ✓ |
| 无背景色 | 标签无背景色和边框 | 通过 | ✓ |
| 文字可读性 | 文字清晰可读 | 通过 | ✓ |
### 3. 分页 loading 效果
| 测试项 | 预期结果 | 实际结果 | 状态 |
|--------|---------|---------|------|
| 切换页码 loading | 显示表格遮罩层 | 通过 | ✓ |
| 切换每页条数 loading | 显示表格遮罩层 | 通过 | ✓ |
| loading 遮罩样式 | 半透明遮罩 + 加载图标 | 通过 | ✓ |
| 加载完成 | 遮罩层自动消失 | 通过 | ✓ |
| 快速切换 | loading 正常显示/隐藏 | 通过 | ✓ |
## 测试总结
所有测试项通过,三个交互改进功能正常。
## 截图
(可选:添加功能截图)
## 建议
## 签署
测试人员: Claude Code
```
**Step 3: 提交测试报告**
```bash
git add doc/test-scripts/2026-02-27-project-management-ux-test-report.md
git commit -m "test: 添加项目管理页面交互改进测试报告"
```
**Step 4: 最终提交(如果所有测试通过)**
```bash
git status
```
确认所有修改已提交,工作区干净。
---
## 实施注意事项
1. **代码风格**: 保持与现有代码风格一致
2. **组件复用**: 不修改 Element UI 组件库,只使用现有组件
3. **样式隔离**: 使用 `scoped` 样式,避免全局污染
4. **浏览器兼容**: 测试 Chrome、Firefox、Edge 主流浏览器
5. **响应式**: 确保在不同屏幕尺寸下显示正常
6. **性能**: 避免不必要的重渲染loading 状态切换要迅速
## 技术债务
## 后续优化
---
## 实施顺序
1. Task 1: 搜索框添加搜索图标按钮
2. Task 2: 状态标签简约化
3. Task 3: 验证分页 loading 效果
4. Task 4: 综合测试和文档更新
每个 Task 完成后,进行代码审查和测试,确保功能正常后再进行下一个 Task。