이호영 이호영 2 days ago
컨텐츠 메뉴 진입 시 서브 메뉴 구현
@7d68d6efe8d2ae3eeb45a82524ce3d55082294ab
src/main/java/kcc/web/MainController.java
--- src/main/java/kcc/web/MainController.java
+++ src/main/java/kcc/web/MainController.java
@@ -36,6 +36,7 @@
 import javax.servlet.http.HttpSession;
 
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -713,16 +714,50 @@
 	@ResponseBody
 	@RequestMapping(value = "/web/com/subMenu.do")
 	public ResponseEntity<RestResponse> webCommonSubMenu(
-			@RequestBody MenuManageJTreeVO menuManageVO ) throws Exception {
-
+			@RequestBody Map<String, Object> paramMap) throws Exception {
+		// 1. 파라미터 추출
+		String depth1MenuNm = (String) paramMap.get("depth1MenuNm");
+		String depth2MenuNm = (String) paramMap.get("depth2MenuNm");
 	
-		System.out.println("?????");
+		// 2. 전체 메뉴 조회 및 1Depth 리스트 생성 (URL 세팅 포함)
+		List<MenuManageJTreeVO> menuResultList = menuCreateManageService.selectMenuListJtree(new MenuManageJTreeVO());
+	
+		List<MenuManageJTreeVO> depth1List = menuResultList.stream()
+				.filter(menu -> "1".equals(menu.getUpperMenuId()))
+				.peek(menu -> menu.setUrl("/web/content.do?proFn=" + menu.getMenuNo())) // 스트림 안에서 URL 세팅
+				.collect(Collectors.toList());
+	
+		// 3. 현재 선택된 1Depth 찾기 (이미 필터링된 depth1List에서 찾음)
+		MenuManageJTreeVO selectedDepth1 = depth1List.stream()
+				.filter(menu -> depth1MenuNm != null && depth1MenuNm.equalsIgnoreCase(menu.getMenuNm()))
+				.findFirst()
+				.orElse(null);
+	
+		// 4. 2Depth 리스트 생성 (selectedDepth1이 있을 때만 진행)
+		List<MenuManageJTreeVO> depth2List = new ArrayList<>();
+		MenuManageJTreeVO selectedDepth2 = null;
+	
+		if (selectedDepth1 != null) {
+			depth2List = menuResultList.stream()
+				.filter(menu -> selectedDepth1.getMenuNo().equals(menu.getUpperMenuId()))
+				.peek(menu -> menu.setUrl("/web/content.do?proFn=" + menu.getMenuNo()))
+				.collect(Collectors.toList());
 		
-		
-		
-		RestResponse restResponse = new RestResponse();
-		
-		
+			// 5. 현재 선택된 2Depth 찾기
+			selectedDepth2 = depth2List.stream()
+				.filter(menu -> depth2MenuNm != null && depth2MenuNm.equalsIgnoreCase(menu.getMenuNm()))
+				.findFirst()
+				.orElse(null);
+		}
+	
+		// 6. 결과 맵 구성 및 반환
+		Map<String, Object> resultMap = new HashMap<>();
+		resultMap.put("depth1List", depth1List);
+		resultMap.put("selectedDepth1", selectedDepth1);
+		resultMap.put("depth2List", depth2List);
+		resultMap.put("selectedDepth2", selectedDepth2);
+	
+		RestResponse restResponse = new RestResponse(HttpStatus.OK, "", resultMap);
 		return ResponseEntity.ok(restResponse);
 
 	}
src/main/webapp/publish/usr/script/submenu.js
--- src/main/webapp/publish/usr/script/submenu.js
+++ src/main/webapp/publish/usr/script/submenu.js
@@ -1,22 +1,29 @@
 $(function(){
 	console.log('??!!???');
+	
+	const currentPath = window.location.pathname;
+	console.log(currentPath);
 
-	fn_getSubMenu()
+	if (currentPath !== '/web/main/mainPage.do') {
+		if (currentPath === '/web/content.do') {
+			fn_getSubMenu();
+		}
+	}
 });
 
 function fn_getSubMenu(){
 
-
-	console.log($('#container .sub_title').text());
-	console.log($('#container .sub_title').text());
-	console.log($('#container .sub_title').text());
 	
 	
 	var title = $('#container .sub_title').text();
-	
+	var subTitle = $.trim($('.content_title').text());
+
+	console.log('title ::', title);
+	console.log('subTitle ::', subTitle);
 
 	var sendData = {
-			"upperMenuId" : '111'
+			"depth1MenuNm" :  title
+			, "depth2MenuNm" : subTitle
 		}
 	
 	$.ajax({
@@ -26,12 +33,56 @@
 		data: JSON.stringify(sendData),
 		dataType: 'json',
 		success: function(data) {
-			alert("d")
 			console.log(data);
-        },
-	    error: function(err) {
-	        console.error(err);
-	    }
+			if(data.status == 'OK'){
+				renderSubVisualNav(data);	
+			}
+		},
+		error: function(err) {
+			console.error(err);
+		}
 	});
 	
-}
(No newline at end of file)
+}
+
+
+// AJAX 성공 시 호출되는 함수 내부
+function renderSubVisualNav(res) {
+    const result = res.data || res; // res.data가 있으면 쓰고, 없으면 res 자체를 사용
+    
+    const depth1List = result.depth1List || []; // 데이터가 없으면 빈 배열로 초기화
+    const depth2List = result.depth2List || [];
+    const selected1 = result.selectedDepth1;
+    const selected2 = result.selectedDepth2;
+
+    let html = '';
+
+    // 1. 기본 홈 아이콘
+    html += '<a href="/"><i class="icon home"></i></a>';
+
+    // 2. 1Depth 메뉴 생성
+    if (depth1List.length > 0) { // 리스트가 있을 때만 실행
+        html += '<div class="snb_wrap">';
+        html += `  <button type="button" class="snb_title">${selected1 ? selected1.text : '메뉴'}</button>`;
+        html += '  <ul class="snb_select">';
+        depth1List.forEach(item => {
+            html += `    <li><a href="${item.url || '#'}">${item.text}</a></li>`;
+        });
+        html += '  </ul>';
+        html += '</div>';
+    }
+
+    // 3. 2Depth 메뉴 생성
+    if (depth2List.length > 0) {
+        html += '<div class="snb_wrap">';
+        html += `  <button type="button" class="snb_title">${selected2 ? selected2.text : '메뉴'}</button>`;
+        html += '  <ul class="snb_select">';
+        depth2List.forEach(item => {
+            html += `    <li><a href="${item.url || '#'}">${item.text}</a></li>`;
+        });
+        html += '  </ul>';
+        html += '</div>';
+    }
+
+    document.querySelector('.sub_visual_nav').innerHTML = html;
+}
Add a comment
List