docs: 为LangChain Agent添加完整的表单配置文档集
添加详细的文档集,为LangChain Agent生成表单配置提供完整的参考指南。包括: - 数据结构总览:核心FormField、ComponentProps、Option等结构定义 - 组件类型参考:30+种表单组件的详细说明和配置要点 - 配置规范:component_props的完整属性规范和数据提交格式 - LangChain Agent使用指南:自然语言到组件的映射、必填识别、选项提取规则 - 示例数据:20+个真实配置示例和完整表单模板 - 规则控制系统:字段显示/隐藏规则的详细实现机制 - API接口文档:表单管理和数据操作的所有接口说明 - 页面数据提取指南:从实际运行表单中提取配置的方法
Showing
10 changed files
with
1384 additions
and
0 deletions
CHANGELOG.md
0 → 100644
docs/agent/00-数据结构总览.md
0 → 100644
| 1 | +# 数据结构总览 | ||
| 2 | + | ||
| 3 | +## 核心数据结构 | ||
| 4 | + | ||
| 5 | +### 1. 表单字段结构 (FormField) | ||
| 6 | + | ||
| 7 | +每个表单字段都是一个对象,包含以下核心属性: | ||
| 8 | + | ||
| 9 | +```typescript | ||
| 10 | +interface FormField { | ||
| 11 | + // 字段标识 | ||
| 12 | + key: string // 字段唯一标识,如 "field_1" | ||
| 13 | + name: string // 表单验证用的名称,通常等于 key | ||
| 14 | + | ||
| 15 | + // 字段值 | ||
| 16 | + value: any // 字段当前值 | ||
| 17 | + default?: any // 默认值 | ||
| 18 | + | ||
| 19 | + // 组件相关 | ||
| 20 | + component: Component // Vue 组件引用 | ||
| 21 | + component_props: ComponentProps // 组件属性配置 | ||
| 22 | + | ||
| 23 | + // 验证相关 | ||
| 24 | + required?: boolean // 是否必填 | ||
| 25 | + rules?: ValidationRule[] // 验证规则 | ||
| 26 | + type?: string // 表单输入类型(text/textarea等) | ||
| 27 | + | ||
| 28 | + // 其他 | ||
| 29 | + index?: number // 字段排序索引 | ||
| 30 | +} | ||
| 31 | +``` | ||
| 32 | + | ||
| 33 | +### 2. 组件属性结构 (ComponentProps) | ||
| 34 | + | ||
| 35 | +```typescript | ||
| 36 | +interface ComponentProps { | ||
| 37 | + // 基础属性 | ||
| 38 | + tag: string // 组件类型标识(如 "input", "radio") | ||
| 39 | + name: string // 组件名称 | ||
| 40 | + label: string // 字段标签(显示名称) | ||
| 41 | + placeholder?: string // 占位符文本 | ||
| 42 | + default?: any // 默认值 | ||
| 43 | + | ||
| 44 | + // 显示控制 | ||
| 45 | + disabled?: boolean // 是否隐藏 | ||
| 46 | + disabled_show?: boolean // 隐藏时是否显示图标 | ||
| 47 | + readonly?: boolean // 是否只读 | ||
| 48 | + required?: boolean // 是否必填 | ||
| 49 | + | ||
| 50 | + // 选项类组件 | ||
| 51 | + options?: Option[] // 选项列表(radio/checkbox/select) | ||
| 52 | + | ||
| 53 | + // 样式相关 | ||
| 54 | + align?: string // 文本对齐方式(left/center/right) | ||
| 55 | + direction?: string // 排列方向(vertical/horizontal) | ||
| 56 | + background_color?: string // 背景色 | ||
| 57 | + | ||
| 58 | + // 高级功能 | ||
| 59 | + note?: string // 提示文本(支持HTML) | ||
| 60 | + is_camera_scan?: boolean // 是否启用微信扫一扫 | ||
| 61 | + camera_scan_type?: string // 扫码类型(ALL_CODE/QR_CODE/BAR_CODE) | ||
| 62 | + | ||
| 63 | + // 图片上传 | ||
| 64 | + max_count?: number // 最大上传数量 | ||
| 65 | + max_size?: number // 最大文件大小(MB) | ||
| 66 | + | ||
| 67 | + // 评分 | ||
| 68 | + x_score?: number // 分数值 | ||
| 69 | + | ||
| 70 | + // 分组相关 | ||
| 71 | + is_field_group?: boolean // 是否是集合组 | ||
| 72 | + group_field_name?: string // 所属组字段名 | ||
| 73 | +} | ||
| 74 | +``` | ||
| 75 | + | ||
| 76 | +### 3. 选项结构 (Option) | ||
| 77 | + | ||
| 78 | +用于 Radio、Checkbox、Picker 等组件: | ||
| 79 | + | ||
| 80 | +```typescript | ||
| 81 | +interface Option { | ||
| 82 | + // 基础 | ||
| 83 | + title: string // 选项显示文本 | ||
| 84 | + value: any // 选项值 | ||
| 85 | + checked?: boolean // 是否默认选中 | ||
| 86 | + | ||
| 87 | + // 样式 | ||
| 88 | + color?: string // 选项颜色 | ||
| 89 | + background_color?: string // 背景色 | ||
| 90 | + | ||
| 91 | + // 状态 | ||
| 92 | + disabled?: boolean // 是否禁用 | ||
| 93 | + | ||
| 94 | + // 描述信息 | ||
| 95 | + desc_text?: string // 描述文本 | ||
| 96 | + desc_type?: string // 描述类型(text/url) | ||
| 97 | + desc_url?: string // 描述链接URL | ||
| 98 | + desc_btn_name?: string // 描述按钮名称 | ||
| 99 | + | ||
| 100 | + // 补充信息 | ||
| 101 | + is_input?: boolean // 是否需要输入补充信息 | ||
| 102 | + input_required?: boolean // 补充信息是否必填 | ||
| 103 | + input_placeholder?: string // 补充信息占位符 | ||
| 104 | + affix?: string // 补充信息值 | ||
| 105 | +} | ||
| 106 | +``` | ||
| 107 | + | ||
| 108 | +### 4. API 响应结构 | ||
| 109 | + | ||
| 110 | +```typescript | ||
| 111 | +interface APIResponse<T = any> { | ||
| 112 | + code: number // 状态码:1=成功,其他=失败 | ||
| 113 | + msg: string // 响应消息 | ||
| 114 | + data: T // 响应数据 | ||
| 115 | + show?: boolean // 是否显示错误提示 | ||
| 116 | +} | ||
| 117 | +``` | ||
| 118 | + | ||
| 119 | +## 数据流转 | ||
| 120 | + | ||
| 121 | +### 1. 表单渲染流程 | ||
| 122 | + | ||
| 123 | +``` | ||
| 124 | +后端API → 表单配置数据 → createComponentType() → 动态组件渲染 | ||
| 125 | +``` | ||
| 126 | + | ||
| 127 | +### 2. 表单提交流程 | ||
| 128 | + | ||
| 129 | +``` | ||
| 130 | +用户输入 → 组件v-model → item.value → addFormDataAPI() → 后端保存 | ||
| 131 | +``` | ||
| 132 | + | ||
| 133 | +## 关键概念 | ||
| 134 | + | ||
| 135 | +### 1. 动态组件系统 | ||
| 136 | + | ||
| 137 | +项目使用 `component_props.tag` 属性决定渲染哪种组件: | ||
| 138 | +- 系统通过 `src/hooks/useComponentType.js` 中的 `createComponentType()` 函数 | ||
| 139 | +- 根据 `tag` 值动态分配对应的 Vue 组件 | ||
| 140 | +- 支持 30+ 种组件类型 | ||
| 141 | + | ||
| 142 | +### 2. 验证系统 | ||
| 143 | + | ||
| 144 | +- 基于 Vant Form 的验证系统 | ||
| 145 | +- 通过 `rules` 数组配置验证规则 | ||
| 146 | +- 必填项自动添加 `{ required: true, message: 'xxx' }` | ||
| 147 | + | ||
| 148 | +### 3. 规则系统 | ||
| 149 | + | ||
| 150 | +- 字段可以通过规则控制其他字段的显示/隐藏 | ||
| 151 | +- 通过 `emit("active")` 触发规则检查 | ||
| 152 | +- 规则组件:`RuleField`、`MultiRuleField` | ||
| 153 | + | ||
| 154 | +### 4. Cookie 保存 | ||
| 155 | + | ||
| 156 | +- 未完成表单自动保存到 Cookie | ||
| 157 | +- 格式:`{ form_code: { field_key: value } }` | ||
| 158 | +- 过期时间:1 天 | ||
| 159 | + | ||
| 160 | +### 5. 周期选择 | ||
| 161 | + | ||
| 162 | +- 某些表单支持周期选择 | ||
| 163 | +- 通过 API `/srv/?a=cycle_list` 获取可用周期 | ||
| 164 | +- 周期选择后 URL 会携带 `x_cycle` 参数 |
docs/agent/01-表单字段组件类型.md
0 → 100644
| 1 | +# 表单字段组件类型 | ||
| 2 | + | ||
| 3 | +## 支持的组件类型列表 | ||
| 4 | + | ||
| 5 | +项目支持 **30+ 种** 动态表单字段组件,通过 `component_props.tag` 属性指定。 | ||
| 6 | + | ||
| 7 | +## 文本输入类 | ||
| 8 | + | ||
| 9 | +### 1. input - 单行文本输入 | ||
| 10 | +- **组件**: `TextField` | ||
| 11 | +- **用途**: 短文本输入,如姓名、标题等 | ||
| 12 | +- **特殊功能**: 微信扫一扫(`is_camera_scan`) | ||
| 13 | + | ||
| 14 | +### 2. textarea - 多行文本输入 | ||
| 15 | +- **组件**: `TextareaField` | ||
| 16 | +- **用途**: 长文本输入,如备注、描述等 | ||
| 17 | +- **特性**: 自动高度(`autosize`) | ||
| 18 | + | ||
| 19 | +### 3. number - 数字输入 | ||
| 20 | +- **组件**: `NumberField` | ||
| 21 | +- **用途**: 数字类型输入,如年龄、数量等 | ||
| 22 | + | ||
| 23 | +## 选择类 | ||
| 24 | + | ||
| 25 | +### 4. radio - 单项选择 | ||
| 26 | +- **组件**: `RadioField` | ||
| 27 | +- **用途**: 单选选项,如性别、是否等 | ||
| 28 | +- **数据结构**: `options` 数组 | ||
| 29 | +- **特殊功能**: | ||
| 30 | + - 选项颜色(`color`, `background_color`) | ||
| 31 | + - 补充信息输入(`is_input`) | ||
| 32 | + - 描述信息(`desc_text`, `desc_url`) | ||
| 33 | + | ||
| 34 | +### 5. checkbox - 多项选择 | ||
| 35 | +- **组件**: `CheckboxField` | ||
| 36 | +- **用途**: 多选选项,如爱好、标签等 | ||
| 37 | +- **数据结构**: `options` 数组 | ||
| 38 | +- **排列方向**: `direction` (vertical/horizontal) | ||
| 39 | + | ||
| 40 | +### 6. select - 单列选择器 | ||
| 41 | +- **组件**: `PickerField` | ||
| 42 | +- **用途**: 下拉单选 | ||
| 43 | +- **数据结构**: `options` 数组 | ||
| 44 | +- **返回值**: 选中的 `value` | ||
| 45 | + | ||
| 46 | +## 日期时间类 | ||
| 47 | + | ||
| 48 | +### 7. date - 日期选择器 | ||
| 49 | +- **组件**: `DatePickerField` | ||
| 50 | +- **用途**: 选择日期 | ||
| 51 | + | ||
| 52 | +### 8. time - 时间选择器 | ||
| 53 | +- **组件**: `TimePickerField` | ||
| 54 | +- **用途**: 选择时间 | ||
| 55 | + | ||
| 56 | +### 9. datetime - 日期时间选择器 | ||
| 57 | +- **组件**: `DateTimePickerField` | ||
| 58 | +- **用途**: 选择日期和时间 | ||
| 59 | + | ||
| 60 | +### 10. calendar - 日历选择器 | ||
| 61 | +- **组件**: `CalendarField` | ||
| 62 | +- **用途**: 日历形式选择日期 | ||
| 63 | + | ||
| 64 | +## 上传类 | ||
| 65 | + | ||
| 66 | +### 11. image_uploader - 图片上传 | ||
| 67 | +- **组件**: `ImageUploaderField` | ||
| 68 | +- **用途**: 上传图片到七牛云 | ||
| 69 | +- **配置**: | ||
| 70 | + - `max_count`: 最大数量 | ||
| 71 | + - `max_size`: 最大文件大小(MB) | ||
| 72 | +- **返回值**: `[{ url, name }]` | ||
| 73 | + | ||
| 74 | +### 12. file_uploader - 文件上传 | ||
| 75 | +- **组件**: `FileUploaderField` | ||
| 76 | +- **用途**: 上传普通文件 | ||
| 77 | + | ||
| 78 | +## 特殊输入类 | ||
| 79 | + | ||
| 80 | +### 13. phone - 手机号输入 | ||
| 81 | +- **组件**: `PhoneField` | ||
| 82 | +- **用途**: 手机号码输入和验证 | ||
| 83 | +- **验证**: 11位手机号格式 | ||
| 84 | + | ||
| 85 | +### 14. email - 邮箱输入 | ||
| 86 | +- **组件**: `EmailField` | ||
| 87 | +- **用途**: 邮箱地址输入和验证 | ||
| 88 | + | ||
| 89 | +### 15. id_card - 身份证输入 | ||
| 90 | +- **组件**: `IdentityField` | ||
| 91 | +- **用途**: 身份证号码输入和验证 | ||
| 92 | + | ||
| 93 | +### 16. name - 姓名输入 | ||
| 94 | +- **组件**: `NameField` | ||
| 95 | +- **用途**: 中文姓名输入 | ||
| 96 | + | ||
| 97 | +### 17. gender - 性别选择 | ||
| 98 | +- **组件**: `GenderField` | ||
| 99 | +- **用途**: 性别选择(男/女) | ||
| 100 | + | ||
| 101 | +## 位置类 | ||
| 102 | + | ||
| 103 | +### 18. address - 地址选择器 | ||
| 104 | +- **组件**: `AreaPickerField` | ||
| 105 | +- **用途**: 省/市/区三级联动选择 | ||
| 106 | +- **数据**: 使用 `@vant/area-data` | ||
| 107 | + | ||
| 108 | +## 展示类 | ||
| 109 | + | ||
| 110 | +### 19. desc - 文字描述 | ||
| 111 | +- **组件**: `DesField` | ||
| 112 | +- **用途**: 纯文字展示,不支持输入 | ||
| 113 | + | ||
| 114 | +### 20. divider - 分割线 | ||
| 115 | +- **组件**: `DividerField` | ||
| 116 | +- **用途**: 视觉分割线 | ||
| 117 | + | ||
| 118 | +### 21. note - 富文本控件 | ||
| 119 | +- **组件**: `NoteField` | ||
| 120 | +- **用途**: 富文本内容展示 | ||
| 121 | + | ||
| 122 | +### 22. marquee - 跑马灯 | ||
| 123 | +- **组件**: `MarqueeField` | ||
| 124 | +- **用途**: 滚动公告文字 | ||
| 125 | + | ||
| 126 | +## 特殊功能类 | ||
| 127 | + | ||
| 128 | +### 23. sign - 电子签名 | ||
| 129 | +- **组件**: `SignField` | ||
| 130 | +- **用途**: 手写签名板 | ||
| 131 | +- **依赖**: `vue-esign` | ||
| 132 | + | ||
| 133 | +### 24. rate - 评分选择器 | ||
| 134 | +- **组件**: `RatePickerField` | ||
| 135 | +- **用途**: 星级评分 | ||
| 136 | + | ||
| 137 | +### 25. appointment - 预约控件 | ||
| 138 | +- **组件**: `AppointmentField` | ||
| 139 | +- **用途**: 时间段预约选择 | ||
| 140 | +- **数据结构**: 复杂的日期+时间段结构 | ||
| 141 | + | ||
| 142 | +### 26. rule - 活动规则控件 | ||
| 143 | +- **组件**: `RuleField` | ||
| 144 | +- **用途**: 显示规则说明,支持弹窗 | ||
| 145 | + | ||
| 146 | +### 27. multi_rule - 活动规则控件(多选) | ||
| 147 | +- **组件**: `MultiRuleField` | ||
| 148 | +- **用途**: 多选规则选项 | ||
| 149 | + | ||
| 150 | +### 28. contact - 联系人控件 | ||
| 151 | +- **组件**: `ContactField` | ||
| 152 | +- **用途**: 联系人信息输入 | ||
| 153 | + | ||
| 154 | +### 29. button - 按钮控件 | ||
| 155 | +- **组件**: `ButtonField` | ||
| 156 | +- **用途**: 自定义按钮 | ||
| 157 | + | ||
| 158 | +### 30. custom - 自定义控件 | ||
| 159 | +- **组件**: `CustomField` | ||
| 160 | +- **用途**: 完全自定义的组件 | ||
| 161 | + | ||
| 162 | +## 高级类 | ||
| 163 | + | ||
| 164 | +### 31. group - 组集合输入控件 | ||
| 165 | +- **组件**: `GroupField` | ||
| 166 | +- **用途**: 将多个字段分组显示 | ||
| 167 | +- **配置**: `field_groups` 数组 | ||
| 168 | + | ||
| 169 | +### 32. org_picker - 树形选择控件 | ||
| 170 | +- **组件**: `OrgPickerField` | ||
| 171 | +- **用途**: 组织架构树形选择 | ||
| 172 | + | ||
| 173 | +### 33. volunteer_group - 义工组别选择 | ||
| 174 | +- **组件**: `VolunteerGroupField` | ||
| 175 | +- **用途**: 义工组别单选 | ||
| 176 | + | ||
| 177 | +### 34. table_editor - 表格编辑控件 | ||
| 178 | +- **组件**: `TableField` | ||
| 179 | +- **用途**: 动态表格编辑,支持增删行 | ||
| 180 | + | ||
| 181 | +### 35. video - 视频控件 | ||
| 182 | +- **组件**: `VideoField` | ||
| 183 | +- **状态**: 已注释,暂未使用 | ||
| 184 | + | ||
| 185 | +## 组件注册位置 | ||
| 186 | + | ||
| 187 | +所有组件在 `src/hooks/useComponentType.js` 中注册: | ||
| 188 | + | ||
| 189 | +```javascript | ||
| 190 | +export function createComponentType(data) { | ||
| 191 | + _.each(data, (item, index) => { | ||
| 192 | + // 统一名称 | ||
| 193 | + item.name = item.key | ||
| 194 | + | ||
| 195 | + // 根据 tag 分配组件 | ||
| 196 | + if (item.component_props.tag === 'input') { | ||
| 197 | + item.component = TextField; | ||
| 198 | + } | ||
| 199 | + if (item.component_props.tag === 'radio') { | ||
| 200 | + item.component = RadioField; | ||
| 201 | + } | ||
| 202 | + // ... 更多组件 | ||
| 203 | + }) | ||
| 204 | +} | ||
| 205 | +``` | ||
| 206 | + | ||
| 207 | +## 新增组件流程 | ||
| 208 | + | ||
| 209 | +1. 在 `src/components/` 下创建组件目录 | ||
| 210 | +2. 创建 `index.vue` 组件文件 | ||
| 211 | +3. 在 `src/hooks/useComponentType.js` 添加 if 判断分支 | ||
| 212 | +4. 组件必须支持以下 props: | ||
| 213 | + - `item`: Object (包含 component_props 和 value) | ||
| 214 | + - 必须通过 emit 发送 "active" 事件 |
docs/agent/02-component_props-配置规范.md
0 → 100644
| 1 | +# component_props 配置规范 | ||
| 2 | + | ||
| 3 | +## 通用属性 | ||
| 4 | + | ||
| 5 | +所有组件类型都支持的属性: | ||
| 6 | + | ||
| 7 | +| 属性 | 类型 | 必填 | 默认值 | 说明 | | ||
| 8 | +|------|------|------|--------|------| | ||
| 9 | +| `tag` | string | ✅ | - | 组件类型标识,决定渲染哪个组件 | | ||
| 10 | +| `name` | string | ✅ | - | 组件名称 | | ||
| 11 | +| `label` | string | ✅ | - | 字段标签(显示名称) | | ||
| 12 | +| `default` | any | ❌ | - | 默认值 | | ||
| 13 | +| `placeholder` | string | ❌ | "请输入" | 占位符文本 | | ||
| 14 | +| `required` | boolean | ❌ | false | 是否必填 | | ||
| 15 | +| `disabled` | boolean | ❌ | false | 是否隐藏字段 | | ||
| 16 | +| `disabled_show` | boolean | ❌ | false | 隐藏时是否显示闭眼图标 | | ||
| 17 | +| `readonly` | boolean | ❌ | false | 是否只读 | | ||
| 18 | +| `note` | string | ❌ | - | 提示文本(支持HTML) | | ||
| 19 | + | ||
| 20 | +## 选项类组件属性 | ||
| 21 | + | ||
| 22 | +Radio、Checkbox、Picker 等组件额外支持: | ||
| 23 | + | ||
| 24 | +| 属性 | 类型 | 说明 | | ||
| 25 | +|------|------|------| | ||
| 26 | +| `options` | Option[] | 选项列表数组 | | ||
| 27 | +| `direction` | string | 排列方向:`vertical`(垂直)/ `horizontal`(水平) | | ||
| 28 | +| `align` | string | 文本对齐:`left` / `center` / `right` | | ||
| 29 | + | ||
| 30 | +### Option 结构 | ||
| 31 | + | ||
| 32 | +```typescript | ||
| 33 | +interface Option { | ||
| 34 | + title: string // 显示文本 | ||
| 35 | + value: any // 选项值 | ||
| 36 | + checked?: boolean // 默认选中 | ||
| 37 | + disabled?: boolean // 禁用状态 | ||
| 38 | + color?: string // 选项颜色 | ||
| 39 | + background_color?: string // 背景色 | ||
| 40 | + | ||
| 41 | + // 描述信息 | ||
| 42 | + desc_text?: string // 描述文本 | ||
| 43 | + desc_type?: string // "text" 或 "url" | ||
| 44 | + desc_url?: string // 描述链接 | ||
| 45 | + desc_btn_name?: string // 描述按钮名称 | ||
| 46 | + | ||
| 47 | + // 补充信息 | ||
| 48 | + is_input?: boolean // 是否需要补充信息输入 | ||
| 49 | + input_required?: boolean // 补充信息是否必填 | ||
| 50 | + input_placeholder?: string // 补充信息占位符 | ||
| 51 | + affix?: string // 补充信息值 | ||
| 52 | +} | ||
| 53 | +``` | ||
| 54 | + | ||
| 55 | +## 文本输入类属性 | ||
| 56 | + | ||
| 57 | +### input / textarea / number | ||
| 58 | + | ||
| 59 | +| 属性 | 类型 | 说明 | | ||
| 60 | +|------|------|------| | ||
| 61 | +| `align` | string | 文本对齐方式 | | ||
| 62 | +| `is_camera_scan` | boolean | 是否启用微信扫一扫 | | ||
| 63 | +| `camera_scan_type` | string | 扫码类型:`ALL_CODE` / `QR_CODE` / `BAR_CODE` | | ||
| 64 | +| `is_edit_camera_scan_result` | boolean | 是否允许编辑扫码结果 | | ||
| 65 | + | ||
| 66 | +## 上传类属性 | ||
| 67 | + | ||
| 68 | +### image_uploader | ||
| 69 | + | ||
| 70 | +| 属性 | 类型 | 默认值 | 说明 | | ||
| 71 | +|------|------|--------|------| | ||
| 72 | +| `max_count` | number | 9 | 最大上传数量 | | ||
| 73 | +| `max_size` | number | 10 | 最大文件大小(MB) | | ||
| 74 | +| `image_type` | string | "jpg/..." | 允许的图片类型 | | ||
| 75 | + | ||
| 76 | +**返回值结构**: | ||
| 77 | +```javascript | ||
| 78 | +{ | ||
| 79 | + key: "image_uploader", | ||
| 80 | + filed_name: "field_1", | ||
| 81 | + value: [ | ||
| 82 | + { url: "https://...", name: "image.jpg" } | ||
| 83 | + ] | ||
| 84 | +} | ||
| 85 | +``` | ||
| 86 | + | ||
| 87 | +### file_uploader | ||
| 88 | + | ||
| 89 | +与 `image_uploader` 类似,用于普通文件上传。 | ||
| 90 | + | ||
| 91 | +## 日期时间类属性 | ||
| 92 | + | ||
| 93 | +### date / time / datetime / calendar | ||
| 94 | + | ||
| 95 | +| 属性 | 类型 | 说明 | | ||
| 96 | +|------|------|------| | ||
| 97 | +| `min_date` | Date/Date[] | 最小可选日期 | | ||
| 98 | +| `max_date` | Date/Date[] | 最大可选日期 | | ||
| 99 | +| `formatter` | Function | 格式化函数 | | ||
| 100 | + | ||
| 101 | +## 预约控件属性 | ||
| 102 | + | ||
| 103 | +### appointment | ||
| 104 | + | ||
| 105 | +**复杂配置结构**: | ||
| 106 | + | ||
| 107 | +```javascript | ||
| 108 | +{ | ||
| 109 | + tag: "appointment", | ||
| 110 | + label: "预约时间", | ||
| 111 | + appointment_title: "选择入寺时间", | ||
| 112 | + options: [ | ||
| 113 | + { | ||
| 114 | + title: "03月27日", // 日期标题 | ||
| 115 | + placeholder: "剩余余量 9878", // 提示信息 | ||
| 116 | + disabled: false, // 是否禁用该日期 | ||
| 117 | + columns: [ // 时间段列表 | ||
| 118 | + { | ||
| 119 | + checked: false, | ||
| 120 | + disabled: false, | ||
| 121 | + value: "1", | ||
| 122 | + text: "16:00-17:30 余1399" | ||
| 123 | + } | ||
| 124 | + ] | ||
| 125 | + } | ||
| 126 | + ] | ||
| 127 | +} | ||
| 128 | +``` | ||
| 129 | + | ||
| 130 | +## 规则控件属性 | ||
| 131 | + | ||
| 132 | +### rule / multi_rule | ||
| 133 | + | ||
| 134 | +| 属性 | 类型 | 说明 | | ||
| 135 | +|------|------|------| | ||
| 136 | +| `desc_text` | string | 规则内容(支持 `\n` 换行) | | ||
| 137 | +| `desc_type` | string | `text`(弹窗)或 `url`(跳转) | | ||
| 138 | +| `desc_url` | string | 规则详情链接 | | ||
| 139 | +| `desc_btn_name` | string | 按钮名称,如"查看详情" | | ||
| 140 | + | ||
| 141 | +## 组集合控件属性 | ||
| 142 | + | ||
| 143 | +### group | ||
| 144 | + | ||
| 145 | +```javascript | ||
| 146 | +{ | ||
| 147 | + tag: "group", | ||
| 148 | + label: "物品详情", | ||
| 149 | + field_groups: [ | ||
| 150 | + { | ||
| 151 | + tag: "input", | ||
| 152 | + label: "物品描述", | ||
| 153 | + field_name: "field_10", | ||
| 154 | + group_field_name: "field_4", // 所属组字段 | ||
| 155 | + // ... 其他属性 | ||
| 156 | + } | ||
| 157 | + ] | ||
| 158 | +} | ||
| 159 | +``` | ||
| 160 | + | ||
| 161 | +## 评分控件属性 | ||
| 162 | + | ||
| 163 | +### rate | ||
| 164 | + | ||
| 165 | +| 属性 | 类型 | 说明 | | ||
| 166 | +|------|------|------| | ||
| 167 | +| `x_score` | number | 显示分值(会显示在标签旁) | | ||
| 168 | + | ||
| 169 | +## 表格控件属性 | ||
| 170 | + | ||
| 171 | +### table_editor | ||
| 172 | + | ||
| 173 | +| 属性 | 类型 | 说明 | | ||
| 174 | +|------|------|------| | ||
| 175 | +| `default` | string/html | 默认表格内容(HTML格式) | | ||
| 176 | + | ||
| 177 | +## 特殊功能属性 | ||
| 178 | + | ||
| 179 | +### 微信扫码 | ||
| 180 | + | ||
| 181 | +仅 `input` 类型支持: | ||
| 182 | + | ||
| 183 | +```javascript | ||
| 184 | +{ | ||
| 185 | + tag: "input", | ||
| 186 | + is_camera_scan: true, | ||
| 187 | + camera_scan_type: "ALL_CODE" // ALL_CODE | QR_CODE | BAR_CODE | ||
| 188 | +} | ||
| 189 | +``` | ||
| 190 | + | ||
| 191 | +### 补充信息 | ||
| 192 | + | ||
| 193 | +Radio、Checkbox 支持选择后输入补充信息: | ||
| 194 | + | ||
| 195 | +```javascript | ||
| 196 | +options: [ | ||
| 197 | + { | ||
| 198 | + title: "其他", | ||
| 199 | + value: "other", | ||
| 200 | + is_input: true, // 启用补充输入 | ||
| 201 | + input_required: true, // 补充信息必填 | ||
| 202 | + input_placeholder: "请输入补充信息", | ||
| 203 | + affix: "" // 补充信息值 | ||
| 204 | + } | ||
| 205 | +] | ||
| 206 | +``` | ||
| 207 | + | ||
| 208 | +### 显示隐藏控制 | ||
| 209 | + | ||
| 210 | +通过规则动态控制字段显示/隐藏: | ||
| 211 | + | ||
| 212 | +```javascript | ||
| 213 | +{ | ||
| 214 | + tag: "input", | ||
| 215 | + disabled: false // true=隐藏,false=显示 | ||
| 216 | +} | ||
| 217 | +``` | ||
| 218 | + | ||
| 219 | +## 样式属性 | ||
| 220 | + | ||
| 221 | +### 对齐方式 | ||
| 222 | + | ||
| 223 | +```javascript | ||
| 224 | +{ | ||
| 225 | + align: "left" // left | center | right | ||
| 226 | +} | ||
| 227 | +``` | ||
| 228 | + | ||
| 229 | +### 颜色 | ||
| 230 | + | ||
| 231 | +选项类组件支持单独配置颜色: | ||
| 232 | + | ||
| 233 | +```javascript | ||
| 234 | +options: [ | ||
| 235 | + { | ||
| 236 | + title: "重要", | ||
| 237 | + value: "important", | ||
| 238 | + color: "#ff0000", // 文字颜色 | ||
| 239 | + background_color: "#fff0f0" // 背景色 | ||
| 240 | + } | ||
| 241 | +] | ||
| 242 | +``` | ||
| 243 | + | ||
| 244 | +## 数据提交格式 | ||
| 245 | + | ||
| 246 | +### 普通字段 | ||
| 247 | + | ||
| 248 | +```javascript | ||
| 249 | +{ | ||
| 250 | + key: "field_1", | ||
| 251 | + value: "用户输入的值" | ||
| 252 | +} | ||
| 253 | +``` | ||
| 254 | + | ||
| 255 | +### 选项类字段(Radio) | ||
| 256 | + | ||
| 257 | +```javascript | ||
| 258 | +{ | ||
| 259 | + key: "field_1", | ||
| 260 | + value: "选项值", | ||
| 261 | + affix: "补充信息: xxx", // 如果有补充信息 | ||
| 262 | + type: "radio" | ||
| 263 | +} | ||
| 264 | +``` | ||
| 265 | + | ||
| 266 | +### 选项类字段(Checkbox) | ||
| 267 | + | ||
| 268 | +```javascript | ||
| 269 | +{ | ||
| 270 | + key: "field_1", | ||
| 271 | + value: ["值1", "值2"], // 数组 | ||
| 272 | + type: "checkbox" | ||
| 273 | +} | ||
| 274 | +``` | ||
| 275 | + | ||
| 276 | +### 图片上传 | ||
| 277 | + | ||
| 278 | +```javascript | ||
| 279 | +{ | ||
| 280 | + key: "field_1", | ||
| 281 | + filed_name: "field_1", | ||
| 282 | + value: [ | ||
| 283 | + { url: "https://...", name: "image.jpg" } | ||
| 284 | + ], | ||
| 285 | + type: "image_uploader" | ||
| 286 | +} | ||
| 287 | +``` |
docs/agent/03-API-接口文档.md
0 → 100644
| 1 | +# API 接口文档 | ||
| 2 | + | ||
| 3 | +## 基础配置 | ||
| 4 | + | ||
| 5 | +### 请求基础配置 | ||
| 6 | + | ||
| 7 | +所有请求默认携带参数: | ||
| 8 | +```javascript | ||
| 9 | +{ | ||
| 10 | + f: 'custom_form' // 固定参数 | ||
| 11 | +} | ||
| 12 | +``` | ||
| 13 | + | ||
| 14 | +### 响应格式 | ||
| 15 | + | ||
| 16 | +```typescript | ||
| 17 | +interface APIResponse<T = any> { | ||
| 18 | + code: number // 1=成功,其他=失败 | ||
| 19 | + msg: string // 响应消息 | ||
| 20 | + data: T // 响应数据 | ||
| 21 | + show?: boolean // 是否显示错误提示(code !== 1 时) | ||
| 22 | +} | ||
| 23 | +``` | ||
| 24 | + | ||
| 25 | +### 请求封装 | ||
| 26 | + | ||
| 27 | +```javascript | ||
| 28 | +import { fn, fetch } from '@/api/fn'; | ||
| 29 | + | ||
| 30 | +// GET 请求 | ||
| 31 | +fn(fetch.get('/srv/?a=xxx', params)) | ||
| 32 | + | ||
| 33 | +// POST 请求 | ||
| 34 | +fn(fetch.post('/srv/?a=xxx', params)) | ||
| 35 | +``` | ||
| 36 | + | ||
| 37 | +## 表单管理接口 | ||
| 38 | + | ||
| 39 | +### 1. 新增表单 | ||
| 40 | + | ||
| 41 | +**接口**: `/srv/?a=add_form` | ||
| 42 | +**方法**: POST | ||
| 43 | +**参数**: | ||
| 44 | +```javascript | ||
| 45 | +{ | ||
| 46 | + client_id: string, // 主体客户id | ||
| 47 | + name: string, // 表单名称 | ||
| 48 | + note: string // 表单描述 | ||
| 49 | +} | ||
| 50 | +``` | ||
| 51 | + | ||
| 52 | +### 2. 查询表单配置(字段和规则) | ||
| 53 | + | ||
| 54 | +**接口**: `/srv/?a=query_form_all_field` | ||
| 55 | +**方法**: GET | ||
| 56 | +**参数**: | ||
| 57 | +```javascript | ||
| 58 | +{ | ||
| 59 | + f: "custom_form", // 固定参数 | ||
| 60 | + form_code: string, // 表单唯一标识(必填) | ||
| 61 | + page_type: string, // 页面类型:add/edit/view(可选) | ||
| 62 | + data_id: string, // 数据ID(编辑时使用) | ||
| 63 | + flow_node_code: string // 流程节点代码(可选) | ||
| 64 | +} | ||
| 65 | +``` | ||
| 66 | + | ||
| 67 | +**返回**: | ||
| 68 | +```javascript | ||
| 69 | +{ | ||
| 70 | + code: 1, | ||
| 71 | + msg: "OK", | ||
| 72 | + data: { | ||
| 73 | + id: 835950, | ||
| 74 | + code: "nxqkbf", | ||
| 75 | + name: "表单名称", | ||
| 76 | + table_name: "customize_35697_nxqkbf", | ||
| 77 | + max_field_num: 3, | ||
| 78 | + field_list: [ | ||
| 79 | + { | ||
| 80 | + tag: "input", // 组件类型 | ||
| 81 | + field_name: "field_1", // 字段名 | ||
| 82 | + label: "姓名", // 显示标签 | ||
| 83 | + required: true, // 是否必填 | ||
| 84 | + data_type: "text", // 数据类型 | ||
| 85 | + placeholder: "请输入", | ||
| 86 | + disabled: false, | ||
| 87 | + readonly: false | ||
| 88 | + } | ||
| 89 | + ], | ||
| 90 | + rule_list: [ // 字段显示/隐藏规则 | ||
| 91 | + { | ||
| 92 | + field_names: ["field_2"], | ||
| 93 | + mode: "SHOW", | ||
| 94 | + logical_op: "OR", | ||
| 95 | + expr_list: [...] | ||
| 96 | + } | ||
| 97 | + ], | ||
| 98 | + flow_process_list: null // 工作流流程列表 | ||
| 99 | + } | ||
| 100 | +} | ||
| 101 | +``` | ||
| 102 | + | ||
| 103 | +**调用示例**: | ||
| 104 | +```bash | ||
| 105 | +curl "https://oa-dev.onwall.cn/srv/?a=query_form_all_field&f=custom_form&form_code=nxqkbf" | ||
| 106 | +``` | ||
| 107 | + | ||
| 108 | +--- | ||
| 109 | + | ||
| 110 | +### 2.1. 查询表单设置(表单级配置) | ||
| 111 | + | ||
| 112 | +**接口**: `/srv/?a=query_form_setting` | ||
| 113 | +**方法**: GET | ||
| 114 | +**参数**: | ||
| 115 | +```javascript | ||
| 116 | +{ | ||
| 117 | + f: "custom_form", // 固定参数 | ||
| 118 | + form_code: string // 表单唯一标识(必填) | ||
| 119 | +} | ||
| 120 | +``` | ||
| 121 | + | ||
| 122 | +**返回**: | ||
| 123 | +```javascript | ||
| 124 | +{ | ||
| 125 | + code: 1, | ||
| 126 | + msg: "OK", | ||
| 127 | + data: [{ | ||
| 128 | + id: 835950, | ||
| 129 | + code: "nxqkbf", | ||
| 130 | + name: "表单名称", | ||
| 131 | + max_field_num: 3, // 最大字段数 | ||
| 132 | + data_count: 7, // 已提交数据条数 | ||
| 133 | + extend: { | ||
| 134 | + server_time: "2026-03-16 17:15:40", | ||
| 135 | + is_back_user: false // 是否后台用户 | ||
| 136 | + }, | ||
| 137 | + property_list: { | ||
| 138 | + sjsj_enable: 1, // 是否启用数据收集 | ||
| 139 | + commit_action: "text", // 提交动作类型 | ||
| 140 | + commit_text_type: "default", | ||
| 141 | + commit_text_template: "提交成功", // 提交文本模板 | ||
| 142 | + edit_commit_action: "text", | ||
| 143 | + edit_commit_text_type: "default", | ||
| 144 | + edit_commit_text_template: "提交成功" | ||
| 145 | + } | ||
| 146 | + }] | ||
| 147 | +} | ||
| 148 | +``` | ||
| 149 | + | ||
| 150 | +**调用示例**: | ||
| 151 | +```bash | ||
| 152 | +curl "https://oa-dev.onwall.cn/srv/?a=query_form_setting&f=custom_form&form_code=nxqkbf" | ||
| 153 | +``` | ||
| 154 | + | ||
| 155 | +--- | ||
| 156 | + | ||
| 157 | +### 2.2. 两个接口的区别 | ||
| 158 | + | ||
| 159 | +| 接口 | 获取内容 | 用途 | | ||
| 160 | +|------|---------|------| | ||
| 161 | +| `query_form_all_field` | 字段列表、规则列表 | 渲染表单结构 | | ||
| 162 | +| `query_form_setting` | 表单配置、提交设置 | 获取表单级属性 | | ||
| 163 | + | ||
| 164 | +### 3. 添加表单字段 | ||
| 165 | + | ||
| 166 | +**接口**: `/srv/?a=add_form_field` | ||
| 167 | +**方法**: POST | ||
| 168 | +**参数**: | ||
| 169 | +```javascript | ||
| 170 | +{ | ||
| 171 | + form_code: string, // 表单唯一标识 | ||
| 172 | + component_code: string // 组件标识 | ||
| 173 | +} | ||
| 174 | +``` | ||
| 175 | + | ||
| 176 | +### 4. 添加表单字段属性设置 | ||
| 177 | + | ||
| 178 | +**接口**: `/srv/?a=add_form_setting` | ||
| 179 | +**方法**: POST | ||
| 180 | +**参数**: | ||
| 181 | +```javascript | ||
| 182 | +{ | ||
| 183 | + form_code: string, // 表单唯一标识 | ||
| 184 | + field_name: string, // 表单字段名(表单级属性可为空) | ||
| 185 | + component_code: string, // 组件标识 | ||
| 186 | + property_code: string, // 属性标识 | ||
| 187 | + setting_value: string // 属性值(JSON数组字符串) | ||
| 188 | +} | ||
| 189 | +``` | ||
| 190 | + | ||
| 191 | +### 5. 查询表单设置 | ||
| 192 | + | ||
| 193 | +**接口**: `/srv/?a=query_form_setting` | ||
| 194 | +**方法**: GET | ||
| 195 | +**参数**: | ||
| 196 | +```javascript | ||
| 197 | +{ | ||
| 198 | + form_code: string // 表单唯一标识 | ||
| 199 | +} | ||
| 200 | +``` | ||
| 201 | + | ||
| 202 | +**返回**: | ||
| 203 | +```javascript | ||
| 204 | +{ | ||
| 205 | + enable: number, // 0=停止表单,1=开启表单 | ||
| 206 | + is_time_range: number, // 0=不设定,1=设定 | ||
| 207 | + is_count_down: number, // 0=不显示,1=显示 | ||
| 208 | + begin_time: string, // 开启时间 | ||
| 209 | + end_time: string // 停止时间 | ||
| 210 | +} | ||
| 211 | +``` | ||
| 212 | + | ||
| 213 | +### 6. 验证便当密码 | ||
| 214 | + | ||
| 215 | +**接口**: `/srv/?a=verify_password` | ||
| 216 | +**方法**: POST | ||
| 217 | +**参数**: | ||
| 218 | +```javascript | ||
| 219 | +{ | ||
| 220 | + form_code: string, // 表单唯一标识 | ||
| 221 | + mmtx_password: string // 用户输入的密码 | ||
| 222 | +} | ||
| 223 | +``` | ||
| 224 | + | ||
| 225 | +### 7. 义工组长查询义工信息 | ||
| 226 | + | ||
| 227 | +**接口**: `/srv/?a=volunteer_source_leader` | ||
| 228 | +**方法**: GET | ||
| 229 | +**参数**: | ||
| 230 | +```javascript | ||
| 231 | +{ | ||
| 232 | + form_code: string, // 表单唯一标识 | ||
| 233 | + page_type: string, // 页面类型 | ||
| 234 | + force_back: string, // 是否强制后台账号模式检查 | ||
| 235 | + volunteer_source: string, // 报名渠道:self/leader | ||
| 236 | + volunteer_phone: string // 义工手机号 | ||
| 237 | +} | ||
| 238 | +``` | ||
| 239 | + | ||
| 240 | +## 数据管理接口 | ||
| 241 | + | ||
| 242 | +### 1. 添加表单数据 | ||
| 243 | + | ||
| 244 | +**接口**: `/srv/?a=add_formdata` | ||
| 245 | +**方法**: POST | ||
| 246 | +**参数**: | ||
| 247 | +```javascript | ||
| 248 | +{ | ||
| 249 | + form_code: string, // 表单唯一标识 | ||
| 250 | + data: object // 待添加的数据(JSON对象) | ||
| 251 | +} | ||
| 252 | +``` | ||
| 253 | + | ||
| 254 | +**示例**: | ||
| 255 | +```javascript | ||
| 256 | +{ | ||
| 257 | + form_code: "form_001", | ||
| 258 | + data: { | ||
| 259 | + field_1: "张三", | ||
| 260 | + field_2: "13800138000", | ||
| 261 | + field_3: ["选项1", "选项2"] | ||
| 262 | + } | ||
| 263 | +} | ||
| 264 | +``` | ||
| 265 | + | ||
| 266 | +### 2. 查询表单数据 | ||
| 267 | + | ||
| 268 | +**接口**: `/srv/?a=query_formdata` | ||
| 269 | +**方法**: GET | ||
| 270 | +**参数**: | ||
| 271 | +```javascript | ||
| 272 | +{ | ||
| 273 | + form_code: string, // 表单唯一标识 | ||
| 274 | + id: string // 数据ID | ||
| 275 | +} | ||
| 276 | +``` | ||
| 277 | + | ||
| 278 | +### 3. 修改表单数据 | ||
| 279 | + | ||
| 280 | +**接口**: `/srv/?a=modi_formdata` | ||
| 281 | +**方法**: POST | ||
| 282 | +**参数**: | ||
| 283 | +```javascript | ||
| 284 | +{ | ||
| 285 | + form_code: string, // 表单唯一标识 | ||
| 286 | + id: string, // 数据ID | ||
| 287 | + data: object // 待修改的数据(JSON对象) | ||
| 288 | +} | ||
| 289 | +``` | ||
| 290 | + | ||
| 291 | +### 4. 流程表单数据 | ||
| 292 | + | ||
| 293 | +**接口**: `/srv/?a=flow_formdata` | ||
| 294 | +**方法**: POST | ||
| 295 | +**参数**: | ||
| 296 | +```javascript | ||
| 297 | +{ | ||
| 298 | + form_code: string, // 表单唯一标识 | ||
| 299 | + data_id: string, // 数据ID | ||
| 300 | + data: object, // 表单数据 | ||
| 301 | + flow_node_code: string, // 流程节点 | ||
| 302 | + flow_node_action_id: string, // 流程节点按钮ID | ||
| 303 | + flow_content: string // 流程审批意见 | ||
| 304 | +} | ||
| 305 | +``` | ||
| 306 | + | ||
| 307 | +## 组件接口 | ||
| 308 | + | ||
| 309 | +### 1. 查询组件 | ||
| 310 | + | ||
| 311 | +**接口**: `/srv/?a=query_component` | ||
| 312 | +**方法**: GET | ||
| 313 | +**参数**: | ||
| 314 | +```javascript | ||
| 315 | +{ | ||
| 316 | + group_code: string, // 分组标识 | ||
| 317 | + component_code: string, // 组件标识 | ||
| 318 | + name: string // 组件名称(模糊查询) | ||
| 319 | +} | ||
| 320 | +``` | ||
| 321 | + | ||
| 322 | +### 2. 查询部门列表 | ||
| 323 | + | ||
| 324 | +**接口**: `/srv/?a=flow_setting&t=flow_dept_list` | ||
| 325 | +**方法**: GET | ||
| 326 | +**参数**: | ||
| 327 | +```javascript | ||
| 328 | +{ | ||
| 329 | + form_code: string // 表单code | ||
| 330 | +} | ||
| 331 | +``` | ||
| 332 | + | ||
| 333 | +**请求头建议**: | ||
| 334 | +```javascript | ||
| 335 | +{ | ||
| 336 | + headers: { | ||
| 337 | + "only-data": true, // 去重 | ||
| 338 | + "keep-data": true // 缓存 | ||
| 339 | + } | ||
| 340 | +} | ||
| 341 | +``` | ||
| 342 | + | ||
| 343 | +### 3. 查询角色列表 | ||
| 344 | + | ||
| 345 | +**接口**: `/srv/?a=flow_setting&t=flow_role_list` | ||
| 346 | +**方法**: GET | ||
| 347 | +**参数**: | ||
| 348 | +```javascript | ||
| 349 | +{ | ||
| 350 | + form_code: string // 表单code | ||
| 351 | +} | ||
| 352 | +``` | ||
| 353 | + | ||
| 354 | +### 4. 搜索用户部门角色 | ||
| 355 | + | ||
| 356 | +**接口**: `/srv/?a=flow_setting&t=search_user_dept_role` | ||
| 357 | +**方法**: GET | ||
| 358 | +**参数**: | ||
| 359 | +```javascript | ||
| 360 | +{ | ||
| 361 | + form_code: string, // 表单code | ||
| 362 | + word: string // 搜索内容 | ||
| 363 | +} | ||
| 364 | +``` | ||
| 365 | + | ||
| 366 | +## 通用接口 | ||
| 367 | + | ||
| 368 | +### 1. 发送验证码 | ||
| 369 | + | ||
| 370 | +**接口**: `/srv/?a=sms` | ||
| 371 | +**方法**: POST | ||
| 372 | +**参数**: | ||
| 373 | +```javascript | ||
| 374 | +{ | ||
| 375 | + phone: string // 手机号码 | ||
| 376 | +} | ||
| 377 | +``` | ||
| 378 | + | ||
| 379 | +### 2. 获取七牛上传 Token | ||
| 380 | + | ||
| 381 | +**接口**: `/srv/?a=upload` | ||
| 382 | +**方法**: POST | ||
| 383 | +**参数**: | ||
| 384 | +```javascript | ||
| 385 | +qs.stringify({ | ||
| 386 | + name: string, // 文件名 | ||
| 387 | + hash: string // 文件哈希(ETag) | ||
| 388 | +}) | ||
| 389 | +``` | ||
| 390 | + | ||
| 391 | +### 3. 保存文件 | ||
| 392 | + | ||
| 393 | +**接口**: `/srv/?a=upload&t=save_file` | ||
| 394 | +**方法**: POST | ||
| 395 | +**参数**: | ||
| 396 | +```javascript | ||
| 397 | +qs.stringify({ | ||
| 398 | + format: string, // 图片格式 | ||
| 399 | + hash: string, // 文件哈希 | ||
| 400 | + height: number, // 图片高度 | ||
| 401 | + width: number, // 图片宽度 | ||
| 402 | + filekey: string // 七牛返回的文件key | ||
| 403 | +}) | ||
| 404 | +``` | ||
| 405 | + | ||
| 406 | +## 周期接口 | ||
| 407 | + | ||
| 408 | +### 1. 获取周期列表 | ||
| 409 | + | ||
| 410 | +**接口**: `/srv/?a=cycle_list` | ||
| 411 | +**方法**: GET | ||
| 412 | +**参数**: | ||
| 413 | +```javascript | ||
| 414 | +{ | ||
| 415 | + form_code: string // 表单唯一标识 | ||
| 416 | +} | ||
| 417 | +``` | ||
| 418 | + | ||
| 419 | +**返回**: | ||
| 420 | +```javascript | ||
| 421 | +{ | ||
| 422 | + is_cycle: boolean, // 是否需要周期选择 | ||
| 423 | + cycle_list: [ // 周期列表 | ||
| 424 | + { | ||
| 425 | + cycle_id: string, | ||
| 426 | + cycle_name: string, | ||
| 427 | + start_date: string, | ||
| 428 | + end_date: string | ||
| 429 | + } | ||
| 430 | + ] | ||
| 431 | +} | ||
| 432 | +``` | ||
| 433 | + | ||
| 434 | +## HTTP 请求缓存控制 | ||
| 435 | + | ||
| 436 | +### 请求去重(only-data) | ||
| 437 | + | ||
| 438 | +避免短时间内重复请求: | ||
| 439 | + | ||
| 440 | +```javascript | ||
| 441 | +fn(fetch.get('/api/xxx', params, { | ||
| 442 | + headers: { "only-data": true } | ||
| 443 | +})) | ||
| 444 | +``` | ||
| 445 | + | ||
| 446 | +### 持久化缓存(keep-data) | ||
| 447 | + | ||
| 448 | +缓存请求结果(30秒,最多50条): | ||
| 449 | + | ||
| 450 | +```javascript | ||
| 451 | +fn(fetch.get('/api/xxx', params, { | ||
| 452 | + headers: { "keep-data": true } | ||
| 453 | +})) | ||
| 454 | +``` | ||
| 455 | + | ||
| 456 | +### 同时使用 | ||
| 457 | + | ||
| 458 | +```javascript | ||
| 459 | +fn(fetch.get('/api/xxx', params, { | ||
| 460 | + headers: { | ||
| 461 | + "only-data": true, | ||
| 462 | + "keep-data": true | ||
| 463 | + } | ||
| 464 | +})) | ||
| 465 | +``` | ||
| 466 | + | ||
| 467 | +## 错误处理 | ||
| 468 | + | ||
| 469 | +### 特殊错误码 | ||
| 470 | + | ||
| 471 | +| 错误码 | 说明 | 处理 | | ||
| 472 | +|--------|------|------| | ||
| 473 | +| 402 | 未授权/登录失效 | 跳转登录页,show=false | | ||
| 474 | +| 其他 | 业务错误 | 显示错误提示 | | ||
| 475 | + | ||
| 476 | +### 402 处理示例 | ||
| 477 | + | ||
| 478 | +```javascript | ||
| 479 | +if (response.data.code === 402) { | ||
| 480 | + response.data.show = false; // 不显示默认错误 | ||
| 481 | + showToast({ | ||
| 482 | + message: '登录失效!将跳转到登录页面', | ||
| 483 | + duration: 1500, | ||
| 484 | + onClose: () => { | ||
| 485 | + window.location.href = location.origin + '/admin/'; | ||
| 486 | + } | ||
| 487 | + }) | ||
| 488 | +} | ||
| 489 | +``` |
docs/agent/04-示例数据.md
0 → 100644
This diff is collapsed. Click to expand it.
docs/agent/05-LangChain-Agent-使用指南.md
0 → 100644
This diff is collapsed. Click to expand it.
docs/agent/06-规则控制系统.md
0 → 100644
This diff is collapsed. Click to expand it.
docs/agent/07-页面数据提取指南.md
0 → 100644
This diff is collapsed. Click to expand it.
docs/agent/README.md
0 → 100644
| 1 | +# docs 文档索引 | ||
| 2 | + | ||
| 3 | +本文档目录为 LangChain Agent 设计表单生成功能提供完整的项目架构和数据结构参考。 | ||
| 4 | + | ||
| 5 | +## 文档列表 | ||
| 6 | + | ||
| 7 | +### 00-数据结构总览.md | ||
| 8 | +**用途**:了解项目的核心数据结构 | ||
| 9 | +**内容**: | ||
| 10 | +- 表单字段结构 (FormField) | ||
| 11 | +- 组件属性结构 (ComponentProps) | ||
| 12 | +- 选项结构 (Option) | ||
| 13 | +- API 响应结构 | ||
| 14 | +- 数据流转流程 | ||
| 15 | + | ||
| 16 | +**适合**:Agent 需要理解整体数据模型时 | ||
| 17 | + | ||
| 18 | +--- | ||
| 19 | + | ||
| 20 | +### 01-表单字段组件类型.md | ||
| 21 | +**用途**:了解所有支持的组件类型 | ||
| 22 | +**内容**: | ||
| 23 | +- 30+ 种组件类型完整列表 | ||
| 24 | +- 每种组件的用途和配置要点 | ||
| 25 | +- 组件注册位置 | ||
| 26 | +- 新增组件流程 | ||
| 27 | + | ||
| 28 | +**适合**:Agent 需要选择合适的组件类型时 | ||
| 29 | + | ||
| 30 | +--- | ||
| 31 | + | ||
| 32 | +### 02-component_props-配置规范.md | ||
| 33 | +**用途**:了解组件属性的详细配置 | ||
| 34 | +**内容**: | ||
| 35 | +- 通用属性(所有组件) | ||
| 36 | +- 各类组件专属属性 | ||
| 37 | +- Option 结构详解 | ||
| 38 | +- 数据提交格式 | ||
| 39 | +- 样式属性 | ||
| 40 | + | ||
| 41 | +**适合**:Agent 生成具体组件配置时 | ||
| 42 | + | ||
| 43 | +--- | ||
| 44 | + | ||
| 45 | +### 03-API-接口文档.md | ||
| 46 | +**用途**:了解后端 API 接口 | ||
| 47 | +**内容**: | ||
| 48 | +- 表单管理接口(增删改查) | ||
| 49 | +- 数据管理接口 | ||
| 50 | +- 组件接口 | ||
| 51 | +- 通用接口(上传、验证码等) | ||
| 52 | +- HTTP 缓存控制 | ||
| 53 | + | ||
| 54 | +**适合**:Agent 需要与后端交互时 | ||
| 55 | + | ||
| 56 | +--- | ||
| 57 | + | ||
| 58 | +### 04-示例数据.md | ||
| 59 | +**用途**:提供各类组件的配置示例 | ||
| 60 | +**内容**: | ||
| 61 | +- 20+ 个真实配置示例 | ||
| 62 | +- 完整表单配置示例 | ||
| 63 | +- 数据提交格式示例 | ||
| 64 | +- LangChain Prompt 模板 | ||
| 65 | + | ||
| 66 | +**适合**:Few-shot Learning、Prompt 模板构建 | ||
| 67 | + | ||
| 68 | +--- | ||
| 69 | + | ||
| 70 | +### 05-LangChain-Agent-使用指南.md | ||
| 71 | +**用途**:Agent 开发指南 | ||
| 72 | +**内容**: | ||
| 73 | +- 自然语言到组件映射表 | ||
| 74 | +- 必填/数量/选项识别规则 | ||
| 75 | +- 复杂需求处理 | ||
| 76 | +- Prompt 模板 | ||
| 77 | +- LangChain 代码示例 | ||
| 78 | +- 验证和错误处理 | ||
| 79 | + | ||
| 80 | +**适合**:**开发 LangChain Agent 的主要参考文档** | ||
| 81 | + | ||
| 82 | +--- | ||
| 83 | + | ||
| 84 | +### 06-规则控制系统.md | ||
| 85 | +**用途**:表单字段显示/隐藏规则系统 | ||
| 86 | +**内容**: | ||
| 87 | +- 规则系统概述(SHOW/HIDE 模式、AND/OR 逻辑) | ||
| 88 | +- 规则数据结构(rule_list、Rule、RuleExpr) | ||
| 89 | +- 核心函数分析(checkRules、evaluateMultipleRules、evaluateRuleCondition、handleCascadeHiding) | ||
| 90 | +- 触发机制(@active 事件) | ||
| 91 | +- 实际示例(简单/复杂/多规则/级联隐藏) | ||
| 92 | +- LangChain Agent 集成要点 | ||
| 93 | + | ||
| 94 | +**适合**:Agent 需要生成规则配置或理解字段间依赖关系时 | ||
| 95 | + | ||
| 96 | +--- | ||
| 97 | + | ||
| 98 | +### 07-页面数据提取指南.md | ||
| 99 | +**用途**:从实际运行的表单页面中提取配置数据 | ||
| 100 | +**内容**: | ||
| 101 | +- Pinia Store 数据存储结构 | ||
| 102 | +- 数据提取方法(Chrome DevTools MCP / Vue DevTools API / 直接 API) | ||
| 103 | +- 完整提取流程(打开页面 → 等待加载 → 提取数据 → 解析配置) | ||
| 104 | +- 数据提取模板和代码示例 | ||
| 105 | +- 数据转换和验证 | ||
| 106 | + | ||
| 107 | +**适合**:用户提供表单 URL 时,需要从页面提取完整配置 | ||
| 108 | + | ||
| 109 | +--- | ||
| 110 | + | ||
| 111 | +## 快速查找指南 | ||
| 112 | + | ||
| 113 | +### 按场景查找 | ||
| 114 | + | ||
| 115 | +| 场景 | 推荐文档 | | ||
| 116 | +|------|----------| | ||
| 117 | +| 理解项目架构 | 00-数据结构总览 | | ||
| 118 | +| 选择组件类型 | 01-表单字段组件类型、05-LangChain-Agent-使用指南 | | ||
| 119 | +| 生成配置 | 02-component_props-配置规范、04-示例数据 | | ||
| 120 | +| Few-shot 示例 | 04-示例数据 | | ||
| 121 | +| 开发 Agent | 05-LangChain-Agent-使用指南 | | ||
| 122 | +| 生成规则配置 | 06-规则控制系统 | | ||
| 123 | +| 理解字段依赖 | 06-规则控制系统 | | ||
| 124 | +| **从 URL 提取表单** | **07-页面数据提取指南** | | ||
| 125 | + | ||
| 126 | +### 按组件类型查找 | ||
| 127 | + | ||
| 128 | +| 组件类别 | 文档位置 | | ||
| 129 | +|----------|----------| | ||
| 130 | +| 文本输入类 | 01-表单字段组件类型(文档输入类) | | ||
| 131 | +| 选择类 | 01-表单字段组件类型(选择类)、04-示例数据(示例4-6) | | ||
| 132 | +| 日期时间类 | 01-表单字段组件类型(日期时间类)、04-示例数据(示例8) | | ||
| 133 | +| 上传类 | 01-表单字段组件类型(上传类)、04-示例数据(示例9) | | ||
| 134 | +| 特殊功能类 | 01-表单字段组件类型(特殊功能类)、04-示例数据(示例11-20) | | ||
| 135 | + | ||
| 136 | +### 按属性查找 | ||
| 137 | + | ||
| 138 | +| 属性 | 文档位置 | | ||
| 139 | +|------|----------| | ||
| 140 | +| 通用属性 | 02-component_props-配置规范(通用属性) | | ||
| 141 | +| options 配置 | 02-component_props-配置规范(选项类组件属性) | | ||
| 142 | +| 图片上传配置 | 02-component_props-配置规范(上传类属性) | | ||
| 143 | +| 样式属性 | 02-component_props-配置规范(样式属性) | | ||
| 144 | +| 规则配置 | 06-规则控制系统(数据结构、触发机制) | | ||
| 145 | +| 字段显示/隐藏 | 06-规则控制系统(SHOW/HIDE 模式) | | ||
| 146 | +| 级联隐藏 | 06-规则控制系统(级联隐藏逻辑) | | ||
| 147 | + | ||
| 148 | +## Agent 开发建议 | ||
| 149 | + | ||
| 150 | +### 1. 先读顺序 | ||
| 151 | + | ||
| 152 | +1. **05-LangChain-Agent-使用指南** - 了解 Agent 设计要点 | ||
| 153 | +2. **01-表单字段组件类型** - 了解可用的组件 | ||
| 154 | +3. **04-示例数据** - 获取 Few-shot 示例 | ||
| 155 | +4. **02-component_props-配置规范** - 深入了解配置细节 | ||
| 156 | +5. **06-规则控制系统** - 了解字段显示/隐藏规则(如需动态表单) | ||
| 157 | + | ||
| 158 | +### 2. 关键数据结构 | ||
| 159 | + | ||
| 160 | +Agent 必须正确理解的核心结构: | ||
| 161 | + | ||
| 162 | +```typescript | ||
| 163 | +// 最核心的结构 | ||
| 164 | +FormField { | ||
| 165 | + key: string | ||
| 166 | + value: any | ||
| 167 | + component_props: { | ||
| 168 | + tag: string // 决定组件类型 | ||
| 169 | + label: string // 显示名称 | ||
| 170 | + required: boolean | ||
| 171 | + // ... 其他属性 | ||
| 172 | + } | ||
| 173 | +} | ||
| 174 | +``` | ||
| 175 | + | ||
| 176 | +### 3. 组件类型映射表 | ||
| 177 | + | ||
| 178 | +直接参考 `05-LangChain-Agent-使用指南` 中的映射表,建立用户描述 → 组件类型的映射。 | ||
| 179 | + | ||
| 180 | +### 4. Few-shot 示例使用 | ||
| 181 | + | ||
| 182 | +从 `04-示例数据.md` 中提取典型示例作为 Prompt 的一部分,提高输出质量。 | ||
| 183 | + | ||
| 184 | +### 5. 验证策略 | ||
| 185 | + | ||
| 186 | +生成配置后,验证以下内容: | ||
| 187 | +- [ ] tag 值是否有效(参考 01 文档的组件列表) | ||
| 188 | +- [ ] required 是否为布尔值 | ||
| 189 | +- [ ] 选项类组件是否有 options 数组 | ||
| 190 | +- [ ] 上传类组件是否有合理的数量限制 | ||
| 191 | + | ||
| 192 | +## 数据流转图 | ||
| 193 | + | ||
| 194 | +``` | ||
| 195 | +用户自然语言 | ||
| 196 | + ↓ | ||
| 197 | + [Agent 解析] | ||
| 198 | + ↓ | ||
| 199 | + 意图识别 + 实体提取 | ||
| 200 | + ↓ | ||
| 201 | + 组件类型选择 + 配置生成 | ||
| 202 | + ↓ | ||
| 203 | + [验证输出] | ||
| 204 | + ↓ | ||
| 205 | +表单字段配置 JSON | ||
| 206 | + ↓ | ||
| 207 | + createComponentType() | ||
| 208 | + ↓ | ||
| 209 | + 动态表单渲染 | ||
| 210 | +``` | ||
| 211 | + | ||
| 212 | +## 联系方式 | ||
| 213 | + | ||
| 214 | +如有问题或需要补充文档,请查阅: | ||
| 215 | +- 项目源码:`src/hooks/useComponentType.js` | ||
| 216 | +- 组件目录:`src/components/` | ||
| 217 | +- API 目录:`src/api/` |
-
Please register or login to post a comment