From 3835cf1ca8d5ac8475052d3876ebeb4a2c4160f1 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 22 Jan 2024 14:22:02 +0800
Subject: [PATCH] 根据角色,动态切换首页,及首页变更的一系列相关调整

---
 src/page/index/sidebar/sidebarItem.vue |  238 ++++++++++++++++++++++++++++-------------------------------
 1 files changed, 113 insertions(+), 125 deletions(-)

diff --git a/src/page/index/sidebar/sidebarItem.vue b/src/page/index/sidebar/sidebarItem.vue
index 2693e31..3564c07 100644
--- a/src/page/index/sidebar/sidebarItem.vue
+++ b/src/page/index/sidebar/sidebarItem.vue
@@ -1,146 +1,134 @@
 <template>
-  <div class="menu-wrapper">
-    <template v-for="item in menu">
-      <el-menu-item v-if="validatenull(item[childrenKey]) && vaildRoles(item)"
-                    :index="item[pathKey]"
-                    @click="open(item)"
-                    :key="item[labelKey]"
-                    :class="{'is-active':vaildActive(item)}">
-        <i :class="item[iconKey]"></i>
-        <span slot="title"
-              :alt="item[pathKey]">{{generateTitle(item)}}</span>
-      </el-menu-item>
-      <el-submenu v-else-if="!validatenull(item[childrenKey])&&vaildRoles(item)"
-                  :index="item[pathKey]"
-                  :key="item[labelKey]">
-        <template slot="title">
-          <i :class="item[iconKey]"></i>
-          <span slot="title"
-                :class="{'el-menu--display':collapse && first}">{{generateTitle(item)}}</span>
-        </template>
-        <template v-for="(child,cindex) in item[childrenKey]">
-          <el-menu-item :index="child[pathKey],cindex"
-                        @click="open(child)"
-                        :class="{'is-active':vaildActive(child)}"
-                        v-if="validatenull(child[childrenKey])"
+    <div class="menu-wrapper">
+        <template v-for="item in menu">
+            <el-menu-item v-if="validatenull(item[childrenKey]) && vaildRoles(item)" :index="item[pathKey]"
+                @click="open(item)" :key="item[labelKey]" :class="{ 'is-active': vaildActive(item) }">
+                <i :class="item[iconKey]"></i>
+                <span slot="title" :alt="item[pathKey]">{{ generateTitle(item) }}</span>
+            </el-menu-item>
+            <el-submenu v-else-if="!validatenull(item[childrenKey]) && vaildRoles(item)" :index="item[pathKey]"
+                :key="item[labelKey]">
+                <template slot="title">
+                    <i :class="item[iconKey]"></i>
+                    <span slot="title" :class="{ 'el-menu--display': collapse && first }">{{ generateTitle(item) }}</span>
+                </template>
+                <template v-for="(child, cindex) in item[childrenKey]">
+                    <el-menu-item :index="child[pathKey], cindex" @click="open(child)"
+                        :class="{ 'is-active': vaildActive(child) }" v-if="validatenull(child[childrenKey])"
                         :key="child[labelKey]">
-            <i :class="child[iconKey]"></i>
-            <span slot="title">{{generateTitle(child)}}</span>
-          </el-menu-item>
-          <sidebar-item v-else
-                        :menu="[child]"
-                        :key="cindex"
-                        :props="props"
-                        :screen="screen"
+                        <i :class="child[iconKey]"></i>
+                        <span slot="title">{{ generateTitle(child) }}</span>
+                    </el-menu-item>
+                    <sidebar-item v-else :menu="[child]" :key="cindex" :props="props" :screen="screen"
                         :collapse="collapse"></sidebar-item>
+                </template>
+            </el-submenu>
         </template>
-      </el-submenu>
-    </template>
-  </div>
+    </div>
 </template>
 <script>
-  import {mapGetters} from "vuex";
-  import {isURL, validatenull} from "@/util/validate";
-  import config from "./config.js";
+import { mapGetters } from "vuex"
+import { isURL, validatenull } from "@/util/validate"
+import config from "./config.js"
 
