vue+element Ui 树型组件tree懒加载+搜索框远程请求数据为平铺类型

news2024/12/28 18:14:25

本人之前一直是耕耘后台研发,最近接了个小需求需要接触到vue,记录一下我遇到的一些前端解决时间长的问题
需求:
1:每次动态请求接口获取下一节点数据
2:接口返回的数据是list,不带子节点,用pid来维护父子之间的关系
3:带有搜索框,搜索框为请求远程数据,数据为不带子节点数据用pid来维护
4:简单!!!
页面:
在这里插入图片描述
需要组件:
下载三方插件 使用arrayTotree插件 将扁平化数组转换为树形结构数组 并赋值给list

npm install array-to-tree --save

import arrayToTree from ‘array-to-tree’

data中的自定义数组 = arrayToTree(获取请求的数组, { parentProperty: ‘父级id’, customID: ‘二级id’});

代码:

<template>
    <el-tabs v-model="activeName">
        <el-tab-pane label="成员" name="first">
            <!--左边-->
            <el-container>
                <el-aside width="200px">
                    <el-input
                            placeholder="Search by name"
                            prefix-icon="el-icon-search"
                            v-model="inputStr"
                            class="name-email-search"
                            size="small"
                            clearable
                            @blur="initSearch"
                            @clear="initSearch">
                    </el-input>

                    <el-tree
                            :data="treeList"
                            ref="tree"
                            class="vue-tree"
                            lazy
                            :load="loadNode"
                            :highlight-current="true"
                            :node-key="nodeKey"
                            @node-click="nodeClick"
                            :expand-on-click-node="false"
                            :props="defaultProps"
                    ></el-tree>
                </el-aside>


                <!--右边-->
                <el-main>{{str}}</el-main>

            </el-container>
        </el-tab-pane>


        <el-tab-pane label="组织" name="second">组织

        </el-tab-pane>
    </el-tabs>

</template>
<script>

    import {childNodes, search} from "../api/dept";
    import  arrayToTree  from  'array-to-tree';
    import {treeList} from "../api/system/msg";

    export default {
        data() {
            return {
                activeName: 'first',
                //输入框输入的值
                inputStr: '',
                defaultProps: {
                    children: "children",
                    label: "name",
                    isLeaf: "isLeaf",
                },
                currentNodeKey: "",
                //当前树用到的list
                treeList: [],
                str: 'aaa'
            };
        },

        methods: {
        	//搜索框
            async initSearch(resolve) {
                const param = {
                    orders: [],
                    conditions: [{field: 'name', value: this.inputStr}]
                };
                const res = await search(param)
                //将搜索出来的扁平数据转换成tree树状数据
				//再将搜索出来的数据替换之前加载的tree数据
                this.treeList = arrayToTree(res.data.data,
                    {parentProperty:'pid', customID:'deptId'}) ;
            },
            // 懒加载获取树形结构
            loadNode(node, resolve) {
                //调用接口时,我们的需求是第一级传参为0,后面为当前节点的唯一表示id,可以根据需求而定
                // node.level为0时,就是tree的第一级
                const spaceParentGuid = node.level === 0 ? 0 : node.data.deptId
                childNodes(spaceParentGuid).then(({data}) => {
                    resolve(
                        data.data.map(item => {
                            return {
                                ...item,
                                leaf: !item.hasChildren // 此参数用来判断当前节点是否为叶子节点
                            }
                        })
                    )
                })
            },
            nodeClick() {
                this.str = 'changede';
            }

        },
        mounted() {
        }
    };
</script>

后端查询接口接口返回数据格式:

{
  "success": true,
  "message": null,
  "data": [
    {
      "deptId": 1,
      "pid": 0,
      "subCount": 0,
      "name": "默认组织",
      "deptSort": 0,
      "createBy": null,
      "updateBy": null,
      "createTime": 1682229715,
      "updateTime": 1682229715,
      "hasChildren": false,
      "leaf": true,
      "top": true
    },
    {
      "deptId": 1231231,
      "pid": 354122786547134460,
      "subCount": 0,
      "name": "xw部门2",
      "deptSort": 999,
      "createBy": null,
      "updateBy": null,
      "createTime": null,
      "updateTime": null,
      "hasChildren": false,
      "leaf": true,
      "top": false
    }]
    }

到上面的就结束了,下面是是笔者自己记录的,记得替换成自己的

请求的接口:dept.js

import request from '../utils/request'

const localHost = 'http://localhost:8081'

