国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue2+antd——實(shí)現(xiàn)動(dòng)態(tài)菜單路由功能——基礎(chǔ)積累

這篇具有很好參考價(jià)值的文章主要介紹了vue2+antd——實(shí)現(xiàn)動(dòng)態(tài)菜單路由功能——基礎(chǔ)積累。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


最近在寫后臺(tái)管理系統(tǒng),遇到一個(gè)需求就是要將之前的靜態(tài)路由改為動(dòng)態(tài)路由,使用的后臺(tái)框架是: vue-antd-admin

實(shí)現(xiàn)的需求:

在頁(yè)面開(kāi)始登錄時(shí),通過(guò)路由接口可以獲取到所有有權(quán)限的菜單數(shù)據(jù)。

然后通過(guò)loadRoutes方法來(lái)實(shí)現(xiàn)異步動(dòng)態(tài)路由。

效果圖——?jiǎng)討B(tài)菜單的參數(shù)效果圖如下:

vue2+antd——實(shí)現(xiàn)動(dòng)態(tài)菜單路由功能——基礎(chǔ)積累,antd,vue基礎(chǔ)知識(shí),js必會(huì)知識(shí)點(diǎn),windows

在account.js中的refreshPermissions函數(shù)中添加以下代碼

如上圖所示,需要在登錄接口調(diào)用成功后,書(shū)寫以下的代碼:
import { loadRoutes } from '@/utils/routerUtil.js';
import { getCodeList } from '@/services/menu';//獲取權(quán)限的接口,我這邊是獲取權(quán)限成功后,再去獲取動(dòng)態(tài)菜單,其實(shí)這個(gè)邏輯是可以異步處理的。

actions: {
 refreshPermissions({ commit }, callback) {
   getCodeList().then((res) => {
     let permissions = [];
     res &&
       res.map((x) => {
         permissions.push({
           id: x,
           operation: [],
         });
       });
     commit('setPermissions', permissions);
   });
   loadRoutes();
   callback && callback('success');
 }
}

loadRoutes方法內(nèi)容如下:

import PageView from '@/layouts/PageView';
function changeRoutes(item) {
  let obj = { ...item };
  obj.component =
    item.routeTypeCode == 0
      ? PageView
      : (resolve) => require([`@/pages${item.component}`], resolve);
  if (item.children) {
    obj['children'] = item.children.map((child) => {
      return changeRoutes(child);
    });
  }
  return obj;
}
function loadRoutes(routesConfig){
  getCurrentMenu().then((arr) => {
  //如果接口沒(méi)有數(shù)據(jù),則可以用下面的模擬數(shù)據(jù)
  let arr = [
    {
      path: 'default',
      name: '工作臺(tái)',
      icon: 'dashboard',
      component: '/dashboard/index',
      routeTypeCode: 1,
    },
    {
      path: '/memberManage',
      name: '客戶管理',
      icon: 'team',
      component: '/BlankView',
      routeTypeCode: 0,
      children: [
        {
          path: '/company/list',
          name: '企業(yè)管理',
          component: '/Member/Company/list',
          routeTypeCode: 1,
        },
        {
          path: '/company/detail',
          name: '企業(yè)詳情',
          invisible: true,
          routeTypeCode: 1,
          component: '/Member/Company/detail',
        },
        {
          name: '用戶管理',
          path: '/member/list',
          routeTypeCode: 1,
          component: '/Member/Member/list',
        },
        {
          name: '用戶詳情',
          path: '/member/detail',
          routeTypeCode: 1,
          invisible: true,
          component: '/Member/Member/detail',
        },
      ],
    },
    {
      path: '/system',
      name: '系統(tǒng)管理',
      icon: 'setting',
      routeTypeCode: 0,
      component: () => import('@/layouts/PageView'),
      children: [
        {
          name: '角色管理',
          path: '/system/role',
          routeTypeCode: 1,
          component: '/identity/RoleList',
        },
        {
          name: '部門組織',
          path: '/system/organization',
          routeTypeCode: 1,
          component: '/organization/organizationUnits',
        },
        {
          name: '用戶管理',
          path: '/system/user',
          routeTypeCode: 1,
          component: '/identity/UserList',
        },
        {
          name: '數(shù)據(jù)字典',
          path: '/system/dataDictionary',
          routeTypeCode: 1,
          component: '/dataDictionary/DataDictionary',
        },
        {
          name: '客戶端管理',
          path: '/system/openApi',
          routeTypeCode: 1,
          component: '/OpenAPI/index',
        },
        {
          name: 'HttpApi日志',
          path: '/system/httpApi',
          routeTypeCode: 1,
          component: '/system/httpApi',
        },
        {
          name: '審計(jì)日志',
          path: '/system/auditLog',
          routeTypeCode: 1,
          component: '/system/auditLog',
        },
        {
          name: '緩存列表',
          path: '/system/cache',
          routeTypeCode: 1,
          component: '/system/cache',
        },
      ],
    },
    {
      path: '/menu',
      name: '菜單管理',
      icon: 'menu',
      routeTypeCode: 0,
      redirect: '/menu/list',
      component: '/BlankView.vue',
      children: [
        {
          path: '/menu/list',
          name: '菜單管理',
          routeTypeCode: 1,
          component: '/Menu/menuList.vue',
        },
      ],
    },
  ];
  let list = [];
  arr.forEach((item) => {
    if (item.routeTypeCode != 2) {
      list.push(changeRoutes(item));
    }
  });
  routesConfig = [
    {
      router: 'root',
      children: list,
    },
  ];
  console.log('加載路由了,在此處請(qǐng)求接口獲取數(shù)據(jù)', routesConfig);
  // 應(yīng)用配置
  const { router, store, i18n } = appOptions;
  // 如果 routesConfig 有值,則更新到本地,否則從本地獲取
  if (routesConfig) {
    store.commit('account/setRoutesConfig', routesConfig);
  } else {
    routesConfig = store.getters['account/routesConfig'];
  }
  // 如果開(kāi)啟了異步路由,則加載異步路由配置
  // const asyncRoutes = store.state.setting.asyncRoutes;
  const asyncRoutes = true;
  if (asyncRoutes) {
    if (routesConfig && routesConfig.length > 0) {
      const routes = parseRoutes(routesConfig, routerMap);
      const finalRoutes = mergeRoutes(basicOptions.routes, routes);
      formatRoutes(finalRoutes);
      router.options = { ...router.options, routes: finalRoutes };
      router.matcher = new Router({ ...router.options, routes: [] }).matcher;
      console.log('finalRoutes', finalRoutes);
      router.addRoutes(finalRoutes);
    }
  }
  // 提取路由國(guó)際化數(shù)據(jù)
  mergeI18nFromRoutes(i18n, router.options.routes);
  // 初始化Admin后臺(tái)菜單數(shù)據(jù)
  const rootRoute = router.options.routes.find((item) => item.path === '/');
  const menuRoutes = rootRoute && rootRoute.children;
  if (menuRoutes) {
    store.commit('setting/setMenuData', menuRoutes);
  }
  })
}

