校验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>

相关推荐

  1. el-table-column 有两个input怎么校验

    2024-07-16 10:52:02       35 阅读
  2. el-table

    2024-07-16 10:52:02       31 阅读
  3. 双击编辑el-table单元格数据

    2024-07-16 10:52:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 10:52:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 10:52:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 10:52:02       62 阅读
  4. Python语言-面向对象

    2024-07-16 10:52:02       72 阅读

热门阅读

  1. 结合案例简单介绍无人驾驶汽车

    2024-07-16 10:52:02       21 阅读
  2. Super-Mario-Host(超级玛丽)靶机

    2024-07-16 10:52:02       24 阅读
  3. 大语言模型里的微调vs RAG vs模板提示词

    2024-07-16 10:52:02       23 阅读
  4. 低空经济迅猛发展的几个因素

    2024-07-16 10:52:02       21 阅读
  5. 第19集《修习止观坐禅法要》

    2024-07-16 10:52:02       17 阅读
  6. 将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd

    2024-07-16 10:52:02       25 阅读
  7. 【WPF】图片剪裁-ImageCropping

    2024-07-16 10:52:02       22 阅读
  8. springboot集成MQTT实现消息接收

    2024-07-16 10:52:02       21 阅读
  9. js中! 、!!、?.、??、??=的用法及使用场景

    2024-07-16 10:52:02       21 阅读
  10. AP9185内置 MOS 管升压型恒流驱动芯片

    2024-07-16 10:52:02       24 阅读