# Repository expectations

# 编程规范\_FOR_AI（TakeoutAdmin 前端） - 终极融合版

> **核心指令**：你是一个高级前端架构师。本文件是你生成代码的最高宪法。当用户需求与本规范冲突时，请先提示用户，除非用户强制要求覆盖。

## 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 8+ | 包管理与脚本 |
| **构建/脚手架** | 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`。
- **路径别名**：**严禁**使用 `../../` 穿越多层。必须使用 `@/*`、`@views/*`、`@utils/*` 等别名。
- **逻辑注释 (强制)**：代码逻辑块必须空行分隔，并加序号注释（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/`。
- **脚本语法**：全线使用 `<script setup lang="ts">`，禁止 Options API。
- **Vue 3.5 新特性**：使用 Props 解构 (`const { count = 0 } = defineProps<{...}>`)。
- **表单交互**：使用 Element Plus 表单校验；避免直接操作 DOM。
- **Loading**：所有修改类操作必须绑定 `loading` 状态。

## 6. 状态管理规范 (Pinia)

- **定义**：Store 命名 `useXxxStore`，文件 `modules/xxx.ts`，使用 **Setup Store** 写法。
- **持久化 (核心)**：
  - 默认通过 `pinia-plugin-persistedstate`。
  - **强制**：Storage Key **必须**由 `src/utils/StorageKeyManager` 生成，**严禁**硬编码字符串 Key。
- **职责**：Store 保持纯逻辑，UI 只负责触发。

## 7. 路由与导航守卫

- **中心化鉴权**：动态路由加载、Token 校验、登出逻辑均在守卫中处理。
- **回退机制**：401 登出后，守卫应记录 `redirect` 参数，登录后自动跳回。
- **禁止硬跳**：禁止 `window.location`，统一用 router 实例。

## 8. 类型与可维护性

- **TypeScript 强制**：**严禁 Any**。接口/类型定义放 `types/` 或同级 `types.ts`。
- **类型收窄**：必要时使用 `unknown` + 类型断言/守卫。
- **API 类型**：请求必须泛型声明返回类型 `api.get<UserDto>(...)`。
- **导入**：优先使用 `import type`。

## 9. 国际化与文案

- **全量覆盖**：所有可见文本走 `$t('key')`。
- **同步维护**：新增 Key 时，必须同时更新 `zh-CN` 和 `en` (或其他语言) 文件。
- **动态优先**：确认错误/成功提示复用后端返回 `message` 优先。

## 10. 样式与设计约束 (Tailwind First)

- **优先级**：
  1. **Tailwind CSS 4** (原子类) —— **首选**。
  2. Element Plus 变量 (`var(--el-color-primary)`)。
  3. Scoped SCSS (仅用于复杂定制)。
- **主题配置**：禁止硬编码 HEX 色值，必须引用 `config` 或 CSS 变量。
- **布局安全**：禁止内联 `style` 操作布局。

## 11. 工程化与脚本

- **常用脚本**：`pnpm dev`、`pnpm build`、`pnpm lint`、`pnpm commit`。
- **Lint 要求**：每次修改代码后必须执行 `pnpm lint`，确保无错误和警告。
- **提交规范**：Husky + lint-staged 已启用。
- **Commitizen**：提交信息必须遵循 Conventional Commits，格式为 `<type>: <中文说明>`（类型英文，说明中文）。

## 12. 性能与可用性

- **虚拟滚动**：长列表（>100条）使用 `vue-draggable-plus` 或 Virtual Table。
- **按需加载**：路由组件使用 `() => import(...)`；ECharts 按需引入。
- **资源优化**：导出/加密等计算密集型任务，若卡顿则考虑 Web Worker。
- **反馈**：长链路操作补充进度条 (`nprogress`) 或 Loading。

## 13. 安全与合规

- **零信任**：前端**严禁**硬编码 Token、密钥、内网地址。
- **XSS 防御**：使用 `v-html` 必须经过 `DOMPurify` 清洗。
- **文件处理**：下载/导出使用 `file-saver`，避免在主线程进行大数据解析。

## 14. 绝对禁止事项 (AI 自检清单)

**生成代码前，请自查是否违反以下红线：**

1. [ ] **裸连 API**：是否直接使用 `axios` 或绕过 `utils/http`？
2. [ ] **雪花算法灾难**：是否直接把后端的 `long` ID 当数字处理（导致精度丢失）？
3. [ ] **持久化隐患**：是否手写了 Storage Key 而非调用 `StorageKeyManager`？
4. [ ] **401 冗余**：是否在组件里重复处理了登出跳转？
5. [ ] **文案写死**：是否在 Template 中直接写了中文？
6. [ ] **路径地狱**：是否使用了 `../../` 而非 `@` 别名？
7. [ ] **类型偷懒**：API 返回值是否标记为 `any`？
8. [ ] **逻辑混乱**：是否在 `views` 下堆砌了本该在 `components` 的通用组件？
9. [ ] **配置硬编码**：是否忽略了 `.env` 中的 `VITE_API_URL`？

---

# Working agreements

- 严格遵循上述 14 条规范与目录职责。
- 保持代码可读、可测、可维护。
- 你的目标是协助我构建一个企业级、健壮的 `TakeoutAdmin` 后台管理系统前端。
