优化菜单展示模式

This commit is contained in:
季圣华
2021-09-16 23:18:08 +08:00
parent 79dc9a469a
commit 01a7e6de9c
3 changed files with 160 additions and 216 deletions

View File

@@ -58,49 +58,8 @@
<a-divider /> <a-divider />
<div :style="{ marginBottom: '24px' }"> <div :style="{ marginBottom: '24px' }">
<!-- <h3 class="setting-drawer-index-title">导航模式</h3>-->
<!-- <div class="setting-drawer-index-blockChecbox">-->
<!-- <a-tooltip>-->
<!-- <template slot="title">-->
<!-- 侧边栏导航-->
<!-- </template>-->
<!-- <div class="setting-drawer-index-item" @click="handleLayout('sidemenu')">-->
<!-- <img src="https://gw.alipayobjects.com/zos/rmsportal/JopDzEhOqwOjeNTXkoje.svg" alt="sidemenu">-->
<!-- <div class="setting-drawer-index-selectIcon" v-if="layoutMode === 'sidemenu'">-->
<!-- <a-icon type="check"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- </a-tooltip>-->
<!-- <a-tooltip>-->
<!-- <template slot="title">-->
<!-- 顶部栏导航-->
<!-- </template>-->
<!-- <div class="setting-drawer-index-item" @click="handleLayout('topmenu')">-->
<!-- <img src="https://gw.alipayobjects.com/zos/rmsportal/KDNDBbriJhLwuqMoxcAr.svg" alt="topmenu">-->
<!-- <div class="setting-drawer-index-selectIcon" v-if="layoutMode !== 'sidemenu'">-->
<!-- <a-icon type="check"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- </a-tooltip>-->
<!-- </div>-->
<div :style="{ marginTop: '24px' }"> <div :style="{ marginTop: '24px' }">
<a-list :split="false"> <a-list :split="false">
<!-- <a-list-item>-->
<!-- <a-tooltip slot="actions">-->
<!-- <template slot="title">-->
<!-- 该设定仅 [顶部栏导航] 时有效-->
<!-- </template>-->
<!-- <a-select size="small" style="width: 80px;" :defaultValue="contentWidth" @change="handleContentWidthChange">-->
<!-- <a-select-option value="Fixed">固定</a-select-option>-->
<!-- <a-select-option value="Fluid" v-if="layoutMode !== 'sidemenu'">流式</a-select-option>-->
<!-- </a-select>-->
<!-- </a-tooltip>-->
<!-- <a-list-item-meta>-->
<!-- <div slot="title">内容区域宽度</div>-->
<!-- </a-list-item-meta>-->
<!-- </a-list-item>-->
<a-list-item> <a-list-item>
<a-switch slot="actions" size="small" :defaultChecked="fixedHeader" @change="handleFixedHeader" /> <a-switch slot="actions" size="small" :defaultChecked="fixedHeader" @change="handleFixedHeader" />
<a-list-item-meta> <a-list-item-meta>
@@ -114,7 +73,7 @@
</a-list-item-meta> </a-list-item-meta>
</a-list-item> </a-list-item>
<a-list-item > <a-list-item >
<a-switch slot="actions" size="small" :disabled="(layoutMode === 'topmenu')" :checked="dataFixSiderbar" @change="handleFixSiderbar" /> <a-switch slot="actions" size="small" :disabled="(layoutMode === 'topmenu')" :checked="fixSiderbar" @change="handleFixSiderbar" />
<a-list-item-meta> <a-list-item-meta>
<div slot="title" :style="{ textDecoration: layoutMode === 'topmenu' ? 'line-through' : 'unset' }">固定侧边菜单</div> <div slot="title" :style="{ textDecoration: layoutMode === 'topmenu' ? 'line-through' : 'unset' }">固定侧边菜单</div>
</a-list-item-meta> </a-list-item-meta>
@@ -143,19 +102,8 @@
</a-list> </a-list>
</div> </div>
</div> </div>
<!-- <a-divider />-->
<!-- <div :style="{ marginBottom: '24px' }">-->
<!-- <a-alert type="warning">-->
<!-- <span slot="message">-->
<!-- 生产环境如需修改默认配置,请手动修改配置文件-->
<!-- src/defaultSettings.js-->
<!-- </span>-->
<!-- </a-alert>-->
<!-- </div>-->
</div> </div>
<div class="setting-drawer-index-handle" @click="toggle" v-if="visible"> <div class="setting-drawer-index-handle" @click="toggle" v-if="visible">
<!-- <a-icon type="setting" v-if="!visible"/>-->
<!-- <a-icon type="close" v-else/>-->
<a-icon type="close" /> <a-icon type="close" />
</div> </div>
</a-drawer> </a-drawer>
@@ -179,8 +127,7 @@
data() { data() {
return { return {
visible: true, visible: true,
colorList, colorList
dataFixSiderbar: false
} }
}, },
watch: { watch: {
@@ -225,7 +172,7 @@
handleLayout (mode) { handleLayout (mode) {
this.$store.dispatch('ToggleLayoutMode', mode) this.$store.dispatch('ToggleLayoutMode', mode)
// 因为顶部菜单不能固定左侧菜单栏,所以强制关闭 // 因为顶部菜单不能固定左侧菜单栏,所以强制关闭
this.handleFixSiderbar(false) this.handleFixSiderbar(this.fixSiderbar)
// 触发窗口resize事件 // 触发窗口resize事件
triggerWindowResizeEvent() triggerWindowResizeEvent()
}, },
@@ -245,10 +192,7 @@
this.$store.dispatch('ToggleFixedHeaderHidden', autoHidden) this.$store.dispatch('ToggleFixedHeaderHidden', autoHidden)
}, },
handleFixSiderbar (fixed) { handleFixSiderbar (fixed) {
if (this.layoutMode === 'topmenu') { this.fixSiderbar = fixed
fixed = false
}
this.dataFixSiderbar = fixed
this.$store.dispatch('ToggleFixSiderbar', fixed) this.$store.dispatch('ToggleFixSiderbar', fixed)
} }
}, },

