From 263d12e2486f0d92257415b7fe9886c3eb4b1779 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Tue, 10 Feb 2026 14:00:21 +0800 Subject: [PATCH] update job pick dashboard --- src/app/api/jo/actions.ts | 10 ++++-- .../Jodetail/MaterialPickStatusTable.tsx | 35 +++++++++++-------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/app/api/jo/actions.ts b/src/app/api/jo/actions.ts index 5c33b1c..0aa7986 100644 --- a/src/app/api/jo/actions.ts +++ b/src/app/api/jo/actions.ts @@ -1201,9 +1201,15 @@ export interface MaterialPickStatusItem { pickStatus: string | null; } -export const fetchMaterialPickStatus = cache(async (): Promise => { +export const fetchMaterialPickStatus = cache(async (date?: string): Promise => { + const params = new URLSearchParams(); + if (date) params.set("date", date); // yyyy-MM-dd + + const qs = params.toString(); + const url = `${BASE_API_URL}/jo/material-pick-status${qs ? `?${qs}` : ""}`; + return await serverFetchJson( - `${BASE_API_URL}/jo/material-pick-status`, + url, { method: "GET", } diff --git a/src/components/Jodetail/MaterialPickStatusTable.tsx b/src/components/Jodetail/MaterialPickStatusTable.tsx index 4246138..a445100 100644 --- a/src/components/Jodetail/MaterialPickStatusTable.tsx +++ b/src/components/Jodetail/MaterialPickStatusTable.tsx @@ -15,6 +15,9 @@ import { Paper, CircularProgress, TablePagination, + FormControl, + Select, + MenuItem, } from '@mui/material'; import { useTranslation } from 'react-i18next'; import dayjs from 'dayjs'; @@ -28,20 +31,18 @@ const MaterialPickStatusTable: React.FC = () => { const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const refreshCountRef = useRef(0); + const [selectedDate, setSelectedDate] = useState(dayjs().format("YYYY-MM-DD")); const [paginationController, setPaginationController] = useState({ pageNum: 0, pageSize: 10, }); + const loadData = useCallback(async () => { setLoading(true); try { - const result = await fetchMaterialPickStatus(); - // On second refresh, clear completed pick orders + const result = await fetchMaterialPickStatus(selectedDate); if (refreshCountRef.current >= 1) { - // const filtered = result.filter(item => - // item.pickStatus?.toLowerCase() !== 'completed' - //); setData(result); } else { setData(result || []); @@ -49,23 +50,19 @@ const MaterialPickStatusTable: React.FC = () => { refreshCountRef.current += 1; } catch (error) { console.error('Error fetching material pick status:', error); - setData([]); // Set empty array on error to stop loading + setData([]); } finally { setLoading(false); } - }, []); // Remove refreshCount from dependencies + }, [selectedDate]); useEffect(() => { - // Initial load loadData(); - - // Set up auto-refresh every 10 minutes const interval = setInterval(() => { loadData(); }, REFRESH_INTERVAL); - return () => clearInterval(interval); - }, [loadData]); // Only depend on loadData, which is now stable + }, [loadData]); const formatTime = (timeData: any): string => { if (!timeData) return ''; @@ -235,10 +232,18 @@ const MaterialPickStatusTable: React.FC = () => { {t("Material Pick Status")} - - - + + + + {loading ? (