Parcourir la source

update

stable1
CANCERYS\kw093 il y a 2 semaines
Parent
révision
14a1a6d4e2
1 fichiers modifiés avec 66 ajouts et 9 suppressions
  1. +66
    -9
      src/components/FinishedGoodSearch/FGPickOrderTicketReleaseTable.tsx

+ 66
- 9
src/components/FinishedGoodSearch/FGPickOrderTicketReleaseTable.tsx Voir le fichier

@@ -61,6 +61,26 @@ function showDoPickOpsButtons(row: getTicketReleaseTable): boolean {
);
}

const isDev = process.env.NODE_ENV === "development";

function shouldLogTicketFilterDebug(): boolean {
if (isDev) return true;
if (typeof window === "undefined") return false;
return (window as unknown as { __FG_TICKET_FILTER_DEBUG__?: boolean }).__FG_TICKET_FILTER_DEBUG__ === true;
}

/**
* 後端 LocalDate 常序列化為 [year, month, day](month 為 1–12)。
* 不可使用 dayjs(array):會被當成 [年, 月索引 0–11, 日],導致月份錯一個月、篩選與畫面日期錯誤。
*/
function requiredDeliveryDateToDayString(value: unknown): string {
if (value == null) return "";
if (Array.isArray(value) && value.length >= 3 && value.every((x) => typeof x === "number")) {
return arrayToDayjs(value as number[]).format("YYYY-MM-DD");
}
return dayjs(value as string | number | Date).format("YYYY-MM-DD");
}

const FGPickOrderTicketReleaseTable: React.FC = () => {
const { t } = useTranslation("ticketReleaseTable");
const { data: session } = useSession() as { data: SessionWithTokens | null };
@@ -110,6 +130,24 @@ const FGPickOrderTicketReleaseTable: React.FC = () => {
try {
const dayStr = queryDate.format("YYYY-MM-DD");
const result = await fetchTicketReleaseTable(dayStr, dayStr);
if (shouldLogTicketFilterDebug() && Array.isArray(result) && result.length > 0) {
const statusCounts = result.reduce<Record<string, number>>((acc, r) => {
const k = String(r.ticketStatus ?? "(null)");
acc[k] = (acc[k] ?? 0) + 1;
return acc;
}, {});
console.log("[FGTicketReleaseTable] API rows:", result.length, "ticketStatus 分布:", statusCounts);
console.table(
result.slice(0, 5).map((r) => ({
ticketStatus: r.ticketStatus ?? "(null)",
requiredDeliveryDate: r.requiredDeliveryDate,
itemDate: r.requiredDeliveryDate
? requiredDeliveryDateToDayString(r.requiredDeliveryDate)
: "",
queryDay: dayStr,
})),
);
}
setData(result);
setLastDataRefreshTime(dayjs());
} catch (error) {
@@ -133,23 +171,42 @@ const FGPickOrderTicketReleaseTable: React.FC = () => {
const dayStr = queryDate.format("YYYY-MM-DD");

const filteredData = useMemo(() => {
return data.filter((item) => {
let dropFloor = 0;
let dropDate = 0;
let dropStatus = 0;
const filtered: getTicketReleaseTable[] = [];
for (const item of data) {
if (selectedFloor && item.storeId !== selectedFloor) {
return false;
dropFloor++;
continue;
}
if (item.requiredDeliveryDate) {
const itemDate = dayjs(item.requiredDeliveryDate).format("YYYY-MM-DD");
const itemDate = requiredDeliveryDateToDayString(item.requiredDeliveryDate);
if (itemDate !== dayStr) {
return false;
dropDate++;
continue;
}
}
if (selectedStatus && item.ticketStatus?.toLowerCase() !== selectedStatus.toLowerCase()) {
return false;
dropStatus++;
continue;
}
return true;
});
filtered.push(item);
}
if (shouldLogTicketFilterDebug()) {
console.log("[FGTicketReleaseTable] filter:", {
total: data.length,
kept: filtered.length,
dropFloor,
dropDate,
dropStatus,
selectedFloor: selectedFloor || "(all)",
selectedStatus: selectedStatus || "(all)",
dayStr,
});
}
return filtered;
}, [data, dayStr, selectedFloor, selectedStatus]);

const handlePageChange = useCallback((event: unknown, newPage: number) => {
setPaginationController((prev) => ({
...prev,
@@ -360,7 +417,7 @@ const FGPickOrderTicketReleaseTable: React.FC = () => {
<TableCell>{row.storeId || "-"}</TableCell>
<TableCell>
{row.requiredDeliveryDate
? dayjs(row.requiredDeliveryDate).format("YYYY-MM-DD")
? requiredDeliveryDateToDayString(row.requiredDeliveryDate)
: "-"}
</TableCell>



Chargement…
Annuler
Enregistrer