- 회계 모듈 전면 개선: 청구/입금/출금/매입/매출/세금계산서/일반전표/거래처원장 등 - 견적 모듈 금액 포맷/할인/수식/미리보기 등 코드 정리 - 설정 모듈: 계정관리/직급/직책/권한 상세 간소화 - 생산 모듈: 작업지시서/작업자화면/검수 문서 코드 정리 - UniversalListPage 엑셀 다운로드 및 필터 기능 확장 - 대시보드/게시판/수주 등 날짜 유틸 공통화 적용 - claudedocs 문서 인덱스 업데이트 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
/**
|
|
* 단가 최종 확정 다이얼로그
|
|
*/
|
|
|
|
'use client';
|
|
|
|
import {
|
|
Dialog,
|
|
DialogContent,
|
|
DialogDescription,
|
|
DialogFooter,
|
|
DialogHeader,
|
|
DialogTitle,
|
|
} from '@/components/ui/dialog';
|
|
import { Button } from '@/components/ui/button';
|
|
import { Lock, CheckCircle2 } from 'lucide-react';
|
|
import { formatNumber } from '@/lib/utils/amount';
|
|
|
|
interface PricingFinalizeDialogProps {
|
|
open: boolean;
|
|
onOpenChange: (open: boolean) => void;
|
|
onConfirm: () => void;
|
|
itemName: string;
|
|
purchasePrice?: number;
|
|
salesPrice?: number;
|
|
marginRate?: number;
|
|
}
|
|
|
|
export function PricingFinalizeDialog({
|
|
open,
|
|
onOpenChange,
|
|
onConfirm,
|
|
itemName,
|
|
purchasePrice,
|
|
salesPrice,
|
|
marginRate,
|
|
}: PricingFinalizeDialogProps) {
|
|
return (
|
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
<DialogContent>
|
|
<DialogHeader>
|
|
<DialogTitle className="flex items-center gap-2">
|
|
<Lock className="h-5 w-5 text-purple-600" />
|
|
최종 확정
|
|
</DialogTitle>
|
|
<DialogDescription>
|
|
단가를 최종 확정하시겠습니까? 확정 후에는 수정할 수 없습니다.
|
|
</DialogDescription>
|
|
</DialogHeader>
|
|
|
|
<div className="py-4">
|
|
<div className="bg-purple-50 border border-purple-200 rounded-lg p-4 space-y-2 text-sm">
|
|
<div className="flex justify-between">
|
|
<span className="text-muted-foreground">품목:</span>
|
|
<span className="font-semibold">{itemName}</span>
|
|
</div>
|
|
<div className="flex justify-between">
|
|
<span className="text-muted-foreground">매입단가:</span>
|
|
<span className="font-semibold">
|
|
{formatNumber(purchasePrice)}원
|
|
</span>
|
|
</div>
|
|
<div className="flex justify-between">
|
|
<span className="text-muted-foreground">판매단가:</span>
|
|
<span className="font-semibold">
|
|
{formatNumber(salesPrice)}원
|
|
</span>
|
|
</div>
|
|
<div className="flex justify-between">
|
|
<span className="text-muted-foreground">마진율:</span>
|
|
<span className="font-semibold">
|
|
{marginRate?.toFixed(1) || '-'}%
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<DialogFooter>
|
|
<Button variant="outline" onClick={() => onOpenChange(false)}>
|
|
취소
|
|
</Button>
|
|
<Button
|
|
onClick={onConfirm}
|
|
className="bg-purple-600 hover:bg-purple-700"
|
|
>
|
|
<CheckCircle2 className="h-4 w-4 mr-2" />
|
|
최종 확정
|
|
</Button>
|
|
</DialogFooter>
|
|
</DialogContent>
|
|
</Dialog>
|
|
);
|
|
}
|
|
|
|
export default PricingFinalizeDialog;
|