tommy 2 недель назад
Родитель
Сommit
228312633a
36 измененных файлов: 79 добавлений и 52 удалений
  1. +1
    -1
      src/app/(main)/do copy 2/edit/page.tsx
  2. +1
    -1
      src/app/(main)/do copy 2/page.tsx
  3. +1
    -1
      src/app/(main)/do copy/edit/page.tsx
  4. +1
    -1
      src/app/(main)/do copy/page.tsx
  5. +1
    -1
      src/app/(main)/do/edit/page.tsx
  6. +1
    -1
      src/app/(main)/do/page.tsx
  7. +1
    -1
      src/app/(main)/doworkbenchsearch/page.tsx
  8. +1
    -1
      src/app/(main)/finishedGood/detail/page.tsx
  9. +1
    -1
      src/app/(main)/finishedGood/management/page.tsx
  10. +1
    -1
      src/app/(main)/finishedGood/page.tsx
  11. +1
    -1
      src/app/(main)/inventory/page.tsx
  12. +1
    -1
      src/app/(main)/jodetail/page.tsx
  13. +1
    -1
      src/app/(main)/pickOrder/detail/page.tsx
  14. +1
    -1
      src/app/(main)/pickOrder/page.tsx
  15. +1
    -1
      src/app/(main)/po/edit/page.tsx
  16. +1
    -1
      src/app/(main)/production/page.tsx
  17. +1
    -1
      src/app/(main)/settings/deliveryOrderFloor/page.tsx
  18. +1
    -1
      src/app/(main)/settings/masterDataIssues/page.tsx
  19. +5
    -3
      src/app/(main)/settings/qcCategory/page.tsx
  20. +1
    -1
      src/app/(main)/settings/qcItem copy/create/page.tsx
  21. +1
    -1
      src/app/(main)/settings/qcItem copy/edit/page.tsx
  22. +1
    -1
      src/app/(main)/settings/qcItem copy/page.tsx
  23. +1
    -1
      src/app/(main)/settings/shop/board/page.tsx
  24. +1
    -1
      src/app/(main)/settings/shop/detail/page.tsx
  25. +1
    -1
      src/app/(main)/settings/shop/page.tsx
  26. +1
    -1
      src/app/(main)/settings/shop/truckdetail/page.tsx
  27. +1
    -1
      src/app/(main)/stockOutIssueRecord/detail/page.tsx
  28. +1
    -1
      src/app/(main)/stockOutIssueRecord/page.tsx
  29. +1
    -1
      src/app/(main)/stocktakemanagement/page.tsx
  30. +5
    -3
      src/app/(main)/tasks/create/page.tsx
  31. +6
    -3
      src/app/(main)/tasks/page.tsx
  32. +5
    -3
      src/components/Shop/RouteBoard.tsx
  33. +1
    -1
      src/components/Shop/Shop.tsx
  34. +9
    -9
      src/components/Shop/routeBoardVersionLog.ts
  35. +10
    -1
      src/i18n/en/shop.json
  36. +10
    -1
      src/i18n/zh/shop.json

+ 1
- 1
src/app/(main)/do copy 2/edit/page.tsx Просмотреть файл

