项目开发遇到的场景:
1.比如表格最多只能选择四条,选择好四条后,其余的勾选框将不能选择,超过四条将给出提示。
2.点击全选,是会把所有的表格项都选上,点击提交给出提示不能提交,然后用户需要取消部分选中的数据,被取消的数据因为不符合个数将不能再次被选中,直到符合个数才不会提示和可以勾选。
3.不影响并且不影响已经触发其它禁用条件的数据。

代码:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>vue开发:element-ui表格复选超出数量后剩下的全部禁止选择,并且不影响已经触发其它禁用条件的数据</title>
  <!--引入 element-ui 的样式,-->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  <!-- 引入element 的组件库-->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    #app {
      padding: 50px;
    }
  </style>
</head>

<!-- element-ui表格复选超出数量后剩下的全部禁止选择 -->
<!-- https://blog.csdn.net/z294286540/article/details/127675314 -->

<body>
  <div id="app">
    <template>
      <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
        @selection-change="handleSelectionChange" @select="selectLengthChange" @select-all="selectLengthChange">
        <el-table-column type="selection" width="55" :selectable="checkedSelectable">
        </el-table-column>
        <el-table-column prop="name" label="姓名" >
        </el-table-column>
      </el-table>
      <el-button @click="submit" style="margin: 50px;">提交数据</el-button>
    </template>
  </div>
  <script>
    new Vue({
      el: '#app',
      data() {
        return {
          tableData: [{
            name: '王小虎1',
            type: '1',
            id: 1,
          }, {
            name: '王小虎2',
            type: '2',
            id: 2,
          }, {
            name: '王小虎3',
            type: '3',
            id: 3,
          }, {
            name: '王小虎4',
            type: '3',
            id: 4,
          }, {
            name: '王小虎5',
            type: '1',
            id: 5,
          }, {
            name: '王小虎6',
            type: '3',
            id: 6,
          }, {
            name: '王小虎7',
            type: '3',
            id: 7,
          }, {
            name: '王小虎8',
            type: '3',
            id: 8,
          }],
          // 选中的id集合
          checkedIds: [],
          // 选中的最大个数
          maxLength: 4,
        }
      },
      created() {

      },
      methods: {
         // 将勾选的数据放入集合中
        handleSelectionChange(val) {
          this.checkedIds = Array.from(val, ({ id }) => id);
        },
        // type为1的数据不能选择和超过最大选择数量的都不能选择
        checkedSelectable(row, index) {
          if (this.checkedIds.length >= this.maxLength) {
            return this.checkedIds.includes(row.id);
          }
          return +row.type != 1;
        },
        // 超出个数提示
        selectLengthChange(selection, row) {
          if (selection.length > this.maxLength) {
            this.$message.error(`每次最多提交${this.maxLength}条`);
          }
        },
        submit() {
          if (this.checkedIds.length > this.maxLength) {
            this.$message.error(`每次最多提交${this.maxLength}条`);
            return;
          };
          this.$message.success(`提交成功`);
          console.log(this.checkedIds, '提交的数据')
        },
      }
    })
  </script>
</body>

</html>

参考的地址:element-ui表格复选超出数量后剩下的全部禁止选择


我的一个道姑朋友
80 声望4 粉丝

星光不问赶路人,岁月不负有心人。