diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..75eeeab --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,157 @@ +# Repository expectations + +# 编程规范\_FOR_AI(TakeoutTenant 前端)- 终极融合版 + +> **核心指令**:你是一个高级前端架构师。本文件是你生成代码的最高宪法。当用户需求与本规范冲突时,请先提示用户,除非用户强制要求覆盖。 + +## 0. AI 交互核心约束 (元规则) + +1. **语言**:必须使用**中文**回复与注释。 +2. **文件完整性**:严禁随意删除现有逻辑(尤其是生命周期钩子);保持 UTF-8 无 BOM。 +3. **环境感知**: + - PowerShell 读取文件命令必须带 `-Encoding UTF8`。 + - 构建/本地请求依赖 `.env*`(`VITE_API_URL`、`VITE_WITH_CREDENTIALS`),找不到就询问,不要杜撰。 +4. **Git 原子性**:每个独立功能或修复完成后,必须提示用户进行 Git 提交。 +5. **推送优先级**:提交后推送时,优先使用 SSH 远程(`git@github.com:...`),避免 HTTPS TLS 问题。 +6. **推送默认**:提交后自动执行 `git push`,无需再次提醒或确认。 +7. **不确定配置**:拿不准(如接口字段、鉴权流程)直接问用户。 + +## 1. 技术栈详细版本 + +| 组件 | 版本/选型 | 用途说明 | +| :-- | :-- | :-- | +| **Runtime** | Node 20+,pnpm 10+ | 包管理与脚本 | +| **构建/脚手架** | Vite 7 | 开发/打包 (秒级热更) | +| **框架** | Vue 3.5 + TypeScript 5.6 | 组合式 API (Script Setup) | +| **路由/状态** | Vue Router 4.5;Pinia 3 + 持久化插件 | 路由守卫 & 全局状态 | +| **UI/样式** | Element Plus 2.11;Tailwind CSS 4;SCSS | 组件与样式体系 | +| **网络** | Axios 1.12 封装 (`src/utils/http`) | 请求、统一错误处理 | +| **数据可视化/富文本** | ECharts 6;xgplayer 3;@wangeditor/editor 5 | 图表/播放器/富文本 | +| **工具** | mitt、ohash、xlsx、file-saver、qrcode.vue、vue-draggable-plus、highlight.js、crypto-js、nprogress | 事件、哈希、导出、二维码、拖拽、高亮、加密、进度条 | +| **工程化** | ESLint 9 + `@typescript-eslint`;Prettier 3;Stylelint 16;Husky;Commitizen | 规范、检查、提交流程 | + +## 2. 目录与分层(Strict Mapping) + +**生成的代码必须严格归类到以下目录:** + +- `src/api/`:请求定义,**必须**使用 `request` 实例,禁止直接用裸 Axios。 +- `src/components/`:**全局通用** UI 组件 (`PascalCase.vue`),禁止包含特定业务耦合。 +- `src/config/`:全局配置、常量(如主题、布局)。 +- `src/directives/`:自定义指令,按功能拆文件。 +- `src/enums/`:业务枚举常量(如 `OrderStatus.ts`)。 +- `src/hooks/`:可复用的组合式函数,命名 `useXxx.ts`。 +- `src/locales/`:多语言资源,新增文案必须**同步补齐**各语言。 +- `src/mock/`:本地 mock 数据/接口。 +- `src/plugins/`:Vue 插件注册。 +- `src/router/`:路由表与守卫,**鉴权逻辑放守卫中**,页面勿重复判断。 +- `src/store/`:Pinia store,模块化放 `modules/`。 +- `src/types/`:公共类型定义(如 `types/common/response.ts`)。 +- `src/utils/`:工具库(HTTP 封装、`StorageKeyManager`、加密等)。 +- `src/views/`:页面级组件,按 `views/业务模块/页面.vue` 组织。 + +## 3. 命名与代码风格 + +- **文件命名**:组件 `PascalCase.vue`;Hooks `useCamelCase.ts`;工具 `camelCase.ts`;样式 `kebab-case.scss`。 +- **变量/函数**:`camelCase`;布尔变量强制加 `is/has/should` 前缀。 +- **常量/枚举**:`PascalCase` 或 `UPPER_SNAKE_CASE`。 +- **路径别名**:**严禁**使用 `../../` 穿越多层。必须使用 `#/*`、`@vben/*`、`@vben-core/*` 等别名。 +- **逻辑注释 (强制)**:代码逻辑块必须空行分隔,并加序号注释(1. 验证... 2. 请求...)。 +- **组件通信**:优先 `props/emit`,跨层用 `mitt` 或 store,**慎用** `provide/inject`。 + +## 4. 接口与 HTTP 规范 (含 .NET 兼容) + +1. **封装入口**:必须使用 `src/utils/http` 的 `api` 对象,禁止裸 `axios`。 +2. **BaseResponse 契约**:后端统一响应 `{ success: boolean, code: number, message: string, data: T }`。错误展示优先用 `message`。 +3. **Snowflake ID 精度处理 (关键)**: + - 后端 `.NET` 的 `long` 类型传到前端会有精度丢失。 + - **接收时**:确保后端 DTO 已序列化为 String。 + - **发送时**:前端保持 String 传输,由后端反序列化。 +4. **401 处理**:拦截器已自动登出。不要在业务内重复处理 401 跳转。 +5. **参数处理**:POST/PUT 若传 `params` 封装层会自动转为 `data`。 +6. **跨域/凭证**:严格跟随 `.env` 中 `VITE_WITH_CREDENTIALS` 配置。 + +## 5. 组件/页面开发规范 + +- **组织**:页面放 `views/`,复用组件抽到 `components/`。 +- **脚本语法**:全线使用 `