-  export default {
+export default {
     name: "sidebarItem",
-    data() {
-      return {
-        config: config
-      };
+    data () {
+        return {
+            config: config
+        }
     },
     props: {
-      menu: {
-        type: Array
-      },
-      screen: {
-        type: Number
-      },
-      first: {
-        type: Boolean,
-        default: false
-      },
-      props: {
-        type: Object,
-        default: () => {
-          return {};
+        menu: {
+            type: Array
+        },
+        screen: {
+            type: Number
+        },
+        first: {
+            type: Boolean,
+            default: false
+        },
+        props: {
+            type: Object,
+            default: () => {
+                return {}
+            }
+        },
+        collapse: {
+            type: Boolean
         }
-      },
-      collapse: {
-        type: Boolean
-      }
     },
-    created() {
+    created () {
     },
-    mounted() {
+    mounted () {
     },
     computed: {
-      ...mapGetters(["roles"]),
-      labelKey() {
-        return this.props.label || this.config.propsDefault.label;
-      },
-      pathKey() {
-        return this.props.path || this.config.propsDefault.path;
-      },
-      iconKey() {
-        return this.props.icon || this.config.propsDefault.icon;
-      },
-      childrenKey() {
-        return this.props.children || this.config.propsDefault.children;
-      },
-      isOpenKey() {
-        return this.props.isOpen || this.config.propsDefault.isOpen;
-      },
-      nowTagValue() {
-        return this.$router.$avueRouter.getValue(this.$route);
-      }
+        ...mapGetters(["roles"]),
+        labelKey () {
+            return this.props.label || this.config.propsDefault.label
+        },
+        pathKey () {
+            return this.props.path || this.config.propsDefault.path
+        },
+        iconKey () {
+            return this.props.icon || this.config.propsDefault.icon
+        },
+        childrenKey () {
+            return this.props.children || this.config.propsDefault.children
+        },
+        isOpenKey () {
+            return this.props.isOpen || this.config.propsDefault.isOpen
+        },
+        nowTagValue () {
+            return this.$router.$avueRouter.getValue(this.$route)
+        }
     },
     methods: {
-      generateTitle(item) {
-        return this.$router.$avueRouter.generateTitle(
-          item[this.labelKey],
-          (item.meta || {}).i18n
-        );
-      },
-      vaildActive(item) {
-        if (this.validIsOpen(item)) {
-          return false;
+        generateTitle (item) {
+            return this.$router.$avueRouter.generateTitle(
+                item[this.labelKey],
+                (item.meta || {}).i18n
+            )
+        },
+        vaildActive (item) {
+            if (this.validIsOpen(item)) {
+                return false
+            }
+            const groupFlag = (item["group"] || []).some(ele =>
+                this.$route.path.includes(ele)
+            )
+            return this.nowTagValue === item[this.pathKey] || groupFlag
+        },
+        vaildRoles (item) {
+            item.meta = item.meta || {}
+            return item.meta.roles ? item.meta.roles.includes(this.roles) : true
+        },
+        validatenull (val) {
+            return validatenull(val)
+        },
+        validIsOpen (item) {
+            if (item[this.isOpenKey] === 2 && isURL(item[this.pathKey])) {
+                return true
+            }
+        },
+        open (item) {
+            if (this.screen <= 1) this.$store.commit("SET_COLLAPSE")
+            if (this.validIsOpen(item)) {
+                window.open(item[this.pathKey])
+            } else {
+                this.$router.$avueRouter.group = item.group
+                this.$router.$avueRouter.meta = item.meta
+                this.$router.push({
+                    path: this.$router.$avueRouter.getPath({
+                        name: item[this.labelKey],
+                        src: item[this.pathKey]
+                    }, item.meta),
+                    query: item.query
+                })
+            }
         }
-        const groupFlag = (item["group"] || []).some(ele =>
-          this.$route.path.includes(ele)
-        );
-        return this.nowTagValue === item[this.pathKey] || groupFlag;
-      },
-      vaildRoles(item) {
-        item.meta = item.meta || {};
-        return item.meta.roles ? item.meta.roles.includes(this.roles) : true;
-      },
-      validatenull(val) {
-        return validatenull(val);
-      },
-      validIsOpen(item) {
-        if (item[this.isOpenKey] === 2 && isURL(item[this.pathKey])) {
-          return true;
-        }
-      },
-      open(item) {
-        if (this.screen <= 1) this.$store.commit("SET_COLLAPSE");
-        if (this.validIsOpen(item)) {
-          window.open(item[this.pathKey]);
-        } else {
-          this.$router.$avueRouter.group = item.group;
-          this.$router.$avueRouter.meta = item.meta;
-          this.$router.push({
-            path: this.$router.$avueRouter.getPath({
-              name: item[this.labelKey],
-              src: item[this.pathKey]
-            }, item.meta),
-            query: item.query
-          });
-        }
-      }
     }
-  };
+}
 </script>
 

--
Gitblit v1.9.3