export function search(data) {
  return request({
    url: localHost+'/plugin/dept/search',
    method: 'post',
    data
  })
}

export function childNodes(data) {
  return request({
    url: localHost+'/plugin/dept/childNodes/'+data,
    method: 'post',
    data
  })
}

接口拦截器:request.js

import axios from 'axios'
import Config from '@/settings'
import { getToken } from '../utils/auth'

const TokenKey = Config.TokenKey

let service = axios.create({
    timeout: 10000
})

// request interceptor
service.interceptors.request.use(
    config => {
        console.log(getToken())
        config.headers[TokenKey] =getToken() ;
        return config
    },
    error => {
        return Promise.reject(error)
    }
)

// Response interceptor for API calls
service.interceptors.response.use(
    response => {
        return response;
    },
    error => {
        if(error.response.status == 403){
            refreshToken()
        }
    }
);


const refreshToken= ()=>{
    // gets new access token
}


export default service

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

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

相关文章

Scala中使用Typesafe Config 库

Typesafe Config 库 在 Scala 中加载配置文件有很多种方法&#xff0c;其中一种常用的方法是使用 Typesafe Config 库。该库提供了一种简单易用的方式来读取和解析配置文件。 以下是在启动 main 方法后加载配置文件的示例代码&#xff1a; 引入 Typesafe Config 库 import c…

【MySQL】函数

一、概述 MySQL中提供了大量函数来简化用户对数据库的操作&#xff0c;比如字符串的处理、日期的运算、数值的运算等等。使用函数可以大大提高SELECT语句操作数据库的能力&#xff0c;同时也给数据的转换和处理提供了方便。 &#xff08;在sql中使用函数&#xff09;函数只是对…

shadowsocks服务端和客户端搭建

shadowsocks服务端和客户端搭建 一、服务端搭建 买个境外云服务器&#xff0c;搭建shadowsocks服务端。 需要python3环境。 1.下载shadowsocks服务端python包&#xff0c;并启动。下载地址 # 1.下载 [rootiZrj982e4r5hkd053zsnmqZ ~]# wget https://pypi.python.org/packa…

2023隐私计算与人工智能峰会成功举办!数据宝演讲实录(上篇)分享

2023年4月8日&#xff0c;2023隐私计算与人工智能峰会在深圳举办&#xff0c;大会由华东江苏大数据交易中心和热点资讯联合主办&#xff0c;会上&#xff0c;数据宝董事詹臻女士做开幕式致辞。 数据宝与开放群岛&#xff08;Open Islands&#xff09;进行战略签约&#xff0c;…

LoRA: 大语言模型个性化的最佳实践

出品人&#xff1a; Towhee 技术团队 大型语言模型&#xff08;LLM&#xff09;在今年获得了极大的关注。在以往&#xff0c;预训练微调&#xff08;finetuning&#xff09;成为了让模型适配于特定数据的最佳范式。然而随着大型模型的出现&#xff0c;这种完全微调&#xff08;…

【运动规划算法项目实战】如何实现机器人多目标点导航

文章目录 前言一、 什么是actionlib?二、实现流程三、总结前言 在ROS机器人应用中,实现机器人多目标点导航是非常常见的需求。本文将介绍如何使用ROS和actionlib来实现机器人的多目标点导航,目标点信息将被记录在YAML文件中。 我们可以通过使用MoveBaseAction来实现机器人…

高并发场景下JVM调优实践

一、背景 2021年2月&#xff0c;收到反馈&#xff0c;视频APP某核心接口高峰期响应慢&#xff0c;影响用户体验。 通过监控发现&#xff0c;接口响应慢主要是P99耗时高引起的&#xff0c;怀疑与该服务的GC有关&#xff0c;该服务典型的一个实例GC表现如下图&#xff1a; 可以…

【WinForm】定时器的使用方法除了定时还有延迟执行可用

在使用VS开发工具创建的WinForm项目中&#xff0c;有一个定时器组件&#xff0c;拖出来放上&#xff0c;它只是一个定时处理的作用&#xff0c;不会显示在窗体中。 开发中如果需要定时处理&#xff0c;就使用Timer组件即可&#xff0c; 在它的属性事件一栏里&#xff0c;有一…

offer选择:创业公司 VS 大厂外包

面试拿到两个offer&#xff0c;一个是规模只有几十人的初创小公司&#xff0c;另一个是大厂外包岗位。都是功能测试&#xff0c;两者薪水待遇也差不多&#xff0c;该如何选择?更有利于之后的职业发展...... 这是一个比较典型的问题&#xff0c;对于要转行的同学或者是刚入行没…

