# UI设计更新计划
## Dashboard页面完整改造方案
### 技术栈确认
- **图标库**: @element-plus/icons-vue (已安装)
- **字体**: 系统默认字体栈
- **日期格式**: 统一为 "2025年10月1日 14:00" 格式
### 整体页面设计
#### 页面背景和容器
- **页面背景色**: #F8F9FA (浅灰色)
- **主容器**: 保持当前响应式栅格布局
- **容器内边距**: 24px
- **卡片间距**: 20px (保持现有)
### 1. 统计卡片区域详细设计
#### 1.1 卡片容器样式
```css
.stat-card {
background: #FFFFFF;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
border: none;
padding: 24px;
height: 120px;
position: relative;
overflow: hidden;
}
```
#### 1.2 四个统计卡片具体设计
**卡片1 - 当前进行比赛**
- **图标**: `` (Element Plus Icons)
- **图标容器**:
- 尺寸: 48px × 48px
- 背景色: #E0E7FF (浅蓝色圆形)
- 图标颜色: #6366F1 (蓝紫色)
- 图标尺寸: 24px
- 位置: 左上角
- **数字显示**:
- 字体大小: 32px
- 字重: 700 (bold)
- 颜色: #1F2937 (深灰)
- 位置: 右上角,右对齐
- **标题文字**:
- 内容: "当前进行比赛"
- 字体大小: 14px
- 字重: 500 (medium)
- 颜色: #6B7280 (中灰)
- 位置: 左下角
**卡片2 - 参赛总人数**
- **图标**: `` (Element Plus Icons)
- **图标容器**:
- 背景色: #D1FAE5 (浅绿色圆形)
- 图标颜色: #10B981 (绿色)
- **数字和文字样式**: 同卡片1
- **标题**: "参赛总人数"
**卡片3 - 报名待审核**
- **图标**: `` (Element Plus Icons)
- **图标容器**:
- 背景色: #FEF3C7 (浅黄色圆形)
- 图标颜色: #F59E0B (橙黄色)
- **数字和文字样式**: 同卡片1
- **标题**: "报名待审核"
**卡片4 - 评委总数**
- **图标**: `` (Element Plus Icons)
- **图标容器**:
- 背景色: #FECACA (浅红色圆形)
- 图标颜色: #EF4444 (红色)
- **数字和文字样式**: 同卡片1
- **标题**: "评委总数"
#### 1.3 卡片内部布局结构
```
┌─────────────────────────────┐
│ [🗓️] 32 │
│ │
│ 当前进行比赛 │
└─────────────────────────────┘
```
### 2. 最近比赛表格区域设计
#### 2.1 表格容器卡片
```css
.table-card {
background: #FFFFFF;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
border: none;
padding: 24px;
margin-top: 20px;
}
```
#### 2.2 表格头部设计
- **标题**: "最近比赛"
- **标题样式**:
- 字体大小: 18px
- 字重: 600 (semibold)
- 颜色: #1F2937 (深灰)
- **按钮**: 移除所有按钮 (按用户要求)
#### 2.3 表格样式详细设计
**表头样式**:
```css
.el-table__header {
background-color: #F9FAFB;
}
.el-table__header th {
background-color: #F9FAFB !important;
color: #374151;
font-size: 14px;
font-weight: 500;
height: 48px;
border-bottom: 1px solid #E5E7EB;
}
```
**表格行样式**:
```css
.el-table__row {
height: 56px;
}
.el-table__row:nth-child(even) {
background-color: #F9FAFB;
}
.el-table__row:nth-child(odd) {
background-color: #FFFFFF;
}
.el-table td {
color: #1F2937;
font-size: 14px;
font-weight: 400;
border-bottom: 1px solid #F3F4F6;
}
```
#### 2.4 表格列设计
1. **比赛名称** (180px)
2. **报名人数** (120px)
3. **比赛时间** (200px) - 格式: "2025年10月1日 14:00"
4. **状态** (100px) - 状态标签
5. **操作** (自适应) - 移除操作按钮
#### 2.5 状态标签样式
**已发布状态**:
```css
.status-published {
background-color: #D1FAE5;
color: #065F46;
border-radius: 16px;
padding: 4px 12px;
font-size: 12px;
font-weight: 500;
display: inline-block;
}
```
**未发布状态**:
```css
.status-unpublished {
background-color: #FEF3C7;
color: #92400E;
border-radius: 16px;
padding: 4px 12px;
font-size: 12px;
font-weight: 500;
display: inline-block;
}
```
**关闭状态**:
```css
.status-closed {
background-color: #FEE2E2;
color: #991B1B;
border-radius: 16px;
padding: 4px 12px;
font-size: 12px;
font-weight: 500;
display: inline-block;
}
```
### 3. 响应式设计保持
#### 断点设置 (保持现有)
- **xl (≥1200px)**: 4列统计卡片 (span=6)
- **lg (≥992px)**: 4列统计卡片 (span=6)
- **md (≥768px)**: 2列统计卡片 (span=12)
- **sm (<768px)**: 1列统计卡片 (span=24)
#### 移动端优化
- 统计卡片在小屏幕下保持相同设计
- 表格在移动端可横向滚动
- 图标和文字比例保持一致
### 4. 数据格式处理
#### 日期格式转换
```javascript
// 将后端返回的日期格式化为: "2025年10月1日 14:00"
const formatDate = (dateString) => {
const date = new Date(dateString);
return date.toLocaleDateString('zh-CN', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit'
});
}
```
#### 状态映射
```javascript
const statusMap = {
'已发布': 'published',
'未发布': 'unpublished',
'关闭': 'closed'
}
```
### 5. 遗漏的设计细节补充
#### 5.1 卡片hover效果
```css
.stat-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
transition: all 0.3s ease;
}
```
#### 5.2 图标容器圆形设计
```css
.icon-container {
width: 48px;
height: 48px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: 24px;
left: 24px;
}
```
#### 5.3 数字动画效果 (可选)
- 页面加载时数字从0开始计数到目标值
- 使用CSS transition实现平滑过渡
#### 5.4 表格无数据状态
```css
.el-table__empty-block {
background-color: #F9FAFB;
color: #6B7280;
font-size: 14px;
}
```
#### 5.5 加载状态设计
- 统计卡片显示骨架屏
- 表格显示loading状态
- 保持与整体设计风格一致
### 6. 实施优先级
#### 第一阶段 (核心样式)
1. 页面背景色修改
2. 统计卡片重构 (图标 + 样式)
3. 表格基础样式更新
#### 第二阶段 (细节优化)
1. 状态标签样式
2. 日期格式处理
3. 响应式测试
#### 第三阶段 (交互优化)
1. hover效果
2. 加载状态
3. 动画效果
### 7. 需要创建的新组件
#### StatCard.vue (统计卡片组件)
- 接收图标、颜色、数值、标题等props
- 可复用的统计卡片组件
- 内置hover和动画效果
#### StatusTag.vue (状态标签组件)
- 根据状态值自动应用对应样式
- 支持自定义颜色映射
### 8. CSS变量定义
```css
:root {
/* 主题色 */
--primary-color: #6366F1;
--bg-color: #F8F9FA;
--card-bg: #FFFFFF;
/* 统计卡片颜色 */
--blue-light: #E0E7FF;
--blue-primary: #6366F1;
--green-light: #D1FAE5;
--green-primary: #10B981;
--yellow-light: #FEF3C7;
--yellow-primary: #F59E0B;
--red-light: #FECACA;
--red-primary: #EF4444;
/* 文字颜色 */
--text-primary: #1F2937;
--text-secondary: #6B7280;
--text-muted: #374151;
/* 状态颜色 */
--status-published-bg: #D1FAE5;
--status-published-text: #065F46;
--status-unpublished-bg: #FEF3C7;
--status-unpublished-text: #92400E;
--status-closed-bg: #FEE2E2;
--status-closed-text: #991B1B;
}
```
---
*此计划涵盖了图片设计的所有视觉元素,确保高度还原目标效果*