效果图如下:

由于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. angular 知识

    看完以下内容应该就可以上手Angular了 https://angular.io/start Udemy - Complete Angular 14 Course - Learn Frontend D ...

  2. 合合信息推出国央企智能文档处理解决方案,AI赋能信创国产化

    信息时代,数字化转型已成为推动经济高质量发展的关键力量.国央企是国民经济的重要支柱,其数字化转型进程关乎着自身与产业链上下游企业的共同发展.文档的智能化处理可有效提升信息流转的效率.促进知识的沉淀与传 ...

  3. 1. Two Sum Go实现

    在数组中找到 2 个数之和等于给定值的数字,结果返回 2 个数字在数组中的下标. 1. 解法1 时间复杂度 O(n^2) 直接两次遍历所有节点,进行求和比较 代码如下: func twoSum(num ...

  4. JavaScript – Promise

    前言 我学 Promise 的时候, 那时还没有 es6. 曾经还自己实现过. 但时隔多年, 现在 es6 的 promise 已经很完善了. 这篇作为一个简单的复习. (毕竟我已经 1 年多没有写 ...

  5. 十五,Spring Boot 整合连接数据库(详细配置)

    十五,Spring Boot 整合连接数据库(详细配置) @ 目录 十五,Spring Boot 整合连接数据库(详细配置) 最后: JDBC + HikariDataSource(Spring Bo ...

  6. nuxt(搁置)

    https://nuxt.com.cn/docs/getting-started/installation 开始使用 全栈Web应用和网站 Nuxt使用约定和一套规范的目录结构来自动化重复的任务,让开 ...

  7. Nuxt Kit中的 Nitro 处理程序

    title: Nuxt Kit中的 Nitro 处理程序 date: 2024/9/21 updated: 2024/9/21 author: cmdragon excerpt: 摘要:本文详细介绍了 ...

  8. 北京智和信通 | 无人值守的IDC机房动环综合监控运维

    随着信息技术的发展和全面应用,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备.系统.业务应用数量与日俱增,规模逐渐扩大,一旦机房内的设备出现故障,将对数据处理.传输.存储以及 ...

  9. 65.说下vue3的使用感想(说些vue3对比vue3的方便之处)

    vue3 使用了组合式API,setup 替换了选项式api ,不需要在多个api里面写代码了,而且使用了setup的语法糖,可以更加方便写代码 : vue3使用proxy替代了Object.defi ...

  10. Vnode 的渲染过程

    在tamplate编译的时候,generater 会生成一个render 函数,通过 render 函数会把 template 内容描述成 vnode ,然后vnode 通过一系列操作转换为真实的 D ...