Files
ccdi/assets/plans/2026-02-27-Material-Design-表格样式优化.md
2026-03-03 16:14:16 +08:00

681 lines
14 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.
# Material Design 表格样式优化实现计划
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**Goal:** 将项目管理表格优化为 Material Design 风格,移除边框,使用阴影和留白分隔内容
**Architecture:** 纯样式优化,修改 ProjectTable 组件的 SCSS采用扁平卡片式设计
**Tech Stack:** Vue.js 2.6.12, Element UI 2.15.14, SCSS
---
## Task 1: 修改表格容器样式 - 添加阴影和圆角
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue`
**Step 1: 定位表格样式部分**
找到 `<style lang="scss" scoped>` 中的 `.project-table-container` 部分(约第 245 行开始)。
**Step 2: 修改表格容器样式**
替换现有的 `:deep(.el-table)` 样式:
```scss
.project-table-container {
margin-top: 16px;
// 表格整体样式 - Material Design 卡片式
:deep(.el-table) {
// 移除边框,使用阴影
border: none; // 从 1px solid #eee 改为 none
border-radius: 8px; // 从 4px 增加到 8px
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); // 新增中等阴影
// 悬停时卡片阴影加深
transition: box-shadow 0.3s ease;
&:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
}
}
```
**变更说明:**
- `border`: `1px solid #eee``none`
- `border-radius`: `4px``8px`
- 新增 `box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1)`
- 新增悬停效果 `box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15)`
- 新增过渡动画 `transition: box-shadow 0.3s ease`
**Step 3: 验证样式应用**
1. 启动前端开发服务器:
```bash
cd ruoyi-ui && npm run dev
```
2. 访问项目管理页面http://localhost:80
3. 使用浏览器开发者工具检查表格:
- 确认 `border` 为 `none`
- 确认 `border-radius` 为 `8px`
- 确认有阴影效果
- 鼠标悬停时阴影加深
**Step 4: 提交更改**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue
git commit -m "style: Material Design - 表格容器添加阴影和圆角"
```
---
## Task 2: 扁平化表头样式
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue`
**Step 1: 修改表头样式**
在 `:deep(.el-table)` 内修改 `th` 样式:
```scss
// 表头样式 - 扁平化,无背景色
th {
background-color: transparent; // 从 #f5f5f5 改为 transparent
color: #333;
font-weight: 600;
font-size: 14px;
height: 56px; // 从 48px 增加到 56px
padding: 16px 12px; // 从 12px 增加到 16px 垂直内边距
// 只保留底部一条分隔线
border-bottom: 2px solid #e0e0e0; // 新增
}
```
**变更说明:**
- `background-color`: `#f5f5f5` → `transparent`
- `height`: `48px` → `56px`
- `padding`: `12px` → `16px 12px`
- 新增 `border-bottom: 2px solid #e0e0e0`
**Step 2: 移除表头单元格的垂直分隔线**
确认 `.cell` 样式中已有:
```scss
.cell {
border-right: none; // 确认这行存在
}
```
**Step 3: 验证表头样式**
在浏览器中检查表头:
- 表头背景应为透明(白色)
- 表头文字应加粗
- 底部应有一条 2px 的灰色线
- 高度应增加到 56px
**Step 4: 提交更改**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue
git commit -m "style: Material Design - 扁平化表头,移除背景色"
```
---
## Task 3: 优化数据行样式 - 移除分隔线,增加留白
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue`
**Step 1: 修改数据行样式**
在 `:deep(.el-table)` 内修改 `td` 样式:
```scss
// 数据行样式 - 增加留白,移除分隔线
td {
color: #333;
font-size: 14px;
height: 64px; // 从 50px 增加到 64px
padding: 20px 12px; // 从 12px 增加到 20px 垂直内边距
border-bottom: none; // 从 1px solid #f0f0f0 改为 none
}
```
**变更说明:**
- `height`: `50px` → `64px` (+28%)
- `padding`: `12px` → `20px 12px` (+67% 垂直内边距)
- `border-bottom`: `1px solid #f0f0f0` → `none`
**Step 2: 优化悬停效果**
修改 `.el-table__row:hover > td` 样式:
```scss
// 悬停效果
.el-table__row {
transition: background-color 0.2s ease; // 新增过渡
&:hover > td {
background-color: #fafafa !important; // 从 #f5f5f5 改为 #fafafa
}
}
```
**变更说明:**
- 悬停背景色:`#f5f5f5` → `#fafafa`(更浅)
- 新增 `transition: background-color 0.2s ease`
**Step 3: 确认移除额外边框**
确认已有以下样式(如果不存在则添加):
```scss
// 移除表格内容的额外边框
.el-table__body-wrapper {
.cell {
border-right: none;
}
}
&::before,
&::after {
display: none; // 或 height: 0; width: 0;
}
```
**Step 4: 验证数据行样式**
在浏览器中检查:
- 行高应增加到 64px
- 行之间应无分隔线(纯留白)
- 悬停时背景应为浅灰色 `#fafafa`
- 过渡动画应平滑
**Step 5: 提交更改**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue
git commit -m "style: Material Design - 移除行分隔线,增加留白"
```
---
## Task 4: 优化操作按钮样式 - Material Design 风格
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue`
**Step 1: 修改操作按钮样式**
找到或添加 `:deep(.el-button--text)` 样式部分(约第 338 行),修改为:
```scss
// 操作按钮样式 - Material Design 风格
:deep(.el-button--text) {
color: #1890ff;
padding: 8px 12px; // 从 0 8px 增加到 8px 12px
border-radius: 4px; // 新增圆角
transition: all 0.2s ease; // 从只过渡颜色改为过渡所有属性
&:hover {
color: #096dd9;
background-color: rgba(24, 144, 255, 0.08); // 新增浅蓝色背景
text-decoration: none; // 移除下划线
}
&:first-child {
padding-left: 0; // 第一个按钮无左内边距
}
// 按钮间距
& + .el-button--text {
margin-left: 4px; // 从 8px 减少到 4px
}
}
```
**变更说明:**
- `padding`: `0 8px` → `8px 12px`(增加点击区域)
- 新增 `border-radius: 4px`
- 新增悬停背景色 `rgba(24, 144, 255, 0.08)`
- 移除悬停下划线 `text-decoration: none`
- `transition`: 只过渡颜色 → 过渡所有属性
- 按钮间距:`8px` → `4px`
**Step 2: 验证按钮样式**
在浏览器中测试:
- 按钮内边距应增加
- 悬停时应显示浅蓝色背景,无下划线
- 过渡动画应平滑
- 按钮之间应有适当间距
**Step 3: 提交更改**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue
git commit -m "style: Material Design - 操作按钮添加悬停背景"
```
---
## Task 5: 优化分页组件样式
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue`
**Step 1: 修改分页样式**
找到或添加 `:deep(.el-pagination)` 样式部分(约第 352 行),修改为:
```scss
// 分页样式优化 - Material Design 风格
:deep(.el-pagination) {
margin-top: 24px; // 从 16px 增加到 24px
text-align: right;
// 扁平化按钮
.btn-prev,
.btn-next,
.el-pager li {
border: none; // 移除边框
background-color: transparent; // 透明背景
&:hover {
background-color: #f5f5f5; // 悬停时浅灰背景
}
}
.el-pager li.active {
background-color: #1890ff; // 激活页码蓝色背景
color: white;
border-radius: 4px; // 添加圆角
}
.el-pagination__total,
.el-pagination__sizes,
.el-pagination__jump {
color: #666; // 从 #606266 改为 #666
}
}
```
**变更说明:**
- `margin-top`: `16px` → `24px`
- 移除分页按钮边框
- 激活页码添加圆角 `border-radius: 4px`
- 统一文字颜色为 `#666`
**Step 2: 验证分页样式**
在浏览器中检查分页组件:
- 上边距应增加到 24px
- 所有按钮应无边框
- 激活页码应有蓝色背景 + 圆角
- 悬停时按钮应有浅灰背景
**Step 3: 提交更改**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue
git commit -m "style: Material Design - 扁平化分页组件"
```
---
## Task 6: 全面测试和文档更新
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue`
**Step 1: 视觉测试清单**
在浏览器中逐项检查:
**卡片容器:**
- [ ] 表格有圆角8px
- [ ] 表格有阴影(`0 2px 8px rgba(0,0,0,0.1)`
- [ ] 鼠标悬停时阴影加深
- [ ] 完全无边框
**表头:**
- [ ] 表头背景透明
- [ ] 表头文字加粗
- [ ] 底部有 2px 灰色分隔线
- [ ] 高度为 56px
**数据行:**
- [ ] 行高增加到 64px
- [ ] 行之间无分隔线
- [ ] 悬停时背景为 `#fafafa`
- [ ] 过渡动画平滑
**操作按钮:**
- [ ] 按钮内边距增加
- [ ] 悬停时显示浅蓝色背景
- [ ] 悬停时无下划线
- [ ] 按钮之间有适当间距
**分页组件:**
- [ ] 所有按钮无边框
- [ ] 激活页码有蓝色背景 + 圆角
- [ ] 悬停时按钮有浅灰背景
- [ ] 上边距为 24px
**Step 2: 交互测试**
测试以下交互:
- [ ] 鼠标悬停在表格上,阴影加深
- [ ] 鼠标悬停在行上,背景变化
- [ ] 点击操作按钮,检查事件是否正常触发
- [ ] 点击分页按钮,检查翻页功能
- [ ] 改变每页条数,检查表格刷新
- [ ] 表格横向滚动(如果内容超出)
**Step 3: 响应式测试**
在不同分辨率下测试:
- [ ] 1920x1080 - 表格正常显示
- [ ] 1366x768 - 表格正常显示
- [ ] 小于 1366px - 表格应可横向滚动
**Step 4: 浏览器兼容性测试**
在以下浏览器中测试:
- [ ] Chrome主要浏览器
- [ ] Edge
- [ ] Firefox可选
**Step 5: 截图对比(可选)**
拍摄优化前后的对比截图,保存到:
```
doc/screenshots/material-design-table-before.png
doc/screenshots/material-design-table-after.png
```
**Step 6: 更新最终验收报告**
创建或更新验收报告,记录所有改进:
```bash
# 如果需要更新验收报告
git add doc/implementation/final_acceptance_report.md
git commit -m "docs: 更新验收报告 - Material Design 样式优化"
```
**Step 7: 最终提交**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue
git commit -m "feat: 完成 Material Design 表格样式优化
- 移除表格边框,使用阴影和圆角
- 扁平化表头,移除背景色
- 移除行分隔线,增加留白
- 优化操作按钮悬停效果
- 扁平化分页组件
- 全面视觉测试通过
"
```
---
## 完整样式代码参考
以下是完整的 `<style>` 部分代码,供参考:
```scss
<style lang="scss" scoped>
.project-table-container {
margin-top: 16px;
// 表格整体样式 - Material Design 卡片式
:deep(.el-table) {
border: none;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
transition: box-shadow 0.3s ease;
&:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
// 表头样式 - 扁平化
th {
background-color: transparent;
color: #333;
font-weight: 600;
font-size: 14px;
height: 56px;
padding: 16px 12px;
border-bottom: 2px solid #e0e0e0;
}
// 数据行样式 - 增加留白
td {
color: #333;
font-size: 14px;
height: 64px;
padding: 20px 12px;
border-bottom: none;
}
// 移除列分隔线
.el-table__body-wrapper .cell {
border-right: none;
}
// 悬停效果
.el-table__row {
transition: background-color 0.2s ease;
&:hover > td {
background-color: #fafafa !important;
}
}
// 移除额外边框
&::before,
&::after {
display: none;
}
}
}
// 项目信息单元格
.project-info-cell {
padding: 8px 0;
line-height: 1.5;
.project-name {
font-size: 14px;
font-weight: 600;
color: #303133;
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.project-desc {
font-size: 12px;
color: #909399;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
// 预警人数包装器
.warning-count-wrapper {
display: inline-block;
}
// 文字颜色类
.text-danger {
color: #f56c6c;
}
.text-warning {
color: #e6a23c;
}
.text-info {
color: #909399;
}
.text-bold {
font-weight: bold;
}
// 操作按钮样式 - Material Design
:deep(.el-button--text) {
color: #1890ff;
padding: 8px 12px;
border-radius: 4px;
transition: all 0.2s ease;
&:hover {
color: #096dd9;
background-color: rgba(24, 144, 255, 0.08);
text-decoration: none;
}
&:first-child {
padding-left: 0;
}
& + .el-button--text {
margin-left: 4px;
}
}
// 分页样式 - Material Design
:deep(.el-pagination) {
margin-top: 24px;
text-align: right;
.btn-prev,
.btn-next,
.el-pager li {
border: none;
background-color: transparent;
&:hover {
background-color: #f5f5f5;
}
}
.el-pager li.active {
background-color: #1890ff;
color: white;
border-radius: 4px;
}
.el-pagination__total,
.el-pagination__sizes,
.el-pagination__jump {
color: #666;
}
}
// 空状态
:deep(.el-table__empty-block) {
padding: 48px 0;
.el-table__empty-text {
color: #999;
font-size: 14px;
}
}
</style>
```
---
## 验收标准
完成所有任务后,验证以下内容:
### 视觉验收
- [x] 表格作为浮动卡片,有阴影效果
- [x] 表格圆角为 8px
- [x] 鼠标悬停时阴影加深
- [x] 表头扁平化,无背景色
- [x] 表头高度 56px
- [x] 数据行高度 64px
- [x] 行之间无分隔线,纯留白
- [x] 悬停时行背景为 #fafafa
- [x] 操作按钮悬停有浅蓝色背景
- [x] 分页组件扁平化,激活页码有圆角
### 交互验收
- [x] 悬停效果平滑
- [x] 所有操作按钮点击正常
- [x] 分页功能正常
- [x] 表格滚动正常
### 代码质量验收
- [x] 样式使用 scoped
- [x] 无冗余代码
- [x] 遵循 Material Design 规范
- [x] 每个改进有独立提交
---
## 风险与注意事项
1. **视觉冲击**:变化较大,用户可能需要适应时间
2. **数据密集场景**:留白增加可能需要更多滚动
3. **浏览器兼容**:现代浏览器都支持,无兼容性问题
4. **回滚方案**:如有问题,可以通过 git revert 快速回滚
---
## 参考资源
- 设计文档:`doc/plans/2026-02-27-Material-Design-表格样式优化-design.md`
- Material Design 官方文档https://material.io/design
- Element UI 文档https://element.eleme.cn/
- 当前实现:`doc/plans/2026-02-27-项目管理首页优化.md`