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

server/2024/9/24 1:39:04/

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/server/121095.html

相关文章

ECMAScript和JavaScript的区别:解密JavaScript的标准和实现

ECMAScript和JavaScript的区别&#xff1a;解密JavaScript的标准和实现 作为一名程序软件专家&#xff0c;我经常被问到ECMAScript和JavaScript的区别。虽然这两个术语经常被混用&#xff0c;但它们实际上是不同的概念。在本文中&#xff0c;我们将深入探讨ECMAScript和JavaSc…

银河麒麟桌面操作系统V10(SP1)ssh服务安装与配置

在国产化的大背景下,各种国产操作系统逐步进入运维人员的视野,ssh作为linux远程连接工具,是运维人员必需的工具之一。本文主要介绍在银河麒麟桌面操作系统V10(SP1)上安装和配置ssh服务。 准备工作 1、查看操作系统信息 cat /etc/os-release 笔者操作系统为银河麒麟桌面操…

卷积神经网络-数据增强

文章目录 一、概述二、数据增强的类别1. 裁剪2.翻转和旋转3. 随机遮挡4. 图像变换5. 对transforms的选择操作&#xff0c;使数据增强更灵活 三、应用场景四、总结 一、概述 数据增强&#xff08;也叫数据扩增&#xff09;的目的是为了扩充数据和提升模型的泛化能力。有效的数据…

图文深入理解SQL语句的执行过程

List item 本文将深入介绍SQL语句的执行过程。 一.在RDBMS&#xff08;关系型DB&#xff09;中&#xff0c;看似很简单的一条已写入DB内存的SQL语句执行过程却非常复杂&#xff0c;也就是说&#xff0c;你执行了一条诸如select count(*) where id 001 from table_name的非常简…

双路创新深度学习!TCN-Transformer+LSTM多变量时间序列预测(Matlab)

双路创新深度学习&#xff01;TCN-TransformerLSTM多变量时间序列预测&#xff08;Matlab&#xff09; 目录 双路创新深度学习&#xff01;TCN-TransformerLSTM多变量时间序列预测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab…

Git常用命令详解

Git 是一个功能强大的版本控制系统&#xff0c;以下是一些常用的 Git 命令及其解释和案例&#xff1a; 1、配置 git config --global user.name "Your Name"&#xff1a;配置全局用户名。 git config --global user.email "emailexample.com&#xff1a;配置全…

yolov8使用强数据增强

yolo强数据增强 在深度学习的训练中&#xff0c;强数据增强&#xff08;strong data augmentation&#xff09;通过对训练数据进行更大幅度的随机变换&#xff0c;增强模型的泛化能力&#xff0c;减少过拟合风险。强数据增强可以包括各种随机的图像变换操作&#xff0c;使得模型…

Qt (17)【Qt 文件操作 读写保存】

阅读导航 引言一、Qt文件概述二、输入输出设备类三、文件读写类四、文件和目录信息类五、自定义“记事本” 引言 在上一篇文章中&#xff0c;我们学习了Qt的事件处理机制&#xff0c;知道了如何响应用户的操作。但应用程序常常还需要处理文件&#xff0c;比如读写数据。所以&a…