跳到主要内容

BasicForm表单

基于Ant Design Vue 封装的form 组件 BasicForm,用于快速渲染表单的重要组件。为了简化使用,做了深度的hook封装。如果需要扩展,请修改hook /@/hooks/useForm.ts

通过jeecg封装的BasicForm表单控件,可以快速的渲染表单,不需要写太多原生代码。(当然各有利弊,此表单组件封装的很智能,同时可能会带来不灵活的问题,所以特别复杂的表单可以考虑采用原生写法)

使用场景

  • 快速创建一个表单和提交表单数据。
  • 需要对表单的控件字段进行输入校验。

BasicForm 的 schemas 配置介绍

1. 基本用法

Helllo World第一个入门例子


快速渲染一个表单域,表单域可以是输入控件,标签,下拉菜单,文本域等。 本例:创建一个登录表单,使用户输入用户名,密码后进行登录

通过自定义 FormSchema的字段,并绑定到useForm中的schemas参数,就渲染出了一个简单的登录表单

字段定义的映射关系如下:



2. 演示字典控件使用

页面效果及代码展示

比如“性别”字段 使用了下拉框控件 ,设置了下拉项,并设置默认值为 “未知”; BasicForm封装了很多控件类型,具体见3. 表单控件清单

通过component设置控件类型; 通过 componentPropsoptions来自定义下拉项; 通过defaultValue 来定义默认值;

3 表单控件清单总览

3.1 componentProps基础 占位符的使用

componentProps:用于定义组件的属性 ② placeholder:定义input属性占位符

3.2 控件类型详细用法

关于表单控件类型详细用法,请参考表单控件用法示例

名称描述componentProps属性
Input文本输入框Input属性
InputGroup分组文本输入框采用 插槽 的方式自定义分组文本,和input属性一致,InputGroup独有属性
InputPassword密码输入框和input属性一致, InputPassword独有属性
InputSearch文本搜索框InputSearch独有属性
InputTextArea文本域和Input属性一致
InputNumber数值输入框InputNumber属性
InputCountDown验证码组件InputCountDown属性
Select下拉框组件Select属性
ApiSelectApi下拉框组件numberToString:是否转成数值,默认为false;api:()=>promise :请求接口;params:{}:请求参数;resultField:返回集合名称;labelField:标题字段名称;valueField:值字段名称;immediate:是否初始化加载,默认true
TreeSelect树下拉选择组件TreeSelect属性
ApiTreeSelect远程Api树下拉选择组件TreeSelect返回值须一致,api:()=>promise :请求接口;params:{}:请求参数;resultField:返回集合名称;immediate:是否初始化加载,默认true
ApiRadioGroup远程Api单选框组 组件api:()=>promise :请求接口;params:{}:请求参数;isBtn:是否为按钮风格类型,默认false;numberToString:是否转成数值,默认为false;resultField:返回集合名称labelField:标题字段名称;valueField:值字段名称;immediate:是否初始化加载,默认true
RadioButtonGroup单选按钮组 组件options:自定义标题和值
RadioGroup单选框组 组件RadioGroup属性
Checkbox多选框组件Checkbox属性
CheckboxGroup多选框组 组件CheckboxGroup属性
AutoComplete自动完成组件AutoComplete属性
Cascader级联选择组件Cascader属性
DatePicker日期选择框组件DatePicker属性
MonthPicker月份选择组件-
WeekPicker日期选择组件-
TimePicker时间选择组件-
RangePicker日期时间范围选择组件RangePicker属性
RangeDate日期范围选择组件-
RangeTime时间范围选择组件-
Switch开关组件Switch属性
StrengthMeter密码组件showInput:是否显示密码输入框,默认为true;disabled:是否禁用,默认false
Slider滑动滚动条组件Slider属性
Rate评分组件Rate属性
Divider分割线组件Divider属性
JAreaLinkage省市县联动组件JAreaLinkage属性
JSelectPosition岗位选择组件JSelectPosition属性
JSelectRole角色选择组件JSelectRole属性
JSelectUser用户选择组件JSelectUser属性
JImageUpload图片上传组件JImageUpload属性
JDictSelectTag自定标签组件JDictSelectTag属性
JSelectDept选择部门组件JSelectDept属性
JAreaSelect省市级联动组件JAreaSelect属性
JEditor富文本组件JEditor属性
JMarkdownEditormarkdown组件JMarkdownEditor属性
JSelectInput可输入下拉框组件JSelectInput属性
JCodeEditor代码编辑器组件height:高度,字符串类型,默认值autodisabled:是否禁用,默认false;fullScreen:是否全屏,默认false;zIndex:全屏之后的index;theme:代码主题,如htmllanguage:语言;keywords:代码提示
JCategorySelect分类字典树组件JCategorySelect属性
JSelectMultiple下拉多选组件JSelectMultiple属性
JPopup弹窗选择组件JPopup属性
JSwitch开关组件JSwitch属性
JEasyCron定时表达式选择组件JEasyCron属性
JTreeDict分类字典树形组件JTreeDict属性
JInputPop多行输入窗口组件JInputPop属性
JCheckbox多选组件JCheckbox属性
JInput特殊查询组件JInput属性
JTreeSelect下拉树选择组件JTreeSelect属性
JSelectUserByDept根据部门选择用户组件JSelectUserByDept属性
JUpload上传组件JUpload属性
JSearchSelect字典表的搜索组件JSearchSelect属性
JAddInput动态创建input框value:绑定的值; min:列表上存在几条数据,删除按钮才会显示,数值类型,默认值位1
UserSelect用户选择组件UserSelect属性
RoleSelect选择角色组件RoleSelect属性
JRangeNumber数值范围输入框-

