增加侧边栏菜单折叠动画效果切换与设置

This commit is contained in:
思维空间
2020-04-23 11:00:49 +08:00
parent e2c4a40119
commit 349e08b0a8
7 changed files with 78 additions and 19 deletions

View File

@@ -74,13 +74,15 @@
} }
.d2-theme-container { .d2-theme-container {
.d2-theme-container-aside { .d2-theme-container-aside {
transition: width .3s;
position: relative; position: relative;
.d2-layout-header-aside-menu-side { .d2-layout-header-aside-menu-side {
@extend %full; @extend %full;
overflow: hidden; overflow: hidden;
} }
} }
.d2-theme-container-transition {
transition: width .3s;
}
.d2-theme-container-main { .d2-theme-container-main {
padding: 0px; padding: 0px;
position: relative; position: relative;
@@ -116,13 +118,15 @@
.d2-theme-header { .d2-theme-header {
// logo区域 // logo区域
.logo-group { .logo-group {
transition: width .3s;
float: left; float: left;
text-align: center; text-align: center;
img { img {
height: 60px; height: 60px;
} }
} }
.logo-transition {
transition: width .3s;
}
// 折叠侧边栏切换按钮 // 折叠侧边栏切换按钮
.toggle-aside-btn { .toggle-aside-btn {
float: left; float: left;

View File

@@ -11,7 +11,7 @@ export default {
render (h) { render (h) {
return h('div', { attrs: { class: 'd2-layout-header-aside-menu-side' } }, [ return h('div', { attrs: { class: 'd2-layout-header-aside-menu-side' } }, [
h('el-menu', { h('el-menu', {
props: { collapse: this.asideCollapse, uniqueOpened: true, defaultActive: this.$route.fullPath }, props: { collapse: this.asideCollapse, collapseTransition: this.asideTransition, uniqueOpened: true, defaultActive: this.$route.fullPath },
ref: 'menu', ref: 'menu',
on: { select: this.handleMenuSelect } on: { select: this.handleMenuSelect }
}, this.aside.map(menu => (menu.children === undefined ? elMenuItem : elSubmenu).call(this, h, menu))), }, this.aside.map(menu => (menu.children === undefined ? elMenuItem : elSubmenu).call(this, h, menu))),
@@ -32,7 +32,8 @@ export default {
computed: { computed: {
...mapState('d2admin/menu', [ ...mapState('d2admin/menu', [
'aside', 'aside',
'asideCollapse' 'asideCollapse',
'asideTransition'
]) ])
}, },
watch: { watch: {

View File

@@ -6,7 +6,11 @@
<div class="d2-layout-header-aside-content" flex="dir:top"> <div class="d2-layout-header-aside-content" flex="dir:top">
<!-- 顶栏 --> <!-- 顶栏 -->
<div class="d2-theme-header" :style="{ opacity: this.searchActive ? 0.5 : 1 }" flex-box="0" flex> <div class="d2-theme-header" :style="{ opacity: this.searchActive ? 0.5 : 1 }" flex-box="0" flex>
<router-link to="/index" class="logo-group" :style="{width: asideCollapse ? asideWidthCollapse : asideWidth}" flex-box="0"> <router-link
to="/index"
:class="{'logo-group': true, 'logo-transition': asideTransition}"
:style="{width: asideCollapse ? asideWidthCollapse : asideWidth}"
flex-box="0">
<img v-if="asideCollapse" :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/icon-only.png`"> <img v-if="asideCollapse" :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/icon-only.png`">
<img v-else :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/all.png`"> <img v-else :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/all.png`">
</router-link> </router-link>
@@ -30,7 +34,14 @@
<!-- 下面 主体 --> <!-- 下面 主体 -->
<div class="d2-theme-container" flex-box="1" flex> <div class="d2-theme-container" flex-box="1" flex>
<!-- 主体 侧边栏 --> <!-- 主体 侧边栏 -->
<div flex-box="0" ref="aside" class="d2-theme-container-aside" :style="{ width: asideCollapse ? asideWidthCollapse : asideWidth, opacity: this.searchActive ? 0.5 : 1 }"> <div
flex-box="0"
ref="aside"
:class="{'d2-theme-container-aside': true, 'd2-theme-container-transition': asideTransition}"
:style="{
width: asideCollapse ? asideWidthCollapse : asideWidth,
opacity: this.searchActive ? 0.5 : 1
}">
<d2-menu-side/> <d2-menu-side/>
</div> </div>
<!-- 主体 --> <!-- 主体 -->
@@ -109,7 +120,8 @@ export default {
keepAlive: state => state.page.keepAlive, keepAlive: state => state.page.keepAlive,
grayActive: state => state.gray.active, grayActive: state => state.gray.active,
transitionActive: state => state.transition.active, transitionActive: state => state.transition.active,
asideCollapse: state => state.menu.asideCollapse asideCollapse: state => state.menu.asideCollapse,
asideTransition: state => state.menu.asideTransition
}), }),
...mapGetters('d2admin', { ...mapGetters('d2admin', {
themeActiveSetting: 'theme/activeSetting' themeActiveSetting: 'theme/activeSetting'

View File

@@ -7,9 +7,10 @@ export default {
close: 'esc' close: 'esc'
} }
}, },
// 侧边栏默认折叠状态 // 侧边栏默认配置
menu: { menu: {
asideCollapse: false asideCollapse: false,
asideTransition: true
}, },
// 在读取持久化数据失败时默认页面 // 在读取持久化数据失败时默认页面
page: { page: {

View File

@@ -77,8 +77,8 @@ export default {
await dispatch('d2admin/transition/load', null, { root: true }) await dispatch('d2admin/transition/load', null, { root: true })
// 持久化数据加载上次退出时的多页列表 // 持久化数据加载上次退出时的多页列表
await dispatch('d2admin/page/openedLoad', null, { root: true }) await dispatch('d2admin/page/openedLoad', null, { root: true })
// 持久化数据加载侧边栏折叠状态 // 持久化数据加载侧边栏配置
await dispatch('d2admin/menu/asideCollapseLoad', null, { root: true }) await dispatch('d2admin/menu/asideLoad', null, { root: true })
// 持久化数据加载全局尺寸 // 持久化数据加载全局尺寸
await dispatch('d2admin/size/load', null, { root: true }) await dispatch('d2admin/size/load', null, { root: true })
// 持久化数据加载颜色设置 // 持久化数据加载颜色设置

View File

@@ -9,7 +9,9 @@ export default {
// 侧栏菜单 // 侧栏菜单
aside: [], aside: [],
// 侧边栏收缩 // 侧边栏收缩
asideCollapse: setting.menu.asideCollapse asideCollapse: setting.menu.asideCollapse,
// 侧边栏折叠动画
asideTransition: setting.menu.asideTransition
}, },
actions: { actions: {
/** /**
@@ -44,17 +46,51 @@ export default {
}, { root: true }) }, { root: true })
}, },
/** /**
* 从持久化数据读取侧边栏展开或者收缩 * 设置侧边栏折叠动画
* @param {Object} context * @param {Object} context
* @param {Boolean} transition is transition
*/ */
async asideCollapseLoad ({ state, dispatch }) { async asideTransitionSet ({ state, dispatch }, transition) {
// store 赋值 // store 赋值
state.asideCollapse = await dispatch('d2admin/db/get', { state.asideTransition = transition
// 持久化
await dispatch('d2admin/db/set', {
dbName: 'sys', dbName: 'sys',
path: 'menu.asideCollapse', path: 'menu.asideTransition',
defaultValue: setting.menu.asideCollapse, value: state.asideTransition,
user: true user: true
}, { root: true }) }, { root: true })
},
/**
* 切换侧边栏折叠动画
* @param {Object} context
*/
async asideTransitionToggle ({ state, dispatch }) {
// store 赋值
state.asideTransition = !state.asideTransition
// 持久化
await dispatch('d2admin/db/set', {
dbName: 'sys',
path: 'menu.asideTransition',
value: state.asideTransition,
user: true
}, { root: true })
},
/**
* 持久化数据加载侧边栏设置
* @param {Object} context
*/
async asideLoad ({ state, dispatch }) {
// store 赋值
const menu = await dispatch('d2admin/db/get', {
dbName: 'sys',
path: 'menu',
defaultValue: setting.menu,
user: true
}, { root: true })
state.asideCollapse = menu.asideCollapse
state.asideTransition = menu.asideTransition
} }
}, },
mutations: { mutations: {

View File

@@ -12,6 +12,7 @@
<el-button-group class="d2-mb"> <el-button-group class="d2-mb">
<el-button @click="handleAsideSet">设置侧栏空菜单</el-button> <el-button @click="handleAsideSet">设置侧栏空菜单</el-button>
<el-button @click="asideReset">恢复侧栏菜单</el-button> <el-button @click="asideReset">恢复侧栏菜单</el-button>
<el-button @click="asideTransitionToggle()">{{`${asideTransition ? '关闭' : '开启'}侧栏动画效果`}}</el-button>
</el-button-group> </el-button-group>
<d2-highlight :code="JSON.stringify(aside, null, 2)"/> <d2-highlight :code="JSON.stringify(aside, null, 2)"/>
</el-tab-pane> </el-tab-pane>
@@ -21,7 +22,7 @@
<script> <script>
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { mapState, mapMutations } from 'vuex' import { mapState, mapMutations, mapActions } from 'vuex'
export default { export default {
data () { data () {
return { return {
@@ -51,7 +52,8 @@ export default {
computed: { computed: {
...mapState('d2admin/menu', [ ...mapState('d2admin/menu', [
'header', 'header',
'aside' 'aside',
'asideTransition'
]) ])
}, },
created () { created () {
@@ -92,6 +94,9 @@ export default {
'headerSet', 'headerSet',
'asideSet' 'asideSet'
]), ]),
...mapActions('d2admin/menu', [
'asideTransitionToggle'
]),
/** /**
* 修改顶栏菜单 * 修改顶栏菜单
*/ */