实现 select 中嵌套 tree 外加搜索

实现 select 中嵌套 tree 外加搜索

参考地址实现地址
在这里插入图片描述

代码

<el-form-item label="考核人员" prop="userIdArr" v-if="title == '发起考核'"><el-popover v-model="popoverVisible" placement="bottom" trigger="click" ref="popover">// click:点击select时弹出框显示// popover+tree用于选择,树形控件放在弹出框中<el-input class="input" placeholder="此处键入'关键词'搜索查询" prefix-icon="el-icon-search" v-model="treeFilter"size="mini" v-focus clearable /><!-- 通过 checkbox 进行选择,通过 checkChange 来进行保存值 --><el-tree :data="deptOptions" :props="defaultProps" show-checkbox @check="checkChange":default-checked-keys="this.form.userIdArr" ref="tree" node-key="iid" :filter-node-method="filterNode":default-expand-all="false" :style="`max-height: ${treeMaxHeight}px; overflow-y: auto;`" />// select展示选择结果,储存选择值typeValue<el-select slot="reference" multiple collapse-tags v-model="form.userIdArr" placeholder="请选择"popper-class="hiddenSel" clearable @clear="clearTag" @remove-tag="removeTag"><el-option v-for="item in typeOption" :key="item.iid" :label="item.label" :value="item.iid" /></el-select></el-popover>
</el-form-item>

data 数据

// 需把数据整理成以下结构
// tree数据(children的id第一位为父级id,用于在select中清除某一点,可找到其父级去掉全选)
deptOptions: [], // tree 的数据
typeOption: [], // select 选择框一维数据
defaultProps: {// tree 的显示类名children: "children",label: "label",
},
treeFilter: "", // 搜索框绑定值,用作过滤
// 选中数组ids: [],

methods 方法:

watch: {// 搜索过滤,监听input搜索框绑定的treeFiltertreeFilter(val) {this.$refs.tree.filter(val);// 当搜索框键入值改变时,将该值作为入参执行树形控件的过滤事件filterNode},
}
methods: {
// 发起考核// select 框部分/** 查询部门下拉树结构 */getDeptTree() {userTreeList().then((response) => {// 将数据 user 添加进 children,并且将字段名更改下this.deptOptions = this.copyAndRenameFieldsInArray(response.data);// 对数据进行添加 iidthis.deptOptions = this.addIid(this.deptOptions);// 处理好的数据 进行扁平化this.typeOption = this.flattenData(this.deptOptions);});},// 将部门tree进行扁平化flattenData(data) {const result = [];function flatten(item) {result.push({ id: item.id, label: item.label, iid: item.iid });if (item.children) {item.children.forEach((child) => {flatten(child);});}}data.forEach((item) => {flatten(item);});return result;},// 将 user 添加进 childrencopyAndRenameFieldsInArray(data) {data.forEach((node) => {if (node.users && node.users.length > 0) {node.children = node.children || [];// 将复制并重命名字段的数据拼接到 children 数组的最前面node.children.unshift(...node.users.map((user) => ({userId: user.userId,id: user.userId,userName: user.userName,label: user.nickName,deptId: user.deptId,nickName: user.nickName,})));node.users = [];}if (node.children && node.children.length > 0) {this.copyAndRenameFieldsInArray(node.children);}});return data;},// 加字段 iidaddIid(data, iidPrefix = "") {return data.map((item) => {const iid = iidPrefix + item.id;const newItem = { ...item, iid };if (item.children) {newItem.children = this.addIid(item.children, iid + "-");}return newItem;});},// tree选择值修改时checkChange() {this.form.userIdArr = [];// 将tree选择的id赋值给selectthis.$refs["tree"]?.getCheckedNodes(true).forEach((value) => {// 父级在select中不展示if (value.iid.indexOf("-") > 0) {this.form.userIdArr.push(value.iid);}});},// 模糊查询(搜索过滤),实质为筛选出树形控件中符合输入条件的选项,过滤掉其他选项filterNode(value, data) {if (!value) return true;let filterRes =data.label.toLowerCase().indexOf(value.toLowerCase()) !== -1;return filterRes;},// 清空selectclearTag() {// 清空tree选择this.$refs["tree"].setCheckedKeys([]);},// 从select中单个移除时,保持tree选择值同步移除removeTag(data) {// 获取tree目前选择的值var chooseData = this.$refs["tree"].getCheckedKeys(true);var deleteIndex = "";// 找到chooseData中与清除的data相同的值chooseData.forEach((value, index) => {if (value === data) {deleteIndex = index;}});// 从tree目前选择值中去掉chooseData.splice(deleteIndex, 1);// 若有全选情况,tree的选择值中有父级id,而select中无父级id,需用children的id找到父级id并去掉// 查找其父级id是否在chooseData中(即原来此父级是否全选),若在则去掉var findFatherData = chooseData.find((element) => element === data.split("-")[0]);if (findFatherData) {chooseData.splice(chooseData.indexOf(findFatherData), 1);}// 将修改后的值再赋给treethis.$refs["tree"].setCheckedKeys(chooseData);},// 时间戳转化为时间formatDate(dateString) {const date = new Date(dateString);const year = date.getFullYear();const month = ("0" + (date.getMonth() + 1)).slice(-2);const day = ("0" + date.getDate()).slice(-2);const hours = ("0" + date.getHours()).slice(-2);const minutes = ("0" + date.getMinutes()).slice(-2);const seconds = ("0" + date.getSeconds()).slice(-2);const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;return formattedDate;},
}

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

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

