实现方法:

需求

给el-table的全选复选框、禁用的复选框、未禁用的复选框用el-tooltip分别增加不同的悬浮提示信息。
在这里插入图片描述

实现代码

html代码:

<el-table
  ref="multipleTable"
  :data="tableData"
  tooltip-effect="dark"
  border>
  <el-table-column align="center" width="55">
    <template slot="header" slot-scope="{row}">
      <!-- 全选按钮 -->
      <div>
        <el-tooltip placement="top-start" effect="light" popper-class="table_select_tooltip">
          <div slot="content">
            <p>全选:悬浮展示的信息</p>
          </div>
          <el-checkbox v-model="isCheck" :indeterminate="indeterminate" @change="handleCheckAllChange"></el-checkbox>
        </el-tooltip>
      </div>
    </template>
    <template slot-scope="{row}">
      <!-- 多选按钮 -->
      <el-checkbox-group v-model="selectionData">
        <el-tooltip placement="top-start" effect="light" popper-class="table_select_tooltip">
          <div slot="content">
            <p>{{ row.disabled ? '禁用:悬浮展示的信息':'悬浮展示的信息' }}</p>
          </div>
          <!-- 此处的label是复选框右边显示的值,也是选中后的值。如果要一行的数据,直接使用row即可 -->
          <!-- label的内容会显示在页面上,需要配合css把label的内容隐藏掉 -->
          <el-checkbox :disabled="row.disabled" :key="row.id" :label="row.id"></el-checkbox>
        </el-tooltip>
      </el-checkbox-group>
    </template>
  </el-table-column>
</el-table>

js代码

export default {
  name:'',
  components: {},
  props:[],
  data() {
    return {
      tableData: [],//表格数据

      enabledDataList: [],//这个指表格中没有被禁用的行数据,进来组件的时候需要自己处理下
      isCheck: false,//全选按钮绑定值
      indeterminate: false,//全选按钮的不确定状态,选中数据selectionData的长度length符合  0 < selectionData.length < enabledDataList.length ,值为true
      selectionData: [],//表格多选选中的数据
    };
  },
  computed: {},
  watch: {
    // 监听选中的数据,选中的数据发生变化,通过判断长度给多选按钮赋值
    selectionData: {
      handler(v) {
        if (this.enabledDataList.length) {
          let checkedCount = v.length;
          this.isCheck = checkedCount === this.enabledDataList.length;
          this.indeterminate = checkedCount > 0 && checkedCount < this.enabledDataList.length;
        }
      },
      immediate: true
    }
  },
  created() {
    // 给enabledDataList赋值,需要去掉被禁用的数据
    this.enabledDataList = this.tableData.filter(v=>!v.disabled)
  },
  mounted() {},
  methods: {
    // 全选
    handleCheckAllChange(value){
      this.selectionData = value ? this.enabledDataList.map(el=>el.id) : [];
      this.indeterminate = false;
    },
  }
};
实现效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码
<template>
  <div class='el-table-con'>
    <p>选中的数据:{{ selectionData }}</p>
    <el-table
      ref="multipleTable"
      :data="tableData"
      tooltip-effect="dark"
      border>
      <el-table-column align="center" width="55">
        <template slot="header" slot-scope="{row}">
          <div>
            <el-tooltip placement="top-start" effect="light" popper-class="table_select_tooltip">
              <div slot="content">
                <p>全选:悬浮展示的信息</p>
              </div>
              <el-checkbox v-model="isCheck" :indeterminate="indeterminate" @change="handleCheckAllChange"></el-checkbox>
            </el-tooltip>
          </div>
        </template>
        <template slot-scope="{row}">
          <el-checkbox-group v-model="selectionData">
            <el-tooltip placement="top-start" effect="light" popper-class="table_select_tooltip">
              <div slot="content">
                <p>{{ row.disabled ? '禁用:悬浮展示的信息':'悬浮展示的信息' }}</p>
              </div>
              <!-- 此处的label是复选框右边显示的值,也是选中后的值。如果要一行的数据,直接使用row即可 -->
              <!-- label的内容会显示在页面上,需要配合css把label的内容隐藏掉 -->
              <el-checkbox :disabled="row.disabled" :key="row.id" :label="row.id"></el-checkbox>
            </el-tooltip>
          </el-checkbox-group>
        </template>
      </el-table-column>
      <el-table-column
        prop="id"
        label="id"
        width="50">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名">
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  name:'',
  components: {},
  props:[],
  data() {
    return {
      tableData: [{
        id: 1,
        name: '王小虎1',
        disabled: true
      }, {
        id: 2,
        name: '王小虎2',
        disabled: false
      }, {
        id: 3,
        name: '王小虎3',
        disabled: true
      }, {
        id: 4,
        name: '王小虎4',
        disabled: false
      }, {
        id: 5,
        name: '王小虎5',
        disabled: true
      }, {
        id: 6,
        name: '王小虎6',
        disabled: false
      }, {
        id: 7,
        name: '王小虎7',
        disabled: true
      }],

      enabledDataList: [],//这个指没有被禁用的行,进来组件的时候需要自己处理下
      isCheck: false,//全选按钮绑定值
      indeterminate: false,//全选按钮的不确定状态
      selectionData: [],//表格选中的数据
    };
  },
  computed: {},
  watch: {
    // 监听选中的数据
    selectionData: {
      handler(v) {
        if (this.enabledDataList.length) {
          let checkedCount = v.length;
          this.isCheck = checkedCount === this.enabledDataList.length;
          this.indeterminate = checkedCount > 0 && checkedCount < this.enabledDataList.length;
        }
      },
      immediate: true
    }
  },
  created() {
    // 给enabledDataList赋值,需要去掉被禁用的数据
    this.enabledDataList = this.tableData.filter(v=>!v.disabled)
  },
  mounted() {},
  methods: {
    // 全选
    handleCheckAllChange(value){
      this.selectionData = value ? this.enabledDataList.map(el=>el.id) : [];
      this.indeterminate = false;
    },
  }
};
</script>
<style lang='scss' scoped>
.el-table {
  /deep/ .el-checkbox__label {
    display: none;
  }
}
</style>

效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45 7 个月前
a07f3a59 * Update transition.md * Update table.md * Update transition.md * Update table.md * Update transition.md * Update table.md * Update table.md * Update transition.md * Update popover.md 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