## 단가관리 (Pricing Management) - 단가 목록 페이지 (IntegratedListTemplateV2 공통 템플릿 적용) - 단가 등록/수정 폼 (원가/마진 자동 계산) - 이력 조회, 수정 이력, 최종 확정 다이얼로그 - 판매관리 > 단가관리 네비게이션 메뉴 추가 ## HR 관리 (Human Resources) - 사원관리 (목록, 등록, 수정, 상세, CSV 업로드) - 부서관리 (트리 구조) - 근태관리 (기본 구조) ## 품목관리 개선 - Radix UI Select controlled mode 버그 수정 (key prop 적용) - DynamicItemForm 파일 업로드 지원 - 수정 페이지 데이터 로딩 개선 ## 문서화 - 단가관리 마이그레이션 체크리스트 - HR 관리 구현 체크리스트 - Radix UI Select 버그 수정 가이드 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
95 lines
2.4 KiB
TypeScript
95 lines
2.4 KiB
TypeScript
/**
|
|
* 단가 수정 이력 생성 다이얼로그
|
|
*/
|
|
|
|
'use client';
|
|
|
|
import { useState } from 'react';
|
|
import {
|
|
Dialog,
|
|
DialogContent,
|
|
DialogDescription,
|
|
DialogFooter,
|
|
DialogHeader,
|
|
DialogTitle,
|
|
} from '@/components/ui/dialog';
|
|
import { Button } from '@/components/ui/button';
|
|
import { Label } from '@/components/ui/label';
|
|
import { Textarea } from '@/components/ui/textarea';
|
|
import { Edit2, Save } from 'lucide-react';
|
|
import { toast } from 'sonner';
|
|
|
|
interface PricingRevisionDialogProps {
|
|
open: boolean;
|
|
onOpenChange: (open: boolean) => void;
|
|
onConfirm: (reason: string) => void;
|
|
}
|
|
|
|
export function PricingRevisionDialog({
|
|
open,
|
|
onOpenChange,
|
|
onConfirm,
|
|
}: PricingRevisionDialogProps) {
|
|
const [revisionReason, setRevisionReason] = useState('');
|
|
|
|
const handleConfirm = () => {
|
|
if (!revisionReason.trim()) {
|
|
toast.error('수정 사유를 입력해주세요.');
|
|
return;
|
|
}
|
|
onConfirm(revisionReason);
|
|
setRevisionReason('');
|
|
onOpenChange(false);
|
|
};
|
|
|
|
const handleCancel = () => {
|
|
setRevisionReason('');
|
|
onOpenChange(false);
|
|
};
|
|
|
|
return (
|
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
<DialogContent>
|
|
<DialogHeader>
|
|
<DialogTitle className="flex items-center gap-2">
|
|
<Edit2 className="h-5 w-5" />
|
|
수정 이력 생성
|
|
</DialogTitle>
|
|
<DialogDescription>
|
|
단가 정보를 수정하시겠습니까? 수정 사유를 입력해주세요.
|
|
</DialogDescription>
|
|
</DialogHeader>
|
|
|
|
<div className="space-y-4 py-4">
|
|
<div>
|
|
<Label>
|
|
수정 사유 <span className="text-red-500">*</span>
|
|
</Label>
|
|
<Textarea
|
|
value={revisionReason}
|
|
onChange={(e) => setRevisionReason(e.target.value)}
|
|
placeholder="예: 공급업체 단가 인상으로 인한 조정"
|
|
rows={3}
|
|
/>
|
|
</div>
|
|
</div>
|
|
|
|
<DialogFooter>
|
|
<Button variant="outline" onClick={handleCancel}>
|
|
취소
|
|
</Button>
|
|
<Button
|
|
onClick={handleConfirm}
|
|
className="bg-blue-600 hover:bg-blue-700"
|
|
>
|
|
<Save className="h-4 w-4 mr-2" />
|
|
수정 이력 저장
|
|
</Button>
|
|
</DialogFooter>
|
|
</DialogContent>
|
|
</Dialog>
|
|
);
|
|
}
|
|
|
|
export default PricingRevisionDialog;
|