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/packages/effects/layouts/src/basic/header/header.vue |   55 +++++++++++++++++++++++++++++++------------------------
 1 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/src/packages/effects/layouts/src/basic/header/header.vue b/src/packages/effects/layouts/src/basic/header/header.vue
index d5687ae..4105989 100644
--- a/src/packages/effects/layouts/src/basic/header/header.vue
+++ b/src/packages/effects/layouts/src/basic/header/header.vue
@@ -1,14 +1,15 @@
 <script lang="ts" setup>
 import { computed, useSlots } from 'vue';
 
-import { useRefresh } from '..\..\..\..\hooks\src';
-import { RotateCw } from '..\..\..\..\..\icons\src';
-import { preferences, usePreferences } from '..\..\..\..\..\preferences\src';
-import { useAccessStore } from '..\..\..\..\..\stores\src';
+import { useRefresh } from '../../../../hooks/src';
+import { RotateCw } from '../../../../../icons/src';
+import { preferences, usePreferences } from '../../../../../preferences/src';
+import { useAccessStore } from '../../../../../stores/src';
 
-import { VbenFullScreen, VbenIconButton } from '..\..\..\..\..\@core\ui-kit\shadcn-ui\src';
+import { VbenFullScreen, VbenIconButton } from '../../../../../@core/ui-kit/shadcn-ui/src';
 
 import {
+  DatabaseBackupButton,
   GlobalSearch,
   LanguageToggle,
   PreferencesButton,
@@ -47,6 +48,9 @@
 
 const rightSlots = computed(() => {
   const list: Array<SlotItem> = [];
+  if (preferences.widget.refresh) {
+    list.push({ index: REFERENCE_VALUE - 10, name: 'refresh' });
+  }
   // 鍏ㄥ眬鎼滅储
   if (preferences.widget.globalSearch) {
     list.push({
@@ -56,6 +60,12 @@
   }
   // 鍋忓ソ璁剧疆蹇嵎鍔熻兘
   if (preferencesButtonPosition.value.header) {
+    // 鏁版嵁搴撳浠芥寜閽�
+    list.push({
+      index: REFERENCE_VALUE + 5,
+      name: 'database-backup',
+    });
+
     list.push({
       index: REFERENCE_VALUE + 10,
       name: 'preferences',
@@ -113,14 +123,6 @@
 
 const leftSlots = computed(() => {
   const list: Array<SlotItem> = [];
-  // 鍒锋柊
-  if (preferences.widget.refresh) {
-    list.push({
-      index: 0,
-      name: 'refresh',
-    });
-  }
-
   Object.keys(slots).forEach((key) => {
     // 閫傞厤鎻掓Ы鍚嶇О锛屼緥濡傜涓�涓彃妲藉悕锛歨eader-left-1
     if (key.startsWith('header-left')) {
@@ -154,17 +156,12 @@
     v-for="slot in leftSlots.filter((item) => item.index < REFERENCE_VALUE)"
     :key="slot.name"
   >
-    <slot :name="slot.name">
-      <template v-if="slot.name === 'refresh'">
-        <VbenIconButton class="my-0 mr-1 rounded-md" @click="refresh">
-          <RotateCw class="size-4" />
-        </VbenIconButton>
-      </template>
-    </slot>
+    <slot :name="slot.name"></slot>
   </template>
   <div class="flex-center hidden lg:block">
     <slot name="breadcrumb"></slot>
   </div>
+  <div v-if="preferences.app.layout === 'mixed-nav'" class="portal-header-motto">寮�鏀惧崗浣溿��瀛︽湳鐮旂┒銆�鏈嶅姟鍙戝睍</div>
   <template
     v-for="slot in leftSlots.filter((item) => item.index > REFERENCE_VALUE)"
     :key="slot.name"
@@ -173,21 +170,31 @@
   </template>
   <div
     :class="`menu-align-${preferences.header.menuAlign}`"
-    class="flex h-full min-w-0 flex-1 items-center"
+    class="portal-header-navigation flex h-full min-w-0 flex-1 items-center"
   >
     <slot name="menu"></slot>
   </div>
-  <div class="flex h-full min-w-0 shrink-0 items-center">
+  <div class="portal-header-tools flex h-full min-w-0 shrink-0 items-center">
     <template v-for="slot in rightSlots" :key="slot.name">
       <slot :name="slot.name">
-        <template v-if="slot.name === 'global-search'">
+        <template v-if="slot.name === 'refresh'">
+          <VbenIconButton aria-label="鍒锋柊褰撳墠椤甸潰" title="鍒锋柊褰撳墠椤甸潰" class="my-0 mr-1 rounded-md" @click="refresh">
+            <RotateCw class="size-4" />
+          </VbenIconButton>
+        </template>
+        <template v-else-if="slot.name === 'global-search'">
+          <div class="portal-header-search">
           <GlobalSearch
+            :presentation="preferences.app.layout === 'mixed-nav' ? 'portal' : 'compact'"
             :enable-shortcut-key="globalSearchShortcutKey"
             :menus="accessStore.accessMenus"
-            class="mr-1 sm:mr-4"
           />
+          </div>
         </template>
 
+        <template v-else-if="slot.name === 'database-backup'">
+          <DatabaseBackupButton class="mr-1" />
+        </template>
         <template v-else-if="slot.name === 'preferences'">
           <PreferencesButton
             class="mr-1"

--
Gitblit v1.9.3