From 46b313cb08c21bcdc72a71277754f3b78bbe8640 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Sat, 6 Sep 2025 15:17:44 +0800 Subject: [PATCH] update reject handle correct --- src/app/api/inventory/actions.ts | 18 ++- src/components/PickOrderSearch/LotTable.tsx | 106 +++++++++++++++--- .../PickOrderSearch/PickExecution.tsx | 12 +- .../PickOrderSearch/PickOrderSearch.tsx | 4 +- .../PickQcStockInModalVer3.tsx | 62 +++++----- .../PickOrderSearch/newcreatitem.tsx | 7 +- src/i18n/zh/pickOrder.json | 14 ++- 7 files changed, 167 insertions(+), 56 deletions(-) diff --git a/src/app/api/inventory/actions.ts b/src/app/api/inventory/actions.ts index 4e6a0bb..a19c390 100644 --- a/src/app/api/inventory/actions.ts +++ b/src/app/api/inventory/actions.ts @@ -77,13 +77,21 @@ export const fetchLotDetail = cache(async (stockInLineId: number) => { export const updateInventoryLotLineStatus = async (data: { inventoryLotLineId: number; status: string; - qty: number; - operation?: string; + //qty: number; + //operation?: string; }) => { - return serverFetchJson(`${BASE_API_URL}/inventory/lot-line/update-status`, { - method: 'PUT', - body: JSON.stringify(data) + // return await serverFetchJson(`${BASE_API_URL}/inventoryLotLine/updateStatus`, { + // next: { tags: ["inventoryLotLine"] }, + // method: 'POST', + // body: JSON.stringify(data) + // }); + return await serverFetchJson>(`${BASE_API_URL}/inventoryLotLine/updateStatus`, { + next: { tags: ["inventoryLotLine"] }, + method: 'POST', + body: JSON.stringify(data), + headers: { "Content-Type": "application/json" }, }); + // revalidateTag("po"); }; export const fetchInventories = cache(async (data: SearchInventory) => { diff --git a/src/components/PickOrderSearch/LotTable.tsx b/src/components/PickOrderSearch/LotTable.tsx index 629c69e..7f4beda 100644 --- a/src/components/PickOrderSearch/LotTable.tsx +++ b/src/components/PickOrderSearch/LotTable.tsx @@ -22,7 +22,8 @@ import { useTranslation } from "react-i18next"; import QrCodeIcon from '@mui/icons-material/QrCode'; import { GetPickOrderLineInfo } from "@/app/api/pickOrder/actions"; import { useQrCodeScannerContext } from '../QrCodeScannerProvider/QrCodeScannerProvider'; - +import { updateInventoryLotLineStatus } from "@/app/api/inventory/actions"; +import { updateStockOutLineStatus } from "@/app/api/pickOrder/actions"; interface LotPickData { id: number; lotId: number; @@ -63,6 +64,7 @@ interface LotTableProps { setShowInputBody: (show: boolean) => void; selectedLotForInput: LotPickData | null; generateInputBody: () => any; + onDataRefresh: () => Promise; } // ✅ QR Code Modal Component @@ -222,6 +224,23 @@ const handleManualSubmit = () => { ); }; */} +useEffect(() => { + if (manualInput.trim() === lot?.lotNo && manualInput.trim() !== '') { + // Auto-submit when manual input matches the expected lot number + console.log('🔄 Auto-submitting manual input:', manualInput.trim()); + + // Add a small delay to ensure proper execution order + const timer = setTimeout(() => { + onQrCodeSubmit(lot.lotNo); + onClose(); + setManualInput(''); + setManualInputError(false); + setManualInputSubmitted(false); + }, 200); // 200ms delay + + return () => clearTimeout(timer); + } +}, [manualInput, lot, onQrCodeSubmit, onClose]); const handleManualSubmit = () => { if (manualInput.trim() === lot?.lotNo) { // ✅ Success - no error helper text needed @@ -327,6 +346,7 @@ const LotTable: React.FC = ({ setShowInputBody, selectedLotForInput, generateInputBody, + onDataRefresh, }) => { const { t } = useTranslation("pickOrder"); @@ -347,24 +367,24 @@ const LotTable: React.FC = ({ // ✅ 添加状态消息生成函数 const getStatusMessage = useCallback((lot: LotPickData) => { if (!lot.stockOutLineId) { - return "Please finish QR code scan, QC check and pick order."; + return t("Please finish QR code scan, QC check and pick order."); } switch (lot.stockOutLineStatus?.toLowerCase()) { case 'pending': - return "Please finish QC check and pick order."; + return t("Please finish QC check and pick order."); case 'checked': - return "Please submit the pick order."; + return t("Please submit the pick order."); case 'partially_completed': - return "Partial quantity submitted. You can submit more or complete the order."; + return t("Partial quantity submitted. Please submit more or complete the order.") ; case 'completed': - return "Pick order completed successfully!"; + return t("Pick order completed successfully!"); case 'rejected': - return "QC check failed. Lot has been rejected and marked as unavailable."; + return t("QC check failed. Lot has been rejected and marked as unavailable."); case 'unavailable': - return "This order is insufficient, please pick another lot."; + return t("This order is insufficient, please pick another lot."); default: - return "Please finish QR code scan, QC check and pick order."; + return t("Please finish QR code scan, QC check and pick order."); } }, []); @@ -399,21 +419,34 @@ const LotTable: React.FC = ({ }, []); // ✅ Handle QR code submission - const handleQrCodeSubmit = useCallback((lotNo: string) => { + const handleQrCodeSubmit = useCallback(async (lotNo: string) => { if (selectedLotForQr && selectedLotForQr.lotNo === lotNo) { console.log(`✅ QR Code verified for lot: ${lotNo}`); - // ✅ Create stock out line - onCreateStockOutLine(selectedLotForQr.lotId); + // ✅ Store the required quantity before creating stock out line + const requiredQty = selectedLotForQr.requiredQty; + const lotId = selectedLotForQr.lotId; - // ✅ Show success message - console.log("Stock out line created successfully!"); + // ✅ Create stock out line and wait for it to complete + await onCreateStockOutLine(selectedLotForQr.lotId); // ✅ Close modal setQrModalOpen(false); setSelectedLotForQr(null); + + // ✅ Set pick quantity AFTER stock out line creation and refresh is complete + if (selectedRowId) { + // Add a small delay to ensure the data refresh from onCreateStockOutLine is complete + setTimeout(() => { + onPickQtyChange(selectedRowId, lotId, requiredQty); + console.log(`✅ Auto-set pick quantity to ${requiredQty} for lot ${lotNo}`); + }, 500); // 500ms delay to ensure refresh is complete + } + + // ✅ Show success message + console.log("Stock out line created successfully!"); } - }, [selectedLotForQr, onCreateStockOutLine]); + }, [selectedLotForQr, onCreateStockOutLine, selectedRowId, onPickQtyChange]); return ( <> @@ -520,6 +553,7 @@ const LotTable: React.FC = ({ {/* QC Check Button */} + {/* - + */} + {/* Lot Actual Pick Qty */} @@ -585,7 +620,42 @@ const LotTable: React.FC = ({ placeholder="0" // Show placeholder instead of default value /> - + + + {/* Submit Button */} diff --git a/src/components/PickOrderSearch/PickOrderSearch.tsx b/src/components/PickOrderSearch/PickOrderSearch.tsx index e7dfb7d..f7e8354 100644 --- a/src/components/PickOrderSearch/PickOrderSearch.tsx +++ b/src/components/PickOrderSearch/PickOrderSearch.tsx @@ -228,7 +228,7 @@ const PickOrderSearch: React.FC = ({ pickOrders }) => { // 添加处理提料单创建成功的函数 const handlePickOrderCreated = useCallback(() => { // 切换到 Assign & Release 标签页 (tabIndex = 1) - setTabIndex(1); + setTabIndex(2); }, []); return ( @@ -248,6 +248,7 @@ const PickOrderSearch: React.FC = ({ pickOrders }) => { {t("Pick Order")} + {/*