# AI 开发入口 [!IMPORTANT] - **本文档要求**:本文档为项目级别规范和重要导航,必须严格参考 - **本文档要求**:本文档只允许在已有的结构上 CRUD,不允许增加其他标题区 - **本文档要求**:`.ai-specs` 目录下新增/删除任何文档的时候都应该在本文档中修改 `## 项目文档` - **文档要求**:规范型文档是给 AI 的顶层入口文档,不是“解释得更全”就更好,而是要更短、更硬、更可判定 - **代码优化**:先复用再新增,允许抽公共逻辑,但公共逻辑必须保证边界仍清晰 - **代码优化**:优化代码时必须同时考虑冗余、孤岛代码、代码清晰度、复杂度、边界条件和兼容性,不能只追求功能跑通;不要修改 UI/UX 视觉效果,除非明确要求 - **代码默认遵循**:业务流程需要遵循 `主流做法` `工业级正规` - **代码默认遵循**:强制工作流:按 `## 项目文档` 定位需要的文档 → 读取匹配文档 → 进入源码 ## 工具使用规则 - **搜索范围限制**:Grep/Glob 严禁全盘搜索,绝对禁止扫描 `.gitignore` 忽略的目录,以避免性能卡顿 - **读写**:所有文件读取/写入统一使用 UTF-8(建议无 BOM) - **读写**:PowerShell/脚本读取项目文件必须显式指定 `-Encoding utf8` - **画图**:优先使用 `mermaid flowchart` - **对话/文档编写**:必须是中文为主体语言,技术术语保留英文原文 ## 项目架构 - **技术栈**:本项目为 `Vue 3 + Vite` 前端工程,基于 `gin-vue-admin` web 体系;路由使用 `Vue Router 4`,状态管理使用 `Pinia`,HTTP 请求使用 `Axios`,UI 组件库使用 `Element Plus`,构建与环境变量由 `Vite` 管理,样式体系包含 `SCSS` 与 `UnoCSS` - **代码链路**:本项目采用 `Router / Permission → View → Components / Hooks → API → Request → Backend` 主链路 - `Pinia` 作为跨页面共享状态层,贯穿 `Permission`、`View`、`API`;`Plugin` 作为插件化业务子目录,内部可有自己的 `api / view / form`,但仍受主应用工程规则约束 ├── web ├── public (静态公开资源) ├── src │ ├── api (主应用接口层) │ ├── assets (构建期静态资源) │ ├── components (跨页面复用组件) │ ├── core (项目基础配置与初始化) │ ├── directive (全局指令) │ ├── hooks (复用组合逻辑) │ ├── pinia (全局状态) │ │ └── modules (状态模块) │ ├── plugin (插件化业务目录) │ ├── router (静态路由入口) │ ├── style (全局样式与覆盖) │ ├── utils (通用工具与请求基座) │ ├── view (页面级目录) │ ├── App.vue (根组件) │ ├── main.js (应用入口) │ └── permission.js (全局路由守卫) ├── .env.development (开发环境变量) ├── .env.production (生产环境变量) ├── package.json (脚本与依赖) └── vite.config.js (Vite 配置) | 层级 | 职责 | 命名规范 | |:---|:---|:---| | Router / Permission | 定义静态路由、接管全局守卫、处理登录态、动态路由注册和页面进入规则;禁止承载页面展示逻辑 | 路由入口固定 `src/router/index.js`;守卫入口固定 `src/permission.js` | | View | 承载页面编排、页面生命周期、页面局部状态和页面级接口调用;禁止把复用逻辑长期堆在页面中 | 页面目录固定 `src/view/`;页面入口优先 `index.vue` | | Components | 承载跨页面复用 UI 组件和局部交互能力;禁止直接绑定具体页面路由语义 | 目录固定 `src/components/`;组件入口优先 `index.vue` 或具名 `.vue` | | Hooks | 承载跨页面复用行为逻辑;禁止承载模板和页面路由配置 | 目录固定 `src/hooks`;新 hooks 优先使用 `useXxx.js` | | API | 承载接口函数和参数组织;禁止重复实现 token、401、loading 等全局请求逻辑 | 主应用目录固定 `src/api/.js`;插件接口固定 `src/plugin//api/.js` | | Request | 承载 Axios 实例、token 注入、全局 loading、统一错误处理和 401 跳转 | 请求基座固定 `src/utils/request.js` | | Pinia | 承载跨页面共享状态;禁止把单页面临时状态全部塞进全局 store | 模块目录固定 `src/pinia/modules/.js`;store 导出使用 `useXxxStore` | | Style | 承载全局样式、重置样式和 Element Plus 覆盖;禁止把页面局部样式长期上提到全局 | 样式目录固定 `src/style`;Element Plus 覆盖优先放在 `src/style/element*` | | Plugin | 承载插件化业务代码,优先在插件目录内部自洽;禁止复制主应用基础设施 | 目录固定 `src/plugin/`;常见子目录为 `api`、`view`、`form` | - 新增页面时,主落点一律放在 `src/view/`。 - 新增接口时,主应用放在 `src/api`,插件接口放在 `src/plugin//api`。 - 新增跨页面复用组件时,统一放在 `src/components`。 - 新增跨页面共享行为逻辑时,统一放在 `src/hooks`。 - 新增全局共享状态时,统一放在 `src/pinia/modules`。 - 新增插件功能时,优先在 `src/plugin/` 目录内闭环实现。 ### 架构关系 - 关系总线:`sys-specs / coding-specs → Router / Permission → View → Components / Hooks / API → Request`,其中 `Pinia` 贯穿登录态、动态路由和跨页面共享状态;`Plugin` 沿用主应用同一套请求、路由、状态和样式基础设施 ```mermaid flowchart LR SPEC["sys-specs / coding-specs"] --> Router Router["Router / Permission"] --> View View --> Components["Components / Hooks"] View --> API API --> Request["utils/request.js"] Pinia --> Router Pinia --> View Pinia --> API Plugin["plugin/*"] --> View Plugin --> API Request --> Backend["Backend"] ``` - 改 `view`:必须同步检查对应 `api`、`pinia`、路由入口、页面标题、keep-alive、权限显示是否仍一致 - 改 `components`:必须同步检查调用页面、props、events、slots 和样式兼容性 - 改 `hooks`:必须同步检查调用方是否仍满足生命周期和响应式前提 - 改 `api`:必须同步检查 `src/utils/request.js` 契约、调用页面、store、错误提示和返回值结构 - 改 `src/utils/request.js`:必须同步检查 token 注入、loading、401 跳转、上传下载和插件接口兼容性 - 改 `pinia`:必须同步检查页面初始化、动态路由依赖、缓存和持久化字段 - 改 `router` / `permission.js`:必须同步检查白名单、动态路由注入、默认首页、菜单跳转和未登录跳转 - 改 `style`:必须同步检查全局覆盖范围,避免误伤登录页、主布局页和插件页 - 改 `plugin/*`:必须同步检查插件内部 `api / view / form` 是否自洽,以及是否错误侵入主应用公共层 ## 项目文档 - **根目录**:`.ai-specs` - **要求**:开始写代码前,根据任务类型先定位目录,再读取对应文档;有对应文档必须先读 - **兜底**:索引表无匹配时,按本文件通用规则和现有同层代码风格实现 ### coding-specs 存放对前端功能代码的说明/限制/要求 | 路径 | 用途 | 说明 | |:---|:---|:---| | `.ai-specs\coding-specs\page-view-component-split.md` | 规定 `view / components / hooks` 的边界与默认落点 | 涉及新增页面、抽公共组件、抽 hooks 时必读 | | `.ai-specs\coding-specs\api-request-flow.md` | 规定 `api` 与 `request.js` 的分层、错误处理和请求链路 | 涉及新增接口、修改请求封装、上传下载、统一错误处理时必读 | | `.ai-specs\coding-specs\router-permission-route.md` | 规定静态路由、动态路由、白名单和权限链路 | 涉及新增页面路由、登录跳转、菜单进入、默认首页时必读 | | `.ai-specs\coding-specs\pinia-store-boundary.md` | 规定共享状态和页面状态的分层边界 | 涉及新增 store、共享状态、状态持久化时必读 | | `.ai-specs\coding-specs\plugin-module-structure.md` | 规定 `plugin/*` 的目录结构和与主应用公共层的关系 | 涉及新增插件、修改插件目录、决定代码是否上提时必读 | | `.ai-specs\coding-specs\style-asset-spec.md` | 规定全局样式、静态资源和主题覆盖的修改边界 | 涉及全局样式、Element Plus 覆盖、资源路径时必读 | ### sys-specs 存放前端系统级文档 | 路径 | 用途 | 说明 | |:---|:---|:---| | `.ai-specs\sys-specs\frontend-directory-spec.md` | 规定前端工程目录总体结构和新增代码的默认落点 | 涉及新增目录、移动文件、决定代码放置位置时必读 | | `.ai-specs\sys-specs\naming-import-path-spec.md` | 规定命名、导入路径、别名和导出风格 | 涉及新增文件、目录命名、导入路径调整时必读 | | `.ai-specs\sys-specs\env-build-spec.md` | 规定环境变量、Vite 构建配置和 scripts 修改边界 | 涉及 `.env.*`、`vite.config.js`、`package.json` scripts 时必读 | ## 可复用代码/组件 | 中文 | 代码文件名 | 说明 | |:---|:---|:---| | 请求基座 | `src/utils/request.js` | 统一 Axios 实例、token、loading、错误处理、401 跳转 | | 路由守卫 | `src/permission.js` | 统一登录态校验、动态路由注册、页面进入和跳转规则 | | 路由状态 | `src/pinia/modules/router.js` | 统一异步路由、keep-alive 和默认首页相关状态 | | 用户状态 | `src/pinia/modules/user.js` | 统一 token、用户信息和登录态清理 | | 事件总线 | `src/utils/bus.js` | 提供跨组件的全局 mitt 事件能力 |