Vue + element-ui实现动态表单项以及动态校验规则

devtools/2024/9/22 16:08:31/

Vue + element-ui实现动态表单项以及动态校验规则

情境

项目需要实现一个功能,表单中某个表单项产品id支持动态新增多个产品id表单项,每个产品id表单项都需要有校验规则,校验失败时各自有对应的校验提示

重点分析

  1. 表单对象内字段并非固定,需要根据交互动态新增
  2. 表单校验规则并非固定,需要根据字段新增动态新增对应校验规则
  3. 接口提交时并非提交多个产品id字段,需要将多个产品id文本字段整合为一个产品id数组字段

实现

核心:表单增加动态多个产品id字段以及产品id数组字段,产品id字段前缀相同,通过后缀序号区分不同字段,实际提交时整合字段为数组字段

1.模板语法

产品id数组字段的长度与产品id字段的个数始终保持一致

<el-form:model="addForm"label-suffix=":"label-width="120px":rules="rules"ref="form"
><el-col :span="12" v-for="(item, index) in addForm.superModelSkuIdList" :key="index"><el-form-item :label="formatSkuId(index)" :prop="'skuId' + index"><div class="skuId-item"><el-inputv-model.trim="addForm['skuId' + index]"placeholder="请输入产品id"maxlength="50"style="display: inline-block;"></el-input><istyle="display: inline-block;"class="el-icon-circle-plus-outline icon"@click="handleAddId"/></div></el-form-item></el-col>
</el-form>

2.核心逻辑

export default {data() {return {addForm: {// ...其他字段superModelSkuIdList: [''],},}},computed: {// 表单项动态变化,校验规则也需作为计算属性动态变化rules() {const checkSkuId = (rule, value, callback) => {// 产品id的校验逻辑}let staticRules = {// 其他字段的校验逻辑}let skuIdRules = {}let rule = [{validator: checkSkuId,trigger: 'blur',},]// 为每个产品id字段设置相同的校验逻辑this.addForm.superModelSkuIdList.forEach((item, index) => {skuIdRules['skuId' + index] = rule})return Object.assign(staticRules, skuIdRules)}},methods: {// 新增产品idhandleAddId() {this.addForm.superModelSkuIdList.push('')this.$set(this.addForm, 'skuId' + (this.addForm.superModelSkuIdList.length - 1), '')},// 根据产品id数组字段生成多个产品id字段createSkuIds() {// 使用this.$set保证新增对象字段具有响应性this.addForm.superModelSkuIdList.forEach((item, index) => {this.$set(this.addForm, 'skuId' + index, item)})},// 打开表单编辑弹窗时初始化产品id以及产品id数组字段openAddDialog(title, row = {}) {// ...其他逻辑this.addForm.superModelSkuIdList = [...row.superModelSkuIdList] || ['']this.createSkuIds()},// 需求中提交表单前需要清除产品id为空的项,清空后重新生成非空值的表单项clearEmptySkuId() {let list = []this.addForm.superModelSkuIdList.forEach((item, index) => {if(this.addForm['skuId' + index]) list.push(this.addForm['skuId' + index])delete this.addForm['skuId' + index]})this.addForm.superModelSkuIdList = listthis.createSkuIds()},// 接口提交时过滤掉所有产品id字段,仅需要产品id数组字段用于提交即可deleteSkuIds(skuInfo) {this.addForm.superModelSkuIdList.forEach((item, index) => {delete skuInfo['skuId' + index]})return skuInfo},// 表单提交submitForm() {this.$refs.form.validate((val) => {if (val) {this.clearEmptySkuId()let param = {skuInfo: this.deleteSkuIds({...this.addForm}),// ...其他参数}// ...执行提交相关逻辑}})},// 清空还原表单字段,去除产品id字段仅保留产品id数组字段resetForm() {this.addForm = {// ...其他字段superModelSkuIdList: [''],}},}
}

http://www.ppmy.cn/devtools/115535.html

相关文章

【后端开发】JavaEE初阶—线程的理解和编程实现

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解多线程的知识哟~~~&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【后端开发】JavaEE初阶——计算机是如何工作的&#xff1f;&#xff1f;&#xff1f;-CSDN博客 &#x1f308;感兴趣的小伙…

【C#】 EventWaitHandle的用法

EventWaitHandle 是 C# 中用于线程间同步的一个类&#xff0c;它提供了对共享资源的访问控制&#xff0c;以及线程间的同步机制。EventWaitHandle 类位于 System.Threading 命名空间下&#xff0c;主要用于实现互斥访问、信号量控制等场景。 创建 EventWaitHandle 创建一个 E…

【学习笔记】STM32F407探索者HAL库开发(五)F407时钟系统配置

【学习笔记】STM32F407探索者HAL库开发&#xff08;四&#xff09;F407时钟系统配置 1 F407_CubeMX时钟树配置&#xff08;传送门&#xff09;2 STM32F407时钟树2.1 STM32F407时钟系统图2.2 STM32F103时钟树简图2.2.1 高速部分2.2.2 低速部分 2.3 时钟源2.3.1 外部时钟源2.3.2 …

C# 中的NPOI 库

NPOI 是一个开源的 .NET 库&#xff0c;用于读写 Microsoft Office 格式的文件&#xff0c;如 Excel (.xls, .xlsx), Word (.doc, .docx), PowerPoint (.ppt, .pptx) 等。它提供了一个与 Microsoft Office 文件格式兼容的 API&#xff0c;使得开发者可以在不依赖 Microsoft Off…

【416】【移山所需的最少秒数】

又是一周力扣赛 我这里犯了个错误&#xff0c;我开始认为sort一下&#xff0c;然后对最快的工人进行"压榨"&#xff0c;完成mount高的山就是最少秒数。 class Solution:def minNumberOfSeconds(self, mountainHeight: int, workerTimes: List[int]) -> int:worke…

手写Spring

简单实现Spring基于注解配置 ComponentScan Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) public interface ComponentScan {String value() default ""; } 相当于component-scan HspSpringConfig ComponentScan(value "spring.write.com…

面试金典题9

字符串轮转。给定两个字符串s1和s2&#xff0c;请编写代码检查s2是否为s1旋转而成&#xff08;比如&#xff0c;waterbottle是erbottlewat旋转后的字符串&#xff09;。 示例1: 输入&#xff1a;s1 "waterbottle", s2 "erbottlewat"输出&#xff1a;Tru…

计算机毕业设计Python知识图谱美团美食推荐系统 美团餐厅推荐系统 美团推荐系统 美食价格预测 美团爬虫 美食数据分析 美食可视化大屏

《Python知识图谱美团美食推荐系统》开题报告 一、研究背景与意义 随着信息技术的飞速发展和互联网应用的普及&#xff0c;人们的消费习惯逐渐从线下转移到线上&#xff0c;外卖行业迎来了前所未有的发展机遇。美团作为国内领先的生活服务电子商务平台&#xff0c;拥有庞大的…