Kaynağa Gözat

左侧导航优化

sunxuewei 1 yıl önce
ebeveyn
işleme
ed5e3ee690

+ 5 - 28
src/layout/components/sidebar/sidebar.vue

@@ -1,43 +1,20 @@
1 1
 <template>
2 2
   <div class="sidebar_menu">
3 3
     <div class="sidebar_menu_scroll">
4
-      <el-menu default-active="1" @open="handleOpen" @close="handleClose">
5
-        <template v-for="(item, index) in menu">
6
-          <el-sub-menu v-if="item.children.length > 0" :key="item.path" :index="`${index}`">
7
-            <template #title>
8
-              <span>{{ item.name }}</span>
9
-            </template>
10
-            <el-menu-item
11
-              v-for="(ite, indey) in item.children"
12
-              :key="ite.path"
13
-              :index="`${index}-${indey}`"
14
-              @click="menuClick(ite.path)"
15
-            >
16
-              {{ ite.name }}
17
-            </el-menu-item>
18
-          </el-sub-menu>
19
-          <el-menu-item v-else :key="item.name" :index="`${index}`" @click="menuClick(item.path)">{{
20
-            item.name
21
-          }}</el-menu-item>
4
+      <el-menu default-active="1">
5
+        <template v-for="(item, index) in menu" :key="item.path">
6
+          <sidebarItem :item="item" :index="`${index}`" />
22 7
         </template>
23 8
       </el-menu>
24 9
     </div>
25 10
   </div>
26 11
 </template>
27 12
 <script setup lang="ts">
28
-import { useRouter } from "vue-router";
29 13
 import { useGetters } from "@/hooks/storeHooks";
30 14
 
31
-const router = useRouter();
32
-const { menu } = useGetters(["menu"]);
15
+import sidebarItem from "./sidebarItem.vue";
33 16
 
34
-const handleOpen = (key: string, keyPath: string[]) => {
35
-  // console.log(key, keyPath);
36
-};
37
-const handleClose = () => ({});
38
-const menuClick = (item: any) => {
39
-  router.push(item);
40
-};
17
+const { menu } = useGetters(["menu"]);
41 18
 </script>
42 19
 <style lang="scss" scoped>
43 20
 .sidebar_menu {

+ 39 - 0
src/layout/components/sidebar/sidebarItem.vue

@@ -0,0 +1,39 @@
1
+<template>
2
+  <el-sub-menu v-if="props.item.children.length > 0" :index="props.index">
3
+    <template #title>
4
+      <span>{{ props.item.name }}</span>
5
+    </template>
6
+    <template v-for="(ite, indey) in props.item.children" :key="ite.path">
7
+      <sidebarItem :item="ite" :index="`${index}-${indey}`" />
8
+    </template>
9
+  </el-sub-menu>
10
+  <el-menu-item v-else :index="props.index" @click="menuClick(props.item.path)">{{ props.item.name }}</el-menu-item>
11
+</template>
12
+
13
+<script lang="ts">
14
+export default {
15
+  name: "sidebarItem"
16
+};
17
+</script>
18
+
19
+<script setup lang="ts">
20
+import { useRouter } from "vue-router";
21
+
22
+const router = useRouter();
23
+const props = defineProps({
24
+  item: {
25
+    type: Object,
26
+    default: () => ({})
27
+  },
28
+  index: {
29
+    type: String,
30
+    default: undefined
31
+  }
32
+});
33
+
34
+const menuClick = (item: any) => {
35
+  router.push(item);
36
+};
37
+</script>
38
+
39
+<style lang="scss" scoped></style>