tnblog
首页
视频
资源
登录

element plus tree 把数据源里边的所有isShowMenu都赋值为false,在树节点右边增加操作按钮,只显示当前点击节点的菜单

645人阅读 2024/11/18 15:33 总访问:823923 评论:0 收藏:0 手机
分类: 前端

效果图:

代码如下:

  1. <template>
  2. <div class="module-manage-container">
  3. <div style="display: flex">
  4. <el-card class="box-card" style="width: 300px; margin-right: 10px">
  5. <el-scrollbar :style="{ height: state.contentHeight }">
  6. <el-tree ref="tree" :data="state.treeData" node-key="id" :expand-on-click-node="false" highlight-current @node-click="handleNodeClick">
  7. <template #default="{ node, data }">
  8. <span class="custom-tree-node" v-if="data.isShowMenu">
  9. <span>{{ node.label }}</span>
  10. <span>
  11. <el-icon style="color: rgb(70, 166, 255); padding-top: 6px" @click="append(data)"><Plus /></el-icon>
  12. </span>
  13. </span>
  14. </template>
  15. </el-tree>
  16. </el-scrollbar>
  17. </el-card>
  18. <el-card class="box-card" style="flex: 1">
  19. <div class="clearfix">
  20. <div style="flex: 1" />
  21. <el-input placeholder="请输入档案" size="default" />
  22. <el-button type="primary" size="default">搜索</el-button>
  23. </div>
  24. <div>其他内容...</div>
  25. </el-card>
  26. </div>
  27. </div>
  28. </template>
  29. <script setup lang="ts" name="moduleManageContainer">
  30. import { defineAsyncComponent, reactive, onMounted, toRefs, ref } from 'vue';
  31. import request from '/@/utils/requestTools';
  32. import { Search, Plus, Edit } from '@element-plus/icons-vue';
  33. const state = reactive({
  34. title: '更新',
  35. contentHeight: '150px',
  36. treeData: [
  37. {
  38. label: '人事档案',
  39. isShowMenu: true,
  40. children: [
  41. {
  42. label: '初始档案',
  43. children: [
  44. {
  45. label: '2019',
  46. },
  47. {
  48. label: '2020',
  49. },
  50. {
  51. label: '2021',
  52. },
  53. ],
  54. },
  55. {
  56. label: '简化档案',
  57. children: [
  58. {
  59. label: '简化一版',
  60. },
  61. {
  62. label: '简化二版',
  63. },
  64. {
  65. label: '简化三版',
  66. },
  67. ],
  68. },
  69. ],
  70. },
  71. {
  72. label: '合同档案',
  73. children: [
  74. {
  75. label: '二级 2-1',
  76. children: [
  77. {
  78. label: '三级 2-1-1',
  79. },
  80. ],
  81. },
  82. {
  83. label: '二级 2-2',
  84. children: [
  85. {
  86. label: '三级 2-2-1',
  87. },
  88. ],
  89. },
  90. ],
  91. },
  92. {
  93. label: '会计档案',
  94. children: [
  95. {
  96. label: '二级 3-1',
  97. children: [
  98. {
  99. label: '三级 3-1-1',
  100. },
  101. ],
  102. },
  103. {
  104. label: '二级 3-2',
  105. children: [
  106. {
  107. label: '三级 3-2-1',
  108. },
  109. ],
  110. },
  111. ],
  112. },
  113. ],
  114. });
  115. onMounted(() => {
  116. autoHeight();
  117. window.addEventListener('resize', autoHeight);
  118. });
  119. const append = (data: any) => {
  120. console.log('看看信息', data);
  121. };
  122. const handleNodeClick = (data: any) => {
  123. // 先把数据源里边的所有isShowMenu都赋值为false
  124. resetIsShowMenu()
  125. // 在把当前点击的节点的isShowMenu设置为true
  126. if (data) {
  127. data.isShowMenu = true;
  128. }
  129. };
  130. // 递归算法把数据源里边的所有isShowMenu都赋值为false
  131. const resetIsShowMenu = () => {
  132. const traverseNodes = (nodes:any) => {
  133. nodes.forEach((node:any) => {
  134. node.isShowMenu = false;
  135. if (node.children) {
  136. traverseNodes(node.children);
  137. }
  138. });
  139. };
  140. traverseNodes(state.treeData);
  141. };
  142. const autoHeight = () => {
  143. state.contentHeight = window.innerHeight - 238 + 'px';
  144. };
  145. </script>
  146. <style scoped="scoped" lang="scss">
  147. .course-module-settings-container {
  148. .el-input {
  149. width: 200px;
  150. margin-right: 10px;
  151. }
  152. .clearfix {
  153. display: flex;
  154. }
  155. .custom-tree-node {
  156. flex: 1;
  157. display: flex;
  158. align-items: center;
  159. justify-content: space-between;
  160. font-size: 14px;
  161. padding-right: 8px;
  162. }
  163. }
  164. </style>

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

element plus tree 获取选中节点的父节点。树获取所有选中的节点

[TOC]element plus tree 获取选中节点的父节点通过 treeRef.value.getNode(data) 获取到当前节点的实例,随后通过 node.par...

css弹性盒子flex布局

css弹性盒子由于版本不同浏览器问题造成了一些不同的写法display:flexbox;在google浏览器中如果使用下面的写法就不行displa...

可输入下拉文本框据输入动态加载数据 jquery-editable-select

用到一个jquery-editable-select的控件github地址:https://github.com/indrimuska/jquery-editable-select这个插件的原理是...

.net mvc分部页.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

css中单位pxemrem和vh/vw的理解

&gt;px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。em是相对长度单位。相对于当前对象内文本的字...

让IIS支持webp格式图片让IIS支持vtt格式iis设置mime类型iis配置支持的类型

webp格式图片可以让图片体积变小。也让下载图片变得更加困难一点 在线制作webp工具 https://www.upyun.com/webp?utm_mediu...

网页上传文件断点续传的实现无视文件大小上传以及datatables基本用法

首先明白js是客户带执行代码,c#是服务器上执行代码。本地文件需要用到js处理,服务器端接受c#代码处理1.HTML页面,文件信...

如何使用图标像使用文字一样使用文本图标的方法

1.首先在Iconfont-阿里巴巴矢量图标库上面找到你需要的图标然后加入你的购物车然后选择图标;注意:每个类型的图标会大小不...

使用七牛云的cdn服务提高图片的加载速度

CDN介绍CDN的全称是Content Delivery Network,即内容分发网络。CDN加速主要是加速静态资源,如网站上面上传的图片、媒体,...

通俗易懂什么是.NET?什么是.NET Framework?什么是.NET Core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

JS监听input、keydown有输入法时打字完成后触发事件

在给输入框绑定input或keydown事件时预期效果是有输入法时,输入中文后触发事件,不希望输一个字母就触发一次事件可以用到c...

修改了css后让浏览器从缓存中更新

当我们修改了css后,如果不做一些操作,浏览器是不会自动更新我们的样式文件的。除非是过期或者用户手动刷新清理缓存等。所...

C MVC RedirectToAction跳转时候传递参数Action之间传值

MVC Action之间传值,页面跳转传值方法一:路由传值很简单直接使用 RedirectToAction(string actionName, string controller...

当你工作遇到以下几种状态时请果断跳槽走人

已经有想跳槽的念头,但是一直磨磨蹭蹭、犹犹豫豫的混日子,这种念头或者一直持续,或者是不是冒出头来占据你的思维了。于...
这一生多幸运赶上过你.
排名
8
文章
221
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术