Files
user-system/docs/plans/UI_CONSISTENCY_FIX_PLAN.md

6.9 KiB
Raw Blame History

前端UI一致性系统性修复计划

1. 问题诊断

1.1 当前发现的问题

问题类别 具体问题 影响页面 严重程度
页面标题 有的用 PageHeader,有的直接用 <h1> 多个页面
操作按钮位置 有的在右上角(PageHeader actions),有的在表格上方 用户管理、角色管理等
筛选区域 有的用 Card 包裹,有的直接放页面中;样式不统一 多个页面
表格操作 按钮样式、顺序、图标不统一 所有列表页
空状态 有的用 PageEmpty,有的用 Ant Design 的 Empty 权限管理等
加载状态 处理方式不一致 多个页面
错误处理 有的用 PageError,有的直接 message 提示 多个页面

1.2 UI规范要求

根据 docs/design/admin-ui-tokens.cssUI规范要求

/* 颜色系统 */
--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 一致性目标

  1. 100%的页面使用统一的布局组件
  2. 100%的筛选区域使用统一的样式
  3. 100%的表格操作按钮使用统一的顺序和样式
  4. 100%的空状态使用统一的组件
  5. 100%的错误状态使用统一的组件

2.2 视觉目标

  1. 所有页面遵循 warm-elegant 设计主题
  2. 统一的卡片圆角 (16px)
  3. 统一的阴影效果
  4. 统一的间距系统

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 统一操作按钮规范

表格操作按钮顺序(从左到右)

  1. 查看/详情 (EyeOutlined)
  2. 编辑 (EditOutlined)
  3. 权限/角色 (SafetyOutlined/TeamOutlined)
  4. 启用/禁用 (根据状态)
  5. 删除 (DeleteOutlined, danger)

按钮样式规范

  • 所有操作按钮使用 type="link" size="small"
  • 删除按钮添加 danger 属性
  • 禁用状态的按钮添加 disabled 属性

3.4 统一筛选区域规范

筛选组件顺序

  1. 关键词搜索 (Input)
  2. 状态筛选 (Select)
  3. 其他筛选条件
  4. 日期范围 (RangePicker)
  5. 排序字段 (Select)
  6. 排序方向 (Select)

按钮顺序

  1. 查询按钮 (type="primary", icon={})
  2. 重置按钮
  3. 刷新按钮 (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. 后续优化建议

  1. 添加用户创建功能:后端需要支持 POST /api/v1/users 接口
  2. 添加批量操作功能后端需要支持批量API
  3. 优化移动端体验:当前主要针对桌面端
  4. 添加页面过渡动画:提升用户体验
  5. 添加主题切换动画:提升用户体验