相关文章

论文笔记:Teaching Large Language Models to Self-Debug

ICLR 2024 REVIEWER打分 6666 1 论文介绍 论文提出了一种名为 Self-Debugging 的方法&#xff0c;通过执行生成的代码并基于代码和执行结果生成反馈信息&#xff0c;来引导模型进行调试不同于需要额外训练/微调模型的方法&#xff0c;Self-Debugging 通过代码解释来指导模型识…

Windows Server 2008 (限制用户登录时间、为客户机设置统一的桌面背景、管理用户统一安装软件、隐藏用户C盘)

一、限制用户登陆时间 Server&#xff1a; Client&#xff1a; Server&#xff1a; 将新建的用户移动到group1下 限制用户登陆时间 二、为客户机设置统一的桌面背景 Server&#xff1a; 将jpg图片放到abc文件夹中&#xff0c;并且设置文件夹共享模式 三、管理用户统一安装软件…

DFS:深搜+回溯+剪枝解决矩阵搜索问题

创作不易&#xff0c;感谢三连&#xff01;&#xff01; 一、N皇后 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<string>> ret;vector<string> path;bool checkcol[9];bool checkdig1[18];bool checkdig2[18];int n…

WordPress主题–Applay v3.7.1 开心版下载

Applay是一款功能强大的多用途WordPress主题&#xff0c;专为应用展示、应用商店、商业和购物等Woocommerce网站而设计。它配备了拖曳式页面编辑功能&#xff0c;类似于Elementor&#xff0c;让您能够轻松构建和定制您的网站。无论您有什么需求&#xff0c;都可以尝试下这个主题…

Flutter 画笔(Paint)、绘制直线(drawLine)

