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 然后,我的脚手架在我的电脑中休息了几天,就跑不通了呢! ...
随机推荐
- QT6跨平台开发
QT6跨平台开发 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C++扩展开发视频课程 免费QT视频课程 您可以看免费1000+个QT技术 ...
- 【QT性能优化】QT性能优化之QT6框架高性能网络编程框架实现百万TCP长连接网络服务器:QT是否适合做高性能网络应用?补天云这个视频告诉你在大厂Linux云服务器上的实测结果
QT性能优化之QT6框架高性能网络编程框架实现百万TCP长连接网络服务器 Ø 简介 本文作者编写了一套基于QT的TCP网络服务器程序和基于QT的TCP客户端程序,在某大厂的云服务器上进行了C1000K ...
- 报名开启|和你约定在 "Google 应用出海指南针"
Google 谷歌发布的<2021 移动应用全球化指南>报告中提到,在移动互联网高度渗透的当下,全球用户迸发出来的广泛需求为中国新生代创业者带来了巨大的历史机遇.过去十年,依托于技术和人才 ...
- 关于 B 先生
B 先生是不是要疯了,他今天说的都是他妈什么几把
- RTPS代理与转发服务
Proxy介绍 利用libevent实现网络连接和线程池.通过tcp连接的方式实现rtsp消息转发,再通过udp连接进行rtp与rtcp转发.报文解析使用到了Qt库.请尽量使用qmake进行编译.源码 ...
- 九问 GBase | 如何看待“科技制裁”?如何助力中国数据库国产化落地?
导读: Oracle.SAP.Apple.Google.Github等国际科技巨头纷纷宣布停止在俄罗斯业务,英特尔.AMD.戴尔等科技企业也被曝已中断向俄供货.当全面科技制裁来临,俄罗斯将如何应对此次 ...
- ajax异步请求数据还没有返回,页面时空白的如何处理
使用骨架屏,给用户一种正在解析数据的感觉 : element-ui的骨架屏 :https://element.eleme.cn/#/zh-CN/component/skeleton
- Android复习(三)清单文件中的元素——>path-permission、permission、permission-group、permission-tree
<path-permission> 语法: <path-permission android:path="string" android:pathPrefix=& ...
- python之图片与视频互转
图片转视频 def image_to_video(image_dir, video_dir, fps): im_list = [i for i in os.listdir(image_dir) if ...
- 一文搞懂SaaS应用架构:应用服务、应用结构、应用交互设计
大家好,我是汤师爷~ 今天系统性地聊聊SaaS应用架构设计. 应用架构概述 我们已经完成了SaaS系统的定位分析,明确了系统的目标和核心能力.这为接下来的应用架构设计奠定了基础. 应用架构就像整个Sa ...