ERP-node/frontend/components/pop/PopAcceptModal.tsx

132 lines
4.2 KiB
TypeScript
Raw Normal View History

2026-01-07 14:31:04 +09:00
"use client";
import React from "react";
import { X, Info } from "lucide-react";
import { WorkOrder } from "./types";
interface PopAcceptModalProps {
isOpen: boolean;
workOrder: WorkOrder | null;
quantity: number;
onQuantityChange: (qty: number) => void;
onConfirm: (quantity: number) => void;
onClose: () => void;
}
export function PopAcceptModal({
isOpen,
workOrder,
quantity,
onQuantityChange,
onConfirm,
onClose,
}: PopAcceptModalProps) {
if (!isOpen || !workOrder) return null;
const acceptedQty = workOrder.acceptedQuantity || 0;
const remainingQty = workOrder.orderQuantity - acceptedQty;
const handleAdjust = (delta: number) => {
const newQty = Math.max(1, Math.min(quantity + delta, remainingQty));
onQuantityChange(newQty);
};
const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const val = parseInt(e.target.value) || 0;
const newQty = Math.max(0, Math.min(val, remainingQty));
onQuantityChange(newQty);
};
const handleConfirm = () => {
if (quantity > 0) {
onConfirm(quantity);
}
};
return (
<div className="pop-modal-overlay active" onClick={(e) => e.target === e.currentTarget && onClose()}>
<div className="pop-modal">
<div className="pop-modal-header">
<h2 className="pop-modal-title"> </h2>
<button className="pop-modal-close" onClick={onClose}>
<X size={16} />
</button>
</div>
<div className="pop-modal-body">
<div className="pop-accept-modal-content">
{/* 작업지시 정보 */}
<div className="pop-accept-work-info">
<div className="work-id">{workOrder.id}</div>
<div className="work-name">
{workOrder.itemName} ({workOrder.spec})
</div>
<div style={{ marginTop: "var(--spacing-sm)", fontSize: "var(--text-xs)", color: "rgb(var(--text-muted))" }}>
: {workOrder.orderQuantity} EA | : {acceptedQty} EA
</div>
</div>
{/* 수량 입력 */}
<div>
<label className="pop-form-label"> </label>
<div className="pop-quantity-input-wrapper">
<button className="pop-qty-btn minus" onClick={() => handleAdjust(-10)}>
-10
</button>
<button className="pop-qty-btn minus" onClick={() => handleAdjust(-1)}>
-1
</button>
<input
type="number"
className="pop-qty-input"
value={quantity}
onChange={handleInputChange}
min={1}
max={remainingQty}
/>
<button className="pop-qty-btn" onClick={() => handleAdjust(1)}>
+1
</button>
<button className="pop-qty-btn" onClick={() => handleAdjust(10)}>
+10
</button>
</div>
<div className="pop-qty-hint"> : {remainingQty} EA</div>
</div>
{/* 분할접수 안내 */}
{quantity < remainingQty && (
<div className="pop-accept-info-box">
<span className="info-icon">
<Info size={20} />
</span>
<div>
<div className="info-title"> </div>
<div className="info-desc">
{quantity}EA {remainingQty - quantity}EA가 .
</div>
</div>
</div>
)}
</div>
</div>
<div className="pop-modal-footer">
<button className="pop-btn pop-btn-outline" style={{ flex: 1 }} onClick={onClose}>
</button>
<button
className="pop-btn pop-btn-primary"
style={{ flex: 1 }}
onClick={handleConfirm}
disabled={quantity <= 0}
>
({quantity} EA)
</button>
</div>
</div>
</div>
);
}