Element-Puls Form表单内嵌套el-table表格,根据表格复选框多选或单选动态设置行的验证规则

需求

根据 Table 表格内的复选框来控制当前选中行是否添加必填校验规则

效果图

实现思想

我们需要设置一个 flag 来标识已勾选的行,el-table渲染数据结构是数组对象形式,我们可以在每个对象中手动加如一个标识,例如默认:selected : false,如你的源数据中已有类似key,则可用它作于唯一标识

重要代码部分

html代码

<template><div><el-form :model="productInfoForm" ref="productInfoFormRef" :rules="productInfoRules"><el-table ref="multipleTableRef" :data="productInfoForm.skuList" @select-all="handleSelectionChangeAll"@select="handleSelection" @selection-change="handleSelectionChange"><!-- 复选框 --><el-table-column type="selection" width="55" /><!-- 需要动态设置校验项 --><el-table-column><template #header><div><span v-text="`您的售价`"></span></div></template><template #default="scope"><div><el-form-item :ref="`unitPrice_${scope.$index}`" :prop="`skuList.${scope.$index}.unitPrice`":rules="getRules(scope.row.selected, scope.$index, 'unitPrice')"><div class="flex-box"><p class="fs-12 flex-shrink" v-text="`产品单价`"></p><el-input v-model="scope.row.unitPrice" placeholder="0"@blur="(e: Event) => { scope.row.unitPrice = (e.target as HTMLInputElement).value }"><template #prefix><span v-text="`¥`"></span></template></el-input></div></el-form-item><el-form-item :ref="`operationFee_${scope.$index}`" :prop="`skuList.${scope.$index}.operationFee`":rules="getRules(scope.row.selected, scope.$index, 'operationFee')"><div class="flex-box"><p class="fs-12 flex-shrink" v-text="`操作费`"></p><el-input v-model="scope.row.operationFee" placeholder="0"@blur="(e: Event) => { scope.row.operationFee = (e.target as HTMLInputElement).value }"><template #prefix><span v-text="`¥`"></span></template></el-input></div></el-form-item><el-form-item :ref="`finalDeliveryFee_${scope.$index}`" :prop="`skuList.${scope.$index}.finalDeliveryFee`":rules="getRules(scope.row.selected, scope.$index, 'finalDeliveryFee')"><div class="flex-box"><p class="fs-12 flex-shrink" v-text="`尾程派送费`"></p><el-input v-model="scope.row.finalDeliveryFee" placeholder="0"@blur="(e: Event) => { scope.row.finalDeliveryFee = (e.target as HTMLInputElement).value }"><template #prefix><span v-text="`¥`"></span></template></el-input></div></el-form-item></div></template></el-table-column></el-table><!-- 操作按钮 --><div><el-button :disabled="createProductDisabled" plain v-text="`保存`" @click="saveProduct"></el-button><el-button :disabled="createProductDisabled" type="primary" v-text="`提交审核`" @click="saveProduct"></el-button></div></el-form></div>
</template>

js代码

