树结构添加分组,向上向下添加同级,添加子级

news2024/9/23 13:24:56

树结构添加分组,向上向下添加同级,添加子级

  • 效果
  • 代码实现
    • 页面
    • js

效果

在这里插入图片描述

代码实现

页面

                <el-tree :data="treeData" :props="defaultProps" :expand-on-click-node="false"
                  :filter-node-method="filterNode" :ref="'tree_' + item.name" :id="'tree' + item.name" node-key="id"
                  :current-node-key="defaultKeys" default-expand-all highlight-current @node-click="handleNodeClick">


                  <span class="custom-tree-node" slot-scope="{ node, data }">
                    <el-input :key="data.id" autofocus size="mini" class=" w-75 text-left" :id="data.id"
                      v-show="data.isEdit" v-model="form.serviceName" @keyup.enter.native="addApiGroup" @blur="addApiGroup"></el-input>
                    <el-tooltip :content="node.label" placement="right-start" transition="el-zoom-in-top" 
                      effect="light">
                      <span v-if="!data.isEdit" class="textLine1 tree-label d-flex align-items-center">
                        <img class="imgAlign-textBottom mr-1"
                          :src="data.isGroup == 1 ? require('../../../assets/images/folder.png') : require('../../../assets/images/code.png')"
                          alt="">
                        <span class=''> {{ node.label }}</span>

                      </span>
                    </el-tooltip>
                    <el-popover v-if="data.isGroup == 1" placement="bottom-start" width="100" trigger="click"
                      id="myPopover">
                      <div>
                        <el-link class="ml-0 mb-2" :underline="false" size="mini" type="info"
                          @click="handleAdd('api', node, data)">
                          <img src="../../../assets/images/code_line.png" alt="" class="mr-2" />新增接口
                        </el-link>
                        <el-popover placement="right-start" width="100" trigger="click">
                          <el-link class="d-block ml-0  mb-2" :underline="false" size="mini" type="info"
                            @click="handleAdd('group', node, data, 'up', $event)">上方添加分组</el-link>
                          <el-link class="d-block mb-2 ml-0" :underline="false" size="mini" type="info"
                            @click="handleAdd('group', node, data, 'down')">下方添加分组</el-link>
                          <el-link class="d-block ml-0" :underline="false" size="mini" type="info"
                            @click="handleAdd('group', node, data, 'child')">添加子分组</el-link>
                          <el-link class="ml-0 mb-2 addGroup" :underline="false" size="mini" type="info"
                            slot="reference">
                            <span>
                              <img src="../../../assets/images/bulletpoint.png" alt="" class="mr-2" />新增分组
                            </span>
                            <img src="../../../assets/images/chevron-right.png" alt="" class="mr-2" />
                          </el-link>
                        </el-popover>

                        <el-link class="d-block ml-0  mb-2" :underline="false" size="mini" type="info"
                          @click="handleEdit('group', node, data)"><img src="../../../assets/images/folder_line.png"
                            alt="" class="mr-2" />编辑分组</el-link>
                        <el-link class="d-block ml-0" :underline="false" size="mini" type="info"
                          @click="handleDelete(node, data)"><img src="../../../assets/images/delete.png" alt=""
                            class="mr-2" />删除</el-link>
                      </div>
                      <el-button class="ml-2" size="mini" icon="el-icon-more" type="text" slot="reference"></el-button>
                    </el-popover>
                  </span>
                </el-tree>

js

