Skip to content

Commit 9b12e36

Browse files
pythonHuangclaude
andcommitted
feat: 左侧菜单可折叠-顶栏新增折叠按钮(Fold/Expand图标),折叠后侧边栏收窄为64px仅显示图标(220px→64px带过渡),子菜单悬停弹出,logo折叠时仅显示⚡,自定义助手菜单项文本包span适配折叠隐藏,折叠状态localStorage持久化记住用户偏好
Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent dad6c46 commit 9b12e36

1 file changed

Lines changed: 27 additions & 11 deletions

File tree

‎JuggleNet6.Frontend/src/views/Layout.vue‎

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
<template>
22
<el-container style="height:100vh">
3-
<!-- 侧边栏 -->
4-
<el-aside width="220px" style="background:#001529;overflow:hidden;">
3+
<!-- 侧边栏(可折叠) -->
4+
<el-aside :width="isCollapse ? '64px' : '220px'" style="background:#001529;overflow:hidden;transition:width .2s;">
55
<div class="sidebar-logo">
6-
<span>⚡</span> Juggle
6+
<span>⚡</span>
7+
<span v-show="!isCollapse">Juggle</span>
78
</div>
89
<el-scrollbar style="height:calc(100vh - 60px);overflow-y:auto;">
9-
<el-menu :default-active="activeMenu" router background-color="#001529"
10-
text-color="#aaa" active-text-color="#fff" style="border:none;">
10+
<el-menu :default-active="activeMenu" router background-color="#001529"
11+
text-color="#aaa" active-text-color="#fff" style="border:none;"
12+
:collapse="isCollapse" :collapse-transition="false">
1113
<el-sub-menu index="monitor" v-if="hasMenu('/flow/dashboard')">
1214
<template #title>
1315
<el-icon><Histogram /></el-icon>
@@ -76,7 +78,7 @@
7678
<el-menu-item v-for="a in assistantMenuList" :key="a.id" :index="`/ai/assistant/${a.id}`">
7779
<img v-if="isImageIcon(a.icon)" :src="a.icon" style="width:16px;height:16px;margin-right:6px;vertical-align:-3px" />
7880
<span v-else style="margin-right:6px">{{ a.icon || '🤖' }}</span>
79-
{{ a.assistantName }}
81+
<span>{{ a.assistantName }}</span>
8082
</el-menu-item>
8183
</el-sub-menu>
8284
<el-menu-item index="/market">
@@ -108,9 +110,15 @@
108110
<el-container>
109111
<!-- 顶部导航 -->
110112
<el-header style="background:#fff;border-bottom:1px solid #eee;display:flex;align-items:center;justify-content:space-between;padding:0 24px">
111-
<el-breadcrumb separator="/">
112-
<el-breadcrumb-item>Juggle 接口编排平台</el-breadcrumb-item>
113-
</el-breadcrumb>
113+
<div style="display:flex;align-items:center;gap:14px">
114+
<el-icon class="collapse-btn" :size="20" @click="isCollapse = !isCollapse">
115+
<Expand v-if="isCollapse" />
116+
<Fold v-else />
117+
</el-icon>
118+
<el-breadcrumb separator="/">
119+
<el-breadcrumb-item>Juggle 接口编排平台</el-breadcrumb-item>
120+
</el-breadcrumb>
121+
</div>
114122
<el-dropdown @command="handleCommand">
115123
<span style="cursor:pointer;display:flex;align-items:center;gap:8px">
116124
<el-avatar :size="32" style="background:#0f3460">{{ userName?.charAt(0)?.toUpperCase() }}</el-avatar>
@@ -136,15 +144,19 @@
136144
</template>
137145

138146
<script setup lang="ts">
139-
import { computed, ref, onMounted } from 'vue'
147+
import { computed, ref, watch, onMounted } from 'vue'
140148
import { useRoute, useRouter } from 'vue-router'
141149
import { ElMessageBox } from 'element-plus'
142150
import { Connection, Grid, DataBoard, Setting, ArrowDown, Histogram, Document, MagicStick, Collection, Shop,
143151
Odometer, Share, Bell, List, Files, Search, DataAnalysis, Reading, Cpu, Link, Key, Timer, User, UserFilled,
144-
OfficeBuilding, Tickets, SetUp, Coin } from '@element-plus/icons-vue'
152+
OfficeBuilding, Tickets, SetUp, Coin, Fold, Expand } from '@element-plus/icons-vue'
145153
import request from '../utils/request'
146154
147155
const route = useRoute()
156+
157+
// 左侧菜单折叠(记住用户偏好)
158+
const isCollapse = ref(localStorage.getItem('sidebar_collapse') === '1')
159+
watch(isCollapse, v => localStorage.setItem('sidebar_collapse', v ? '1' : '0'))
148160
const router = useRouter()
149161
const userName = computed(() => localStorage.getItem('userName') || 'User')
150162
const activeMenu = computed(() => route.path)
@@ -210,7 +222,11 @@ function handleCommand(cmd: string) {
210222
color: #fff;
211223
gap: 8px;
212224
border-bottom: 1px solid #0a2540;
225+
white-space: nowrap;
226+
overflow: hidden;
213227
}
228+
.collapse-btn { cursor: pointer; color: #303133; }
229+
.collapse-btn:hover { color: #409eff; }
214230
.main-content {
215231
background: #f5f7fa;
216232
overflow: hidden;

0 commit comments

Comments
 (0)