element中Table表格控件单选、多选功能进一步优化

目录

  • 一、代码实现
    • 1、 父组件
    • 2、子组件(弹框)
  • 二、效果图

一、代码实现

1、 父组件

<template><div><!-- 用户选择嵌套弹框 --><el-dialog :close-on-click-modal="false" :close-on-press-escape="false" title="选择人员" :visible.sync="open"width="80%" append-to-body :show-close="false"><TableList :open="open" :dataList="dataList" @submitForm="submitForm" @cancel="cancel"></TableList></el-dialog></div>
</template><script>
import TableList from '@/components/table-list'
export default {name: 'TablePage5',components:{TableList,},props: {},data() {return {open:true,dataList:[ {userId: 3,userName: '王五'},],}},watch: {},methods: {// 取消cancel() {// this.open = false// .............},// 确认submitForm(checkIds) {console.log(checkIds, 'checkId获取到')// .........},}
}
</script><style></style>

2、子组件(弹框)

<template><div class="app-container"><el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px"><el-form-item label="搜索" prop="search"><el-input v-model="queryParams.search" placeholder="请输入" clearable size="small" style="width: 200px"@keyup.enter.native="handleQuery" /></el-form-item><el-form-item><el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery('queryForm')">搜索</el-button><el-button icon="el-icon-refresh" size="mini" @click="resetQuery('queryForm')">重置</el-button></el-form-item></el-form><el-table v-loading="loading" :data="userList" max-height="400" ref="multipleTable" @select="selectRow"@select-all="selectAll" :header-cell-class-name="cellClass" :row-key="row => {return row.userId}"><!-- reserve-selection="true" 仅对 type=selection 的列有效,类型为 Boolean,为 true 则会在数据更新之后保留之前选中的数据(需指定 row-key) --><el-table-column type="selection" width="50" align="center" :reserve-selection="true" :selectable="selected" /><el-table-column type="index" width="100" :index="indexMethod" label="序号"></el-table-column><el-table-column label="姓名" align="center" prop="userName" :show-overflow-tooltip="true" /></el-table><el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange":current-page="queryParams.pageNum" :page-sizes="[2, 5, 10, 15]" :page-size="queryParams.pageSize"layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination><!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize" @pagination="getList" :autoScroll="false" /> --><div class="dialog-footer"><el-button @click="cancel">取 消</el-button><el-button type="primary" @click="submitForm">确 定</el-button></div></div>
</template><script>
// import { listPeople } from '@/api/manager/peopleList'
export default {name: 'TablePage5',props: {open: {type: Boolean,default: true},// 默认选中的数据dataList: {type: Array,default: () => {return []}},// 默认为0多选, 传递1单选type: {type: Number,default: 0}},data() {return {// 用户查询参数queryParams: {pageNum: 1,pageSize: 10,search: ''},loading: false,// 用户列表(所有的用户数据)userList: [{userId: 1,userName: '张三'},{userId: 2,userName: '李四'},{userId: 3,userName: '王五'},{userId: 4,userName: '测试1'},{userId: 5,userName: '测试2'},{userId: 6,userName: '测试3'},],// 用户总数total: 0,// 全选按钮隐藏DisableSelection: false,// 选中的人员列表checkList: [],// 选中的人员Id列表checkIds: []}},watch: {// 判断弹框是否显示open: {handler(val) {if (val) {this.getList()}},immediate: true},// 父组件传递过来的之前已经选中的数据dataList: {handler(list) {this.checkList = listif(list){this.checkIds = list.map(item=>item.userId)}},immediate: true,deep: true}},methods: {// 分页相关indexMethod(index) {// this.pageNum当前页码 // this.pageSize 每页条数return (this.queryParams.pageNum - 1) * this.queryParams.pageSize + index + 1},// 人员列表getList() {// 根据实际需求,调用对应接口...........// this.loading = true// listPeople(this.queryParams)//     .then(res => {//         console.log(res, '人员列表')//         this.userList = res.rows//         this.total = res.total//         this.loading = false//         数据回显//         this.selectedRecords()//     }).catch(err => {//         console.log(err)//         this.loading = false//     })// 数据回显this.selectedRecords()},// 数据回显 (之前选中的数据,和全部人员数据之间判断,如果userId相同,就表示选中,默认复选框选中)// toggleRowSelection 用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中)selectedRecords() {console.log(this.checkList, '数据回显')let that = thisthis.$nextTick(() => {this.userList.forEach((row) => {this.checkList.forEach((child) => {if (row.userId == child.userId) {that.$refs.multipleTable.toggleRowSelection(row)}})})})},// 分页相关handleSizeChange(val) {console.log(`每页 ${val} 条`);this.queryParams.pageSize = val;this.getList()},handleCurrentChange(val) {console.log(`当前页: ${val}`);this.queryParams.pageNum = val;this.getList()},// 选择人员弹框handleQuery() {this.queryParams.pageNum = 1this.getList()},// 选择人员重置resetQuery(queryForm) {this.$refs[queryForm].resetFields()this.queryParams.pageNum = 1this.getList()},// 全选:list所有选中的数据组成的列表selectAll(list) {console.log('全选', list)// list为空,表示全不选if (!list.length) { // 全不选// 将当前页表格的数据循环判断是否存在在checkList中,存在就删除this.userList.forEach((item) => {this.checkList.forEach((child, key) => {if (item.userId == child.userId) {this.checkList.splice(key, 1)this.checkIds.splice(key, 1)}})})} else { // 全选// 循环list,将不存在的值加上,已经存在的就不加了list.map((item) => {if (this.checkIds.indexOf(item.userId) == -1) {this.checkList.push(item)this.checkIds.push(item.userId)}})}},// 单选 list所有选中的数据组成的列表,  row当前选中或者取消选中的数据对象selectRow(list, row) {console.log('表格单选', list, row)let rowId = row.userId// 判断当前选项是否已经选择过了, -1表示不存在,没有选择过,  其余则是选择过了let isExist = -1this.checkList.forEach((item, index) => {if (row.userId == item.userId) {isExist = index}})// row.id不存在在list中的时候,说明是取消勾选,undefined表示去除勾选let isDel = list.find(item => {return item.userId == rowId}) == undefinedif (isDel) { //取消勾选// 去除,存在就删除if (isExist != -1) {this.checkList.splice(isExist, 1)this.checkIds.splice(isExist, 1)}} else { // 勾选// 添加if (isExist == -1) {this.checkList.push(row)this.checkIds.push(row.userId)}}},// 选择人员确认// clearSelection 用于多选表格,清空用户的选择submitForm() {let list = []this.checkList.map(item => {list.push(item.userId)})this.checkIds = list// 去重this.checkIds = [... new Set(this.checkIds)]// console.log(this.checkList,'this.checkList')// console.log(this.checkIds,'this.checkIds')this.$emit('submitForm', this.checkIds)// 清除复选框this.$refs.multipleTable.clearSelection()},// 取消按钮cancel() {this.$emit('cancel')// 清除复选框this.$refs.multipleTable.clearSelection()},// 超过1个人禁止选择 (当type为1时候,也就是单选时候)selected(row) {// 限制逻辑,返回 true 则为可勾选,反之则禁止勾选let judge = trueif (this.checkList.length == 1 && this.type == 1) { // 单选judge = this.checkList.some(item => {return item.userId == row.userId})}return judge},// 全选禁用 (当type为1时候,是单选,故全选按钮禁用)// 配合样式使用cellClass() {if (this.type == 1) {return 'DisableSelection'}}}
}
</script><style>
.dialog-footer {width: 100%;display: flex;justify-content: center;margin-top: 50px;
}.el-table .DisableSelection .cell .el-checkbox__inner {display: none;position: relative;
}.el-table .DisableSelection .cell:before {content: '';position: absolute;
}
</style>

二、效果图

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础学Python(1)— 一文带你了解什么是Python(包括Python解释器安装步骤等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。从今天开始&#xff0c;我们就一起进入Python的世界&#xff01;&#x1f389;为了让大家能够牢固地掌握Python语言&#xff0c;本系列文章就循序渐进&#xff0c;从最基础的知识开始讲起&#xff0c;教大家如何去使用Pyth…

Spring-BeanPostProcessor PostConstruct init InitializingBean 执行顺序

执行顺序探究 新建一个对象用于测试 Component public class Student implements InitializingBean {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}pu…

代码之外:工程师的成长进阶秘籍

程序员只懂技术能行吗&#xff1f; 为什么说技术人员“说”和“写”总得擅长一个&#xff1f; 你以为的“关注结果”是真的结果吗&#xff1f; 从一线工程师跃升团队管理者一共分几步&#xff1f; 在不断变化的职场…

Linux粘滞位的理解,什么是粘滞位?

文章目录 前言如何理解&#xff1f;粘滞位的操作最后总结一下 前言 粘滞位&#xff08;Stickybit&#xff09;&#xff0c;或粘着位&#xff0c;是Unix文件系统权限的一个旗标。最常见的用法在目录上设置粘滞位&#xff0c;如此以来&#xff0c;只有目录内文件的所有者或者root…

zabbix其他配置

自动发现 zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;zabbix server 登记耗时较久&#xff0c;且压力会较大。 systemctl disable --now firewalld setenforce 0 hostnamectl se…

还在手动复制文章吗?教你如何一键将文章从notion同步到WordPress

本文会给大家介绍如何在WordPress上安装一个插件&#xff0c;实现将notion上写的文章自动同步到WordPress上&#xff0c;从而提高写作效率&#xff0c;接下来请跟随我的脚步一起来操作吧&#xff01; 一、插件安装 在WordPress后台添加新插件页面中搜索“notion”&#xff0c;…

ip2domain - 批量查询ip对应域名、备案信息、百度权重

免责声明 由于传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章及作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担&#xff01;如有侵权烦请告知&#xff0c;我们会立即删除并致歉。谢谢&#xf…

应该怎样保存用户密码

应该怎样保存用户密码&#xff1f; 首先&#xff0c;MD5 其实不是真正的加密算法。所谓加密算法&#xff0c;是可以使用密钥把明文加密为密文&#xff0c;随后还可以使用密钥解密出明文&#xff0c;是双向的。 使用 MD5 运算后得到的都是固定长度的摘要信息或指纹信息&#x…

C#:接口中如何将某个值类型的字段传null?

在实际对接第三方接口时&#xff0c;偶尔会有一些字段在某些情况下是不需要传值的。那如何处理呢&#xff1f; 有两种方法&#xff1a; 1、将值类型改为可空类型&#xff1b; 2、定义基类&#xff0c;基类包含所有必须要传的字段&#xff0c;子类则加入偶尔需要传的字段。 下…

java注释

注释 1、单行注释 2、多行注释 3、文档注释&#xff08;重点&#xff09; /*** author cx* version 1.0*/ public class Comment{//编写一个main方法public static void main(String[] args){System.out.println("hello,world~");} } 1. 在D盘找到javacode文件&a…

电梯节能落座-智慧停车场️,电梯不仅可载人也可以载汽车!

电梯不仅可载人也可以载汽车哦&#xff01; 在北京市丰台区&#xff0c;有这么一个智慧停车场&#x1f17f;️ &#xff0c;共298个停车位&#xff0c;全部智能一体化&#xff0c;简直是“豪华” “智能” 的象征。 523能源&#xff1a;小伍&#xff0c;你跑题了... 小伍&am…

【unity学习笔记】语音驱动blendershape

1.导入插件 https://assetstore.unity.com/packages/tools/animation/salsa-lipsync-suite-148442 1.选择小人&#xff0c;点击添加组件 分别加入组件&#xff1a; SALSA EmoteR Eyes Queue Processor&#xff08;必须加此脚本&#xff09;&#xff1a;控制前三个组件的脚本。…

Python GUI 新手入门教程:轻松构建图形用户界面

Python 凭借其简单性和多功能性&#xff0c;已经成为最流行的编程语言之一。被广泛应用于从 web 开发到数据科学的各个领域。 在本教程中&#xff0c;我们将探索用于创建图形用户界面&#xff08;GUIs&#xff09;的 Python 内置库&#xff1a; Tkinter&#xff1a;无论你是初…

golang 中使用 statik 将静态资源编译进二进制文件中

现在的很多程序都会提供一个 Dashboard 类似的页面用于查看程序状态并进行一些管理的功能&#xff0c;通常都不会很复杂&#xff0c;但是其中用到的图片和网页的一些静态资源&#xff0c;如果需要用户额外存放在一个目录&#xff0c;也不是很方便&#xff0c;如果能打包进程序发…

Byrdhouse AI实时语音翻译工具,可以在视频通话中翻译100多种语言

你是否曾经在跨国会议或与外国友人聊天时&#xff0c;因为语言不通而感到尴尬或困扰&#xff1f;是不是还在找可以实时翻译的软件或者APP&#xff1f;现在&#xff0c;有了这款语音翻译神器&#xff0c;一切都将变得简单&#xff01; 免费使用链接&#xff1a;https://byrdhous…

Text:焦点切换文字颜色随之改变

按Tab键切换2段文字的焦点&#xff0c;哪段文字的焦点为true&#xff0c;则字体颜色变为红色。 import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("2.2 属性")Rectangle {Text {id: thislabeltext: qsTr("hello world")font.pixelSiz…

龙芯3A5000上使用腾讯会议

原文链接&#xff1a;龙芯3A5000上使用腾讯会议 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在龙芯3A5000处理器上安装使用腾讯会议的经验分享。随着远程工作和在线会议的普及&#xff0c;腾讯会议成为了许多人日常工作不可或缺的工具。而对于使用龙芯3A5000…

Open3D 点云转深度图像

目录 一、算法原理1、算法过程2、主要函数二、代码实现三、结果展示1、点云2、深度图像四、测试数据Open3D 点云转深度图像由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。<

全网最详细!!Python 爬虫快速入门

1. 背景 最近在工作中有需要使用到爬虫的地方&#xff0c;需要根据 Gitlab Python 实现一套定时爬取数据的工具&#xff0c;所以借此机会&#xff0c;针对 Python 爬虫方面的知识进行了学习&#xff0c;也算 Python 爬虫入门了。 需要了解的知识点&#xff1a; Python 基础语…

Spring Cloud核心组件介绍

三大门派 有Spring Cloud的地方就有江湖&#xff0c;我们就来看一看在这个江湖中都有哪些独霸一方的门派! Netflix 是先有SpringCloud还是先有Netflix?这是一个好问题。Netflix是一家大名鼎鼎的互联网传媒公司&#xff0c;但为什么它在开源软件领域有这么大的名声呢?这就…