恋爱键盘后台初始化
This commit is contained in:
125
CLAUDE.md
Normal file
125
CLAUDE.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## 项目概述
|
||||
|
||||
基于 [yudao-ui-admin-vue3](https://gitee.com/yudaocode/yudao-ui-admin-vue3) 的中后台管理前端项目(名为 keyLove),采用 Vue 3 + Vite + Element Plus + TypeScript 技术栈。前端对接芋道后端 Java 服务(Spring Boot / Spring Cloud),通过 RESTful API (`/admin-api`) 通信。
|
||||
|
||||
## 常用命令
|
||||
|
||||
```bash
|
||||
# 安装依赖(强制使用 pnpm)
|
||||
pnpm install
|
||||
|
||||
# 本地开发(使用 .env.local 配置)
|
||||
pnpm dev
|
||||
|
||||
# 连接远程开发环境后端
|
||||
pnpm dev-server
|
||||
|
||||
# TypeScript 类型检查
|
||||
pnpm ts:check
|
||||
|
||||
# 构建
|
||||
pnpm build:local # 本地构建
|
||||
pnpm build:dev # 开发环境
|
||||
pnpm build:prod # 生产环境
|
||||
|
||||
# 代码规范
|
||||
pnpm lint:eslint # ESLint 检查并修复
|
||||
pnpm lint:format # Prettier 格式化
|
||||
pnpm lint:style # Stylelint 样式检查
|
||||
```
|
||||
|
||||
要求:Node.js >= 16.18.0,pnpm >= 8.6.0。
|
||||
|
||||
## 架构概览
|
||||
|
||||
### 入口与初始化
|
||||
|
||||
`src/main.ts` 按序初始化:i18n → Pinia Store → 全局组件 → Element Plus → FormCreate → Router → 指令(权限、焦点)→ WangEditor 插件 → 挂载。
|
||||
|
||||
### 路由与权限系统
|
||||
|
||||
- **静态路由**:`src/router/modules/remaining.ts` 定义登录、重定向、404 等固定页面
|
||||
- **动态路由**:后端返回菜单数据,`src/store/modules/permission.ts` 中的 `generateRoutes()` 将其转换为路由并通过 `router.addRoute()` 动态注册
|
||||
- **路由守卫**:`src/permission.ts` 实现 beforeEach 守卫,处理 token 校验、用户信息加载、动态路由注入
|
||||
- **组件动态加载**:`src/utils/routerHelper.ts` 使用 `import.meta.glob('../views/**/*.{vue,tsx}')` 按路径自动匹配视图组件
|
||||
- **权限指令**:`v-hasPermi` 和 `v-hasRole`(`src/directives/permission/`)用于按钮级权限控制
|
||||
|
||||
### HTTP 请求层
|
||||
|
||||
- **封装位置**:`src/config/axios/` 目录
|
||||
- `config.ts`:基础配置,baseURL = `VITE_BASE_URL + VITE_API_URL`
|
||||
- `service.ts`:Axios 实例,包含请求拦截(token 注入、租户 ID 头、API 加密)和响应拦截(401 无感刷新 token、错误码统一处理)
|
||||
- `index.ts`:导出 `request` 对象,提供 `get/post/put/delete/download/upload` 方法
|
||||
- **调用方式**:`import request from '@/config/axios'`,然后 `request.get({ url, params })` / `request.post({ url, data })`
|
||||
|
||||
### API 模块约定
|
||||
|
||||
API 文件按业务域组织在 `src/api/{模块}/{子模块}/index.ts`,每个文件:
|
||||
1. 定义 TypeScript VO 接口(如 `TenantVO`)和请求参数接口
|
||||
2. 导出具名函数(如 `getTenantPage`、`createTenant`、`updateTenant`、`deleteTenant`)
|
||||
3. 使用 `request.get/post/put/delete` 调用后端接口
|
||||
|
||||
主要业务域:`system`(系统管理)、`infra`(基础设施)、`bpm`(工作流)、`crm`、`erp`、`mall`(商城)、`ai`、`iot`、`pay`(支付)、`mp`(微信公众号)
|
||||
|
||||
### 状态管理
|
||||
|
||||
Pinia Store 位于 `src/store/modules/`,使用 `pinia-plugin-persistedstate` 持久化:
|
||||
- `user.ts`:用户信息、登录状态
|
||||
- `permission.ts`:动态路由、菜单
|
||||
- `dict.ts`:数据字典缓存
|
||||
- `app.ts`:应用全局状态(布局、主题等)
|
||||
- `tagsView.ts`:标签页导航
|
||||
- `locale.ts`:语言设置
|
||||
|
||||
每个 Store 导出 `useXxxStoreWithOut()` 函数,用于在 setup 外部获取 Store 实例。
|
||||
|
||||
### 视图页面约定
|
||||
|
||||
视图文件在 `src/views/{模块}/` 下,典型的 CRUD 页面结构:
|
||||
- `index.vue`:列表页,包含搜索表单 + 数据表格 + 分页,使用 `ContentWrap` 组件包裹
|
||||
- `{Entity}Form.vue`:新增/编辑表单弹窗
|
||||
- 使用 `<Icon icon="ep:xxx" />` 全局图标组件(Iconify)
|
||||
- 使用 `v-hasPermi="['module:entity:action']"` 控制按钮权限
|
||||
- 使用 `getIntDictOptions(DICT_TYPE.XXX)` 获取字典数据渲染下拉框
|
||||
|
||||
### 环境变量
|
||||
|
||||
- `.env`:通用配置(应用标题、端口、租户开关、验证码开关等)
|
||||
- `.env.local`:本地开发(连接本地后端,`VITE_BASE_URL` 指向本地服务)
|
||||
- `.env.dev`:远程开发环境
|
||||
- `.env.prod`:生产环境
|
||||
|
||||
关键变量:
|
||||
- `VITE_BASE_URL`:后端 API 根地址
|
||||
- `VITE_API_URL`:API 路径前缀(默认 `/admin-api`)
|
||||
- `VITE_APP_TENANT_ENABLE`:多租户开关
|
||||
- `VITE_APP_CAPTCHA_ENABLE`:验证码开关
|
||||
|
||||
### 核心工具
|
||||
|
||||
- `src/utils/auth.ts`:Token 存取(AccessToken / RefreshToken / TenantId)
|
||||
- `src/utils/dict.ts`:字典工具函数(`getDictOptions`、`getIntDictOptions`)
|
||||
- `src/utils/routerHelper.ts`:路由生成与组件动态加载
|
||||
- `src/utils/formatter.ts`:数据格式化
|
||||
- `src/utils/download.ts`:文件下载
|
||||
- `src/utils/tree.ts`:树形数据处理
|
||||
- `src/hooks/web/useTable.ts`:表格数据加载 Hook
|
||||
- `src/hooks/web/useCrudSchemas.ts`:CRUD Schema 配置 Hook
|
||||
|
||||
### 样式系统
|
||||
|
||||
- UnoCSS 原子化 CSS(可在模板中直接使用如 `class="!w-240px mb-15px"`)
|
||||
- SCSS 变量:`src/styles/variables.scss`(通过 Vite 全局注入)
|
||||
- 全局样式入口:`src/styles/index.scss`
|
||||
|
||||
### 国际化
|
||||
|
||||
`src/locales/` 下 `zh-CN.ts` 和 `en.ts`,通过 `vue-i18n` 实现。组件中使用 `useI18n()` 的 `t()` 函数。
|
||||
|
||||
### 路径别名
|
||||
|
||||
`@/` 映射到 `src/`(在 `vite.config.ts` 和 `tsconfig.json` 中均配置)。
|
||||
Reference in New Issue
Block a user