--- name: frontend-dev description: 前端开发规范,包含 Vue 3 编码规范、UI 风格约束、TypeScript 规范等 version: v3.0 paths: - "**/*.vue" - "**/*.tsx" - "**/*.jsx" - "**/*.ts" - "**/*.js" - "**/*.css" - "**/*.scss" - "**/*.less" - "**/package.json" - "**/vite.config.*" --- # 前端开发规范 > 参考来源: Vue 官方风格指南、Element Plus 最佳实践 --- ## UI 风格约束 ### 严格禁止(常见 AI 风格) - ❌ 蓝紫色霓虹渐变、发光描边、玻璃拟态 - ❌ 大面积渐变、过多装饰性几何图形 - ❌ 赛博风、暗黑科技风、AI 风格 UI - ❌ UI 文案中使用 emoji ### 后台系统(默认风格) | 要素 | 要求 | |------|------| | 主题 | 使用组件库默认主题 | | 配色 | 黑白灰为主 + 1 个主色点缀 | | 动效 | 克制,仅保留必要交互反馈 | --- ## 技术栈 | 层级 | Vue(首选) | React(备选) | |------|------------|--------------| | 框架 | Vue 3 + TypeScript | React 18 + TypeScript | | 构建 | Vite | Vite | | 路由 | Vue Router 4 | React Router 6 | | 状态 | Pinia | Zustand | | UI 库 | Element Plus | Ant Design | --- ## Vue 编码规范 ### 组件基础 ```vue ``` ### 命名约定 | 类型 | 约定 | 示例 | |------|------|------| | 组件文件 | PascalCase.vue | `UserCard.vue` | | Composables | useXxx.ts | `useAuth.ts` | | Store | useXxxStore.ts | `useUserStore.ts` | --- ## 状态管理(Pinia) ```typescript // stores/user.ts export const useUserStore = defineStore('user', () => { const user = ref(null) const token = ref('') const isLoggedIn = computed(() => !!token.value) async function login(username: string, password: string) { const res = await api.login(username, password) token.value = res.token user.value = res.user } return { user, token, isLoggedIn, login } }) ``` --- ## 交互状态处理 **必须处理的状态**: loading、empty、error、disabled、submitting ```vue ``` --- ## TypeScript 规范 ```typescript // types/user.ts export interface User { id: number username: string role: 'admin' | 'user' } export interface ApiResponse { code: number message: string data: T } ``` --- ## 性能优化 | 场景 | 方案 | |------|------| | 大列表 | 虚拟滚动 | | 路由 | 懒加载 `() => import()` | | 计算 | 使用 `computed` 缓存 | | 大数据 | 使用 `shallowRef` | ```typescript // 路由懒加载 const routes = [ { path: '/dashboard', component: () => import('@/views/Dashboard.vue') } ] // 请求防抖 import { useDebounceFn } from '@vueuse/core' const debouncedSearch = useDebounceFn((keyword) => api.search(keyword), 300) ``` --- ## 目录结构 ``` src/ ├── assets/ │ └── styles/ # 全局/共享样式 ├── api/ # API 请求 ├── components/ # 通用组件 ├── composables/ # 组合式函数 ├── router/ # 路由配置 ├── stores/ # Pinia stores ├── types/ # TypeScript 类型 ├── utils/ # 工具函数 ├── views/ # 页面组件 ├── App.vue └── main.ts ``` --- ## 样式管理规范 | 规则 | 说明 | |------|------| | ❌ 禁止在 `.vue` 中写大段样式 | `