diff --git a/frontend/components/admin/dashboard/widgets/YardManagement3DWidget.tsx b/frontend/components/admin/dashboard/widgets/YardManagement3DWidget.tsx index b7714aec..c09e7df6 100644 --- a/frontend/components/admin/dashboard/widgets/YardManagement3DWidget.tsx +++ b/frontend/components/admin/dashboard/widgets/YardManagement3DWidget.tsx @@ -15,6 +15,7 @@ interface YardLayout { name: string; description: string; placement_count: number; + created_at: string; updated_at: string; } @@ -41,7 +42,7 @@ export default function YardManagement3DWidget({ setIsLoading(true); const response = await yardLayoutApi.getAllLayouts(); if (response.success) { - setLayouts(response.data); + setLayouts(response.data as YardLayout[]); } } catch (error) { console.error("야드 레이아웃 목록 조회 실패:", error); @@ -73,7 +74,7 @@ export default function YardManagement3DWidget({ if (response.success) { await loadLayouts(); setIsCreateModalOpen(false); - setEditingLayout(response.data); + setEditingLayout(response.data as YardLayout); } } catch (error) { console.error("야드 레이아웃 생성 실패:", error); diff --git a/frontend/components/admin/dashboard/widgets/yard-3d/YardElementConfigPanel.tsx b/frontend/components/admin/dashboard/widgets/yard-3d/YardElementConfigPanel.tsx index 81fcccd4..27c0860f 100644 --- a/frontend/components/admin/dashboard/widgets/yard-3d/YardElementConfigPanel.tsx +++ b/frontend/components/admin/dashboard/widgets/yard-3d/YardElementConfigPanel.tsx @@ -12,7 +12,7 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@ import { Alert, AlertDescription } from "@/components/ui/alert"; import { AlertCircle } from "lucide-react"; import { dashboardApi } from "@/lib/api/dashboard"; -import { ExternalDbConnectionAPI } from "@/lib/api/externalDbConnection"; +import { ExternalDbConnectionAPI, type ExternalDbConnection } from "@/lib/api/externalDbConnection"; import { Textarea } from "@/components/ui/textarea"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; @@ -25,13 +25,13 @@ interface YardElementConfigPanelProps { export default function YardElementConfigPanel({ placement, onSave, onCancel }: YardElementConfigPanelProps) { // 데이터 소스 설정 const [dataSourceType, setDataSourceType] = useState<"database" | "external_db" | "rest_api">( - (placement.data_source_config?.type as any) || "database", + (placement.data_source_config?.type as "database" | "external_db" | "rest_api") || "database", ); const [query, setQuery] = useState(placement.data_source_config?.query || ""); const [externalConnectionId, setExternalConnectionId] = useState( placement.data_source_config?.connectionId?.toString() || "", ); - const [externalConnections, setExternalConnections] = useState([]); + const [externalConnections, setExternalConnections] = useState([]); // REST API 설정 const [apiUrl, setApiUrl] = useState(placement.data_source_config?.url || ""); @@ -60,10 +60,8 @@ export default function YardElementConfigPanel({ placement, onSave, onCancel }: useEffect(() => { const loadConnections = async () => { try { - const response = await ExternalDbConnectionAPI.getAll(); - if (response.success) { - setExternalConnections(response.data || []); - } + const connections = await ExternalDbConnectionAPI.getConnections(); + setExternalConnections(connections || []); } catch (err) { console.error("외부 DB 커넥션 로드 실패:", err); } @@ -90,7 +88,7 @@ export default function YardElementConfigPanel({ placement, onSave, onCancel }: setError(null); try { - let apiResult: { columns: string[]; rows: any[]; rowCount: number }; + let apiResult: { columns: string[]; rows: Record[]; rowCount: number }; if (dataSourceType === "external_db" && externalConnectionId) { const result = await ExternalDbConnectionAPI.executeQuery(parseInt(externalConnectionId), query.trim()); @@ -276,7 +274,10 @@ export default function YardElementConfigPanel({ placement, onSave, onCancel }:

1단계: 데이터 소스 선택

- setDataSourceType(value)}> + setDataSourceType(value as "database" | "external_db" | "rest_api")} + >
@@ -357,7 +358,7 @@ export default function YardElementConfigPanel({ placement, onSave, onCancel }:
- setApiMethod(value as "GET" | "POST")}>