树形侧边栏(展开、全选、切换名称)

2024-04-15 20:12

本文主要是介绍树形侧边栏(展开、全选、切换名称),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

父文件: index.vue

<template><div class="h-full p20px bg-#f5f5f5"><ContentWrap class="w-260px h-[calc(100vh-200px)] min-h-700px"><TenantTree @select="tentantSelect" /></ContentWrap></div>
</template><script setup lang="ts">
import TenantTree from '../components/TenantTree/TenantTree.vue'// 组织选择变化
const mutData = ref<String>('')
const tentantSelect = (data) => {mutData.value = data?.join(',')
}
</script>

组件: TenantTree.vue

<script lang="ts" setup>
import { tenantTreeList4dict } from '@/api/common/dict'
import { propTypes } from '@/utils/propTypes'
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
defineOptions({ name: 'TenantTree' })
const nodeKey = 'id'
const treeNodeAllFlag = ref<Boolean>(true)
const allShow = ref<Boolean>(true)
const shortName = ref<Boolean>(false)
const tenantTree = ref([])
const defaultProps = { children: 'children', label: 'tenantName' }
const treeRef = ref()
const mutData = ref<Array>([])
const { wsCache } = useCache()
const ROLE_ALIAS = wsCache.get(CACHE_KEY.ROLE_ALIAS)
const emit = defineEmits(['select'])const checkChange = () => {const all = getAllNodeKeys()mutData.value = treeRef.value?.getCheckedKeys(false)if (all.length !== mutData.value.length && mutData.value.length) {emit('select', mutData.value)}
}// 获取组织
const getTenantTree = async () => {try {const { data = [] } = await tenantTreeList4dict()tenantTree.value = dataawait nextTick(async () => {await handleCheckedTreeNodeAll()mutData.value = treeRef.value?.getCheckedKeys(false)})} finally {}
}/** 展开/折叠全部 */
const handleTreeExpand = (type) => {allShow.value = typeconst nodes = treeRef.value?.store.nodesMapfor (let node in nodes) {if (nodes[node].expanded === allShow.value) {continue}nodes[node].expanded = allShow.value}
}/** 全选/全不选 */
const handleCheckedTreeNodeAll = async () => {if (treeNodeAllFlag.value) {await treeRef.value?.store.setCheckedKeys(getAllNodeKeys())emit('select', mutData.value)} else {await treeRef.value?.store.setCheckedKeys([])emit('select', mutData.value)}
}const getAllNodeKeys = () => {let keys = []tenantTree.value.forEach((node) => {keys.push(node[nodeKey])getAllChildNodeKeys(node, keys)})return keys
}const getAllChildNodeKeys = (node, keys) => {if (node.children) {node.children.forEach((child) => {keys.push(child[nodeKey])getAllChildNodeKeys(child, keys)})}
}onMounted(async () => {const isSelectRole = ROLE_ALIAS.includes('selected')if (!isSelectRole) {getTenantTree()} else {emit('select', mutData.value)}
})
</script>
<template><div class="font-size-14px pb-10px mb-10px border-b-1 border-b-solid border-b-color-#ccc"><div class="bg-#cce1ff text-center line-height-30px mb10px">组织机构</div><div>全选/清空:<el-switchv-model="treeNodeAllFlag"active-text="是"inactive-text="否"inline-prompt@change="handleCheckedTreeNodeAll"/></div><div>展开/折叠:<el-switch v-model="allShow" active-text="展开" inactive-text="折叠" inline-prompt @change="handleTreeExpand" /></div><div>简称/全称:<el-switch v-model="shortName" active-text="简称" inactive-text="全称" inline-prompt /></div></div><div class="h-500px overflow-y-auto! mr-[-18px]"><el-treeref="treeRef":data="tenantTree"show-checkbox:node-key="nodeKey"default-expand-all:props="defaultProps"@check-change="checkChange"indent="6":check-strictly="true"accordion><template #default="{ node, data }"><span class=""><el-text v-show="shortName" @click="console.log(data.shortName)" class="w-150px" truncated>{{ data.shortName }}</el-text><el-tooltip class="box-item" effect="dark" :content="node.label" placement="top" :show-after="500"><el-text v-show="!shortName" @click="console.log(data.shortName)" class="w-150px" truncated>{{ node.label }}</el-text></el-tooltip></span></template></el-tree></div>
</template>

这篇关于树形侧边栏(展开、全选、切换名称)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906806

相关文章

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

java实现多数据源切换方式

《java实现多数据源切换方式》本文介绍实现多数据源切换的四步方法:导入依赖、配置文件、启动类注解、使用@DS标记mapper和服务层,通过注解实现数据源动态切换,适用于实际开发中的多数据源场景... 目录一、导入依赖二、配置文件三、在启动类上配置四、在需要切换数据源的类上、方法上使用@DS注解结论一、导入

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子