override bool shouldRepaint(CustomPainter oldDelegate) > true; } class MyPainter extends CustomPainter { override void paint(Canvas canvas, Size size) { //画背景 var paint Paint() …isAntiAlias false …strokeWidth30.0 …color Colors.red; c…

金融贷款批准预测项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 在金融服务行业&#xff0c;贷款审批是一项关键任务&#xff0c;它不仅关系到资金的安全&#xff0c;还直接影响到金融机构的运营效率和风险管理…

8000预算可以购买阿里云服务器配置整理

一个月8000元预算如何选择阿里云服务器配置&#xff1f;八千预算可选的阿里云服务器配置相当高了&#xff0c;这个预算可以购买阿里云企业级独享型云服务器&#xff0c;至少8核以上的配置&#xff0c;这个预算可以支持复杂、高负载或大规模的业务需求。阿里云服务器网整理8000元…

微信小程序python+uniapp高校图书馆图书借阅管理系统ljr9i

根据日常实际需要&#xff0c;一方面需要在系统中实现基础信息的管理&#xff0c;同时还需要结合实际情况的需要&#xff0c;提供图书信息管理功能&#xff0c;方便图书管理工作的展开&#xff0c;综合考虑&#xff0c;本套系统应该满足如下要求&#xff1a; 首先&#xff0c;在…

C之结构体初始化10种写法总结(九十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

基于Java微信小程序的医院挂号小程序,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Spring Boot 整合 RabbitMQ 实现延迟消息

关于 RabbitMQ 消息队列&#xff08;Message Queuing&#xff0c;简写为 MQ&#xff09;最初是为了解决金融行业的特定业务需求而产生的。慢慢的&#xff0c;MQ 被应用到了更多的领域&#xff0c;然而商业 MQ 高昂的价格让很多初创公司望而却步&#xff0c;于是 AMQP&#xff0…

网络基础二——传输层协议UDP与TCP

九、传输层协议 ​ 传输层协议有UDP协议、TCP协议等&#xff1b; ​ 两个远端机器通过使用"源IP"&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”&#xff0c;"协议号"来标识一次通信&#xff1b; 9.1端口号的划分 ​ 0-10…

2024年腾讯云4核8G服务器性能可以满足哪些使用场景?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

【Redis】分布式锁及其他常见问题

分布式锁及其他常见问题 1. 我看你的项目都用到了 Redis&#xff0c;你在最近的项目的哪些场景下用到了 Redis 呢&#xff1f; 一定要结合业务场景来回答问题&#xff01;要是没有不要硬讲&#xff0c;除非面试官问&#xff1b; 接下来面试官将深入发问。 你没用到的也可能会…

【opencv】教程代码 —video(2) optical_flow (稀疏光流、稠密光流)

1. optical_flow.cpp 稀疏光流 #include <iostream> // 引入输入输出流库 #include <opencv2/core.hpp> // 引入OpenCV的核心功能模块 #include <opencv2/highgui.hpp> // 引入OpenCV的高级GUI模块&#xff0c;提供显示图像的功能 #include <opencv2/imgp…

Python | NCL风格 | EOF | 相关 | 回归

这里在linux系统上使用geocat实现NCL风格的图片绘制 geocat Linux上安装 geocat conda update condaconda create -n geocat -c conda-forge geocat-vizconda activate geocatconda update geocat-viz Dataset - NOAA Optimum Interpolation (OI) SST V2 # 海温月平均数据- lsm…

C++核心高级编程 --- 4.类和对象

文章目录 第四章&#xff1a;4.类和对象4.1 封装4.1.1 封装的意义4.1.2 struct与class的区别 4.2 对象的初始化和清理4.2.1 构造函数和析构函数4.2.2 构造函数的分类及调用4.2.3 拷贝构造函数调用时机4.2.4 构造函数调用规则4.2.5 深拷贝与浅拷贝4.2.6 初始化列表4.2.7 类对象作…

基础之重蹈覆辙

MESI缓存一致性协议 前&#x1f33d;&#xff1a; 高速缓存底层数据结构&#xff1a;拉链散列表的结构 bucket - cache entry - tag主内存地址 cache line缓存数据 flag缓存行状态 cache line64字节 有效引用主内存地址&#xff0c;连续的相邻的数据结构 读取特别快 处理器…

关于Tomcat双击startup.bat 闪退的解决⽅法

详解Tomcat双击startup.bat 闪退的解决⽅法 作为⼀个刚学习Tomcat的程序猿来说&#xff0c;这是会经常出现的错误。 1.环境变量问题 1.1 ⾸先需要确认java环境是否配置正确&#xff0c;jdk是否安装正确 winR打开cmd&#xff0c;输⼊java 或者 javac 出现下图所⽰就说明jdk配置正…

spark-hive连接操作流程、踩坑及解决方法

文章目录 1 简介2 版本匹配3 spark hive支持版本源码编译3.1 spark-src下载3.2 maven换源3.3 spark编译 4 hive 安装与mysql-metastore配置4.1 mysql下载安装4.1.1 为mysql设置系统环境变量4.1.2 初次登陆更改root身份密码4.1.3 安装后直接更改密码 4.2 hive初始化4.2.1 编写hi…