基于element自动表单设计

需求是根据JSON文件生成表单,包含配置和自动model属性以及表单验证,数据回显。

目录

动态表单数据示例:

表单设置JSON示例:

表单输入JSON示例:

表单按钮JSON示例:

抛出数据示例:

动态表单示例:

HTML模板部分:

PROPS部分:

表单验证器:

事件部分:

为了数据回显

props新增defaultValue:

computed增加监听:

data中申明

组件引用示例:

HTML 部分:(导入就不说了)

效果如下:


动态表单数据示例:

(page/home/index.js)

表单设置JSON示例:

/*** 搜索表单设置* @rules:  是否验证       {Boolean}* @inline: 是否内联       {Boolean}* @width:  label宽度     {String}* @align:  label对齐方式  {String}*/
const searchFormSetting = {rules: false,inline: true,ref: 'searchForm',width: '40px',align: 'left'
}

表单输入JSON示例:

/*** 搜索表单* @type: 输入框的类型* @label: 输入框的label* @module: 输入框的v-module属性,不写会默认咦中文首字母拼音作为改属性* 注:select需要配合options使用*/
const searchFormGroup = [{ label: '早餐', type: 'input', module: 'zaofan' },{ label: '日期', type: 'date' },{ label: '地点', type: 'select', options: addressOptions }
]

表单按钮JSON示例:

/*** 搜索表单按钮事件* @name: 按钮名称* @event: 按钮事件名(子组件直接@eventName=handleCustomizeEvent)* @primary:按钮类型(按钮的颜色)* @icon:按钮的小图标*/
const searchFormButton = [{ name: '查询', event: 'search', type: 'primary', icon: 'el-icon-search' },{ name: '重置', event: 'reset', icon: 'el-icon-refresh-left' },{ name: '一键导出', event: 'export', icon: 'el-icon-download' }
]

抛出数据示例:

export { searchFormSetting, searchFormGroup, searchFormButton}

动态表单示例:

(components/autoForm/index.vue)

HTML模板部分:

<template><el-form ref="autoForm" :model="autoForm" :rules="autoRules" :label-width="setting.width" :inline="setting.inline" :label-position="setting.align" :id="setting.inline"><el-form-item v-for="(item, key) in form" :key="key" :label="item.label" :prop="chineseToPinYin(item.label)"><!--input--><template v-if="item.type === 'input'"><template><el-input v-model="autoForm[item.module || chineseToPinYin(item.label)]" :placeholder="'请输入'+item.label" @input="handleRefresh"/></template></template><!--select--><template v-if="item.type === 'select'"><el-select filterable v-model="autoForm[item.module || chineseToPinYin(item.label)]" :placeholder="'请选择'+item.label" @change="handleRefresh"><el-option v-for="(item_, key_) in item.options" :key="key+'_'+key_" :label="item_.label" :value="item_.value"></el-option></el-select></template><!--date--><template v-if="item.type === 'date'"><el-date-picker type="date" value-format="yyyy-MM-dd" format="yyyy-MM-dd" :placeholder="'请选择'+item.label" v-model="autoForm[chineseToPinYin(item.label)]" @change="handleRefresh"></el-date-picker></template><!--radio--><template v-if="item.type === 'radio'"><el-radio-group v-model="autoForm[item.module || chineseToPinYin(item.label)]" @change="handleRefresh"><el-radio v-for="(item_, key_) in item.options" :key="key_" :label="item_.label" :value="item_.value"></el-radio></el-radio-group></template><!--textarea--><template v-if="item.type === 'textarea'"><el-input type="textarea" v-model="autoForm[item.module || chineseToPinYin(item.label)]"/></template></el-form-item><!--BUTTON--GROUP--><el-form-item v-if="button"><el-button v-for="(item, key) in button" :key="'btn-'+key" :class="item.float" :icon="item.icon" :type="item.type" @click="handleButton(item.event, 'autoForm')">{{ item.name }}</el-button></el-form-item></el-form>
</template>

