116 lines
3.2 KiB
TypeScript
116 lines
3.2 KiB
TypeScript
import { apiClient } from "./client";
|
|
import {
|
|
BarcodeLabelMaster,
|
|
BarcodeLabelLayout,
|
|
GetBarcodeLabelsParams,
|
|
GetBarcodeLabelsResponse,
|
|
CreateBarcodeLabelRequest,
|
|
UpdateBarcodeLabelRequest,
|
|
} from "@/types/barcode";
|
|
|
|
const BASE_URL = "/admin/barcode-labels";
|
|
|
|
export interface BarcodeLabelTemplate {
|
|
template_id: string;
|
|
template_name_kor: string;
|
|
template_name_eng: string | null;
|
|
width_mm: number;
|
|
height_mm: number;
|
|
layout_json: string;
|
|
sort_order: number;
|
|
}
|
|
|
|
export const barcodeApi = {
|
|
/** 바코드 라벨 목록 조회 */
|
|
getLabels: async (params: GetBarcodeLabelsParams) => {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: GetBarcodeLabelsResponse;
|
|
}>(BASE_URL, { params });
|
|
return response.data;
|
|
},
|
|
|
|
/** 바코드 라벨 상세 조회 */
|
|
getLabelById: async (labelId: string) => {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: BarcodeLabelMaster;
|
|
}>(`${BASE_URL}/${labelId}`);
|
|
return response.data;
|
|
},
|
|
|
|
/** 라벨 레이아웃 조회 */
|
|
getLayout: async (labelId: string) => {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: BarcodeLabelLayout;
|
|
}>(`${BASE_URL}/${labelId}/layout`);
|
|
return response.data;
|
|
},
|
|
|
|
/** 라벨 레이아웃 저장 */
|
|
saveLayout: async (labelId: string, layout: BarcodeLabelLayout) => {
|
|
const response = await apiClient.put<{
|
|
success: boolean;
|
|
message: string;
|
|
}>(`${BASE_URL}/${labelId}/layout`, layout);
|
|
return response.data;
|
|
},
|
|
|
|
/** 기본 템플릿 목록 */
|
|
getTemplates: async () => {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: BarcodeLabelTemplate[];
|
|
}>(`${BASE_URL}/templates`);
|
|
return response.data;
|
|
},
|
|
|
|
/** 템플릿 상세 (레이아웃 적용용) */
|
|
getTemplateById: async (templateId: string) => {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: BarcodeLabelTemplate & { layout: BarcodeLabelLayout };
|
|
}>(`${BASE_URL}/templates/${templateId}`);
|
|
return response.data;
|
|
},
|
|
|
|
/** 바코드 라벨 생성 (templateId 선택 시 해당 레이아웃 적용) */
|
|
createLabel: async (data: CreateBarcodeLabelRequest & { templateId?: string }) => {
|
|
const response = await apiClient.post<{
|
|
success: boolean;
|
|
data: { labelId: string };
|
|
message: string;
|
|
}>(BASE_URL, data);
|
|
return response.data;
|
|
},
|
|
|
|
/** 바코드 라벨 수정 */
|
|
updateLabel: async (labelId: string, data: UpdateBarcodeLabelRequest) => {
|
|
const response = await apiClient.put<{
|
|
success: boolean;
|
|
message: string;
|
|
}>(`${BASE_URL}/${labelId}`, data);
|
|
return response.data;
|
|
},
|
|
|
|
/** 바코드 라벨 삭제 */
|
|
deleteLabel: async (labelId: string) => {
|
|
const response = await apiClient.delete<{
|
|
success: boolean;
|
|
message: string;
|
|
}>(`${BASE_URL}/${labelId}`);
|
|
return response.data;
|
|
},
|
|
|
|
/** 바코드 라벨 복사 */
|
|
copyLabel: async (labelId: string) => {
|
|
const response = await apiClient.post<{
|
|
success: boolean;
|
|
data: { labelId: string };
|
|
message: string;
|
|
}>(`${BASE_URL}/${labelId}/copy`);
|
|
return response.data;
|
|
},
|
|
};
|