当前位置: 首页 > article >正文

vue3+ant design vue动态实现级联菜单~

1、这里使用的是ant design vue 的TreeSelect 树选择来实现的。

<a-form-item name="staffDept" label="责任部门" labelAlign="left">
  <a-tree-select
    v-model:value="formState.staffDept"
    show-search//允许在下拉框中添加搜索框
    style="width: 100%"
    :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"//设置下拉菜单的最大高度和溢出行为
    placeholder="请输入"
    allow-clear//显示清楚按钮
    tree-default-expand-all//默认展开所有树节点
    :tree-data="treeData"//将数据绑定在树形结构上
   />
</a-form-item>


import type { TreeSelectProps } from 'ant-design-vue';
import {getOrganizationChatrt} from '@/api/import';
const treeData = ref<TreeSelectProps['treeData']>([]);
const formState = ref({
    staffDept: '',
});
const handData = (array, level?) => {
    array.forEach((item, index) => {
      if (level === 0) {//获取一级菜单
        item.title = item.deptName;
        item.value = item.deptId;
      }
      if (item.nodeOfChildren != null) {//获取二级菜单
        item.children = [...item.nodeOfChildren];
        item.children.map((res) => {
          res.title = res.deptName;
          res.value = res.deptId;
        });
        handData(item.nodeOfChildren);//递归遍历,获取后续菜单如三级菜单
      }
    });
    treeData.value = array;
};
onMounted(() => {
    getOrganizationChatrt({}).then((res) => {
      console.log('测试数据', res);
      handData(res, 0);
    });
});
//假设这是后端返回的数据
[
    {
        "deptId": "00001",
        "deptName": "营销中心",
        "parentDeptId": "a00001",
        "nodeOfChildren": [
            {
                "deptId": "000011",
                "deptName": "网络管理部",
                "parentDeptId": "00001",
                "nodeOfChildren": [
                    {
                        "deptId": "0000111",
                        "deptName": "网络开发",
                        "parentDeptId": "000011",
                        "nodeOfChildren": null,
                        "title": "网络开发",
                        "value": "001"
                    },
                    {
                        "deptId": "0000112",
                        "deptName": "网络管理",
                        "parentDeptId": "000011",
                        "nodeOfChildren": null,
                        "title": "网络管理",
                        "value": "002"
                    }
                ]
            },
            {
                "deptId": "000012",
                "deptName": "市场营销部",
                "parentDeptId": "00001",
                "nodeOfChildren": null
            }
        ]
    }
]

2、效果图


http://www.kler.cn/a/301700.html

相关文章:

  • [前端面试]javascript
  • 删除缓存之后,浏览器显示登录新设备
  • 222. 完全二叉树的节点个数【 力扣(LeetCode) 】
  • Kafka新节点加入集群操作指南
  • mqtt学习笔记(一)
  • SAFETY LAYERS IN ALIGNED LARGE LANGUAGEMODELS: THE KEY TO LLM SECURITY
  • Gradle和Maven
  • 第四部分:1---文件内核对象,文件描述符,输出重定向
  • Unity基本操作
  • 前端封装组件可视化库
  • 第15-05章:获取运行时类的完整结构
  • 【AcWing】871. 约数之和
  • Spring Security 快速开始
  • centos7安装MySQL5.7.44
  • Docker Swarm管理(Docker技术集群与应用)
  • k8s的配置
  • 【网络安全】漏洞挖掘之CVE-2019-9670+检测工具
  • 如何使用Flask渲染模板
  • 比 GPT-4 便宜 187 倍的Mistral 7B (非广告)
  • 明基相机sd卡格式化还能恢复数据吗?可以这样操作
  • 漫谈设计模式 [16]:中介者模式
  • L3学习打卡笔记
  • QT进行音频录制
  • elementUI中el-form 嵌套el-from 如何进行表单校验?
  • 【C++ 智能指针】RAII和四种智能指针你理解吗?
  • Python学习笔记--类型、运算符、循环