数据动态变化时实现多选及回显

 

<template><el-dialog title="设置权限" :visible.sync="showDialog" :close-on-click-modal="false" :append-to-body="true" width="800px"><div v-loading="loading"><el-radio-group v-model="setPowerRadio"><el-radio :label="0" style="display:block;line-height: 30px;">所有人可见</el-radio><el-radio :label="1" style="display:block;line-height: 30px;">选择可见</el-radio></el-radio-group><div v-show="setPowerRadio==1"><el-row><el-col :span="10" style="height: 300px;border: 1px solid #CBCBCB;"><div class="power-department-border">部门</div><el-tree :data="unitsList" :empty-text="emptyText" node-key="id" ref="tree" :default-expand-all="true":highlight-current="true" :render-content="renderContentStation" @node-click="handleNodeClick"class="power-col-left-border"></el-tree></el-col><el-col :span="14" style="padding: 0 10px;height: 300px;"><!-- ref="multipleTable" --><!--选择项发生变化 @selection-change="handleSelectionChange" --><el-table border :data="tableData" tooltip-effect="dark" style="width: 100%" ref="multipleTable"@select="handleSelectionRow" @select-all="handleSelectionAll" class="power-col-right-overflow"><el-table-column type="selection" width="55"></el-table-column><el-table-column prop="userName" label="姓名"></el-table-column></el-table></el-col></el-row><div class="select-people"><div>已选择({{ tableDataRight.length }}):</div><div><span v-for="(item, index) in tableDataRight" :key="index">{{ item.userName }}<span v-if="tableDataRight.length != index + 1">,</span></span></div></div></div><div class="text-center-margin-20-0"><el-button @click="showDialog = false">取 消</el-button><el-button type="primary" @click="onSubmit()">确 定</el-button></div></div></el-dialog>
</template>
<script>export default {data() {return {showDialog: false,loading: false,setPowerRadio: 0, //0所有 1选择CurrentDepartmentId: "", //当前部门idunitsList: [], //部门数组filterText: '', //关键字查询emptyText: '',id: '', //父组件idtableData: [], //人员显示leftCodes: [], //左侧列表id集合tableDataRightCodes: [], //选中的人员id数组tableDataRight: [], //选中的人员总数据search: 0, // 1.搜索开始  0搜索结束};},watch: {filterText(val) {this.$refs.tree.filter(val);},},methods: {add(row, type) {this.showDialog = true;this.routerType = type;this.$nextTick(() => {if (row.fid) {this.id = row.fid;} else {this.id = row.id;}this.getCatetoryAuthLink(); //获取指定分类授权信息this.getDepartmentLink();});},//获取指定分类授权信息getCatetoryAuthLink() {//读初始选中的信息this.tableDataRight = res.data.data.userList; this.leftCodes = this.tableDataRight.map(dev => dev.id);},//获取左侧树型数据getDepartmentLink() {this.unitsList = []this.loading = true;this.search = 1;getDepartment().then(res => {if (res.data.code == 200) {let dataLink = res.data.datathis.unitsList = dataLink.list;this.$nextTick(() => {this.loading = false;if (dataLink.list.length != 0) {this.CurrentDepartmentId = dataLink.list[0].id;this.$refs.tree.setCurrentKey(dataLink.list[0].id);this.getNewPeople(dataLink.list[0].id);}})} else {this.loading = false;this.emptyText = '暂无数据'this.$message.error(res.data.msg);}});},//树-转换handleNodeClick(value) {this.CurrentDepartmentId = value.id;this.search = 1;this.$nextTick(() => {this.getNewPeople(value.id);})},//部门下的人员getNewPeople(id) {this.tableData = []let param = {departmentId: id,page: false,}getUserList(param).then(res => {if (res.data.code == 200) {this.tableData = res.data.data.list;this.defaultChoose(this.tableDataRight, this.tableData);this.$nextTick(() => {this.search = 0;});} else {this.$message.error(res.data.msg);}});},//选择单行handleSelectionRow(row, selected) {if (this.search) return;let booleanValue = this.tableDataRight.some(item => {return item.id == selected.id})//包含if (booleanValue) {this.tableDataRight = this.tableDataRight.filter(item => item.id != selected.id)} else {this.tableDataRight.push(selected)}},//全选/取消全部handleSelectionAll(selection) {if (this.search) return;if (selection.length != 0) {let arr = [...this.tableDataRight, ...selection];this.$nextTick(() => {// this.tableDataRight = Array.from(new Set(arr)) //简单去重let unique = new Map(); //复杂去重arr.forEach(item => unique.set(item.id, item));this.tableDataRight = [...unique.values()];})} else {this.tableData.forEach(item => {this.tableDataRight = this.tableDataRight.filter(ele => ele.id != item.id)})}},// 已选择的设备需要默认勾选// arr所有选中的;tableArr右侧表格显示数据defaultChoose(arr, tableArr) {/*注意:这里不能直接遍历arr,element和item 他们在内存中的地址不同,所以他们是两份不同的数据,所以这么写 toggleRowSelection(element, true) 是不会回显选中的*/for (let index = 0; index < tableArr.length; index++) {const item = tableArr[index];arr.forEach(element => {if (element.id == item.id) {this.$nextTick(() => {this.$refs.multipleTable.toggleRowSelection(item, true);});}});}},//处理名称-站点renderContentStation(h, {node,data,store}) {return ( < div ><span title = {data.departmentName}class = 'style-demo' > {data.departmentName} </span> </div > );},onSubmit() {if (this.setPowerRadio == 1 && this.tableDataRight.length == 0) {this.$message.warning("选择人员不可为空");return false;}let userIdList = this.tableDataRight.map(dev => dev.id);let param = {}if (this.routerType == '素材分类') {param = {categoryId: this.id,fvisible: this.setPowerRadio,userIdList: userIdList,}} else { //素材审核  素材管理param = {recordId: this.id,fvisible: this.setPowerRadio,userIdList: userIdList,}}let urlLink = nullif (this.routerType == '素材分类') {urlLink = setCatetoryAuth;} else {urlLink = setRecordAuth;}urlLink(param).then(res => {if (res.data.code == 200) {this.$message.success("操作成功");this.showDialog = false;if (this.routerType == '素材分类' || this.routerType == '素材管理') {this.$emit("refresh");}} else {this.$message.error(res.data.msg);}});}}}</script>
<style scoped>.select-people {border: 1px solid #CBCBCB;background: #F0F5F7;color: #000000;margin: 10px;width: calc(100% - 20px);min-height: 100px;padding: 10px;box-sizing: border-box;}.power-department-border {border: 1px solid #CBCBCB;background: linear-gradient(180deg, #F0F5F7 93%, #DFE4E6 97%);box-sizing: border-box;vertical-align: middle;text-align: center;line-height: 1.5;padding: 5.5px 0;font-weight: bold;color: #666666;font-size: 16px;font-size: calc(var(--scale) * 16px);border-bottom: 1px solid #CBCBCB;}</style>

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

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

相关文章

【论文阅读】MODELING AND SOLVING THE TRAVELING SALESMAN PROBLEM WITH PRIORITY PRIZES

文章目录 论文基本信息摘要1.引言2. INTEGER QUADRATIC PROGRAM FOR TSPPP3. MIXED INTEGER LINEAR PROGRAMS FOR TSPPP4. TABU SEARCH ALGORITHM FOR TSPPP5. COMPUTATIONAL RESULTS6. CONCLUDING REMARKS补充 论文基本信息 《MODELING AND SOLVING THE TRAVELING SALESMAN P…

SQL语句练习每日5题(四)

题目1——查找GPA最高值 想要知道复旦大学学生gpa最高值是多少&#xff0c;请你取出相应数据 题解&#xff1a; 1、使用MAX select MAX(gpa) FROM user_profile WHERE university 复旦大学 2、使用降序排序组合limit select gpa FROM user_profile WHERE university 复…

【vuex小试牛刀】

了解vuex核心概念请移步 https://vuex.vuejs.org/zh/ # 一、初始vuex # 1.1 vuex是什么 就是把需要共享的变量全部存储在一个对象里面&#xff0c;然后将这个对象放在顶层组件中供其他组件使用 父子组件通信时&#xff0c;我们通常会采用 props emit 这种方式。但当通信双方不…

如何搭建一台永久运行的个人服务器?

一、前言 由于本人在这段时候&#xff0c;看到了一个叫做树莓派的东东&#xff0c;初步了解之后觉得很有意思&#xff0c;于是想把整个过程记录下来。 二、树莓派是什么&#xff1f; Raspberry Pi(中文名为树莓派,简写为RPi&#xff0c;(或者RasPi / RPI) 是为学习计算机编程…

38页 | 工商银行大数据平台助力全行数字化转型之路(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 工商银行大数据平台 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&a…

LlamIndex二 RAG应用开发

在AutoGen)系列后&#xff0c;我又开始了LlamIndex 系列。欢迎查询LlamaIndex 一 简单文档查询 - 掘金 (juejin.cn)了解LlamIndex&#xff0c;今天我们来看看LlamIndex的拿手戏&#xff0c;RAG应用开发。 何为RAG&#xff1f; RAG全称"Retrieval-Augmented Generation&q…

Linux C语言:指针和指针变量

一、指针的作用 使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存能直接访问硬件能够方便的处理字符串得到多于一个的函数返回值 二、内存、地址和变量 1、内存地址 2、变量和地址 1&#xff09;变量用来在程序中保存数据 比如: int k 58; //声明一个int变…

jupyter notebook默认工作目录修改

jupyter notebook默认工作目录修改 1、问题2、如何修改jupyter notebook默认工作目录 1、问题 anaconda安装好之后&#xff0c;我们启动jupyter notebook会发现其默认工作目录是在C盘&#xff0c;将工作目录放在C盘会让C盘很快被撑爆&#xff0c;我们应该将jupyter notebook默…

QT系列教程(8) QT 布局学习

简介 Qt 中的布局有三种方式&#xff0c;水平布局&#xff0c;垂直布局&#xff0c;栅格布局。 通过ui设置布局 我们先创建一个窗口应用程序&#xff0c;程序名叫layout&#xff0c;基类选择QMainWindow。但我们不使用这个mainwindow&#xff0c;我们创建一个Qt应用程序类Log…

MYTED | TED100篇打卡总结 辅助学习网站使用说明

文章目录 &#x1f4da;背景&#x1f407;timeline&#x1f407;版本记录&#x1f407;产出小结 &#x1f4da;功能说明&#x1f407;左侧&#x1f407;中间&#x1f407;右侧 &#x1f4da;背景 &#x1f407;timeline 在一个平常的下午&#xff0c;一次平常的桌面整理&#…

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 一、简单介绍 二、处理文本数据 三、用…

ts类型声明文件、内置声明文件

1. ts类型声明文件 在ts中以d.ts为后缀的文件就是类型声明文件&#xff0c;主要作用是为js模块提供类型信息支持&#xff0c;从而获得类型提示 1.1 第三方包用ts编写的&#xff0c;会自动生成一个 .d.ts文件&#xff0c;进行类型声明 1.2 有些包不是用ts编写的&#xff0c;在…

图的相关种类

目录 数据类型 存储结构 邻接矩阵表示法 无向图 邻接矩阵表示 有向图 网 实现 邻接矩阵表示 存储结构 创建无向图 优点 缺点 邻接表法表示 表示无向图 表示有向图 存储结构 无向网 特点 十字链表与多重表 十字链表 存储结构 多重表 存储结构 数据类型 存…

【Unity3D小功能】Unity3D中UGUI-Text实现打字机效果

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 需求要实现Text的打字机效果&#xff0c;一看居然…

关于stm32的复用和重映射问题

目录 需求IO口的复用和重映射使用复用复用加重映射 总结参考资料 需求 一开始使用stm32c8t6&#xff0c;想实现pwm输出&#xff0c;但是原电路固定在芯片的引脚PB10和PB11上&#xff0c;查看了下引脚的功能&#xff0c;需要使用到复用功能。让改引脚作为定时器PWM的输出IO口。…

golang 中的复合类型

前言 所有的api文档都可以使用bash命令 go doc 查看文档的帮助信息 从 Go 1.13 开始&#xff0c;godoc 不再随 Go 发行版一起安装&#xff0c;你需要单独安装它。 需要单独安装 1. go install golang.org/x/tools/cmd/godoclatest 2执行命令 godoc -http:1111 打开浏览器 http:…

开源代码分享(33)-基于储能电站服务的冷热电多微网系统双层优化配置

参考文献&#xff1a; [1]吴盛军,李群,刘建坤,等.基于储能电站服务的冷热电多微网系统双层优化配置[J].电网技术,2021,45(10):3822-3832.DOI:10.13335/j.1000-3673.pst.2020.1838. 1.基本原理 随着储能技术的进步和共享经济的发展&#xff0c;共享储能电 站服务模式将成为未来…

【机器学习】GPT-4中的机器学习如何塑造人类与AI的新对话

&#x1f680;时空传送门 &#x1f50d;引言&#x1f4d5;GPT-4概述&#x1f339;机器学习在GPT-4中的应用&#x1f686;文本生成与摘要&#x1f388;文献综述与知识图谱构建&#x1f6b2;情感分析与文本分类&#x1f680;搜索引擎优化&#x1f4b4;智能客服与虚拟助手&#x1…

微信小程序 npm构建+vant-weaap安装

微信小程序&#xff1a;工具-npm构建 报错 解决&#xff1a; 1、新建miniprogram文件后&#xff0c;直接进入到miniprogram目录&#xff0c;再次执行下面两个命令&#xff0c;然后再构建npm成功 npm init -y npm install express&#xff08;Node js后端Express开发&#xff…

jenkins插件之Jdepend

JDepend插件是一个为构建生成JDepend报告的插件。 安装插件 JDepend Dashboard -->> 系统管理 -->> 插件管理 -->> Available plugins 搜索 Jdepend, 点击安装构建步骤新增执行shell #执行pdepend if docker exec phpfpm82 /tmp/composer/vendor/bin/pdepe…