vue自定义权限标签详细代码示例

 更新时间:2023年09月15日 11:19:52   作者:ByCode  
这篇文章主要给大家介绍了关于vue自定义权限标签的相关资料,在Vue中你可以通过创建自定义组件来实现自定义标签组件,文中给出了详细的代码示例,需要的朋友可以参考下

技术栈

  • vuex
  • vue自定义标签

开门见山

1、创建directive

hasPermi.js

 /**
 * v-hasPermi 操作权限处理
 */
import store from '@/store'
export default {
  inserted(el, binding, vnode) {
    const { value } = binding
    const all_permission = "*:*:*";
    const permissions = store.getters && store.getters.permissions
    if (value && value instanceof Array && value.length > 0) {
      const permissionFlag = value
      const hasPermissions = permissions.some(permission => {
        return all_permission === permission || permissionFlag.includes(permission)
      })
      if (!hasPermissions) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    } else {
      throw new Error(`请设置操作权限标签值`)
    }
  }
}

index.js

import hasPermi from './permission/hasPermi'
const install = function(Vue) {
  Vue.directive('hasPermi', hasPermi)
}
if (window.Vue) {
  window['hasPermi'] = hasPermi
  Vue.use(install); // eslint-disable-line
}
export default install

2、store

user.js

import {getPermissions} from "@/api/token/assets";
import async from "async";
const user = {
    state: {
        permissions: []
    },
    mutations: {
        SET_PERMISSIONS: (state, permissions) => {
            state.permissions = permissions
        }
    },
    actions: {
        // 获取用户信息
        GetInfo({commit}, query) {
            return new Promise((resolve, reject) => {
                // 获取权限信息(请求后台数据接口)
                getPermissions(query).then(res => {
                    if ( res.code == 200 ) {
                        commit('SET_PERMISSIONS', res.data)
                    }
                    resolve(res)
                }).catch(error => {
                    reject(error)
                })
            })
        }
    }
}
export default user

getters.js

const getters = {
  token: state => state.user.token,
  permissions: state => state.user.permissions
}
export default getters

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import getters from './getters'
Vue.use(Vuex)
const store = new Vuex.Store({
  modules: {
    user
  },
  getters
})
export default store

3、src目录下创建permission.js

import router from './router'
import store from './store'
import { Message } from 'element-ui'
router.beforeEach((to, from, next) => {
  // to.query 获取url路由请求参数,传递给后端使用
  store.dispatch('GetInfo',to.query).then(() => {
    next()
  }).catch(err => {
    Message.error(err)
  })
})

4、src下的main.js使用

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import directive from './directive' // directive
import store from './store'
import './permission' // permission control
Vue.use(ElementUI)
Vue.use(directive)
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

5、按钮标签

 <el-button
              size="mini"
              type="text"
              icon="el-icon-delete"
              @click="handleDelete(scope.row)"
              v-hasPermi="['btn:delete']"
          >删除
          </el-button>

说明:

如果后台接口返回的按钮权限数据里包含btn:delete则删除按钮显示,否则不显示

后台返回数据如下:

[
  "btn:list", 
  "btn:add", 
  "btn:delete", 
  "btn:edit"
]

总结 

到此这篇关于vue自定义权限标签的文章就介绍到这了,更多相关vue自定义权限标签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 如何基于vue-cli3.0构建功能完善的移动端架子

    如何基于vue-cli3.0构建功能完善的移动端架子

    这篇文章主要介绍了基于vue-cli3.0构建功能完善的移动端架子,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 详解vue2和vue3如何定义响应式数据

    详解vue2和vue3如何定义响应式数据

    这篇文章主要是来和大家一起讨论一下vue2和vue3是如何定义响应式数据的,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • Vue3中的h函数及使用小结

    Vue3中的h函数及使用小结

    这篇文章主要介绍了Vue3中的h函数及使用小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • vue2从数据变化到视图变化发布订阅模式详解

    vue2从数据变化到视图变化发布订阅模式详解

    这篇文章主要为大家介绍了vue2从数据变化到视图变化发布订阅模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Vue项目启动报错解决方法大全

    Vue项目启动报错解决方法大全

    这篇文章主要给大家介绍了关于Vue项目启动报错解决方法的相关资料,文中通过图文将解决的过程介绍的非常详细,对大家学习或者使用vue具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • vue返回上一页面时不刷新问题及解决方案

    vue返回上一页面时不刷新问题及解决方案

    这篇文章主要介绍了vue返回上一页面时不刷新问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Vue3中watch监听器及源码学习

    Vue3中watch监听器及源码学习

    本文主要介绍了Vue3中watch监听器及源码学习,Watch侦听器在Vue3中特性进行了一些改变和优化,下面来详解的介绍一下基本使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 解决vue打包之后静态资源图片失效的问题

    解决vue打包之后静态资源图片失效的问题

    下面小编就为大家分享一篇解决vue打包之后静态资源图片失效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • vue自定义密码输入框解决浏览器自动填充密码的问题(最新方法)

    vue自定义密码输入框解决浏览器自动填充密码的问题(最新方法)

    这篇文章主要介绍了vue自定义密码输入框解决浏览器自动填充密码的问题,通过将密码输入框的type设置为text,修改样式上的显示,来实现既可以让浏览器不自动填充密码,又可以隐藏密码的效果,需要的朋友可以参考下
    2023-04-04
  • 如何在vue项目中使用百度地图API

    如何在vue项目中使用百度地图API

    这篇文章主要介绍了如何在vue项目中使用百度地图API,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
    2021-04-04

最新评论