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