View File

@@ -1,32 +1,32 @@
/** /**
* 项目默认配置项 * 项目默认配置项
* primaryColor - 默认主题色 * primaryColor - 默认主题色
* navTheme - sidebar theme ['dark', 'light'] 两种主题 * navTheme - sidebar theme ['dark', 'light'] 两种主题
* colorWeak - 色盲模式 * colorWeak - 色盲模式
* layout - 整体布局方式 ['sidemenu', 'topmenu'] 两种布局 * layout - 整体布局方式 ['sidemenu', 'topmenu'] 两种布局
* fixedHeader - 固定 Header : boolean * fixedHeader - 固定 Header : boolean
* fixSiderbar - 固定左侧菜单栏 boolean * fixSiderbar - 固定左侧菜单栏 boolean
* autoHideHeader - 向下滚动时,隐藏 Header : boolean * autoHideHeader - 向下滚动时,隐藏 Header : boolean
* contentWidth - 内容区布局: 流式 | 固定 * contentWidth - 内容区布局: 流式 | 固定
* *
* storageOptions: {} - Vue-ls 插件配置项 (localStorage/sessionStorage) * storageOptions: {} - Vue-ls 插件配置项 (localStorage/sessionStorage)
* *
*/ */
export default { export default {
primaryColor: '#1890FF', // primary color of ant design primaryColor: '#1890FF', // primary color of ant design
navTheme: 'light', // theme for nav menu navTheme: 'light', // theme for nav menu
layout: 'sidemenu', // nav menu position: sidemenu or topmenu layout: 'sidemenu', // nav menu position: sidemenu or topmenu
contentWidth: 'Fixed', // layout of content: Fluid or Fixed, only works when layout is topmenu contentWidth: 'Fixed', // layout of content: Fluid or Fixed, only works when layout is topmenu
fixedHeader: false, // sticky header fixedHeader: false, // sticky header
fixSiderbar: false, // sticky siderbar fixSiderbar: true, // sticky siderbar
autoHideHeader: false, // auto hide header autoHideHeader: false, // auto hide header
colorWeak: false, colorWeak: false,
multipage: true, //默认多页签模式 multipage: true, //默认多页签模式
// vue-ls options // vue-ls options
storageOptions: { storageOptions: {
namespace: 'pro__', // key prefix namespace: 'pro__', // key prefix
name: 'ls', // name variable Vue.[ls] or this.[$ls], name: 'ls', // name variable Vue.[ls] or this.[$ls],
storage: 'local', // storage name session, local, memory storage: 'local', // storage name session, local, memory
} }
} }

View File

