fix:折叠
This commit is contained in:
parent
a9b4c855d9
commit
f1961011bd
@ -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>
|
||||||
|
@ -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,
|
||||||
|
@ -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 {
|
||||||
|
@ -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) {
|
||||||
|
@ -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: {
|
||||||
|
Loading…
Reference in New Issue
Block a user