화면 저장기능 구현

This commit is contained in:
kjs
2025-09-01 18:42:59 +09:00
parent 31d25268ce
commit 3bd5a2fa14
12 changed files with 1599 additions and 256 deletions

View File

@@ -20,6 +20,8 @@ import { useMenu } from "@/contexts/MenuContext";
import { useAuth } from "@/hooks/useAuth";
import { useProfile } from "@/hooks/useProfile";
import { MenuItem } from "@/lib/api/menu";
import { menuScreenApi } from "@/lib/api/screen";
import { toast } from "sonner";
import { MainHeader } from "./MainHeader";
import { ProfileModal } from "./ProfileModal";
import { PageHeader } from "./PageHeader";
@@ -234,12 +236,35 @@ export function AppLayout({ children }: AppLayoutProps) {
};
// 메뉴 클릭 핸들러
const handleMenuClick = (menu: any) => {
const handleMenuClick = async (menu: any) => {
if (menu.hasChildren) {
toggleMenu(menu.id);
} else if (menu.url && menu.url !== "#") {
router.push(menu.url);
setSidebarOpen(false);
} else {
// 먼저 할당된 화면이 있는지 확인 (URL 유무와 관계없이)
try {
const menuObjid = menu.objid || menu.id;
const assignedScreens = await menuScreenApi.getScreensByMenu(menuObjid);
if (assignedScreens.length > 0) {
// 할당된 화면이 있으면 첫 번째 화면으로 이동
const firstScreen = assignedScreens[0];
router.push(`/screens/${firstScreen.screenId}`);
setSidebarOpen(false);
return;
}
} catch (error) {
console.warn("할당된 화면 조회 실패:", error);
}
// 할당된 화면이 없고 URL이 있으면 기존 URL로 이동
if (menu.url && menu.url !== "#") {
router.push(menu.url);
setSidebarOpen(false);
} else {
// URL도 없고 할당된 화면도 없으면 경고 메시지
console.warn("메뉴에 URL이나 할당된 화면이 없습니다:", menu);
toast.warning("이 메뉴에는 연결된 페이지나 화면이 없습니다.");
}
}
};