效果图如下:

由于elementUI提供的表格没办法满足需求,我就在elementUI表格的基础上又做了一些改动

首先,全选的checkbox不是表格自带的,是自己加上去的,子表格中的checkbox也是自己加的,所以全选和单选的方法都要自己手动写,代码如下:

<el-table
class="father_table"
size="mini"
border
ref="multipleTable"
:data="tableData"
tooltip-effect="highLight"
style="width: 100%"
:default-sort="{prop: 'date', order: 'descending'}"
:span-method="arraySpanMethod"
default-expand-all
>
<el-table-column width="55">
<template slot="header">
<input type="checkbox" v-model="isCheckedAll" :checked="isCheckedAll" @change="handle_allCheckbox" class="input_check" />
<!-- <el-checkbox v-model="isCheckedAll" :checked="isCheckedAll"></el-checkbox> -->
</template>
<template>
<el-table-column type="expand">
<template slot-scope="props">
<el-table :ref="`childMultipleTable${props.$index}`" :show-header="showHeader" class="child_table" size="mini" :data="props.row.oldList">
<el-table-column width="48" class="checkbox_wrap">
<template slot-scope="checkProps">
<input
type="checkbox"
v-model="checkProps.row.isChecked"
:checked="checkProps.row.isChecked"
@change="handle_checkbox(checkProps.row)"
class="input_check"
/>
<!-- <el-checkbox v-model="isCheckedAll" :checked="isCheckedAll"></el-checkbox> -->
</template>
</el-table-column>
<el-table-column prop="name"></el-table-column>
<el-table-column prop="address" show-overflow-tooltip></el-table-column>
<el-table-column prop="address" show-overflow-tooltip></el-table-column>
<el-table-column prop="address" show-overflow-tooltip></el-table-column>
<el-table-column prop="address" show-overflow-tooltip></el-table-column>
<el-table-column>
<template slot-scope="scope" v-if="checkedList.indexOf(scope.row.id) > -1">
<el-button size="mini" type="text" class="btnText_delete" @click="handle_delete(scope.row)">删除成员</el-button>
</template>
</el-table-column>
</el-table>
</template>
</el-table-column>
</template>
</el-table-column>
<el-table-column>
<template slot="header">姓名</template>
<template slot-scope="scope">
<span class="mr10">{{scope.row.name}}</span>
<span>{{scope.row.address}}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip>
<template slot="header">年龄</template>
<!-- <template slot-scope="scope">{{scope.row.address}}</template> -->
</el-table-column>
<el-table-column show-overflow-tooltip>
<template slot="header">住址</template>
</el-table-column>
<el-table-column show-overflow-tooltip>
<template slot="header">联系方式</template>
</el-table-column>
<el-table-column show-overflow-tooltip>
<template slot="header">状态</template>
</el-table-column>
<el-table-column>
<template slot="header">操作</template>
<template slot-scope="scope">
<el-button size="mini" type="text" class="btnText_add" @click="handle_add(scope.row)">添加成员</el-button>
</template>
</el-table-column>
</el-table>
<div class="page_wrapper">
<p>显示第1条到第10条记录,总共{{pageTotal}}条记录</p>
<el-pagination background layout="prev, pager, next" :total="pageTotal" prev-text="上一页" next-text="下一页"></el-pagination>
</div>
watch: {
isCheckedAll: {
handler(newVal, oldVal) {
if (newVal == true) {
this.tableData.forEach((item, i) => {
item.oldList.forEach((it) => {
this.$refs[`childMultipleTable${i}`].toggleRowSelection(it);
});
});
} else if (newVal == false) {
this.tableData.forEach((item, i) => {
this.$refs[`childMultipleTable${i}`].clearSelection();
});
}
},
deep: true,
immediate: true,
},
dialogVisible: {
handler(newVal, oldVal) {
if (newVal == false) {
this.form.name = '';
this.form.age = '';
this.form.phone = '';
this.form.address = '';
}
},
deep: true,
immediate: true,
},
},
methods: {
      
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 1) {
return [1, 2];
} else if (columnIndex === 2) {
return [0, 0];
}
},
// 全选
handle_allCheckbox() {
this.isCheckedAll = this.isCheckedAll ? true : this.isCheckedAll == null ? true : false;
this.tableData.forEach((item, i) => {
item.oldList.forEach((it) => {
it.isChecked = !it.isChecked;
});
});
if (this.checkedList.length > 0) {
this.checkedList = [];
} else {
this.tableData.forEach((item, i) => {
item.oldList.forEach((it) => {
if (it.isChecked) {
this.checkedList.push(it.id);
}
});
});
}
console.log(this.checkedList, 'this.checkedList');
},
// 单选
handle_checkbox(row) {
let indexInchecked = this.checkedList.indexOf(row.id);
if (indexInchecked > -1) {
this.checkedList.splice(indexInchecked, 1);
} else {
this.checkedList.push(row.id);
}
console.log(this.checkedList, 'this.checkedList');
},
handle_delete(row) {},
handle_add(row) {
this.dialogVisible = true;
},
handle_submit() {
console.log('submit');
},
},

