基于vue+View UI的组织机构选择

1、效果
在这里插入图片描述
在这里插入图片描述
1、代码

<template><Button type="primary" @click="modal = true">点击选择</Button><div v-if="selectedArr.length > 0"><p>已选择项:</p><div v-for="(item, index) in selectedArr" :key="index">{{ item.title }}</div></div><Modal width="600" v-model="modal" title="请选择" @on-ok="ok" @on-cancel="cancel"><div class="tr-modal"><div class="org-tree"><div class="title"><span>组织机构</span><Input v-model="keyOrg" @on-change="onInput" placeholder="请输入"></Input></div><Treeref="tree"class="tree-main"@on-check-change="onCheckChange":data="data"show-checkboxcheck-directlymultiple></Tree></div><div class="to-right"><Icon type="ios-arrow-forward" size="30" color="#1890ff" /></div><div class="select-con"><div class="title"><span>已选择项</span></div><div class="to-right"><ul class="select-ul"><liv-for="(item, index) in selectedArr":key="index"@mouseenter="item.ishover = true"@mouseleave="item.ishover = false"@click="onDelete(index, item)"><span>{{ item.title }}</span><Icon v-if="item.ishover" type="md-close" size="20" color="#1890ff" /></li></ul></div></div></div></Modal>
</template>
<script>
export default {data() {return {modal: false,selectedArr: [],data: [{industryName: '农业、林业',node: 1,children: [{industryName: '农产品基地项目(含药材基地)',children: [],id: '01--001',title: '01--001_农产品基地项目(含药材基地)',industryState: '1',parentId: '01',industryCode: '01--001',},{industryName: '经济林基地项目',children: [],id: '01--002',title: '01--002_经济林基地项目',industryState: '1',parentId: '01',industryCode: '01--002',},],id: '01',title: '01_农业、林业',industryState: '1',parentId: null,industryCode: '01',},{industryName: '畜牧业',node: 1,children: [{industryName: '牲畜饲养;家禽饲养;其他畜牧业',children: [],id: '02--003',title: '02--003_牲畜饲养;家禽饲养;其他畜牧业',industryState: '1',parentId: '02',industryCode: '02--003',},],id: '02',title: '02_畜牧业',industryState: '1',parentId: null,industryCode: '02',},{industryName: '渔业',node: 1,children: [{industryName: '海水养殖',children: [],id: '03--004',title: '03--004_海水养殖',industryState: '1',parentId: '03',industryCode: '03--004',},{industryName: '内陆养殖',children: [],id: '03--005',title: '03--005_内陆养殖',industryState: '1',parentId: '03',industryCode: '03--005',},],id: '03',title: '03_渔业',industryState: '1',parentId: null,industryCode: '03',},],keyOrg: '',dataCp: [],}},methods: {ok() {this.$Message.info('Clicked ok')},cancel() {this.$Message.info('Clicked cancel')},onInput() {if (this.keyOrg) {let flattenTree = this.flattenTree(this.dataCp)let filterChildren = flattenTree.filter((el) => el.parentId && el.title.includes(this.keyOrg),)this.data = filterChildren} else {this.data = this.dataCp}},onDelete(index, item) {this.selectedArr.splice(index, 1)// 先扁平化let flattenTree = this.flattenTree(this.data)// 先根据parentId找到当前项的父节点let parent = flattenTree.find((el) => el.id == item.parentId)if (parent) {parent.checked = false}//   再取消勾选let checkItem = flattenTree.find((el) => el.id == item.id)checkItem.checked = false//   再还原成树形结构this.data = this.unflattenTree(flattenTree)},onCheckChange(prev, curr) {// 选中if (curr.checked) {// 选中的节点没有子节点(选中一个)if (curr.children.length === 0) {curr.ishover = falsethis.selectedArr.push(curr)} else {// 选中的节点有子节点(选中一个,然后勾选其子节点)curr.children.forEach((el) => {el.ishover = false})this.selectedArr.push(...curr.children)}} else {// 选中的节点没有子节点(选中一个)if (curr.children.length === 0) {// 取消let index = this.selectedArr.findIndex((item) => item.id == curr.id)// 删除已选项this.selectedArr.splice(index, 1)} else {curr.children.forEach((el) => {// 取消let index = this.selectedArr.findIndex((item) => item.id == el.id)// 删除已选项this.selectedArr.splice(index, 1)})}}},// 扁平化树形数据flattenTree(treeData) {const result = []function flatten(node) {// 创建新节点对象(浅拷贝,避免修改原对象)const newNode = { ...node }// 如果有子节点,先递归处理子节点if (Array.isArray(newNode.children) && newNode.children.length > 0) {// 临时保存子节点引用const children = newNode.children// 移除children属性(根据需求可选)delete newNode.children// 将当前节点加入结果result.push(newNode)// 递归处理子节点children.forEach((child) => flatten(child))} else {// 无子节点直接加入结果result.push(newNode)}}// 遍历所有根节点treeData.forEach((root) => flatten(root))return result},// 将扁平数据还原为树形结构unflattenTree(flatData) {// 创建ID映射字典和结果集const nodeMap = {}const roots = []// 第一遍遍历:创建所有节点的映射flatData.forEach((node) => {nodeMap[node.id] = { ...node, children: [] }})// 第二遍遍历:构建树形结构flatData.forEach((node) => {const currentNode = nodeMap[node.id]if (node.parentId) {// 找到父节点并添加到其childrenconst parent = nodeMap[node.parentId]if (parent) {parent.children.push(currentNode)}} else {// 根节点roots.push(currentNode)}})return roots},},mounted() {this.dataCp = JSON.parse(JSON.stringify(this.data))},
}
</script><style lang="scss" scoped>
.tr-modal {display: flex;height: 400px;.org-tree {width: 260px;height: 100%;border: 1px solid #d9d9d9;}.to-right {display: flex;align-items: center;margin: 0 5px;cursor: pointer;}.select-con {width: 260px;border: 1px solid #d9d9d9;}.title {height: 32px;display: flex;align-items: center;border-bottom: 1px solid #d9d9d9;span {display: flex;font-size: 14px;color: #1890ff;justify-content: center;align-items: center;width: 70px;font-weight: 700;}:deep(.ivu-input-wrapper) {flex: 1;width: auto;}}.tree-main {height: calc(100% - 32px);overflow-y: auto;}.select-ul {width: 100%;li {padding: 0 5px;height: 24px;display: flex;align-items: center;font-size: 14px;justify-content: space-between;margin: 4px 0;background-color: #eee;span {width: 90%;overflow: hidden;white-space: nowrap;}}}
}
</style>

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

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

相关文章

人大金仓Kingbase数据库KSQL 常用命令指南

人大金仓Kingbase数据库KSQL 常用命令指南 1. 连接与基本操作 1.1 连接数据库 # 基础语法 ksql -U 用户名 -d 数据库名 -h 主机名 -p 端口号 # 示例 ksql -U system -d testdb -h 127.0.0.1 -p 543211.2 执行SQL脚本 # 基础语法 ksql -U <用户名> -W -f <SQL脚本文…

从萌芽到领航:广州华锐互动的 AR 奋进之路​

在 AR 技术这片充满无限可能的领域中&#xff0c;广州华锐互动数字科技有限公司宛如一颗耀眼的新星&#xff0c;熠熠生辉。广州华锐互动成立于 2008 年&#xff0c;在那个 AR 技术尚处于萌芽阶段、大众认知度还较低的时期&#xff0c;广州华锐互动便凭借着前瞻性的战略眼光和对…

redisson看门狗实现原理

Redisson 看门狗&#xff08;Watch Dog&#xff09;机制实现原理 Redisson 的 Watch Dog 机制是分布式锁的核心组件之一&#xff0c;用于 自动续期 锁的过期时间&#xff0c;防止业务逻辑执行时间超过锁的持有时间&#xff0c;导致锁提前释放而引发并发问题。以下是其实现原理…

C++中explicit详解

文章目录 1. **防止隐式类型转换**示例1&#xff1a;没有使用explicit示例2&#xff1a;使用explicit 2. **防止拷贝初始化**示例1&#xff1a;没有使用explicit示例2&#xff1a;使用explicit 3. **防止隐式类型转换的链式调用**示例1&#xff1a;没有使用explicit示例2&#…

代码部落 20250629 CSP-J复赛 模拟赛

网址&#xff1a;代码部落 一&#xff1a; 相濡以沫 β&#xff08;代码请自写&#xff09; 签到题&#xff0c;如果a[i]<a[i1] a[i]a[i1],反之&#xff0c;直接输出No 二 共同富裕&#xff08;代码请自写&#xff09; 签到题&#xff0c;用sort前缀和 如果最富有的个…

零基础学习RabbitMQ(5)--工作模式(1)

在前面的章节中我们简单介绍过一些RabbitMQ的工作模式&#xff0c;RabbitMQ共提供了七种工作模式进行消息传递&#xff0c;这里我们来详细介绍。 1. Simple(简单模式) P&#xff1a;生产者 C&#xff1a;消费者 特点&#xff1a;一个生产者一个消费者&#xff0c;消息只能被…

Android Liunx ffmpeg交叉编译

本文的交叉编译在window上安装VMware&#xff0c;使用Ubuntu20.4进行的编译。 一、安装NDK&#xff1a; 1、下载解压&#xff1a; 在NDK 下载 | Android NDK | Android Developers下载Liunx平台的NDK。 本人下载的是android-ndk-r27c-linux.zip版本的。 解压android-ndk-r…

极海G32R501双向数字电源解决方案 赋能AI服务器及电源应用创新

6月26日&#xff0c;Big-Bit商务网主办的2025中国电子热点解决方案创新峰会在东莞召开&#xff0c;峰会以“核心智变、能效跃迁”为主题&#xff0c;聚焦光储充、800V超充、AI服务器、BMS、智能汽车照明与汽车中小电机电控应用。 峰会期间&#xff0c;珠海极海半导体有限公司&a…

【修电脑的小记录】连不上网

问题概述 问题表现为&#xff1a;电脑连接网络后&#xff0c;显示已连接但无法上网。 环境信息&#xff1a; - DNS 修改无效&#xff0c;ping 外网&#xff08;8.8.8.8&#xff09;失败 - 尝试重置网络参数、多种命令无果 &#x1f50d; 排查过程 1. 执行以下命令重置网络&a…

QT中QSS样式表的详细介绍

转自个人博客 **Qt样式表&#xff08;Qt Style Sheets&#xff0c;简称QSS&#xff09;**是一种类似于HTML中的CSS&#xff08;层叠样式表&#xff09;的机制&#xff0c;用于自定义Qt应用程序的外观。通过QSS&#xff0c;开发者可以轻松地修改控件的外观&#xff0c;而无需更改…

Spring 依赖注入:官方推荐方式及最佳实践

Spring 依赖注入&#xff1a;官方推荐方式及最佳实践 你正在遭遇以下困境吗&#xff1f; 项目变大后&#xff0c;依赖关系像一团乱麻&#xff0c;牵一发而动全身&#xff1f;单元测试难如登天&#xff0c;被迫启动整个Spring容器&#xff1f;NullPointerException 总在运行时突…

javaweb听课笔记day1

MySQL数据模型 关系型数据库: 通过表来存储数据 关系型数据库是建立在关系模型基础上的数据库&#xff0c;简单说&#xff0c;关系型数据库是由多张能互相连接的二维表组成的数据库 优点: 都是使用表结构&#xff0c;格式一致&#xff0c;易于维护;使用通用的SQL语言操作…

《从量子奇境到前端优化:解锁卡西米尔效应的隐藏力量》

卡西米尔效应由荷兰物理学家亨德里克卡西米尔于1948年提出&#xff0c;它源于量子场论中“真空不空”的奇异观点。在传统认知里&#xff0c;真空是一片虚无&#xff0c;但量子理论指出&#xff0c;真空中充满了持续涨落的能量&#xff0c;即零点能。想象有两片中性的金属板被放…

【学习笔记】强化学习的数学原理

软活硬整&#xff0c;纳什又把RL翻出来讲了一遍&#xff0c;我以为是温故而知新&#xff0c;原来是在卖书。 不过温故而知新还是没啥毛病的。 PS&#xff1a;今天装Notepad时看到的&#xff0c;我还以为现在连用个Notepad都要给天线宝宝们捐款了。 文章目录 PART 11 overview…

深入“火星棒球数据API”:用数据解锁棒球世界的无限可能

在棒球运动日益数据化的今天&#xff0c;高效获取和处理海量比赛信息已成为球队制胜、媒体解读、球迷深入理解比赛的关键。“火星棒球数据API” 应运而生&#xff0c;成为连接棒球智慧与大数据技术的桥梁。本文将探讨这一API的核心价值、功能亮点及其如何重塑我们体验和分析棒球…

[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的校园服务平台管理系统,推荐!

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园服务平台管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)

在本文中&#xff0c;您可以找到有关WEB项目的信息。将了解&#xff1a; Web项目结构和参数Web开发生产力工具JSP代码完成和验证 这些特性在MyEclipse中可用。在上文中&#xff08;点击这里回顾>>&#xff09;&#xff0c;我们为大家介绍了Web开发效率工具、Web项目参数…

笨方法学python -练习6

程序&#xff1a; print("Mary had a little lamb.") print("Its fleece was white as {}.".format(snow)) print("And everywhere that Mary went.") print("." * 10) # what′d that do? end1 "C" end2 "h&qu…

【MySQL】Binlog文件占用空间比较大,如何清理

一、前言 在进行一次数据导入之后&#xff0c;发现服务器磁盘爆满&#xff0c;初步判断是数据库产生了大量binlog所致&#xff0c;接下来进行分析处理。 二、分析 1、查看磁盘空间 通过df -h命令&#xff0c;查看磁盘空间占用情况 2、查找占用文件或目录 通过命令&#xff1a;…

车载诊断架构 --- 非易失性存储器(NVM)相关设置项

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…