当前位置: 首页 > article >正文

【VUE】el-table表格内输入框或者其他控件规则校验实现

1、封装组件

1、规则校验一般基于form表单实现,因此需要给具体控件套一层form表单
新建组件input-required.vue,内容如下

<template>
	  <div>
	    <el-form ref="formRef" :model="form" :rules="formRules" label-width="0px" style="font-size:0.6vw">
	      <el-form-item :prop="this.propValue">
	        <el-input
	          v-model="value"
	          :placeholder="`请输入${labelValue}`"
	          autocomplete="off"
	          :disabled="isDisalbed"
	          @change="isValid"
	        ></el-input>
	      </el-form-item>
	    </el-form>
	  </div>
</template>

<script>
	export default {
	  data() {
	    return {
	      value: "",
	      form: {},
	      formRules: {}
	    };
	  },
	  // 子组件使用props来接收父组件内传过来的数据
	  props: ["propValue", "labelValue", "isDisalbed", "indexValue"],
	  created() {
	   // 给子组件的对象动态添加属性并设置属性值
	    this.$set(this.form, this.propValue, "");
	    this.$set(this.formRules, this.propValue, [
	      { required: true, message: `${this.labelValue}不能为空`, trigger: "blur" }
	    ]);
	  },
	  methods: {
	    // el-input失去焦点后会校验数据,空的话会提示,符合校验规则会触发父组件内方法更新视图数据
		isValid() {
		    let flag = null;
            this.form[this.propValue] = this.value;
            this.$refs["formRef"].validate(valid => {
              if (valid) {
                flag = true;
                this.$emit("updateData", this.form, this.indexValue);
              } else {
                flag = false;
              }
            });
           // 把每次校验的结果返回给父组件
		   return flag;
		 }
	  },
	};
</script>

<style>
</style>

2、组件使用

组件引入

import InputRequired from "/src/components/inputRequired/input-required.vue";
components: {InputRequired},

form表单里的table使用组件,isRequiredNumber(v-if=“scope.row.isRequiredNumber == ‘0’”)是否必填标识(看自己业务需求,这个必填在此处判断因为业务需求是可配置是否必填的,只做必填可以去掉该判断,正常使用input-required)

.......
<el-col :span="21">
	<el-form-item label="资源" prop="resourcePrepare">
		<el-table :data="resourceResult" :header-cell-style="{ background: '#f0f2f5' }">
			<el-table-column align="center" prop="name" label="名称">
			</el-table-column>
			<el-table-column align="center" prop="num" label="数量">
				<template slot-scope="scope">
					<el-input v-if="scope.row.isRequiredNumber == '0'" v-model="scope.row.num"
						placeholder="请输入内容">
					</el-input>
					<input-required v-else :ref="`requiredNum${scope.$index}`"
						:propValue="'num'" :labelValue="'数量'" :isDisalbed="false"
						:indexValue="scope.$index" @updateData="updateData"></input-required>
				</template>
			</el-table-column>
			<el-table-column label="" width="90">
				<template slot-scope="scope">
					<span @click="delResourcePrepare(scope.row)"
						class="el-icon-close txtClose"></span>
				</template>
			</el-table-column>
		</el-table>
	</el-form-item>
</el-col>
..........

提交表单做必填校验

submitForm() {
	this.$refs["form"].validate(valid => {
		let flag = true;
		//循环判断table里的所有数据
		for (let index = 0; index < this.resourceResult.length; index++) {
		    //资源数量是否必填(业务需要正常使用可去掉判断)
			if (this.resourceResult[index].isRequiredNumber == '1') {
				flag = flag && this.$refs[`requiredNum` + index].isValid();
			}
		}
		if (!flag) {
		    //必填校验未通过,结束方法
			return;
		}
       .....其他业务.....
	});
},

大概就是这样了。。。


http://www.kler.cn/a/418664.html

相关文章:

  • springMVC 全局异常统一处理
  • 基于群晖搭建个人图书架-TaleBook based on Docker
  • EDA软件研发的DevOps平台
  • EasyDarwin搭建直播推流服务
  • BUUCTF—Reverse—Java逆向解密(10)
  • 373. 查找和最小的 K 对数字
  • 学习笔记:黑马程序员JavaWeb开发教程(2024.11.28)
  • 前端js面试知识点思维导图(脑图)
  • TCP/IP网络协议栈
  • 题解:CF416C Booking System
  • 基于 Flask 和 RabbitMQ 构建高效消息队列系统:从数据生成到消费
  • leetcode 841.钥匙和房间
  • 【GESP】c++四级备考(含真题传送门)
  • 目标检测之学习路线(本科版)
  • 【SSM】mybatis的增删改查
  • 智能产品综合开发 - 智能家居(智能语音机器人)
  • 网安瞭望台第6期 :XMLRPC npm 库被恶意篡改、API与SDK的区别
  • Css、less和Sass(SCSS)的区别详解
  • 华为ACL应用笔记
  • 07.ES11 08.ES12
  • 设备内存指纹
  • 利用Python爬虫精准获取淘宝商品详情的深度解析
  • ros sensor_msgs::Imu详细介绍 Eigen::Vector3d 详细介绍
  • MySQL的一些常用函数
  • ARM实现URAT通信,看门狗中断,裸机开发
  • 开发一套ERP 第八弹 RUst 插入数据