最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue路由權(quán)限和按鈕權(quán)限的實現(xiàn)示例

 更新時間:2022年04月17日 08:28:38   作者:周金魚啊  
本文主要介紹了vue路由權(quán)限和按鈕權(quán)限的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一 菜單路由權(quán)限

1.1前端路由配置表

1.2后端數(shù)據(jù)返回

1.3 拿到數(shù)據(jù)后存到vuex

 1.4 扁平化的目的是為了跳轉(zhuǎn)路由時進行對比權(quán)限

//扁平化方法
flatten(data) {
 return data.reduce((arr,{name,id,resourceType,dimensionTypeCode,btnPermissions,path,children = [],}) =>
   arr.concat([{name,id,resourceType,dimensionTypeCode,btnPermissions,path,},],
     this.flatten(children)
    ),[]);
},

1.5 el-menu中直接拿到vuex中的數(shù)據(jù)進行渲染 sidebar-item組件的代碼就不貼了

<el-menu
  :default-active="activeMenu"
  :collapse="isCollapse"
  :unique-opened="false"
  :collapse-transition="false"
  mode="vertical"
>
 <sidebar-item
    v-for="(route,index) in productMenuList"
    :key="index"
    :item="route"
    :base-path="route.path"
  />
</el-menu>
 
//js部分
computed: {
  productMenuList() {
    if(this.$store.state.user.user.userMenu){
      return this.$store.state.user.user.userMenu;
    }     
  },
},

 1.6 router跳轉(zhuǎn)攔截判斷

router.beforeEach((to, _from, next) => {
  document.title = "后臺系統(tǒng)-" + to.meta.title // 動態(tài)title
  if (whiteList.includes(to.path)) {
    next();
  } else {
    if (storageLocal.getItem("token")) {
      if (hasPermission(to, store.state.user.user.menuTile)) {
        next();
      }
      else {
        next('/error/404')
      }
    }
    else {
      next({
        path: "/login",
        query: {
          redirect: to.fullPath
        }
      })
    }
  }
})
//獲取是否有當前跳轉(zhuǎn)的菜單權(quán)限
function hasPermission(router, accessMenu) {
  let menu = getMenuByPath(router.path, accessMenu);
  if (menu.path) {
    return true;
  }
  return false;
}

1.7 getMenuBypath方法

這里我是拿path進行比對的,也可以拿name,只要是路由中唯一的都可以;

export const getMenuByPath = function (path, accessMenu) {
    if (accessMenu) {
        let filter = accessMenu.filter(res => {
            return res.path == path;
        })
        return filter.length > 0 ? filter[0] : {}
    }
 
}

二 按鈕權(quán)限的實現(xiàn)

2.1后端返回的數(shù)據(jù)還是??那份

 2.2 封裝自定義指令,新建hasPermissionbtn.js

import router from '../../router'
import store from '../../store'
 
export default (Vue) => {
  /**自定義按鈕權(quán)限指令 */
  Vue.directive('has', {
    mounted(el, binding) {
      //從配置獲取用戶按鈕權(quán)限
      let path = router.currentRoute.value.path;
      let menu = getMenuByPath(path, store.state.user.user.menuTile);
      //獲取按鈕權(quán)限
      if (!Vue.config.globalProperties.$_has(binding.value, menu.btnPermissions)){
        //移除不匹配的元素
         el.parentNode.removeChild(el)
         // el.setAttribute("disabled",true)
       }
  },
})
 
//檢查權(quán)限方法
Vue.config.globalProperties.$_has = function (value, btnPermissions) {
  let isExist = false
  //有權(quán)限的按鈕集合;
   let btnPermsArr = []
    if (btnPermissions) {
      btnPermsArr = btnPermissions;
    }
    if (btnPermsArr.includes(value)) {
      isExist = true
    }
    return isExist
  }
}

2.3 權(quán)限按鈕中的使用

//v-has可以使用在任何元素上,如div或者el-table-column標簽
<el-button type="text" v-has="'env:account'">關(guān)聯(lián)</el-button>

到此這篇關(guān)于vue路由權(quán)限和按鈕權(quán)限的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)vue路由權(quán)限和按鈕權(quán)限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-electron使用serialport時問題解決方案

    vue-electron使用serialport時問題解決方案

    這篇文章主要介紹了vue-electron使用serialport時問題解決方案,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Vue3如何處理異步任務(wù)輪詢

    Vue3如何處理異步任務(wù)輪詢

    在許多應(yīng)用程序中,我們經(jīng)常需要執(zhí)行定期的異步任務(wù)輪詢,本文就介紹了Vue3如何處理異步任務(wù)輪詢,感興趣的可以了解一下
    2023-05-05
  • 關(guān)于Vue新搭檔TypeScript快速入門實踐

    關(guān)于Vue新搭檔TypeScript快速入門實踐

    這篇文章主要介紹了關(guān)于Vue新搭檔TypeScript快速入門實踐,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue3中實現(xiàn)歌詞滾動顯示效果

    Vue3中實現(xiàn)歌詞滾動顯示效果

    本文分享如何在Vue 3中實現(xiàn)一個簡單的歌詞滾動效果,我將從歌詞數(shù)據(jù)的處理開始,一步步介紹布局的搭建和事件的實現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 一文帶你了解vue雙向數(shù)據(jù)綁定

    一文帶你了解vue雙向數(shù)據(jù)綁定

    v-model?是?Vue.js?中一個重要的指令,它提供了一種簡潔的方式來實現(xiàn)雙向數(shù)據(jù)綁定,下面小編就來帶大家深入了解下vue雙向數(shù)據(jù)綁定的原理與應(yīng)用吧
    2023-09-09
  • vue2從數(shù)據(jù)變化到視圖變化發(fā)布訂閱模式詳解

    vue2從數(shù)據(jù)變化到視圖變化發(fā)布訂閱模式詳解

    這篇文章主要為大家介紹了vue2從數(shù)據(jù)變化到視圖變化發(fā)布訂閱模式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • vue怎樣獲取當前時間,并且傳遞給后端(不用注解)

    vue怎樣獲取當前時間,并且傳遞給后端(不用注解)

    這篇文章主要介紹了vue怎樣獲得當前時間,并且傳遞給后端(不用注解)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 解決element?ui?cascader?動態(tài)加載回顯問題

    解決element?ui?cascader?動態(tài)加載回顯問題

    這篇文章主要介紹了element?ui?cascader?動態(tài)加載回顯問題解決方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Vue源碼之rollup環(huán)境搭建步驟詳解

    Vue源碼之rollup環(huán)境搭建步驟詳解

    這篇文章主要介紹了Vue源碼之rollup環(huán)境搭建步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • vue封裝組件js版基本步驟

    vue封裝組件js版基本步驟

    這篇文章主要為大家介紹了vue封裝組件js版基本步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04

最新評論

如皋市| 新河县| 卢湾区| 烟台市| 温泉县| 海丰县| 佳木斯市| 称多县| 那坡县| 栾川县| 芒康县| 曲水县| 兴文县| 石林| 金溪县| 永清县| 河西区| 翼城县| 宜章县| 石城县| 乌兰察布市| 宜阳县| 赤城县| 云林县| 灵丘县| 晋城| 双江| 金溪县| 乌拉特前旗| 三明市| 来宾市| 武强县| 昭苏县| 河津市| 微博| 赣榆县| 宣城市| 牙克石市| 上林县| 武汉市| 辰溪县|