화면관리 중간 커밋

This commit is contained in:
kjs
2025-09-01 11:48:12 +09:00
parent 6c29c68d10
commit 42dbfd98f8
40 changed files with 5833 additions and 52 deletions

View File

@@ -93,6 +93,15 @@ export default function TableManagementPage() {
description: getTextFromUI(option.descriptionKey, option.value),
}));
// 웹타입 옵션 확인 (디버깅용)
useEffect(() => {
console.log("테이블 타입관리 - 웹타입 옵션 로드됨:", webTypeOptions);
console.log("테이블 타입관리 - 웹타입 옵션 개수:", webTypeOptions.length);
webTypeOptions.forEach((option, index) => {
console.log(`${index + 1}. ${option.value}: ${option.label}`);
});
}, [webTypeOptions]);
// 참조 테이블 옵션 (실제 테이블 목록에서 가져옴)
const referenceTableOptions = [
{ value: "none", label: getTextFromUI(TABLE_MANAGEMENT_KEYS.LABEL_NONE, "선택 안함") },
@@ -258,16 +267,18 @@ export default function TableManagementPage() {
try {
const columnSetting = {
columnName: column.columnName,
columnLabel: column.displayName,
webType: column.webType,
detailSettings: column.detailSettings,
codeCategory: column.codeCategory,
codeValue: column.codeValue,
referenceTable: column.referenceTable,
referenceColumn: column.referenceColumn,
columnName: column.columnName, // 실제 DB 컬럼명 (변경 불가)
columnLabel: column.displayName, // 사용자가 입력한 표시명
webType: column.webType || "text",
detailSettings: column.detailSettings || "",
codeCategory: column.codeCategory || "",
codeValue: column.codeValue || "",
referenceTable: column.referenceTable || "",
referenceColumn: column.referenceColumn || "",
};
console.log("저장할 컬럼 설정:", columnSetting);
const response = await apiClient.post(`/table-management/tables/${selectedTable}/columns/settings`, [
columnSetting,
]);
@@ -276,6 +287,11 @@ export default function TableManagementPage() {
toast.success("컬럼 설정이 성공적으로 저장되었습니다.");
// 원본 데이터 업데이트
setOriginalColumns((prev) => prev.map((col) => (col.columnName === column.columnName ? column : col)));
// 저장 후 데이터 확인을 위해 다시 로드
setTimeout(() => {
loadColumnTypes(selectedTable);
}, 1000);
} else {
toast.error(response.data.message || "컬럼 설정 저장에 실패했습니다.");
}
@@ -292,16 +308,18 @@ export default function TableManagementPage() {
try {
// 모든 컬럼의 설정 데이터 준비
const columnSettings = columns.map((column) => ({
columnName: column.columnName,
columnLabel: column.displayName, // 라벨 추가
webType: column.webType,
detailSettings: column.detailSettings,
codeCategory: column.codeCategory,
codeValue: column.codeValue,
referenceTable: column.referenceTable,
referenceColumn: column.referenceColumn,
columnName: column.columnName, // 실제 DB 컬럼명 (변경 불가)
columnLabel: column.displayName, // 사용자가 입력한 표시명
webType: column.webType || "text",
detailSettings: column.detailSettings || "",
codeCategory: column.codeCategory || "",
codeValue: column.codeValue || "",
referenceTable: column.referenceTable || "",
referenceColumn: column.referenceColumn || "",
}));
console.log("저장할 전체 컬럼 설정:", columnSettings);
// 전체 테이블 설정을 한 번에 저장
const response = await apiClient.post(
`/table-management/tables/${selectedTable}/columns/settings`,
@@ -312,6 +330,11 @@ export default function TableManagementPage() {
// 저장 성공 후 원본 데이터 업데이트
setOriginalColumns([...columns]);
toast.success(`${columns.length}개의 컬럼 설정이 성공적으로 저장되었습니다.`);
// 저장 후 데이터 확인을 위해 다시 로드
setTimeout(() => {
loadColumnTypes(selectedTable);
}, 1000);
} else {
toast.error(response.data.message || "컬럼 설정 저장에 실패했습니다.");
}
@@ -503,24 +526,30 @@ export default function TableManagementPage() {
</TableCell>
<TableCell className="font-mono text-sm">{column.dbType}</TableCell>
<TableCell>
<Select
value={column.webType || "text"}
onValueChange={(value) => handleWebTypeChange(column.columnName, value)}
>
<SelectTrigger className="w-32">
<SelectValue />
</SelectTrigger>
<SelectContent>
{webTypeOptions.map((option) => (
<SelectItem key={option.value} value={option.value}>
<div>
<div className="font-medium">{option.label}</div>
<div className="text-xs text-gray-500">{option.description}</div>
</div>
</SelectItem>
))}
</SelectContent>
</Select>
<div className="space-y-2">
<Select
value={column.webType || "text"}
onValueChange={(value) => handleWebTypeChange(column.columnName, value)}
>
<SelectTrigger className="w-32">
<SelectValue />
</SelectTrigger>
<SelectContent>
{webTypeOptions.map((option) => (
<SelectItem key={option.value} value={option.value}>
<div>
<div className="font-medium">{option.label}</div>
<div className="text-xs text-gray-500">{option.description}</div>
</div>
</SelectItem>
))}
</SelectContent>
</Select>
{/* 웹타입 옵션 개수 표시 */}
<div className="text-xs text-gray-500">
: {webTypeOptions.length}
</div>
</div>
</TableCell>
<TableCell>
<Input