Skip to content

EyForm组件示例(推荐使用)

TIP

开发过程切勿使用直接修改配置的方式修改元素属性,而应该采用依赖注入并配合setElProps,setFormProps等方式修改元素属性

常规使用form组件时我们需要完整定义value的值和在template写繁多的组件,当组件之间发生联动时需要使用watch或事件触发解。

本组件则是将这部分都封装了起来。在配置中完成实现各个组件,并将联动主逻辑实现在配置当中,使得整体代码更易阅读、维护。

基本使用 formGroup

EyForm中你依旧可以保留ant-design-vueform组件的配置

value: 该值如果没有默认值可直接设置为{}组件内部会处理,免去开发者设置初始value的时间

form-group:用配置form表单数组,formGroupItem具体配置见表

formGroupItem.formProps:对应ant-design-vue中form-item配置

formGroupItem.elProps:对应ant-design-vue中表单元素配置

依赖注入——表单项动态关联 depends

结合[depends]属性,在列表formGroupItem中使用depend即可完成动态关联

可用设置包括 setFormProp,setFormProps,setElProp,setElProps,toogle

具体使用查看depends && formGroupItem.depend

如下:

  • 选中北京则不展示城市选项
  • 省份选中广东、湖南则各自展示其城市
  • 员工选择是则证件号必填,选择否则证件号为非必填

栅格布局 grid

gird: grid布局实现在不同屏幕下响应式展示、主要用于表单搜索项

formGroupItem.colDouble: 将当前表单项两倍于其他表单项展示,如下方【时间范围】

值转化 formatter

通常用于创建时展示字段与提交字段不同时

如下是

  • 将字符串转为数字

  • 将的dayjs转为 string与时间戳

  • 将选中的数组转字符串

formatter当前值 'dateToString'| 'dateToTime' | 'numToString'| 'stringToNum'

TIP

dateToString默认使用的是'YYYY-MM-DD'格式,如有其他形式请使用TimePicker自带属性配置

插槽使用

未应对一些特殊情况,ey-from表单支持用户使用插槽的形式来操作自己的form表单

显示转化

比如编辑时后端传一个string,前端需要显示用number,则使用showFormatter:stringToNumber

或者在formatter为numberToString时自动进行显示转换

WARNING

敬请期待

特殊字段释意

formGroupItem.renderKey

render后面接着的类型就是要渲染的form表单类型

renderInput | renderInputNumber | renderTextarea | renderSelect | renderMonthPicker | renderDatePicker | renderRangePicker | renderCheckbox | renderRadio | renderSwitch

formGroupItem.elProps

对应renderKey渲染元素的props,例如下方renderKey为renderInput,那么此时elProps即为input组件的属性

注意:renderSelect值是renderSelect时对应的时EySelect组件而不是ant-design-vue中的select

ts
export const formGroup: FormGroupItem[] = [
    {
    key: 'name',
    label: '姓名',
    renderKey: 'renderInput',
    formProps: {
      required: true,
    },
    elProps:{
      disabled:true
    }
  },
]

grid

eyFom保留antDesign原始布局,即添加layout属性(horizontal | vertical | inline)即可设置对应布局。

在此基础上添加grip布局,只需为form加入grid属性即可,该属性常用于表格之类的搜索栏使用,使得搜索框可对应页面响应式变化

开启grid布局之后,可在每个item中配置colspan属性自定义效果,若配置了colspanDouble属性则会占据两个默认配置位置

grid默认相关配置如下:

js
 const colspan = { xs: 24, sm: 24,  md: 8, lg: 8, xl: 6, xxl: 4, xxxl: 4 }

depends && formGroupItem.depend

depends

TIP

注意键值应是表单对应的key,而值应该是有响应式数据组成的数组

我们可以如下用depends注入对应的依赖对象到eyform,对应props类型如下

  depends: {
    type: Object as PropType<
      Record<string, (Ref<any> | (() => UnwrapNestedRefs<any>))[]>
    >,
    default: () => ({}),
  },

当依赖项中的值变化时,若formGroupItem配有depend字段,则会自动执行

ts
const formModel = reactive({
  province: undefined,
  city: undefined,
  isStaff: 1,
});
const { province } = toRefs(formModel);
const depends = {
  city: [province],
  idNumber: [() => formModel.isStaff], 
};

formGroupItem.depend

第一项会返回setFormProp,setFormProps,setElProp,setElProps,toogle

toogle传入boolean控制显隐

setElProp,setFormProp使用setElProp(key,value),setFormProp(key,value)控制单个属性

setElProps,setFormProps有个回调函数,传入当前配置与依赖项数组,用户的返回值即为设置的属性

ts

depend({ setFormProp }, [isStaff]) {
  // 设置form的必选属性
  setFormProp('required', !!isStaff);
}

API

Attributes

成员说明类型默认值
value初始化数据Record<string, any>{}
formGroup表单项配置Array<FormGroupItem>-
grid开启栅格布局booleanfalse
gripInlineBtn栅格布局中按钮和输入框是否位于同一行booleanfalse
formProps用于 v-bind 绑定 antDForm 表单组件 propsFormProps{}
rowPropsrow 相关配置RowProps{}
depends表单依赖项Record<string, (Ref<any> | (() => UnwrapNestedRefs<any>))[]>{}

FormGroupItem

成员说明类型默认值
key表单中的key(唯一标识)string-
renderKey表单要渲染的元素renderKey 详细类型见文档说明renderInput
formatter要转化输出的值formatterKey | ((data: unknown) => unknown)-
label表单labelstring-
formProps对应ant-design-vue中form-item的值FormItemProps-
optionsey-select中的options选项SelectProps['options']-
elProps对于renderKey元素的属性T-
colPropsgrid布局时候可使用ColProps-
colDouble默认布局时使用双倍的col值boolean-
dependformitem的依赖项(FormGroupItemDepend: TFormGroupItemDepend, deps: unknown[]) => void-

Exposes

事件名说明类型
getFormData获取处理后的form值Function
其他说明其他则与ant-design-vue的form完全相同,点击查看文档

一个让开发效率增倍的组件库