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.rhkb.cn/news/241537.html

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

相关文章

端到端自动驾驶

自动驾驶主要流程&#xff1a;感知->预测->规划 预测是预测周围目标&#xff08;车、行人、动物等&#xff09;的轨迹&#xff0c;规划是规划自车的运动轨迹。 UniAD[CVPR 2023]: 使用transformer架构&#xff0c;统一自动驾驶流程&#xff0c;完成所有检测&#xff0c…

惊心!读写台灯国检结果发布:不合格87.5%都因照度和照度均匀度!

近日&#xff0c;国家市场监管总局正式对外发布“2023年烟花爆竹、羽绒服装等13种产品质量国家监督抽查情况通报”&#xff0c;涉及读写台灯、固定式通用灯具、嵌入式灯具等3类照明产品第二批国抽情况。本次国抽情况显示&#xff0c;包括316家照明相关生产和销售单位所属的361批…

仿三方智能对话分析原始会话窗口

设计效果如下&#xff1a; 设计要求如下&#xff1a; 1、顶部播放条播放时&#xff0c;文字内容自动滚动。 监听audio事件timeupdate&#xff0c;只要播放器在播放就会触发该事件。每行文字有开始时间begin。判断当前时间&#xff08;currentTime&#xff09;<开始时间&am…

JAVA实现向Word模板中插入Base64图片和数据信息

目录 需求一、准备模板文件二、引入Poi-tl、Apache POI依赖三、创建实体类&#xff08;用于保存向Word中写入的数据&#xff09;四、实现Service接口五、Controller层实现 需求 在服务端提前准备好Word模板文件&#xff0c;并在用户请求接口时服务端动态获取图片。数据等信息插…

[UofTCTF 2024]

最近没有比赛&#xff0c;拿个国外刚比完的练练手。只是网站太慢了&#xff0c;点任何一处都得等一分钟。而且pwn的远程都开不了。不过pwn过于简单&#xff0c;连本地都没调&#xff0c;当是个pwn概念吧。 Crypto repeat 题 import os import secretsflag "REDACATED…

限流算法之固定窗口算法

文章目录 原理示例图 优缺点优点缺点 示例代码java 适用场景不推荐原因如下&#xff1a; 原理 固定窗口算法是一种常见的限流算法&#xff0c;它通过在固定长度的时间窗口内限制请求数量来实现限流。这种算法的原理是在每个时间窗口内&#xff0c;对到达的请求进行计数&#x…

【EI会议征稿通知】第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)

第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024&#xff09; 2024 7th International Conference on Advanced Electronic Materials, Computers and Software Engineering 第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)将于2024年5月10-1…

C++、QT 数字合成游戏

一、项目介绍 数字合成游戏 基本要求&#xff1a; 1&#xff09;要求游戏界面简洁美观&#xff0c;且符合扫雷的游戏风格。 2&#xff09;需要有游戏操作或者规则说明&#xff0c;方便玩家上手。 3&#xff09;需具有开始游戏&#xff0c;暂停游戏&#xff0c;结束游戏等方便玩…

2024--Django平台开发-订单项目管理(十四)

day14 订单管理系统 1.关于登录 1.1 UI美化 页面美化&#xff0c;用BootStrap 自定义BooStrapForm类实现。 class BootStrapForm:exclude_filed_list []def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# {title:对象,"percent":对象}fo…

市场监管总局发布区块链和分布式记账技术6项标准,中创积极推动区块链产业发展!

近日&#xff0c;市场监管总局&#xff08;国家标准委&#xff09;批准发布一批重要国家标准&#xff0c;涉及生产生活、绿色可持续等多个领域&#xff0c;这些标准将在引领产业发展、促进绿色转型、助力对外贸易、推动城乡建设、提升生活品质等方面发挥重要作用。 其中一项标…

免费三款备受推崇的爬虫软件

在信息爆炸的时代&#xff0c;爬虫软件成为了数据采集、信息挖掘的得力工具。为了解决用户对优秀爬虫软件的需求&#xff0c;本文将专心分享三款备受推崇的爬虫软件&#xff0c;其中特别突出推荐147采集软件&#xff0c;为您开启爬虫软件的奇妙世界。 一、爬虫软件的重要性 爬…

【开源】基于JAVA的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 SSA奇异谱分析&#xff08;Singular Spectrum Analysis&#xff09;是一种处理非线性时间序列数据的方法&#xff0c;可以对时间序列进行分析和预测。 它基于构造在时间序列上的特定矩阵的奇异值分解&#…

3Dmax灯光学习(Vray灯光应用)

渲染效果图可以用渲染100哦&#xff0c;最高支持max2024&#xff0c;cr11&#xff0c;vr6.2&#xff0c;支持LUT和Acescg工作流等常用插件&#xff0c;同时森林插件7.43也进行了支持&#xff0c;注册填邀请码【7788】即可免费测试&#xff01; 灯光应用 普通灯光/标准灯光(外景…

RIP基础实验配置

要使用RIP完成以上命令需求 1&#xff0c;首先划分ip地址 有图可见有四个网段需要划分 192.168.1.0/26 192.168.3.0/26 192.168.7.0/26 192.168.5.0/26 给两个骨干网段&#xff0c;给两个环回接口&#xff0c;由下图所示&#xff1a; 其次&#xff0c;规划好ip后在各个接口…

多测师肖sir___ui自动化测试po框架(升级)

ui自动化测试po框架&#xff08;升级&#xff09; po框架 一、ui自动化po框架介绍 &#xff08;1&#xff09;PO是Page Object的缩写&#xff08;pom模型&#xff09; &#xff08;2&#xff09;业务流程与页面元素操作分离的模式&#xff0c;可以简单理解为每个页面下面都有一…

hanlp,pkuseg,jieba,cutword分词实践

总结&#xff1a;只有jieba,cutword,baidu lac成功将色盲色弱成功分对,这两个库字典应该是最全的 hanlp[持续更新中] https://github.com/hankcs/HanLP/blob/doc-zh/plugins/hanlp_demo/hanlp_demo/zh/tok_stl.ipynb import hanlp # hanlp.pretrained.tok.ALL # 语种见名称最…

初识Ubuntu

其实还是linux操作系统 命令都一样 但是在学习初级阶段&#xff0c;我还是将其分开有便于我的学习和稳固。 cat 查看文件 命令 Ubuntu工作中经常是用普通用户&#xff0c;在需要时才进行登录管理员用户 sudn -i 切换成管理用户 我们远程连接时 如果出现 hostname -I没有出现…

长亭科技-雷池WAF的安装与使用

目录 1、安装雷池 2、登录雷池 3、简单配置 4、防护测试 5、其他补充 1、安装雷池 在Linux系统上执行如下命令 &#xff08;需要docker环境&#xff0c;提前把docker、docker-compose 装好&#xff09; bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release…

vba设置excel单元格背景色

vba设置excel单元格背景色位蓝色 Sheet1.Cells(hang, 2).Interior.Color RGB(0, 0, 255) 参考链接 【VBA】给单元格设置背景色_vba 将一行底色置绿色-CSDN博客https://blog.csdn.net/s_h_m114_2/article/details/105787093 参考2 知乎 VBA--单元格的背景色设置 特此…