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:
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -20,7 +20,7 @@ import {
|
||||
Hammer
|
||||
} from "lucide-react";
|
||||
|
||||
export function JuilMainDashboard() {
|
||||
export function ConstructionMainDashboard() {
|
||||
const currentTime = useCurrentTime();
|
||||
|
||||
// 가상 데이터: 건설 프로젝트 현황
|
||||
@@ -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 || '저장에 실패했습니다.');
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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 || '삭제에 실패했습니다.');
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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 : '삭제에 실패했습니다.');
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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]);
|
||||
|
||||
@@ -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 || '삭제에 실패했습니다.');
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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`);
|
||||
};
|
||||
|
||||
// 삭제
|
||||
@@ -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]);
|
||||
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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]);
|
||||
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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]);
|
||||
|
||||
@@ -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 || '복제에 실패했습니다.');
|
||||
}
|
||||
@@ -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`);
|
||||
};
|
||||
|
||||
// 삭제
|
||||
@@ -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 : '삭제에 실패했습니다.');
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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]);
|
||||
|
||||
// 숫자 포맷
|
||||
@@ -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]);
|
||||
|
||||
// 숫자 포맷
|
||||
@@ -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 : '삭제에 실패했습니다.');
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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>
|
||||
@@ -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]
|
||||
);
|
||||
@@ -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]);
|
||||
|
||||
// 파일 업로드 핸들러
|
||||
@@ -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]);
|
||||
|
||||
// 날짜 포맷
|
||||
Reference in New Issue
Block a user