vue中使用elementUI的全选表格,点击全选,选中子表格的checkbox
效果图如下:

由于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的更多相关文章
- Django day 33 vue中使用element-ui的使用,课程的相关介绍,vue绑定图片,课程列表接口,课程详情页面
一:vue中使用element-ui的使用, 二:课程的相关介绍, 三:vue绑定图片, 四:课程列表接口, 五:课程详情页面
- 在vue中使用ElementUI
完整引用ElementUI: 安装:在需要使用到的vue项目目录下,使用npm下载安装: npm/cnpm i element-ui -S/--save <!-- 引入样式 --> < ...
- vue中对element-ui框架中el-table的列的每一项数据进行操作
vue中使用element table,表格参数格式化formatter 后台返回对应的数字, 那肯定不能直接显示数字,这时候就要对 表格进行数据操作 如图: 代码: methods: { //状态改 ...
- js之全选即点击全选标签可选择全部复选框
目标效果:网页全选功能,即点击全选标签可选择全部复选框 实现代码如下 <!DOCTYPE html> <html lang="en"> <head&g ...
- layui表格点击排序按钮后,表格绑定事件失效解决方法
最近项目使用layui较为频繁,遇到了一个麻烦的问题,网上搜索也没有看到同类型的问题,故此记下来. 需求是点击上图右侧表格中某一个单元格,会触发点击事件如下代码: $("table>t ...
- 在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结
当我们在开发中遇到tab切换,这时候用el的el-tabs感觉很方便 但当我在把代码都写完后,发现一个问题就是页面打开时 虽然我们只能看见当前一个tab页,但是vue会帮你把你写的所有tab页的内容都 ...
- vue中使用elementUI中表格的v宽度,字体大小
<el-table :row-style="{height:'20px'}" :cell-style="{padding:'0px'}" style=&q ...
- vue中使用elementUI
引入Element 因为整个项目是依赖ElementUI框架做的,所以采用了全部引入 1,在项目根目录执行命令:npm i element-ui -S进行安装 2,在main.js中引入element ...
- 在vue中使用Element-UI
Element-UI是一套基于Vue2.0的UI组件库,http://element.eleme.io/#/zh-CN/component/carousel 首先npm install element ...
- vue中使用element-ui自定义主题后,vue-cli跑不起来了
环境:vue-cli 2.x版本 自己在官网配置了主题并放到了项目中https://element.eleme.cn/#/zh-CN/theme 然后,我的脚手架在我的电脑中休息了几天,就跑不通了呢! ...
随机推荐
- 解决elementUI 表格el-table设置高度之后合计行不显示
问题:elementUI el-table 设置了高度height 和合计行 show-summary 之后,合计行无法正常显示 一.问题分析 根据调试,发现该问题应该属于组件bug,表格主体中给 f ...
- AI工具合集
以下工具来源于互联网,可能会失效,请参考使用 网红工具 名称 链接 说明 GPT-4 https://chat.openai.com/ 需要梯子,需要付费.功能最强大的聊天机 器人. 文心一言 h ...
- OData – 坑
前言 OData 有很多很多的坑,我的主张是能少用一样是一样,比如 Batch Processing 不要用,Inheritance 不要用,除了 GET 其它 PUT POST DELETE 都不要 ...
- Vue 3.3.11 迁移指南
https://v3-migration.vuejs.org/zh/ 用于迁移的构建版本 @vue/compat (即"迁移构建版本") 是一个 Vue 3 的构建版本,提供了可配 ...
- JVM(JAVA Virtual Machine)Java虚拟机
JVM的跨平台性 一次编写,到处运行 JVM将字节码文件编译成对应操作系统的机器码 JVM的语言无关性 JVM的内存区域 虚拟机栈:在JVM运行过程中存储当前线程运行方法所需的数据,指令.返回地址 本 ...
- 简单粗暴的实现 Blazor Server 登录鉴权
既然是简单粗暴,那么就不用关心诸如 IDentityServer4,OAuth 之类的组件,也不使用 AuthenticationStateProvider.IAuthService, razor 页 ...
- 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年4月刊
本文为大家整理了墨天轮数据社区2023年4月发布的优质技术文章,主题涵盖Oracle.MySQL.PostgreSQL等数据库的基础安装配置.故障处理.性能优化等日常实践操作,以及概念梳理.常用脚本. ...
- 墨天轮最受DBA欢迎的数据库技术文档-故障处理案例篇
在之前发布的<墨天轮最受欢迎的技术文档-容灾备份篇>中,大家说想看故障处理案例篇的内容,这不!编辑部快马加鞭给大家整理来了,希望能够帮助到大家. 数据库故障可能出现在内存.网络.CPU.硬 ...
- 墨天轮访谈 | 百度云邱学达:GaiaDB如何解决云上场景的业务需求?
分享嘉宾:邱学达 百度云原生数据库资深技术专家 整理:墨天轮社区 导读 业务上云的大背景对弹性与可靠性的要求越来越高,传统架构的单机数据库或是分片数据库已经很难支撑快速增长的业务,导致单机瓶颈.扩容缩 ...
- 58. vue常用的api
1. nextTick 使用场景:通过异步渲染的页面解构不能直接dom操作,要使用 nextTick (延迟回调)等待一下 :nextTick 的作用:感知dom的更新完成,类似于 updated ...