import * as XLSX from "xlsx"; import { SuperTBeamData } from "../core/schema/superT.schema"; export function exportToExcelContract( beamData: SuperTBeamData, globalConfig: any, bridgeData: any, ) { // 1. Tạo Workbook mới const workbook = XLSX.utils.book_new(); // 2. Sheet 1: Thông số Dầm Super-T const beamSheetData = [ ["Tham số (Parameter)", "Giá trị (Value)", "Đơn vị (Unit)", "Mô tả"], ["ID", beamData.id, "", "Mã định danh dầm"], ["Code", beamData.code, "", "Mã hiệu dầm"], ["Length", beamData.length, "m", "Chiều dài dầm"], ["Height", beamData.height, "m", "Chiều cao dầm"], ["TopFlangeWidth", beamData.topFlangeWidth, "m", "Chiều rộng cánh trên"], [ "TopFlangeThickness", beamData.topFlangeThickness, "m", "Chiều dày cánh trên", ], ["WebThickness", beamData.webThickness, "m", "Chiều dày sườn dầm"], [ "BottomFlangeWidth", beamData.bottomFlangeWidth, "m", "Chiều rộng cánh dưới", ], [ "BottomFlangeThickness", beamData.bottomFlangeThickness, "m", "Chiều dày cánh dưới", ], ["StrandCount", beamData.strandCount, "sợi", "Số lượng tao cáp DƯL"], [ "DiaphragmPositions", beamData.diaphragmPositions.join("; "), "m", "Vị trí dầm ngang", ], ]; const beamSheet = XLSX.utils.aoa_to_sheet(beamSheetData); XLSX.utils.book_append_sheet(workbook, beamSheet, "SuperT_Beam"); // 3. Sheet 2: Cấu hình Chung & Tổng thể Cầu (Alignment & Assembly) const bridgeSheetData = [ ["Tham số (Parameter)", "Giá trị (Value)", "Đơn vị"], ["SpanCount", globalConfig.spanCount, "nhịp"], ["BeamCountPerSpan", globalConfig.beamCountPerSpan, "dầm/nhịp"], ["BeamSpacing", globalConfig.beamSpacing, "mm"], ["DeckWidth", bridgeData.deck.width, "mm"], ["DeckThickness", bridgeData.deck.thickness, "mm"], ["PierHeight", bridgeData.pier.height, "mm"], ["PierDiameter", bridgeData.pier.diameter, "mm"], ]; const bridgeSheet = XLSX.utils.aoa_to_sheet(bridgeSheetData); XLSX.utils.book_append_sheet(workbook, bridgeSheet, "Bridge_Assembly"); // 4. Tải file Excel về client XLSX.writeFile(workbook, `TEDI_SuperT_Contract_${Date.now()}.xlsx`); }