# Finyx AI 前端开发规范与约束
## 📋 文档说明
本文档定义了 Finyx AI 前端项目的开发规范、约束和最佳实践,确保代码质量、一致性和可维护性。所有开发人员必须遵循本规范。
**最后更新**: 2025-01-XX
**适用版本**: v1.0.0+
---
## 🎨 设计系统规范
### 1. 色彩系统
#### 1.1 主色调
- **主色 (Primary)**: `#3067EF` - 用于主要操作按钮、链接、激活状态
- **背景色 (Background)**: `#F4F8FF` - 页面主背景色
- **白色 (White)**: `#ffffff` - 卡片、侧边栏背景
#### 1.2 文本颜色
- **主文本**: `#1f2329` - 主要文本内容
- **次文本**: `#646a73` - 次要文本、说明文字
- **禁用文本**: `#bbbfc4` - 禁用状态的文本
#### 1.3 边框颜色
- **默认边框**: `#dee0e3` - 卡片、输入框边框
- **激活边框**: `#3067EF` - 激活状态的边框
#### 1.4 状态颜色
- **悬停背景**: `rgba(48, 103, 239, 0.06)` - 鼠标悬停时的背景色
- **激活背景**: `#ECF2FF` - 激活状态的背景色
#### 1.5 使用规范
```typescript
// ✅ 正确:使用 Tailwind 配置的颜色类
按钮
内容
// ❌ 错误:直接使用颜色值
按钮
按钮
```
### 2. 字体系统
#### 2.1 字体族
- **主字体**: `PingFang SC`, `AlibabaPuHuiTi`, `sans-serif`
- **等宽字体**: 用于代码显示
#### 2.2 字体大小
- **基础字号**: `14px` (Tailwind: `text-base`)
- **标题层级**:
- H1: `24px` (`text-2xl`)
- H2: `20px` (`text-xl`)
- H3: `18px` (`text-lg`)
- H4: `16px` (`text-base`)
#### 2.3 字重
- **常规**: `400` (`font-normal`)
- **中等**: `500` (`font-medium`)
- **加粗**: `600` (`font-bold`)
### 3. 间距系统
#### 3.1 基础间距单位
- **基础单位**: `8px` (对应 Tailwind 的 `1` 单位)
- **常用间距**:
- `4px` (`p-1`, `m-1`)
- `8px` (`p-2`, `m-2`)
- `12px` (`p-3`, `m-3`)
- `16px` (`p-4`, `m-4`)
- `24px` (`p-6`, `m-6`)
#### 3.2 页面内边距
- **页面容器**: `24px` (`p-6`)
- **卡片内边距**: `16px` (`p-4`) 或 `24px` (`p-6`)
### 4. 阴影系统
#### 4.1 标准阴影
- **卡片阴影**: `0px 2px 4px 0px rgba(31, 35, 41, 0.12)` (`shadow-app`)
- **悬停阴影**: 可适当增强
---
## 🏗️ 技术栈约束
### 1. 核心框架
- **前端框架**: Vue 3.4.0+ (Composition API)
- **开发语言**: TypeScript 5.2.2+
- **构建工具**: Vite 5.0.8+
- **样式方案**: Tailwind CSS 3.3.6+
### 2. 状态管理
- **状态管理库**: Pinia 2.1.0+
- **路由管理**: Vue Router 4.2.0+
### 3. UI 组件库
- **图标库**: Lucide Vue Next 0.344.0+
- **图表库**: Recharts 2.10.3+ (如需要)
### 4. 禁止使用的技术
- ❌ **React**: 本项目已迁移至 Vue,禁止使用 React
- ❌ **Element Plus**: 旧系统使用,新功能应使用 Tailwind CSS 构建
- ❌ **SCSS/SASS**: 统一使用 Tailwind CSS,禁止使用 SCSS
- ❌ **内联样式**: 除非动态样式,否则使用 Tailwind 类
---
## 📁 项目结构规范
### 1. 目录结构
```
src/
├── components/ # 通用可复用组件
│ ├── common/ # 基础通用组件
│ └── business/ # 业务相关组件
├── layouts/ # 布局组件
├── pages/ # 页面组件
│ └── engagement/ # 业务模块子页面
├── stores/ # Pinia 状态管理
├── types/ # TypeScript 类型定义
├── utils/ # 工具函数
├── api/ # API 接口定义
├── assets/ # 静态资源
└── styles/ # 全局样式(如需要)
```
### 2. 文件命名规范
#### 2.1 组件文件
- **Vue 组件**: 使用 PascalCase,如 `SidebarItem.vue`
- **TypeScript 文件**: 使用 camelCase,如 `mockData.ts`
- **工具函数**: 使用 camelCase,如 `formatDate.ts`
#### 2.2 组件命名
- **单文件组件**: 使用 PascalCase
- **组件名**: 与文件名保持一致
```vue
```
### 3. 导入顺序规范
```typescript
// 1. Vue 核心
import { ref, computed, onMounted } from 'vue'
// 2. 第三方库
import { useRouter } from 'vue-router'
import { useToast } from '@/components/Toast'
// 3. 项目内部组件
import { SidebarItem } from '@/components/SidebarItem'
// 4. 类型定义
import type { Project, Step } from '@/types'
// 5. 工具函数
import { formatDate } from '@/utils/date'
// 6. 样式(如需要)
import './styles.css'
```
---
## 💻 代码规范
### 1. TypeScript 规范
#### 1.1 类型定义
```typescript
// ✅ 正确:使用 interface 定义对象类型
interface Project {
id: string
name: string
progress: number
}
// ✅ 正确:使用 type 定义联合类型
type Step = 'setup' | 'inventory' | 'context' | 'value' | 'delivery'
// ❌ 错误:使用 any
function processData(data: any) { }
```
#### 1.2 Props 定义
```vue
```
#### 1.3 响应式数据
```vue
```
### 2. Vue 组件规范
#### 2.1 Composition API
```vue
```
#### 2.2 组件结构
```vue
```
#### 2.3 事件处理
```vue
```
### 3. 样式规范
#### 3.1 Tailwind CSS 使用
```vue
标题
内容
```
#### 3.2 响应式设计
```vue
```
#### 3.3 自定义样式
```vue
```
### 4. 组件设计规范
#### 4.1 组件职责
- **单一职责**: 每个组件只负责一个功能
- **可复用性**: 通用组件应设计为可复用
- **可组合性**: 复杂组件应由简单组件组合而成
#### 4.2 Props 设计
```vue
```
#### 4.3 事件定义
```vue
```
---
## 🎯 与旧系统融合规范
### 1. 色彩一致性
- **必须使用**: 旧系统的色彩变量(已在 `tailwind.config.js` 中定义)
- **禁止**: 使用新的颜色值,除非经过设计团队批准
### 2. 组件风格
- **侧边栏**: 白色背景,浅色激活状态
- **卡片**: 白色背景,浅色边框,标准阴影
- **按钮**: 主色背景,圆角设计
### 3. 技术栈兼容
- **新功能**: 使用 Vue 3 + TypeScript + Tailwind CSS
- **旧功能**: 保持 Vue 3 + Element Plus + SCSS
- **融合策略**: 新功能作为独立模块,通过路由集成
### 4. 样式隔离
- **新组件**: 使用 Tailwind CSS,避免全局样式污染
- **旧组件**: 保持现有样式,不强制迁移
- **冲突处理**: 使用 CSS Modules 或作用域样式
---
## 🚫 禁止事项
### 1. 代码层面
- ❌ 禁止使用 `any` 类型(除非特殊情况)
- ❌ 禁止使用 `@ts-ignore`(除非有充分理由)
- ❌ 禁止使用内联样式(除非动态样式)
- ❌ 禁止直接修改 DOM(使用 Vue 响应式系统)
### 2. 样式层面
- ❌ 禁止使用 SCSS/SASS(统一使用 Tailwind)
- ❌ 禁止使用硬编码颜色值(使用 Tailwind 配置的颜色)
- ❌ 禁止使用 `!important`(除非绝对必要)
### 3. 依赖层面
- ❌ 禁止引入 React 相关依赖
- ❌ 禁止引入 Element Plus(新功能)
- ❌ 禁止引入未经过审查的第三方库
---
## ✅ 最佳实践
### 1. 性能优化
- 使用 `computed` 而非 `watch`(如可能)
- 使用 `v-show` 而非 `v-if`(频繁切换)
- 大列表使用虚拟滚动
- 图片使用懒加载
### 2. 可访问性
- 使用语义化 HTML 标签
- 为交互元素添加 `aria-label`
- 确保键盘导航可用
- 确保颜色对比度符合 WCAG 标准
### 3. 错误处理
- 使用 try-catch 处理异步操作
- 使用 Toast 显示错误信息
- 提供友好的错误提示
### 4. 代码注释
```typescript
// ✅ 正确:清晰的注释
/**
* 计算项目进度百分比
* @param completed - 已完成步骤数
* @param total - 总步骤数
* @returns 进度百分比 (0-100)
*/
const calculateProgress = (completed: number, total: number): number => {
return Math.round((completed / total) * 100)
}
```
---
## 📝 提交规范
### 1. Commit 消息格式
```
():