fix: keep brand navigation in active workbench
Release / release (push) Canceled after 0s

This commit is contained in:
Qiufeng
2026-08-17 23:03:03 +08:00
parent 3480d810d4
commit b679381946
7 changed files with 55 additions and 13 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
<div :class="layoutCls">
<t-head-menu :class="menuCls" :theme="menuTheme" expand-type="popup" :value="active">
<template #logo>
<span v-if="showLogo" class="header-logo-container" @click="handleNav('/role-select')">
<span v-if="showLogo" class="header-logo-container" @click="handleNav(user.workbenchRoute)">
<span class="header-brand">财务系统</span>
</span>
<div v-else class="header-operate-left">
+3 -2
View File
@@ -45,7 +45,7 @@ import { useRouter } from 'vue-router';
import { prefix } from '@/config/global';
import { t } from '@/locales';
import { getActive } from '@/router';
import { useSettingStore } from '@/store';
import { useSettingStore, useUserStore } from '@/store';
import type { MenuRoute, ModeType } from '@/types/interface';
import pgk from '../../../package.json';
@@ -155,6 +155,7 @@ const menuCls = computed(() => {
const router = useRouter();
const settingStore = useSettingStore();
const userStore = useUserStore();
const autoCollapsed = () => {
const isCompact = window.innerWidth <= MIN_POINT;
@@ -175,7 +176,7 @@ onUnmounted(() => {
});
const goHome = () => {
router.push('/role-select');
router.push(userStore.workbenchRoute);
};
</script>
<style lang="less" scoped>
+1 -10
View File
@@ -73,16 +73,7 @@ const choose = async (roleCode: string) => {
try {
await userStore.selectRole(roleCode);
permissionStore.initRoutes();
const target = userStore.roles.find((role) => role.code === roleCode)?.workbenchRoute;
const fallback =
roleCode === 'PROJECT_MANAGER'
? '/workbench/project'
: roleCode === 'ARCHIVE_MANAGER'
? '/workbench/archive'
: roleCode === 'SYSTEM_ADMIN'
? '/governance/settings'
: '/workbench/finance';
await router.replace(target || fallback);
await router.replace(userStore.workbenchRoute);
} catch (error) {
MessagePlugin.error((error as Error).message || '身份选择失败,请重试');
} finally {
+2
View File
@@ -5,6 +5,7 @@ import * as authApi from '@/api/auth';
import { usePermissionStore } from '@/store';
import { hasPermissionAccess } from './menu-access';
import { resolveWorkbenchRoute } from './workbench-route';
const emptyUser: UserView = {
publicId: '',
@@ -28,6 +29,7 @@ export const useUserStore = defineStore('user', {
getters: {
displayName: (state) => state.user.displayName || state.user.username,
roleName: (state) => state.roles.find((role) => role.code === state.currentRole)?.name || '',
workbenchRoute: (state) => resolveWorkbenchRoute(state.currentRole, state.roles),
hasRole: (state) => (roleCode: string) => state.roles.some((role) => role.code === roleCode),
hasPermission: (state) => (permission: string) =>
hasPermissionAccess(state.currentRole, state.permissions, permission),
@@ -0,0 +1,13 @@
import type { RoleView } from '@/api/auth';
const fallbackWorkbenchRoutes: Record<string, string> = {
PROJECT_MANAGER: '/workbench/project',
FINANCE_MANAGER: '/workbench/finance',
ARCHIVE_MANAGER: '/workbench/archive',
SYSTEM_ADMIN: '/governance/settings',
};
export function resolveWorkbenchRoute(currentRole: string | null, roles: RoleView[]): string {
const configured = roles.find((role) => role.code === currentRole)?.workbenchRoute?.trim();
return configured || fallbackWorkbenchRoutes[currentRole || ''] || '/role-select';
}