fix
This commit is contained in:
@@ -6,7 +6,13 @@ import { listenerRouteChange } from '@/utils/route-listener'
|
|||||||
import { compile, computed, defineComponent, h, ref } from 'vue'
|
import { compile, computed, defineComponent, h, ref } from 'vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import type { RouteMeta } from 'vue-router'
|
import type { RouteMeta } from 'vue-router'
|
||||||
import { RouteRecordRaw, useRoute, useRouter } from 'vue-router'
|
import {
|
||||||
|
isNavigationFailure,
|
||||||
|
NavigationFailureType,
|
||||||
|
RouteRecordRaw,
|
||||||
|
useRoute,
|
||||||
|
useRouter,
|
||||||
|
} from 'vue-router'
|
||||||
import useMenuTree from './use-menu-tree'
|
import useMenuTree from './use-menu-tree'
|
||||||
import { COMMON_ICONS } from '@/views/ops/pages/system-settings/menu-management/menuIcons'
|
import { COMMON_ICONS } from '@/views/ops/pages/system-settings/menu-management/menuIcons'
|
||||||
|
|
||||||
@@ -45,10 +51,20 @@ export default defineComponent({
|
|||||||
selectedKey.value = [item.name as string]
|
selectedKey.value = [item.name as string]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
console.log('item', item)
|
const name = item.name
|
||||||
// Trigger router change
|
if (name == null || name === '') {
|
||||||
router.push({
|
console.warn('[Menu] 无法跳转:路由缺少 name', item.path, item.meta?.locale)
|
||||||
name: item.name,
|
return
|
||||||
|
}
|
||||||
|
if (!router.hasRoute(name as string)) {
|
||||||
|
console.warn('[Menu] 无法跳转:未注册的路由 name', name, item.meta?.locale)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
router.push({ name }).catch((err) => {
|
||||||
|
if (isNavigationFailure(err, NavigationFailureType.duplicated)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
console.error('[Menu] 路由跳转失败', name, err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const findMenuOpenKeys = (target: string) => {
|
const findMenuOpenKeys = (target: string) => {
|
||||||
@@ -80,7 +96,8 @@ export default defineComponent({
|
|||||||
const keySet = new Set([...menuOpenKeys, ...openKeys.value])
|
const keySet = new Set([...menuOpenKeys, ...openKeys.value])
|
||||||
openKeys.value = [...keySet]
|
openKeys.value = [...keySet]
|
||||||
|
|
||||||
selectedKey.value = [activeMenu || menuOpenKeys[menuOpenKeys.length - 1]]
|
const leafKey = (activeMenu || menuOpenKeys[menuOpenKeys.length - 1]) as string | undefined
|
||||||
|
selectedKey.value = leafKey ? [leafKey] : []
|
||||||
}
|
}
|
||||||
}, true)
|
}, true)
|
||||||
const setCollapse = (val: boolean) => {
|
const setCollapse = (val: boolean) => {
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ export default function useMenuTree() {
|
|||||||
return appClientMenus
|
return appClientMenus
|
||||||
})
|
})
|
||||||
const menuTree = computed(() => {
|
const menuTree = computed(() => {
|
||||||
const copyRouter = cloneDeep(appRoute.value) as RouteRecordNormalized[]
|
const copyRouter = cloneDeep(appRoute.value || []) as RouteRecordNormalized[]
|
||||||
copyRouter.sort((a: RouteRecordNormalized, b: RouteRecordNormalized) => {
|
copyRouter.sort((a: RouteRecordNormalized, b: RouteRecordNormalized) => {
|
||||||
return (a.meta.order || 0) - (b.meta.order || 0)
|
return (a.meta.order || 0) - (b.meta.order || 0)
|
||||||
})
|
})
|
||||||
function travel(_routes: RouteRecordRaw[], layer: number) {
|
function travel(_routes: RouteRecordRaw[], layer: number): RouteRecordRaw[] {
|
||||||
if (!_routes) return null
|
if (!_routes?.length) return []
|
||||||
|
|
||||||
const collector: any = _routes.map((element) => {
|
const collector: any = _routes.map((element) => {
|
||||||
// no access
|
// no access
|
||||||
@@ -44,16 +44,8 @@ export default function useMenuTree() {
|
|||||||
element.children = subItem
|
element.children = subItem
|
||||||
return element
|
return element
|
||||||
}
|
}
|
||||||
// the else logic
|
|
||||||
if (layer > 1) {
|
|
||||||
element.children = subItem
|
|
||||||
return element
|
|
||||||
}
|
|
||||||
|
|
||||||
if (element.meta?.hideInMenu === false) {
|
|
||||||
return element
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 子级全部被权限/隐藏规则过滤时,不再把父级当成可点击叶子(避免 push 父级 name 无对应页面)
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
return collector.filter(Boolean)
|
return collector.filter(Boolean)
|
||||||
|
|||||||
@@ -1,43 +1,4 @@
|
|||||||
import { DEFAULT_LAYOUT } from '../base'
|
import type { AppRouteRecordRaw } from '../types'
|
||||||
import { AppRouteRecordRaw } from '../types'
|
|
||||||
|
|
||||||
const REMOTE: AppRouteRecordRaw = {
|
/** 占位:勿导出空对象 `{}`,否则会被当作一条无效路由加入 router,导致部分菜单匹配异常 */
|
||||||
// path: '/dc',
|
export default [] as AppRouteRecordRaw[]
|
||||||
// name: 'DC',
|
|
||||||
// component: DEFAULT_LAYOUT,
|
|
||||||
// meta: {
|
|
||||||
// locale: 'menu.dc',
|
|
||||||
// requiresAuth: true,
|
|
||||||
// icon: 'icon-desktop',
|
|
||||||
// order: 99,
|
|
||||||
// hideInMenu: true,
|
|
||||||
// },
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// path: 'detail',
|
|
||||||
// name: 'DCDetail',
|
|
||||||
// component: () => import('@/views/ops/pages/dc/detail/index.vue'),
|
|
||||||
// meta: {
|
|
||||||
// locale: 'menu.dc.detail',
|
|
||||||
// requiresAuth: true,
|
|
||||||
// roles: ['*'],
|
|
||||||
// // is_full: true,
|
|
||||||
// isNewTab: true,
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: 'remote',
|
|
||||||
// name: 'DCRemote',
|
|
||||||
// component: () => import('@/views/ops/pages/dc/remote/index.vue'),
|
|
||||||
// meta: {
|
|
||||||
// locale: 'menu.dc.remote',
|
|
||||||
// requiresAuth: true,
|
|
||||||
// roles: ['*'],
|
|
||||||
// // is_full: true,
|
|
||||||
// isNewTab: true,
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
}
|
|
||||||
|
|
||||||
export default REMOTE
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
<template #title>
|
<template #title>
|
||||||
<div class="card-head-title">
|
<div class="card-head-title">
|
||||||
<div class="page-title">许可证信息</div>
|
<div class="page-title">许可证信息</div>
|
||||||
<div class="page-subtitle">{{ license?.company_name || '—' }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #extra>
|
<template #extra>
|
||||||
|
|||||||
Reference in New Issue
Block a user