From 53b3d97097d98873780c7da735d0bc0c89649563 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Mon, 20 Apr 2026 22:42:10 +0800 Subject: [PATCH] update pick order efficient --- src/app/(main)/pickOrder/page.tsx | 2 +- .../PickOrderSearch/PickOrderSearch.tsx | 191 ++---------------- .../PickOrderSearchWrapper.tsx | 9 +- 3 files changed, 25 insertions(+), 177 deletions(-) diff --git a/src/app/(main)/pickOrder/page.tsx b/src/app/(main)/pickOrder/page.tsx index 88f6790..31219a2 100644 --- a/src/app/(main)/pickOrder/page.tsx +++ b/src/app/(main)/pickOrder/page.tsx @@ -13,7 +13,7 @@ export const metadata: Metadata = { const PickOrder: React.FC = async () => { const { t } = await getServerI18n("pickOrder"); - PreloadPickOrder(); + //PreloadPickOrder(); return ( <> diff --git a/src/components/PickOrderSearch/PickOrderSearch.tsx b/src/components/PickOrderSearch/PickOrderSearch.tsx index f93d0d1..f4297b0 100644 --- a/src/components/PickOrderSearch/PickOrderSearch.tsx +++ b/src/components/PickOrderSearch/PickOrderSearch.tsx @@ -1,52 +1,25 @@ "use client"; -import { PickOrderResult } from "@/app/api/pickOrder"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; -import SearchBox, { Criterion } from "../SearchBox"; -import { - flatten, - intersectionWith, - isEmpty, - sortBy, - uniqBy, - upperCase, - upperFirst, -} from "lodash"; -import { - arrayToDayjs, -} from "@/app/utils/formatUtil"; -import { Button, Grid, Stack, Tab, Tabs, TabsProps, Typography, Box } from "@mui/material"; -import PickOrders from "./PickOrders"; -import ConsolidatedPickOrders from "./ConsolidatedPickOrders"; +import { Grid, Stack, Tab, Tabs, TabsProps, Typography, Box } from "@mui/material"; import PickExecution from "./PickExecution"; -import CreatePickOrderModal from "./CreatePickOrderModal"; import NewCreateItem from "./newcreatitem"; import AssignAndRelease from "./AssignAndRelease"; import AssignTo from "./assignTo"; import { fetchAllItemsInClient, ItemCombo } from "@/app/api/settings/item/actions"; -import { fetchPickOrderClient } from "@/app/api/pickOrder/actions"; -import Jobcreatitem from "./Jobcreatitem"; interface Props { - pickOrders: PickOrderResult[]; + // Intentionally empty: data is loaded per-tab now. } -type SearchQuery = Partial< - Omit ->; - -type SearchParamNames = keyof SearchQuery; - -const PickOrderSearch: React.FC = ({ pickOrders }) => { +const PickOrderSearch: React.FC = () => { const { t } = useTranslation("pickOrder"); - const [isOpenCreateModal, setIsOpenCreateModal] = useState(false) - const [items, setItems] = useState([]) - const [filteredPickOrders, setFilteredPickOrders] = useState(pickOrders); + const [isOpenCreateModal, setIsOpenCreateModal] = useState(false); + const [items, setItems] = useState([]); const [filterArgs, setFilterArgs] = useState>({}); const [searchQuery, setSearchQuery] = useState>({}); const [tabIndex, setTabIndex] = useState(0); - const [totalCount, setTotalCount] = useState(); const handleTabChange = useCallback>( (_e, newValue) => { @@ -56,16 +29,16 @@ const PickOrderSearch: React.FC = ({ pickOrders }) => { ); const openCreateModal = useCallback(async () => { - console.log("testing") - const res = await fetchAllItemsInClient() - console.log(res) - setItems(res) - setIsOpenCreateModal(true) - }, []) + console.log("testing"); + const res = await fetchAllItemsInClient(); + console.log(res); + setItems(res); + setIsOpenCreateModal(true); + }, []); const closeCreateModal = useCallback(() => { - setIsOpenCreateModal(false) - }, []) + setIsOpenCreateModal(false); + }, []); useEffect(() => { @@ -88,142 +61,14 @@ const PickOrderSearch: React.FC = ({ pickOrders }) => { } }, [tabIndex, items.length]); - const searchCriteria: Criterion[] = useMemo( - () => { - const baseCriteria: Criterion[] = [ - { - label: tabIndex === 3 ? t("Item Code") : t("Code"), - paramName: "code", - type: "text" - }, - { - label: t("Type"), - paramName: "type", - type: "autocomplete", - options: tabIndex === 3 - ? - [ - { value: "Consumable", label: t("Consumable") }, - { value: "Material", label: t("Material") }, - { value: "Product", label: t("Product") } - ] - : - sortBy( - uniqBy( - pickOrders.map((po) => ({ - value: po.type, - label: t(upperCase(po.type)), - })), - "value", - ), - "label", - ), - }, - ]; - - // Add Job Order search for Create Item tab (tabIndex === 3) - if (tabIndex === 3) { - baseCriteria.splice(1, 0, { - label: t("Job Order"), - paramName: "jobOrderCode" as any, // Type assertion for now - type: "text", - }); - - baseCriteria.splice(2, 0, { - label: t("Target Date"), - paramName: "targetDate", - type: "date", - }); - } else { - baseCriteria.splice(1, 0, { - label: t("Target Date From"), - label2: t("Target Date To"), - paramName: "targetDate", - type: "dateRange", - }); - } - - // Add Items/Item Name criteria - baseCriteria.push({ - label: tabIndex === 3 ? t("Item Name") : t("Items"), - paramName: "items", - type: tabIndex === 3 ? "text" : "autocomplete", - options: tabIndex === 3 - ? [] - : - uniqBy( - flatten( - sortBy( - pickOrders.map((po) => - po.items - ? po.items.map((item) => ({ - value: item.name, - label: item.name, - })) - : [], - ), - "label", - ), - ), - "value", - ), - }); - - // Add Status criteria for non-Create Item tabs - if (tabIndex !== 3) { - baseCriteria.push({ - label: t("Status"), - paramName: "status", - type: "autocomplete", - options: sortBy( - uniqBy( - pickOrders.map((po) => ({ - value: po.status, - label: t(upperFirst(po.status)), - })), - "value", - ), - "label", - ), - }); - } - - return baseCriteria; - }, - [pickOrders, t, tabIndex, items], - ); - - const fetchNewPagePickOrder = useCallback( - async ( - pagingController: Record, - filterArgs: Record, - ) => { - const params = { - ...pagingController, - ...filterArgs, - }; - const res = await fetchPickOrderClient(params); - if (res) { - console.log(res); - setFilteredPickOrders(res.records); - setTotalCount(res.total); - } - }, - [], - ); - - const onReset = useCallback(() => { - setFilteredPickOrders(pickOrders); - }, [pickOrders]); - useEffect(() => { if (!isOpenCreateModal) { - setTabIndex(1) + setTabIndex(1); setTimeout(async () => { - setTabIndex(0) - }, 200) + setTabIndex(0); + }, 200); } - }, [isOpenCreateModal]) + }, [isOpenCreateModal]); // 添加处理提料单创建成功的函数 const handlePickOrderCreated = useCallback(() => { diff --git a/src/components/PickOrderSearch/PickOrderSearchWrapper.tsx b/src/components/PickOrderSearch/PickOrderSearchWrapper.tsx index 0f6f367..e8a5733 100644 --- a/src/components/PickOrderSearch/PickOrderSearchWrapper.tsx +++ b/src/components/PickOrderSearch/PickOrderSearchWrapper.tsx @@ -1,4 +1,4 @@ -import { fetchPickOrders } from "@/app/api/pickOrder"; +//import { fetchPickOrders } from "@/app/api/pickOrder"; import GeneralLoading from "../General/GeneralLoading"; import PickOrderSearch from "./PickOrderSearch"; @@ -7,6 +7,7 @@ interface SubComponents { } const PickOrderSearchWrapper: React.FC & SubComponents = async () => { + /* const [pickOrders] = await Promise.all([ fetchPickOrders({ code: undefined, @@ -17,8 +18,10 @@ const PickOrderSearchWrapper: React.FC & SubComponents = async () => { itemName: undefined, }), ]); - - return ; + */ + //const pickOrders = []; + //return ; + return ; }; PickOrderSearchWrapper.Loading = GeneralLoading;