首页 > 其他分享 >Vue-treeselect 实现下拉树懒加载,末节点不要箭头

Vue-treeselect 实现下拉树懒加载,末节点不要箭头

时间:2022-12-04 02:22:52浏览次数:75  
标签:deptId 树懒 vue dept Vue deptList treeselect children

项目需要,可选择的下拉树,由于数据过多,显示要有层级感,所以使用了懒加载模式

vue-treeselect官网:https://www.vue-treeselect.cn/

1、前端代码

1、下载依赖

npm install --save @riophae/vue-treeselect

2、引用进来

import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import Treeselect from "@riophae/vue-treeselect";
import {LOAD_CHILDREN_OPTIONS} from '@riophae/vue-treeselect'

 3、html

<treeselect
        v-model="form.deptId"
        :options="deptList"
        :loadOptions="loadOptions"
        placeholder="选择组织机构"
></treeselect>

4、js

查看代码
 <script>
  import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  import Treeselect from "@riophae/vue-treeselect";
  import {LOAD_CHILDREN_OPTIONS} from '@riophae/vue-treeselect'
  export default {
    name: "deptCoding",
    components: {
      Treeselect
    },
    data(){
      return{
        form: {},
        // 部门集合
        deptList: [],
      }
    },
    created() {
      //初始化组织机构
      this.getdatafromback("-1")
    },
    watch:{
    // 监听deptId
      'form.deptId':'selectChangedBindDeptName'
    },
    methods: {
      // 获取选择组织对应组织名称
      selectChangedBindDeptName(deptId){
        console.log("=========",deptId);
        const deptList = this.deptList;
        // 获取选择的对应组织名称
        this.recursionDept(deptId,deptList);
      },
      // 递归寻找组织名称
      recursionDept(deptId,deptList) {
        deptList.forEach(value => {
          if (value.id === deptId) {
            this.form.deptName = value.label;
            return;
          }
          if (value.children) {
            this.recursionDept(deptId, value.children);
          }
        })
      },
      // 查询树父组织列表
      getdatafromback2(orgCode) {
        getorganization({'searchParams': {'orgCode': orgCode}}).then(res => {
          const  deptList  = res.responseBody;
          deptList.forEach(d => {
            var dept = {};
            dept.id = d.orgCode;
            dept.label = d.orgName;
            dept.children = null;
            this.deptList.push(dept);
          })
        })
      },
      // 加载子节点数据
      loadOptions({action,parentNode,callback}) {
        if (action === LOAD_CHILDREN_OPTIONS) {
        //  加载点击节点的子节点数据
          getorganization({'searchParams': {'orgCode': parentNode.id}}).then(res => {
            const  deptList  = res.responseBody;
            var arr = [];
            if (deptList.length > 0) {
              deptList.forEach(d => {
                var dept = {};
                dept.id = d.orgCode;
                dept.label = d.orgName;
                dept.children = null
                // 后端返回参数,判断是否还有子节点
                if (!d.attributes.count) {
                  delete dept.children // 为末级时删掉children,就不会出现末级小箭头
                }
                arr.push(dept);
              })
            }
            parentNode.children = arr;
          })
          callback();
        }
      },
    }
  }
</script>

2、后端返回结构

至此over

最终效果图:

标签:deptId,树懒,vue,dept,Vue,deptList,treeselect,children
From: https://www.cnblogs.com/aerfazhe/p/16949292.html

相关文章

  • Vue2(笔记16) - Vue核心 - 内置指令
    回顾下之前的指令:v-bind  :单向绑定解析表达式,可简写:xxxv-model:双向数据绑定;v-for   :遍历数组/对象/字符串v-on   :绑定事件监听,可简写 @v-if    :条件......
  • arco design vue 表单自定义验证
    不知道为啥,官方文档里竟然没写...直接上代码template里<a-form-itemfield="repeatPassword":rules="[{validator:validateRepeatPassword,trigger:'change'}]"......
  • Vue2(笔记15) - Vue核心 - 过滤器
    可学可不学,可用可不用过滤器需求:把一个时间戳格式化成可读的年月日时间;需要引入一个dayjs 的 JS库,专门用来处理时间的;​​dayjs在这可以下载​​<scriptsrc="./res/vue.......
  • jenkins 部署VUE
    一、安装nodejs插  在系统管理-》插件管理中安装nodejs插件 二、配置nodejs插件在jenkins全局工具配置中,配置nodejs,如下图  三、编写三、新建vue构建任......
  • Vue2(笔记14) - Vue核心 - 表单数据收集
    表单数据收集表单数据收集是最常用的逻辑;<divid="root"><[email protected]="demo">账号:<inputtype="text"v-model.trim="userInfo.account"><br><br>......
  • vue中单独封装elementui中的Dialog弹框组件
    一。在components文件中新建弹框组件<template><div><el-dialogtitle="提示":visible.sync="dialogVisible"width="30%"@close="handleClose"><span......
  • Vue3路由
    路由基础(页面跳转)下载vue-router,vue3对应的版本是4cnpminstallvue-router@4启动项目npmrundevrundev的由来组件Home、Blogrouter.jsimport{createRout......
  • vue element ui 使用el-cascader实现城市选择
    安装依赖cnpminstallelement-china-area-data-S说明provinceAndCityData是省市二级联动数据(不带“全部”选项)regionData是省市区三级联动数据(不带“全部”选项)prov......
  • Vue 中 props配置项
    Vue中props配置项1:props配置项说明<!--##props配置项1.功能:让组件接收外部传过来的数据2.传递数据:```<Demoname="xxx"/>```3.接收数据:1.第一种方式(......
  • Vue3
    Vue3setup()和ref()的使用ref()这是vue3声明变量的方式,并且在setup()中return返回出去才可以在页面中使用。vue2声明的变量需要放在data中声明使用。vue2......