From a0515e4fbbb3b54f9f0585211e9ca6a189f6d957 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Wed, 2 Sep 2026 11:28:57 +0800 Subject: [PATCH] demo bom excel --- src/app/api/bom/client.ts | 14 ++++++++ .../ImportBom/BomVersionControlBar.tsx | 28 +++++++++++++-- .../ImportBom/ImportBomDetailTab.tsx | 34 ++++++++++++++++++- src/i18n/en/importBom.json | 2 ++ src/i18n/zh/importBom.json | 2 ++ 5 files changed, 77 insertions(+), 3 deletions(-) diff --git a/src/app/api/bom/client.ts b/src/app/api/bom/client.ts index 6b3f5713..315ede41 100644 --- a/src/app/api/bom/client.ts +++ b/src/app/api/bom/client.ts @@ -182,6 +182,20 @@ export async function fetchBomComboClient(options?: { return response.data; } + export async function downloadBomDetailExcelClient( + id: number, + fileName: string, + ): Promise<{ blob: Blob; fileName: string }> { + const response = await axiosInstance.get( + `${NEXT_PUBLIC_API_URL}/bom/${id}/export-excel`, + { responseType: "blob" }, + ); + return { + blob: response.data as Blob, + fileName, + }; + } + export async function editBomClient( id: number, request: EditBomRequest, diff --git a/src/components/ImportBom/BomVersionControlBar.tsx b/src/components/ImportBom/BomVersionControlBar.tsx index 8e5ced08..7072d680 100644 --- a/src/components/ImportBom/BomVersionControlBar.tsx +++ b/src/components/ImportBom/BomVersionControlBar.tsx @@ -14,6 +14,7 @@ import { Typography, } from "@mui/material"; import SaveIcon from "@mui/icons-material/Save"; +import FileDownloadIcon from "@mui/icons-material/FileDownload"; import type { BomVersionSummary } from "@/app/api/bom"; import { fetchBomVersionsClient } from "@/app/api/bom/client"; import { useTranslation } from "react-i18next"; @@ -26,12 +27,15 @@ type Props = { compareMode: boolean; compareToId: number | ""; saving: boolean; + exporting?: boolean; versionsRefreshKey?: number; saveDisabled: boolean; + exportDisabled?: boolean; saveError?: string | null; onVersionChange: (id: number) => void; onToggleCompare: () => void; onCompareToChange: (id: number) => void; + onExport?: () => void; onSave: () => void; }; @@ -63,12 +67,15 @@ export const BomVersionControlBar: React.FC = ({ compareMode, compareToId, saving, + exporting = false, versionsRefreshKey = 0, saveDisabled, + exportDisabled = false, saveError, onVersionChange, onToggleCompare, onCompareToChange, + onExport, onSave, }) => { const { t } = useTranslation("importBom"); @@ -94,7 +101,7 @@ export const BomVersionControlBar: React.FC = ({ }, [bomCode, bomKind, versionsRefreshKey]); const showCompareButton = versions.length >= 2; - const controlsDisabled = loadingVersions || saving; + const controlsDisabled = loadingVersions || saving || exporting; const comparingTwo = compareMode && versionId !== "" && @@ -189,6 +196,23 @@ export const BomVersionControlBar: React.FC = ({ + {onExport && ( + + )}