Forráskód Böngészése

增加按钮权限指令

tongshangming 1 éve
szülő
commit
a8cdb4df42
6 módosított fájl, 46 hozzáadás és 6 törlés
  1. 1 1
      package.json
  2. 2 2
      src/App.vue
  3. 12 0
      src/directive/index.ts
  4. 19 0
      src/directive/permission.ts
  5. 4 2
      src/main.ts
  6. 8 1
      src/stores/user.ts

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "fs-admin",
-  "version": "2.1.0",
+  "version": "2.2.0",
   "type": "module",
   "scripts": {
     "dev": "vite --host",

+ 2 - 2
src/App.vue

@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
 import { useThemeStore } from '@/stores/theme'
-import { initMicro } from '@/utils/micro'
+// import { initMicro } from '@/utils/micro'
 
 const locale = zhCn
 
@@ -9,7 +9,7 @@ const themeStore = useThemeStore()
 themeStore.initTheme()
 
 // 主服务初始化微服务
-initMicro()
+// initMicro()
 </script>
 
 <template>

+ 12 - 0
src/directive/index.ts

@@ -0,0 +1,12 @@
+import permission from './permission'
+import type { App } from 'vue'
+
+const directives = [permission]
+
+export default {
+  install(app: App): void {
+    directives.forEach(directive => {
+      directive.install(app)
+    })
+  }
+}

+ 19 - 0
src/directive/permission.ts

@@ -0,0 +1,19 @@
+import { useUserStore } from '@/stores/user'
+import type { App } from 'vue'
+
+export default {
+  install(app: App) {
+    const userStore = useUserStore()
+
+    app.directive('permission', {
+      // 指令的定义
+      mounted(el, binding) {
+        if (userStore.hasPermission(binding.value)) {
+          return
+        } else {
+          el.parentNode && el.parentNode.removeChild(el)
+        }
+      }
+    })
+  }
+}

+ 4 - 2
src/main.ts

@@ -9,6 +9,7 @@ import * as ElementPlusIconsVue from '@element-plus/icons-vue'
 // import { install } from '@icon-park/vue-next/es/all'
 
 import registerComponent from '@/components/index'
+import directives from '@/directive'
 
 import 'xe-utils'
 import {
@@ -64,7 +65,7 @@ import 'virtual:svg-icons-register'
 
 import { ossUpload } from '@/utils/utils'
 
-import WujieVue from 'wujie-vue3'
+// import WujieVue from 'wujie-vue3'
 
 function useTable(app: any) {
   // 表格功能
@@ -122,7 +123,8 @@ app.use(FsAdminCore, {
     baseApi: import.meta.env.VITE_BASE_API
   }
 })
-app.use(WujieVue)
+// app.use(WujieVue)
+app.use(directives)
 registerComponent(app)
 
 for (const [key, component] of Object.entries(ElementPlusIconsVue)) {

+ 8 - 1
src/stores/user.ts

@@ -9,7 +9,8 @@ export const useUserStore = defineStore({
       orgName: '山西方是科技股份有限公司 '
     },
     flag: false,
-    token: useStorage('token', '')
+    token: useStorage('token', ''),
+    permission: [] as string[]
   }),
   actions: {
     async getUserInfo() {
@@ -30,6 +31,12 @@ export const useUserStore = defineStore({
       this.token = ''
       sessionStorage.removeItem('globalTabs')
       router.push({ path: '/login', query: { redirect: router.currentRoute.value.fullPath } })
+    },
+    hasPermission(permission: string | string[]) {
+      if (!Array.isArray(permission)) {
+        permission = permission.split(',')
+      }
+      return this.permission.some(item => permission.includes(item))
     }
   }
 })