欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1.1前端路由配置表

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

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

 1.4 扁平化的目的是為了跳轉(zhuǎn)路由時(shí)進(jìn)行對(duì)比權(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ù)進(jìn)行渲染 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ái)系統(tǒng)-" + to.meta.title // 動(dòng)態(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
        }
      })
    }
  }
})
//獲取是否有當(dāng)前跳轉(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進(jìn)行比對(duì)的,也可以拿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)限的實(shí)現(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標(biāo)簽
<el-button type="text" v-has="'env:account'">關(guān)聯(lián)</el-button>

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

相關(guān)文章

  • Vue路由切換的兩種方式示例詳解

    Vue路由切換的兩種方式示例詳解

    這篇文章主要介紹了Vue路由切換的兩種方式,主要包括標(biāo)簽切換和js切換,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • vue項(xiàng)目實(shí)現(xiàn)圖形驗(yàn)證碼

    vue項(xiàng)目實(shí)現(xiàn)圖形驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目實(shí)現(xiàn)圖形驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • vue項(xiàng)目使用md5加密、crypto-js加密、國(guó)密sm3及國(guó)密sm4的方法

    vue項(xiàng)目使用md5加密、crypto-js加密、國(guó)密sm3及國(guó)密sm4的方法

    密碼或者其他比較重要東西假如使用明文傳輸中是很危險(xiǎn)的,所以就需要前端一些加密協(xié)議,對(duì)密碼、手機(jī)號(hào)、身份證號(hào)等信息進(jìn)行保護(hù),下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中使用md5加密、crypto-js加密、國(guó)密sm3及國(guó)密sm4的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • vue在App.vue文件中監(jiān)聽(tīng)路由變化刷新頁(yè)面操作

    vue在App.vue文件中監(jiān)聽(tīng)路由變化刷新頁(yè)面操作

    這篇文章主要介紹了vue在App.vue文件中監(jiān)聽(tīng)路由變化刷新頁(yè)面操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue3.2?reactive函數(shù)問(wèn)題小結(jié)

    vue3.2?reactive函數(shù)問(wèn)題小結(jié)

    reactive用來(lái)包裝一個(gè)對(duì)象,使其每個(gè)對(duì)象屬性都具有響應(yīng)性(也就是深層次響應(yīng)式),這篇文章主要介紹了vue3.2?reactive函數(shù)注意點(diǎn)及問(wèn)題小結(jié),需要的朋友可以參考下
    2022-12-12
  • Vue3?全局切換字體大小的實(shí)現(xiàn)

    Vue3?全局切換字體大小的實(shí)現(xiàn)

    本文主要介紹了Vue3?全局切換字體大小的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • vue中動(dòng)態(tài)設(shè)置meta標(biāo)簽和title標(biāo)簽的方法

    vue中動(dòng)態(tài)設(shè)置meta標(biāo)簽和title標(biāo)簽的方法

    這篇文章主要介紹了vue中動(dòng)態(tài)設(shè)置meta標(biāo)簽和title標(biāo)簽的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • VUEX?使用?mutations的兩種方式

    VUEX?使用?mutations的兩種方式

    這篇文章主要介紹了VUEX?使用?mutations的兩種方式,實(shí)現(xiàn)方式就是利用vuex中的mutations,在mutations中定義一個(gè)方法,這個(gè)方法就是把點(diǎn)擊的index(也就是每個(gè)列表的唯一標(biāo)識(shí)),傳給state中的當(dāng)前標(biāo)識(shí),需要的朋友可以參考下
    2023-01-01
  • vue3+echarts+折線投影(陰影)效果的實(shí)現(xiàn)

    vue3+echarts+折線投影(陰影)效果的實(shí)現(xiàn)

    這篇文章主要介紹了vue3+echarts+折線投影(陰影)效果的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue+tp5實(shí)現(xiàn)簡(jiǎn)單登錄功能

    vue+tp5實(shí)現(xiàn)簡(jiǎn)單登錄功能

    這篇文章主要為大家詳細(xì)介紹了vue+tp5實(shí)現(xiàn)簡(jiǎn)單登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論