动态表单组件
安装
npm i element-ui
npm i addform
main.js 代码
import Vue from 'vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import addform from 'addform'
Vue.use(ElementUI)
Vue.use(addform)
示例
<add-form :objInfo="objinfo"></add-form>
objinfo: [
{ key: "name", title: "姓名", val: "张三", max: 10 },
{ key: "age", title: "年龄", val: 13, number: true },
{
key: "sex", title: "性别", val: "", dicts: [], query: async (a, b) => {
let url="http://api.lengyun.co:18070/erp/mallvisitor/goodslist.do";
let data = await axios.post(url,
{
"page": 1,
"pagesize": 24,
"fieldlist": "*",
"goodsname": a,
"fl1": 2,
"orderlist": "orderid asc"
})
b(data.data.data.list.map(a => {
return {
label: a.goodsname,
value: a.goodsid,
}
}))
}
},
{ key: "time", title: "出生日期", val: "", time: true },
]
表单参数列表
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|
| objInfo | 表单属性 | Arrary | [] | --- |
| width | 表单宽度 | Number | 780 | --- |
| title | 表单标题 | String | 新增 | String |
| isreadonly | 是否禁用表单 | Boolean | false | --- |
| labelWidth | 表单项标题宽度 | Number | 120 | --- |
| defaultItemWidth | 默认表单项目宽度 | Number | 320 | --- |
| fullscreen | 全屏 | Boolean | false | --- |
| showFooter | 是否显示footer | Boolean | true | --- |
| showCommitBtn | 是否显示提交按钮 | Boolean | true | --- |
| showCancelBtn | 是否显示取消按钮 | Boolean | true | --- |
| commitText | 提交按钮文本 | String | 提交 | --- |
| cancelText | 取消按钮文本 | String | 取消 | --- |
| center | footer内容是否居中 | String | center | center,left,right |
表单项参数列表
| 参数 | 说明 | 类型 | 默认值 |
|---|
| title | 标题 | String | --- |
| key | 关联model实体绑定值 | String | --- |
| val | value | any | any |
| number | 数字输入框 | Boolean | undefined |
| date | 日期输入框 | Boolean | undefined |
| time | 时间输入框 | Boolean | undefined |
| dicts | 选择框 | Array | [] |
| query | 选择框有效,查询方法,执行callBack方法赋值给dicts | Function(queryText,callBack) | undefined |
| area | 多行方本框 | Boolean | undefined |
| radio | 单选框 | Array | [] |
| checkbox | 多选框 | Array | [] |
| labels | 单选框和多选框有效,显示单选框和多选框字段,和values数组长度等长 | Array | [] |
Events
| 事件名称 | 说明 | 回调参数 |
|---|
| saveData | 保存表单数据 | form 对象数据 |
| close | 关闭表单窗体执行事件 | --- |
validate
| 校验规则 | 说明 | 值 |
|---|
| required | 不能为空 | true,false |
| email | 邮箱格式 | true,false |
| max | 最大长度 | number |
| validate | 自定义验证 | function(rule, value, callback) |
正则自定义验证示例
objInfo: [
{
key: "name",
title: "姓名",
val: "",
required: true,
validate: (rule, value, callback) => {
if (value === "fail") {
callback(new Error("测试错误!"));
} else {
callback();
}
},
},
{ key: "age", title: "年龄", val: "18", number: true },
{ key: "company", title: "公司", val: "", max: 10 },
{
key: "sex",
title: "性别",
val: "",
dicts: () => [],
query: (aa, b) => {
b(
[
{ label: "男", value: "1" },
{ label: "女", value: "0" },
].filter((b) => b.label == aa)
);
},
},
{
key: "url",
title: "日期",
val: "",
date: true,
width: 650,
},
{ key: "remark", title: "备注", val: "", text: true, width: 650 },
]
slot
表单项各项都可以用插槽重写,slot name=add+item.key
| name | 说明 |
|---|
| add-title | 弹窗标题 |
| add-footer | 弹窗footer |
项目地址
点击跳转至GITHUB