fix:折叠

This commit is contained in:
刘玉霞 2024-11-01 12:45:46 +08:00
parent a9b4c855d9
commit f1961011bd
5 changed files with 100 additions and 16 deletions

View File

@ -1,8 +1,19 @@
<template> <template>
<el-aside v-if="!navTabs.state.tabFullScreen" :class="'layout-aside-' + config.layout.layoutMode + ' ' + (config.layout.shrink ? 'shrink' : '')"> <el-aside
v-if="!navTabs.state.tabFullScreen"
:class="[
config.layout.menuCollapse ? '' : 'layout-aside-collapse',
'layout-aside-' + config.layout.layoutMode + ' ' + (config.layout.shrink ? 'shrink' : ''),
]"
>
<Logo v-if="config.layout.menuShowTopBar" /> <Logo v-if="config.layout.menuShowTopBar" />
<MenuVerticalChildren v-if="config.layout.layoutMode == 'Double'" /> <MenuVerticalChildren v-if="config.layout.layoutMode == 'Double'" />
<MenuVertical v-else /> <MenuVertical v-else />
<div class="layout-toggle-bar" @click="onMenuCollapse">
<div class="layout-toggle-bar__top"></div>
<div class="layout-toggle-bar__bottom"></div>
</div>
</el-aside> </el-aside>
</template> </template>
@ -22,6 +33,14 @@ const config = useConfig()
const navTabs = useNavTabs() const navTabs = useNavTabs()
const menuWidth = computed(() => config.menuWidth()) const menuWidth = computed(() => config.menuWidth())
const onMenuCollapse = () => {
if (config.layout.menuCollapse) {
config.setLayout('menuCollapse', false)
} else {
config.setLayout('menuCollapse', true)
}
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@ -43,6 +62,7 @@ const menuWidth = computed(() => config.menuWidth())
overflow: hidden; overflow: hidden;
transition: width 0.3s ease; transition: width 0.3s ease;
width: v-bind(menuWidth); width: v-bind(menuWidth);
position: relative;
} }
.shrink { .shrink {
position: fixed; position: fixed;
@ -50,4 +70,60 @@ const menuWidth = computed(() => config.menuWidth())
left: 0; left: 0;
z-index: 9999999; z-index: 9999999;
} }
.layout-toggle-bar {
cursor: pointer;
height: 72px;
width: 32px;
position: absolute;
top: calc(50% - 36px);
right: -9px;
.layout-toggle-bar__top {
background-color: rgba(191, 191, 191, 1);
position: absolute;
width: 4px;
border-radius: 2px;
height: 38px;
left: 14px;
transition:
background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.layout-toggle-bar__bottom {
background-color: rgba(191, 191, 191, 1);
position: absolute;
width: 4px;
border-radius: 2px;
height: 38px;
left: 14px;
top: 34px;
transition:
background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
&:hover {
.layout-toggle-bar__top {
background-color: rgba(153, 153, 153, 1);
transform: rotate(-12deg) scale(1.15) translateY(-2px);
}
.layout-toggle-bar__bottom {
background-color: rgba(153, 153, 153, 1);
transform: rotate(12deg) scale(1.15) translateY(2px);
}
}
}
.layout-aside-collapse {
.layout-toggle-bar {
&:hover {
.layout-toggle-bar__top {
background-color: rgba(153, 153, 153, 1);
transform: rotate(12deg) scale(1.15) translateY(-2px);
}
.layout-toggle-bar__bottom {
background-color: rgba(153, 153, 153, 1);
transform: rotate(-12deg) scale(1.15) translateY(2px);
}
}
}
}
</style> </style>

View File

@ -29,6 +29,10 @@ const state = reactive({
defaultActive: '', defaultActive: '',
}) })
const width = computed(() => {
return config.layout.menuCollapse ? '5px' : '20px'
})
const verticalMenusScrollbarHeight = computed(() => { const verticalMenusScrollbarHeight = computed(() => {
let menuTopBarHeight = 0 let menuTopBarHeight = 0
if (config.layout.menuShowTopBar) { if (config.layout.menuShowTopBar) {
@ -70,7 +74,8 @@ onBeforeRouteUpdate((to) => {
} }
.layouts-menu-vertical { .layouts-menu-vertical {
border: 0; border: 0;
padding: 10px 20px 30px 20px; width: 100%;
padding: 10px v-bind(width) 30px v-bind(width);
--el-menu-bg-color: transparent; --el-menu-bg-color: transparent;
--el-menu-active-color: #ffffff; --el-menu-active-color: #ffffff;
li, li,

View File

@ -350,7 +350,7 @@ const menu = [
], ],
}, },
] ]
debugger
function transformNode(menu: any) { function transformNode(menu: any) {
menu = menu.map((node: any) => { menu = menu.map((node: any) => {
return { return {

View File

@ -10,7 +10,7 @@ export const useConfig = defineStore(
/* 全局 */ /* 全局 */
showDrawer: false, showDrawer: false,
// 是否收缩布局(小屏设备) // 是否收缩布局(小屏设备)
shrink: false, shrink: true,
// 后台布局方式,可选值<Default|Classic|Streamline|Double> // 后台布局方式,可选值<Default|Classic|Streamline|Double>
layoutMode: 'Classic', layoutMode: 'Classic',
// 后台主页面切换动画,可选值<slide-right|slide-left|el-fade-in-linear|el-fade-in|el-zoom-in-center|el-zoom-in-top|el-zoom-in-bottom> // 后台主页面切换动画,可选值<slide-right|slide-left|el-fade-in-linear|el-fade-in|el-zoom-in-center|el-zoom-in-top|el-zoom-in-bottom>
@ -70,7 +70,7 @@ export const useConfig = defineStore(
return layout.menuCollapse ? '0px' : layout.menuWidth + 'px' return layout.menuCollapse ? '0px' : layout.menuWidth + 'px'
} }
// 菜单是否折叠 // 菜单是否折叠
return layout.menuCollapse ? '64px' : layout.menuWidth + 'px' return layout.menuCollapse ? '74px' : layout.menuWidth + 'px'
} }
function setLang(val: string) { function setLang(val: string) {

View File

@ -57,23 +57,26 @@ const viteConfig = ({ mode }: ConfigEnv): UserConfig => {
...createProxy(VITE_APP_PROXY), ...createProxy(VITE_APP_PROXY),
}, },
}, },
esbuild: {
drop: ['console', 'debugger'],
},
build: { build: {
cssCodeSplit: false, cssCodeSplit: false,
sourcemap: false, sourcemap: false,
outDir: VITE_OUT_DIR, outDir: VITE_OUT_DIR,
emptyOutDir: true, emptyOutDir: true,
chunkSizeWarningLimit: 1500, chunkSizeWarningLimit: 1500,
terserOptions: { // terserOptions: {
compress: { // compress: {
keep_infinity: true, // keep_infinity: true,
// Used to delete console in production environment // // Used to delete console in production environment
drop_console: true, // drop_console: true,
drop_debugger: true, // drop_debugger: true,
}, // },
output: { // output: {
comments: true, // 去掉注释内容 // comments: true, // 去掉注释内容
}, // },
}, // },
rollupOptions: { rollupOptions: {
output: { output: {
manualChunks: { manualChunks: {