에러 수정

This commit is contained in:
kjs
2025-12-18 16:35:55 +09:00
parent 66bd21ee65
commit 84efaed1eb
16 changed files with 331 additions and 82 deletions

View File

@@ -269,7 +269,7 @@ export function UniversalFormModalComponent({
// 설정에 정의된 필드 columnName 목록 수집
const configuredFields = new Set<string>();
config.sections.forEach((section) => {
section.fields.forEach((field) => {
(section.fields || []).forEach((field) => {
if (field.columnName) {
configuredFields.add(field.columnName);
}
@@ -319,7 +319,7 @@ export function UniversalFormModalComponent({
// 모든 섹션의 필드에서 linkedFieldGroup.sourceTable 수집
config.sections.forEach((section) => {
section.fields.forEach((field) => {
(section.fields || []).forEach((field) => {
if (field.linkedFieldGroup?.enabled && field.linkedFieldGroup?.sourceTable) {
tablesToLoad.add(field.linkedFieldGroup.sourceTable);
}
@@ -374,7 +374,7 @@ export function UniversalFormModalComponent({
newRepeatSections[section.id] = items;
} else {
// 일반 섹션 필드 초기화
for (const field of section.fields) {
for (const field of section.fields || []) {
// 기본값 설정
let value = field.defaultValue ?? "";
@@ -405,7 +405,7 @@ export function UniversalFormModalComponent({
console.log(`[initializeForm] 옵셔널 그룹 자동 활성화: ${key}, triggerField=${group.triggerField}, value=${triggerValue}`);
// 활성화된 그룹의 필드값도 초기화
for (const field of group.fields) {
for (const field of group.fields || []) {
let value = field.defaultValue ?? "";
const parentField = field.parentFieldName || field.columnName;
if (effectiveInitialData[parentField] !== undefined) {
@@ -448,7 +448,7 @@ export function UniversalFormModalComponent({
_index: index,
};
for (const field of section.fields) {
for (const field of section.fields || []) {
item[field.columnName] = field.defaultValue ?? "";
}
@@ -481,7 +481,7 @@ export function UniversalFormModalComponent({
for (const section of config.sections) {
if (section.repeatable) continue;
for (const field of section.fields) {
for (const field of section.fields || []) {
if (
field.numberingRule?.enabled &&
field.numberingRule?.generateOnOpen &&
@@ -653,7 +653,7 @@ export function UniversalFormModalComponent({
}
// 옵셔널 필드 그룹 필드 값 초기화
group.fields.forEach((field) => {
(group.fields || []).forEach((field) => {
handleFieldChange(field.columnName, field.defaultValue || "");
});
}, [config, handleFieldChange]);
@@ -783,7 +783,7 @@ export function UniversalFormModalComponent({
for (const section of config.sections) {
if (section.repeatable) continue; // 반복 섹션은 별도 검증
for (const field of section.fields) {
for (const field of section.fields || []) {
if (field.required && !field.hidden && !field.numberingRule?.hidden) {
const value = formData[field.columnName];
if (value === undefined || value === null || value === "") {
@@ -809,7 +809,7 @@ export function UniversalFormModalComponent({
// 저장 시점 채번규칙 처리 (generateOnSave만 처리)
for (const section of config.sections) {
for (const field of section.fields) {
for (const field of section.fields || []) {
if (field.numberingRule?.enabled && field.numberingRule?.generateOnSave && field.numberingRule?.ruleId) {
const response = await allocateNumberingCode(field.numberingRule.ruleId);
if (response.success && response.data?.generatedCode) {
@@ -840,7 +840,7 @@ export function UniversalFormModalComponent({
// 공통 필드가 설정되지 않은 경우, 기본정보 섹션의 모든 필드를 공통 필드로 사용
if (commonFields.length === 0) {
const nonRepeatableSections = config.sections.filter((s) => !s.repeatable);
commonFields = nonRepeatableSections.flatMap((s) => s.fields.map((f) => f.columnName));
commonFields = nonRepeatableSections.flatMap((s) => (s.fields || []).map((f) => f.columnName));
}
// 반복 섹션 ID가 설정되지 않은 경우, 첫 번째 반복 섹션 사용
@@ -886,7 +886,7 @@ export function UniversalFormModalComponent({
// 반복 섹션의 필드 값 추가
const repeatSection = config.sections.find((s) => s.id === repeatSectionId);
repeatSection?.fields.forEach((field) => {
(repeatSection?.fields || []).forEach((field) => {
if (item[field.columnName] !== undefined) {
subRow[field.columnName] = item[field.columnName];
}
@@ -903,7 +903,7 @@ export function UniversalFormModalComponent({
for (const section of config.sections) {
if (section.repeatable) continue;
for (const field of section.fields) {
for (const field of section.fields || []) {
if (field.numberingRule?.enabled && field.numberingRule?.ruleId) {
// generateOnSave 또는 generateOnOpen 모두 저장 시 실제 순번 할당
const shouldAllocate = field.numberingRule.generateOnSave || field.numberingRule.generateOnOpen;
@@ -952,7 +952,7 @@ export function UniversalFormModalComponent({
const mainData: Record<string, any> = {};
config.sections.forEach((section) => {
if (section.repeatable) return; // 반복 섹션은 제외
section.fields.forEach((field) => {
(section.fields || []).forEach((field) => {
const value = formData[field.columnName];
if (value !== undefined && value !== null && value !== "") {
mainData[field.columnName] = value;
@@ -964,7 +964,7 @@ export function UniversalFormModalComponent({
for (const section of config.sections) {
if (section.repeatable) continue;
for (const field of section.fields) {
for (const field of section.fields || []) {
// 채번규칙이 활성화된 필드 처리
if (field.numberingRule?.enabled && field.numberingRule?.ruleId) {
// 신규 생성이거나 값이 없는 경우에만 채번
@@ -1055,7 +1055,7 @@ export function UniversalFormModalComponent({
else {
config.sections.forEach((section) => {
if (section.repeatable) return;
const matchingField = section.fields.find((f) => f.columnName === mapping.targetColumn);
const matchingField = (section.fields || []).find((f) => f.columnName === mapping.targetColumn);
if (matchingField && mainData[matchingField.columnName] !== undefined) {
mainFieldMappings!.push({
formField: matchingField.columnName,
@@ -1560,7 +1560,7 @@ export function UniversalFormModalComponent({
<CardContent>
<div className="grid gap-4" style={{ gridTemplateColumns: `repeat(12, 1fr)` }}>
{/* 일반 필드 렌더링 */}
{section.fields.map((field) =>
{(section.fields || []).map((field) =>
renderFieldWithColumns(
field,
formData[field.columnName],
@@ -1582,7 +1582,7 @@ export function UniversalFormModalComponent({
<CardContent>
<div className="grid gap-4" style={{ gridTemplateColumns: `repeat(12, 1fr)` }}>
{/* 일반 필드 렌더링 */}
{section.fields.map((field) =>
{(section.fields || []).map((field) =>
renderFieldWithColumns(
field,
formData[field.columnName],
@@ -1719,7 +1719,7 @@ export function UniversalFormModalComponent({
</div>
<CollapsibleContent>
<div className="grid gap-3 px-3 pb-3" style={{ gridTemplateColumns: "repeat(12, 1fr)" }}>
{group.fields.map((field) =>
{(group.fields || []).map((field) =>
renderFieldWithColumns(
field,
formData[field.columnName],
@@ -1763,7 +1763,7 @@ export function UniversalFormModalComponent({
</Button>
</div>
<div className="grid gap-3" style={{ gridTemplateColumns: "repeat(12, 1fr)" }}>
{group.fields.map((field) =>
{(group.fields || []).map((field) =>
renderFieldWithColumns(
field,
formData[field.columnName],
@@ -1819,7 +1819,7 @@ export function UniversalFormModalComponent({
</div>
<div className="grid gap-4" style={{ gridTemplateColumns: `repeat(12, 1fr)` }}>
{/* 일반 필드 렌더링 */}
{section.fields.map((field) =>
{(section.fields || []).map((field) =>
renderFieldWithColumns(
field,
item[field.columnName],
@@ -1898,7 +1898,7 @@ export function UniversalFormModalComponent({
<div className="text-muted-foreground text-center">
<p className="font-medium">{config.modal.title || "범용 폼 모달"}</p>
<p className="mt-1 text-xs">
{config.sections.length} |{config.sections.reduce((acc, s) => acc + s.fields.length, 0)}
{config.sections.length} |{config.sections.reduce((acc, s) => acc + (s.fields?.length || 0), 0)}
</p>
<p className="mt-1 text-xs"> : {config.saveConfig.tableName || "(미설정)"}</p>
</div>