PROPS部分:

props: {setting: {type: Object,default: () => ({ref: 'form',width: '80px',align: 'left'})},button: {type: Array,default: () => [{ name: '查询', event: 'search', type: 'primary', icon: 'el-icon-search' },{ name: '重置', event: 'reset', type: 'success', icon: 'el-icon-refresh-left' }]},form: {type: Array,default: () => [{ label: '类型', type: 'select' },{ label: '分数', type: 'input' },{ label: '时间', type: 'date' }]}}

表单验证器:

    this.form.forEach(item => {this.autoRules[chineseToPinYin(item.label)] = verify(item)})function verify (item) {let rules = []if (item.required && item.type === 'input') {rules = [{ required: true, message: `请输入${item.label}`, trigger: ['blur', 'change'] }]} else if (item.required && item.type === 'select') {rules = [{ required: true, message: `请选择${item.label}`, trigger: ['blur', 'change'] }]} else if (item.required && item.type === 'textarea') {rules = [{ required: true, message: `请输入${item.label}`, trigger: ['blur', 'change'] }]} else if (item.required && item.type === 'date') {rules = [{ type: 'date', required: true, message: `请选择${item.label}`, trigger: ['blur', 'change'] }]} else if (item.required && item.type === 'radio') {rules = [{ required: true, message: `请选择${item.label}`, trigger: ['blur', 'change'] }]}return rules}

事件部分:

    handleButton (event, autoForm) {if (event === 'reset' || event === 'cancel') {this.autoForms = {}} else {this.$refs[autoForm].validate((valid) => {if (valid) {this.$emit(event, this.autoForms, this.setting.ref)} else {this.$message({type: 'warning',message: '请检查您的输入'})}})}},handleRefresh () {this.$forceUpdate()}

为了数据回显

props新增defaultValue:

    defaultForm: {type: Object,default: () => ({})}

computed增加监听:

    autoForm () {return this.autoForms}

data中申明

(注意区分autoForms和autoForm)

    return {autoForms: this.defaultForm}

组件引用示例:

(page/home/index.vue)

HTML 部分:(导入就不说了)

<auto-form :setting="searchFormSetting" :form="searchFormGroup" :button="searchFormButton" :default-form="searchForm" @search="handleClickSearchFormSearch" @export="handleClickSearchFormExport"/>

效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/211213.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛气霸屏-快抖云推独立版V1.6.7

介绍 快抖云推全插件独立版是最近很火的牛气霸屏系统独立版&#xff0c;牛气霸屏系统就是商家通过系统在线创建抖音或快手霸屏活动&#xff0c;并生成该活动的爆客二维码&#xff0c;用户通过扫二维码即可参加活动&#xff08;活动可以是领取卡劵&#xff0c;抽奖等&#xff0…

便携式心电图机方案_基于MT6735平台的手持心电图机

便携式心电图机具备体积小、易携带、兼容12导模式的特点&#xff0c;通过工频滤波、基线滤波和肌电滤波等处理&#xff0c;能够获得更精准的心电图谱。该设备可以与医院信息系统(HIS)相连接&#xff0c;实现患者信息的共享。采集的心电数据可以通过无线方式发送到心电判读平台&…

2023亚太杯数学建模APMCM竞赛C题思路讲解:基于ARIMA与机理模型进行预测

本文针对6大问题,从多角度分析了我国新能源电动汽车发展形势与前景。文中针对不同问题,采用了层次分析法、时间序列模型、机理模型、回归模型等数学方法。并结合实例数据,对相关模型进行求解,以量化预测了新能源电动汽车在政策驱动、市场竞争、温室气体减排等多个方面的潜在贡献…

【成功案例】7日ROI超65%!注册率超85%!雷霆网络 联手 NetMarvel 实现效果翻倍增长!

