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

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

相关文章

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 中实现多数据源连接

hdu1011(背包树形DP)

没有完全理解这题, m个人,攻打一个map,map的入口是1,在攻打某个结点之前要先攻打其他一个结点 dp[i][j]表示m个人攻打以第i个结点为根节点的子树得到的最优解 状态转移dp[i][ j ] = max(dp[i][j], dp[i][k]+dp[t][j-k]),其中t是i结点的子节点 代码如下: #include<iostream>#include<algorithm

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

oracle11.2g递归查询(树形结构查询)

转自: 一 二 简单语法介绍 一、树型表结构:节点ID 上级ID 节点名称二、公式: select 节点ID,节点名称,levelfrom 表connect by prior 节点ID=上级节点IDstart with 上级节点ID=节点值 oracle官网解说 开发人员:SQL 递归: 在 Oracle Database 11g 第 2 版中查询层次结构数据的快速