FPSMS-frontend
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 

55 строки
2.3 KiB

  1. /**
  2. * Multi-sheet 總表 export for the 採購 chart page — mirrors on-screen charts and drill-down data.
  3. */
  4. import { exportMultiSheetToXlsx, type MultiSheetSpec } from "../_components/exportChartToXlsx";
  5. export type PurchaseChartMasterExportPayload = {
  6. /** ISO timestamp for audit */
  7. exportedAtIso: string;
  8. /** 篩選與情境 — key-value rows */
  9. metaRows: Record<string, unknown>[];
  10. /** 預計送貨 donut (依預計到貨日、上方篩選) */
  11. estimatedDonutRows: Record<string, unknown>[];
  12. /** 實際已送貨 donut (依訂單日期、上方篩選) */
  13. actualStatusDonutRows: Record<string, unknown>[];
  14. /** 貨品摘要表 (當前 drill) */
  15. itemSummaryRows: Record<string, unknown>[];
  16. /** 供應商分佈 (由採購單明細彙總) */
  17. supplierDistributionRows: Record<string, unknown>[];
  18. /** 採購單列表 */
  19. purchaseOrderListRows: Record<string, unknown>[];
  20. /** 全量採購單行明細 (每張 PO 所有行) */
  21. purchaseOrderLineRows: Record<string, unknown>[];
  22. };
  23. function sheetOrPlaceholder(name: string, rows: Record<string, unknown>[], emptyMessage: string): MultiSheetSpec {
  24. if (rows.length > 0) return { name, rows };
  25. return {
  26. name,
  27. rows: [{ 說明: emptyMessage }],
  28. };
  29. }
  30. /**
  31. * Build worksheet specs (used by {@link exportPurchaseChartMasterToFile}).
  32. */
  33. export function buildPurchaseChartMasterSheets(payload: PurchaseChartMasterExportPayload): MultiSheetSpec[] {
  34. return [
  35. { name: "篩選條件與情境", rows: payload.metaRows },
  36. sheetOrPlaceholder("預計送貨", payload.estimatedDonutRows, "無資料(請確認訂單日期與篩選)"),
  37. sheetOrPlaceholder("實際已送貨", payload.actualStatusDonutRows, "無資料"),
  38. sheetOrPlaceholder("貨品摘要", payload.itemSummaryRows, "無資料(可能為篩選交集為空或未載入)"),
  39. sheetOrPlaceholder("供應商分佈", payload.supplierDistributionRows, "無資料"),
  40. sheetOrPlaceholder("採購單列表", payload.purchaseOrderListRows, "無採購單明細可匯出"),
  41. sheetOrPlaceholder("採購單行明細", payload.purchaseOrderLineRows, "無行資料(採購單列表為空)"),
  42. ];
  43. }
  44. export function exportPurchaseChartMasterToFile(
  45. payload: PurchaseChartMasterExportPayload,
  46. filenameBase: string
  47. ): void {
  48. const sheets = buildPurchaseChartMasterSheets(payload);
  49. exportMultiSheetToXlsx(sheets, filenameBase);
  50. }