박정하 박정하 04-15
250415 박정하 헤더 수정
@81f87b53f5f61fb159fc4235604399d035a35354
client/resources/css/user/layout.css
--- client/resources/css/user/layout.css
+++ client/resources/css/user/layout.css
@@ -39,10 +39,13 @@
             position: relative;
             padding: 20px 0;
         }
-        &>ul>li:hover, &>ul>li:hover>a, .active-menu{
+        &>ul>li:hover,
+        &>ul>li:hover>p,
+        &>ul>li:hover>a,
+        .active-menu {
             cursor: pointer;
             color: #c23d4a;
-        } 
+        }
     }
 
     .submenu {
@@ -70,7 +73,8 @@
             }
         }
 
-        p:hover {
+        p:hover,
+        .now-menu {
             background-color: #f9ebed;
         }
     }
client/resources/css/user/main.css
--- client/resources/css/user/main.css
+++ client/resources/css/user/main.css
@@ -83,7 +83,8 @@
             }
         }
 
-        p:hover a {
+        p:hover a,
+        .point-menu {
             color: #c23d4a;
             font-family: "Pretendard-B";
 
client/views/layout/Header.vue
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
@@ -8,36 +8,44 @@
         <div class="nav-wrap">
           <nav>
             <ul v-if="$store.state.roles.length > 0">
-              <li @click="updateMenuStats('MENU_00000001')" @mouseover="showSubmenu('MENU_00000001')" @mouseleave="hideSubmenu('MENU_00000001')" :class="{ 'active-menu': isActiveMenu('MENU_00000001') }"> 기록물 <div class="submenu" v-if="submenuVisible['MENU_00000001']" @mouseover="showSubmenu('MENU_00000001')" @mouseleave="hideSubmenu('MENU_00000001')">
-                  <p>• <router-link :to="{ path: '/PicHistorySearch.page' }" @click="hideSubmenu('MENU_00000001')"> 사진 기록물 </router-link>
+              <li @mouseover="showSubmenu('MENU_00000001')" @mouseleave="hideSubmenu('MENU_00000001')">
+                <p :class="{ 'active-menu': this.$route.path === '/PicHistorySearch.page' || this.$route.path === '/VideoHistorySearch.page' }">기록물</p>
+                <div class="submenu" v-if="submenuVisible['MENU_00000001']" @mouseover="showSubmenu('MENU_00000001')" @mouseleave="hideSubmenu('MENU_00000001')">
+                  <p :class="{ 'now-menu': this.$route.path === '/PicHistorySearch.page' }">• <router-link :to="{ path: '/PicHistorySearch.page' }" @click="hideSubmenu('MENU_00000001')"> 사진 기록물 </router-link>
                   </p>
                   <div class="hr"></div>
-                  <p>• <router-link :to="{ path: '/VideoHistorySearch.page' }" @click="hideSubmenu('MENU_00000001')"> 영상 기록물 </router-link>
+                  <p :class="{ 'now-menu': this.$route.path === '/VideoHistorySearch.page' }">• <router-link :to="{ path: '/VideoHistorySearch.page' }" @click="hideSubmenu('MENU_00000001')"> 영상 기록물 </router-link>
                   </p>
                 </div>
               </li>
-              <li @click="updateMenuStats('MENU_00000004')" @mouseover="showSubmenu('MENU_00000004')" @mouseleave="hideSubmenu('MENU_00000004')" :class="{ 'active-menu': isActiveMenu('MENU_00000004') }"> 언론에서 바라본 구미시 <div class="submenu" v-if="submenuVisible['MENU_00000004']" @mouseover="showSubmenu('MENU_00000004')" @mouseleave="hideSubmenu('MENU_00000004')">
-                  <p>• <router-link :to="{ path: '/MediaVideoSearch.page' }" @click="hideSubmenu('MENU_00000004')"> 미디어 영상 </router-link>
+              <li @mouseover="showSubmenu('MENU_00000004')" @mouseleave="hideSubmenu('MENU_00000004')">
+                <p :class="{ 'active-menu': this.$route.path === '/MediaVideoSearch.page' || this.$route.path === '/NewsReleaseSearch.page' }">언론에서 바라본 구미시</p>
+                <div class="submenu" v-if="submenuVisible['MENU_00000004']" @mouseover="showSubmenu('MENU_00000004')" @mouseleave="hideSubmenu('MENU_00000004')">
+                  <p :class="{ 'now-menu': this.$route.path === '/MediaVideoSearch.page' }">• <router-link :to="{ path: '/MediaVideoSearch.page' }" @click="hideSubmenu('MENU_00000004')"> 미디어 영상 </router-link>
                   </p>
                   <div class="hr"></div>
-                  <p>• <router-link :to="{ path: '/NewsReleaseSearch.page' }" @click="hideSubmenu('MENU_00000004')"> 보도자료 </router-link>
+                  <p :class="{ 'now-menu': this.$route.path === '/NewsReleaseSearch.page' }">• <router-link :to="{ path: '/NewsReleaseSearch.page' }" @click="hideSubmenu('MENU_00000004')"> 보도자료 </router-link>
                   </p>
                 </div>
               </li>
-              <li v-if="$store.state.roles[0]?.authority === 'ROLE_ADMIN'"><router-link :to="{ path: '/MemberManagement.page' }" @click="onMemberManagementClick" exact-active-class="active-menu">회원관리</router-link></li>
-              <li v-if="$store.state.roles[0]?.authority === 'ROLE_ADMIN'"><router-link :to="{ path: '/CategoryManagement.page' }" @click="onCategoryManagementClick" exact-active-class="active-menu">카테고리 관리</router-link></li>
+              <template v-if="$store.state.roles[0]?.authority === 'ROLE_ADMIN'">
+                <li><router-link :to="{ path: '/MemberManagement.page' }" :class="{ 'active-menu': this.$route.path === '/MemberManagement.page' }">회원관리</router-link></li>
+                <li><router-link :to="{ path: '/CategoryManagement.page' }" :class="{ 'active-menu': this.$route.path === '/CategoryManagement.page' }">카테고리 관리</router-link></li>
+              </template>
             </ul>
           </nav>
         </div>
         <div class="auth-area">
           <ul>
-            <li><img src="../../resources/images/icon/user-settings-line.png" alt="">
+            <li>
+              <img src="../../resources/images/icon/user-settings-line.png" alt="">
               <router-link :to="{ path: '/MyInfo.page' }">{{ $store.state.userNm }}</router-link>
             </li>
             <li>
               <div class="line"></div>
             </li>
-            <li><img src="../../resources/images/icon/logout-box-line.png" alt="">
+            <li>
+              <img src="../../resources/images/icon/logout-box-line.png" alt="">
               <a href="#" @click.prevent="logout">로그아웃</a>
             </li>
           </ul>
@@ -51,35 +59,37 @@
         <div class="nav-wrap">
           <nav>
             <ul>
-              <li @click="updateMenuStats('MENU_00000001')">
+              <li>
                 <h6>기록물</h6>
                 <div class="submenu">
-                  <p>• <router-link :to="{ path: '/PicHistorySearch.page' }" @click="closeMenu">사진 기록물</router-link></p>
+                  <p :class="{ 'point-menu': this.$route.path === '/PicHistorySearch.page' }">• <router-link :to="{ path: '/PicHistorySearch.page' }" @click="closeMenu">사진 기록물</router-link></p>
                   <div class="hr pink"></div>
-                  <p>• <router-link :to="{ path: '/VideoHistorySearch.page' }" @click="closeMenu">영상 기록물</router-link></p>
+                  <p :class="{ 'point-menu': this.$route.path === '/VideoHistorySearch.page' }">• <router-link :to="{ path: '/VideoHistorySearch.page' }" @click="closeMenu">영상 기록물</router-link></p>
                 </div>
               </li>
-              <li @click="updateMenuStats('MENU_00000004')">
+              <li>
                 <h6>언론에서 바라본 구미시</h6>
                 <div class="submenu">
-                  <p>• <router-link :to="{ path: '/MediaVideoSearch.page' }" @click="closeMenu">미디어 영상</router-link></p>
+                  <p :class="{ 'point-menu': this.$route.path === '/MediaVideoSearch.page' }">• <router-link :to="{ path: '/MediaVideoSearch.page' }" @click="closeMenu">미디어 영상</router-link></p>
                   <div class="hr pink"></div>
-                  <p>• <router-link :to="{ path: '/NewsReleaseSearch.page' }" @click="closeMenu">보도자료</router-link></p>
+                  <p :class="{ 'point-menu': this.$route.path === '/NewsReleaseSearch.page' }">• <router-link :to="{ path: '/NewsReleaseSearch.page' }" @click="closeMenu">보도자료</router-link></p>
                 </div>
               </li>
-              <li v-if="$store.state.roles[0]?.authority === 'ROLE_ADMIN'">
-                <h6>회원관리</h6>
-                <div class="submenu">
-                  <p>• <router-link :to="{ path: '/MemberManagement.page' }" @click="closeMenu">회원관리</router-link></p>
-                </div>
-              </li>
-              <li v-if="$store.state.roles[0]?.authority === 'ROLE_ADMIN'">
-                <h6>카테고리 관리</h6>
-                <div class="submenu">
-                  <p>• <router-link :to="{ path: '/CategoryManagement.page' }" @click="closeMenu">카테고리 관리</router-link>
-                  </p>
-                </div>
-              </li>
+              <template v-if="$store.state.roles[0]?.authority === 'ROLE_ADMIN'">
+                <li>
+                  <h6>회원관리</h6>
+                  <div class="submenu">
+                    <p :class="{ 'point-menu': this.$route.path === '/MemberManagement.page' }">• <router-link :to="{ path: '/MemberManagement.page' }" @click="closeMenu">회원관리</router-link></p>
+                  </div>
+                </li>
+                <li>
+                  <h6>카테고리 관리</h6>
+                  <div class="submenu">
+                    <p :class="{ 'point-menu': this.$route.path === '/CategoryManagement.page' }">• <router-link :to="{ path: '/CategoryManagement.page' }" @click="closeMenu">카테고리 관리</router-link>
+                    </p>
+                  </div>
+                </li>
+              </template>
             </ul>
           </nav>
         </div>
@@ -91,6 +101,7 @@
 import { reactive } from 'vue';
 import { logOutProc } from "../../resources/api/user"
 import { updateStatsByMenuId } from "../../resources/api/main"
+
 export default {
   data() {
     return {
@@ -98,17 +109,19 @@
       isMenuOpen: false,
       // Define the image sources
       logo: 'client/resources/images/logo.png',
-      activeMenu: null,
     };
   },
+
   methods: {
     toggleMenu() {
       this.isMenuOpen = !this.isMenuOpen;
     },
+
     // 메뉴 닫기
     closeMenu() {
       this.isMenuOpen = false;
     },
+
     showSubmenu(menuId) {
       this.submenuVisible[menuId] = true;  // Directly mutate the reactive object
     },
@@ -117,21 +130,7 @@
     hideSubmenu(menuId) {
       this.submenuVisible[menuId] = false;  // Directly mutate the reactive object
     },
-    setActiveMenu(menuId) {
-      this.activeMenu = menuId;
-    },
-    onMemberManagementClick() {
-      this.activeMenu = null; // Clear active menu
-    },
 
-    // Handle click on "카테고리 관리" and reset the active menu state
-    onCategoryManagementClick() {
-      this.activeMenu = null; // Clear active menu
-    },
-    // Check if the menu item is active
-    isActiveMenu(menuId) {
-      return this.activeMenu === menuId;
-    },
     async updateMenuStats(menuId) {
       try {
         this.activeMenu = menuId;
@@ -140,6 +139,7 @@
         console.error(`메뉴 ID ${menuId} 통계 업데이트 중 오류:`, error);
       }
     },
+
     logout() {
       // 백엔드 로그아웃 API 호출
       logOutProc()
@@ -153,7 +153,6 @@
           this.$router.push({ path: '/Login.page' }); // 로그인 페이지로 리다이렉트
         });
     },
-
   },
   watch: {},
   computed: {},
Add a comment
List