@@ -24,7 +24,7 @@ const DoEdit: React.FC<Props> = async ({ searchParams }) => {
return (
<>
<PageTitleBar title={t("Edit Delivery Order Detail")} className="mb-4" />
<I18nProvider namespaces={["do", "common"]}>
<I18nProvider namespaces={["do","navigation","common","home"]}>
<Suspense fallback={<DoDetail.Loading />}>
<DoDetail id={parseInt(id)} />
</Suspense>


+ 1
- 1
src/app/(main)/do copy 2/page.tsx Просмотреть файл

@@ -23,7 +23,7 @@ const Page: React.FC = async () => {
/doworkbench
</Link>
</p>
<I18nProvider namespaces={["do", "common"]}>
<I18nProvider namespaces={["do","navigation","common","home"]}>
<Suspense fallback={<GeneralLoading />}>
<DoSearchWorkbench workbenchHrefBase="/do copy 2" />
</Suspense>


+ 1
- 1
src/app/(main)/do copy/edit/page.tsx Просмотреть файл

@@ -24,7 +24,7 @@ const DoEdit: React.FC<Props> = async ({ searchParams }) => {
return (
<>
<PageTitleBar title={t("Edit Delivery Order Detail")} className="mb-4" />
<I18nProvider namespaces={["do", "common"]}>
<I18nProvider namespaces={["do","navigation","common","home"]}>
<Suspense fallback={<DoDetail.Loading />}>
<DoDetail id={parseInt(id)} />
</Suspense>


+ 1
- 1
src/app/(main)/do copy/page.tsx Просмотреть файл

@@ -17,7 +17,7 @@ const DeliveryOrder: React.FC = async () => {
return (
<>
<PageTitleBar title={t("Delivery Order")} className="mb-4" />
<I18nProvider namespaces={["do", "common"]}>
<I18nProvider namespaces={["do","navigation","common","home"]}>
<Suspense fallback={<DoSearch.Loading />}>
<DoSearch />
</Suspense>


+ 1
- 1
src/app/(main)/do/edit/page.tsx Просмотреть файл

@@ -24,7 +24,7 @@ const DoEdit: React.FC<Props> = async ({ searchParams }) => {
return (
<>
<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 />}>
<DoDetail id={parseInt(id)} />
</Suspense>


+ 1
- 1
src/app/(main)/do/page.tsx Просмотреть файл

@@ -17,7 +17,7 @@ const DeliveryOrder: React.FC = async () => {
return (
<>
<PageTitleBar title={t("Delivery Order")} className="mb-4" />
<I18nProvider namespaces={["do","navigation","common"]}>
<I18nProvider namespaces={["do","navigation","common","home"]}>
<Suspense fallback={<DoSearch.Loading />}>
<DoSearch />
</Suspense>


+ 1
- 1
src/app/(main)/doworkbenchsearch/page.tsx Просмотреть файл

@@ -19,7 +19,7 @@ const DoWorkbenchSearchPage: React.FC = async () => {
title={t("DO Workbench Search", { defaultValue: "DO Workbench Search" })}
className="mb-4"
/>
<I18nProvider namespaces={["doWorkbench","navigation","common","do"]}>
<I18nProvider namespaces={["doWorkbench","navigation","common","do","home"]}>
<Suspense fallback={<GeneralLoading />}>
<DoSearchWorkbench />
</Suspense>


+ 1
- 1
src/app/(main)/finishedGood/detail/page.tsx Просмотреть файл

@@ -18,7 +18,7 @@ const PickOrder: React.FC<Props> = async ({ searchParams }) => {

return (
<>
<I18nProvider namespaces={["finishedGood","navigation","common","pickOrder","ticketReleaseTable"]}>
<I18nProvider namespaces={["finishedGood","navigation","common","pickOrder","ticketReleaseTable","purchaseOrder","home","item"]}>
<Suspense fallback={<FinishedGoodSearchWrapper.Loading />}>
<FinishedGoodSearchWrapper />
</Suspense>


+ 1
- 1
src/app/(main)/finishedGood/management/page.tsx Просмотреть файл

@@ -18,7 +18,7 @@ const Page = async () => {
redirect("/dashboard");
}
return (
<I18nProvider namespaces={["finishedgoodmanagement", "navigation"]}>
<I18nProvider namespaces={["finishedgoodmanagement","navigation","common"]}>
<Suspense fallback={<FinishedGoodManagement.Loading />}>
<FinishedGoodManagement />
</Suspense>


+ 1
- 1
src/app/(main)/finishedGood/page.tsx Просмотреть файл

@@ -17,7 +17,7 @@ const PickOrder: React.FC = async () => {

return (
<>
<I18nProvider namespaces={["finishedGood","navigation","common","pickOrder","ticketReleaseTable"]}>
<I18nProvider namespaces={["finishedGood","navigation","common","pickOrder","ticketReleaseTable","purchaseOrder","home","item"]}>
<Suspense fallback={<FinishedGoodSearch.Loading />}>
<FinishedGoodSearch />
</Suspense>


+ 1
- 1
src/app/(main)/inventory/page.tsx Просмотреть файл

@@ -30,7 +30,7 @@ const Inventory: React.FC = async () => {
{t("Inventory")}
</Typography>
</Stack>
<I18nProvider namespaces={["inventory","navigation","common"]}>
<I18nProvider namespaces={["inventory","navigation","common","item"]}>
<Suspense fallback={<InventorySearch.Loading />}>
<InventorySearch />
</Suspense>


+ 1
- 1
src/app/(main)/jodetail/page.tsx Просмотреть файл

@@ -18,7 +18,7 @@ const Jodetail: React.FC = async () => {
return (
<>
<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 />}>
<JodetailSearchWrapper />
</Suspense>


+ 1
- 1
src/app/(main)/pickOrder/detail/page.tsx Просмотреть файл

@@ -18,7 +18,7 @@ const PickOrder: React.FC<Props> = async ({ searchParams }) => {

return (
<>
<I18nProvider namespaces={["pickOrder","navigation","common"]}>
<I18nProvider namespaces={["pickOrder","navigation","common","purchaseOrder"]}>
<Suspense fallback={<PickOrderDetail.Loading />}>
<PickOrderDetail consoCode={`${searchParams["consoCode"]}`} />
</Suspense>


+ 1
- 1
src/app/(main)/pickOrder/page.tsx Просмотреть файл

@@ -17,7 +17,7 @@ const PickOrder: React.FC = async () => {

return (
<>
<I18nProvider namespaces={["pickOrder","navigation","common"]}>
<I18nProvider namespaces={["pickOrder","navigation","common","purchaseOrder","home","item"]}>
<Suspense fallback={<PickOrderSearch.Loading />}>
<PickOrderSearch />
</Suspense>


+ 1
- 1
src/app/(main)/po/edit/page.tsx Просмотреть файл

@@ -31,7 +31,7 @@ const PoEdit: React.FC<Props> = async ({ searchParams }) => {
return (
<>
{/* <Typography variant="h4">{t("Create Material")}</Typography> */}
<I18nProvider namespaces={[type, "navigation", "common", "dashboard"]}>
<I18nProvider namespaces={[type, "navigation", "common", "dashboard", "home"]}>
<Suspense fallback={<PoDetail.Loading />}>
<PoDetail id={id} />
</Suspense>


+ 1
- 1
src/app/(main)/production/page.tsx Просмотреть файл

@@ -38,7 +38,7 @@ const production: React.FC = async () => {
{t("Create Process")}
</Button> */}
</Stack>
<I18nProvider namespaces={["production","productionProcess","navigation","common","purchaseOrder","jo"]}>
<I18nProvider namespaces={["production","productionProcess","navigation","common","purchaseOrder","jo","dashboard"]}>
<ProductionProcessPage printerCombo={printerCombo} /> {/* Use new component */}
</I18nProvider>
</>


+ 1
- 1
src/app/(main)/settings/deliveryOrderFloor/page.tsx Просмотреть файл

@@ -11,7 +11,7 @@ export default async function DeliveryOrderFloorPage() {
const { t } = await getServerI18n("deliveryOrderFloor");

return (
<I18nProvider namespaces={["deliveryOrderFloor","navigation"]}>
<I18nProvider namespaces={["deliveryOrderFloor","navigation","common"]}>
<Stack spacing={2}>
<Typography variant="h4">{t("title")}</Typography>
<DeliveryOrderFloorSettings />


+ 1
- 1
src/app/(main)/settings/masterDataIssues/page.tsx Просмотреть файл

@@ -13,7 +13,7 @@ const MasterDataIssuesPage: React.FC = async () => {
return (
<>
<PageTitleBar title={t("masterDataIssue_pageTitle")} className="mb-4" />
<I18nProvider namespaces={["masterDataIssue"]}>
<I18nProvider namespaces={["masterDataIssue","navigation","common"]}>
<MasterDataIssuesTabs />
</I18nProvider>
</>


+ 5
- 3
src/app/(main)/settings/qcCategory/page.tsx Просмотреть файл

@@ -36,9 +36,11 @@ const qcCategory: React.FC = async () => {
{t("Create Qc Category")}
</Button>
</Stack>
<Suspense fallback={<QcCategorySearch.Loading />}>
<QcCategorySearch />
</Suspense>
<I18nProvider namespaces={["qcCategory","navigation","common"]}>
<Suspense fallback={<QcCategorySearch.Loading />}>
<QcCategorySearch />
</Suspense>
</I18nProvider>
</>
);
};


+ 1
- 1
src/app/(main)/settings/qcItem copy/create/page.tsx Просмотреть файл

@@ -16,7 +16,7 @@ const qcItem: React.FC = async () => {
<Typography variant="h4" marginInlineEnd={2}>
{t("Create Qc Item")}
</Typography>
<I18nProvider namespaces={["qcItem"]}>
<I18nProvider namespaces={["qcItem","navigation","common"]}>
<QcItemSave />
</I18nProvider>
</>


+ 1
- 1
src/app/(main)/settings/qcItem copy/edit/page.tsx Просмотреть файл

@@ -43,7 +43,7 @@ const qcItem: React.FC<Props> = async ({ searchParams }) => {
<Typography variant="h4" marginInlineEnd={2}>
{t("Edit Qc Item")}
</Typography>
<I18nProvider namespaces={["qcItem"]}>
<I18nProvider namespaces={["qcItem","navigation","common"]}>
<QcItemSave id={id} />
</I18nProvider>
</>


+ 1
- 1
src/app/(main)/settings/qcItem copy/page.tsx Просмотреть файл

@@ -37,7 +37,7 @@ const qcItem: React.FC = async () => {
</Button>
</Stack>
<Suspense fallback={<QcItemSearch.Loading />}>
<I18nProvider namespaces={["common", "qcItem"]}>
<I18nProvider namespaces={["qcItem","navigation","common"]}>
<QcItemSearch />
</I18nProvider>
</Suspense>


+ 1
- 1
src/app/(main)/settings/shop/board/page.tsx Просмотреть файл

@@ -16,7 +16,7 @@ export default async function ShopRouteBoardPage() {
flexDirection: "column",
}}
>
<I18nProvider namespaces={["shop","navigation"]}>
<I18nProvider namespaces={["shop","navigation","common"]}>
<Suspense fallback={<GeneralLoading />}>
<RouteBoard />
</Suspense>


+ 1
- 1
src/app/(main)/settings/shop/detail/page.tsx Просмотреть файл

@@ -6,7 +6,7 @@ import GeneralLoading from "@/components/General/GeneralLoading";
export default async function ShopDetailPage() {
await getServerI18n("shop");
return (
<I18nProvider namespaces={["shop","navigation"]}>
<I18nProvider namespaces={["shop","navigation","common"]}>
<Suspense fallback={<GeneralLoading />}>
<ShopDetail />
</Suspense>


+ 1
- 1
src/app/(main)/settings/shop/page.tsx Просмотреть файл

@@ -10,7 +10,7 @@ import { notFound } from "next/navigation";
export default async function ShopPage() {
await getServerI18n("shop");
return (
<I18nProvider namespaces={["shop","navigation"]}>
<I18nProvider namespaces={["shop","navigation","common"]}>
<Suspense fallback={<ShopWrapper.Loading />}>
<ShopWrapper />
</Suspense>


+ 1
- 1
src/app/(main)/settings/shop/truckdetail/page.tsx Просмотреть файл

@@ -6,7 +6,7 @@ import GeneralLoading from "@/components/General/GeneralLoading";
export default async function TruckLaneDetailPage() {
await getServerI18n("shop");
return (
<I18nProvider namespaces={["shop","navigation"]}>
<I18nProvider namespaces={["shop","navigation","common"]}>
<Suspense fallback={<GeneralLoading />}>
<TruckLaneDetail />
</Suspense>


+ 1
- 1
src/app/(main)/stockOutIssueRecord/detail/page.tsx Просмотреть файл

@@ -12,7 +12,7 @@ type Props = {} & SearchParams;
const StockOutIssueRecordDetail: React.FC<Props> = async ({ searchParams }) => {
return (
<>
<I18nProvider namespaces={["pickOrder", "navigation", "common"]}>
<I18nProvider namespaces={["pickOrder","navigation","common","purchaseOrder"]}>
<Suspense fallback={<PickOrderDetail.Loading />}>
<PickOrderDetail consoCode={`${searchParams["consoCode"]}`} />
</Suspense>


+ 1
- 1
src/app/(main)/stockOutIssueRecord/page.tsx Просмотреть файл

@@ -10,7 +10,7 @@ export const metadata: Metadata = {
const StockOutIssueRecord: React.FC = async () => {
return (
<>
<I18nProvider namespaces={["pickOrder", "navigation", "common"]}>
<I18nProvider namespaces={["pickOrder","navigation","common","purchaseOrder","home","item"]}>
<Suspense fallback={<PickOrderSearch.Loading />}>
<PickOrderSearch />
</Suspense>


+ 1
- 1
src/app/(main)/stocktakemanagement/page.tsx Просмотреть файл

@@ -10,7 +10,7 @@ import { notFound } from "next/navigation";
export default async function InventoryManagementPage() {
const { t } = await getServerI18n("stockTake");
return (
<I18nProvider namespaces={["stockTake", "navigation", "common"]}>
<I18nProvider namespaces={["stockTake","navigation","common","pickOrder"]}>
<Suspense fallback={<StockTakeManagementWrapper.Loading />}>
<StockTakeManagementWrapper />
</Suspense>


+ 5
- 3
src/app/(main)/tasks/create/page.tsx Просмотреть файл

@@ -1,6 +1,6 @@
import { preloadAllTasks } from "@/app/api/tasks";
import CreateTaskTemplate from "@/components/CreateTaskTemplate";
import { getServerI18n } from "@/i18n";
import { getServerI18n, I18nProvider } from "@/i18n";
import Typography from "@mui/material/Typography";
import { Metadata } from "next";

@@ -14,8 +14,10 @@ const Projects: React.FC = async () => {

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>
</>
);
};


+ 6
- 3
src/app/(main)/tasks/page.tsx Просмотреть файл

@@ -7,6 +7,7 @@ import Stack from "@mui/material/Stack";
import Typography from "@mui/material/Typography";
import { Metadata } from "next";
import Link from "next/link";
import { I18nProvider } from "@/i18n";
import { Suspense } from "react";

export const metadata: Metadata = {
@@ -37,9 +38,11 @@ const TaskTemplates: React.FC = async () => {
{t("Create Template")}
</Button>
</Stack>
<Suspense fallback={<TaskTemplateSearch.Loading />}>
<TaskTemplateSearch />
</Suspense>
<I18nProvider namespaces={["project","tasks","navigation","common"]}>
<Suspense fallback={<TaskTemplateSearch.Loading />}>
<TaskTemplateSearch />
</Suspense>
</I18nProvider>
</>
);
};


+ 5
- 3
src/components/Shop/RouteBoard.tsx Просмотреть файл

@@ -476,8 +476,10 @@ function formatLaneWarningsClipboard(
}

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) {
@@ -5598,7 +5600,7 @@ const RouteBoard: React.FC = () => {
(fe, fei) => {
const isLogistic =
fe.label ===
"物流公司";
"versionLogField_logisticId";
const resolveLogisticDisplay =
(raw: string) => {
const s = String(


+ 1
- 1
src/components/Shop/Shop.tsx Просмотреть файл

@@ -317,7 +317,7 @@ const Shop: React.FC = () => {
<Stack direction="row" alignItems="center" justifyContent="space-between" spacing={2}>
<Typography variant="h4">{t("ShopAndTruck")}</Typography>
<Button variant="outlined" onClick={() => router.push("/settings/shop/board")}>
車線看板
{t("Route Board")}
</Button>
</Stack>
</Box>


+ 9
- 9
src/components/Shop/routeBoardVersionLog.ts Просмотреть файл

@@ -54,18 +54,18 @@ function isRowInsertedInDiff(ch: DiffFieldChange[]): boolean {
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> = {
departureTime: "發車時段",
departureTime: "versionLogField_departureTime",
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 / 帶秒過長 */


+ 10
- 1
src/i18n/en/shop.json Просмотреть файл

@@ -458,5 +458,14 @@
"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?",
"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"
}

+ 10
- 1
src/i18n/zh/shop.json Просмотреть файл

@@ -458,5 +458,14 @@
"Truck ID is required": "需要卡車ID",
"Are you sure you want to delete this truck lane?": "您確定要刪除此車線嗎?",
"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": "物流公司"
}

Загрузка…
Отмена
Сохранить