feat: 화면 관리 기능 개선 (복제/삭제/그룹 관리/테이블 설정)
- 화면 관리 시스템의 복제, 삭제, 수정 및 테이블 설정 기능을 전면 개선 - 그룹 삭제 시 하위 그룹과의 연관성 정리 및 로딩 프로그레스 바 추가 - 화면 수정 기능 추가: 이름, 그룹, 역할, 정렬 순서 변경 - 테이블 설정 모달에 관련 기능 추가 및 데이터 일관성 유지 - 메뉴-화면 그룹 동기화 API 추가 및 관련 상태 관리 기능 구현 - 검색어 필터링 로직 개선: 다중 키워드 지원 - 관련 파일 및 진행 상태 업데이트
This commit is contained in:
@@ -498,3 +498,97 @@ export async function getScreenSubTables(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ============================================================
|
||||
// 메뉴-화면그룹 동기화 API
|
||||
// ============================================================
|
||||
|
||||
export interface SyncDetail {
|
||||
action: 'created' | 'linked' | 'skipped' | 'error';
|
||||
sourceName: string;
|
||||
sourceId: number | string;
|
||||
targetId?: number | string;
|
||||
reason?: string;
|
||||
}
|
||||
|
||||
export interface SyncResult {
|
||||
success: boolean;
|
||||
created: number;
|
||||
linked: number;
|
||||
skipped: number;
|
||||
errors: string[];
|
||||
details: SyncDetail[];
|
||||
}
|
||||
|
||||
export interface SyncStatus {
|
||||
screenGroups: { total: number; linked: number; unlinked: number };
|
||||
menuItems: { total: number; linked: number; unlinked: number };
|
||||
potentialMatches: Array<{ menuName: string; groupName: string; similarity: string }>;
|
||||
}
|
||||
|
||||
// 동기화 상태 조회
|
||||
export async function getMenuScreenSyncStatus(
|
||||
targetCompanyCode?: string
|
||||
): Promise<ApiResponse<SyncStatus>> {
|
||||
try {
|
||||
const queryParams = targetCompanyCode ? `?targetCompanyCode=${targetCompanyCode}` : '';
|
||||
const response = await apiClient.get(`/screen-groups/sync/status${queryParams}`);
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
// 화면관리 → 메뉴 동기화
|
||||
export async function syncScreenGroupsToMenu(
|
||||
targetCompanyCode?: string
|
||||
): Promise<ApiResponse<SyncResult>> {
|
||||
try {
|
||||
const response = await apiClient.post("/screen-groups/sync/screen-to-menu", { targetCompanyCode });
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
// 메뉴 → 화면관리 동기화
|
||||
export async function syncMenuToScreenGroups(
|
||||
targetCompanyCode?: string
|
||||
): Promise<ApiResponse<SyncResult>> {
|
||||
try {
|
||||
const response = await apiClient.post("/screen-groups/sync/menu-to-screen", { targetCompanyCode });
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
// 전체 동기화 결과 타입
|
||||
export interface AllCompaniesSyncResult {
|
||||
totalCompanies: number;
|
||||
successCount: number;
|
||||
failedCount: number;
|
||||
totalCreated: number;
|
||||
totalLinked: number;
|
||||
details: Array<{
|
||||
companyCode: string;
|
||||
companyName: string;
|
||||
direction: 'screens-to-menus' | 'menus-to-screens';
|
||||
created: number;
|
||||
linked: number;
|
||||
skipped: number;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}>;
|
||||
}
|
||||
|
||||
// 전체 회사 동기화 (최고 관리자만)
|
||||
export async function syncAllCompanies(): Promise<ApiResponse<AllCompaniesSyncResult>> {
|
||||
try {
|
||||
const response = await apiClient.post("/screen-groups/sync/all");
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user