export default {
  name: 'AppCenterDetail',
  components: { apiList },
  data() {
    return {
      treeData: [],
      defaultProps: {
        children: 'children',
        label: 'label',
      },
    }
  },
  created() {
    
    this.form.id = this.$route.query.appId
    this.appId = this.$route.query.appId
    this.getAppDetail(this.$route.query.appId)
  },
  mounted() {
  },
  methods: {
    // 节点单击事件
    handleNodeClick(data, node) {
      this.form.serviceName = data.label
      this.queryParams.parentId = data.id
      this.defaultKeys = data.id
      let tree = {
        id: 0,
        children: this.treeData
      };

    // 调接口提交
    addApiGroup() {
     
    },
    handleAdd(node, data, pageType){

      const treeDOM = this.$refs['tree_' + this.activeName][0]
      const id = Math.ceil(Math.random() * 100);
      const newData = { id: id, parentId: data ? data.id : 0, label: '', isEdit: true, isNew: true, children: [] }

      this.$set(this.form, 'isGroup', 1)
      if (pageType == 'up') {
        this.$set(this.form, 'upOrder', data.orderNum)
        this.$set(this.form, 'isUp', 0)
        this.$set(this.form, 'orderNum', data.orderNum - 1)
        this.$set(this.form, 'parentId', data ? data.parentId : 0)
        this.$set(this.form, 'upId', data.id)
        treeDOM.insertBefore(newData, node)
        // 聚焦
        setTimeout(() => {

          document.getElementById(newData.id).focus()
        }, 500);
      } else if (pageType == 'down') {
        this.$set(this.form, 'upOrder', data.orderNum)
        this.$set(this.form, 'isUp', 1)
        this.$set(this.form, 'orderNum', data.orderNum + 1)
        this.$set(this.form, 'parentId', data ? data.parentId : 0)

        this.$set(this.form, 'upId', data.id)
        treeDOM.insertAfter(newData, node)
        // 聚焦
        setTimeout(() => {

          document.getElementById(newData.id).focus()
        }, 500);
      } else if (pageType == 'child') {
        if (this.currentNodeLevel >= 4) {
          this.$modal.msgWarning('当前树最多可加四级,已超出')
        } else {
          this.$set(this.form, 'upOrder', data.orderNum)
          this.$set(this.form, 'isUp', 2)
          this.$set(this.form, 'parentId', data.id)
          treeDOM.append(newData, node)
          treeDOM.store.nodesMap[data.id].expanded = true
          // 聚焦
          setTimeout(() => {

            document.getElementById(newData.id).focus()
          }, 500);
        }

      } else {
        this.addGroupVisible = true
        this.$set(this.form, 'parentId', 0)
        this.$set(this.form, 'isUp', 2)
      }
    },
   
    
  },
}

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

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

相关文章

pico+unity3d手部动画

在 Unity 开发中&#xff0c;输入系统的选择和运用对于实现丰富的交互体验至关重要。本文将深入探讨 Unity 中的 Input System 和 XR Input Subsystem 这两种不同的输入系统&#xff0c;并详细介绍它们在控制手部动画方面的应用。 一、Input System 和 XR Input Subsystem 的区…

有关电力电子技术的一些相关仿真和分析:⑤交-直-交全桥逆变+全波整流结构电路(MATLAB/Siumlink仿真)

全桥逆变+全波整流结构 参数:Vin=500V, Vo=200V, T=2:1:1, RL=10Ω, fs=100kHz, L=1mH, C=100uF (1)给定输入电压,输出电压和主电路参数,仿真研究电路工作原理,分析工作时序; (2)调节负载电阻,实现电流连续和断续,并仿真验证; (3)调节占空比,分析占空比与电…

【2024开发插件大赛】如何为 ONLYOFFICE 开发插件

我们发布了 2024 插件开发大赛&#xff1a;为 ONLYOFFICE 开发适合中国用户的插件&#xff0c;获得福利与证书。如果您想要参加&#xff0c;阅读本文了解如何为 ONLYOFFICE 开发插件。 关于 ONLYOFFICE ONLYOFFICE 是一个国际开源项目&#xff0c;由领先的 IT 公司 Ascensio Sy…

Microsoft Edge(简称Edge)

Microsoft Edge&#xff08;简称Edge&#xff09;是一款由微软开发的网页浏览器&#xff0c;它为用户提供了许多便捷的功能和选项。以下是Edge浏览器的使用方法&#xff1a; 一、基本使用方法 打开Edge浏览器&#xff1a; 可以在Windows的开始菜单中找到“Microsoft Edge”并点…

Flink Window 窗口【更新中】

Flink Window 窗口 在Flink流式计算中&#xff0c;最重要的转换就是窗口转换Window&#xff0c;在DataStream转换图中&#xff0c;可以发现处处都可以对DataStream进行窗口Window计算。 窗口&#xff08;window&#xff09;就是从 Streaming 到 Batch 的一个桥梁。窗口将无界流…

【数据结构取经之路】二叉搜索树的实现

目录 前言 二叉搜索树 概念 性质 二叉搜索树的实现 结点的定义 插入 查找 删除 二叉搜索树完整代码 前言 首先&#xff0c;二叉搜索树是一种数据结构&#xff0c;了解二叉搜素树有助于理解map和set的特性。 二叉搜索树 概念 二叉搜索树又称二叉排序树&#xff0c…

推荐系统之MIND用户多兴趣网络

目录 引言MIND算法原理1. 算法概述2. 模型结构3. 多兴趣提取层4. 标签感知注意力层 实践应用应用场景1. 电商平台2. 社交媒体3. 视频流媒体4. 内容分发平台 结论 引言 随着大数据和人工智能技术的快速发展&#xff0c;推荐系统已成为电商平台、社交媒体和内容分发平台的重要组成…

如何用python写接口

如何用python写接口&#xff1f;具体步骤如下&#xff1a;  1、实例化server 2、装饰器下面的函数变为一个接口 3、启动服务 开发工具和流程&#xff1a; python库&#xff1a;flask 》实例化server&#xff1a;server flask.Flask(__name__) 》server.route(/index,met…

吃空上千袋,养猫10年经验,生生不息、希喂、弗列加特谁是卷王?

身为宠物医生&#xff0c;我每天都在与猫咪和狗狗的相处中度过&#xff0c;对它们的身体变化十分敏感。当前&#xff0c;许多家养猫面临肥胖和肝脏损伤的双重困扰&#xff0c;虽然医疗手段可以介入&#xff0c;但问题的核心在于宠物主人的喂养方法是否得当。 在我职业生涯的这…

磁盘空间不足java.sql.sQLException:磁盘空间不足

java.sql.sQLException:磁盘空间不足 环境介绍1 查询表空间使用情况2 对表空间文件扩展限制进行修改(或新增表空间数据文件)3 达梦数据库学习使用列表 环境介绍 遇到此错误时,首先查看数据库服务器 , 数据库相关磁盘磁盘空间使用率;在磁盘空间充足的情况下, 业务系统操作达梦数…

React Native 自定义 Hook 获取组件位置和大小

在 React Native 中自定义 Hook useLayout 获取 View、Pressable 等组件的位置和大小的信息 import {useState, useCallback} from react import {LayoutChangeEvent, LayoutRectangle} from react-nativeexport function useLayout() {const [layout, setLayout] useState&l…

搜维尔科技:【产品推荐】Euleria Health Riablo 运动功能训练与评估系统

Euleria Health Riablo 运动功能训练与评估系统 Riablo提供一种创新的康复解决方案&#xff0c;将康复和训练变得可激励、可衡量和可控制。Riablo通过激活本体感觉&#xff0c;并通过视听反馈促进神经肌肉的训练。 得益于其技术先进和易用性&#xff0c;Riablo是骨科、运动医…

CentOS7 虚谷数据库 单机版部署

单机版最低配置&#xff1a; 安装环境配置 1.CPU设置 关闭 CPU 超线程 查看当前CPU超线程状态&#xff1a; cat /sys/devices/system/cpu/smt/active 如果是0&#xff0c;表示超线程已关闭&#xff1b;返回值是1&#xff0c;表示超线程已开启。 切换超线程状态&#xff1a; &a…

pygame-键盘事件

pygame-官网文档:https://www.pygame.org/docs/ pygame-键盘事件文档:https://www.pygame.org/docs/ref/key.html pygame的维基文档https://www.pygame.org/wiki/ 这个网址记录了pygame的历史和pygame的解释 详细阅读pygame官网文档学会如何使用pygame后&#xff0c;阅读键盘…

DP(4) | 0-1背包 | Java | LeetCode 1049, 494, 474 做题总结

1049. 最后一块石头的重量 II 和 LC 416.分割等和子集 类似 思路&#xff08;我没有思路&#xff09;&#xff1a; 两块石头相撞&#xff0c;这里没有想到的一个点是&#xff0c;相撞的两个石头要几乎相似 以示例1为例&#xff0c;stones [2,7,4,1,8,1]&#xff0c;如果从左到…

【Linux杂货铺】期末总结篇2:文件操作命令 | 目录操作命令

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 第四章4.1 ⛳️Linux与windows的文件系统差别4.2 ⛳️目录相关的常用术语4.3 ⛳️Linux文件类型…

领航Linux UDP:构建高效网络新纪元

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言Udp和Tcp的异同相同点不同点总结 1.1、socket1.2、bind1.3、recvfrom1.4、sendto2.1、代码2.1、说明3.1、代码3.2、说明 引言 在前几篇博客中&#xff0c;我们学习了Linux网络编程中的一些概念。…

嵌入式人工智能(9-基于树莓派4B的PWM-LED呼吸灯)

1、PWM简介 (1)、什么是PWM 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是在具有惯性的系统中利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在从测量、通信到功率控制…

Linux部署禅道(无脑复制版)

目录 环境部署1、下载&#xff0c;解压2、启动3、设置开机自启 登录禅道登录数据库1、设置账号2、网页登录数据库 环境 Linux系统 Centos7 《Linux一键安装包安装禅道》视频链接&#xff1a; https://www.zentao.net/zentao-install/zentao-linux-install-80523.html 部署 …

2025考研~数据结构试卷

作者主页&#xff1a;知孤云出岫 数据结构试题 [TOC](数据结构试题)数据结构试卷一、选择题&#xff08;每题2分&#xff0c;共20分&#xff09;二、填空题&#xff08;每题3分&#xff0c;共15分&#xff09;三、简答题&#xff08;每题10分&#xff0c;共40分&#xff09;四…