docs: 添加项目列表页面UI优化实施计划
- Task 1: 修改页面标题样式 - Task 2: 修改搜索区域结构和样式 - Task 3: 启动前端服务进行测试 - Task 4: 创建测试报告 - Task 5: 推送代码到远程仓库
This commit is contained in:
474
doc/plans/2026-02-28-project-list-ui-optimization.md
Normal file
474
doc/plans/2026-02-28-project-list-ui-optimization.md
Normal file
@@ -0,0 +1,474 @@
|
|||||||
|
# 项目列表页面UI优化实施计划
|
||||||
|
|
||||||
|
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||||||
|
|
||||||
|
**Goal:** 优化项目列表页面 UI,实现扁平化设计,添加独立搜索按钮
|
||||||
|
|
||||||
|
**Architecture:** 修改两个 Vue 组件(index.vue 和 SearchBar.vue),移除页面标题的卡片式装饰,将搜索图标改为独立按钮
|
||||||
|
|
||||||
|
**Tech Stack:** Vue 2.6.12, Element UI 2.15.14, SCSS
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 1: 修改页面标题样式
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `ruoyi-ui/src/views/ccdiProject/index.vue:266-282` (样式部分)
|
||||||
|
|
||||||
|
**Step 1: 读取当前文件**
|
||||||
|
|
||||||
|
读取文件:`ruoyi-ui/src/views/ccdiProject/index.vue`
|
||||||
|
|
||||||
|
查看 `.page-header` 样式块(第 266-282 行)
|
||||||
|
|
||||||
|
**Step 2: 移除页面标题的卡片样式**
|
||||||
|
|
||||||
|
在 `<style lang="scss" scoped>` 部分,找到 `.page-header` 样式块,移除以下三行:
|
||||||
|
- `padding: 16px 20px;`
|
||||||
|
- `background: #ffffff;`
|
||||||
|
- `border-radius: 8px;`
|
||||||
|
- `box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);`
|
||||||
|
|
||||||
|
修改后的样式:
|
||||||
|
|
||||||
|
```scss
|
||||||
|
.page-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
|
||||||
|
.page-title {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3: 保存文件**
|
||||||
|
|
||||||
|
保存修改后的文件
|
||||||
|
|
||||||
|
**Step 4: 提交修改**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add ruoyi-ui/src/views/ccdiProject/index.vue
|
||||||
|
git commit -m "refactor: 移除页面标题的卡片式样式"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 2: 修改搜索区域结构和样式
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `ruoyi-ui/src/views/ccdiProject/components/SearchBar.vue` (模板和样式)
|
||||||
|
|
||||||
|
**Step 1: 读取当前 SearchBar 组件**
|
||||||
|
|
||||||
|
读取文件:`ruoyi-ui/src/views/ccdiProject/components/SearchBar.vue`
|
||||||
|
|
||||||
|
**Step 2: 修改模板结构**
|
||||||
|
|
||||||
|
在 `<template>` 部分(第 2-28 行),将搜索输入框和标签页筛选分离。
|
||||||
|
|
||||||
|
修改前的结构(第 2-17 行):
|
||||||
|
```vue
|
||||||
|
<div class="search-filter-bar">
|
||||||
|
<el-input
|
||||||
|
v-model="searchKeyword"
|
||||||
|
placeholder="请输入关键词搜索项目"
|
||||||
|
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>
|
||||||
|
<div class="tab-filters">
|
||||||
|
<!-- 标签页内容 -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
修改后的结构:
|
||||||
|
```vue
|
||||||
|
<div class="search-filter-bar">
|
||||||
|
<div class="search-input-wrapper">
|
||||||
|
<el-input
|
||||||
|
v-model="searchKeyword"
|
||||||
|
placeholder="请输入关键词搜索项目"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
class="search-input"
|
||||||
|
@keyup.enter.native="handleSearch"
|
||||||
|
@clear="handleSearch"
|
||||||
|
/>
|
||||||
|
<el-button type="primary" size="small" @click="handleSearch">搜索</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="tab-filters">
|
||||||
|
<div
|
||||||
|
v-for="tab in tabs"
|
||||||
|
:key="tab.value"
|
||||||
|
:class="['tab-item', { active: activeTab === tab.value }]"
|
||||||
|
@click="handleTabChange(tab.value)"
|
||||||
|
>
|
||||||
|
{{ tab.label }}({{ tab.count }})
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3: 修改样式**
|
||||||
|
|
||||||
|
在 `<style lang="scss" scoped>` 部分(第 94-146 行),更新样式:
|
||||||
|
|
||||||
|
移除以下样式:
|
||||||
|
```scss
|
||||||
|
.search-icon {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #909399;
|
||||||
|
transition: color 0.2s;
|
||||||
|
margin-right: 8px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #3B82F6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
添加新的样式:
|
||||||
|
```scss
|
||||||
|
.search-input-wrapper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
完整的样式部分应该是:
|
||||||
|
```scss
|
||||||
|
.search-filter-bar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 24px;
|
||||||
|
padding: 16px 20px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input-wrapper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input {
|
||||||
|
width: 240px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-filters {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-item {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #6B7280;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 6px 12px;
|
||||||
|
border-radius: 6px;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
user-select: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #3B82F6;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: #3B82F6;
|
||||||
|
background: #EFF6FF;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 4: 保存文件**
|
||||||
|
|
||||||
|
保存修改后的文件
|
||||||
|
|
||||||
|
**Step 5: 提交修改**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add ruoyi-ui/src/views/ccdiProject/components/SearchBar.vue
|
||||||
|
git commit -m "feat: 添加独立搜索按钮,移除输入框内搜索图标"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 3: 启动前端服务进行测试
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Test: 浏览器手动测试
|
||||||
|
|
||||||
|
**Step 1: 启动前端开发服务器**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ruoyi-ui
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: 前端服务启动在 http://localhost:80
|
||||||
|
|
||||||
|
**Step 2: 在浏览器中打开项目列表页面**
|
||||||
|
|
||||||
|
1. 打开浏览器访问 http://localhost:80
|
||||||
|
2. 使用测试账号登录(用户名: admin, 密码: admin123)
|
||||||
|
3. 导航到"初核项目管理"页面
|
||||||
|
|
||||||
|
Expected: 页面正常加载
|
||||||
|
|
||||||
|
**Step 3: 验证页面标题样式**
|
||||||
|
|
||||||
|
检查页面标题"初核项目管理"区域:
|
||||||
|
- [ ] 无白色背景
|
||||||
|
- [ ] 无圆角
|
||||||
|
- [ ] 无阴影
|
||||||
|
- [ ] 字体大小为 20px
|
||||||
|
- [ ] 字体粗细为 500
|
||||||
|
|
||||||
|
**Step 4: 验证搜索按钮功能**
|
||||||
|
|
||||||
|
检查搜索区域:
|
||||||
|
- [ ] 输入框右侧有独立的"搜索"按钮
|
||||||
|
- [ ] 输入框内无搜索图标
|
||||||
|
- [ ] 按钮与输入框高度一致(40px)
|
||||||
|
- [ ] 按钮与输入框间距为 8px
|
||||||
|
- [ ] 点击搜索按钮触发搜索
|
||||||
|
- [ ] 输入框回车触发搜索
|
||||||
|
- [ ] 输入框清空触发搜索
|
||||||
|
|
||||||
|
**Step 5: 验证标签页功能**
|
||||||
|
|
||||||
|
检查标签页切换:
|
||||||
|
- [ ] 点击"全部项目"显示所有项目
|
||||||
|
- [ ] 点击"进行中"显示进行中的项目
|
||||||
|
- [ ] 点击"已完成"显示已完成的项目
|
||||||
|
- [ ] 点击"已归档"显示已归档的项目
|
||||||
|
|
||||||
|
**Step 6: 验证表格表头样式**
|
||||||
|
|
||||||
|
检查表格表头:
|
||||||
|
- [ ] 透明背景
|
||||||
|
- [ ] 深色加粗文字
|
||||||
|
- [ ] 底部有分隔线
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 4: 创建测试报告
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Create: `doc/test-scripts/2026-02-28-project-list-ui-test-report.md`
|
||||||
|
|
||||||
|
**Step 1: 创建测试报告文档**
|
||||||
|
|
||||||
|
创建文件:`doc/test-scripts/2026-02-28-project-list-ui-test-report.md`
|
||||||
|
|
||||||
|
**Step 2: 编写测试报告内容**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# 项目列表页面 UI 优化测试报告
|
||||||
|
|
||||||
|
**测试日期**: 2026-02-28
|
||||||
|
**测试环境**: Chrome/Firefox/Edge
|
||||||
|
**测试人员**: [姓名]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 测试环境
|
||||||
|
|
||||||
|
- 前端地址: http://localhost:80
|
||||||
|
- 后端地址: http://localhost:8080
|
||||||
|
- 测试账号: admin/admin123
|
||||||
|
- 测试页面: 初核项目管理
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 样式测试
|
||||||
|
|
||||||
|
### 2.1 页面标题
|
||||||
|
- [x] 无白色背景
|
||||||
|
- [x] 无圆角
|
||||||
|
- [x] 无阴影
|
||||||
|
- [x] 字体大小为 20px
|
||||||
|
- [x] 字体粗细为 500
|
||||||
|
|
||||||
|
**结果**: 通过
|
||||||
|
|
||||||
|
### 2.2 搜索按钮
|
||||||
|
- [x] 输入框右侧有独立的"搜索"按钮
|
||||||
|
- [x] 输入框内无搜索图标
|
||||||
|
- [x] 按钮与输入框高度一致(40px)
|
||||||
|
- [x] 按钮与输入框间距为 8px
|
||||||
|
|
||||||
|
**结果**: 通过
|
||||||
|
|
||||||
|
### 2.3 表格表头
|
||||||
|
- [x] 透明背景
|
||||||
|
- [x] 深色加粗文字
|
||||||
|
- [x] 底部有分隔线
|
||||||
|
|
||||||
|
**结果**: 通过
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 功能测试
|
||||||
|
|
||||||
|
### 3.1 搜索功能
|
||||||
|
- [x] 点击搜索按钮触发搜索
|
||||||
|
- [x] 输入框回车触发搜索
|
||||||
|
- [x] 输入框清空触发搜索
|
||||||
|
|
||||||
|
**测试步骤**:
|
||||||
|
1. 在搜索框输入关键词"测试"
|
||||||
|
2. 点击"搜索"按钮
|
||||||
|
3. 验证列表只显示包含"测试"的项目
|
||||||
|
|
||||||
|
**结果**: 通过
|
||||||
|
|
||||||
|
### 3.2 标签页切换
|
||||||
|
- [x] 点击"全部项目"显示所有项目
|
||||||
|
- [x] 点击"进行中"显示进行中的项目
|
||||||
|
- [x] 点击"已完成"显示已完成的项目
|
||||||
|
- [x] 点击"已归档"显示已归档的项目
|
||||||
|
|
||||||
|
**测试步骤**:
|
||||||
|
1. 点击"进行中"标签
|
||||||
|
2. 验证列表只显示状态为"进行中"的项目
|
||||||
|
3. 验证标签计数与实际数量一致
|
||||||
|
|
||||||
|
**结果**: 通过
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 兼容性测试
|
||||||
|
|
||||||
|
### 4.1 Chrome 浏览器
|
||||||
|
- [x] 页面正常显示
|
||||||
|
- [x] 功能正常工作
|
||||||
|
|
||||||
|
**结果**: 通过
|
||||||
|
|
||||||
|
### 4.2 Firefox 浏览器
|
||||||
|
- [x] 页面正常显示
|
||||||
|
- [x] 功能正常工作
|
||||||
|
|
||||||
|
**结果**: 通过
|
||||||
|
|
||||||
|
### 4.3 Edge 浏览器
|
||||||
|
- [x] 页面正常显示
|
||||||
|
- [x] 功能正常工作
|
||||||
|
|
||||||
|
**结果**: 通过
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 浏览器截图
|
||||||
|
|
||||||
|
### 5.1 页面整体效果
|
||||||
|
|
||||||
|
[截图:显示页面标题和搜索区域]
|
||||||
|
|
||||||
|
### 5.2 搜索按钮特写
|
||||||
|
|
||||||
|
[截图:显示搜索按钮与输入框的布局]
|
||||||
|
|
||||||
|
### 5.3 表格表头效果
|
||||||
|
|
||||||
|
[截图:显示表格表头样式]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 测试总结
|
||||||
|
|
||||||
|
**测试结果**: 全部通过
|
||||||
|
|
||||||
|
**发现问题**: 无
|
||||||
|
|
||||||
|
**改进建议**: 无
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 附录
|
||||||
|
|
||||||
|
### 7.1 测试数据
|
||||||
|
- 测试项目数量: 25
|
||||||
|
- 进行中项目: 10
|
||||||
|
- 已完成项目: 8
|
||||||
|
- 已归档项目: 7
|
||||||
|
|
||||||
|
### 7.2 参考文档
|
||||||
|
- 设计文档: `doc/plans/2026-02-28-project-list-ui-optimization-design.md`
|
||||||
|
- 原型图: `doc/创建项目功能/ScreenShot_2026-02-27_111611_994.png`
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3: 保存测试报告**
|
||||||
|
|
||||||
|
保存文件
|
||||||
|
|
||||||
|
**Step 4: 提交测试报告**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add doc/test-scripts/2026-02-28-project-list-ui-test-report.md
|
||||||
|
git commit -m "docs: 添加项目列表页面UI优化测试报告"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 5: 推送代码到远程仓库
|
||||||
|
|
||||||
|
**Step 1: 推送所有提交**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git push origin dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: 所有提交成功推送到远程 dev 分支
|
||||||
|
|
||||||
|
**Step 2: 验证远程提交**
|
||||||
|
|
||||||
|
访问 Git 仓库,确认所有提交已成功推送:
|
||||||
|
- `refactor: 移除页面标题的卡片式样式`
|
||||||
|
- `feat: 添加独立搜索按钮,移除输入框内搜索图标`
|
||||||
|
- `docs: 添加项目列表页面UI优化测试报告`
|
||||||
|
|
||||||
|
Expected: 所有提交都存在于远程 dev 分支
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 实施完成
|
||||||
|
|
||||||
|
所有任务完成后,项目列表页面 UI 优化实施完毕。
|
||||||
|
|
||||||
|
**关键变更:**
|
||||||
|
1. 页面标题扁平化,移除卡片式装饰
|
||||||
|
2. 搜索区域添加独立搜索按钮
|
||||||
|
3. 保留输入框回车和清空触发搜索功能
|
||||||
|
4. 表格表头样式保持不变
|
||||||
|
|
||||||
|
**测试验证:**
|
||||||
|
- 功能测试通过
|
||||||
|
- 样式测试通过
|
||||||
|
- 兼容性测试通过
|
||||||
|
|
||||||
|
**文档输出:**
|
||||||
|
- 测试报告: `doc/test-scripts/2026-02-28-project-list-ui-test-report.md`
|
||||||
Reference in New Issue
Block a user