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

这篇具有很好参考价值的文章主要介绍了vue+element Ui 树型组件tree懒加载+搜索框远程请求数据为平铺类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本人之前一直是耕耘后台研发,最近接了个小需求需要接触到vue,记录一下我遇到的一些前端解决时间长的问题
需求:
1:每次动态请求接口获取下一节点数据
2:接口返回的数据是list,不带子节点,用pid来维护父子之间的关系
3:带有搜索框,搜索框为请求远程数据,数据为不带子节点数据用pid来维护
4:简单!!!
页面:
vue+element Ui 树型组件tree懒加载+搜索框远程请求数据为平铺类型
需要组件:
下载三方插件 使用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文章来源地址https://www.toymoban.com/news/detail-448000.html

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

到了这里,关于vue+element Ui 树型组件tree懒加载+搜索框远程请求数据为平铺类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue搜索组件,显示热门、近期搜索(结合element ui)

    🚀 注重版权,转载请注明原作者和原文链接 🥭 作者:全栈小袁 🍎 原创个人开源博客项目(目前V3.0版本):https://github.com/yuanprogrammer/xiaoyuanboke 🍉 开源项目觉得还行的话点点star,有什么需要完善或者点子欢迎提issue 也是好久没有发文章了,之前忙着秋招校招春招,入职后一

    2024年02月16日
    浏览(34)
  • Element-UI实现的下拉搜索树组件(el-select、el-input、el-tree组合使用)

    1、子组件封装 注意使用:正常使用 // 子组件使用 父组件调用

    2024年02月11日
    浏览(57)
  • vue2+element ui封装搜索组件

    组件使用 封装组件:vueSearch 下拉多选组件:selectecho

    2024年02月08日
    浏览(43)
  • element UI tree 搜索功能实现

    最近需求想要一个树状结构的带搜索功能的目录,要求目录包含搜索文字的高亮,如果父级收起则父级高亮,如果跨级收起 则收起的级别高亮 不限制层级 例如:搜索文字为D,收起C则C高亮, 直接收起A则A高亮 A           B                 C              

    2024年04月29日
    浏览(23)
  • [element-ui] el-tree 懒加载load

    懒加载:点击节点时才进行该层数据的获取。 注意:使用了懒加载之后,一般情况下就可以不用绑定:data。 懒加载—由于在点击节点时才进行该层数据的获取,默认情况下 Tree 无法预知某个节点是否为叶子节点,所以会为每个节点添加一个下拉按钮,如果节点没有下层数据,

    2024年02月11日
    浏览(34)
  • VUE element-ui实现表格动态展示、动态删减列、动态排序、动态搜索条件配置、表单组件化。

        1、本组件支持列表的表头自定义配置,checkbox实现 2、本组件支持列表列排序,vuedraggable是拖拽插件,上图中字段管理里的拖拽效果 ,需要的话请自行npm install 3、本组件支持查询条件动态配置,穿梭框实现 https://download.csdn.net/download/askuld/88216937

    2024年01月16日
    浏览(46)
  • vue详细用法,ajax异步请求,案例分析 Element-ui组件使用,表单提交更新,下载,超详细

    标签及属性的使用 1.1 template 标签 1.2 form表单 1.2.1 ref属性 1.2.2 :model属性 1.2.3 :rules属性 1.2.4 label-width属性 1.2.5 el-row标签 1.2.5 el-col 标签 :span=\\\"12\\\"属性 1.2.5 el-form-item 标签 1.2.6 label 属性 1.2.7 prop属性 required 1.2.9 v-model属性 1.2.8 placeholder属性 效果图: 1.3 Select 选择器 当选项过多时,

    2023年04月12日
    浏览(48)
  • 通过RegExp实现 element UI tree 高亮显示(样式改变)搜索框过滤内容

            通过RegExp对象动态的实现字体样式的添加与删除。 element UI 中,树形控件进行过滤操作时,经常要求所搜字体进行一个高亮显示。         树形控件中提供了一个Attributes(属性) : filter-node-method  解释为: 对树节点进行筛选时执行的方法,返回 true 表示这个节

    2023年04月08日
    浏览(30)
  • vue+element-ui初体验入门拥有自己的前台项目以及配置文件讲解(2)组件式开发,路由,请求发送

    阿丹:         前面的文章已经进行了vue的组件安装,本篇文章来了解一下vue的语句语法以及element-ui的具体用法。并使用全局的守卫路由来完成用户完成登录来请求头携带token 按照图片指引来到main.js将我们前面文章下载的组件进行导入 代码解读: 这是一段 Vue.js 代码片段,

    2024年02月11日
    浏览(33)
  • Element Ui Tree组件实现增、删、改、查、拖拽节点 的树形结构

    介绍:首先组件 | Element官网某些功能都具备了,这里我就把这些功能结合在一起更完美的使用,其次 编辑节点 官网是没有实例,所以这里搞了一套较完整的功能,其次编辑和添加,这里直接使用了弹窗(顾及到多个参数设置),接下来效果图展示! 效果图如下: 1,其中点

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包