Explorar o código

improve: 菜单开关字段vuex

From-wh %!s(int64=2) %!d(string=hai) anos
pai
achega
3ca6d43b61

+ 5 - 6
template/admin/src/components/main/components/header-bar/header-bar.vue

@@ -1,7 +1,7 @@
 <template>
 <template>
   <div class="header-bar">
   <div class="header-bar">
     <div class="header-l">
     <div class="header-l">
-      <sider-trigger :collapsed="collapsed" @on-change="handleCollpasedChange"></sider-trigger>
+      <sider-trigger @on-change="handleCollpasedChange"></sider-trigger>
       <!-- <span class="i-layout-header-trigger" @click="handleReload">
       <!-- <span class="i-layout-header-trigger" @click="handleReload">
       <Icon type="ios-refresh" color='#fff' />
       <Icon type="ios-refresh" color='#fff' />
     </span> -->
     </span> -->
@@ -9,7 +9,6 @@
         show-icon
         show-icon
         :list="breadCrumbList"
         :list="breadCrumbList"
         :listLast="crumbPast"
         :listLast="crumbPast"
-        :collapsed="collapsed"
       ></custom-bread-crumb>
       ></custom-bread-crumb>
     </div>
     </div>
 
 
@@ -19,7 +18,6 @@
   </div>
   </div>
 </template>
 </template>
 <style scoped lang="less">
 <style scoped lang="less">
-
 .i-layout-header-trigger {
 .i-layout-header-trigger {
   position: absolute;
   position: absolute;
   margin: 0 10px;
   margin: 0 10px;
@@ -34,7 +32,7 @@
 import siderTrigger from './sider-trigger';
 import siderTrigger from './sider-trigger';
 import customBreadCrumb from './custom-bread-crumb';
 import customBreadCrumb from './custom-bread-crumb';
 import { R } from '@/libs/util';
 import { R } from '@/libs/util';
-
+import { mapState } from 'vuex';
 import './header-bar.less';
 import './header-bar.less';
 export default {
 export default {
   name: 'HeaderBar',
   name: 'HeaderBar',
@@ -43,9 +41,10 @@ export default {
     customBreadCrumb,
     customBreadCrumb,
   },
   },
   props: {
   props: {
-    collapsed: Boolean,
+    // collapsed: Boolean,
   },
   },
   computed: {
   computed: {
+    ...mapState('layout', ['menuCollapse']),
     breadCrumbList() {
     breadCrumbList() {
       let openMenus = this.$store.state.menus.openMenus;
       let openMenus = this.$store.state.menus.openMenus;
       let menuList = this.$store.state.menus.menusName;
       let menuList = this.$store.state.menus.menusName;
@@ -60,7 +59,7 @@ export default {
           });
           });
         });
         });
       }
       }
-      console.log('selectMenu',openMenus)
+      console.log('selectMenu', openMenus);
       return selectMenu;
       return selectMenu;
       // return this.$store.state.app.breadCrumbList
       // return this.$store.state.app.breadCrumbList
     },
     },

+ 12 - 4
template/admin/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue

@@ -1,15 +1,16 @@
 <template>
 <template>
   <div class="sider-menu" @click="handleChange">
   <div class="sider-menu" @click="handleChange">
