校验el-table中表单项

需求:

表格中每一行都有几个必填项,如用户提交时有未填的选项,将该选项标红且给出提示,类似el-form 的那种校验

el-table本身并没有校验的方法,而且每一行的输入框也是通过插槽来实现的,因此我们要自己跟el-table本身自带的属性来实现这个功能。接下来主角的登场
在这里插入图片描述
这个属性可以为每个单元格添加一个类名, 我的思路是

  1. 校验未通过的信息写在输入框的下方,通过display:none隐藏掉
  2. 在提交的时候先校验,如果存在必填项为空,则为该选项所存在的单元格添加一个“error-cell”的类名。
  3. 在此类名下的错误信息以及输入框边框变红通过已经写好的css来实现
    手下先做好准备工作
<el-table-column prop="age" label="年龄">
      <template slot-scope="{ row }">
          <el-input v-model="row.age" />
          <div class="tips">请输入年龄</div>
      </template>
 </el-table-column>
<el-table-column prop="backUp" label="年龄">
      <template slot-scope="{ row }">
          <el-input size="mini" type="textarea" v-model.trim="row.backUp" />
          <div class="tips">请输入备注</div>
     </template>
</el-table-column>
.tips {
     display: none; 
     font-size: 12px;
}

提交时进行校验

// 校验表格  是否存在未填选项
var _validate = this.tableData.some((item) => !item.age || !item.backUp );
//存在未填选项  将该选项加上校验未通过类名 同时return禁止提交
if (_validate) {
     this.cellClass = ({ row, columnIndex }) => {
          if (
                (row.age === '' && columnIndex === 0) ||
                (row.backUp === '' && columnIndex === 1)
              ) {
                 return 'error-cell';
          }
      };
     return;
}

校验未通过的 展示错误信息

.error-cell {
        .el-input__inner {
            border-color: #f56c6c;
        }
        .tips {
            display: block;
            color: #f56c6c;
        }
}

附上完整代码

<template>
  <div class="page">
    <el-table :data="tableData" :cell-class-name="cellClass">
      <el-table-column prop="age" label="年龄">
        <template slot-scope="{ row }">
          <el-input v-model="row.age" />
          <div class="tips">请输入年龄</div>
        </template>
      </el-table-column>
      <el-table-column prop="backUp" label="年龄">
        <template slot-scope="{ row }">
          <el-input size="mini" type="textarea" v-model.trim="row.backUp" />
          <div class="tips">请输入备注</div>
        </template>
      </el-table-column>
    </el-table>
    <el-button @click="submit">提交</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { age: '1', backUp: '2' },
        { age: '1', backUp: '1' },
        { age: '', backUp: '1' }
      ],
      cellClass: null
    };
  },
  methods: {
    submit() {
      // 校验表格  是否存在未填选项
      var _validate = this.tableData.some(item => !item.age || !item.backUp);
      //存在未填选项  将该选项加上校验未通过类名 同时return禁止提交
      if (_validate) {
        this.cellClass = ({ row, columnIndex }) => {
          if ((row.age === '' && columnIndex === 0) || (row.backUp === '' && columnIndex === 1)) {
            return 'error-cell';
          }
        };
        return;
      }
      //校验通过
      console.log('校验通过');
    }
  }
};
</script>

<style lang="scss" scoped>
::v-deep.page {
  .tips {
    display: none;
    font-size: 12px;
  }
  .error-cell {
    .el-input__inner {
      border-color: #f56c6c !important;
    }
    .tips {
      display: block;
      color: #f56c6c;
    }
  }
}
</style>
  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值