上面最重要的文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-713209.html

到了這里,關(guān)于vue2+antd——實(shí)現(xiàn)動(dòng)態(tài)菜單路由功能——基礎(chǔ)積累的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue3+vite搭建基礎(chǔ)架構(gòu)(11)--- 菜單欄功能和Tab頁(yè)功能實(shí)現(xiàn)

    Vue3+vite搭建基礎(chǔ)架構(gòu)(11)--- 菜單欄功能和Tab頁(yè)功能實(shí)現(xiàn)

    這里記錄下自己在Vue3+vite的項(xiàng)目使用less來(lái)寫樣式以及使用vite-plugin-vue-setup-extend直接定義組件name,不使用ts語(yǔ)法,方便以后直接使用。這里承接自己的博客Vue3+vite搭建基礎(chǔ)架構(gòu)(10)— 使用less和vite-plugin-vue-setup-extend這篇博客,在該博客項(xiàng)目的基礎(chǔ)上增加菜單欄功能和Tab頁(yè)功能

    2024年02月21日
    瀏覽(23)
  • Vue2動(dòng)態(tài)路由

    Vue2動(dòng)態(tài)路由

    應(yīng)用場(chǎng)景: ? 一般管理端的菜單欄是根據(jù)登錄用戶角色不同,動(dòng)態(tài)生成的,在vue中我們不止菜單欄需要?jiǎng)討B(tài)生成,同時(shí)我們路由也需要?jiǎng)討B(tài)生成。 使用到的組件: 組件名稱 組件版本 組件作用 axios 1.3.4 用于發(fā)送請(qǐng)求獲取數(shù)據(jù) element-ui 2.15.13 前端ui組件庫(kù),制作頁(yè)面使用 vue-

    2024年02月20日
    瀏覽(21)
  • Vue-根據(jù)角色獲取菜單動(dòng)態(tài)添加路由

    Vue-根據(jù)角色獲取菜單動(dòng)態(tài)添加路由

    如果大家寫過(guò)后臺(tái)管理系統(tǒng)的項(xiàng)目,那么動(dòng)態(tài)路由一定是繞不開(kāi)的,如果想偷懶的話,就把所有路由一開(kāi)始都配置好,然后只根據(jù)后端返回的菜單列表渲染就好菜單就好了,但是這樣的隱患就是我在地址欄輸入的地址的時(shí)候,也會(huì)進(jìn)入這個(gè)頁(yè)面,不偷懶的方法就是本文要介紹

    2024年01月24日
    瀏覽(23)
  • 前端之vue 根據(jù)菜單自動(dòng)生成路由(動(dòng)態(tài)配置前端路由)

    前端之vue 根據(jù)菜單自動(dòng)生成路由(動(dòng)態(tài)配置前端路由)

    在需要權(quán)限控制的頁(yè)面,往往存在根據(jù)用戶來(lái)顯示菜單的情況,單獨(dú)根據(jù)用戶類型判斷顯然不是很好,如果后面用戶類型發(fā)生變化,項(xiàng)目修改維護(hù)可能就會(huì)比較麻煩,所以比較好的做法是根據(jù)后端返回的菜單動(dòng)態(tài)生成頁(yè)面路由,以達(dá)到完全權(quán)限控制的目的,并且若權(quán)限發(fā)生變

    2024年04月10日
    瀏覽(28)
  • Vue2中根據(jù)權(quán)限添加動(dòng)態(tài)路由

    Vue2中根據(jù)權(quán)限添加動(dòng)態(tài)路由

    大概記錄一下主要代碼 大概結(jié)構(gòu)如下:

    2024年02月12日
    瀏覽(30)
  • Django+vue3權(quán)限菜單rabc設(shè)計(jì)和動(dòng)態(tài)路由

    Django+vue3權(quán)限菜單rabc設(shè)計(jì)和動(dòng)態(tài)路由

    本次是基于Django和vue實(shí)現(xiàn) github源碼:nineaiyu/xadmin-server: xadmin-基于Django+vue3的rbac權(quán)限管理系統(tǒng) (github.com) 服務(wù)器設(shè)計(jì)及部分代碼? 權(quán)限控制的話,可以基于Django的permission進(jìn)行控制,并通過(guò)訪問(wèn)api的URL操作 核心代碼如下 因此,需要對(duì)menu表進(jìn)行設(shè)計(jì),由于涉及到了前端vue路由,

    2024年02月12日
    瀏覽(35)
  • Vue2-動(dòng)態(tài)路由傳參的基本用法

    在Vue 2中,可以使用動(dòng)態(tài)路由傳遞參數(shù)。動(dòng)態(tài)路由參數(shù)允許你在路由路徑中包含占位符,這些占位符可以在路由被匹配時(shí)提取出來(lái)并作為參數(shù)傳遞給組件。 下面是一個(gè)使用Vue 2動(dòng)態(tài)路由傳參的基本用法的例子: 首先,在路由配置文件(通常是 router/index.js )中定義一個(gè)帶有動(dòng)

    2024年02月01日
    瀏覽(20)
  • el-menu實(shí)現(xiàn)左側(cè)菜單欄(vue2,vue3)

    vue3寫法 多級(jí)數(shù)據(jù) 1. home.vue 先把頁(yè)面基底搭建好 2. Sidebar.vue 左側(cè)菜單欄(多級(jí)數(shù)據(jù)) 3. Header.vue 頂部導(dǎo)航欄 一級(jí)數(shù)據(jù) home頁(yè)面是一樣的 Sidebar.vue Header.vue(我這里還做了一個(gè)切換晝夜間模式的主題) vue2 多級(jí)數(shù)據(jù) 一級(jí)數(shù)據(jù)(使用自己的圖標(biāo)

    2024年02月08日
    瀏覽(24)
  • Vue2基礎(chǔ)九、路由

    Vue2基礎(chǔ)九、路由

    1、單頁(yè)應(yīng)用 (1)單頁(yè)應(yīng)用是什么 單頁(yè)面應(yīng)用(SPA:Single Page Application): 所有功能在 一個(gè)html頁(yè)面 上實(shí)現(xiàn) 具體示例: 網(wǎng)易云音樂(lè) https://music.163.com/ (2)單頁(yè)面應(yīng)用VS多頁(yè)面應(yīng)用 單頁(yè)面應(yīng)用優(yōu)缺點(diǎn) 優(yōu)點(diǎn):按需更新性能高,開(kāi)發(fā)效率高,用戶體驗(yàn)好 缺點(diǎn):學(xué)習(xí)成本,首屏加載慢,

    2024年02月15日
    瀏覽(11)
  • Vue2路由:手動(dòng)配置使用路由&路由嵌套、路由動(dòng)態(tài)傳參(:參數(shù),query、props)、編程式導(dǎo)航(back、go)、導(dǎo)航守衛(wèi)

    Vue2路由:手動(dòng)配置使用路由&路由嵌套、路由動(dòng)態(tài)傳參(:參數(shù),query、props)、編程式導(dǎo)航(back、go)、導(dǎo)航守衛(wèi)

    過(guò)了一遍vue2的router,整理一下小結(jié) 目錄 一、前端路由的概念與原理 1.1 什么是路由 1.2 路由的工作方式 二、vue-router的基本使用 2.1 安裝、配置、使用router 2.2 redirect重定向 三、嵌套路由 3.1 聲明子路由的規(guī)則 3.2 默認(rèn)子路由 四、動(dòng)態(tài)路由 4.1 動(dòng)態(tài)路由的概念 4.2 動(dòng)態(tài)路由取參方

    2024年02月05日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包