## 5. 核心功能页面优化方案
本章针对 SQL-Platform 三个核心功能模块——审批变更(工单系统)、查询数据、系统设置——进行逐页拆解分析,提出可落地的 UI/UX 优化方案。每个方案均包含具体的组件选型、布局参数、交互细节与视觉规范,确保开发团队能够直接转化为实现任务。
---
### 5.1 审批变更工单系统优化
审批变更是平台的核心业务流,涉及工单列表、工单创建、工单详情三个主要页面。当前实现存在布局松散、信息层级不清、操作流程割裂等问题。以下按页面逐一给出优化方案。
#### 5.1.1 工单列表页优化
**组件选型与布局重构**
将原生 `
` 全面替换为 `@tanstack/react-table` + `shadcn/ui DataTable` 组合。DataTable 内置列排序、列过滤、行选择、分页等能力,可显著减少 742 行中的手写逻辑。表格容器采用 `rounded-xl border border-border/60 bg-card` 样式,阴影参数为 `shadow-sm`。
**状态卡片升级**
原状态卡片(全部/待审批/执行中/完成/失败)改为 Stats Cards。每张卡片包含:状态图标(`Lucide`)、工单数量(`text-2xl font-bold`)、环比趋势箭头(绿色上升/红色下降)、环比百分比(`text-xs text-muted-foreground`)。卡片使用 `cn()` 动态绑定激活状态的边框色——激活时边框为 `ring-2 ring-primary/40 border-primary`,未激活为 `border-transparent hover:border-border/80`。卡片网格采用 `grid grid-cols-5 gap-4`,在 < 1024px 下退化为 `grid-cols-3` + `grid-cols-2`。
**高级筛选栏**
在状态卡片下方新增折叠式筛选栏,包含以下控件:
| 筛选项 | 组件 | 说明 |
|---------|------|------|
| 实例 | `Select`(多选) | 从实例列表异步加载 |
| 数据库类型 | `Select`(多选) | MySQL/PostgreSQL/MongoDB 等 |
| 提交人 | `Input` + `Avatar` | 支持用户名/邮箱搜索 |
| 时间范围 | `DateRangePicker` | shadcn/ui 官方组件 |
| 优先级 | `ToggleGroup` | 高/中/低三态切换 |
筛选栏默认折叠,点击"高级筛选"按钮展开,展开高度动画 `duration-300 ease-in-out`。所有筛选条件通过 URL query params 同步,支持刷新后状态保持。
**表格交互增强**
- **优先级标识**:每行左侧增加 4px 宽色条,高=`bg-red-500`、中=`bg-amber-500`、低=`bg-slate-400`,使用绝对定位贴左边框。
- **行 Hover 效果**:`hover:bg-muted/60`,同时左侧出现 `border-l-2 border-primary` 指示条,过渡 `transition-colors duration-150`。
- **操作列优化**:将分散的查看/通过/拒绝/执行/撤销按钮收缩为图标按钮组(`Eye`, `CheckCircle`, `XCircle`, `Play`, `RotateCcw`)。当操作超过 3 个时,溢出部分收入 `DropdownMenu`。按钮使用 `variant="ghost" size="icon"`。
- **批量操作**:顶部新增批量操作栏,选中行后出现(`AnimatePresence` 滑入),包含"批量审批"、"批量拒绝"、"导出选中"三个主操作,危险操作使用 `variant="destructive"`。
- **列自定义**:列头右键菜单支持"隐藏此列"、"重置列宽",列宽拖拽使用 `react-resizable` 实现,拖拽手柄 4px 宽,hover 时显示 `bg-primary/30`。
**搜索与分页**
搜索框使用 `Input` + `Search` 图标,支持 `Cmd+K` 快捷键聚焦。分页组件采用 `shadcn/ui Pagination`,页码按钮尺寸 `h-9 w-9`,当前页 `bg-primary text-primary-foreground`。每页条数可选 10/25/50/100。
---
#### 5.1.2 工单创建页优化
**布局重构:左右分栏**
将当前 1192 行的单栏布局改为左右分栏:左侧编辑器区占 `w-3/5`(60%),右侧辅助信息面板占 `w-2/5`(40%),中间分隔线 `border-r border-border/60`。两栏均独立滚动,避免编辑器滚动时右侧信息丢失。分栏在 < 1280px 下退化为上下堆叠布局。
**步骤指示器(Step Indicator)**
在分栏顶部增加横向步骤条,共三步:
```
① 填写信息 ──→ ② SQL 审核 ──→ ③ 提交审批
```
步骤条使用 `shadcn/ui` 风格的自定义组件。已完成步骤圆圈 `bg-primary text-primary-foreground`,当前步骤 `bg-primary ring-4 ring-primary/20`,未到达步骤 `bg-muted text-muted-foreground`。连线使用 `h-0.5 w-16`,已完成段 `bg-primary`,未完成段 `bg-border`。步骤切换允许回退(已填写内容保留),但前进需通过当前步骤的验证(如 SQL 审核必须通过才能到第三步)。
**左侧编辑器区**
- **顶部工具栏**:实例选择 + 数据库选择使用 `Popover` + `Command` 组合(支持搜索筛选),定时执行使用 `Switch` + `DateTimePicker`,格式化按钮(`AlignLeft` 图标)使用 `variant="outline" size="sm"`。工具栏使用 `flex items-center gap-3 p-3 border-b border-border/60 bg-muted/30`。
- **SQL 编辑器**:保留 CodeMirror 6,新增配置:行号显示(`lineNumbers()`)、迷你地图(`@codemirror/view showMinimap` 或自定义 SVG 缩略图)、当前行高亮(`highlightActiveLineGutter()`)。编辑器高度 `h-[480px]`,边框 `border-0`(融入容器)。
- **SQL 模板快捷插入**:编辑器左下角增加"模板"按钮,点击弹出 `Popover`,内含分类模板列表(DDL/DML/查询),点击后 `editor.dispatch()` 插入模板 SQL。
**右侧辅助面板**
- **审核结果卡片**:使用三个独立卡片分别展示 Error(`bg-red-50 border-red-200`)、Warning(`bg-amber-50 border-amber-200`)、Info(`bg-blue-50 border-blue-200`)。每张卡片包含:数量 badge(`rounded-full px-2 py-0.5 text-xs font-medium`)、发现项列表(每项包含行号、规则名、描述)、展开/折叠按钮。Error 卡片默认展开,其他折叠。
- **变更原因输入**:将 `