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

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

相关文章

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

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

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

python展开嵌套列表的多种方法

《python展开嵌套列表的多种方法》本文主要介绍了python展开嵌套列表的多种方法,包括for循环、列表推导式和sum函数三种方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、嵌套列表格式二、嵌套列表展开方法(一)for循环(1)for循环+append()(2)for循环+pyPhWiFd

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接