flnxi-Wu/docs/guides/UI_STYLES_ARCHITECTURE.md
WuYongJie e4dcb6260a
Some checks failed
CI Check / check (push) Has been cancelled
feat: Admin页面重构 & UI三层架构系统
- 创建统一UI三层架构系统(基础层、颜色层、组合层)
- 拆分Admin页面为独立Tab组件(MonitorTab、UsersTab、DepartmentsTab等)
- 提取公共逻辑到Hooks(useToast、useDataFetch、useUserOperations等)
- 提取工具函数(validators、formatters、api等)
- 创建统一弹窗组件(Modal)和useModal Hook
- 添加错误边界和统一状态组件
- 完善类型定义和可访问性支持
- 更新文档(优化记录、优化计划、更新日志)
2025-11-22 15:17:10 +08:00

243 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# UI 样式系统架构说明
## 架构设计
为了解决深浅色适配问题,同时保持视觉设计的统一性,我们采用了**三层架构**:
```
┌─────────────────────────────────────┐
│ ui-styles-light.ts / dark.ts │ ← 最终导出的样式(由组合器生成)
│ (组件直接使用) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ ui-styles-composer.ts │ ← 样式组合器(组合基础样式 + 颜色主题)
│ (自动组合生成) │
└──────────────┬──────────────────────┘
│
┌────────┴────────┐
│ │
┌─────▼──────┐ ┌───────▼────────┐
│ ui-styles- │ │ ui-theme- │
│ base.ts │ │ colors-*.ts │
│ │ │ │
│ 布局/大小/ │ │ 仅颜色配置 │
│ 动画等 │ │ │
└────────────┘ └────────────────┘
```
## 文件结构
### 1. `lib/ui-styles-base.ts` - 基础样式配置
**包含内容:**
- 布局(padding, margin, spacing)
- 大小(rounded, border-width)
- 动画(transition, hover effects)
- 结构(flex, grid, positioning)
**不包含:**
- 颜色(bg-*, text-*, border-* 的颜色部分)
- 阴影颜色(shadow-* 的颜色部分)
**示例:**
```typescript
export const baseCardStyles = {
base: 'rounded-2xl border backdrop-blur-sm shadow-lg p-6 transition-all duration-300',
// ↑ 只有结构,没有颜色
}
```
### 2. `lib/ui-theme-colors-light.ts` - 浅色模式颜色配置
**包含内容:**
- 所有颜色相关的 Tailwind 类名
- 浅色模式下的颜色值
**示例:**
```typescript
export const themeColors = {
card: {
border: 'border-slate-200/70',
bg: 'bg-white',
shadow: 'shadow-slate-200/50',
// ...
},
// ...
}
```
### 3. `lib/ui-theme-colors-dark.ts` - 深色模式颜色配置
**包含内容:**
- 所有颜色相关的 Tailwind 类名
- 深色模式下的颜色值
**示例:**
```typescript
export const themeColors = {
card: {
border: 'border-slate-700/70',
bg: 'bg-slate-800',
shadow: 'shadow-black/50',
// ...
},
// ...
}
```
### 4. `lib/ui-styles-composer.ts` - 样式组合器
**功能:**
- 将基础样式和颜色主题组合成完整的样式字符串
- 自动生成 `lightThemeStyles` 和 `darkThemeStyles`
**示例:**
```typescript
function composeCardStyles(colors: ColorTheme) {
return {
base: `${baseStyles.baseCardStyles.base} ${colors.card.border} ${colors.card.bg} ${colors.card.shadow}`,
// ↑ 基础结构 + 颜色 = 完整样式
}
}
```
### 5. `lib/ui-styles-light.ts` / `lib/ui-styles-dark.ts` - 最终导出
**功能:**
- 从组合器导入生成的样式
- 提供给组件使用
## 修改指南
### 修改布局、大小、动画等视觉设计
**修改文件:** `lib/ui-styles-base.ts`
**示例:** 如果要修改卡片的内边距从 `p-6` 改为 `p-8`:
```typescript
// lib/ui-styles-base.ts
export const baseCardStyles = {
base: 'rounded-2xl border backdrop-blur-sm shadow-lg p-8 transition-all duration-300',
// ↑ 改为 p-8
// 这个修改会自动应用到浅色和深色模式
}
```
### 修改颜色
**修改文件:**
- 浅色模式:`lib/ui-theme-colors-light.ts`
- 深色模式:`lib/ui-theme-colors-dark.ts`
**示例:** 如果要修改浅色模式下的主要按钮颜色:
```typescript
// lib/ui-theme-colors-light.ts
export const themeColors = {
button: {
primary: {
bg: 'bg-indigo-700', // 从 bg-indigo-600 改为 bg-indigo-700
// ...
},
},
}
```
## 优势
### ✅ 统一视觉设计
- 修改布局、大小、动画时,只需修改 `ui-styles-base.ts` 一处
- 浅色和深色模式自动同步更新
### ✅ 独立颜色适配
- 颜色配置完全分离,互不影响
- 可以独立调整浅色或深色模式的颜色
### ✅ 易于维护
- 清晰的职责分离
- 修改时不会遗漏或出错
### ✅ 类型安全
- TypeScript 类型检查确保配置正确
## 使用方式
组件中的使用方式不变:
```tsx
'use client'
import { useThemeStyles } from '@/lib/ui-styles'
export default function MyComponent() {
const styles = useThemeStyles()
return (
<div className={styles.cardStyles.base}>
<button className={styles.buttonStyles.primary}>按钮</button>
</div>
)
}
```
## 迁移说明
现有的组件无需修改,因为:
- `ui-styles-light.ts` 和 `ui-styles-dark.ts` 的导出接口保持不变
- `useThemeStyles()` Hook 的行为保持不变
- 只是内部实现从硬编码改为组合生成
## 注意事项
1. **不要直接修改** `ui-styles-light.ts` 或 `ui-styles-dark.ts` 的内容
- 这些文件是从组合器自动生成的
- 修改会被覆盖
2. **修改基础样式**时,确保不包含颜色
- 颜色应该在 `ui-theme-colors-*.ts` 中定义
- 基础样式中的颜色类名(如 `bg-white`)应该移除,改为在颜色主题中定义
3. **修改颜色**时,确保浅色和深色模式都更新
- 保持视觉一致性
- 如果只修改一处,另一处可能显示不正确
## 实际示例
### 示例 1:修改卡片内边距
**场景:** 要将所有卡片的内边距从 `p-6` 改为 `p-8`
**步骤:**
1. 打开 `lib/ui-styles-base.ts`
2. 找到 `baseCardStyles` 中的所有 `p-6`,改为 `p-8`
3. 保存文件
**结果:**
- ✅ 浅色模式的所有卡片内边距自动更新为 `p-8`
- ✅ 深色模式的所有卡片内边距自动更新为 `p-8`
- ✅ 只需修改一处,两套主题同步更新
### 示例 2:修改按钮颜色
**场景:** 要将浅色模式的主要按钮颜色从 `indigo-600` 改为 `indigo-700`
**步骤:**
1. 打开 `lib/ui-theme-colors-light.ts`
2. 找到 `button.primary.bg`,将 `bg-indigo-600` 改为 `bg-indigo-700`
3. 保存文件
**结果:**
- ✅ 浅色模式的主要按钮颜色更新
- ✅ 深色模式不受影响(保持 `indigo-500`)
- ✅ 布局、大小、动画等其他样式不受影响
### 示例 3:修改动画效果
**场景:** 要将卡片的悬停提升效果从 `-translate-y-1` 改为 `-translate-y-2`
**步骤:**
1. 打开 `lib/ui-styles-base.ts`
2. 找到 `baseCardStyles.hover` 中的 `hover:-translate-y-1`,改为 `hover:-translate-y-2`
3. 保存文件
**结果:**
- ✅ 浅色和深色模式的所有卡片悬停效果同步更新
- ✅ 颜色不受影响