hmkim 03-28
250328 김혜민 관리자페이지 breadcrumb 추가
@5256a4afe065248c81615ed73ec28d461e91c574
 
client/views/component/Breadcrumb/Breadcrumb.vue (added)
+++ client/views/component/Breadcrumb/Breadcrumb.vue
@@ -0,0 +1,46 @@
+<template>
+  <div>
+    <span v-for="(crumb, index) in breadcrumbList" :key="index">
+      {{ crumb.menuNm }}
+      <span v-if="index < breadcrumbList.length - 1"> &gt; </span>
+    </span>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      breadcrumbList: [],
+    };
+  },
+  watch: {
+    $route: {
+      immediate: true,
+      handler() {
+        this.generateBreadcrumb();
+      }
+    }
+  },
+  methods: {
+    generateBreadcrumb() {
+      const fullMenuList = this.$store.state.menuList || []; // 전체 메뉴 트리
+      const currentPath = this.$route.path;
+      const findMenuPath = (menus, path, trail = []) => {
+        for (const menu of menus) {
+          const newTrail = [...trail, menu];
+          if (menu.routerUrl === path) return newTrail;
+          if (menu.childList?.length) {
+            const found = findMenuPath(menu.childList, path, newTrail);
+            if (found) return found;
+          }
+        }
+        return null;  
+      };
+
+      const breadcrumb = findMenuPath(fullMenuList, currentPath);
+      this.breadcrumbList = breadcrumb || [];
+    }
+  },
+};
+</script>
client/views/layout/AdminHeader.vue
--- client/views/layout/AdminHeader.vue
+++ client/views/layout/AdminHeader.vue
@@ -52,6 +52,8 @@
                 const res = await findBySysMenu(params);
                 if(res.status == 200) {
                     this.menuList = res.data.data.menuList;
+                     // 전체 메뉴 트리 store에 저장
+                    this.$store.commit('setMenuList', this.menuList);
                 }
             } catch(error) {
                 alert('에러가 발생했습니다.\n관리자에게 문의하세요.');
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -3,6 +3,7 @@
     <AdminHeader />
     <AdminMenu />
     <main class="main-wrap">
+      <Breadcrumb />
         <div :class="{'content-wrap': true, 'main': this.$route.path === '/adm/main.page'}">
           <router-view />
         </div>
@@ -20,7 +21,7 @@
 import UserHeader from "../layout/UserHeader.vue";
 import AdminHeader from "../layout/AdminHeader.vue";
 import AdminMenu from "../layout/AdminMenu.vue";
-
+import Breadcrumb from "../component/Breadcrumb/Breadcrumb.vue";
 const App = {
   data: () => {
     return {
@@ -45,6 +46,7 @@
     'UserHeader': UserHeader,
     'AdminHeader': AdminHeader,
     'AdminMenu': AdminMenu,
+    'Breadcrumb' : Breadcrumb,
   },
   mounted() {},
 };
client/views/pages/AppStore.js
--- client/views/pages/AppStore.js
+++ client/views/pages/AppStore.js
@@ -55,7 +55,10 @@
     },
     setPageAuth(state, newValue) {
       state.pageAuth = newValue;
-    }
+    },
+    setMenuList(state, menuList) {
+      state.menuList = menuList;
+    },
   },
   actions: {
     async logout({ commit }) {
Add a comment
List