| @@ -35,14 +35,7 @@ const FGPickOrderCard: React.FC<Props> = ({ fgOrder, onQrCodeClick }) => { | |||
| //helperText={fgOrder.pickOrderConsoCode} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={6}> | |||
| <TextField | |||
| label={t("Shop PO Code")} | |||
| fullWidth | |||
| disabled={true} | |||
| value={fgOrder.shopPoNo} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={6}> | |||
| <TextField | |||
| label={t("Store ID")} | |||
| @@ -51,14 +44,7 @@ const FGPickOrderCard: React.FC<Props> = ({ fgOrder, onQrCodeClick }) => { | |||
| value={fgOrder.storeId} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={6}> | |||
| <TextField | |||
| label={t("Shop ID")} | |||
| fullWidth | |||
| disabled={true} | |||
| value={fgOrder.shopCode} | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={6}> | |||
| <TextField | |||
| label={t("Shop Name")} | |||
| @@ -20,7 +20,8 @@ import { useCallback, useEffect, useState } from "react"; | |||
| import { useTranslation } from "react-i18next"; | |||
| import { GetPickOrderLineInfo, PickExecutionIssueData } from "@/app/api/pickOrder/actions"; | |||
| import { fetchEscalationCombo } from "@/app/api/user/actions"; | |||
| import { useSession } from "next-auth/react"; | |||
| import { SessionWithTokens } from "@/config/authConfig"; | |||
| interface LotPickData { | |||
| id: number; | |||
| lotId: number; | |||
| @@ -82,7 +83,7 @@ const PickExecutionForm: React.FC<PickExecutionFormProps> = ({ | |||
| const [loading, setLoading] = useState(false); | |||
| const [handlers, setHandlers] = useState<Array<{ id: number; name: string }>>([]); | |||
| const [verifiedQty, setVerifiedQty] = useState<number>(0); | |||
| // 计算剩余可用数量 | |||
| const { data: session } = useSession() as { data: SessionWithTokens | null }; | |||
| const calculateRemainingAvailableQty = useCallback((lot: LotPickData) => { | |||
| const remainingQty = lot.inQty - lot.outQty; | |||
| return Math.max(0, remainingQty); | |||
| @@ -149,7 +150,7 @@ const PickExecutionForm: React.FC<PickExecutionFormProps> = ({ | |||
| missQty: 0, | |||
| badItemQty: 0, | |||
| issueRemark: '', | |||
| pickerName: '', | |||
| // pickerName: '', | |||
| handledBy: undefined, | |||
| }); | |||
| } | |||
| @@ -212,7 +213,11 @@ const PickExecutionForm: React.FC<PickExecutionFormProps> = ({ | |||
| // ✅ Use the verified quantity in the submission | |||
| const submissionData = { | |||
| ...formData, | |||
| actualPickQty: verifiedQty | |||
| actualPickQty: verifiedQty, | |||
| lotId: formData.lotId || selectedLot?.lotId || 0, | |||
| lotNo: formData.lotNo || selectedLot?.lotNo || '', | |||
| pickOrderCode: formData.pickOrderCode || selectedPickOrderLine?.pickOrderCode || '', | |||
| pickerName: session?.user?.name || '' | |||
| } as PickExecutionIssueData; | |||
| await onSubmit(submissionData); | |||
| @@ -278,7 +283,7 @@ const PickExecutionForm: React.FC<PickExecutionFormProps> = ({ | |||
| onChange={(e) => { | |||
| const newValue = parseFloat(e.target.value) || 0; | |||
| setVerifiedQty(newValue); | |||
| handleInputChange('actualPickQty', newValue); | |||
| // handleInputChange('actualPickQty', newValue); | |||
| }} | |||
| error={!!errors.actualPickQty} | |||
| helperText={errors.actualPickQty || `${t('Max')}: ${selectedLot?.actualPickQty || 0}`} // ✅ 使用原始接收数量 | |||
| @@ -428,6 +428,8 @@ const JobPickExecution: React.FC<Props> = ({ filterArgs }) => { | |||
| // ✅ 使用 Job Order API | |||
| const jobOrderData = await fetchCompletedJobOrderPickOrders(userIdToUse); | |||
| console.log("✅ Job Order data:", jobOrderData); | |||
| console.log("✅ Pick Order Code from API:", jobOrderData.pickOrder?.code); | |||
| console.log("✅ Expected Pick Order Code: P-20251003-001"); | |||
| setJobOrderData(jobOrderData); | |||
| @@ -870,6 +872,8 @@ const JobPickExecution: React.FC<Props> = ({ filterArgs }) => { | |||
| const handlePickExecutionForm = useCallback((lot: any) => { | |||
| console.log("=== Pick Execution Form ==="); | |||
| console.log("Lot data:", lot); | |||
| console.log("lot.pickOrderCode:", lot.pickOrderCode); // ✅ 添加 | |||
| console.log("lot.pickOrderId:", lot.pickOrderId); | |||
| if (!lot) { | |||
| console.warn("No lot data provided for pick execution form"); | |||
| @@ -20,6 +20,8 @@ import { useCallback, useEffect, useState } from "react"; | |||
| import { useTranslation } from "react-i18next"; | |||
| import { GetPickOrderLineInfo, PickExecutionIssueData } from "@/app/api/pickOrder/actions"; | |||
| import { fetchEscalationCombo } from "@/app/api/user/actions"; | |||
| import { useSession } from "next-auth/react"; | |||
| import { SessionWithTokens } from "@/config/authConfig"; | |||
| interface LotPickData { | |||
| id: number; | |||
| @@ -82,6 +84,7 @@ const PickExecutionForm: React.FC<PickExecutionFormProps> = ({ | |||
| const [loading, setLoading] = useState(false); | |||
| const [handlers, setHandlers] = useState<Array<{ id: number; name: string }>>([]); | |||
| const [verifiedQty, setVerifiedQty] = useState<number>(0); | |||
| const { data: session } = useSession() as { data: SessionWithTokens | null }; | |||
| // 计算剩余可用数量 | |||
| const calculateRemainingAvailableQty = useCallback((lot: LotPickData) => { | |||
| const remainingQty = lot.inQty - lot.outQty; | |||
| @@ -149,7 +152,7 @@ const PickExecutionForm: React.FC<PickExecutionFormProps> = ({ | |||
| missQty: 0, | |||
| badItemQty: 0, | |||
| issueRemark: '', | |||
| pickerName: '', | |||
| // pickerName: '', | |||
| handledBy: undefined, | |||
| }); | |||
| } | |||
| @@ -216,7 +219,11 @@ const PickExecutionForm: React.FC<PickExecutionFormProps> = ({ | |||
| // ✅ Use the verified quantity in the submission | |||
| const submissionData = { | |||
| ...formData, | |||
| actualPickQty: verifiedQty | |||
| actualPickQty: verifiedQty, | |||
| lotId: formData.lotId || selectedLot?.lotId || 0, | |||
| lotNo: formData.lotNo || selectedLot?.lotNo || '', | |||
| pickOrderCode: formData.pickOrderCode || selectedPickOrderLine?.pickOrderCode || '', | |||
| pickerName: session?.user?.name || '' | |||
| } as PickExecutionIssueData; | |||
| await onSubmit(submissionData); | |||
| @@ -291,7 +298,7 @@ const PickExecutionForm: React.FC<PickExecutionFormProps> = ({ | |||
| onChange={(e) => { | |||
| const newValue = parseFloat(e.target.value) || 0; | |||
| setVerifiedQty(newValue); | |||
| handleInputChange('actualPickQty', newValue); | |||
| //handleInputChange('actualPickQty', newValue); | |||
| }} | |||
| error={!!errors.actualPickQty} | |||
| helperText={errors.actualPickQty || `${t('Max')}: ${selectedLot?.actualPickQty || 0}`} // ✅ 使用原始接收数量 | |||