From 91bfcf61f44f353dfebc54a57b5b774721de3e9a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 19 十月 2026 09:39:22 +0800
Subject: [PATCH] feat(auth): 更新门户认证页面布局和样式
---
src/layouts/basic.vue | 67 ++++++++-------------------------
1 files changed, 16 insertions(+), 51 deletions(-)
diff --git a/src/layouts/basic.vue b/src/layouts/basic.vue
index ee2b152..ff20779 100644
--- a/src/layouts/basic.vue
+++ b/src/layouts/basic.vue
@@ -1,14 +1,12 @@
<script lang="ts" setup>
import type { NotificationItem } from '@vben/layouts';
-import type { SystemTenantApi } from '#/api/system/tenant';
import { computed, onMounted, ref, watch } from 'vue';
-import { useAccess } from '@vben/access';
import { AuthenticationLoginExpiredModal, useVbenModal } from '@vben/common-ui';
import { VBEN_DOC_URL, VBEN_GITHUB_URL } from '@vben/constants';
-import { isTenantEnable, useTabs, useWatermark } from '@vben/hooks';
+import { useWatermark } from '@vben/hooks';
import {
AntdProfileOutlined,
BookOpenText,
@@ -21,14 +19,12 @@
Help,
LockScreen,
Notification,
- TenantDropdown,
UserDropdown,
} from '@vben/layouts';
import { preferences, usePreferences } from '@vben/preferences';
import { useAccessStore, useUserStore } from '@vben/stores';
import { formatDateTime, openWindow } from '@vben/utils';
-import { message } from 'ant-design-vue';
import {
getUnreadNotifyMessageCount,
@@ -36,18 +32,16 @@
updateAllNotifyMessageRead,
updateNotifyMessageRead,
} from '#/api/system/notify/message';
-import { getSimpleTenantList } from '#/api/system/tenant';
import { $t } from '#/locales';
import { router } from '#/router';
import { useAuthStore } from '#/store';
import LoginForm from '#/views/_core/authentication/login.vue';
+import PortalBrandText from '#/components/portal/portal-brand-text.vue';
const userStore = useUserStore();
const authStore = useAuthStore();
const accessStore = useAccessStore();
-const { hasAccessByCodes } = useAccess();
const { destroyWatermark, updateWatermark } = useWatermark();
-const { closeOtherTabs, refreshTab } = useTabs();
const notifications = ref<NotificationItem[]>([]);
const unreadCount = ref(0);
@@ -65,6 +59,11 @@
},
icon: AntdProfileOutlined,
text: $t('ui.widgets.profile'),
+ },
+ {
+ handler: () => router.push({ name: 'Profile', query: { section: 'resetPwd' } }),
+ icon: 'lucide:shield-check',
+ text: '瀵嗙爜璁剧疆',
},
// {
// handler: () => {
@@ -157,41 +156,10 @@
handleNotificationGetUnreadCount();
}
-// 绉熸埛鍒楄〃
-const tenants = ref<SystemTenantApi.Tenant[]>([]);
-const tenantEnable = computed(
- () => hasAccessByCodes(['system:tenant:visit']) && isTenantEnable(),
-);
-
-/** 鑾峰彇绉熸埛鍒楄〃 */
-async function handleGetTenantList() {
- if (tenantEnable.value) {
- tenants.value = await getSimpleTenantList();
- }
-}
-
-/** 澶勭悊绉熸埛鍒囨崲 */
-async function handleTenantChange(tenant: SystemTenantApi.Tenant) {
- if (!tenant || !tenant.id) {
- message.error('鍒囨崲绉熸埛澶辫触');
- return;
- }
- // 璁剧疆璁块棶绉熸埛 ID
- accessStore.setVisitTenantId(tenant.id as number);
- // 鍏抽棴鍏朵粬鏍囩椤碉紝鍙繚鐣欏綋鍓嶉〉
- await closeOtherTabs();
- // 鍒锋柊褰撳墠椤甸潰
- await refreshTab();
- // 鎻愮ず鍒囨崲鎴愬姛
- message.success(`鍒囨崲褰撳墠绉熸埛涓�: ${tenant.name}`);
-}
-
// ========== 鍒濆鍖� ==========
onMounted(() => {
// 棣栨鍔犺浇鏈鏁伴噺
handleNotificationGetUnreadCount();
- // 鑾峰彇绉熸埛鍒楄〃
- handleGetTenantList();
// 杞鍒锋柊鏈鏁伴噺
setInterval(
() => {
@@ -269,9 +237,13 @@
</script>
<template>
- <BasicLayout @clear-preferences-and-logout="handleLogout">
+ <BasicLayout class="supply-portal-shell" @clear-preferences-and-logout="handleLogout" @click-logo="router.push('/analytics')">
+ <template #logo-text>
+ <PortalBrandText />
+ </template>
<template #user-dropdown>
<UserDropdown
+ show-text
:avatar
:menus
:text="userStore.userInfo?.nickname"
@@ -280,6 +252,9 @@
@logout="handleLogout"
@clear-preferences-and-logout="handleLogout"
/>
+ </template>
+ <template #header-right-165>
+ <button type="button" class="portal-personal-entry" aria-label="涓汉涓績" title="涓汉涓績" :class="{ 'is-current': router.currentRoute.value.name === 'Profile' }" @click="router.push({ name: 'Profile' })"><IconifyIcon icon="lucide:user-round" /><span>涓汉涓績</span></button>
</template>
<template #notification>
<Notification
@@ -293,17 +268,7 @@
@on-click="handleClick"
/>
</template>
- <!-- <template #header-right-1>
- <div v-if="tenantEnable">
- <TenantDropdown
- class="mr-2"
- :tenant-list="tenants"
- :visit-tenant-id="accessStore.visitTenantId"
- @success="handleTenantChange"
- />
- </div>
- </template> -->
- <template #header-right-170>
+ <template v-if="router.hasRoute('MesWorkbench') && accessStore.accessMenus.some((menu) => /鐢熶骇|MES/i.test(menu.name))" #header-right-170>
<button
type="button"
class="flex cursor-pointer items-center gap-1.5 rounded-md border-none bg-primary/15 px-3 py-1.5 text-sm font-medium text-primary transition-colors hover:bg-primary/25"
--
Gitblit v1.9.3