4. 组件的显示、隐藏与动态禁用

场景一:我们可以将id隐藏,让其不在页面上显示,但是编程使用。 场景二:当单选按钮 “对公司整体评价”

  • 选择满意的时候,隐藏不满意说明;
  • 选择不满意的时候,需要填写不满意原因说明,并将满意度禁用

默认静态隐藏id,满意时满意度可以拖动

“对公司整体评价”选择不满意的时候,需要填写不满意原因说明,并且满意度不可拖动

使用show或者ifShow 属性来控制表单组件的显示和隐藏

使用dynamicDisabled动态控制表单组件禁用

5. 内容提示与组件后缀

  • 场景一:对当前月份加上后缀月
  • 场景二:对迟到次数提示当前迟到几次,罚款多少元

5.1 页面效果及代码展示

使用suffix属性,完成组件后缀的提示

使用helpMessage提示帮助信息

可以使用helpComponentProps修改提示信息的样式

5.2 helpComponentProps的属性介绍

//最大宽度
maxWidth: string;
//是否显示序号
showIndex: boolean;
//文本列表,会覆盖helpMessage定义的文本
text: any;
//颜色
color: string;
//字体大小
fontSize: string;
//气泡框位置
placement: string;

6. 表单检验

对只有通过检验的表单才允许保存。例:对来访人员表单进行检验

触发表单验证效果

  • ① 填写 required 完成自动表单检验,rulesMessageJoinLabel是否加上标题

  • required 支持获取当前值判断触发 values代表当前表单的值

  • ③ 支持正则表达式pattern 和 自定义提示信息 message,使用属性rules即可

7. 自定义动态表单检验

  • 对"来访手机号" 没有填写的时候提示请输入手机号
  • 手机号填写不正确提示请输入正确的手机号。

手机号无值

手机号有值,但是手机号不正确

手机号验证通过

主要根据schemas属性动态检验dynamicRules

8. 字段插槽slot简单使用

例:在收集用户反馈中,下方提示文本信息,以便用户理解并填写

shemes中我们可以通过slot进行绑定,并在BasicForm中填写对应插槽的名称

9. 自定义组件

自定义组件分为两种方式

  • slot插槽方式
  • component方式

9.1 slot插槽方式

shemes中我们可以通过slot进行绑定,并在BasicForm中填写对应插槽的名称

9.2 component方式

10. 自定义渲染

例:商品描述需要商品名称加上价格乘以数量

  • ① 自定义组件 input输入框
  • ② 商品名称加上价格乘以价格

① 自定义渲染组件

② 自定义文本渲染

schemas api属性

属性类型默认值可选值说明
fieldstring--字段名
labelstring () => string 3.7.1+--标签名
subLabelstring--二级标签名灰色
suffixstring , number , ((values: RenderCallbackParams) => string / number); --组件后面的内容
changeEventstring--表单更新事件名称
helpMessagestring , string[]--标签名右侧温馨提示,见 4. 内容提示与组件后缀
helpComponentPropsHelpComponentProps--标签名右侧温馨提示组件,见 4. 内容提示与组件后缀
labelWidthstring , number--覆盖统一设置的 labelWidth
disabledLabelWidthbooleanfalsetrue/false禁用 form 全局设置的 labelWidth,自己手动设置 labelCol 和 wrapperCol
componentstring--组件类型,见 1.基本用法
componentPropsany,()=>--所渲染的组件的 props
rulesValidationRule[]--校验规则,见 5.表单检验
requiredboolean--开启表单验证
rulesMessageJoinLabelbooleanfalse-校验信息是否加入 label
itemPropsany--注入到FormItem的属性
colPropsColEx--组件占位比例,如colProps: { span: 18 }
defaultValueobject--所渲渲染组件的初始值
render(renderCallbackParams: RenderCallbackParams) => VNode / VNode[] / string--自定义渲染组件
renderColContent(renderCallbackParams: RenderCallbackParams) => VNode / VNode[] / string--自定义渲染组件(需要自行包含 formItem)
renderComponentContent(renderCallbackParams: RenderCallbackParams) => any / string --自定义渲染组内部的 slot
slotstring--自定义 slot,渲染组件
colSlotstring--自定义 slot,渲染组件 (需要自行包含 formItem
showboolean / ((renderCallbackParams: RenderCallbackParams) => boolean)--动态判断当前组件是否显示,css 控制,不会删除 dom
ifShowboolean / ((renderCallbackParams: RenderCallbackParams) => boolean) --动态判断当前组件是否显示,js 控制,会删除 dom
dynamicDisabledboolean / ((renderCallbackParams: RenderCallbackParams) => boolean)--动态判断当前组件是否禁用
dynamicRulesboolean / ((renderCallbackParams: RenderCallbackParams) => boolean)--动态判返当前组件你校验规则
dynamicPropskeystring--设置需要动态更新值对应的key (必须搭配dynamicPropsVal使用)
dynamicPropsVal((renderCallbackParams: RenderCallbackParams) => any)--动态更新当前组件props(必须搭配dynamicPropskey使用)