6.9 KiB
6.9 KiB
前端UI一致性系统性修复计划
1. 问题诊断
1.1 当前发现的问题
| 问题类别 | 具体问题 | 影响页面 | 严重程度 |
|---|---|---|---|
| 页面标题 | 有的用 PageHeader,有的直接用 <h1> |
多个页面 | 中 |
| 操作按钮位置 | 有的在右上角(PageHeader actions),有的在表格上方 | 用户管理、角色管理等 | 中 |
| 筛选区域 | 有的用 Card 包裹,有的直接放页面中;样式不统一 | 多个页面 | 高 |
| 表格操作 | 按钮样式、顺序、图标不统一 | 所有列表页 | 高 |
| 空状态 | 有的用 PageEmpty,有的用 Ant Design 的 Empty |
权限管理等 | 中 |
| 加载状态 | 处理方式不一致 | 多个页面 | 低 |
| 错误处理 | 有的用 PageError,有的直接 message 提示 |
多个页面 | 中 |
1.2 UI规范要求
根据 docs/design/admin-ui-tokens.css,UI规范要求:
/* 颜色系统 */
--color-canvas: #f4f1ea; /* 页面背景 */
--color-layout: #e9e3d5; /* 布局背景 */
--color-surface: #ffffff; /* 卡片表面 */
--color-surface-muted: #f8f5ef; /* 柔和表面 */
--color-primary: #0e5a6a; /* 主色调 */
--color-accent: #c26d3a; /* 强调色 */
/* 间距系统 */
--space-4: 16px; /* 标准间距 */
--space-5: 24px; /* 大间距 */
/* 圆角 */
--radius-md: 16px; /* 卡片圆角 */
/* 阴影 */
--shadow-card: 0 10px 30px rgba(23, 33, 43, 0.06);
2. 修复目标
2.1 一致性目标
- 100%的页面使用统一的布局组件
- 100%的筛选区域使用统一的样式
- 100%的表格操作按钮使用统一的顺序和样式
- 100%的空状态使用统一的组件
- 100%的错误状态使用统一的组件
2.2 视觉目标
- 所有页面遵循 warm-elegant 设计主题
- 统一的卡片圆角 (16px)
- 统一的阴影效果
- 统一的间距系统
3. 修复方案
3.1 创建统一布局组件
创建 components/layout/PageLayout/ 目录,包含:
PageLayout/
├── index.ts
├── PageLayout.tsx # 统一页面布局容器
├── PageLayout.module.css # 布局样式
├── PageHeader.tsx # 统一页面头部(已存在,需改造)
├── FilterCard.tsx # 统一筛选卡片
├── TableCard.tsx # 统一表格卡片
└── ActionBar.tsx # 统一操作栏
3.2 统一页面结构
每个页面必须遵循以下结构:
<PageLayout>
<PageHeader
title="页面标题"
description="页面描述"
actions={<ActionBar>...</ActionBar>}
/>
<FilterCard>
{/* 筛选表单 */}
</FilterCard>
<TableCard>
{/* 表格 */}
</TableCard>
{/* 抽屉/弹窗 */}
</PageLayout>
3.3 统一操作按钮规范
表格操作按钮顺序(从左到右):
- 查看/详情 (EyeOutlined)
- 编辑 (EditOutlined)
- 权限/角色 (SafetyOutlined/TeamOutlined)
- 启用/禁用 (根据状态)
- 删除 (DeleteOutlined, danger)
按钮样式规范:
- 所有操作按钮使用
type="link" size="small" - 删除按钮添加
danger属性 - 禁用状态的按钮添加
disabled属性
3.4 统一筛选区域规范
筛选组件顺序:
- 关键词搜索 (Input)
- 状态筛选 (Select)
- 其他筛选条件
- 日期范围 (RangePicker)
- 排序字段 (Select)
- 排序方向 (Select)
按钮顺序:
- 查询按钮 (type="primary", icon={})
- 重置按钮
- 刷新按钮 (icon={})
4. 实施计划
阶段1:基础组件建设(第1-2天)
- 创建
PageLayout组件 - 创建
FilterCard组件 - 创建
TableCard组件 - 创建
ActionBar组件 - 更新
PageHeader组件 - 创建统一的 CSS Module 样式
阶段2:页面改造(第3-5天)
| 页面 | 改造内容 | 预计时间 |
|---|---|---|
| UsersPage | 统一布局、筛选、表格操作 | 0.5天 |
| RolesPage | 统一布局、筛选、表格操作 | 0.5天 |
| PermissionsPage | 统一空状态、布局 | 0.5天 |
| LoginLogsPage | 统一布局、筛选 | 0.5天 |
| OperationLogsPage | 统一布局、筛选 | 0.5天 |
| WebhooksPage | 统一布局、表格操作 | 0.5天 |
| ImportExportPage | 统一布局 | 0.5天 |
| ProfilePage | 统一布局 | 0.5天 |
| ProfileSecurityPage | 统一布局 | 0.5天 |
阶段3:验证与优化(第6天)
- 检查所有页面的一致性
- 验证响应式布局
- 验证暗色主题支持
- 运行测试套件
- 构建验证
5. 技术实现细节
5.1 PageLayout 组件
// components/layout/PageLayout/PageLayout.tsx
import styles from './PageLayout.module.css'
interface PageLayoutProps {
children: React.ReactNode
className?: string
}
export function PageLayout({ children, className }: PageLayoutProps) {
return (
<div className={`${styles.pageLayout} ${className || ''}`}>
{children}
</div>
)
}
5.2 FilterCard 组件
// components/layout/PageLayout/FilterCard.tsx
import { Card } from 'antd'
import styles from './PageLayout.module.css'
interface FilterCardProps {
children: React.ReactNode
}
export function FilterCard({ children }: FilterCardProps) {
return (
<Card className={styles.filterCard}>
{children}
</Card>
)
}
5.3 CSS Module 规范
/* PageLayout.module.css */
.pageLayout {
padding: var(--space-5);
max-width: var(--page-max-width);
margin: 0 auto;
}
.filterCard {
margin-bottom: var(--space-4);
border-radius: var(--radius-md) !important;
box-shadow: var(--shadow-card) !important;
background: var(--color-surface) !important;
}
.tableCard {
border-radius: var(--radius-md) !important;
box-shadow: var(--shadow-card) !important;
background: var(--color-surface) !important;
}
6. 验收标准
6.1 功能验收
- 所有页面可以正常访问
- 所有功能可以正常使用
- 所有测试通过
- 构建成功
6.2 视觉验收
- 所有页面使用统一的布局组件
- 所有筛选区域样式一致
- 所有表格操作按钮顺序一致
- 所有空状态使用统一组件
- 所有错误状态使用统一组件
6.3 代码验收
- 代码符合项目规范
- 无重复代码
- 组件复用率高
- 类型定义完整
7. 风险评估
| 风险 | 可能性 | 影响 | 缓解措施 |
|---|---|---|---|
| 改造引入新bug | 中 | 高 | 充分测试,逐步改造 |
| 样式冲突 | 中 | 中 | 使用CSS Module隔离 |
| 性能下降 | 低 | 中 | 优化组件渲染 |
| 工期延误 | 低 | 中 | 分阶段实施 |
8. 后续优化建议
- 添加用户创建功能:后端需要支持
POST /api/v1/users接口 - 添加批量操作功能:后端需要支持批量API
- 优化移动端体验:当前主要针对桌面端
- 添加页面过渡动画:提升用户体验
- 添加主题切换动画:提升用户体验