232 lines
5.6 KiB
TypeScript
232 lines
5.6 KiB
TypeScript
|
|
/**
|
||
|
|
* 자동 입력 (Auto-Fill) API 클라이언트
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { apiClient } from "./client";
|
||
|
|
|
||
|
|
// =====================================================
|
||
|
|
// 타입 정의
|
||
|
|
// =====================================================
|
||
|
|
|
||
|
|
export interface AutoFillMapping {
|
||
|
|
mappingId?: number;
|
||
|
|
sourceColumn: string;
|
||
|
|
targetField: string;
|
||
|
|
targetLabel?: string;
|
||
|
|
isEditable?: string;
|
||
|
|
isRequired?: string;
|
||
|
|
defaultValue?: string;
|
||
|
|
sortOrder?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface AutoFillGroup {
|
||
|
|
groupId?: number;
|
||
|
|
groupCode: string;
|
||
|
|
groupName: string;
|
||
|
|
description?: string;
|
||
|
|
masterTable: string;
|
||
|
|
masterValueColumn: string;
|
||
|
|
masterLabelColumn?: string;
|
||
|
|
companyCode?: string;
|
||
|
|
isActive?: string;
|
||
|
|
createdDate?: string;
|
||
|
|
updatedDate?: string;
|
||
|
|
mappingCount?: number;
|
||
|
|
mappings?: AutoFillMapping[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface AutoFillOption {
|
||
|
|
value: string;
|
||
|
|
label: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface AutoFillDataResponse {
|
||
|
|
data: Record<string, any>;
|
||
|
|
mappings: Array<{
|
||
|
|
targetField: string;
|
||
|
|
targetLabel: string;
|
||
|
|
value: any;
|
||
|
|
isEditable: boolean;
|
||
|
|
isRequired: boolean;
|
||
|
|
}>;
|
||
|
|
}
|
||
|
|
|
||
|
|
// =====================================================
|
||
|
|
// API 함수
|
||
|
|
// =====================================================
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 자동 입력 그룹 목록 조회
|
||
|
|
*/
|
||
|
|
export async function getAutoFillGroups(isActive?: string): Promise<{
|
||
|
|
success: boolean;
|
||
|
|
data?: AutoFillGroup[];
|
||
|
|
error?: string;
|
||
|
|
}> {
|
||
|
|
try {
|
||
|
|
const params = new URLSearchParams();
|
||
|
|
if (isActive) params.append("isActive", isActive);
|
||
|
|
|
||
|
|
const response = await apiClient.get(`/cascading-auto-fill/groups?${params.toString()}`);
|
||
|
|
return response.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error("자동 입력 그룹 목록 조회 실패:", error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: error.response?.data?.message || error.message,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 자동 입력 그룹 상세 조회 (매핑 포함)
|
||
|
|
*/
|
||
|
|
export async function getAutoFillGroupDetail(groupCode: string): Promise<{
|
||
|
|
success: boolean;
|
||
|
|
data?: AutoFillGroup;
|
||
|
|
error?: string;
|
||
|
|
}> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.get(`/cascading-auto-fill/groups/${groupCode}`);
|
||
|
|
return response.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error("자동 입력 그룹 상세 조회 실패:", error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: error.response?.data?.message || error.message,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 자동 입력 그룹 생성
|
||
|
|
*/
|
||
|
|
export async function createAutoFillGroup(data: {
|
||
|
|
groupCode: string;
|
||
|
|
groupName: string;
|
||
|
|
description?: string;
|
||
|
|
masterTable: string;
|
||
|
|
masterValueColumn: string;
|
||
|
|
masterLabelColumn?: string;
|
||
|
|
mappings?: AutoFillMapping[];
|
||
|
|
}): Promise<{
|
||
|
|
success: boolean;
|
||
|
|
data?: AutoFillGroup;
|
||
|
|
message?: string;
|
||
|
|
error?: string;
|
||
|
|
}> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.post("/cascading-auto-fill/groups", data);
|
||
|
|
return response.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error("자동 입력 그룹 생성 실패:", error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: error.response?.data?.message || error.message,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 자동 입력 그룹 수정
|
||
|
|
*/
|
||
|
|
export async function updateAutoFillGroup(
|
||
|
|
groupCode: string,
|
||
|
|
data: Partial<AutoFillGroup> & { mappings?: AutoFillMapping[] }
|
||
|
|
): Promise<{
|
||
|
|
success: boolean;
|
||
|
|
data?: AutoFillGroup;
|
||
|
|
message?: string;
|
||
|
|
error?: string;
|
||
|
|
}> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.put(`/cascading-auto-fill/groups/${groupCode}`, data);
|
||
|
|
return response.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error("자동 입력 그룹 수정 실패:", error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: error.response?.data?.message || error.message,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 자동 입력 그룹 삭제
|
||
|
|
*/
|
||
|
|
export async function deleteAutoFillGroup(groupCode: string): Promise<{
|
||
|
|
success: boolean;
|
||
|
|
message?: string;
|
||
|
|
error?: string;
|
||
|
|
}> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.delete(`/cascading-auto-fill/groups/${groupCode}`);
|
||
|
|
return response.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error("자동 입력 그룹 삭제 실패:", error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: error.response?.data?.message || error.message,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 마스터 옵션 목록 조회
|
||
|
|
*/
|
||
|
|
export async function getAutoFillMasterOptions(groupCode: string): Promise<{
|
||
|
|
success: boolean;
|
||
|
|
data?: AutoFillOption[];
|
||
|
|
error?: string;
|
||
|
|
}> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.get(`/cascading-auto-fill/options/${groupCode}`);
|
||
|
|
return response.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error("마스터 옵션 목록 조회 실패:", error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: error.response?.data?.message || error.message,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 자동 입력 데이터 조회
|
||
|
|
* 마스터 값 선택 시 자동으로 입력할 데이터 조회
|
||
|
|
*/
|
||
|
|
export async function getAutoFillData(
|
||
|
|
groupCode: string,
|
||
|
|
masterValue: string
|
||
|
|
): Promise<{
|
||
|
|
success: boolean;
|
||
|
|
data?: Record<string, any>;
|
||
|
|
mappings?: AutoFillDataResponse["mappings"];
|
||
|
|
error?: string;
|
||
|
|
}> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.get(
|
||
|
|
`/cascading-auto-fill/data/${groupCode}?masterValue=${encodeURIComponent(masterValue)}`
|
||
|
|
);
|
||
|
|
return response.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error("자동 입력 데이터 조회 실패:", error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: error.response?.data?.message || error.message,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 편의를 위한 네임스페이스 export
|
||
|
|
export const cascadingAutoFillApi = {
|
||
|
|
getGroups: getAutoFillGroups,
|
||
|
|
getGroupDetail: getAutoFillGroupDetail,
|
||
|
|
createGroup: createAutoFillGroup,
|
||
|
|
updateGroup: updateAutoFillGroup,
|
||
|
|
deleteGroup: deleteAutoFillGroup,
|
||
|
|
getMasterOptions: getAutoFillMasterOptions,
|
||
|
|
getData: getAutoFillData,
|
||
|
|
};
|
||
|
|
|