ERP-node/frontend/lib/api/menu.ts

161 lines
4.5 KiB
TypeScript
Raw Normal View History

2025-08-21 09:41:46 +09:00
import { apiClient } from "./client";
export interface MenuItem {
objid?: string;
OBJID?: string;
parent_obj_id?: string;
PARENT_OBJ_ID?: string;
menu_name_kor?: string;
MENU_NAME_KOR?: string;
menu_url?: string;
MENU_URL?: string;
menu_desc?: string;
MENU_DESC?: string;
seq?: number;
SEQ?: number;
menu_type?: string;
MENU_TYPE?: string;
status?: string;
STATUS?: string;
lev?: number;
LEV?: number;
lpad_menu_name_kor?: string;
LPAD_MENU_NAME_KOR?: string;
status_title?: string;
STATUS_TITLE?: string;
writer?: string;
WRITER?: string;
regdate?: string;
REGDATE?: string;
company_code?: string;
COMPANY_CODE?: string;
company_name?: string;
COMPANY_NAME?: string;
// 다국어 관련 필드 추가
lang_key?: string;
LANG_KEY?: string;
lang_key_desc?: string;
LANG_KEY_DESC?: string;
translated_name?: string;
TRANSLATED_NAME?: string;
translated_desc?: string;
TRANSLATED_DESC?: string;
}
export interface MenuFormData {
objid?: string;
parentObjId: string;
menuNameKor: string;
menuUrl: string;
menuDesc: string;
seq: number;
menuType: string;
status: string;
companyCode: string;
langKey?: string; // 다국어 키 추가
}
export interface LangKey {
keyId: number;
companyCode: string;
menuName: string;
langKey: string;
description: string;
isActive: string;
createdDate: string;
createdBy: string;
updatedDate: string;
updatedBy: string;
}
export interface ApiResponse<T> {
success: boolean;
data?: T;
message: string;
errorCode?: string;
}
export const menuApi = {
// 관리자 메뉴 목록 조회
getAdminMenus: async (): Promise<ApiResponse<MenuItem[]>> => {
const response = await apiClient.get("/admin/menus");
console.log("=== API 응답 데이터 ===");
console.log("전체 응답:", response);
console.log("응답 데이터:", response.data);
if (response.data.success && response.data.data && response.data.data.length > 0) {
console.log("첫 번째 메뉴 원본 데이터:", response.data.data[0]);
console.log("첫 번째 메뉴 키들:", Object.keys(response.data.data[0]));
}
return response.data;
},
// 사용자 메뉴 목록 조회
getUserMenus: async (): Promise<ApiResponse<MenuItem[]>> => {
const response = await apiClient.get("/admin/user-menus");
return response.data;
},
// 메뉴 정보 조회
getMenuInfo: async (menuId: string): Promise<ApiResponse<MenuItem>> => {
const response = await apiClient.get(`/admin/menus/${menuId}`);
return response.data;
},
// 메뉴 등록/수정
saveMenu: async (menuData: MenuFormData): Promise<ApiResponse<void>> => {
const response = await apiClient.post("/admin/menus", menuData);
return response.data;
},
// 메뉴 수정
updateMenu: async (menuId: string, menuData: MenuFormData): Promise<ApiResponse<void>> => {
const response = await apiClient.put(`/admin/menus/${menuId}`, menuData);
return response.data;
},
2025-08-21 09:41:46 +09:00
// 메뉴 삭제
deleteMenu: async (menuId: string): Promise<ApiResponse<void>> => {
const response = await apiClient.delete(`/admin/menus/${menuId}`);
return response.data;
},
// 메뉴 일괄 삭제
deleteMenusBatch: async (menuIds: string[]): Promise<ApiResponse<{ deletedCount: number; failedCount: number }>> => {
const response = await apiClient.delete("/admin/menus/batch", {
data: menuIds,
});
return response.data;
},
// 메뉴 활성/비활성 토글
toggleMenuStatus: async (menuId: string): Promise<ApiResponse<string>> => {
const response = await apiClient.put(`/admin/menus/${menuId}/toggle`);
return response.data;
},
// 메뉴 권한 그룹 목록 조회
getMenuAuthGroups: async (menuId: string): Promise<ApiResponse<any[]>> => {
const response = await apiClient.get(`/admin/menus/${menuId}/auth-groups`);
return response.data;
},
// 다국어 키 목록 조회
getLangKeys: async (params?: {
companyCode?: string;
menuCode?: string;
keyType?: string;
}): Promise<ApiResponse<LangKey[]>> => {
2025-08-25 17:22:20 +09:00
console.log("🔍 다국어 키 목록 조회 API 호출:", "/multilang/keys", params);
try {
// Node.js 백엔드의 실제 라우팅과 일치하도록 수정
2025-08-25 17:22:20 +09:00
const response = await apiClient.get("/multilang/keys", { params });
console.log("✅ 다국어 키 목록 조회 성공:", response.data);
return response.data;
} catch (error) {
console.error("❌ 다국어 키 목록 조회 실패:", error);
throw error;
}
2025-08-21 09:41:46 +09:00
},
};