109 lines
3.4 KiB
TypeScript
109 lines
3.4 KiB
TypeScript
/**
|
|
* 렉 구조 컴포넌트 기본 설정
|
|
*/
|
|
|
|
import {
|
|
RackStructureComponentConfig,
|
|
FormatSegment,
|
|
FormatSegmentType,
|
|
LocationFormatConfig,
|
|
} from "./types";
|
|
|
|
// 세그먼트 타입별 한글 표시명
|
|
export const SEGMENT_TYPE_LABELS: Record<FormatSegmentType, string> = {
|
|
warehouseCode: "창고코드",
|
|
floor: "층",
|
|
zone: "구역",
|
|
row: "열",
|
|
level: "단",
|
|
};
|
|
|
|
// 위치코드 기본 세그먼트 (현재 하드코딩과 동일한 결과)
|
|
export const defaultCodeSegments: FormatSegment[] = [
|
|
{ type: "warehouseCode", enabled: true, showLabel: false, label: "", separatorAfter: "-", pad: 0 },
|
|
{ type: "floor", enabled: true, showLabel: true, label: "층", separatorAfter: "", pad: 0 },
|
|
{ type: "zone", enabled: true, showLabel: true, label: "구역", separatorAfter: "-", pad: 0 },
|
|
{ type: "row", enabled: true, showLabel: false, label: "", separatorAfter: "-", pad: 2 },
|
|
{ type: "level", enabled: true, showLabel: false, label: "", separatorAfter: "", pad: 0 },
|
|
];
|
|
|
|
// 위치명 기본 세그먼트 (현재 하드코딩과 동일한 결과)
|
|
export const defaultNameSegments: FormatSegment[] = [
|
|
{ type: "zone", enabled: true, showLabel: true, label: "구역", separatorAfter: "-", pad: 0 },
|
|
{ type: "row", enabled: true, showLabel: true, label: "열", separatorAfter: "-", pad: 2 },
|
|
{ type: "level", enabled: true, showLabel: true, label: "단", separatorAfter: "", pad: 0 },
|
|
];
|
|
|
|
export const defaultFormatConfig: LocationFormatConfig = {
|
|
codeSegments: defaultCodeSegments,
|
|
nameSegments: defaultNameSegments,
|
|
};
|
|
|
|
// 세그먼트 타입별 기본 한글 접미사 (context 값에 포함되어 있는 한글)
|
|
const KNOWN_SUFFIXES: Partial<Record<FormatSegmentType, string>> = {
|
|
floor: "층",
|
|
zone: "구역",
|
|
};
|
|
|
|
// 값에서 알려진 한글 접미사를 제거하여 순수 값만 추출
|
|
function stripKnownSuffix(type: FormatSegmentType, val: string): string {
|
|
const suffix = KNOWN_SUFFIXES[type];
|
|
if (suffix && val.endsWith(suffix)) {
|
|
return val.slice(0, -suffix.length);
|
|
}
|
|
return val;
|
|
}
|
|
|
|
// 세그먼트 배열로 포맷된 문자열 생성
|
|
export function buildFormattedString(
|
|
segments: FormatSegment[],
|
|
values: Record<string, string>,
|
|
): string {
|
|
const activeSegments = segments.filter(
|
|
(seg) => seg.enabled && values[seg.type],
|
|
);
|
|
|
|
return activeSegments
|
|
.map((seg, idx) => {
|
|
// 1) 원본 값에서 한글 접미사를 먼저 벗겨냄 ("A구역" → "A", "1층" → "1")
|
|
let val = stripKnownSuffix(seg.type, values[seg.type]);
|
|
|
|
// 2) showLabel이 켜져 있고 label이 있으면 붙임
|
|
if (seg.showLabel && seg.label) {
|
|
val += seg.label;
|
|
}
|
|
|
|
if (seg.pad > 0 && !isNaN(Number(val))) {
|
|
val = val.padStart(seg.pad, "0");
|
|
}
|
|
|
|
if (idx < activeSegments.length - 1) {
|
|
val += seg.separatorAfter;
|
|
}
|
|
return val;
|
|
})
|
|
.join("");
|
|
}
|
|
|
|
// 미리보기용 샘플 값
|
|
export const SAMPLE_VALUES: Record<string, string> = {
|
|
warehouseCode: "WH001",
|
|
floor: "1층",
|
|
zone: "A구역",
|
|
row: "1",
|
|
level: "1",
|
|
};
|
|
|
|
export const defaultConfig: RackStructureComponentConfig = {
|
|
maxConditions: 10,
|
|
maxRows: 99,
|
|
maxLevels: 20,
|
|
codePattern: "{warehouseCode}-{floor}{zone}-{row:02d}-{level}",
|
|
namePattern: "{zone}구역-{row:02d}열-{level}단",
|
|
showTemplates: true,
|
|
showPreview: true,
|
|
showStatistics: true,
|
|
readonly: false,
|
|
initialConditions: [],
|
|
};
|