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

el-table多列勾选

新来的产品想要大改造权限设置,行可以点,列也可以点,有点复古逆天

尝试,适合固定的已知的列,如果以后是接口动态列,估计还得改

                 <!-- 行全选 -->
     <el-table-column
         align="center"
          :resizable="false" 
        fixed="left"
     >
        <template slot="header" slot-scope="scope">
            <el-checkbox v-model="allChecked.all"                 
             @change="handleAllHeaderCheck('all')"></el-checkbox>
          </template>
             <template slot-scope="scope">
              <el-checkbox 
                  :value="scope.row.all"
                   @change="handleLineCheck(scope.row)"
               />
               </template>
       </el-table-column>
  <!-- 功能列 -->
    <el-table-column label="功能" align="center">
      <template slot="header" slot-scope="scope">
        <span>功能</span>
        <el-checkbox v-model="allChecked.function"         
            @change="handleAllHeaderCheck('function')"></el-checkbox>
      </template>
      <template slot-scope="scope">
        <el-checkbox v-model="scope.row.function"></el-checkbox>
      </template>
    </el-table-column>
  data(){
   return {
    // 表头复选框的状态
      allChecked: {
        all: false,
        function: false,
        // ... 其他列的状态
      },
     list:[
        ...
            all: false,
            function: false,
            // ... 其他列的状态
            children: [
              {
                ...
                all: false,
                function: false
                // ... 其他列的状态
              },
     ]
    }
   }
      // 处理表头复选框点击
    handleAllHeaderCheck(column) {
      const checked = this.allChecked[column]
      // 递归深度遍历list 更新该列所有行的复选框状态
      function deepTraversal(list) {
        list.forEach(item => {
          item[column] = checked
          if(item.children && item.children.length) {
            deepTraversal(item.children)
          }
        })
      }
      deepTraversal(this.list) 
    }
    // 点击进行行全选
    handleLineCheck(row) {
      // 获取新的勾选状态(取反)
      const newCheckedState = !row.all 
      let index = this.list.findIndex(item => item.name == row.name)
        // 更新该行所有复选框状态
        for(let key in this.allChecked) {
          // row[key] = newCheckedState
          this.$set(this.list[index], key, newCheckedState) 
        } 
        // // 如果有子节点,递归更新子节点的状态
        // if(row.children && row.children.length) {
        //   const updateChildren = (children) => {
        //     children.forEach(child => {
        //       for(let key in this.allChecked) {
        //         child[key] = newCheckedState
        //       }
        //       if(child.children && child.children.length) {
        //         updateChildren(child.children)
        //       }
        //     })
        //   }
        //   updateChildren(row.children)
        // }
    }

细节也暂未实现,比如全选行/列情况下 取消某一勾选后 indeterminate 的值的监听


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

相关文章:

  • 记录docker 卡住不动了
  • 1312:【例3.4】昆虫繁殖
  • 前瞻技术解密:未来生活的改变与机遇
  • JavaScript 在 VSCode 中的优势与应用
  • 自动驾驶数据集三剑客:nuScenes、nuImages 与 nuPlan 的技术矩阵与生态协同
  • 深度整理总结MySQL——MySQL加锁工作原理
  • Vue2生命周期面试题
  • Access数据库教案(Excel+VBA+Access数据库SQL Server编程)
  • (3/100)每日小游戏平台系列
  • Visual Studio 2022环境下Miracl Lib库报错“无法解析的外部命令”
  • 数字孪生平台 v5.2 发布
  • Vulnhub empire-lupinone靶机攻击实战(一)
  • 【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(一)
  • 系统开发:大文件下载报错问题
  • 【自然语言处理】TextRank 算法提取关键词、短语、句(Python源码实现)
  • 【算法-动态规划】、魔法卷轴: 两次清零机会整个数组最大累加和
  • 代发考试战报:2月5号最近考过的思科和华为考试战报
  • 请求响应-请求-日期参数json参数路径参数
  • 【SpringBoot苍穹外卖】debugDay02
  • SpringBoot中为什么要引入消息队列依赖项
  • 防御保护-----前言
  • 用于构建基于大型语言模型(LLM)的开源框架LangChain介绍及代码实践
  • 浅谈TCP的三次握手和四次挥手
  • 关于arm
  • 抽象工厂模式详解(Java)
  • floodfill算法系列一>图像渲染