From 198d1a950c0f3358c2c42cf3b7750cf6ba2190be Mon Sep 17 00:00:00 2001 From: Timi Date: Sun, 23 Aug 2026 13:08:05 +0800 Subject: [PATCH] fix customer tab --- src/layout/MainLayout.vue | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/layout/MainLayout.vue b/src/layout/MainLayout.vue index 879df77..a5a93f3 100644 --- a/src/layout/MainLayout.vue +++ b/src/layout/MainLayout.vue @@ -135,27 +135,39 @@ type TabItem = { value: string; icon: string; text: string; - permission?: string; + permission?: string | string[]; + permissionMode?: "and" | "or"; }; const tabVal = ref(route.path); const tabList: TabItem[] = [ - { value: "/customers", icon: "usergroup", text: "客户" }, + { + value: "/customers", + icon: "usergroup", + text: "客户", + permission: [permissionCodes.customer.create, permissionCodes.eventRecord.create] + }, { value: "/store", icon: "shop-3", text: "门店", permission: permissionCodes.stat.read }, { value: "/management", icon: "setting-1", text: "管理" } ]; -const list = computed(() => tabList.filter(item => !item.permission || userStore.hasPermissions(item.permission))); +const list = computed(() => tabList.filter(item => !item.permission || userStore.hasPermissions(item.permission, item.permissionMode))); watch(() => route.path, (newPath: string) => { tabVal.value = resolveTabValue(newPath); }, { immediate: true }); -watch(list, () => { +async function syncVisibleTab(): Promise { const visiblePath = resolveVisibleTabValue(route.path); if (tabVal.value !== visiblePath) { tabVal.value = visiblePath; } -}, { immediate: true }); + + if (route.path === "/customers" && visiblePath !== "/customers") { + await router.replace(visiblePath); + } +} + +watch(list, syncVisibleTab, { immediate: true }); function resolveTabValue(path: string): string { if (path.startsWith("/customers")) {