From 16eb67ab6b103663d30cad9ba74360f982e131cb Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 03 九月 2024 10:34:59 +0800
Subject: [PATCH] 自定义列显隐控制

---
 src/layout/components/Sidebar/SidebarItem.vue |  173 ++++++++++++++++++++++++---------------------------------
 1 files changed, 74 insertions(+), 99 deletions(-)

diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
index 058d557..8a35ba0 100644
--- a/src/layout/components/Sidebar/SidebarItem.vue
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -1,40 +1,16 @@
 <template>
   <div v-if="!item.hidden">
-    <template
-      v-if="
-        hasOneShowingChild(item.children, item) &&
-        (!onlyOneChild.children || onlyOneChild.noShowingChildren) &&
-        !item.alwaysShow
-      "
-    >
-      <app-link
-        v-if="onlyOneChild.meta"
-        :to="resolvePath(onlyOneChild.path, onlyOneChild.query)"
-      >
-        <el-menu-item
-          :index="resolvePath(onlyOneChild.path)"
-          :class="{ 'submenu-title-noDropdown': !isNest }"
-        >
-          <item
-            :icon="onlyOneChild.meta.icon || (item.meta && item.meta.icon)"
-            :title="onlyOneChild.meta.title"
-          />
+    <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
+      <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path, onlyOneChild.query)">
+        <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
+          <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
         </el-menu-item>
       </app-link>
     </template>
 
-    <el-submenu
-      v-else
-      ref="subMenu"
-      :index="resolvePath(item.path)"
-      popper-append-to-body
-    >
+    <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
       <template slot="title">
-        <item
-          v-if="item.meta"
-          :icon="item.meta && item.meta.icon"
-          :title="item.meta.title"
-        />
+        <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
       </template>
       <sidebar-item
         v-for="(child, index) in item.children"
@@ -47,78 +23,77 @@
     </el-submenu>
   </div>
 </template>
+  <script>
+    import path from 'path'
+    import { isExternal } from '@/utils/validate'
+    import Item from './Item'
+    import AppLink from './Link'
+    import FixiOSBug from './FixiOSBug'
 
-<script>
-import path from "path";
-import { isExternal } from "@/utils/validate";
-import Item from "./Item";
-import AppLink from "./Link";
-import FixiOSBug from "./FixiOSBug";
-
-export default {
-  name: "SidebarItem",
-  components: { Item, AppLink },
-  mixins: [FixiOSBug],
-  props: {
-    // route object
-    item: {
-      type: Object,
-      required: true,
-    },
-    isNest: {
-      type: Boolean,
-      default: false,
-    },
-    basePath: {
-      type: String,
-      default: "",
-    },
-  },
-  data() {
-    this.onlyOneChild = null;
-    return {};
-  },
-  methods: {
-    hasOneShowingChild(children = [], parent) {
-      if (!children) {
-        children = [];
-      }
-      const showingChildren = children.filter((item) => {
-        if (item.hidden) {
-          return false;
-        } else {
-          // Temp set(will be used if only has one showing child)
-          this.onlyOneChild = item;
-          return true;
+    export default {
+      name: 'SidebarItem',
+      components: { Item, AppLink },
+      mixins: [FixiOSBug],
+      props: {
+        // route object
+        item: {
+          type: Object,
+          required: true
+        },
+        isNest: {
+          type: Boolean,
+          default: false
+        },
+        basePath: {
+          type: String,
+          default: ''
         }
-      });
+      },
+      data() {
+        this.onlyOneChild = null
+        return {}
+      },
+      methods: {
+        hasOneShowingChild(children = [], parent) {
+          if (!children) {
+            children = [];
+          }
+          const showingChildren = children.filter(item => {
+            if (item.hidden) {
+              return false
+            } else {
+              // Temp set(will be used if only has one showing child)
+              this.onlyOneChild = item
+              return true
+            }
+          })
 
-      // When there is only one child router, the child router is displayed by default
-      if (showingChildren.length === 1) {
-        return true;
-      }
+          // When there is only one child router, the child router is displayed by default
+          if (showingChildren.length === 1) {
+            return true
+          }
 
-      // Show parent if there are no child router to display
-      if (showingChildren.length === 0) {
-        this.onlyOneChild = { ...parent, path: "", noShowingChildren: true };
-        return true;
-      }
+          // Show parent if there are no child router to display
+          if (showingChildren.length === 0) {
+            this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
+            return true
+          }
 
-      return false;
-    },
-    resolvePath(routePath, routeQuery) {
-      if (isExternal(routePath)) {
-        return routePath;
+          return false
+        },
+        resolvePath(routePath, routeQuery) {
+          if (isExternal(routePath)) {
+            return routePath
+          }
+          if (isExternal(this.basePath)) {
+            return this.basePath
+          }
+          if (routeQuery) {
+            let query = JSON.parse(routeQuery);
+            return { path: path.resolve(this.basePath, routePath), query: query }
+          }
+          return path.resolve(this.basePath, routePath)
+        }
       }
-      if (isExternal(this.basePath)) {
-        return this.basePath;
-      }
-      if (routeQuery) {
-        let query = JSON.parse(routeQuery);
-        return { path: path.resolve(this.basePath, routePath), query: query };
-      }
-      return path.resolve(this.basePath, routePath);
-    },
-  },
-};
-</script>
+    }
+  </script>

--
Gitblit v1.8.0