el-table自定义筛选表头组件封装

图片效果

在这里插入图片描述

代码展示

<template>
  <el-popover
    v-model="visible"
    title="显示的列"
    placement="left"
    width="369"
    :visible-arrow="false"
  >
    <div>
      <div>
        <el-checkbox
          :indeterminate="isIndeterminate"
          v-model="checkAll"
          @change="handleCheckAllChange"
          >全选</el-checkbox
        >
        <el-button
          type="primary"
          plain
          round
          size="mini"
          style="margin: 3px 0 12px 12px"
          @click="show"
          >恢复默认</el-button
        >
      </div>
      <div>
        <el-checkbox-group
          v-model="checkedCities"
          @change="handleCheckedCitiesChange"
        >
          <el-checkbox-button
            class="checkItem"
            v-for="item in tableHeadChoose"
            :label="item"
            :key="item.prop"
            >{{ item.label }}</el-checkbox-button
          >
        </el-checkbox-group>
      </div>
    </div>
    <div style="text-align: right; margin: 0">
      <el-button size="mini" @click="hide">取消</el-button>
      <el-button type="primary" size="mini" @click="ok">确定</el-button>
    </div>
    <div slot="reference" class="right">
      <span class="icon iconfont icon-xiangmuleixing"></span>
      <button class="ml-3 lie">配置显示列</button>
    </div>
  </el-popover>
</template>

<script>
export default {
  name: "filterName",
  props: {
    tableHead: {
      type: Array,
      default: function () {
        return [];
      },
    },
  },
  data() {
    return {
      visible: false,
      isIndeterminate: true,
      checkedCities: [],//显示选中的数据
      checkAll: false,//全选数据
      tableHeadChoose:[],//列表展示
    };
  },
  mounted(){
    this.getTableHeadAll();
    this.show();
  },
  methods: {
     // 显示列
     getTableHeadAll() {
      this.tableHeadChoose = this.tableHead;
    },
    //全选
    handleCheckAllChange(val) {
      this.checkedCities = val ? this.tableHeadChoose : [];
      this.isIndeterminate = false;
    },
    //选中数据
    handleCheckedCitiesChange(value) {
      let checkedCount = value.length;
      this.checkAll = checkedCount === this.tableHeadChoose.length;
      this.isIndeterminate =
        checkedCount > 0 && checkedCount < this.tableHeadChoose.length;
    },
    //恢复默认
    show() {
      let checkedCount = this.tableHeadChoose.length;
      this.checkAll = checkedCount === this.tableHeadChoose.length;
      this.isIndeterminate =
        checkedCount > 0 && checkedCount < this.tableHeadChoose.length;
      this.checkedCities = this.tableHeadChoose;
    },
    //取消
    hide() {
      this.visible = false;
    },
    //确认
    ok() {
      this.visible = false;
      this.$emit("showHead",this.checkedCities);
    },
  },
};
</script>

<style lang="scss" scoped>
 .right {
      position: absolute;
      right: 30px;
      cursor: pointer;
      user-select: none; //取消选中
      height: 40px;
      line-height: 40px;
      font-size: 14px;
      .icon {
        border-radius: 14px;
        background-color: #2b85e4;
        color: #fff;
      }
      .lie {
        display: inline-block;
        color: #333;
        background: none;
        border: none;
        cursor: pointer;
        user-select: none; //取消选中
      }
    }
::v-deep .el-checkbox-button {
  margin: 10px;
}
::v-deep .el-checkbox-button:first-child .el-checkbox-button__inner {
  border-radius: 0px;
}
::v-deep .el-checkbox-button__inner {
  padding: 4px 5px;
  background-color: rgba(215, 215, 215, 1);
  color: rgba(102, 102, 102, 1);
  border-radius: 0px;
  border-color: transparent;
}
::v-deep .el-checkbox-button.is-focus .el-checkbox-button__inner {
  border-color: transparent;
}
::v-deep .el-checkbox-button.is-checked .el-checkbox-button__inner {
  padding: 4px 5px;
  background-color: #2dab79;
  color: #fff;
  border-color: transparent;
}</style>

注意

isIndeterminate和checkAll的值状态:
如果true true 或者 true false样式为-
如果false true样式为√
如果false false样式为不勾
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-table可以通过封装el-table-column来实现多级表头。下面是一个示例代码: ```html <template> <el-table :data="tableData" border> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头1" colspan="2"></el-table-column> <el-table-column label="二级表头2" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头3" colspan="2"></el-table-column> <el-table-column label="二级表头4" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头5" colspan="2"></el-table-column> <el-table-column label="二级表头6" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头7" colspan="2"></el-table-column> <el-table-column label="二级表头8" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头9" colspan="2"></el-table-column> <el-table-column label="二级表头10" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头11" colspan="2"></el-table-column> <el-table-column label="二级表头12" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头13" colspan="2"></el-table-column> <el-table-column label="二级表头14" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头15" colspan="2"></el-table-column> <el-table-column label="二级表头16" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头17" colspan="2"></el-table-column> <el-table-column label="二级表头18" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头19" colspan="2"></el-table-column> <el-table-column label="二级表头20" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头21" colspan="2"></el-table-column> <el-table-column label="二级表头22" colspan="2"></el-table-column> </el-table-column> <el-table-column label="一级表头" rowspan="2"> <el-table-column label="二级表头23" colspan="2"></el-table-column> <el-table-column label="二级表头24" colspan="2"></el-table-column> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ // 表格数据 ] }; } }; </script> ``` 在上面的示例代码中,我们使用了el-table-column来实现多级表头。通过设置rowspan和colspan属性,可以控制表头的合并和拆分。每个一级表头下面可以嵌套多个二级表头,通过设置colspan属性来控制每个二级表头的宽度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值