fix: 화면 복제 기능 개선 및 관련 버그 수정

- 화면 복제 기능을 개선하여 DB 구조 개편 후의 효율적인 화면 관리를 지원합니다.
- 그룹 복제 시 버튼의 `targetScreenId`가 새 화면으로 매핑되지 않는 버그를 수정하였습니다.
- 관련된 서비스 및 쿼리에서 `table_type_columns`를 사용하여 라벨 정보를 조회하도록 변경하였습니다.
- 여러 컨트롤러 및 서비스에서 `column_labels` 대신 `table_type_columns`를 참조하도록 업데이트하였습니다.
This commit is contained in:
DDD1542
2026-01-28 11:24:25 +09:00
parent 1753822211
commit 192b678bce
43 changed files with 7826 additions and 677 deletions

View File

@@ -105,18 +105,6 @@ export const screenApi = {
return response.data;
},
// 화면 수정 (이름, 설명 등)
updateScreen: async (
screenId: number,
data: {
screenName?: string;
description?: string;
tableName?: string;
}
): Promise<void> => {
await apiClient.put(`/screen-management/screens/${screenId}`, data);
},
// 화면 삭제 (휴지통으로 이동)
deleteScreen: async (screenId: number, deleteReason?: string, force?: boolean): Promise<void> => {
await apiClient.delete(`/screen-management/screens/${screenId}`, {
@@ -195,17 +183,36 @@ export const screenApi = {
},
// 화면 레이아웃 저장 (ScreenDesigner_new.tsx용)
saveScreenLayout: async (screenId: number, layoutData: LayoutData): Promise<ApiResponse<void>> => {
saveScreenLayout: async (screenId: number, layoutData: LayoutData): Promise<{ success: boolean; message?: string }> => {
const response = await apiClient.post(`/screen-management/screens/${screenId}/layout`, layoutData);
return response.data;
},
// 화면 레이아웃 조회
// 화면 레이아웃 조회 (기존)
getLayout: async (screenId: number): Promise<LayoutData> => {
const response = await apiClient.get(`/screen-management/screens/${screenId}/layout`);
return response.data.data;
},
// 화면 레이아웃 조회 V1 (component_url + custom_config 기반)
// 🔒 확정: component_url 필수, custom_config에 slot 포함, company_code 필터 적용
getLayoutV1: async (screenId: number): Promise<LayoutData> => {
const response = await apiClient.get(`/screen-management/screens/${screenId}/layout-v1`);
return response.data.data;
},
// 화면 레이아웃 조회 V2 (1 레코드 방식 - url + overrides)
// 🔒 확정: 화면당 1개 레코드, layout_data JSON에 모든 컴포넌트 포함
getLayoutV2: async (screenId: number): Promise<any> => {
const response = await apiClient.get(`/screen-management/screens/${screenId}/layout-v2`);
return response.data.data;
},
// 화면 레이아웃 저장 V2 (1 레코드 방식 - url + overrides)
saveLayoutV2: async (screenId: number, layoutData: any): Promise<void> => {
await apiClient.post(`/screen-management/screens/${screenId}/layout-v2`, layoutData);
},
// 연결된 모달 화면 감지
detectLinkedModals: async (
screenId: number,