# 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 消息格式 ``` ():