From bfa7d3b23e526809b04299d9c2719c3449aba3be Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期二, 28 四月 2026 10:32:42 +0800
Subject: [PATCH] 小程序图片压缩

---
 frontend-admin/src/layouts/MainLayout.vue |   78 ++++++++++++++++++++------------------
 1 files changed, 41 insertions(+), 37 deletions(-)

diff --git a/frontend-admin/src/layouts/MainLayout.vue b/frontend-admin/src/layouts/MainLayout.vue
index 632a048..03fd19e 100644
--- a/frontend-admin/src/layouts/MainLayout.vue
+++ b/frontend-admin/src/layouts/MainLayout.vue
@@ -1,6 +1,6 @@
 <template>
   <el-container class="layout">
-    <el-aside width="248px" class="side-wrap">
+    <el-aside width="15.98vw" class="side-wrap">
       <div class="brand-block">
         <div class="brand-icon"></div>
         <div class="brand-name">运维运营管理平台</div>
@@ -11,9 +11,9 @@
         unique-opened
         router
         class="side-menu"
-        background-color="#2f63d4"
+        background-color="#245ECC"
         text-color="#dce8ff"
-        active-text-color="#2f63d4"
+        active-text-color="#245ECC"
       >
         <el-menu-item v-if="auth.hasPermission('dashboard:page')" index="/dashboard" class="home-item">
           <el-icon><House /></el-icon>
@@ -100,22 +100,19 @@
     <el-container class="main-shell">
       <div class="top-wrap">
         <el-header class="header">
-          <div class="header-left">
-            <div class="header-title">
-              <span class="header-dot"></span>
-              <span>运维运营管理平台</span>
-            </div>
-          </div>
+          <div class="header-spacer"></div>
           <div class="header-right">
             <el-button class="menu-trigger" text>
               <el-icon><Operation /></el-icon>
             </el-button>
             <div class="user-box">
-              <el-avatar v-if="auth.avatarUrl" :size="28" :src="auth.avatarUrl" class="hdr-av" />
-              <el-avatar v-else :size="28" class="hdr-av">{{ nameInitial }}</el-avatar>
+              <el-avatar v-if="auth.avatarUrl" :size="30" :src="auth.avatarUrl" class="hdr-av" />
+              <el-avatar v-else :size="30" class="hdr-av">{{ nameInitial }}</el-avatar>
               <span class="user-name">{{ auth.displayName }}</span>
+              <el-button class="logout-trigger" text @click="confirmLogout">
+                <el-icon><SwitchButton /></el-icon>
+              </el-button>
             </div>
-            <el-button type="primary" link @click="logout">退出</el-button>
           </div>
         </el-header>
 
@@ -161,7 +158,8 @@
 <script setup lang="ts">
 import { computed, onBeforeUnmount, onMounted, reactive, ref, watch } from "vue";
 import { useRoute, useRouter } from "vue-router";
-import { Document, Grid, House, Operation, Setting, User, UserFilled, Wallet } from "@element-plus/icons-vue";
+import { ElMessageBox } from "element-plus";
+import { Document, Grid, House, Operation, Setting, SwitchButton, User, UserFilled, Wallet } from "@element-plus/icons-vue";
 import { useAuthStore } from "../stores/auth";
 import http from "../api/http";
 
@@ -175,6 +173,10 @@
 const router = useRouter();
 const auth = useAuthStore();
 const active = computed(() => route.path);
+const nameInitial = computed(() => {
+  const n = auth.displayName;
+  return n && n.length ? n.slice(0, 1) : "?";
+});
 const defaultOpeneds = computed(() => {
   const path = route.path;
   if (path.startsWith("/system/")) return ["system"];
@@ -210,11 +212,6 @@
   "/region/local-units": "属地单位管理",
 };
 const hiddenTabRouteNames = new Set(["staff-group-detail", "role-detail"]);
-const nameInitial = computed(() => {
-  const n = auth.displayName;
-  return n && n.length ? n.slice(0, 1) : "?";
-});
-
 function resolveRouteTitle() {
   if (typeof route.meta.title === "string" && route.meta.title) {
     return route.meta.title;
@@ -342,6 +339,19 @@
   auth.clear();
   router.push("/login");
 }
+
+async function confirmLogout() {
+  try {
+    await ElMessageBox.confirm("确认退出当前账号吗?", "退出确认", {
+      confirmButtonText: "确认",
+      cancelButtonText: "取消",
+      type: "warning",
+    });
+  } catch {
+    return;
+  }
+  await logout();
+}
 </script>
 
 <style scoped>
@@ -356,7 +366,7 @@
 }
 
 .side-wrap {
-  background: linear-gradient(180deg, #2f63d4 0%, #2d5fce 100%);
+  background: #245ECC;
   color: #fff;
   padding: 0 10px 12px;
   box-sizing: border-box;
@@ -411,7 +421,7 @@
 
 .side-menu :deep(.el-menu-item.is-active) {
   background: #ffffff !important;
-  color: #2f63d4 !important;
+  color: #245ECC !important;
 }
 
 .side-menu :deep(.el-sub-menu .el-menu-item) {
@@ -449,34 +459,23 @@
   display: flex;
   align-items: center;
   justify-content: space-between;
-  height: 44px;
-  width: 100%;
+  height: 60px;
+  width: 84vw;
   padding: 0 12px 0 14px;
   background: #ffffff;
   border-bottom: 1px solid #e7edf8;
   box-sizing: border-box;
 }
 
-.header-left,
+.header-spacer,
 .header-right,
-.user-box,
-.header-title {
+.user-box {
   display: flex;
   align-items: center;
 }
 
-.header-title {
-  gap: 10px;
-  color: #3d5d9e;
-  font-size: 14px;
-  font-weight: 600;
-}
-
-.header-dot {
-  width: 18px;
-  height: 18px;
-  border-radius: 50%;
-  background: linear-gradient(135deg, #7ca9ff, #4f7dff);
+.header-spacer {
+  flex: 1 1 auto;
 }
 
 .header-right {
@@ -491,6 +490,11 @@
   gap: 8px;
 }
 
+.logout-trigger {
+  color: #5e6f95;
+  padding: 0;
+}
+
 .user-name {
   color: #47587c;
   font-size: 13px;

--
Gitblit v1.7.1