docs: 添加 CLAUDE.md 项目指南
- 项目概述和快速开始命令 - 核心架构说明(动态表单系统、路由、缓存) - 30+ 表单字段组件类型列表 - 开发规范和常见陷阱说明 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Showing
1 changed file
with
169 additions
and
0 deletions
CLAUDE.md
0 → 100644
| 1 | +# CLAUDE.md | ||
| 2 | + | ||
| 3 | +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. | ||
| 4 | + | ||
| 5 | +## 项目概述 | ||
| 6 | + | ||
| 7 | +这是一个**移动端动态表单系统**,基于 Vue 3 + Vite 构建,使用 Vant 4 作为 UI 组件库。系统支持通过配置动态生成 30+ 种类型的表单字段组件。 | ||
| 8 | + | ||
| 9 | +## 快速开始 | ||
| 10 | + | ||
| 11 | +```bash | ||
| 12 | +# 安装依赖 | ||
| 13 | +npm install | ||
| 14 | + | ||
| 15 | +# 开发(支持网络访问) | ||
| 16 | +npm run dev | ||
| 17 | +npm run start # 监听 0.0.0.0 | ||
| 18 | + | ||
| 19 | +# 构建 | ||
| 20 | +npm run build | ||
| 21 | + | ||
| 22 | +# 构建 + 打包 + 部署(一体化) | ||
| 23 | +npm run {env}_upload # env: dev, oa, mituo, guanzong, baorong, taishan, xys, zentea, behalo | ||
| 24 | +npm run all_upload # 部署到所有环境 | ||
| 25 | +``` | ||
| 26 | + | ||
| 27 | +## 技术栈 | ||
| 28 | + | ||
| 29 | +- **框架**: Vue 3 (Composition API) | ||
| 30 | +- **构建**: Vite 2 | ||
| 31 | +- **UI 库**: Vant 4 | ||
| 32 | +- **状态管理**: Pinia | ||
| 33 | +- **路由**: Vue Router 4 (Hash 模式) | ||
| 34 | +- **HTTP**: Axios | ||
| 35 | +- **语言**: JavaScript/TypeScript 混合 | ||
| 36 | + | ||
| 37 | +## 核心架构 | ||
| 38 | + | ||
| 39 | +### 动态表单系统 | ||
| 40 | + | ||
| 41 | +项目的核心是**动态表单字段组件系统**,通过 `component_props.tag` 属性决定渲染哪种组件: | ||
| 42 | + | ||
| 43 | +```javascript | ||
| 44 | +// src/hooks/useComponentType.js | ||
| 45 | +// 支持的组件类型包括: | ||
| 46 | +input, textarea, number, radio, checkbox, select, address, | ||
| 47 | +date, time, datetime, image_uploader, file_uploader, phone, | ||
| 48 | +email, sign, rate, calendar, id_card, desc, divider, marquee, | ||
| 49 | +contact, rule, multi_rule, button, note, name, gender, | ||
| 50 | +appointment, custom, group, org_picker, volunteer_group, table_editor | ||
| 51 | +``` | ||
| 52 | + | ||
| 53 | +### 字段组件目录 | ||
| 54 | + | ||
| 55 | +``` | ||
| 56 | +src/components/ | ||
| 57 | +├── TextField/ # 单行文本 | ||
| 58 | +├── TextareaField/ # 多行文本 | ||
| 59 | +├── RadioField/ # 单选 | ||
| 60 | +├── CheckboxField/ # 多选 | ||
| 61 | +├── PickerField/ # 选择器 | ||
| 62 | +├── AreaPickerField/ # 地址选择 | ||
| 63 | +├── DatePickerField/ # 日期选择 | ||
| 64 | +├── ImageUploaderField/ # 图片上传 | ||
| 65 | +├── SignField/ # 电子签名 | ||
| 66 | +├── TableField/ # 表格编辑 | ||
| 67 | +└── ...(30+ 组件) | ||
| 68 | +``` | ||
| 69 | + | ||
| 70 | +### 路由系统 | ||
| 71 | + | ||
| 72 | +**动态路由加载**:使用 `import.meta.globEager` 自动加载 `src/router/routes/modules/` 下的路由模块。 | ||
| 73 | + | ||
| 74 | +**关键路由流程**: | ||
| 75 | +1. 404 页面作为中转,动态加载异步路由 | ||
| 76 | +2. 周期选择检查 (`checkCycleSelection`) | ||
| 77 | +3. 未完成表单恢复 (Cookie 检查) | ||
| 78 | + | ||
| 79 | +```javascript | ||
| 80 | +// src/router.js | ||
| 81 | +// 关键逻辑:404 → 动态路由加载 → 周期选择 → 表单检查 → 目标页面 | ||
| 82 | +``` | ||
| 83 | + | ||
| 84 | +### HTTP 请求缓存 | ||
| 85 | + | ||
| 86 | +Axios 封装实现了两种缓存机制: | ||
| 87 | +- **only-data**: 请求去重,避免重复请求 | ||
| 88 | +- **keep-data**: 持久化缓存(30秒,最多50条) | ||
| 89 | + | ||
| 90 | +```javascript | ||
| 91 | +// src/utils/axios.js | ||
| 92 | +// 通过请求头控制 | ||
| 93 | +headers: { | ||
| 94 | + 'only-data': true, // 去重 | ||
| 95 | + 'keep-data': true // 缓存 | ||
| 96 | +} | ||
| 97 | +``` | ||
| 98 | + | ||
| 99 | +## 关键约定 | ||
| 100 | + | ||
| 101 | +### 组件开发规范 | ||
| 102 | + | ||
| 103 | +1. **所有表单字段组件必须**: | ||
| 104 | + - 使用 `v-model` 绑定值 | ||
| 105 | + - 通过 `component_props` 接收配置 | ||
| 106 | + - 支持 `placeholder` 属性 | ||
| 107 | + - 支持 `required` 验证 | ||
| 108 | + | ||
| 109 | +2. **组件命名规范**: | ||
| 110 | + - 目录名:PascalCase(如 `TextField`) | ||
| 111 | + - 文件名:`index.vue` | ||
| 112 | + | ||
| 113 | +### API 调用规范 | ||
| 114 | + | ||
| 115 | +```javascript | ||
| 116 | +// 所有 API 默认携带参数 f: 'custom_form' | ||
| 117 | +// 使用封装的 fn() 处理响应 | ||
| 118 | +import { fn } from '@/api/fn'; | ||
| 119 | +``` | ||
| 120 | + | ||
| 121 | +### 路由参数规范 | ||
| 122 | + | ||
| 123 | +常用查询参数: | ||
| 124 | +- `code`: 表单唯一标识 | ||
| 125 | +- `page_type`: 页面类型 (add/edit/view) | ||
| 126 | +- `model`: 模式 (preview/正式) | ||
| 127 | +- `x_cycle`: 跳过周期检查 | ||
| 128 | +- `force_back`: 强制后台模式 | ||
| 129 | + | ||
| 130 | +## 部署说明 | ||
| 131 | + | ||
| 132 | +项目使用 SCP + SSH 自动化部署到多个环境(dev、oa、mituo 等)。部署流程: | ||
| 133 | +1. `npm run build` 构建 | ||
| 134 | +2. 打包为 `dist.tar.gz` | ||
| 135 | +3. SCP 传输到目标服务器 | ||
| 136 | +4. SSH 解压到指定目录 | ||
| 137 | + | ||
| 138 | +## 常见陷阱 | ||
| 139 | + | ||
| 140 | +### 1. 动态路由刷新白屏 | ||
| 141 | +问题:动态路由刷新时 404 | ||
| 142 | +解决:路由守卫中 404 作为中转,延迟 1s 后加载动态路由 | ||
| 143 | + | ||
| 144 | +### 2. 表单字段组件未注册 | ||
| 145 | +问题:新增组件后未在 `useComponentType.js` 中注册 | ||
| 146 | +解决:在 `src/hooks/useComponentType.js` 添加对应的 if 判断分支 | ||
| 147 | + | ||
| 148 | +### 3. Vant 组件需手动注册 | ||
| 149 | +问题:某些 Vant 组件未全局注册 | ||
| 150 | +解决:在 `src/main.js` 中添加 `app.use(ComponentName)` | ||
| 151 | + | ||
| 152 | +### 4. 路由周期检查死循环 | ||
| 153 | +问题:周期选择页面互相跳转 | ||
| 154 | +解决:检查 `cycle_selected` 参数和 sessionStorage 中的 `skip_cycle_check_for_auth` | ||
| 155 | + | ||
| 156 | +### 5. 移动端兼容性 | ||
| 157 | +- 避免使用 PC 端特有的 API(如 `window.location.href` 赋值跳转,应使用 `router.push`) | ||
| 158 | +- Vant 组件在小程序环境可能不兼容(项目为 H5 项目,无此问题) | ||
| 159 | + | ||
| 160 | +## 外部文档 | ||
| 161 | + | ||
| 162 | +- Vant 4 文档: https://vant-ui.github.io/vant/#/zh-CN | ||
| 163 | +- Vue Router 文档: https://router.vuejs.org/zh/ | ||
| 164 | +- Pinia 文档: https://pinia.vuejs.org/zh/ | ||
| 165 | +- Vite 文档: https://cn.vitejs.dev/ | ||
| 166 | + | ||
| 167 | +--- | ||
| 168 | + | ||
| 169 | +*最后更新: 2026-03-16* |
-
Please register or login to post a comment