PC 모드에서 프로필 드롭다운을 통해 POP 화면으로 진입하고, POP에서 PC로 돌아오는 양방향 네비게이션을 구현한다. 기존 메뉴 시스템(menu_info)을 활용하여 POP 화면의 권한 제어와 회사별 관리가 가능하도록 한다. [백엔드: POP 메뉴 조회 API] - AdminService.getPopMenuList: L1 POP 메뉴(menu_desc [POP] 또는 menu_name_kor POP 포함) 하위의 active L2 메뉴 조회 - company_code 필터링 적용 (L1 + L2 모두) - landingMenu 반환: menu_desc에 [POP_LANDING] 태그가 있는 메뉴 - GET /admin/pop-menus 라우트 추가 [프론트: PC -> POP 진입] - AppLayout: handlePopModeClick 함수 추가 - landingMenu 있으면 해당 URL로 바로 이동 - 없으면 childMenus 수에 따라 단일 화면/대시보드/안내 분기 - UserDropdown: onPopModeClick prop + "POP 모드" 메뉴 항목 추가 - 사이드바 하단 + 모바일 헤더 프로필 드롭다운 2곳 모두 적용 [프론트: POP -> PC 복귀] - DashboardHeader: "PC 모드" 버튼 추가 (router.push "/") - POP 개별 화면 page.tsx: 상단 네비게이션 바 추가 (POP 대시보드 / PC 모드 버튼) [프론트: POP 대시보드 동적 메뉴] - PopDashboard: 하드코딩 MENU_ITEMS -> menuApi.getPopMenus() API 조회 - API 실패 시 하드코딩 fallback 유지 [프론트: POP 기본 화면 설정 (MenuFormModal)] - L2 POP 화면 수정 시 "POP 기본 화면으로 설정" 체크박스 추가 - 체크 시 menu_desc에 [POP_LANDING] 태그 자동 추가/제거 - 회사당 1개만 설정 가능 (다른 메뉴에 이미 설정 시 비활성화) [API 타입] - PopMenuItem, PopMenuResponse(landingMenu 포함) 인터페이스 추가 - menuApi.getPopMenus() 함수 추가
85 lines
3.5 KiB
TypeScript
85 lines
3.5 KiB
TypeScript
import { Router } from "express";
|
|
import {
|
|
getAdminMenus,
|
|
getUserMenus,
|
|
getPopMenus,
|
|
getMenuInfo,
|
|
saveMenu, // 메뉴 추가
|
|
updateMenu, // 메뉴 수정
|
|
deleteMenu, // 메뉴 삭제
|
|
deleteMenusBatch, // 메뉴 일괄 삭제
|
|
toggleMenuStatus, // 메뉴 상태 토글
|
|
copyMenu, // 메뉴 복사
|
|
getUserList,
|
|
getUserInfo, // 사용자 상세 조회
|
|
getUserHistory, // 사용자 변경이력 조회
|
|
changeUserStatus, // 사용자 상태 변경
|
|
resetUserPassword, // 사용자 비밀번호 초기화
|
|
updateProfile, // 프로필 수정
|
|
getDepartmentList, // 부서 목록 조회
|
|
checkDuplicateUserId, // 사용자 ID 중복 체크
|
|
saveUser, // 사용자 등록/수정
|
|
saveUserWithDept, // 사원 + 부서 통합 저장 (NEW!)
|
|
getUserWithDept, // 사원 + 부서 조회 (NEW!)
|
|
getCompanyList,
|
|
getCompanyListFromDB, // 실제 DB에서 회사 목록 조회
|
|
getCompanyByCode, // 회사 단건 조회
|
|
createCompany, // 회사 등록
|
|
updateCompany, // 회사 수정
|
|
deleteCompany, // 회사 삭제
|
|
getUserLocale,
|
|
setUserLocale,
|
|
getTableSchema, // 테이블 스키마 조회
|
|
} from "../controllers/adminController";
|
|
import { authenticateToken } from "../middleware/authMiddleware";
|
|
|
|
const router = Router();
|
|
|
|
// 모든 admin 라우트에 인증 미들웨어 적용
|
|
router.use(authenticateToken);
|
|
|
|
// 메뉴 관련 API
|
|
router.get("/menus", getAdminMenus);
|
|
router.get("/user-menus", getUserMenus);
|
|
router.get("/pop-menus", getPopMenus);
|
|
router.get("/menus/:menuId", getMenuInfo);
|
|
router.post("/menus", saveMenu); // 메뉴 추가
|
|
router.post("/menus/:menuObjid/copy", copyMenu); // 메뉴 복사 (NEW!)
|
|
router.put("/menus/:menuId", updateMenu); // 메뉴 수정
|
|
router.put("/menus/:menuId/toggle", toggleMenuStatus); // 메뉴 상태 토글
|
|
router.delete("/menus/batch", deleteMenusBatch); // 메뉴 일괄 삭제 (순서 중요!)
|
|
router.delete("/menus/:menuId", deleteMenu); // 메뉴 삭제
|
|
|
|
// 사용자 관리 API
|
|
router.get("/users", getUserList);
|
|
router.get("/users/:userId", getUserInfo); // 사용자 상세 조회
|
|
router.get("/users/:userId/history", getUserHistory); // 사용자 변경이력 조회
|
|
router.get("/users/:userId/with-dept", getUserWithDept); // 사원 + 부서 조회 (NEW!)
|
|
router.patch("/users/:userId/status", changeUserStatus); // 사용자 상태 변경
|
|
router.post("/users", saveUser); // 사용자 등록/수정 (기존)
|
|
router.post("/users/with-dept", saveUserWithDept); // 사원 + 부서 통합 저장 (NEW!)
|
|
router.put("/users/:userId", saveUser); // 사용자 수정 (REST API)
|
|
router.put("/profile", updateProfile); // 프로필 수정
|
|
router.post("/users/check-duplicate", checkDuplicateUserId); // 사용자 ID 중복 체크
|
|
router.post("/users/reset-password", resetUserPassword); // 사용자 비밀번호 초기화
|
|
|
|
// 부서 관리 API
|
|
router.get("/departments", getDepartmentList); // 부서 목록 조회
|
|
|
|
// 회사 관리 API
|
|
router.get("/companies", getCompanyList);
|
|
router.get("/companies/db", getCompanyListFromDB); // 실제 DB에서 회사 목록 조회
|
|
router.get("/companies/:companyCode", getCompanyByCode); // 회사 단건 조회
|
|
router.post("/companies", createCompany); // 회사 등록
|
|
router.put("/companies/:companyCode", updateCompany); // 회사 수정
|
|
router.delete("/companies/:companyCode", deleteCompany); // 회사 삭제
|
|
|
|
// 사용자 로케일 API
|
|
router.get("/user-locale", getUserLocale);
|
|
router.post("/user-locale", setUserLocale);
|
|
|
|
// 테이블 스키마 API (엑셀 업로드 컬럼 매핑용)
|
|
router.get("/tables/:tableName/schema", getTableSchema);
|
|
|
|
export default router;
|