@@ -1,126 +1,126 @@
import Vue from 'vue' import Vue from 'vue'
import { import {
SIDEBAR_TYPE, SIDEBAR_TYPE,
DEFAULT_THEME, DEFAULT_THEME,
DEFAULT_LAYOUT_MODE, DEFAULT_LAYOUT_MODE,
DEFAULT_COLOR, DEFAULT_COLOR,
DEFAULT_COLOR_WEAK, DEFAULT_COLOR_WEAK,
DEFAULT_FIXED_HEADER, DEFAULT_FIXED_HEADER,
DEFAULT_FIXED_SIDEMENU, DEFAULT_FIXED_SIDEMENU,
DEFAULT_FIXED_HEADER_HIDDEN, DEFAULT_FIXED_HEADER_HIDDEN,
DEFAULT_CONTENT_WIDTH_TYPE, DEFAULT_CONTENT_WIDTH_TYPE,
DEFAULT_MULTI_PAGE DEFAULT_MULTI_PAGE
} from "@/store/mutation-types" } from "@/store/mutation-types"
const app = { const app = {
state: { state: {
sidebar: { sidebar: {
opened: true, opened: true,
withoutAnimation: false withoutAnimation: false
}, },
device: 'desktop', device: 'desktop',
theme: '', theme: '',
layout: '', layout: '',
contentWidth: '', contentWidth: '',
fixedHeader: false, fixedHeader: false,
fixSiderbar: false, fixSiderbar: true,
autoHideHeader: false, autoHideHeader: false,
color: null, color: null,
weak: false, weak: false,
multipage: true //默认多页签模式 multipage: true //默认多页签模式
}, },
mutations: { mutations: {
SET_SIDEBAR_TYPE: (state, type) => { SET_SIDEBAR_TYPE: (state, type) => {
state.sidebar.opened = type state.sidebar.opened = type
Vue.ls.set(SIDEBAR_TYPE, type) Vue.ls.set(SIDEBAR_TYPE, type)
}, },
CLOSE_SIDEBAR: (state, withoutAnimation) => { CLOSE_SIDEBAR: (state, withoutAnimation) => {
Vue.ls.set(SIDEBAR_TYPE, true) Vue.ls.set(SIDEBAR_TYPE, true)
state.sidebar.opened = false state.sidebar.opened = false
state.sidebar.withoutAnimation = withoutAnimation state.sidebar.withoutAnimation = withoutAnimation
}, },
TOGGLE_DEVICE: (state, device) => { TOGGLE_DEVICE: (state, device) => {
state.device = device state.device = device
}, },
TOGGLE_THEME: (state, theme) => { TOGGLE_THEME: (state, theme) => {
// setStore('_DEFAULT_THEME', theme) // setStore('_DEFAULT_THEME', theme)
Vue.ls.set(DEFAULT_THEME, theme) Vue.ls.set(DEFAULT_THEME, theme)
state.theme = theme state.theme = theme
}, },
TOGGLE_LAYOUT_MODE: (state, layout) => { TOGGLE_LAYOUT_MODE: (state, layout) => {
Vue.ls.set(DEFAULT_LAYOUT_MODE, layout) Vue.ls.set(DEFAULT_LAYOUT_MODE, layout)
state.layout = layout state.layout = layout
}, },
TOGGLE_FIXED_HEADER: (state, fixed) => { TOGGLE_FIXED_HEADER: (state, fixed) => {
Vue.ls.set(DEFAULT_FIXED_HEADER, fixed) Vue.ls.set(DEFAULT_FIXED_HEADER, fixed)
state.fixedHeader = fixed state.fixedHeader = fixed
}, },
TOGGLE_FIXED_SIDERBAR: (state, fixed) => { TOGGLE_FIXED_SIDERBAR: (state, fixed) => {
Vue.ls.set(DEFAULT_FIXED_SIDEMENU, fixed) Vue.ls.set(DEFAULT_FIXED_SIDEMENU, fixed)
state.fixSiderbar = fixed state.fixSiderbar = fixed
}, },
TOGGLE_FIXED_HEADER_HIDDEN: (state, show) => { TOGGLE_FIXED_HEADER_HIDDEN: (state, show) => {
Vue.ls.set(DEFAULT_FIXED_HEADER_HIDDEN, show) Vue.ls.set(DEFAULT_FIXED_HEADER_HIDDEN, show)
state.autoHideHeader = show state.autoHideHeader = show
}, },
TOGGLE_CONTENT_WIDTH: (state, type) => { TOGGLE_CONTENT_WIDTH: (state, type) => {
Vue.ls.set(DEFAULT_CONTENT_WIDTH_TYPE, type) Vue.ls.set(DEFAULT_CONTENT_WIDTH_TYPE, type)
state.contentWidth = type state.contentWidth = type
}, },
TOGGLE_COLOR: (state, color) => { TOGGLE_COLOR: (state, color) => {
Vue.ls.set(DEFAULT_COLOR, color) Vue.ls.set(DEFAULT_COLOR, color)
state.color = color state.color = color
}, },
TOGGLE_WEAK: (state, flag) => { TOGGLE_WEAK: (state, flag) => {
Vue.ls.set(DEFAULT_COLOR_WEAK, flag) Vue.ls.set(DEFAULT_COLOR_WEAK, flag)
state.weak = flag state.weak = flag
}, },
SET_MULTI_PAGE (state, multipageFlag) { SET_MULTI_PAGE (state, multipageFlag) {
Vue.ls.set(DEFAULT_MULTI_PAGE, multipageFlag) Vue.ls.set(DEFAULT_MULTI_PAGE, multipageFlag)
state.multipage = multipageFlag state.multipage = multipageFlag
} }
}, },
actions: { actions: {
setSidebar: ({ commit }, type) => { setSidebar: ({ commit }, type) => {
commit('SET_SIDEBAR_TYPE', type) commit('SET_SIDEBAR_TYPE', type)
}, },
CloseSidebar({ commit }, { withoutAnimation }) { CloseSidebar({ commit }, { withoutAnimation }) {
commit('CLOSE_SIDEBAR', withoutAnimation) commit('CLOSE_SIDEBAR', withoutAnimation)
}, },
ToggleDevice({ commit }, device) { ToggleDevice({ commit }, device) {
commit('TOGGLE_DEVICE', device) commit('TOGGLE_DEVICE', device)
}, },
ToggleTheme({ commit }, theme) { ToggleTheme({ commit }, theme) {
commit('TOGGLE_THEME', theme) commit('TOGGLE_THEME', theme)
}, },
ToggleLayoutMode({ commit }, mode) { ToggleLayoutMode({ commit }, mode) {
commit('TOGGLE_LAYOUT_MODE', mode) commit('TOGGLE_LAYOUT_MODE', mode)
}, },
ToggleFixedHeader({ commit }, fixedHeader) { ToggleFixedHeader({ commit }, fixedHeader) {
if (!fixedHeader) { if (!fixedHeader) {
commit('TOGGLE_FIXED_HEADER_HIDDEN', false) commit('TOGGLE_FIXED_HEADER_HIDDEN', false)
} }
commit('TOGGLE_FIXED_HEADER', fixedHeader) commit('TOGGLE_FIXED_HEADER', fixedHeader)
}, },
ToggleFixSiderbar({ commit }, fixSiderbar) { ToggleFixSiderbar({ commit }, fixSiderbar) {
commit( 'TOGGLE_FIXED_SIDERBAR', fixSiderbar) commit( 'TOGGLE_FIXED_SIDERBAR', fixSiderbar)
}, },
ToggleFixedHeaderHidden({ commit }, show) { ToggleFixedHeaderHidden({ commit }, show) {
commit('TOGGLE_FIXED_HEADER_HIDDEN', show) commit('TOGGLE_FIXED_HEADER_HIDDEN', show)
}, },
ToggleContentWidth({ commit }, type) { ToggleContentWidth({ commit }, type) {
commit('TOGGLE_CONTENT_WIDTH', type) commit('TOGGLE_CONTENT_WIDTH', type)
}, },
ToggleColor({ commit }, color) { ToggleColor({ commit }, color) {
commit('TOGGLE_COLOR', color) commit('TOGGLE_COLOR', color)
}, },
ToggleWeak({ commit }, weakFlag) { ToggleWeak({ commit }, weakFlag) {
commit('TOGGLE_WEAK', weakFlag) commit('TOGGLE_WEAK', weakFlag)
}, },
ToggleMultipage({ commit }, multipageFlag) { ToggleMultipage({ commit }, multipageFlag) {
commit('SET_MULTI_PAGE', multipageFlag) commit('SET_MULTI_PAGE', multipageFlag)
} }
} }
} }
export default app export default app