| @@ -24,7 +24,7 @@ const DoEdit: React.FC<Props> = async ({ searchParams }) => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <PageTitleBar title={t("Edit Delivery Order Detail")} className="mb-4" /> | <PageTitleBar title={t("Edit Delivery Order Detail")} className="mb-4" /> | ||||
| <I18nProvider namespaces={["do", "common"]}> | |||||
| <I18nProvider namespaces={["do","navigation","common","home"]}> | |||||
| <Suspense fallback={<DoDetail.Loading />}> | <Suspense fallback={<DoDetail.Loading />}> | ||||
| <DoDetail id={parseInt(id)} /> | <DoDetail id={parseInt(id)} /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -23,7 +23,7 @@ const Page: React.FC = async () => { | |||||
| /doworkbench | /doworkbench | ||||
| </Link> | </Link> | ||||
| </p> | </p> | ||||
| <I18nProvider namespaces={["do", "common"]}> | |||||
| <I18nProvider namespaces={["do","navigation","common","home"]}> | |||||
| <Suspense fallback={<GeneralLoading />}> | <Suspense fallback={<GeneralLoading />}> | ||||
| <DoSearchWorkbench workbenchHrefBase="/do copy 2" /> | <DoSearchWorkbench workbenchHrefBase="/do copy 2" /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -24,7 +24,7 @@ const DoEdit: React.FC<Props> = async ({ searchParams }) => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <PageTitleBar title={t("Edit Delivery Order Detail")} className="mb-4" /> | <PageTitleBar title={t("Edit Delivery Order Detail")} className="mb-4" /> | ||||
| <I18nProvider namespaces={["do", "common"]}> | |||||
| <I18nProvider namespaces={["do","navigation","common","home"]}> | |||||
| <Suspense fallback={<DoDetail.Loading />}> | <Suspense fallback={<DoDetail.Loading />}> | ||||
| <DoDetail id={parseInt(id)} /> | <DoDetail id={parseInt(id)} /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -17,7 +17,7 @@ const DeliveryOrder: React.FC = async () => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <PageTitleBar title={t("Delivery Order")} className="mb-4" /> | <PageTitleBar title={t("Delivery Order")} className="mb-4" /> | ||||
| <I18nProvider namespaces={["do", "common"]}> | |||||
| <I18nProvider namespaces={["do","navigation","common","home"]}> | |||||
| <Suspense fallback={<DoSearch.Loading />}> | <Suspense fallback={<DoSearch.Loading />}> | ||||
| <DoSearch /> | <DoSearch /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -24,7 +24,7 @@ const DoEdit: React.FC<Props> = async ({ searchParams }) => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <PageTitleBar title={t("Edit Delivery Order Detail")} className="mb-4" /> | <PageTitleBar title={t("Edit Delivery Order Detail")} className="mb-4" /> | ||||
| <I18nProvider namespaces={["do","navigation","common"]}> | |||||
| <I18nProvider namespaces={["do","navigation","common","home"]}> | |||||
| <Suspense fallback={<DoDetail.Loading />}> | <Suspense fallback={<DoDetail.Loading />}> | ||||
| <DoDetail id={parseInt(id)} /> | <DoDetail id={parseInt(id)} /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -17,7 +17,7 @@ const DeliveryOrder: React.FC = async () => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <PageTitleBar title={t("Delivery Order")} className="mb-4" /> | <PageTitleBar title={t("Delivery Order")} className="mb-4" /> | ||||
| <I18nProvider namespaces={["do","navigation","common"]}> | |||||
| <I18nProvider namespaces={["do","navigation","common","home"]}> | |||||
| <Suspense fallback={<DoSearch.Loading />}> | <Suspense fallback={<DoSearch.Loading />}> | ||||
| <DoSearch /> | <DoSearch /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -19,7 +19,7 @@ const DoWorkbenchSearchPage: React.FC = async () => { | |||||
| title={t("DO Workbench Search", { defaultValue: "DO Workbench Search" })} | title={t("DO Workbench Search", { defaultValue: "DO Workbench Search" })} | ||||
| className="mb-4" | className="mb-4" | ||||
| /> | /> | ||||
| <I18nProvider namespaces={["doWorkbench","navigation","common","do"]}> | |||||
| <I18nProvider namespaces={["doWorkbench","navigation","common","do","home"]}> | |||||
| <Suspense fallback={<GeneralLoading />}> | <Suspense fallback={<GeneralLoading />}> | ||||
| <DoSearchWorkbench /> | <DoSearchWorkbench /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -18,7 +18,7 @@ const PickOrder: React.FC<Props> = async ({ searchParams }) => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <I18nProvider namespaces={["finishedGood","navigation","common","pickOrder","ticketReleaseTable"]}> | |||||
| <I18nProvider namespaces={["finishedGood","navigation","common","pickOrder","ticketReleaseTable","purchaseOrder","home","item"]}> | |||||
| <Suspense fallback={<FinishedGoodSearchWrapper.Loading />}> | <Suspense fallback={<FinishedGoodSearchWrapper.Loading />}> | ||||
| <FinishedGoodSearchWrapper /> | <FinishedGoodSearchWrapper /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -18,7 +18,7 @@ const Page = async () => { | |||||
| redirect("/dashboard"); | redirect("/dashboard"); | ||||
| } | } | ||||
| return ( | return ( | ||||
| <I18nProvider namespaces={["finishedgoodmanagement", "navigation"]}> | |||||
| <I18nProvider namespaces={["finishedgoodmanagement","navigation","common"]}> | |||||
| <Suspense fallback={<FinishedGoodManagement.Loading />}> | <Suspense fallback={<FinishedGoodManagement.Loading />}> | ||||
| <FinishedGoodManagement /> | <FinishedGoodManagement /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -17,7 +17,7 @@ const PickOrder: React.FC = async () => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <I18nProvider namespaces={["finishedGood","navigation","common","pickOrder","ticketReleaseTable"]}> | |||||
| <I18nProvider namespaces={["finishedGood","navigation","common","pickOrder","ticketReleaseTable","purchaseOrder","home","item"]}> | |||||
| <Suspense fallback={<FinishedGoodSearch.Loading />}> | <Suspense fallback={<FinishedGoodSearch.Loading />}> | ||||
| <FinishedGoodSearch /> | <FinishedGoodSearch /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -30,7 +30,7 @@ const Inventory: React.FC = async () => { | |||||
| {t("Inventory")} | {t("Inventory")} | ||||
| </Typography> | </Typography> | ||||
| </Stack> | </Stack> | ||||
| <I18nProvider namespaces={["inventory","navigation","common"]}> | |||||
| <I18nProvider namespaces={["inventory","navigation","common","item"]}> | |||||
| <Suspense fallback={<InventorySearch.Loading />}> | <Suspense fallback={<InventorySearch.Loading />}> | ||||
| <InventorySearch /> | <InventorySearch /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -18,7 +18,7 @@ const Jodetail: React.FC = async () => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <PageTitleBar title={t("Job Order Pick Execution")} className="mb-4" /> | <PageTitleBar title={t("Job Order Pick Execution")} className="mb-4" /> | ||||
| <I18nProvider namespaces={["jo","navigation","common","pickOrder"]}> | |||||
| <I18nProvider namespaces={["jo","navigation","common","pickOrder","purchaseOrder","home","item"]}> | |||||
| <Suspense fallback={<GeneralLoading />}> | <Suspense fallback={<GeneralLoading />}> | ||||
| <JodetailSearchWrapper /> | <JodetailSearchWrapper /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -18,7 +18,7 @@ const PickOrder: React.FC<Props> = async ({ searchParams }) => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <I18nProvider namespaces={["pickOrder","navigation","common"]}> | |||||
| <I18nProvider namespaces={["pickOrder","navigation","common","purchaseOrder"]}> | |||||
| <Suspense fallback={<PickOrderDetail.Loading />}> | <Suspense fallback={<PickOrderDetail.Loading />}> | ||||
| <PickOrderDetail consoCode={`${searchParams["consoCode"]}`} /> | <PickOrderDetail consoCode={`${searchParams["consoCode"]}`} /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -17,7 +17,7 @@ const PickOrder: React.FC = async () => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <I18nProvider namespaces={["pickOrder","navigation","common"]}> | |||||
| <I18nProvider namespaces={["pickOrder","navigation","common","purchaseOrder","home","item"]}> | |||||
| <Suspense fallback={<PickOrderSearch.Loading />}> | <Suspense fallback={<PickOrderSearch.Loading />}> | ||||
| <PickOrderSearch /> | <PickOrderSearch /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -31,7 +31,7 @@ const PoEdit: React.FC<Props> = async ({ searchParams }) => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| {/* <Typography variant="h4">{t("Create Material")}</Typography> */} | {/* <Typography variant="h4">{t("Create Material")}</Typography> */} | ||||
| <I18nProvider namespaces={[type, "navigation", "common", "dashboard"]}> | |||||
| <I18nProvider namespaces={[type, "navigation", "common", "dashboard", "home"]}> | |||||
| <Suspense fallback={<PoDetail.Loading />}> | <Suspense fallback={<PoDetail.Loading />}> | ||||
| <PoDetail id={id} /> | <PoDetail id={id} /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -38,7 +38,7 @@ const production: React.FC = async () => { | |||||
| {t("Create Process")} | {t("Create Process")} | ||||
| </Button> */} | </Button> */} | ||||
| </Stack> | </Stack> | ||||
| <I18nProvider namespaces={["production","productionProcess","navigation","common","purchaseOrder","jo"]}> | |||||
| <I18nProvider namespaces={["production","productionProcess","navigation","common","purchaseOrder","jo","dashboard"]}> | |||||
| <ProductionProcessPage printerCombo={printerCombo} /> {/* Use new component */} | <ProductionProcessPage printerCombo={printerCombo} /> {/* Use new component */} | ||||
| </I18nProvider> | </I18nProvider> | ||||
| </> | </> | ||||
| @@ -11,7 +11,7 @@ export default async function DeliveryOrderFloorPage() { | |||||
| const { t } = await getServerI18n("deliveryOrderFloor"); | const { t } = await getServerI18n("deliveryOrderFloor"); | ||||
| return ( | return ( | ||||
| <I18nProvider namespaces={["deliveryOrderFloor","navigation"]}> | |||||
| <I18nProvider namespaces={["deliveryOrderFloor","navigation","common"]}> | |||||
| <Stack spacing={2}> | <Stack spacing={2}> | ||||
| <Typography variant="h4">{t("title")}</Typography> | <Typography variant="h4">{t("title")}</Typography> | ||||
| <DeliveryOrderFloorSettings /> | <DeliveryOrderFloorSettings /> | ||||
| @@ -13,7 +13,7 @@ const MasterDataIssuesPage: React.FC = async () => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <PageTitleBar title={t("masterDataIssue_pageTitle")} className="mb-4" /> | <PageTitleBar title={t("masterDataIssue_pageTitle")} className="mb-4" /> | ||||
| <I18nProvider namespaces={["masterDataIssue"]}> | |||||
| <I18nProvider namespaces={["masterDataIssue","navigation","common"]}> | |||||
| <MasterDataIssuesTabs /> | <MasterDataIssuesTabs /> | ||||
| </I18nProvider> | </I18nProvider> | ||||
| </> | </> | ||||
| @@ -36,9 +36,11 @@ const qcCategory: React.FC = async () => { | |||||
| {t("Create Qc Category")} | {t("Create Qc Category")} | ||||
| </Button> | </Button> | ||||
| </Stack> | </Stack> | ||||
| <Suspense fallback={<QcCategorySearch.Loading />}> | |||||
| <QcCategorySearch /> | |||||
| </Suspense> | |||||
| <I18nProvider namespaces={["qcCategory","navigation","common"]}> | |||||
| <Suspense fallback={<QcCategorySearch.Loading />}> | |||||
| <QcCategorySearch /> | |||||
| </Suspense> | |||||
| </I18nProvider> | |||||
| </> | </> | ||||
| ); | ); | ||||
| }; | }; | ||||
| @@ -16,7 +16,7 @@ const qcItem: React.FC = async () => { | |||||
| <Typography variant="h4" marginInlineEnd={2}> | <Typography variant="h4" marginInlineEnd={2}> | ||||
| {t("Create Qc Item")} | {t("Create Qc Item")} | ||||
| </Typography> | </Typography> | ||||
| <I18nProvider namespaces={["qcItem"]}> | |||||
| <I18nProvider namespaces={["qcItem","navigation","common"]}> | |||||
| <QcItemSave /> | <QcItemSave /> | ||||
| </I18nProvider> | </I18nProvider> | ||||
| </> | </> | ||||
| @@ -43,7 +43,7 @@ const qcItem: React.FC<Props> = async ({ searchParams }) => { | |||||
| <Typography variant="h4" marginInlineEnd={2}> | <Typography variant="h4" marginInlineEnd={2}> | ||||
| {t("Edit Qc Item")} | {t("Edit Qc Item")} | ||||
| </Typography> | </Typography> | ||||
| <I18nProvider namespaces={["qcItem"]}> | |||||
| <I18nProvider namespaces={["qcItem","navigation","common"]}> | |||||
| <QcItemSave id={id} /> | <QcItemSave id={id} /> | ||||
| </I18nProvider> | </I18nProvider> | ||||
| </> | </> | ||||
| @@ -37,7 +37,7 @@ const qcItem: React.FC = async () => { | |||||
| </Button> | </Button> | ||||
| </Stack> | </Stack> | ||||
| <Suspense fallback={<QcItemSearch.Loading />}> | <Suspense fallback={<QcItemSearch.Loading />}> | ||||
| <I18nProvider namespaces={["common", "qcItem"]}> | |||||
| <I18nProvider namespaces={["qcItem","navigation","common"]}> | |||||
| <QcItemSearch /> | <QcItemSearch /> | ||||
| </I18nProvider> | </I18nProvider> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -16,7 +16,7 @@ export default async function ShopRouteBoardPage() { | |||||
| flexDirection: "column", | flexDirection: "column", | ||||
| }} | }} | ||||
| > | > | ||||
| <I18nProvider namespaces={["shop","navigation"]}> | |||||
| <I18nProvider namespaces={["shop","navigation","common"]}> | |||||
| <Suspense fallback={<GeneralLoading />}> | <Suspense fallback={<GeneralLoading />}> | ||||
| <RouteBoard /> | <RouteBoard /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -6,7 +6,7 @@ import GeneralLoading from "@/components/General/GeneralLoading"; | |||||
| export default async function ShopDetailPage() { | export default async function ShopDetailPage() { | ||||
| await getServerI18n("shop"); | await getServerI18n("shop"); | ||||
| return ( | return ( | ||||
| <I18nProvider namespaces={["shop","navigation"]}> | |||||
| <I18nProvider namespaces={["shop","navigation","common"]}> | |||||
| <Suspense fallback={<GeneralLoading />}> | <Suspense fallback={<GeneralLoading />}> | ||||
| <ShopDetail /> | <ShopDetail /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -10,7 +10,7 @@ import { notFound } from "next/navigation"; | |||||
| export default async function ShopPage() { | export default async function ShopPage() { | ||||
| await getServerI18n("shop"); | await getServerI18n("shop"); | ||||
| return ( | return ( | ||||
| <I18nProvider namespaces={["shop","navigation"]}> | |||||
| <I18nProvider namespaces={["shop","navigation","common"]}> | |||||
| <Suspense fallback={<ShopWrapper.Loading />}> | <Suspense fallback={<ShopWrapper.Loading />}> | ||||
| <ShopWrapper /> | <ShopWrapper /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -6,7 +6,7 @@ import GeneralLoading from "@/components/General/GeneralLoading"; | |||||
| export default async function TruckLaneDetailPage() { | export default async function TruckLaneDetailPage() { | ||||
| await getServerI18n("shop"); | await getServerI18n("shop"); | ||||
| return ( | return ( | ||||
| <I18nProvider namespaces={["shop","navigation"]}> | |||||
| <I18nProvider namespaces={["shop","navigation","common"]}> | |||||
| <Suspense fallback={<GeneralLoading />}> | <Suspense fallback={<GeneralLoading />}> | ||||
| <TruckLaneDetail /> | <TruckLaneDetail /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -12,7 +12,7 @@ type Props = {} & SearchParams; | |||||
| const StockOutIssueRecordDetail: React.FC<Props> = async ({ searchParams }) => { | const StockOutIssueRecordDetail: React.FC<Props> = async ({ searchParams }) => { | ||||
| return ( | return ( | ||||
| <> | <> | ||||
| <I18nProvider namespaces={["pickOrder", "navigation", "common"]}> | |||||
| <I18nProvider namespaces={["pickOrder","navigation","common","purchaseOrder"]}> | |||||
| <Suspense fallback={<PickOrderDetail.Loading />}> | <Suspense fallback={<PickOrderDetail.Loading />}> | ||||
| <PickOrderDetail consoCode={`${searchParams["consoCode"]}`} /> | <PickOrderDetail consoCode={`${searchParams["consoCode"]}`} /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -10,7 +10,7 @@ export const metadata: Metadata = { | |||||
| const StockOutIssueRecord: React.FC = async () => { | const StockOutIssueRecord: React.FC = async () => { | ||||
| return ( | return ( | ||||
| <> | <> | ||||
| <I18nProvider namespaces={["pickOrder", "navigation", "common"]}> | |||||
| <I18nProvider namespaces={["pickOrder","navigation","common","purchaseOrder","home","item"]}> | |||||
| <Suspense fallback={<PickOrderSearch.Loading />}> | <Suspense fallback={<PickOrderSearch.Loading />}> | ||||
| <PickOrderSearch /> | <PickOrderSearch /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -10,7 +10,7 @@ import { notFound } from "next/navigation"; | |||||
| export default async function InventoryManagementPage() { | export default async function InventoryManagementPage() { | ||||
| const { t } = await getServerI18n("stockTake"); | const { t } = await getServerI18n("stockTake"); | ||||
| return ( | return ( | ||||
| <I18nProvider namespaces={["stockTake", "navigation", "common"]}> | |||||
| <I18nProvider namespaces={["stockTake","navigation","common","pickOrder"]}> | |||||
| <Suspense fallback={<StockTakeManagementWrapper.Loading />}> | <Suspense fallback={<StockTakeManagementWrapper.Loading />}> | ||||
| <StockTakeManagementWrapper /> | <StockTakeManagementWrapper /> | ||||
| </Suspense> | </Suspense> | ||||
| @@ -1,6 +1,6 @@ | |||||
| import { preloadAllTasks } from "@/app/api/tasks"; | import { preloadAllTasks } from "@/app/api/tasks"; | ||||
| import CreateTaskTemplate from "@/components/CreateTaskTemplate"; | import CreateTaskTemplate from "@/components/CreateTaskTemplate"; | ||||
| import { getServerI18n } from "@/i18n"; | |||||
| import { getServerI18n, I18nProvider } from "@/i18n"; | |||||
| import Typography from "@mui/material/Typography"; | import Typography from "@mui/material/Typography"; | ||||
| import { Metadata } from "next"; | import { Metadata } from "next"; | ||||
| @@ -14,8 +14,10 @@ const Projects: React.FC = async () => { | |||||
| return ( | return ( | ||||
| <> | <> | ||||
| <Typography variant="h4">{t("Create Task Template")}</Typography> | |||||
| <CreateTaskTemplate /> | |||||
| <I18nProvider namespaces={["tasks","project","navigation","common"]}> | |||||
| <Typography variant="h4">{t("Create Task Template")}</Typography> | |||||
| <CreateTaskTemplate /> | |||||
| </I18nProvider> | |||||
| </> | </> | ||||
| ); | ); | ||||
| }; | }; | ||||
| @@ -7,6 +7,7 @@ import Stack from "@mui/material/Stack"; | |||||
| import Typography from "@mui/material/Typography"; | import Typography from "@mui/material/Typography"; | ||||
| import { Metadata } from "next"; | import { Metadata } from "next"; | ||||
| import Link from "next/link"; | import Link from "next/link"; | ||||
| import { I18nProvider } from "@/i18n"; | |||||
| import { Suspense } from "react"; | import { Suspense } from "react"; | ||||
| export const metadata: Metadata = { | export const metadata: Metadata = { | ||||
| @@ -37,9 +38,11 @@ const TaskTemplates: React.FC = async () => { | |||||
| {t("Create Template")} | {t("Create Template")} | ||||
| </Button> | </Button> | ||||
| </Stack> | </Stack> | ||||
| <Suspense fallback={<TaskTemplateSearch.Loading />}> | |||||
| <TaskTemplateSearch /> | |||||
| </Suspense> | |||||
| <I18nProvider namespaces={["project","tasks","navigation","common"]}> | |||||
| <Suspense fallback={<TaskTemplateSearch.Loading />}> | |||||
| <TaskTemplateSearch /> | |||||
| </Suspense> | |||||
| </I18nProvider> | |||||
| </> | </> | ||||
| ); | ); | ||||
| }; | }; | ||||
| @@ -476,8 +476,10 @@ function formatLaneWarningsClipboard( | |||||
| } | } | ||||
| function formatDiffFieldLabel(label: string, tr: TFunction<"shop">): string { | function formatDiffFieldLabel(label: string, tr: TFunction<"shop">): string { | ||||
| if (label === "物流公司") return tr("diffField_logisticsCompany"); | |||||
| return label; | |||||
| if (label === "versionLogField_logisticId") return tr("diffField_logisticsCompany"); | |||||
| // Translate i18n keys; fallback to raw label if not found | |||||
| const translated = tr(label as any); | |||||
| return translated !== label ? translated : label; | |||||
| } | } | ||||
| function downloadBase64Xlsx(base64: string, filename: string) { | function downloadBase64Xlsx(base64: string, filename: string) { | ||||
| @@ -5598,7 +5600,7 @@ const RouteBoard: React.FC = () => { | |||||
| (fe, fei) => { | (fe, fei) => { | ||||
| const isLogistic = | const isLogistic = | ||||
| fe.label === | fe.label === | ||||
| "物流公司"; | |||||
| "versionLogField_logisticId"; | |||||
| const resolveLogisticDisplay = | const resolveLogisticDisplay = | ||||
| (raw: string) => { | (raw: string) => { | ||||
| const s = String( | const s = String( | ||||
| @@ -317,7 +317,7 @@ const Shop: React.FC = () => { | |||||
| <Stack direction="row" alignItems="center" justifyContent="space-between" spacing={2}> | <Stack direction="row" alignItems="center" justifyContent="space-between" spacing={2}> | ||||
| <Typography variant="h4">{t("ShopAndTruck")}</Typography> | <Typography variant="h4">{t("ShopAndTruck")}</Typography> | ||||
| <Button variant="outlined" onClick={() => router.push("/settings/shop/board")}> | <Button variant="outlined" onClick={() => router.push("/settings/shop/board")}> | ||||
| 車線看板 | |||||
| {t("Route Board")} | |||||
| </Button> | </Button> | ||||
| </Stack> | </Stack> | ||||
| </Box> | </Box> | ||||
| @@ -54,18 +54,18 @@ function isRowInsertedInDiff(ch: DiffFieldChange[]): boolean { | |||||
| return laneOk && codeOk; | return laneOk && codeOk; | ||||
| } | } | ||||
| export const VERSION_LOG_LOADING_SEQUENCE_LABEL = "裝載順序"; | |||||
| export const VERSION_LOG_LOADING_SEQUENCE_LABEL = "versionLogField_loadingSequence"; | |||||
| const VERSION_LOG_FIELD_LABEL: Record<string, string> = { | const VERSION_LOG_FIELD_LABEL: Record<string, string> = { | ||||
| departureTime: "發車時段", | |||||
| departureTime: "versionLogField_departureTime", | |||||
| loadingSequence: VERSION_LOG_LOADING_SEQUENCE_LABEL, | loadingSequence: VERSION_LOG_LOADING_SEQUENCE_LABEL, | ||||
| branchName: "分店名稱", | |||||
| districtReference: "區域", | |||||
| shopCode: "店鋪代碼", | |||||
| storeId: "樓層/店別", | |||||
| remark: "備註", | |||||
| truckLanceCode: "車線代碼", | |||||
| logisticId: "物流公司", | |||||
| branchName: "versionLogField_branchName", | |||||
| districtReference: "versionLogField_districtReference", | |||||
| shopCode: "versionLogField_shopCode", | |||||
| storeId: "versionLogField_storeId", | |||||
| remark: "versionLogField_remark", | |||||
| truckLanceCode: "versionLogField_truckLanceCode", | |||||
| logisticId: "versionLogField_logisticId", | |||||
| }; | }; | ||||
| /** 版本 LOG 用:時段顯示為 HH:mm,避免 ISO / 帶秒過長 */ | /** 版本 LOG 用:時段顯示為 HH:mm,避免 ISO / 帶秒過長 */ | ||||
| @@ -458,5 +458,14 @@ | |||||
| "Truck ID is required": "Truck ID is required", | "Truck ID is required": "Truck ID is required", | ||||
| "Are you sure you want to delete this truck lane?": "Are you sure you want to delete this truck lane?", | "Are you sure you want to delete this truck lane?": "Are you sure you want to delete this truck lane?", | ||||
| "Search or select branch": "Search or select branch", | "Search or select branch": "Search or select branch", | ||||
| "Search or select shop code": "Search or select shop code" | |||||
| "Search or select shop code": "Search or select shop code", | |||||
| "versionLogField_departureTime": "Departure time", | |||||
| "versionLogField_loadingSequence": "Load sequence", | |||||
| "versionLogField_branchName": "Branch name", | |||||
| "versionLogField_districtReference": "District", | |||||
| "versionLogField_shopCode": "Shop code", | |||||
| "versionLogField_storeId": "Floor / Store", | |||||
| "versionLogField_remark": "Remark", | |||||
| "versionLogField_truckLanceCode": "Lane code", | |||||
| "versionLogField_logisticId": "Logistics" | |||||
| } | } | ||||
| @@ -458,5 +458,14 @@ | |||||
| "Truck ID is required": "需要卡車ID", | "Truck ID is required": "需要卡車ID", | ||||
| "Are you sure you want to delete this truck lane?": "您確定要刪除此車線嗎?", | "Are you sure you want to delete this truck lane?": "您確定要刪除此車線嗎?", | ||||
| "Search or select branch": "搜索或選擇分店", | "Search or select branch": "搜索或選擇分店", | ||||
| "Search or select shop code": "搜索或選擇店鋪編號" | |||||
| "Search or select shop code": "搜索或選擇店鋪編號", | |||||
| "versionLogField_departureTime": "發車時段", | |||||
| "versionLogField_loadingSequence": "裝載順序", | |||||
| "versionLogField_branchName": "分店名稱", | |||||
| "versionLogField_districtReference": "區域", | |||||
| "versionLogField_shopCode": "店鋪代碼", | |||||
| "versionLogField_storeId": "樓層/店別", | |||||
| "versionLogField_remark": "備註", | |||||
| "versionLogField_truckLanceCode": "車線代碼", | |||||
| "versionLogField_logisticId": "物流公司" | |||||
| } | } | ||||