뷰어에서 야드 이름 보여주도록 수정

This commit is contained in:
dohyeons 2025-10-17 16:36:51 +09:00
parent d473ace18d
commit f0707f35d8
1 changed files with 25 additions and 10 deletions

View File

@ -31,6 +31,7 @@ interface Yard3DViewerProps {
export default function Yard3DViewer({ layoutId }: Yard3DViewerProps) {
const [placements, setPlacements] = useState<YardPlacement[]>([]);
const [selectedPlacement, setSelectedPlacement] = useState<YardPlacement | null>(null);
const [layoutName, setLayoutName] = useState<string>("");
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
@ -45,27 +46,35 @@ export default function Yard3DViewer({ layoutId }: Yard3DViewerProps) {
console.log("selectedPlacement changed:", selectedPlacement?.material_name);
}, [selectedPlacement]);
// 배치 데이터 로드
// 야드 레이아웃 및 배치 데이터 로드
useEffect(() => {
const loadPlacements = async () => {
const loadData = async () => {
try {
setIsLoading(true);
setError(null);
const response = await yardLayoutApi.getPlacementsByLayoutId(layoutId);
if (response.success) {
setPlacements(response.data);
// 야드 레이아웃 정보 조회
const layoutResponse = await yardLayoutApi.getLayoutById(layoutId);
if (layoutResponse.success) {
setLayoutName(layoutResponse.data.name);
}
// 배치 데이터 조회
const placementsResponse = await yardLayoutApi.getPlacementsByLayoutId(layoutId);
if (placementsResponse.success) {
setPlacements(placementsResponse.data);
} else {
setError("배치 데이터를 불러올 수 없습니다.");
}
} catch (err) {
console.error("배치 데이터 로드 실패:", err);
setError("배치 데이터를 불러오는 중 오류가 발생했습니다.");
console.error("데이터 로드 실패:", err);
setError("데이터를 불러오는 중 오류가 발생했습니다.");
} finally {
setIsLoading(false);
}
};
loadPlacements();
loadData();
}, [layoutId]);
if (isLoading) {
@ -110,14 +119,20 @@ export default function Yard3DViewer({ layoutId }: Yard3DViewerProps) {
onPlacementClick={handlePlacementClick}
/>
{/* 선택된 자재 정보 패널 (오버레이) */}
{/* 야드 이름 (좌측 상단) */}
{layoutName && (
<div className="absolute top-4 left-4 z-50 rounded-lg border border-gray-300 bg-white px-4 py-2 shadow-lg">
<h2 className="text-base font-bold text-gray-900">{layoutName}</h2>
</div>
)}
{/* 선택된 자재 정보 패널 (우측 상단) */}
{selectedPlacement && (
<div className="absolute top-4 right-4 z-50 w-64 rounded-lg border border-gray-300 bg-white p-4 shadow-xl">
<div className="mb-3 flex items-center justify-between">
<h3 className="text-sm font-semibold text-gray-800"> </h3>
<button
onClick={() => {
console.log("Close button clicked");
setSelectedPlacement(null);
}}
className="rounded-full p-1 text-gray-400 hover:bg-gray-100 hover:text-gray-600"