zs 1 year ago
parent
commit
2dc999b775
4 changed files with 4 additions and 188 deletions
  1. 4 6
      src/layout/parts/Tagsbar.vue
  2. 0 2
      src/store/index.js
  3. 0 121
      src/store/modules/permission.js
  4. 0 59
      src/store/modules/settings.js

+ 4 - 6
src/layout/parts/Tagsbar.vue

@@ -47,23 +47,21 @@
 <script setup>
 import { ref, watch, onMounted, getCurrentInstance, computed } from 'vue'
 import { useRoute, useRouter } from 'vue-router'
+import defaultSettings from '@/settings'
 import { storeToRefs } from 'pinia'
 import { resolve } from 'path-browserify'
 import { translateRouteTitle } from '@/utils/i18n'
-
-import { usePermissionStore, useTagsViewStore, useSettingsStore, useAppStore } from '@/store'
+import { useTagsViewStore, useAppStore } from '@/store'
 
 const { proxy } = getCurrentInstance()
 const router = useRouter()
 const route = useRoute()
 
-const permissionStore = usePermissionStore()
 const tagsViewStore = useTagsViewStore()
 const appStore = useAppStore()
 
 const { visitedViews } = storeToRefs(tagsViewStore)
-const settingsStore = useSettingsStore()
-const layout = computed(() => settingsStore.layout)
+const layout = computed(() => defaultSettings.layout)
 const { t } = useI18n()
 const selectedTag = ref({
   path: '',
@@ -126,7 +124,7 @@ function filterAffixTags(routes, basePath = '/') {
 }
 
 function initTags() {
-  const tags = filterAffixTags(permissionStore.routes)
+  const tags = filterAffixTags([])
   affixTags.value = tags
   for (const tag of tags) {
     // Must have tag name

+ 0 - 2
src/store/index.js

@@ -8,7 +8,5 @@ export function setupStore(app) {
 }
 
 export * from './modules/app'
-export * from './modules/permission'
-export * from './modules/settings'
 export * from './modules/tagsView'
 export { store }

+ 0 - 121
src/store/modules/permission.js

@@ -1,121 +0,0 @@
-import { constantRoutes } from '@/router/index'
-import { store } from '@/store'
-import { MenusStore } from '@/store/api/system/menus'
-
-const modules = import.meta.glob('../../views/**/**.vue')
-const Layout = () => import('@/layout/index.vue')
-
-/**
- * Use meta.role to determine if the current user has permission
- *
- * @param roles 用户角色集合
- * @param route 路由
- * @returns
- */
-const hasPermission = (roles, route) => {
-  if (route.meta && route.meta.roles) {
-    // 角色【超级管理员】拥有所有权限,忽略校验
-    if (roles.includes('ROOT')) {
-      return true
-    }
-    return roles.some((role) => {
-      if (route.meta?.roles) {
-        return route.meta.roles.includes(role)
-      }
-    })
-  }
-  return false
-}
-
-/**
- * 递归过滤有权限的异步(动态)路由
- *
- * @param routes 接口返回的异步(动态)路由
- * @param roles 用户角色集合
- * @returns 返回用户有权限的异步(动态)路由
- */
-const filterAsyncRoutes = (routes, roles) => {
-  const asyncRoutes = []
-
-  routes.forEach((route) => {
-    const tmpRoute = { ...route } // ES6扩展运算符复制新对象
-    if (!route.name) {
-      tmpRoute.name = route.path
-    }
-    // 判断用户(角色)是否有该路由的访问权限
-    if (hasPermission(roles, tmpRoute)) {
-      if (tmpRoute.component?.toString() == 'Layout') {
-        tmpRoute.component = Layout
-      } else {
-        const component = modules[`../../views/${tmpRoute.component}.vue`]
-        if (component) {
-          tmpRoute.component = component
-        } else {
-          tmpRoute.component = modules[`../../views/error-page/404.vue`]
-        }
-      }
-
-      if (tmpRoute.children) {
-        tmpRoute.children = filterAsyncRoutes(tmpRoute.children, roles)
-      }
-
-      asyncRoutes.push(tmpRoute)
-    }
-  })
-
-  return asyncRoutes
-}
-
-// setup
-export const usePermissionStore = defineStore('permission', () => {
-  // state
-  const routes = ref([])
-
-  // actions
-  function setRoutes(newRoutes) {
-    routes.value = constantRoutes.concat(newRoutes)
-  }
-  /**
-   * 生成动态路由
-   *
-   * @param roles 用户角色集合
-   * @returns
-   */
-  function generateRoutes(roles) {
-    return new Promise((resolve, reject) => {
-      // 接口获取所有路由
-      MenusStore()
-        .then(({ data: asyncRoutes }) => {
-          // 根据角色获取有访问权限的路由
-          const accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
-          setRoutes(accessedRoutes)
-          resolve(accessedRoutes)
-        })
-        .catch((error) => {
-          reject(error)
-        })
-    })
-  }
-  /**
-   * 获取与激活的顶部菜单项相关的混合模式左侧菜单集合
-   */
-  const mixLeftMenus = ref([])
-  function setMixLeftMenus(topMenuPath) {
-    const matchedItem = routes.value.find((item) => item.path === topMenuPath)
-    if (matchedItem && matchedItem.children) {
-      mixLeftMenus.value = matchedItem.children
-    }
-  }
-  return {
-    routes,
-    setRoutes,
-    generateRoutes,
-    mixLeftMenus,
-    setMixLeftMenus
-  }
-})
-
-// 非setup
-export function usePermissionStoreHook() {
-  return usePermissionStore(store)
-}

+ 0 - 59
src/store/modules/settings.js

@@ -1,59 +0,0 @@
-import { defineStore } from 'pinia'
-import defaultSettings from '@/settings'
-import { useStorageAsync } from '@vueuse/core'
-
-export const useSettingsStore = defineStore('setting', () => {
-  const title = defaultSettings.title
-  const version = defaultSettings.version
-
-  const tagsView = useStorageAsync('tagsView', defaultSettings.tagsView)
-
-  const showSettings = ref(defaultSettings.showSettings)
-  const sidebarLogo = ref(defaultSettings.sidebarLogo)
-  const fixedHeader = useStorage('fixedHeader', defaultSettings.fixedHeader)
-  const layout = useStorage('layout', defaultSettings.layout)
-  const themeColor = useStorage('themeColor', defaultSettings.themeColor)
-  const theme = useStorage('theme', defaultSettings.theme)
-
-  // Whether to enable watermark
-  const watermark = useStorage('watermark', defaultSettings.watermark)
-
-  const settingsMap = {
-    showSettings,
-    fixedHeader,
-    tagsView,
-    sidebarLogo,
-    layout,
-    themeColor,
-    theme,
-    watermark: watermark.value
-  }
-
-  function changeSetting({ key, value }) {
-    const setting = settingsMap[key]
-    if (setting !== undefined) {
-      setting.value = value
-      if (key === 'theme') {
-        if (value === 'dark') {
-          document.documentElement.classList.add('dark')
-        } else {
-          document.documentElement.classList.remove('dark')
-        }
-      }
-    }
-  }
-
-  return {
-    title,
-    version,
-    showSettings,
-    tagsView,
-    fixedHeader,
-    sidebarLogo,
-    layout,
-    themeColor,
-    changeSetting,
-    theme,
-    watermark
-  }
-})