前端工作总结151-动态路由和表结构无关

简介: 前端工作总结151-动态路由和表结构无关
<template>
  <el-menu :unique-opened="true" :default-active="defaultActive" :router="true">
    <template v-for="item in routes">
      <el-submenu v-if="item.children" :index="item.text" :key="item.text">
        <template slot="title">
          <i v-if="item.icon" :class="item.icon" />
          <i v-else class="empty-icon" />
          {{ item.text }}
        </template>
        <el-menu-item
          v-for="subItem in item.children"
          :index="subItem.path"
          :key="subItem.name"
        >
          <i v-if="subItem.icon" :class="subItem.icon" />
          <i v-else class="empty-icon" />
          {{ subItem.text }}
        </el-menu-item>
      </el-submenu>
      <el-menu-item v-else :index="item.path" :key="item.name">
        <i v-if="item.icon" :class="item.icon" />
        <i v-else class="empty-icon" />
        {{ item.text }}
      </el-menu-item>
    </template>
  </el-menu>
</template>
<script>
import { staticRoutes, iconMap } from "../router/staticRoutes";
import { ACCESS_MODE } from "@/store/KeyConstants";
import Vue from "vue";
export default {
  name: "SideMenu",
  computed: {
    routes() {
      /*获取数据里面的控制业务端和营销端的mode数值*/
      const property = Vue.ls.get(ACCESS_MODE);
      /*const */
   /*   const showingMenu = staticRoutes.filter(item){
        return !item.hidden
      }*/
      /*去除里面的不是item.hidden是隐藏的属性*/
     const showingMenu = staticRoutes.filter(item => !item.hidden);
     /*拿出所有的菜单*/
      let menu = [];
      let pNames = new Set();
      /*for循环得出所需要的结构*/
      for (const item of showingMenu) {
        /*如果没有父亲级别菜单 就开始继续进行执行*/
        if (!item.meta.pName) {
          /*如果这个端是业务端 并且里面的name的数值不是没有大菜单 比较多的*/
          if (property == 1 && (item.name == "Order" || item.name == "Content"))
          {
          } else {
            /*否则就是业务端*/
            menu.push({
              path: item.path,
              name: item.name,
              icon: item.meta.icon,
              text: item.meta.text
            });
          }
          /*如果pnames有大菜单 */
        } else if (!pNames.has(item.meta.pName)) {
          /*就去除里面的pname*/
          const peers = showingMenu
            .filter(i => i.meta.pName === item.meta.pName)
            .map(i => ({
              path: i.path,
              name: i.name,
              icon: i.meta.icon,
              text: i.meta.text
            }));
          menu.push({
            text: item.meta.pName,
            icon: iconMap[item.meta.pName],
            children: peers
          });
          pNames.add(item.meta.pName);
        }
      }
      return menu;
    },
    defaultActive() {
      return this.$route.path;
    }
  },
  data() {
    return {};
  },
  methods: {}
};
</script>
<style lang="scss">
.el-menu {
  height: 100%;
}
.el-menu-item,
.el-submenu__title {
  .empty-icon {
    margin-right: 5px;
    width: 24px;
    display: inline-block;
  }
}
</style>
相关文章
|
3月前
|
移动开发 前端开发 API
深入理解前端路由:构建现代 Web 应用的基石(上)
深入理解前端路由:构建现代 Web 应用的基石(上)
深入理解前端路由:构建现代 Web 应用的基石(上)
|
3月前
|
前端开发 搜索推荐 UED
解密前端路由: hash模式vs.history模式
解密前端路由: hash模式vs.history模式
|
3月前
|
前端开发 JavaScript 关系型数据库
若依框架------后台路由数据是如何转换为前端路由信息的
若依框架------后台路由数据是如何转换为前端路由信息的
104 0
|
3月前
|
前端开发 JavaScript API
SPA与前端路由:构建无缝体验的现代前端应用
在前端开发领域,单页面应用(SPA)和前端路由成为了构建现代、高度交互性的应用程序的重要技术。本文将探讨SPA的优势以及前端路由的实践,帮助读者更好地理解如何利用这些技术来提升用户体验和开发效率。
|
3月前
|
前端开发 JavaScript 搜索推荐
深入理解前端路由:构建现代 Web 应用的基石(下)
深入理解前端路由:构建现代 Web 应用的基石(下)
深入理解前端路由:构建现代 Web 应用的基石(下)
|
3月前
|
前端开发 API UED
探索前端开发中的单页面应用(SPA)与前端路由
在前端开发中,单页面应用(SPA)和前端路由技术扮演着重要的角色。本文将深入探讨SPA的概念、特点以及与传统多页面应用的对比,并介绍前端路由的原理、实现方式以及其在SPA中的应用。通过对这两个关键概念的详细解析,读者将更好地理解现代前端开发中的架构设计和技术选型。
|
3月前
|
移动开发 前端开发 JavaScript
【面试题】 面试官为啥总是喜欢问前端路由实现方式?
【面试题】 面试官为啥总是喜欢问前端路由实现方式?
|
3月前
|
移动开发 前端开发 JavaScript
面试官为啥总是喜欢问前端路由实现方式?
面试官为啥总是喜欢问前端路由实现方式?
|
3月前
|
缓存 JavaScript 前端开发
「后端小伙伴来学前端了」Vue-Router 路由各种跳转、传参、小知识
「后端小伙伴来学前端了」Vue-Router 路由各种跳转、传参、小知识
47 0
|
11天前
|
前端开发
【前端学习】—路由跳转的三种方式(十九)
【前端学习】—路由跳转的三种方式(十九)