01-表单字段组件类型.md
5.33 KB
表单字段组件类型
支持的组件类型列表
项目支持 30+ 种 动态表单字段组件,通过 component_props.tag 属性指定。
文本输入类
1. input - 单行文本输入
-
组件:
TextField - 用途: 短文本输入,如姓名、标题等
-
特殊功能: 微信扫一扫(
is_camera_scan)
2. textarea - 多行文本输入
-
组件:
TextareaField - 用途: 长文本输入,如备注、描述等
-
特性: 自动高度(
autosize)
3. number - 数字输入
-
组件:
NumberField - 用途: 数字类型输入,如年龄、数量等
选择类
4. radio - 单项选择
-
组件:
RadioField - 用途: 单选选项,如性别、是否等
-
数据结构:
options数组 -
特殊功能:
- 选项颜色(
color,background_color) - 补充信息输入(
is_input) - 描述信息(
desc_text,desc_url)
- 选项颜色(
5. checkbox - 多项选择
-
组件:
CheckboxField - 用途: 多选选项,如爱好、标签等
-
数据结构:
options数组 -
排列方向:
direction(vertical/horizontal)
6. select - 单列选择器
-
组件:
PickerField - 用途: 下拉单选
-
数据结构:
options数组 -
返回值: 选中的
value
日期时间类
7. date - 日期选择器
-
组件:
DatePickerField - 用途: 选择日期
8. time - 时间选择器
-
组件:
TimePickerField - 用途: 选择时间
9. datetime - 日期时间选择器
-
组件:
DateTimePickerField - 用途: 选择日期和时间
10. calendar - 日历选择器
-
组件:
CalendarField - 用途: 日历形式选择日期
上传类
11. image_uploader - 图片上传
-
组件:
ImageUploaderField - 用途: 上传图片到七牛云
-
配置:
-
max_count: 最大数量 -
max_size: 最大文件大小(MB)
-
-
返回值:
[{ url, name }]
12. file_uploader - 文件上传
-
组件:
FileUploaderField - 用途: 上传普通文件
特殊输入类
13. phone - 手机号输入
-
组件:
PhoneField - 用途: 手机号码输入和验证
- 验证: 11位手机号格式
14. email - 邮箱输入
-
组件:
EmailField - 用途: 邮箱地址输入和验证
15. id_card - 身份证输入
-
组件:
IdentityField - 用途: 身份证号码输入和验证
16. name - 姓名输入
-
组件:
NameField - 用途: 中文姓名输入
17. gender - 性别选择
-
组件:
GenderField - 用途: 性别选择(男/女)
位置类
18. address - 地址选择器
-
组件:
AreaPickerField - 用途: 省/市/区三级联动选择
-
数据: 使用
@vant/area-data
展示类
19. desc - 文字描述
-
组件:
DesField - 用途: 纯文字展示,不支持输入
20. divider - 分割线
-
组件:
DividerField - 用途: 视觉分割线
21. note - 富文本控件
-
组件:
NoteField - 用途: 富文本内容展示
22. marquee - 跑马灯
-
组件:
MarqueeField - 用途: 滚动公告文字
特殊功能类
23. sign - 电子签名
-
组件:
SignField - 用途: 手写签名板
-
依赖:
vue-esign
24. rate - 评分选择器
-
组件:
RatePickerField - 用途: 星级评分
25. appointment - 预约控件
-
组件:
AppointmentField - 用途: 时间段预约选择
- 数据结构: 复杂的日期+时间段结构
26. rule - 活动规则控件
-
组件:
RuleField - 用途: 显示规则说明,支持弹窗
27. multi_rule - 活动规则控件(多选)
-
组件:
MultiRuleField - 用途: 多选规则选项
28. contact - 联系人控件
-
组件:
ContactField - 用途: 联系人信息输入
29. button - 按钮控件
-
组件:
ButtonField - 用途: 自定义按钮
30. custom - 自定义控件
-
组件:
CustomField - 用途: 完全自定义的组件
高级类
31. group - 组集合输入控件
-
组件:
GroupField - 用途: 将多个字段分组显示
-
配置:
field_groups数组
32. org_picker - 树形选择控件
-
组件:
OrgPickerField - 用途: 组织架构树形选择
33. volunteer_group - 义工组别选择
-
组件:
VolunteerGroupField - 用途: 义工组别单选
34. table_editor - 表格编辑控件
-
组件:
TableField - 用途: 动态表格编辑,支持增删行
35. video - 视频控件
-
组件:
VideoField - 状态: 已注释,暂未使用
组件注册位置
所有组件在 src/hooks/useComponentType.js 中注册:
export function createComponentType(data) {
_.each(data, (item, index) => {
// 统一名称
item.name = item.key
// 根据 tag 分配组件
if (item.component_props.tag === 'input') {
item.component = TextField;
}
if (item.component_props.tag === 'radio') {
item.component = RadioField;
}
// ... 更多组件
})
}
新增组件流程
- 在
src/components/下创建组件目录 - 创建
index.vue组件文件 - 在
src/hooks/useComponentType.js添加 if 判断分支 - 组件必须支持以下 props:
-
item: Object (包含 component_props 和 value) - 必须通过 emit 发送 "active" 事件
-