<script setup lang="ts">
import { ElForm } from 'element-plus';
import { ref, reactive, toRefs, computed, getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance() as ComponentInternalInstance;const productInfoFormRef = ref(ElForm)
const multipleTableRef = ref<any>()const data = reactive<any>({productInfoForm: {skuList: [{selected: false,unitPrice: '',operationFee: '',finalDeliveryFee: '',}]},productInfoRules: {unitPrice: {required: true,message: '请完善必须项',tirgger: ['blur', 'change']},operationFee: {required: true,message: '请完善必须项',tirgger: ['blur', 'change']},finalDeliveryFee: {required: true,message: '请完善必须项',tirgger: ['blur', 'change']},},createProductDisabled: true,
});
const { productInfoForm, productInfoRules, createProductDisabled } = toRefs(data);// 根据flag动态设置表单校验规则
const getRules = computed(() => (selected: boolean, index: number, type: string) => {nextTick(() => {if (proxy?.$refs[`${type}_${index}`] && !selected) {(proxy?.$refs[`${type}_${index}`] as any).clearValidate()}// console.log(proxy?.$refs[`${type}_${index}`]);})return selected ? productInfoRules.value[type] : {}
})//当选择项发生变化时会触发该事件
const handleSelectionChange = (valArr: any[]) => {createProductDisabled.value = valArr.length ? false : true
}//当用户手动勾选数据行的 Checkbox 时触发的事件
const handleSelection = (valArr: any[], row: { selected: boolean; }) => {row.selected = !row.selected
}//监听table全选
const handleSelectionChangeAll = (valArr: any[]) => {const skuList = productInfoForm.value.skuListskuList.forEach((i: { selected: boolean; }) => {i.selected = valArr.length ? true : false})
}//创建并提交审核商品
const saveProduct = async () => {productInfoFormRef.value.validate(async (valid: boolean, fields: any) => {if (valid) {// 表单验证通过后相关逻辑处理...} else {console.log('error submit!', fields);}})
}
</script><style scoped lang="scss"></style>

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

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

相关文章

Windows环境 elasticsearch 及可视化界面 安装

安装 elastic 的官网 elastic.co/downloads/elasticsearch 当你解压好了归档文件之后&#xff0c;Elasticsearch 已经准备好运行了。按照下面的操作&#xff0c;在前台(foregroud)启动 Elasticsearch&#xff1a; cd elasticsearch-<version> ./bin/elasticsearch 如…

大型语言模型综述/总结 LLM A Survey of Large Language Models

A Survey of Large Language Model AbstractINTRODUCTIONOVERVIEW背景LLM的新兴能力LLM的关键技术GPT 系列模型的技术演进 大语言模型资源公开可用的模型检查点或 API常用语料库代码库资源 预训练数据收集架构 论文标题&#xff1a;A Survey of Large Language Model 论文地址&…

详谈Python的开发工具

Python作为一种流行的编程语言&#xff0c;在开发过程中需要使用各种工具来提高效率、简化工作流程和改善开发体验。在本文中&#xff0c;我们将介绍一些常用的Python开发工具&#xff0c;包括文本编辑器、集成开发环境&#xff08;IDE&#xff09;、虚拟环境管理工具、包管理器…

git常用命令集合及其演示

文章目录 一.git常用命令集合及其演示1.git config --list 查看配置信息2.git status 查看当前仓库的状态3.git add . 加到暂存区4.git commit -m "描述信息" 添加到版本库5.git diff xxxx 查看xxxx文件修改了哪些内容&#xff0c;相比于暂存区的区别6.git rm --cach…

PLSQL启动报错:Initialization error,不能初始化

出现场景&#xff1a;我这里原来有个旧版的PLSQL&#xff0c;想用新版的又装了个新版&#xff0c;启动的时候报错 解决办法 1.核对程序位数 第一个提示明显看到是和程序位数相关的&#xff0c;不管是32位还是64位要做到向匹配 2.设置oci.dll 第二个提示可以看到是和oci.dll…

03 Lombok+AOP思想+注解进化SqlSession工具类03

Lombok 实体类中除了定义好的属性外&#xff0c;我们常常还要写set/get构造方法等&#xff0c;用Lombok可以用一条注解帮忙生成。 一个Data会同时包含 Getter/Setter ToString EqualsAndHashCode RequiredArgsConstructor 使用方法&#xff1a;需要同时添加Lombok插件和Lombo…

【云原生】springboot 整合 OpenTelemetry

目录 一、前言 二、应用可观测性概述 2.1 什么是可观测性 2.2 可观测性三大指标 2.2.1 指标&#xff08;Metrics&#xff09; 2.2.2 日志&#xff08;log&#xff09; 2.2.3 追踪(Traces) 三、OpenTelemetry 介绍 3.1 什么是OpenTelemetry 3.2 OpenTelemetry架构和组件…

蓝桥杯省赛无忧 STL 课件17 map

01 map 02 multimap 03 unordered_map 04 代码示例

财务管理软件,用表格导出账目明细

不论是工资收入&#xff0c;还是日常花销&#xff0c;每一笔钱都需要我们认真对待。然而&#xff0c;许多人在财务管理上仍然采用传统的纸质记账方式&#xff0c;这不仅容易丢失数据&#xff0c;还难以实现财务的统一管理。为此&#xff0c;我为大家推荐一款简单好用的记账软件…

高效构建Java应用:Maven入门和进阶(二)

高效构建Java应用&#xff1a;Maven入门和进阶&#xff08;二&#xff09; 二.基于IDEA的Maven的工程创建2.1 梳理Maven工程GAVP属性2.2 Idea构建Maven JavaSE工程2.3 Idea构建Maven JavaEE工程2.4 Maven工程项目结构说明 二.基于IDEA的Maven的工程创建 2.1 梳理Maven工程GAVP…

ppt怎么录屏录音并且导出?好用录屏软件推荐

ppt已经成为了日常工作与学习中必不可少的工具&#xff0c;而ppt屏幕录制功能&#xff0c;可以方便用户将他人的演讲或视频中的内容记录下来&#xff0c;以便进一步学习与研究。录制ppt演示并将其导出为视频文件&#xff0c;可以帮助我们进行分享&#xff0c;但是很多人不知道p…

三种风格:山海鲸可视化软件模板的个性化定制之旅“

当我们谈论数据可视化时&#xff0c;一个好的可视化组件套件模板至关重要。一个优秀的模板不仅可以提高数据可视化的效果&#xff0c;还能让用户更加深入地探索和理解数据。作为山海鲸可视化软件的开发者&#xff0c;在提供免费好用的产品同时我们也希望最大限度降低用户设计难…

13、Redis高频面试题

1、项目中为什么用Redis 我们项目中之所以选择Redis&#xff0c;主要是因为Redis有下面这些优点&#xff1a; 操作速度快&#xff1a;Redis的数据都保存在内存中&#xff0c;相比于其它硬盘类的存储&#xff0c;速度要快很多数据类型丰富&#xff1a;Redis支持 string&#x…

逻辑回归(解决分类问题)

定义&#xff1a;逻辑回归是一种用于解决分类问题的统计学习方法。它通过对数据进行建模&#xff0c;预测一个事件发生的概率。逻辑回归通常用于二元分类问题&#xff0c;即将数据分为两个类别。它基于线性回归模型&#xff0c;但使用了逻辑函数&#xff08;也称为S形函数&…

Android Studio下载gradle反复失败

我的版本&#xff1a;gradle-5.1.1 首先检查设置路径是否正确&#xff0c;参考我的修改&#xff01; 解决方案 1.手动下载Gradle.bin Gradle Distributions 下载地址 注意根据编译器提示下载&#xff0c;我这要求下载的是bin 而不是all 2.把下载好的整个压缩包放在C:\Users\…

图像的初识

一、图像的数组表示 RGB能够构成人眼所能识别的所有颜色。 二、图像的变换 Example&#xff1a; img.shape Out[329]: (512, 768, 3) img.dtype Out[330]: dtype(uint8) #补值变换 shift_temp_img [255,255,255] - img shift_img Image.fromarray(shift_temp_img.astype(ui…

「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解

引言&#xff1a;CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是一种攻击技术&#xff0c;通过使用用户的身份进行不诚实地操作&#xff0c;恶意用户可以在受害者&#xff08;目标&#xff09;的机器上执行一些未授权的操作。这可能会危及…

Jenkins自动化部署docker

Jenkins自动化部署docker和普通方式构建 docker外挂目录 准备测试服务器docker环境准备jdk环境将上传jar包修改为app.jar对外暴露1000端口启动jar FROM openjdk:8-jdk-alpine ARG JAR_FILE COPY ${JAR_FILE} app.jar EXPOSE 1000 ENTRYPOINT ["java","-jar&q…

MobaXterm连接服务器步骤

双击该软件 选择Session 点击SSH 填写服务器的IP地址、服务器的用户名称、Port这个端口号一般都是这个&#xff0c;但有些可能例外&#xff0c;自己注意一下&#xff0c;最后点击OK就行 这个五角星点击一下&#xff0c;就可以看到您自己刚才的配置。 鼠标左键双击&…

第 12 章 多路查找树

文章目录 12.1 二叉树与B 树12.1.1 二叉树的问题分析12.1.2 多叉树12.1.3 B 树的基本介绍 12.2 2-3 树12.2.1 2-3 树是最简单的 B 树结构, 具有如下特点:12.2.2 2-3 树应用案例12.2.3 其它说明 12.3 B 树、B树和 B*树12.3.1 B 树的介绍12.3.2 B 树的介绍12.3.3 B树的介绍12.3.4…