1. 主题系统扩展 (5套主题) - ocean-deep(深海蓝) / light-professional(明亮白) / midnight-purple(午夜紫) - pine-green(松林绿) / orange-vitality(活力橙) - useTheme hook 重写支持5主题 + 向后兼容 - AppearanceSettings 5主题预览卡片 2. 设计体系 (index.css) - 按钮系统: dg-btn-primary/secondary/ghost/danger + 尺寸变体 - 徽章系统: dg-badge-* (8色) - 卡片/表格: dg-card-section, dg-table-row, dg-table-header - 状态点: dg-status-dot-* (4色) - 动效关键帧: slideInLeft, scaleIn 3. 菜单重组 (menu.ts) - 5分组: 概览/数据源/工单/权限/系统 - 6个图标更新: Code2/FileEdit/ShieldCheck/FolderLock/ScrollText/Timer - 新增 permission 权限码字段 4. Layout 侧边栏增强 - 左侧渐变指示条 + 发光效果 - hover 微动画 + 图标变色 - 面包屑导航头部 - 主题切换循环5主题 5. 核心页面优化 - TicketsPage: 设计系统类 + 颜色对齐 - QueriesPage: 去Card依赖 + dg-table/dg-btn统一 - Breadcrumb组件 + useBreadcrumb hook
17 KiB
1. 项目概况与技术架构评估
1.1 项目定位与核心功能
1.1.1 平台定位
SQL-Platform 是一款面向企业内部数据操作的自助查询与数据变更审批流平台,其核心定位是为开发、运维、数据分析等角色提供安全可控的数据库操作入口。平台覆盖 MySQL、PostgreSQL、Redis、MongoDB 四种主流数据库类型,通过工单驱动的审批机制,在操作便捷性与数据安全性之间建立平衡。
该平台在生态位上直接对标 Yearning(Go + Vue 技术栈,侧重 MySQL 审计)与 Archery(Python + Vue 技术栈,支持多数据库),同时吸收了 Bytebase 在工单审批流程设计上的先进理念。相较于竞品,本项目采用 React 19 + Go/Gin 的现代化全栈组合,在前后端解耦程度、UI 可定制性以及开发者体验(DX)方面具备差异化竞争力。
1.1.2 核心功能模块
平台功能围绕"数据操作全生命周期管理"展开,可划分为五大核心域:
| 功能域 | 核心能力 | 对应菜单 |
|---|---|---|
| 数据操作 | SQL 自助查询(支持 CodeMirror 6 编辑器)、数据变更提交 | 查询数据、数据变更 |
| 审批工作流 | 工单创建 → 审批节点流转 → 执行/驳回 → 归档 | 工单管理 |
| 数据源治理 | 多类型数据库实例注册、连接池管理、Schema 浏览 | 数据源管理 |
| 权限管控 | RBAC 角色权限模型、权限组划分、用户生命周期管理 | 权限组、角色权限、用户管理 |
| 审计与合规 | 操作日志全量记录、审批流程自定义、自动任务调度 | 审计日志、审批流程、自动任务 |
1.1.3 对标产品分析
| 维度 | SQL-Platform | Yearning | Archery | Bytebase |
|---|---|---|---|---|
| 后端技术 | Go/Gin | Go/Beego | Python/Django | Go |
| 前端技术 | React 19 + TS | Vue 2 | Vue 2 | Vue 3 |
| 支持数据库 | MySQL/PgSQL/Redis/MongoDB | MySQL | 多数据库 | 全品类 |
| UI 组件体系 | shadcn/ui + Tailwind | Element UI | Element UI | 自研组件 |
| 编辑器 | CodeMirror 6 | ACE Editor | ACE Editor | 自研 Monaco |
| 代码开源度 | 全开源 | 开源核心 | 全开源 | 开源核心 |
相较 Yearning,本项目在多数据库支持广度与前端技术栈现代化程度上具有明显优势;相较 Archery,Go 后端的性能表现与部署便捷性更为突出。当前主要差距集中在工单审批流程的可视化设计与**数据库变更的 Schema 版本管理(VCS 集成)**方面,这两项可作为后续版本的重点演进方向。
1.2 技术栈分析
1.2.1 前后端技术选型评估
后端架构
后端采用 Go 1.26 + Gin v1.10.1 的组合,Gin 作为目前 Go 生态中 Stars 数最高(>80k)的 Web 框架,其高性能路由与极简的 Middleware 设计非常适合 API 密集型企业应用。ORM 层选用 GORM v1.26.0,借助其 AutoMigrate、关联预加载与插件扩展能力,可显著降低数据库操作层的样板代码量。元数据库采用 SQLite(通过 gorm.io/driver/sqlite 驱动),这一设计决策使得平台在部署时零依赖外部数据库,极大降低了私有化部署的门槛——这对于中小团队或对运维复杂度敏感的企业极具吸引力。
认证层采用 JWT HS256 + bcrypt 方案,Token 默认 24h 过期,在安全性与用户体验之间取得合理平衡。RBAC 权限中间件的独立设计体现了安全架构的前置思维,建议后续版本考虑引入 Refresh Token 机制以降低长期会话的泄露风险。
前端架构
前端基于 React 19 + TypeScript,构建工具采用 Vite 7,这一组合代表了 2024-2025 年 React 生态的技术前沿。React 19 的 Server Components 支持(尽管当前项目以 CSR 为主)、Compiler 自动优化以及改进的 Suspense 边界处理,为后续性能演进预留了充足空间。Vite 7 相较于 Webpack 在冷启动速度(提升约 10-20 倍)与 HMR 响应速度上具备代际优势,显著改善开发体验。
UI 层采用 shadcn/ui + Tailwind CSS 4 + Radix UI 的三层架构:Radix UI 提供无样式、无障碍(A11y)完备的底层原语;Tailwind CSS 4 提供原子化样式能力;shadcn/ui 则在此基础上封装了一套设计一致、可高度定制的高阶组件。这种"无头组件 + 原子样式 + 组件封装"的分层模式,是当前前端 UI 架构的最佳实践之一。
代码编辑器选用 CodeMirror 6(@codemirror/lang-sql 语言包),相较于 Monaco Editor,CodeMirror 6 在包体积(Tree-shakeable 后约 100KB vs Monaco 的 1MB+)、移动端适配以及主题定制灵活性上表现更优,非常适合本项目这种以 SQL 编辑为核心但非纯 IDE 场景的应用。
图表层采用 Recharts,作为 React 生态中最成熟的 D3 封装库,其与 React 组件模型的深度整合使得在仪表盘页面中构建数据可视化变得直观高效。
1.2.2 技术栈优势分析
- 部署零依赖:SQLite 作为元数据库 + Go 单二进制部署,使得整个平台可以编译为单一可执行文件分发,运维成本极低。
- 类型安全贯穿全栈:TypeScript(前端)+ Go(后端)的双重静态类型保障,配合 GORM 的模型定义与前端接口类型的共享(可通过 OpenAPI/Swagger 代码生成进一步强化),可显著降低因类型不匹配导致的运行时错误。
- 组件体系可扩展性强:shadcn/ui 的组件代码直接存在于项目源码中(非 npm 黑盒),团队可根据业务需求任意修改组件内部实现而不受上游版本锁定。
- 性能基线优秀:Go 的 goroutine 并发模型 + Gin 的高性能路由 + Vite 的快速构建 + React.lazy 代码分割,从后端到前端形成了一条完整的性能优化链路。
1.2.3 潜在技术债务
| 风险点 | 影响等级 | 说明与建议 |
|---|---|---|
| GORM v1.26.0 版本锁定 | 中 | GORM v2 与 v1 存在 API 不兼容变更,长期停留在 v1 会阻碍安全补丁获取。建议规划迁移至 GORM v2。 |
| SQLite 并发写入瓶颈 | 中 | SQLite 在 WAL 模式下可支持多读单写,但在高并发工单场景下可能成为瓶颈。建议评估是否需要支持 PostgreSQL/MySQL 作为可选元数据库。 |
| React 19 生态适配 | 低-中 | React 19 尚属较新版本,部分第三方库可能存在兼容性问题。建议建立依赖版本锁定策略,并持续跟踪关键依赖的 React 19 适配进度。 |
| JWT 无 Refresh Token | 中 | 24h 固定过期时间导致用户需要频繁重新登录,影响体验。建议引入 Refresh Token + Access Token 双 Token 机制。 |
| 缺少 API 文档自动化 | 低 | 后端 120+ 路由缺乏自动化文档输出。建议集成 Swagger/OpenAPI 自动生成,降低前后端协作成本。 |
1.3 前端架构现状评估
1.3.1 页面结构与路由设计
项目当前包含 24+ 页面,覆盖平台五大功能域,页面层级设计遵循"功能域 → 功能页 → 操作面板"的三层信息架构原则:
概览
└── 仪表盘(Dashboard)— 运营指标总览
数据源
└── 数据源管理(Instances)— CRUD + 连接测试
工单管理
├── 数据变更(Tickets/Change)— 变更工单列表 + 审批流
└── 查询数据(Tickets/Query)— 查询工单列表 + SQL 执行
权限管理
├── 权限组(PermissionGroups)— 权限集合管理
├── 角色权限(Roles)— RBAC 角色定义
└── 用户管理(Users)— 用户生命周期管理
系统配置
├── 审计日志(AuditLogs)— 操作记录检索
├── 审批流程(ApprovalFlows)— 审批节点自定义
└── 自动任务(ScheduledTasks)— 定时任务管理
配置平台
└── 系统设置(Settings)— 全局参数配置
路由设计层面,项目已采用 React.lazy 进行代码分割,这是一个重要的性能优化信号——通过将各功能域拆分为独立的异步 Chunk,可显著降低首屏加载时间。建议进一步结合 React Router v6 的 loader 与 action API 实现路由级的数据预取,减少页面切换时的感知延迟。
平台提供 5 种登录页主题(SplitView / CenteredCard / SidePanel / FullImage / MinimalDark),这一设计体现了对部署场景多样性的考虑——不同企业可根据自身品牌调性选择最适合的登录体验。从维护性角度,建议将这 5 种主题抽象为统一的 "LoginLayout" 组件,通过配置对象驱动渲染,减少重复逻辑。
1.3.2 组件化程度分析
项目组件体系可分为三个层级,整体呈现良好的分层架构:
| 层级 | 组件数量 | 代表组件 | 职责说明 |
|---|---|---|---|
| 基础组件 | 50+ | Button, Input, Dialog, Table, Dropdown | shadcn/ui 封装,平台无关,可复用性最高 |
| 业务组件 | 9 | Layout, SqlEditor, SchemaSidebar, EditInstanceDialog | 领域特定,封装业务逻辑与交互模式 |
| 页面组件 | 24+ | Dashboard, Instances, Tickets, Settings | 路由级入口,组合业务组件完成特定功能 |
值得肯定的方面:
- 自定义组件的命名遵循 PascalCase + 语义化约定(如
SchemaSidebar、EditInstanceDialog),可读性良好。 SqlEditor组件作为核心交互组件被独立封装,基于 CodeMirror 6 提供了 SQL 语法高亮、关键词补全等能力,是可复用性最高的业务资产之一。Layout组件的统一设计确保了全站导航结构的一致性。
建议改进的方向:
- 业务组件层当前仅有 9 个,相对于 24+ 页面的规模略显单薄,存在页面间逻辑重复的可能性。建议对高频交互模式(如表单创建/编辑、列表筛选/分页、审批操作确认等)进行进一步抽象。
- 建议建立组件文档体系(如 Storybook),记录各组件的 Props 接口、使用示例与视觉规格,降低团队协作成本。
1.3.3 状态管理方案
基于代码架构分析,项目当前的状态管理呈现 "React 内置状态 + 局部上下文" 的轻量级模式。对于 SQL-Platform 这类以表单操作和列表管理为核心的应用,这种状态管理策略是合理且务实的:
- 服务端状态(工单列表、实例配置、用户数据等):通过 API 调用获取,建议引入 TanStack Query (React Query) 进行封装,可自动处理缓存、去重、重试、乐观更新等复杂逻辑。
- 客户端状态(UI 展开/折叠、编辑器内容、筛选条件):以
useState/useReducer管理,复杂度可控。 - 全局共享状态(用户认证信息、主题偏好、权限节点):当前可能通过 React Context 或 Props Drilling 传递,建议评估是否需要引入轻量级全局状态库(如 Zustand)以避免深层嵌套组件的 Props 传递开销。
1.3.4 性能优化措施
目前已实施的优化措施:
| 优化手段 | 实施状态 | 效果评估 |
|---|---|---|
| React.lazy 代码分割 | 已实施 | 降低首屏 JS 体积,提升 FCP/LCP |
| Vite 7 快速构建 | 已实施 | 开发阶段 HMR < 50ms,构建产出高效 |
| Tailwind CSS 原子样式 | 已实施 | 无运行时开销,产物体积小 |
建议补充的优化方向:
- 虚拟列表:工单列表与审计日志在数据量较大时可能出现渲染性能瓶颈,建议对长列表引入
@tanstack/react-virtual或类似方案。 - 编辑器按需加载:CodeMirror 6 及其语言包体积不可忽视,建议确保编辑器组件仅在 SQL 相关路由中被异步加载。
- Tree Shaking 审查:定期使用
rollup-plugin-visualizer或类似工具分析产物体积,剔除未使用的依赖代码。 - 图片资源优化:如有图表截图、操作指南配图等静态资源,建议采用 WebP/AVIF 格式并配置懒加载。
1.4 现有 UI 设计体系梳理
1.4.1 CSS 变量体系评估
项目已建立一套以 --dg-* 为前缀的 CSS 自定义属性体系,覆盖了 Dark / Light 两种主题模式以及共享的渐变色系统。这一设计决策体现了良好的工程化思维——通过将颜色值抽象为语义化变量,可实现全站一键换肤并降低维护成本。
Dark 主题色板:
| 变量名 | 色值 | 语义角色 | 评估 |
|---|---|---|---|
--dg-bg-primary |
#0d1117 |
页面主背景 | GitHub Dark 同款基底,视觉深邃,适合长时间操作 |
--dg-bg-secondary |
#161b22 |
卡片/面板背景 | 与主背景形成 7% 亮度差,层级感清晰 |
--dg-bg-tertiary |
#21262d |
输入框/悬停态背景 | 足够的对比度确保交互反馈可感知 |
Light 主题色板:
| 变量名 | 色值 | 语义角色 | 评估 |
|---|---|---|---|
--dg-bg-primary |
#ffffff |
页面主背景 | 纯白基底,经典稳妥 |
--dg-bg-secondary |
#f8f9fb |
卡片/面板背景 | 微冷灰调,避免纯白页面的单调感 |
共享渐变系统:
| 变量名 | 色值 | 使用场景 |
|---|---|---|
--dg-gradient-start |
#2563eb(蓝色) |
品牌主色 → 用于 Logo、主按钮、活跃状态 |
--dg-gradient-end |
#9333ea(紫色) |
品牌辅色 → 用于渐变过渡、装饰性元素 |
蓝紫渐变在视觉上传递了科技感与专业性,与数据库管理工具的定位高度契合。该渐变目前被封装为 .dg-gradient-text 与 .dg-gradient-bg 两个工具类,使用便捷。
语义化工具类:
项目还定义了 .dg-card、.dg-input 等高级工具类,将颜色变量、圆角、阴影、边框等属性聚合为语义化的样式单元。这种"变量 + 工具类"的双层体系兼顾了灵活性与开发效率,是可维护性设计的体现。
1.4.2 shadcn/ui 组件库使用情况
项目使用了 50+ shadcn/ui 基础组件,覆盖了表单控件(Input、Select、Checkbox、Radio)、数据展示(Table、Card、Badge、Tooltip)、反馈(Dialog、Toast、Alert、Skeleton)、导航(Tabs、Breadcrumb、Sidebar)等完整类别。
shadcn/ui 的核心优势在于源码级可定制性——组件代码直接存在于项目的 components/ui/ 目录中,团队可以:
- 自由修改组件的默认样式、动画参数、无障碍属性
- 根据品牌规范调整颜色、圆角、间距等设计 Token
- 添加业务特有的 Props 扩展(如在 Button 上增加
isLoading的统一处理)
当前需要关注的点:50+ 组件的规模意味着维护成本不可忽视,建议在升级 shadcn/ui 版本时建立变更日志审查机制,确保上游的 Bug 修复与安全更新能够及时同步。
1.4.3 主题系统设计
平台当前的主题系统具备以下特征:
- 双主题覆盖:Dark / Light 两种模式,通过 CSS 变量切换实现,切换成本极低(仅需切换顶层 class)。
- 渐变色作为品牌标识:蓝紫渐变(
#2563eb→#9333ea)贯穿两种主题,形成了强烈的品牌视觉记忆点。 - CSS 变量驱动:所有主题相关属性均通过
--dg-*变量管理,无硬编码色值散落在组件代码中。
建议完善的方面:
- 当前主题切换可能依赖 CSS 的
prefers-color-scheme媒体查询或手动切换按钮,建议增加主题偏好持久化(localStorage)与系统主题自动跟随的双重机制。 - 建议补充 High Contrast(高对比度) 模式,满足无障碍合规要求(WCAG 2.1 AA 级)。
- 考虑引入 主题 Token 文档,明确定义每种语义色值的使用场景(如
--dg-bg-primary仅用于页面级背景,不可用于卡片),防止变量滥用导致视觉不一致。
1.4.4 当前设计体系的优势与不足
优势:
| 维度 | 表现 |
|---|---|
| 工程化成熟度 | CSS 变量 + 工具类的双层体系,shadcn/ui 的源码级可控性 |
| 品牌一致性 | 蓝紫渐变标识贯穿全站,Dark/Light 双主题覆盖完整 |
| 开发效率 | Tailwind 原子类 + 语义化工具类,编写样式快速直观 |
| 扩展能力 | 新增主题仅需定义一组 CSS 变量,无需修改组件代码 |
不足:
| 维度 | 问题描述 | 改进优先级 |
|---|---|---|
| 设计 Token 粒度 | 当前变量主要集中在颜色维度,缺少间距、字体、阴影、动效的 Token 化定义 | 高 |
| 动效体系缺失 | 页面转场、组件出现/消失、状态切换等交互缺乏统一的动效规范 | 高 |
| 无障碍支持 | 缺少 ARIA 属性系统化检查、键盘导航测试、色彩对比度合规验证 | 中 |
| 响应式设计 | 平台以桌面端操作为主,但缺少不同分辨率下的布局适配策略 | 中 |
| 图标体系 | 未明确图标库选型(如 Lucide、Radix Icons)与使用规范 | 低 |
综上,SQL-Platform 的 UI 设计体系已具备良好的基础骨架,特别是在 CSS 变量体系与组件化封装方面展现了专业水准。后续优化的核心方向应聚焦于设计 Token 的维度扩展(补充间距、动效、阴影 Token)、交互动效体系的建立以及无障碍合规性的系统性提升,这些内容将在后续章节中展开详细方案。