refactor(WEB): URL 경로 juil → construction 변경

- /juil/ 경로를 /construction/으로 변경
- 컴포넌트 폴더명 juil → construction 변경
- 컴포넌트명 Juil* → Construction* 변경
- 테스트 URL 페이지 경로 업데이트
- claudedocs 문서 경로 업데이트

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
byeongcheolryu
2026-01-08 17:13:22 +09:00
parent 8812290f8a
commit 387672b5b2
165 changed files with 284 additions and 284 deletions

View File

@@ -1,19 +1,19 @@
'use client';
import { Suspense } from "react";
import { JuilMainDashboard } from "./JuilMainDashboard";
import { ConstructionMainDashboard } from "./ConstructionMainDashboard";
import { PageLoadingSpinner } from "@/components/ui/loading-spinner";
/**
* JuilDashboard -
* ConstructionDashboard -
*
* / .
*/
export function JuilDashboard() {
console.log('🏗️ Juil Dashboard rendering...');
export function ConstructionDashboard() {
console.log('🏗️ Construction Dashboard rendering...');
return (
<Suspense fallback={<PageLoadingSpinner text="공사 현황을 불러오는 중..." />}>
<JuilMainDashboard />
<ConstructionMainDashboard />
</Suspense>
);
}

View File

@@ -20,7 +20,7 @@ import {
Hammer
} from "lucide-react";
export function JuilMainDashboard() {
export function ConstructionMainDashboard() {
const currentTime = useCurrentTime();
// 가상 데이터: 건설 프로젝트 현황

View File

@@ -137,15 +137,15 @@ export default function BiddingDetailForm({
// 네비게이션 핸들러
const handleBack = useCallback(() => {
router.push('/ko/juil/project/bidding');
router.push('/ko/construction/project/bidding');
}, [router]);
const handleEdit = useCallback(() => {
router.push(`/ko/juil/project/bidding/${biddingId}/edit`);
router.push(`/ko/construction/project/bidding/${biddingId}/edit`);
}, [router, biddingId]);
const handleCancel = useCallback(() => {
router.push(`/ko/juil/project/bidding/${biddingId}`);
router.push(`/ko/construction/project/bidding/${biddingId}`);
}, [router, biddingId]);
// 저장 핸들러
@@ -160,7 +160,7 @@ export default function BiddingDetailForm({
if (result.success) {
toast.success('수정이 완료되었습니다.');
setShowSaveDialog(false);
router.push(`/ko/juil/project/bidding/${biddingId}`);
router.push(`/ko/construction/project/bidding/${biddingId}`);
router.refresh();
} else {
toast.error(result.error || '저장에 실패했습니다.');

View File

@@ -260,7 +260,7 @@ export default function BiddingListClient({ initialData = [], initialStats }: Bi
const handleRowClick = useCallback(
(bidding: Bidding) => {
router.push(`/ko/juil/project/bidding/${bidding.id}`);
router.push(`/ko/construction/project/bidding/${bidding.id}`);
},
[router]
);
@@ -268,7 +268,7 @@ export default function BiddingListClient({ initialData = [], initialStats }: Bi
const handleEdit = useCallback(
(e: React.MouseEvent, biddingId: string) => {
e.stopPropagation();
router.push(`/ko/juil/project/bidding/${biddingId}/edit`);
router.push(`/ko/construction/project/bidding/${biddingId}/edit`);
},
[router]
);

View File

@@ -113,15 +113,15 @@ export default function ContractDetailForm({
// 네비게이션 핸들러
const handleBack = useCallback(() => {
router.push('/ko/juil/project/contract');
router.push('/ko/construction/project/contract');
}, [router]);
const handleEdit = useCallback(() => {
router.push(`/ko/juil/project/contract/${contractId}/edit`);
router.push(`/ko/construction/project/contract/${contractId}/edit`);
}, [router, contractId]);
const handleCancel = useCallback(() => {
router.push(`/ko/juil/project/contract/${contractId}`);
router.push(`/ko/construction/project/contract/${contractId}`);
}, [router, contractId]);
// 폼 필드 변경
@@ -144,7 +144,7 @@ export default function ContractDetailForm({
if (result.success) {
toast.success('수정이 완료되었습니다.');
setShowSaveDialog(false);
router.push(`/ko/juil/project/contract/${contractId}`);
router.push(`/ko/construction/project/contract/${contractId}`);
router.refresh();
} else {
toast.error(result.error || '저장에 실패했습니다.');
@@ -168,7 +168,7 @@ export default function ContractDetailForm({
if (result.success) {
toast.success('계약이 삭제되었습니다.');
setShowDeleteDialog(false);
router.push('/ko/juil/project/contract');
router.push('/ko/construction/project/contract');
router.refresh();
} else {
toast.error(result.error || '삭제에 실패했습니다.');

View File

@@ -275,7 +275,7 @@ export default function ContractListClient({
const handleRowClick = useCallback(
(contract: Contract) => {
router.push(`/ko/juil/project/contract/${contract.id}`);
router.push(`/ko/construction/project/contract/${contract.id}`);
},
[router]
);
@@ -283,7 +283,7 @@ export default function ContractListClient({
const handleEdit = useCallback(
(e: React.MouseEvent, contractId: string) => {
e.stopPropagation();
router.push(`/ko/juil/project/contract/${contractId}/edit`);
router.push(`/ko/construction/project/contract/${contractId}/edit`);
},
[router]
);

View File

@@ -92,15 +92,15 @@ export default function EstimateDetailForm({
// ===== 네비게이션 핸들러 =====
const handleBack = useCallback(() => {
router.push('/ko/juil/project/bidding/estimates');
router.push('/ko/construction/project/bidding/estimates');
}, [router]);
const handleEdit = useCallback(() => {
router.push(`/ko/juil/project/bidding/estimates/${estimateId}/edit`);
router.push(`/ko/construction/project/bidding/estimates/${estimateId}/edit`);
}, [router, estimateId]);
const handleCancel = useCallback(() => {
router.push(`/ko/juil/project/bidding/estimates/${estimateId}`);
router.push(`/ko/construction/project/bidding/estimates/${estimateId}`);
}, [router, estimateId]);
// ===== 저장/삭제 핸들러 =====
@@ -114,7 +114,7 @@ export default function EstimateDetailForm({
await new Promise((resolve) => setTimeout(resolve, 1000));
toast.success('수정이 완료되었습니다.');
setShowSaveDialog(false);
router.push(`/ko/juil/project/bidding/estimates/${estimateId}`);
router.push(`/ko/construction/project/bidding/estimates/${estimateId}`);
router.refresh();
} catch (error) {
toast.error(error instanceof Error ? error.message : '저장에 실패했습니다.');
@@ -133,7 +133,7 @@ export default function EstimateDetailForm({
await new Promise((resolve) => setTimeout(resolve, 1000));
toast.success('견적이 삭제되었습니다.');
setShowDeleteDialog(false);
router.push('/ko/juil/project/bidding/estimates');
router.push('/ko/construction/project/bidding/estimates');
router.refresh();
} catch (error) {
toast.error(error instanceof Error ? error.message : '삭제에 실패했습니다.');

View File

@@ -240,7 +240,7 @@ export default function EstimateListClient({ initialData = [], initialStats }: E
const handleRowClick = useCallback(
(estimate: Estimate) => {
router.push(`/ko/juil/project/bidding/estimates/${estimate.id}`);
router.push(`/ko/construction/project/bidding/estimates/${estimate.id}`);
},
[router]
);
@@ -248,7 +248,7 @@ export default function EstimateListClient({ initialData = [], initialStats }: E
const handleEdit = useCallback(
(e: React.MouseEvent, estimateId: string) => {
e.stopPropagation();
router.push(`/ko/juil/project/bidding/estimates/${estimateId}/edit`);
router.push(`/ko/construction/project/bidding/estimates/${estimateId}/edit`);
},
[router]
);

View File

@@ -74,7 +74,7 @@ export function EstimateDocumentModal({
const handleEdit = useCallback(() => {
if (estimateId) {
onClose();
router.push(`/ko/juil/project/bidding/estimates/${estimateId}/edit`);
router.push(`/ko/construction/project/bidding/estimates/${estimateId}/edit`);
}
}, [estimateId, onClose, router]);

View File

@@ -102,15 +102,15 @@ export default function HandoverReportDetailForm({
// 네비게이션 핸들러
const handleBack = useCallback(() => {
router.push('/ko/juil/project/contract/handover-report');
router.push('/ko/construction/project/contract/handover-report');
}, [router]);
const handleEdit = useCallback(() => {
router.push(`/ko/juil/project/contract/handover-report/${reportId}/edit`);
router.push(`/ko/construction/project/contract/handover-report/${reportId}/edit`);
}, [router, reportId]);
const handleCancel = useCallback(() => {
router.push(`/ko/juil/project/contract/handover-report/${reportId}`);
router.push(`/ko/construction/project/contract/handover-report/${reportId}`);
}, [router, reportId]);
// 폼 필드 변경
@@ -133,7 +133,7 @@ export default function HandoverReportDetailForm({
if (result.success) {
toast.success('수정이 완료되었습니다.');
setShowSaveDialog(false);
router.push(`/ko/juil/project/contract/handover-report/${reportId}`);
router.push(`/ko/construction/project/contract/handover-report/${reportId}`);
router.refresh();
} else {
toast.error(result.error || '저장에 실패했습니다.');
@@ -157,7 +157,7 @@ export default function HandoverReportDetailForm({
if (result.success) {
toast.success('인수인계보고서가 삭제되었습니다.');
setShowDeleteDialog(false);
router.push('/ko/juil/project/contract/handover-report');
router.push('/ko/construction/project/contract/handover-report');
router.refresh();
} else {
toast.error(result.error || '삭제에 실패했습니다.');

View File

@@ -259,7 +259,7 @@ export default function HandoverReportListClient({
const handleRowClick = useCallback(
(report: HandoverReport) => {
router.push(`/ko/juil/project/contract/handover-report/${report.id}`);
router.push(`/ko/construction/project/contract/handover-report/${report.id}`);
},
[router]
);
@@ -267,7 +267,7 @@ export default function HandoverReportListClient({
const handleEdit = useCallback(
(e: React.MouseEvent, reportId: string) => {
e.stopPropagation();
router.push(`/ko/juil/project/contract/handover-report/${reportId}/edit`);
router.push(`/ko/construction/project/contract/handover-report/${reportId}/edit`);
},
[router]
);

View File

@@ -58,7 +58,7 @@ export function HandoverReportDocumentModal({
// 수정
const handleEdit = () => {
onOpenChange(false);
router.push(`/ko/juil/project/contract/handover-report/${report.id}/edit`);
router.push(`/ko/construction/project/contract/handover-report/${report.id}/edit`);
};
// 삭제

View File

@@ -114,11 +114,11 @@ export default function ItemDetailClient({
});
} else {
toast.error(result.error || '품목 정보를 불러오는데 실패했습니다.');
router.push('/ko/juil/order/base-info/items');
router.push('/ko/construction/order/base-info/items');
}
} catch {
toast.error('품목 정보를 불러오는데 실패했습니다.');
router.push('/ko/juil/order/base-info/items');
router.push('/ko/construction/order/base-info/items');
} finally {
setIsLoading(false);
}
@@ -187,7 +187,7 @@ export default function ItemDetailClient({
const result = await createItem(formData);
if (result.success && result.data) {
toast.success('품목이 등록되었습니다.');
router.push(`/ko/juil/order/base-info/items/${result.data.id}`);
router.push(`/ko/construction/order/base-info/items/${result.data.id}`);
} else {
toast.error(result.error || '품목 등록에 실패했습니다.');
}
@@ -221,7 +221,7 @@ export default function ItemDetailClient({
const result = await deleteItem(itemId);
if (result.success) {
toast.success('품목이 삭제되었습니다.');
router.push('/ko/juil/order/base-info/items');
router.push('/ko/construction/order/base-info/items');
} else {
toast.error(result.error || '품목 삭제에 실패했습니다.');
}
@@ -236,18 +236,18 @@ export default function ItemDetailClient({
// 수정 모드 전환
const handleEditMode = useCallback(() => {
setMode('edit');
router.replace(`/ko/juil/order/base-info/items/${itemId}?mode=edit`);
router.replace(`/ko/construction/order/base-info/items/${itemId}?mode=edit`);
}, [itemId, router]);
// 목록으로 이동
const handleBack = useCallback(() => {
router.push('/ko/juil/order/base-info/items');
router.push('/ko/construction/order/base-info/items');
}, [router]);
// 취소
const handleCancel = useCallback(() => {
if (mode === 'new') {
router.push('/ko/juil/order/base-info/items');
router.push('/ko/construction/order/base-info/items');
} else {
setMode('view');
// 원본 데이터로 복원
@@ -265,7 +265,7 @@ export default function ItemDetailClient({
orderItems: originalData.orderItems || [],
});
}
router.replace(`/ko/juil/order/base-info/items/${itemId}`);
router.replace(`/ko/construction/order/base-info/items/${itemId}`);
}
}, [mode, itemId, originalData, router]);

View File

@@ -227,19 +227,19 @@ export default function ItemManagementClient({
const handleRowClick = useCallback(
(item: Item) => {
router.push(`/ko/juil/order/base-info/items/${item.id}`);
router.push(`/ko/construction/order/base-info/items/${item.id}`);
},
[router]
);
const handleCreate = useCallback(() => {
router.push('/ko/juil/order/base-info/items/new');
router.push('/ko/construction/order/base-info/items/new');
}, [router]);
const handleEdit = useCallback(
(e: React.MouseEvent, itemId: string) => {
e.stopPropagation();
router.push(`/ko/juil/order/base-info/items/${itemId}?mode=edit`);
router.push(`/ko/construction/order/base-info/items/${itemId}?mode=edit`);
},
[router]
);

View File

@@ -86,11 +86,11 @@ export default function LaborDetailClient({
});
} else {
toast.error(result.error || '노임 정보를 불러오는데 실패했습니다.');
router.push('/ko/juil/order/base-info/labor');
router.push('/ko/construction/order/base-info/labor');
}
} catch {
toast.error('노임 정보를 불러오는데 실패했습니다.');
router.push('/ko/juil/order/base-info/labor');
router.push('/ko/construction/order/base-info/labor');
} finally {
setIsLoading(false);
}
@@ -140,7 +140,7 @@ export default function LaborDetailClient({
const result = await createLabor(formData);
if (result.success && result.data) {
toast.success('노임이 등록되었습니다.');
router.push(`/ko/juil/order/base-info/labor/${result.data.id}`);
router.push(`/ko/construction/order/base-info/labor/${result.data.id}`);
} else {
toast.error(result.error || '노임 등록에 실패했습니다.');
}
@@ -174,7 +174,7 @@ export default function LaborDetailClient({
const result = await deleteLabor(laborId);
if (result.success) {
toast.success('노임이 삭제되었습니다.');
router.push('/ko/juil/order/base-info/labor');
router.push('/ko/construction/order/base-info/labor');
} else {
toast.error(result.error || '노임 삭제에 실패했습니다.');
}
@@ -189,18 +189,18 @@ export default function LaborDetailClient({
// 수정 모드 전환
const handleEditMode = useCallback(() => {
setMode('edit');
router.replace(`/ko/juil/order/base-info/labor/${laborId}?mode=edit`);
router.replace(`/ko/construction/order/base-info/labor/${laborId}?mode=edit`);
}, [laborId, router]);
// 목록으로 이동
const handleBack = useCallback(() => {
router.push('/ko/juil/order/base-info/labor');
router.push('/ko/construction/order/base-info/labor');
}, [router]);
// 취소
const handleCancel = useCallback(() => {
if (mode === 'new') {
router.push('/ko/juil/order/base-info/labor');
router.push('/ko/construction/order/base-info/labor');
} else {
setMode('view');
// 원본 데이터로 복원
@@ -214,7 +214,7 @@ export default function LaborDetailClient({
status: originalData.status,
});
}
router.replace(`/ko/juil/order/base-info/labor/${laborId}`);
router.replace(`/ko/construction/order/base-info/labor/${laborId}`);
}
}, [mode, laborId, originalData, router]);

View File

@@ -182,19 +182,19 @@ export default function LaborManagementClient({
const handleRowClick = useCallback(
(labor: Labor) => {
router.push(`/ko/juil/order/base-info/labor/${labor.id}`);
router.push(`/ko/construction/order/base-info/labor/${labor.id}`);
},
[router]
);
const handleCreate = useCallback(() => {
router.push('/ko/juil/order/base-info/labor/new');
router.push('/ko/construction/order/base-info/labor/new');
}, [router]);
const handleEdit = useCallback(
(e: React.MouseEvent, laborId: string) => {
e.stopPropagation();
router.push(`/ko/juil/order/base-info/labor/${laborId}?mode=edit`);
router.push(`/ko/construction/order/base-info/labor/${laborId}?mode=edit`);
},
[router]
);

View File

@@ -351,7 +351,7 @@ export default function OrderManagementListClient({
const handleRowClick = useCallback(
(order: Order) => {
router.push(`/ko/juil/order/order-management/${order.id}`);
router.push(`/ko/construction/order/order-management/${order.id}`);
},
[router]
);
@@ -359,7 +359,7 @@ export default function OrderManagementListClient({
const handleEdit = useCallback(
(e: React.MouseEvent, orderId: string) => {
e.stopPropagation();
router.push(`/ko/juil/order/order-management/${orderId}/edit`);
router.push(`/ko/construction/order/order-management/${orderId}/edit`);
},
[router]
);
@@ -427,7 +427,7 @@ export default function OrderManagementListClient({
}, [selectedItems, loadData]);
const handleRegister = useCallback(() => {
router.push('/ko/juil/order/order-management/new');
router.push('/ko/construction/order/order-management/new');
}, [router]);
// 달력 이벤트 핸들러
@@ -443,7 +443,7 @@ export default function OrderManagementListClient({
const handleCalendarEventClick = useCallback((event: ScheduleEvent) => {
if (event.data) {
router.push(`/ko/juil/order/order-management/${event.id}`);
router.push(`/ko/construction/order/order-management/${event.id}`);
}
}, [router]);

View File

@@ -154,15 +154,15 @@ export function useOrderDetailForm({
// Navigation handlers
// ============================================
const handleBack = useCallback(() => {
router.push('/ko/juil/order/order-management');
router.push('/ko/construction/order/order-management');
}, [router]);
const handleEdit = useCallback(() => {
router.push(`/ko/juil/order/order-management/${orderId}/edit`);
router.push(`/ko/construction/order/order-management/${orderId}/edit`);
}, [router, orderId]);
const handleCancel = useCallback(() => {
router.push(`/ko/juil/order/order-management/${orderId}`);
router.push(`/ko/construction/order/order-management/${orderId}`);
}, [router, orderId]);
// ============================================
@@ -192,7 +192,7 @@ export function useOrderDetailForm({
if (result.success) {
toast.success('수정이 완료되었습니다.');
setShowSaveDialog(false);
router.push(`/ko/juil/order/order-management/${orderId}`);
router.push(`/ko/construction/order/order-management/${orderId}`);
router.refresh();
} else {
toast.error(result.error || '저장에 실패했습니다.');
@@ -218,7 +218,7 @@ export function useOrderDetailForm({
if (result.success) {
toast.success('발주가 삭제되었습니다.');
setShowDeleteDialog(false);
router.push('/ko/juil/order/order-management');
router.push('/ko/construction/order/order-management');
router.refresh();
} else {
toast.error(result.error || '삭제에 실패했습니다.');
@@ -239,7 +239,7 @@ export function useOrderDetailForm({
const result = await duplicateOrder(orderId);
if (result.success && result.newId) {
toast.success('발주가 복제되었습니다.');
router.push(`/ko/juil/order/order-management/${result.newId}/edit`);
router.push(`/ko/construction/order/order-management/${result.newId}/edit`);
} else {
toast.error(result.error || '복제에 실패했습니다.');
}

View File

@@ -58,7 +58,7 @@ export function OrderDocumentModal({
// 수정
const handleEdit = () => {
onOpenChange(false);
router.push(`/ko/juil/order/order-management/${order.id}/edit`);
router.push(`/ko/construction/order/order-management/${order.id}/edit`);
};
// 삭제

View File

@@ -131,18 +131,18 @@ export default function PartnerForm({ mode, partnerId, initialData }: PartnerFor
// 네비게이션 핸들러
const handleBack = useCallback(() => {
router.push('/ko/juil/project/bidding/partners');
router.push('/ko/construction/project/bidding/partners');
}, [router]);
const handleEdit = useCallback(() => {
router.push(`/ko/juil/project/bidding/partners/${partnerId}/edit`);
router.push(`/ko/construction/project/bidding/partners/${partnerId}/edit`);
}, [router, partnerId]);
const handleCancel = useCallback(() => {
if (isNewMode) {
router.push('/ko/juil/project/bidding/partners');
router.push('/ko/construction/project/bidding/partners');
} else {
router.push(`/ko/juil/project/bidding/partners/${partnerId}`);
router.push(`/ko/construction/project/bidding/partners/${partnerId}`);
}
}, [router, partnerId, isNewMode]);
@@ -162,7 +162,7 @@ export default function PartnerForm({ mode, partnerId, initialData }: PartnerFor
await new Promise((resolve) => setTimeout(resolve, 1000));
toast.success(isNewMode ? '거래처가 등록되었습니다.' : '수정이 완료되었습니다.');
setShowSaveDialog(false);
router.push('/ko/juil/project/bidding/partners');
router.push('/ko/construction/project/bidding/partners');
router.refresh();
} catch (error) {
toast.error(error instanceof Error ? error.message : '저장에 실패했습니다.');
@@ -183,7 +183,7 @@ export default function PartnerForm({ mode, partnerId, initialData }: PartnerFor
await new Promise((resolve) => setTimeout(resolve, 1000));
toast.success('거래처가 삭제되었습니다.');
setShowDeleteDialog(false);
router.push('/ko/juil/project/bidding/partners');
router.push('/ko/construction/project/bidding/partners');
router.refresh();
} catch (error) {
toast.error(error instanceof Error ? error.message : '삭제에 실패했습니다.');

View File

@@ -202,19 +202,19 @@ export default function PartnerListClient({ initialData = [], initialStats }: Pa
const handleRowClick = useCallback(
(partner: Partner) => {
router.push(`/ko/juil/project/bidding/partners/${partner.id}`);
router.push(`/ko/construction/project/bidding/partners/${partner.id}`);
},
[router]
);
const handleCreate = useCallback(() => {
router.push('/ko/juil/project/bidding/partners/new');
router.push('/ko/construction/project/bidding/partners/new');
}, [router]);
const handleEdit = useCallback(
(e: React.MouseEvent, partnerId: string) => {
e.stopPropagation();
router.push(`/ko/juil/project/bidding/partners/${partnerId}/edit`);
router.push(`/ko/construction/project/bidding/partners/${partnerId}/edit`);
},
[router]
);

View File

@@ -117,7 +117,7 @@ export default function PricingDetailClient({ id, mode }: PricingDetailClientPro
});
} else {
toast.error(result.error || '데이터를 불러올 수 없습니다.');
router.push('/ko/juil/order/base-info/pricing');
router.push('/ko/construction/order/base-info/pricing');
}
}
} catch {
@@ -193,7 +193,7 @@ export default function PricingDetailClient({ id, mode }: PricingDetailClientPro
if (result.success) {
toast.success('단가가 등록되었습니다.');
router.push('/ko/juil/order/base-info/pricing');
router.push('/ko/construction/order/base-info/pricing');
} else {
toast.error(result.error || '등록에 실패했습니다.');
}
@@ -208,7 +208,7 @@ export default function PricingDetailClient({ id, mode }: PricingDetailClientPro
if (result.success) {
toast.success('단가가 수정되었습니다.');
router.push(`/ko/juil/order/base-info/pricing/${id}`);
router.push(`/ko/construction/order/base-info/pricing/${id}`);
} else {
toast.error(result.error || '수정에 실패했습니다.');
}
@@ -229,7 +229,7 @@ export default function PricingDetailClient({ id, mode }: PricingDetailClientPro
const result = await deletePricing(id);
if (result.success) {
toast.success('단가가 삭제되었습니다.');
router.push('/ko/juil/order/base-info/pricing');
router.push('/ko/construction/order/base-info/pricing');
} else {
toast.error(result.error || '삭제에 실패했습니다.');
}
@@ -244,22 +244,22 @@ export default function PricingDetailClient({ id, mode }: PricingDetailClientPro
// 수정 페이지로 이동
const handleEdit = useCallback(() => {
if (id) {
router.push(`/ko/juil/order/base-info/pricing/${id}/edit`);
router.push(`/ko/construction/order/base-info/pricing/${id}/edit`);
}
}, [id, router]);
// 취소
const handleCancel = useCallback(() => {
if (isCreateMode) {
router.push('/ko/juil/order/base-info/pricing');
router.push('/ko/construction/order/base-info/pricing');
} else if (isEditMode && id) {
router.push(`/ko/juil/order/base-info/pricing/${id}`);
router.push(`/ko/construction/order/base-info/pricing/${id}`);
}
}, [isCreateMode, isEditMode, id, router]);
// 목록으로 이동
const handleBack = useCallback(() => {
router.push('/ko/juil/order/base-info/pricing');
router.push('/ko/construction/order/base-info/pricing');
}, [router]);
// 숫자 포맷

View File

@@ -210,7 +210,7 @@ export default function PricingListClient({
const handleRowClick = useCallback(
(pricing: Pricing) => {
router.push(`/ko/juil/order/base-info/pricing/${pricing.id}`);
router.push(`/ko/construction/order/base-info/pricing/${pricing.id}`);
},
[router]
);
@@ -218,7 +218,7 @@ export default function PricingListClient({
const handleEdit = useCallback(
(e: React.MouseEvent, pricingId: string) => {
e.stopPropagation();
router.push(`/ko/juil/order/base-info/pricing/${pricingId}/edit`);
router.push(`/ko/construction/order/base-info/pricing/${pricingId}/edit`);
},
[router]
);
@@ -286,7 +286,7 @@ export default function PricingListClient({
}, [selectedItems, loadData]);
const handleRegister = useCallback(() => {
router.push('/ko/juil/order/base-info/pricing/new');
router.push('/ko/construction/order/base-info/pricing/new');
}, [router]);
// 숫자 포맷

View File

@@ -124,18 +124,18 @@ export default function SiteBriefingForm({ mode, briefingId, initialData }: Site
// 네비게이션 핸들러
const handleBack = useCallback(() => {
router.push('/ko/juil/project/bidding/site-briefings');
router.push('/ko/construction/project/bidding/site-briefings');
}, [router]);
const handleEdit = useCallback(() => {
router.push(`/ko/juil/project/bidding/site-briefings/${briefingId}/edit`);
router.push(`/ko/construction/project/bidding/site-briefings/${briefingId}/edit`);
}, [router, briefingId]);
const handleCancel = useCallback(() => {
if (isNewMode) {
router.push('/ko/juil/project/bidding/site-briefings');
router.push('/ko/construction/project/bidding/site-briefings');
} else {
router.push(`/ko/juil/project/bidding/site-briefings/${briefingId}`);
router.push(`/ko/construction/project/bidding/site-briefings/${briefingId}`);
}
}, [router, briefingId, isNewMode]);
@@ -155,7 +155,7 @@ export default function SiteBriefingForm({ mode, briefingId, initialData }: Site
await new Promise((resolve) => setTimeout(resolve, 1000));
toast.success(isNewMode ? '현장설명회가 등록되었습니다.' : '수정이 완료되었습니다.');
setShowSaveDialog(false);
router.push('/ko/juil/project/bidding/site-briefings');
router.push('/ko/construction/project/bidding/site-briefings');
router.refresh();
} catch (error) {
toast.error(error instanceof Error ? error.message : '저장에 실패했습니다.');
@@ -176,7 +176,7 @@ export default function SiteBriefingForm({ mode, briefingId, initialData }: Site
await new Promise((resolve) => setTimeout(resolve, 1000));
toast.success('현장설명회가 삭제되었습니다.');
setShowDeleteDialog(false);
router.push('/ko/juil/project/bidding/site-briefings');
router.push('/ko/construction/project/bidding/site-briefings');
router.refresh();
} catch (error) {
toast.error(error instanceof Error ? error.message : '삭제에 실패했습니다.');

View File

@@ -265,19 +265,19 @@ export default function SiteBriefingListClient({ initialData = [] }: SiteBriefin
const handleRowClick = useCallback(
(briefing: SiteBriefing) => {
router.push(`/ko/juil/project/bidding/site-briefings/${briefing.id}`);
router.push(`/ko/construction/project/bidding/site-briefings/${briefing.id}`);
},
[router]
);
const handleCreate = useCallback(() => {
router.push('/ko/juil/project/bidding/site-briefings/new');
router.push('/ko/construction/project/bidding/site-briefings/new');
}, [router]);
const handleEdit = useCallback(
(e: React.MouseEvent, briefingId: string) => {
e.stopPropagation();
router.push(`/ko/juil/project/bidding/site-briefings/${briefingId}/edit`);
router.push(`/ko/construction/project/bidding/site-briefings/${briefingId}/edit`);
},
[router]
);

View File

@@ -116,7 +116,7 @@ export default function SiteDetailForm({ site, mode = 'view' }: SiteDetailFormPr
// 수정 버튼 클릭
const handleEditClick = useCallback(() => {
if (site?.id) {
router.push(`/ko/juil/order/site-management/${site.id}/edit`);
router.push(`/ko/construction/order/site-management/${site.id}/edit`);
}
}, [router, site?.id]);
@@ -132,7 +132,7 @@ export default function SiteDetailForm({ site, mode = 'view' }: SiteDetailFormPr
// TODO: API 연동
await new Promise((resolve) => setTimeout(resolve, 1000));
toast.success('저장되었습니다.');
router.push('/ko/juil/order/site-management');
router.push('/ko/construction/order/site-management');
} catch {
toast.error('저장에 실패했습니다.');
} finally {
@@ -227,7 +227,7 @@ export default function SiteDetailForm({ site, mode = 'view' }: SiteDetailFormPr
actions={
!isEditMode ? (
<>
<Button variant="outline" onClick={() => router.push('/ko/juil/order/site-management')}>
<Button variant="outline" onClick={() => router.push('/ko/construction/order/site-management')}>
<List className="h-4 w-4 mr-2" />
</Button>

View File

@@ -208,7 +208,7 @@ export default function SiteManagementListClient({
const handleRowClick = useCallback(
(site: Site) => {
router.push(`/ko/juil/order/site-management/${site.id}`);
router.push(`/ko/construction/order/site-management/${site.id}`);
},
[router]
);
@@ -216,7 +216,7 @@ export default function SiteManagementListClient({
const handleEdit = useCallback(
(e: React.MouseEvent, siteId: string) => {
e.stopPropagation();
router.push(`/ko/juil/order/site-management/${siteId}/edit`);
router.push(`/ko/construction/order/site-management/${siteId}/edit`);
},
[router]
);

View File

@@ -125,7 +125,7 @@ export default function StructureReviewDetailForm({
// 수정 버튼 클릭
const handleEditClick = useCallback(() => {
if (review?.id) {
router.push(`/ko/juil/order/structure-review/${review.id}/edit`);
router.push(`/ko/construction/order/structure-review/${review.id}/edit`);
}
}, [router, review?.id]);
@@ -145,7 +145,7 @@ export default function StructureReviewDetailForm({
// TODO: API 연동
await new Promise((resolve) => setTimeout(resolve, 1000));
toast.success('저장되었습니다.');
router.push('/ko/juil/order/structure-review');
router.push('/ko/construction/order/structure-review');
} catch {
toast.error('저장에 실패했습니다.');
} finally {
@@ -171,7 +171,7 @@ export default function StructureReviewDetailForm({
const result = await deleteStructureReview(review.id);
if (result.success) {
toast.success('삭제되었습니다.');
router.push('/ko/juil/order/structure-review');
router.push('/ko/construction/order/structure-review');
} else {
toast.error(result.error || '삭제에 실패했습니다.');
}
@@ -185,7 +185,7 @@ export default function StructureReviewDetailForm({
// 목록으로 이동
const handleGoToList = useCallback(() => {
router.push('/ko/juil/order/structure-review');
router.push('/ko/construction/order/structure-review');
}, [router]);
// 파일 업로드 핸들러

View File

@@ -215,7 +215,7 @@ export default function StructureReviewListClient({
const handleRowClick = useCallback(
(review: StructureReview) => {
router.push(`/ko/juil/order/structure-review/${review.id}`);
router.push(`/ko/construction/order/structure-review/${review.id}`);
},
[router]
);
@@ -223,7 +223,7 @@ export default function StructureReviewListClient({
const handleEdit = useCallback(
(e: React.MouseEvent, reviewId: string) => {
e.stopPropagation();
router.push(`/ko/juil/order/structure-review/${reviewId}/edit`);
router.push(`/ko/construction/order/structure-review/${reviewId}/edit`);
},
[router]
);
@@ -291,7 +291,7 @@ export default function StructureReviewListClient({
}, [selectedItems, loadData]);
const handleRegister = useCallback(() => {
router.push('/ko/juil/order/structure-review/new');
router.push('/ko/construction/order/structure-review/new');
}, [router]);
// 날짜 포맷