【Call for papers】2023年CCF人工智能会议信息汇总(持续更新)

本博文是根据2022年CCF会议推荐的人工智能领域相关会议目录撰写。 注&#xff1a; 由于一些会议的投稿时间还没公开&#xff0c;因此根据往年投稿时间在表格中使用 ~ 符号表示大概的投稿时间&#xff08;一旦会议日期更新&#xff0c;我们也将同步更新博文。若更新不及时请小伙…

C++常用23种设计模式总结(一)------单例模式

什么是单例模式 单例模式是一种设计模式&#xff0c;它保证一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。这个模式通常用于控制资源的访问&#xff0c;例如数据库连接、线程池等。单例模式通过限制实例化操作并提供访问方法&#xff0c;确保在整个应用程序…

【Unity3D小功能】Unity3D中实现模型的旋转、缩放效果(控制摄像机)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 其实之前已经写了关于如何控制模型的旋转、移动、缩放效果&…

Android开发:使用sqlite数据库实现记单词APP

一、功能与要求 实现功能&#xff1a;设计与开发记单词系统的四个界面&#xff0c;分别是用户登录、用户注册、单词操作以及忘记密码。 指标要求&#xff1a;通过用户登录、用户注册、单词操作、忘记密码掌握界面设计的基础&#xff0c;其中包括界面布局、常用控件、事件处理等…

NPN三极管放大原理

NPN三极管放大 这是华为的芯片,还有其他人的芯片 无论这些芯片再复杂,它们都是由这种材料制成的 ​ 硅晶体 我们把他放大,单个硅原子最外层带有四个电子, 在纯硅当中,这些电子会两两形成共价键,此时周围形成非常稳定的八电子结构 我们接上电池, 电池无法吸引其中的电子离开,也…

不止大模型,亚马逊云科技布局AIGC底座能力

“大模型只是客户需求的其中一个部分&#xff0c;但远远不是所有&#xff0c;客户还需要更广泛的基础能力。亚马逊云科技推出自研芯片、生成式AI服务Bedrock以及大模型Titan&#xff0c;都在致力于推动AIGC技术的普惠化&#xff0c;够降AIGC的技术门槛和资金门槛&#xff0c;让…

万应低代码4月重点更新内容速递

低代码开发能力提升 分布式缓存支持 万应提供了一套分布式的缓存系统&#xff0c;可在多个节点之间共享缓存数据&#xff0c;从而加速数据获取速度&#xff0c;提高应用的性能和效率。包含&#xff1a; 缓存设置节点&#xff1a;把需要高频访问的数据写入到缓存中&#xff0c;并…

vue3 vue.config.js配置Element-plus组件和Icon图标实现按需自动引入

打包时&#xff0c;报警告&#xff0c;提示包太大会影响性能 1.配置前包体积&#xff1a; 2.安装插件&#xff1a; npm i unplugin-auto-import unplugin-vue-components unplugin-icons -D 3.vue.config.js中加入以下配置&#xff1a; const { defineConfig } require(vu…

Vue3 Antd 父子嵌套子表格

Vue3 Antd 父子嵌套子表格 父子嵌套子表格 目标1&#xff1a;可以点击多个父节点表格&#xff0c;正确显示子表格数据 目标2&#xff1a;父表格数据刷新重载&#xff0c;解决子表格数据不刷新问题 官方示例代码&#xff0c;以及效果 https://www.antdv.com/components/tabl…

linux0.12-8-2-asm.s

[290页] 8-2 asm.s程序 8-2-1 功能描述 1、 我们先考虑c)、 d) 2、无出错码 2.1、 将要执行的处理函数压栈&#xff1b; 2.2、 eax被交换入栈。现在eax护理函数 2.3、 其他寄存压栈 2.4、 立即数0压栈 2.5、 取edxEIP后&#xff0c;将edx压栈 2.6、 段寄存器都设置0x10段选…

通过身份个性化网络(IPM)实现真实世界的自动化妆

来源&#xff1a;投稿 作者&#xff1a;小灰灰 编辑&#xff1a;学姐 论文标题&#xff1a; Real-World Automatic Makeup via Identity Preservation Makeup Net 论文链接&#xff1a;https://www.ijcai.org/proceedings/2020/0091.pdf论文代码&#xff1a;https://github.co…