arco design 递归式菜单

3 篇文章 0 订阅
index.vue
<template>
  <a-menu
    :defaultOpenKeys="defaultOpenKeys"
    :defaultSelectedKeys="defaultSelectedKeys"
    :style="{ width: '100%' }"
    @menuItemClick="onClickMenuItem"
    @collapse="onCollapse"
    show-collapse-button
    breakpoint="xl"
  >
    <!-- {{ leftRouter }} -->
    <menus :DATA="leftRouter"></menus>
  </a-menu>
</template>
<script>
import { useRouter } from "vue-router";
import menus from "./menu.vue";
import { ref, defineComponent, provide } from "vue";
import { Message } from "@arco-design/web-vue";
import { useStore } from "@/store/index";
export default defineComponent({
  components: { menus },
  setup() {
    let leftRouter = ref([]);
    const store = useStore();
    let defaultSelectedKeys = ref([]); //默认选中
    let defaultOpenKeys = ref([]); //默认打开
    let router = useRouter();
    // leftRouter = store.rule[0].children //线上
    leftRouter = router.currentRoute.value.matched.length
      ? router.currentRoute.value.matched[0].children
      : []; // router.currentRoute.value.matched.children//获取当前路由下所有url
    defaultOpenKeys.value = [router.currentRoute.value.meta.parent];
    defaultSelectedKeys.value = [router.currentRoute.value.name];

    let onClickMenuItem = (key) => {
      Message.info({ content: `You select ${key}`, showIcon: true });
      defaultSelectedKeys.value = [key];
      router.push({ name: key });
    };

    const onCollapse = (val, type) => {
      const content = type === "responsive" ? "触发响应式收缩" : "点击触发收缩";
      Message.info({
        content,
        duration: 2000,
      });
    };
    return {
      leftRouter,
      router,
      onClickMenuItem,
      defaultOpenKeys,
      defaultSelectedKeys,
      onCollapse,
    };
  },
});
</script>
<style scoped>
.menu-demo {
  box-sizing: border-box;
  width: 100%;
  height: 600px;
  padding: 40px;
  background-color: var(--color-neutral-2);
}

</style>
menu.vue
<template>
  <div v-for="item in DATA" :key="item.name">
    <!-- 有下级 -->
    <a-sub-menu
      v-if="item.children && item.children.length > 0"
      :key="item.name"
    >
      <template #icon>
        <functional-icons :icon="item.icon" size="30" v-if="item.icon"></functional-icons>
        <div class="icon_demo" v-else></div>
      </template>
      <template #title>
        <span> {{item.meta.name}}</span>
      </template>
      <Menu :DATA="item.children" />
    </a-sub-menu>
    <!-- 没有下级 -->
    <a-menu-item v-else :key="item.name" v-show="item.meta.hidden != false">
      <template #icon>
        <functional-icons :icon="item.icon" size="30" v-if="item.icon"></functional-icons>
        <div class="icon_demo" v-else></div>
      </template>
      <span style="fontsize: 14px; paddingleft: 15px">{{ item.meta.name }}</span>
    </a-menu-item>
  </div>
</template>
<script>
import { inject, defineComponent } from "vue";
import FunctionalIcons from "../../components/FunctionalIcons.vue";
export default {
  components: {
    FunctionalIcons,
  },
  name: "Menu", //模板名称
  props: ["DATA"],
  setup() {
    // console.log(DATA);
    return {
      //   data,
    };
  },
};
</script>
<style lang="scss" scoped>
:deep(.arco-menu-icon) {
  font-size: 16px;
  margin-right: 5px !important;
}
.icon_demo{
  width: 16px;
  height: 17px;
}
</style>
router

 {
    path: "/",
    name: "home",
    component: HomeView,
    redirect: "/login",
    children: [
      {
        path: "/welcome",
        name: "welcome",
        component: () => import("@/views/welcome/index.vue"),
        icon: "robot",
        meta: { name: "欢迎", parent: "home", hidden: false },
      },
      {
        path: "/comprehensive",
        name: "comprehensive",
        component: () => import("@/views/welcome/index.vue"),
        icon: "robot",
        meta: { name: "页面1", parent: "home" },
        children: [
          {
            path: "/welcome",
            name: "welcome",
            component: () => import("@/views/welcome/index.vue"),
            icon: "robot",
            meta: { name: "欢迎", parent: "comprehensive" },
          },
        ],
      },
      {
        path: "/comprehensive1",
        name: "comprehensive1",
        component: () => import("@/views/login/login.vue"),
        icon: "robot",
        meta: { name: "页面2", parent: "comprehensive1" },
        children: [],
      },
      {
        path: "/comprehensive2",
        name: "comprehensive3",
        component: () => import("@/views/login/login.vuee"),
        icon: "robot",
        meta: { name: "页面3", parent: "comprehensive3" },
        children: [],
      },
      // {
      //   path: '/comprehensive2',
      //   name: 'comprehensive2',
      //   icon:'apps',
      //   component: () => import("@/views/comprehensive2.vue"),
      //   meta: { name: '综合展示2', parent: 'home' },
      // }
    ],
  },
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arco Design是一款功能强大的在线表格操作工具。它提供了丰富的功能,可以帮助用户轻松创建、编辑和管理各种类型的表格数据。 以下是Arco Design表格操作的一些主要功能: 1. 创建表格:Arco Design允许用户创建新的表格,并指定表格的行数和列数。用户可以根据需要添加标题、调整列宽、设置单元格格等。 2. 编辑表格:用户可以在Arco Design对表格进行编辑。可以插入、删除、复制和粘贴行和列,修改单元格内容,调整表格样等。 3. 数据排序和筛选:Arco Design提供了数据排序和筛选功能,可以根据特定的条件对表格数据进行排序和筛选,以便更好地组织和分析数据。 4. 公计算:Arco Design支持在表格使用进行计算。用户可以使用内置的函数和运算符来执行各种数学和逻辑运算,以便对数据进行计算和分析。 5. 数据导入和导出:Arco Design支持从其他文件格(如Excel、CSV等)导入数据,并可以将表格数据导出为不同的文件格,以便与其他应用程序进行交互或共享。 6. 协作和共享:Arco Design允许多个用户同时编辑同一个表格,并提供了协作和共享功能,可以方便地与他人共享表格,并进行实时协作。 7. 数据可视化:Arco Design提供了丰富的数据可视化功能,可以通过图表、图形和其他可视化方将表格数据呈现出来,以便更直观地理解和分析数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值