-    <a type="text" :class="['sider-trigger-a', collapsed ? 'collapsed' : '']"
-      ><i class="iconfont" color="#fff" :class="collapsed ? 'iconcaidanzhankai' : 'iconcaidanshouqi'"></i
+    <a type="text" :class="['sider-trigger-a', menuCollapse ? 'menuCollapse' : '']"
+      ><i class="iconfont" color="#fff" :class="menuCollapse ? 'iconcaidanzhankai' : 'iconcaidanshouqi'"></i
     ></a>
     ></a>
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
+import { mapState } from 'vuex';
 export default {
 export default {
   name: 'siderTrigger',
   name: 'siderTrigger',
   props: {
   props: {
-    collapsed: Boolean,
+    // collapsed: Boolean,
     icon: {
     icon: {
       type: String,
       type: String,
       default: 'navicon-round',
       default: 'navicon-round',
@@ -19,9 +20,16 @@ export default {
       default: 18,
       default: 18,
     },
     },
   },
   },
+  computed: {
+    ...mapState('layout', ['menuCollapse']),
+  },
+  data() {
+    return {};
+  },
   methods: {
   methods: {
     handleChange() {
     handleChange() {
-      this.$emit('on-change', !this.collapsed);
+      this.$emit('on-change', !this.menuCollapse);
+      this.$store.commit('layout/changeCol', !this.menuCollapse);
     },
     },
   },
   },
 };
 };

+ 8 - 7
template/admin/src/components/main/components/side-menu/side-menu.vue

@@ -1,7 +1,7 @@
 <template>
 <template>
   <div class="side-menu-wrapper">
   <div class="side-menu-wrapper">
     <!-- <sider-trigger :collapsed="collapsed" @on-change="handleCollpasedChange"></sider-trigger> -->
     <!-- <sider-trigger :collapsed="collapsed" @on-change="handleCollpasedChange"></sider-trigger> -->
-    <div class="side-menu-box" v-if="!collapsed">
+    <div class="side-menu-box" v-if="!menuCollapse">
       <div class="parent-menu">
       <div class="parent-menu">
         <slot></slot>
         <slot></slot>
         <Menu
         <Menu
@@ -63,7 +63,7 @@
       </div>
       </div>
     </div>
     </div>
 
 
-    <div class="menu-collapsed" v-if="collapsed">
+    <div class="menu-collapsed" v-if="menuCollapse">
       <slot></slot>
       <slot></slot>
       <template v-for="item in menusName">
       <template v-for="item in menusName">
         <collapsed-menu
         <collapsed-menu
@@ -109,9 +109,9 @@ export default {
     siderTrigger,
     siderTrigger,
   },
   },
   props: {
   props: {
-    collapsed: {
-      type: Boolean,
-    },
+    // collapsed: {
+    //   type: Boolean,
+    // },
     theme: {
     theme: {
       type: String,
       type: String,
       default: 'light',
       default: 'light',
@@ -145,7 +145,7 @@ export default {
     ...mapState('menus', ['menusName']),
     ...mapState('menus', ['menusName']),
     ...mapState('menu', ['activePath', 'openNames', 'header', 'headerName', 'sider', 'oneMenuName']),
     ...mapState('menu', ['activePath', 'openNames', 'header', 'headerName', 'sider', 'oneMenuName']),
     ...mapGetters('menu', ['filterSider']),
     ...mapGetters('menu', ['filterSider']),
-
+    ...mapState('layout', ['menuCollapse']),
     textColor() {
     textColor() {
       return this.theme === 'dark' ? '#fff' : '#495060';
       return this.theme === 'dark' ? '#fff' : '#495060';
     },
     },
@@ -163,7 +163,7 @@ export default {
         this.$refs.childMenu.updateActiveName();
         this.$refs.childMenu.updateActiveName();
       });
       });
     },
     },
