|
|
|
@@ -23,12 +23,28 @@ import { |
|
|
|
assignByDoPickOrderId, |
|
|
|
type ReleasedDoPickOrderListItem, |
|
|
|
fetchReleasedDoPickOrdersForSelectionToday, |
|
|
|
type PostPickOrderResponse, |
|
|
|
} from "@/app/api/pickOrder/actions"; |
|
|
|
import { useSession } from "next-auth/react"; |
|
|
|
import { SessionWithTokens } from "@/config/authConfig"; |
|
|
|
import Swal from "sweetalert2"; |
|
|
|
import dayjs from "dayjs"; |
|
|
|
type DateScope = "today" | "before"; |
|
|
|
|
|
|
|
/** DO workbench 使用 workbench released API;Finished Good 不傳即可 */ |
|
|
|
export type ReleasedDoPickListBridge = { |
|
|
|
loadBeforeToday: ( |
|
|
|
shopName?: string, |
|
|
|
storeId?: string, |
|
|
|
truck?: string |
|
|
|
) => Promise<ReleasedDoPickOrderListItem[]>; |
|
|
|
loadToday: ( |
|
|
|
shopName?: string, |
|
|
|
storeId?: string, |
|
|
|
truck?: string |
|
|
|
) => Promise<ReleasedDoPickOrderListItem[]>; |
|
|
|
assignByListItemId: (userId: number, id: number) => Promise<PostPickOrderResponse>; |
|
|
|
}; |
|
|
|
|
|
|
|
interface Props { |
|
|
|
open: boolean; |
|
|
|
onClose: () => void; |
|
|
|
@@ -36,7 +52,9 @@ interface Props { |
|
|
|
storeId: string; |
|
|
|
truck: string; |
|
|
|
isDefaultTruck: boolean; |
|
|
|
/** Truck X only: today → released-today; before → released (歷史未完工) */ |
|
|
|
defaultDateScope?: "today" | "before"; |
|
|
|
listBridge?: ReleasedDoPickListBridge; |
|
|
|
} |
|
|
|
|
|
|
|
const ReleasedDoPickOrderSelectModal: React.FC<Props> = ({ |
|
|
|
@@ -46,11 +64,12 @@ const ReleasedDoPickOrderSelectModal: React.FC<Props> = ({ |
|
|
|
storeId, |
|
|
|
truck, |
|
|
|
isDefaultTruck, |
|
|
|
defaultDateScope: defaultDateScopeProp = "today", |
|
|
|
listBridge, |
|
|
|
}) => { |
|
|
|
const { t } = useTranslation("pickOrder"); |
|
|
|
const { data: session } = useSession() as { data: SessionWithTokens | null }; |
|
|
|
const currentUserId = session?.id ? parseInt(session.id) : undefined; |
|
|
|
const [defaultDateScope, setDefaultDateScope] = useState<"today" | "before">("today"); |
|
|
|
const [list, setList] = useState<ReleasedDoPickOrderListItem[]>([]); |
|
|
|
const [loading, setLoading] = useState(false); |
|
|
|
const [shopSearch, setShopSearch] = useState(""); |
|
|
|
@@ -60,27 +79,18 @@ const ReleasedDoPickOrderSelectModal: React.FC<Props> = ({ |
|
|
|
if (!open) return; |
|
|
|
setLoading(true); |
|
|
|
try { |
|
|
|
let data: ReleasedDoPickOrderListItem[]; // ⭐ 先宣告 |
|
|
|
|
|
|
|
let data: ReleasedDoPickOrderListItem[]; |
|
|
|
const loadReleased = listBridge?.loadBeforeToday ?? fetchReleasedDoPickOrdersForSelection; |
|
|
|
const loadTodayFn = listBridge?.loadToday ?? fetchReleasedDoPickOrdersForSelectionToday; |
|
|
|
|
|
|
|
if (isDefaultTruck) { |
|
|
|
if (defaultDateScope === "today") { |
|
|
|
// Truck X 今天 |
|
|
|
data = await fetchReleasedDoPickOrdersForSelectionToday( |
|
|
|
undefined, // shopName |
|
|
|
undefined, // storeId |
|
|
|
"車線-X" // truck |
|
|
|
); |
|
|
|
if (defaultDateScopeProp === "today") { |
|
|
|
data = await loadTodayFn(undefined, undefined, "車線-X"); |
|
|
|
} else { |
|
|
|
// Truck X 以前(/released,server 內是 < today) |
|
|
|
data = await fetchReleasedDoPickOrdersForSelection( |
|
|
|
undefined, |
|
|
|
undefined, |
|
|
|
"車線-X" |
|
|
|
); |
|
|
|
data = await loadReleased(undefined, undefined, "車線-X"); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 一般車道 |
|
|
|
data = await fetchReleasedDoPickOrdersForSelection( |
|
|
|
data = await loadReleased( |
|
|
|
shopSearch.trim() || undefined, |
|
|
|
storeId, |
|
|
|
truck?.trim() || undefined |
|
|
|
@@ -94,7 +104,7 @@ const ReleasedDoPickOrderSelectModal: React.FC<Props> = ({ |
|
|
|
} finally { |
|
|
|
setLoading(false); |
|
|
|
} |
|
|
|
}, [open, shopSearch, storeId, truck, isDefaultTruck, defaultDateScope]); |
|
|
|
}, [open, shopSearch, storeId, truck, isDefaultTruck, defaultDateScopeProp, listBridge]); |
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
loadList(); |
|
|
|
@@ -131,7 +141,8 @@ const ReleasedDoPickOrderSelectModal: React.FC<Props> = ({ |
|
|
|
|
|
|
|
setIsAssigning(true); |
|
|
|
try { |
|
|
|
const res = await assignByDoPickOrderId(currentUserId, item.id); |
|
|
|
const assignFn = listBridge?.assignByListItemId ?? assignByDoPickOrderId; |
|
|
|
const res = await assignFn(currentUserId, item.id); |
|
|
|
if (res?.code === "SUCCESS") { |
|
|
|
Swal.fire({ |
|
|
|
icon: "success", |
|
|
|
@@ -154,7 +165,7 @@ const ReleasedDoPickOrderSelectModal: React.FC<Props> = ({ |
|
|
|
setIsAssigning(false); |
|
|
|
} |
|
|
|
}, |
|
|
|
[currentUserId, t, onAssigned, onClose] |
|
|
|
[currentUserId, t, onAssigned, onClose, listBridge] |
|
|
|
); |
|
|
|
|
|
|
|
return ( |
|
|
|
|