雷霆网络旗下多款角色扮演手游在国内长期霸占买量榜前列&#xff0c;而这股“买量大户”的风依旧吹到了海外&#xff0c;其中《地下城堡3》依靠买量在境外业务收入上增长明显&#xff0c;目前市场潜力巨大。 然而&#xff0c;面对竞争激烈的PRG游戏出海局面&#xff0c;打开市…

探索WebStorm 2023 Mac/win:最强大的JavaScript开发工具

在当今的软件开发领域&#xff0c;JavaScript已经成为了一种不可或缺的编程语言。而在众多的JavaScript开发工具中&#xff0c;WebStorm一直以其强大的功能和友好的用户界面脱颖而出。现在&#xff0c;我们迎来了全新的WebStorm 2023版本&#xff0c;它将带给开发者们更加出色的…

目前软件测试行业发展如何?第三方软件检测机构是否是未来趋势?

随着软件行业的快速发展&#xff0c;软件质量的重要性日益凸显&#xff0c;软件测试也成为了软件开发过程中不可或缺的环节。那么目前软件测试行业的发展如何?第三方软件检测机构又是否是未来软件测试的趋势呢?接下来我们将从多个角度为您详细解答。 目前软件测试行业呈现快…

【计算思维题】少儿编程 蓝桥杯省赛考试计算思维真题 中小学生计算思维真题详细解析第12套

中小学生蓝桥杯计算思维题真题解析第12套 1、机器人可以向上、下、左、右移动,每步移动一个格我们把机器人移动到某一格子的最短步数,叫做格子与机器人的距离。在下图中,与机器人的距离不超过3的所有格子中,一共有多少个“X”标志? A、6 B、7 C、8 D、9 答案:C 考点…

【第二部分:结构】ARM Realm Management Monitor specification

目录 概念Realm概述Realm执行环境Realm寄存器Realm内存Realm处理器功能IMPDEF系统寄存器 Realm属性Realm活性Realm生命周期状态状态转换 Realm参数Realm描述符 颗粒Granule颗粒属性颗粒所有权颗粒生命周期状态状态转换颗粒抹除 Realm执行上下文概述REC属性REC指数和MPIDR值REC生…

解决错误0x80071ac3的问题,错误代码0x80071ac3的原因

在使用电脑的过程中可能会出现错误0x80071ac3的代码问题&#xff0c;一旦出现这样的问题解决起来可能会有点麻烦&#xff0c;其实这个错误是和磁盘的问题相关&#xff0c;可以将电脑重启尝试能否解决错误0x80071ac3问题&#xff0c;如果依然不能解决问题的话&#xff0c;那么大…

java--继承快速入门

1.什么是继承 java中提供了一个关键字extends&#xff0c;用这个关键字&#xff0c;可以让一个类和另一个类建立其父子关系。 2.继承的特点 子类能继承父类的非私有成员(成员变量&#xff0c;成员方法)。 3.继承后对象的创建 子类的对象是由子类、父类共同完成的。 4.继承的…

转行要趁早!盘点网络安全的岗位汇总

前段时间&#xff0c;知名机构麦可思研究院发布了《2023年中国本科生就业报告》&#xff0c;其中详细列出近五年的本科绿牌专业&#xff0c;信息安全位列第一。 对于网络安全的发展与就业前景&#xff0c;知了姐说过很多&#xff0c;作为当下应届生收入较高的专业之一&#xf…

最好的猫罐头品牌有哪些?精选的5款口碑好的猫罐头推荐!

对于一个刚入门的养猫小白来说&#xff0c;面对市面上琳琅满目的猫罐头选择确实让人头大。我们总想选到营养价值高的罐头&#xff0c;但又怕猫咪不喜欢吃&#xff0c;也担心选到不安全的产品。 最好的猫罐头品牌有哪些&#xff1f;根据我开宠物店7年的经验&#xff0c;今天我将…