-    collapsed(val) {
+    menuCollapse(val) {
       if (!val) {
       if (!val) {
         this.$nextTick(() => {
         this.$nextTick(() => {
           this.$refs.menu.updateOpened();
           this.$refs.menu.updateOpened();
@@ -400,6 +400,7 @@ export default {
       color: #606266;
       color: #606266;
       padding: 15px 23px;
       padding: 15px 23px;
       text-align: left;
       text-align: left;
+      white-space: nowrap;
       border-bottom: 1px solid #f2f2f2;
       border-bottom: 1px solid #f2f2f2;
     }
     }
   }
   }

+ 13 - 10
template/admin/src/components/main/main.vue

@@ -5,7 +5,7 @@
       collapsible
       collapsible
       :width="sider.length ? 240 : 80"
       :width="sider.length ? 240 : 80"
       :collapsed-width="isMobile ? 0 : 80"
       :collapsed-width="isMobile ? 0 : 80"
-      v-model="collapsed"
+      v-model="menuCollapse"
       :style="{ overflow: 'hidden' }"
       :style="{ overflow: 'hidden' }"
       v-if="!headMenuNoShow"
       v-if="!headMenuNoShow"
     >
     >
@@ -14,7 +14,6 @@
         ref="sideMenu"
         ref="sideMenu"
         @on-coll-change="handleCollapsedChange"
         @on-coll-change="handleCollapsedChange"
         :active-name="$route.path"
         :active-name="$route.path"
-        :collapsed="collapsed"
         @on-select="turnToPage"
         @on-select="turnToPage"
       >
       >
         <!-- 需要放在菜单上面的内容,如Logo,写在side-menu标签内部,如下 -->
         <!-- 需要放在菜单上面的内容,如Logo,写在side-menu标签内部,如下 -->
@@ -25,7 +24,7 @@
     </Sider>
     </Sider>
     <Layout>
     <Layout>
       <Header class="header-con" v-if="!headMenuNoShow">
       <Header class="header-con" v-if="!headMenuNoShow">
-        <header-bar :collapsed="collapsed" @on-coll-change="handleCollapsedChange">
+        <header-bar  @on-coll-change="handleCollapsedChange">
           <user :message-unread-count="unreadCount" :user-avatar="userAvatar" />
           <user :message-unread-count="unreadCount" :user-avatar="userAvatar" />
           <language v-if="$config.useI18n" @on-lang-change="setLocal" style="margin-right: 10px" :lang="local" />
           <language v-if="$config.useI18n" @on-lang-change="setLocal" style="margin-right: 10px" :lang="local" />
           <header-notice></header-notice>
           <header-notice></header-notice>
@@ -111,7 +110,7 @@ export default {
   },
   },
   data() {
   data() {
     return {
     return {
-      collapsed: JSON.parse(getCookies('collapsed') || 'false'),
+      // collapsed: JSON.parse(getCookies('collapsed') || 'false'),
       minLogo,
       minLogo,
       maxLogo,
       maxLogo,
       isFullscreen: false,
       isFullscreen: false,
@@ -130,6 +129,8 @@ export default {
     ...mapGetters(['errorCount']),
     ...mapGetters(['errorCount']),
     ...mapState('menu', ['sider']),
     ...mapState('menu', ['sider']),
     ...mapState('media', ['isMobile']),
     ...mapState('media', ['isMobile']),
+    ...mapState('layout', ['menuCollapse']),
+
     tagNavList() {
     tagNavList() {
       return this.$store.state.app.tagNavList;
       return this.$store.state.app.tagNavList;
     },
     },
@@ -179,8 +180,8 @@ export default {
       });
       });
     },
     },
     handleCollapsedChange(state) {
     handleCollapsedChange(state) {
-      this.collapsed = state;
-      setCookies('collapsed', state);
+      // this.collapsed = state;
+      // setCookies('collapsed', state);
     },
     },
     handleCloseTag(res, type, route) {
     handleCloseTag(res, type, route) {
       if (type !== 'others') {
       if (type !== 'others') {
@@ -244,11 +245,13 @@ export default {
       return (() => {
       return (() => {
         this.screenWidth = document.body.clientWidth;
         this.screenWidth = document.body.clientWidth;
         if (this.screenWidth <= 1060) {
         if (this.screenWidth <= 1060) {
-          this.collapsed = true;
-          setCookies('collapsed', true);
+          // this.collapsed = true;
+          // setCookies('collapsed', true);
+          this.$store.commit('layout/changeCol', true);
         } else {
         } else {
-          this.collapsed = false;
-          setCookies('collapsed', false);
+          // this.collapsed = false;
+          // setCookies('collapsed', false);
+          this.$store.commit('layout/changeCol', false);
         }
         }
       })();
       })();
     };
     };

+ 6 - 3
template/admin/src/pages/setting/agreement/index.vue

@@ -23,11 +23,12 @@
         >保存</Button
         >保存</Button
       >
       >
     </Row> -->
     </Row> -->
+
     <Card
     <Card
       :bordered="false"
       :bordered="false"
       dis-hover
       dis-hover
       class="fixed-card"
       class="fixed-card"
-      :style="{ left: `${!menuCollapse ? '200px' : isMobile ? '0' : '80px'}` }"
+      :style="{ left: `${!menuCollapse ? '240px' : isMobile ? '0' : '80px'}` }"
     >
     >
       <div class="acea-row row-center">
       <div class="acea-row row-center">
         <Button class="bnt" type="primary" @click="save" :loading="loadingExist">保存</Button>
         <Button class="bnt" type="primary" @click="save" :loading="loadingExist">保存</Button>
@@ -71,9 +72,11 @@ export default {
     };
     };
   },
   },
   computed: {
   computed: {
-    ...mapState('admin/layout', ['isMobile', 'menuCollapse']),
+    ...mapState('layout', ['menuCollapse']),
+    ...mapState('admin/layout', ['isMobile']),
   },
   },
   created() {
   created() {
+    console.log(menuCollapse)
     this.changeTab(this.currentTab);
     this.changeTab(this.currentTab);
   },
   },
   methods: {
   methods: {
@@ -148,7 +151,7 @@ export default {
   right: 0;
   right: 0;
   bottom: 0;
   bottom: 0;
   left: 200px;
   left: 200px;
-  z-index: 99;
+  z-index: 8;
   box-shadow: 0 -1px 2px rgb(240, 240, 240);
   box-shadow: 0 -1px 2px rgb(240, 240, 240);
 
 
   /deep/ .ivu-card-body {
   /deep/ .ivu-card-body {

+ 3 - 0
template/admin/src/store/index.js

@@ -28,6 +28,7 @@ import kefu from './module/kefu';
 import integralOrder from './module/integralOrder';
 import integralOrder from './module/integralOrder';
 import mobildConfig from './module/mobildConfig';
 import mobildConfig from './module/mobildConfig';
 import upgrade from './module/upgrade';
 import upgrade from './module/upgrade';
+import layout from './module/layout';
 
 
 Vue.use(Vuex);
 Vue.use(Vuex);
 // 持久化储存
 // 持久化储存
@@ -61,6 +62,7 @@ export default new Vuex.Store({
         integralOrder: state.integralOrder,
         integralOrder: state.integralOrder,
         mobildConfig: state.mobildConfig,
         mobildConfig: state.mobildConfig,
         upgrade: state.upgrade,
         upgrade: state.upgrade,
+        layout: state.layout,
       }),
       }),
       storage: window.localStorage,
       storage: window.localStorage,
     }).plugin,
     }).plugin,
@@ -82,5 +84,6 @@ export default new Vuex.Store({
     mobildConfig,
     mobildConfig,
     integralOrder,
     integralOrder,
     upgrade,
     upgrade,
+    layout,
   },
   },
 });
 });

+ 17 - 0
template/admin/src/store/module/layout.js

@@ -0,0 +1,17 @@
+export default {
+  namespaced: true,
+  state: {
+    menuCollapse: false,
+  },
+  getters: {},
+  mutations: {
+    /**
+     * @description 设置侧边栏展开关闭
+     * @param {Object} state vuex state
+     * @param {Array} status status
+     */
+    changeCol(state, status) {
+      state.menuCollapse = status;
+    },
+  },
+};