diff --git a/src/services/adminMenuService.ts b/src/services/adminMenuService.ts index 649a89c..807339c 100644 --- a/src/services/adminMenuService.ts +++ b/src/services/adminMenuService.ts @@ -67,21 +67,6 @@ export const getAdminMenuListByParentSeq = async (parentSeq: number, pageNum: nu return { content: [], pageNum: 1, pageSize: 0, totalContent: 0, totalPage: 0, isFirstPage: true, isLastPage: true }; }; -// parentSeq로 어드민 메뉴 목록 조회 (페이징 없이 전체 목록) -export const getAdminMenuListByParentSeqAll = async (parentSeq: number): Promise => { - const response = await axios.get(`/admin/menu/listByParentSeq/${parentSeq}`); - const resultData = response.data.resultData; - // 페이징 형태의 응답인 경우 content 배열 반환 - if (resultData && resultData.content && Array.isArray(resultData.content)) { - return resultData.content; - } - // 배열 형태의 응답인 경우 그대로 반환 - if (Array.isArray(resultData)) { - return resultData; - } - return []; -}; - // adminMenuSeq로 어드민 메뉴 조회 export const getAdminMenu = async (adminMenuSeq: number): Promise => { const response = await axios.get(`/admin/menu/${adminMenuSeq}`); diff --git a/src/views/admin/AdminMenuManagement.tsx b/src/views/admin/AdminMenuManagement.tsx index b19958c..5fba6de 100644 --- a/src/views/admin/AdminMenuManagement.tsx +++ b/src/views/admin/AdminMenuManagement.tsx @@ -160,6 +160,7 @@ const AdminMenuManagement: React.FC = () => { const [loading, setLoading] = useState(false); const [modalVisible, setModalVisible] = useState(false); const [deleteModalVisible, setDeleteModalVisible] = useState(false); + const [hasChildMenus, setHasChildMenus] = useState(false); const [iconPickerVisible, setIconPickerVisible] = useState(false); const [isEditMode, setIsEditMode] = useState(false); const [selectedMenu, setSelectedMenu] = useState(null); @@ -340,9 +341,22 @@ const AdminMenuManagement: React.FC = () => { }; // 메뉴 삭제 모달 열기 - const handleDeleteClick = (menu: AdminMenu) => { - setSelectedMenu(menu); - setDeleteModalVisible(true); + const handleDeleteClick = async (menu: AdminMenu) => { + if (!menu.adminMenuSeq) return; + + try { + // 하위 메뉴 존재 여부 확인 + const childMenusResponse = await getAdminMenuListByParentSeq(menu.adminMenuSeq); + setHasChildMenus(childMenusResponse.totalContent > 0); + setSelectedMenu(menu); + setDeleteModalVisible(true); + } catch (error) { + console.error('하위 메뉴 확인 실패:', error); + // 에러 발생 시에도 모달은 열되, 삭제 불가로 처리 + setHasChildMenus(true); + setSelectedMenu(menu); + setDeleteModalVisible(true); + } }; // 입력 필드 변경 처리 @@ -464,15 +478,14 @@ const AdminMenuManagement: React.FC = () => { - + - 메뉴 번호 + 순번 {!isCompact && ( 아이콘 )} - 메뉴 이름 - 순번 + 메뉴 이름 {!isCompact && ( URL )} @@ -482,22 +495,20 @@ const AdminMenuManagement: React.FC = () => { {loading ? ( - + 로딩 중... ) : menuList.length === 0 ? ( - + 등록된 메뉴가 없습니다. ) : ( menuList.map((menu) => ( - -
{menu.adminMenuSeq}
-
+ {menu.menuOrder} {!isCompact && ( {menu.iconName && getIconByName(menu.iconName) ? ( @@ -526,7 +537,6 @@ const AdminMenuManagement: React.FC = () => { - {menu.menuOrder} {!isCompact && (
{ 메뉴 삭제 - 정말로 {selectedMenu?.menuName} 메뉴를 삭제하시겠습니까? -
- - 하위 메뉴가 있는 경우 함께 삭제되지 않습니다. 먼저 하위 메뉴를 삭제해주세요. - + {hasChildMenus ? ( + <> +
+ + 삭제할 수 없습니다. +
+

+ {selectedMenu?.menuName} 메뉴에 하위 메뉴가 존재합니다. +

+ + 하위 메뉴를 먼저 모두 삭제한 후 다시 시도해주세요. + + + ) : ( + <> + 정말로 {selectedMenu?.menuName} 메뉴를 삭제하시겠습니까? + + )}
setDeleteModalVisible(false)}> - 취소 - - - 삭제 + {hasChildMenus ? '닫기' : '취소'} + {!hasChildMenus && ( + + 삭제 + + )}