# 表单 FormAuto
解决表单交互中开发重复性高、配置复杂等问题。
# 基础表单
{}
{}
复制代码
# 对组件增加的预设
- 所有日期时间相关组件
valueFormat增加unix10 位时间戳转化功能,并对valueFormat增加默认值。原因是我也不知道为什么 JS 要多出 3 位毫秒,而后端时间格式可以如此多的想法。😭
daterange|timerange|datetimerange|numberrange|slider对应组件增加 rangeName 属性,方便快速迭代到对应接口传参内。slider对应组件增加 range 属性时,默认值为组件的[min, max]。select组件远程搜索remote: true时 清空 或 搜索结果为空,再次点击下拉选框将重置筛选并重新请求。
复制代码
# 绑定显隐
表单项增加 bindShow 属性,解决复杂表单交互
{}
复制代码
# options 设置
export declare interface ElAutoOption {
icon?: string;
label: string;
type?: "primary" | "warning" | "info" | "danger";
value: string | number;
disabled?: boolean;
children?: ElAutoOption[];
props?: Record<string, any>;
}
export declare type ElAutoMixinOptions =
| Record<string | number, string | number>
| Array<string | ElAutoOption>;
options标准规范值是[{label: "苹果", value: "apple", icon:"el-icon-apple", disabled: false }, ...]options值为["苹果", ...]文本数组时,label与value皆为 "苹果"options值为{apple: "苹果", banana: "香蕉", ...}对象时,label为值苹果,value为对应键值appleoptions值为async () => Promise<ElAutoOption>的 Promise 函数时,返回值按 1~3 条规则匹配。type: "select"下options值为(query?,page?) => Promise<ElAutoOption>的 Promise 函数时,返回值同样按 1~3 条规则匹配。remote: true时 query 值提供搜索关键字,loadScroll:true时 page 值提供加载页码type: "cascader"级联选择框只支持应用标准规范值。
{}
复制代码
# 远程选择框的回显
type 为 select 并且 开启远程搜索的功能时,需要提供回显能力。清空时,默认删除回显值
{}
复制代码
# 自定义动态插槽
支持对表单项自定义动态插槽,通过设置 slot 属性,可设置boolean、string类型,设置为 true 时,slot 名为属性的字段名,slot 为字符串类型时,多个字段可复用一个插槽,插槽携带参数如下:
item字段属性model表单 modelname字段名
表单字段: {}
复制代码
# 属性
# Props
| 参数 | 描述 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| v-model | 表单数据对象 | object | - | {} |
| data | 表单项配置 | Record<name:string,FormAutoField> | - | {} |
| gutter | <el-row> 属性 gutter | number | - | 15 |
| over-collapse | 超出 设定值 表单项隐藏 | number / boolean | - | false |
[prop:string] | 继承 el-form 所有 Prop | any | - | - |
# FormAutoField
| 参数 | 描述 | 类型 | 默认值 |
|---|---|---|---|
| 标签相关设置 | |||
| label | 标签名 | string | - |
| labelHidden | 是否隐藏标签 | boolean | false |
| labelTooltip | 表单项提示 | string / boolean | false |
| labelWidth | 标签宽度 | string | - |
| value | 字段默认值 | any | - |
| 控件相关设置 | |||
| type | 必填,控件类型 | 参照 type Enum 表 | - |
| slot | 自定义动态插槽,设为 true 时,slot 为 name,详情可参考 自定义动态插槽示例 | string / boolean | false |
| component | 组件名称,type 为 component 时有效 | string | - |
[prop:string] | 可直接追加 type 对应组件的 prop | any | - |
| disabled | 是否禁用字段 | boolean | false |
| placeholder | 占位符 | array | - |
| on | 设置 type 对应组件的事件 | object | {} |
| rangeName | 日期范围名 type 为 daterange/timerange/datetimerange/numberrange/slider 选填 | array<string> | false |
| suffixTime | type 为 daterange 选填,为日期范围增加 00:00:00 - 23:59:59 | boolean | false |
| valueFormat | type 为 日期类控件 选填,格式与 element-ui 一致,增加 unix 10 位时间戳格式 | string | - |
| options | type 为 check/radio/select 必填,详情可参考 options 设置 | object / array / Promise | [] |
| allOption | type 为 select/radio/radiobutton 有效,为选项框增加 全部 option | boolean | false |
| remote | 支持接口搜索,type 为 select 有效 | boolean | false |
| notAll | 不显示全选,type 为 check 有效 | boolean | false |
| 表单相关设置 | |||
| col | 占用栅格 | number | 24 |
| required | 是否必填 | boolean | false |
| ruleType | 为 async-validator 必填设置另外配置类型 | string | - |
| bindShow | 绑定显示 | (model)=>boolean | - |
| addRules | 追加验证规则 | array | - |
# type Enum
| 值 | 对应组件 | 描述 |
|---|---|---|
| text | <el-input type="text"> | 文本输入框 |
| password | <el-input type="password"> | 密码输入框 |
| textarea | <el-input type="textarea"> | 文本域 |
| number | <el-input-number> | 计数器 |
| numberrange | <el-number-range> | 数值范围 |
| date | <el-date-picker type="date"> | 日期选择 |
| year | <el-date-picker type="year"> | 年份选择 |
| years | <el-date-picker type="years"> | 多年份选择 |
| month | <el-date-picker type="month"> | 月份选择 |
| months | <el-date-picker type="months"> | 多月份选择 |
| week | <el-date-picker type="week"> | 周选择 |
| dates | <el-date-picker type="dates"> | 多日期选择 |
| datetime | <el-date-picker type="datetime"> | 日期时间选择 |
| daterange | <el-date-picker type="daterange"> | 日期范围选择 |
| monthrange | <el-date-picker type="date"> | 月份范围选择 |
| datetimerange | <el-date-picker type="datetimerange"> | 日期时间范围选择 |
| time | <el-time-picker> | 时间选择 |
| timerange | <el-time-picker is-range> | 时间范围选择 |
| radio | <el-radio> | 单选框 |
| radiobutton | <el-radio-button> | 单选框 |
| check | <el-checkbox> | 复选框 |
| select | <el-select> | 选择框 |
| slider | <el-slider> | 滑动选择框 |
| switch | <el-switch> | 开关 |
| cascader | <el-cascader> | 多级选择框 |
| rate | <el-rate> | 评分 |
| component | <component :is="item.component"> | 自定义组件 |
# Method
| 方法名 | 描述 | 参数 |
|---|---|---|
| reset() | 重置表单 | - |
| refreshOptions() | 刷新选项 | (fieldName: string, clearEcho:boolean=true)=>void |
| validate() | 对整个表单进行校验的方法 | Promise<void> | (valid:boolean)=>void |
| validateField() | 对整个表单进行校验的方法 | (prop:string,callback:(errMsg:string)=>void)=>void |
| getModel() | 获取表单所有参数 | ()=>Record<string,any> |
| setModel() | 设置表单对应参数 | (model:Record<string,any>)=>void |
| getOptions() | 获取字段对应的 options,返回 value 为 key 的集合 | (name:string)=>Record<string, any> |
# Slot
| 插槽 | 描述 |
|---|---|
| - | 按钮插槽 |
| prepend | 表单内首部插槽 |
| append | 表单尾部,按钮之前插槽 |
# Scope Slot
| 插槽名称 | 描述 |
|---|---|
| 自定义名称 | 自定义表单项的内容,参数为 { item, model, name } |
# Event
| 事件名称 | 说明 | 回调参数 |
|---|---|---|
| [event:name] | 可直接追加 <el-form> 所有事件 | - |