vue中使用elementUI的全选表格,点击全选,选中子表格的checkbox的更多相关文章

  1. Django day 33 vue中使用element-ui的使用,课程的相关介绍,vue绑定图片,课程列表接口,课程详情页面

    一:vue中使用element-ui的使用, 二:课程的相关介绍, 三:vue绑定图片, 四:课程列表接口, 五:课程详情页面

  2. 在vue中使用ElementUI

    完整引用ElementUI: 安装:在需要使用到的vue项目目录下,使用npm下载安装: npm/cnpm i element-ui -S/--save <!-- 引入样式 --> < ...

  3. vue中对element-ui框架中el-table的列的每一项数据进行操作

    vue中使用element table,表格参数格式化formatter 后台返回对应的数字, 那肯定不能直接显示数字,这时候就要对 表格进行数据操作 如图: 代码: methods: { //状态改 ...

  4. js之全选即点击全选标签可选择全部复选框

    目标效果:网页全选功能,即点击全选标签可选择全部复选框 实现代码如下 <!DOCTYPE html> <html lang="en"> <head&g ...

  5. layui表格点击排序按钮后,表格绑定事件失效解决方法

    最近项目使用layui较为频繁,遇到了一个麻烦的问题,网上搜索也没有看到同类型的问题,故此记下来. 需求是点击上图右侧表格中某一个单元格,会触发点击事件如下代码: $("table>t ...

  6. 在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结

    当我们在开发中遇到tab切换,这时候用el的el-tabs感觉很方便 但当我在把代码都写完后,发现一个问题就是页面打开时 虽然我们只能看见当前一个tab页,但是vue会帮你把你写的所有tab页的内容都 ...

  7. vue中使用elementUI中表格的v宽度,字体大小

    <el-table :row-style="{height:'20px'}" :cell-style="{padding:'0px'}" style=&q ...

  8. vue中使用elementUI

    引入Element 因为整个项目是依赖ElementUI框架做的,所以采用了全部引入 1,在项目根目录执行命令:npm i element-ui -S进行安装 2,在main.js中引入element ...

  9. 在vue中使用Element-UI

    Element-UI是一套基于Vue2.0的UI组件库,http://element.eleme.io/#/zh-CN/component/carousel 首先npm install element ...

  10. vue中使用element-ui自定义主题后,vue-cli跑不起来了

    环境:vue-cli 2.x版本 自己在官网配置了主题并放到了项目中https://element.eleme.cn/#/zh-CN/theme 然后,我的脚手架在我的电脑中休息了几天,就跑不通了呢! ...

随机推荐

  1. 6.2 XXE和XML利用

    pikaqu靶场xml数据传输测试-有回显,玩法,协议,引入 1.构造payload 写文件 <?xml version="1.0" encoding="UTF-8 ...

  2. .NET 8 微软免费开源的 Blazor UI 组件库

    前言 .NET 8 的发布,微软推出了官方免费且开源的 Blazor UI 组件库 -- Fluent UI Blazor. 组件库提供了Web应用程序所需的工具,确保应用程序能够与 Microsof ...

  3. vue-router的History 模式常用的三种配置方式(去掉地址栏中的#号)

    第一种:nginx配置 conf主要的配置代码: http { # nginx负载均衡配置 upstream dynamic_balance { #ip_hash; server 192.168.10 ...

  4. EF Core – 大杂烩

    前言 记入一些零零碎碎的知识. Shadow Properties 参考:Docs – Shadow and Indexer Properties Shadow Property 指的是那些在数据库有 ...

  5. RxJS 系列 – Join Operators

    前言 前几篇介绍过了 Creation Operators Filtering Operators Join Creation Operators Error Handling Operators T ...

  6. HTML & CSS – Responsive Image 响应式图片 (完整版)

    前言 之前就有写过关于 Retina 和 Responsive Image 响应式图片 (responsive image) Retina 显示屏 但写的太烂了, 所以有了后来的 屏幕, 打印, 分辨 ...

  7. mongodb 中rs.stauts()命令参数解析

    转载请注明出处: rs.status()命令用于获取MongoDB副本集的状态信息.它提供了关于副本集中各个节点的详细信息,包括节点的健康状况.角色.选举状态等. 以下是查看一个mongo集群状态返回 ...

  8. PyCharm 的一些基本设置&&常用插件&&快捷键

    PyCharm一些基本设置   1.主题色彩   2.添加设置:Ctrl+鼠标滚轮上下调节字体大小           3. 中文语言包   4.翻译插件 5.快捷键

  9. QT6 Widgets深入剖析

    QT6 Widgets深入剖析 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C++扩展开发视频课程 免费QT视频课程 您可以看免费100 ...

  10. AD域下,没有登录服务器处理登录请求

    原因: IP地址配置有问题 或者 DNS : 解决办法: 重新设置 IP地址 和 DNS : 此案例中, 切换到 test 账户(域管理员)后发现 , 未配置 IP地址 和 DNS :