|
|
@@ -48,7 +48,7 @@ class ExcelExportUtil {
|
|
|
// 为每个订单创建工作表
|
|
|
for (let i = 0; i < ordersData.length; i++) {
|
|
|
const orderData = ordersData[i];
|
|
|
- const worksheet = workbook.addWorksheet(this.sanitizeSheetName(orderData.orderCode));
|
|
|
+ const worksheet = workbook.addWorksheet(this.sanitizeSheetName(orderData['订单编码']));
|
|
|
|
|
|
// 生成订单Sheet内容
|
|
|
this.generateOrderSheet(worksheet, orderData);
|
|
|
@@ -71,22 +71,25 @@ class ExcelExportUtil {
|
|
|
*/
|
|
|
generateOrderSheet(worksheet, orderData) {
|
|
|
let rowIndex = 1;
|
|
|
- const maxColumns = 7; // 7个字段
|
|
|
+ const maxColumns = 10; // 10个主要字段
|
|
|
|
|
|
// 1. 设置列宽
|
|
|
worksheet.columns = [
|
|
|
- { width: 15 }, // 订单号
|
|
|
- { width: 20 }, // 项目名称
|
|
|
- { width: 15 }, // 供应商
|
|
|
- { width: 12 }, // 采购数量
|
|
|
- { width: 12 }, // 采购单价
|
|
|
- { width: 15 }, // 采购金额
|
|
|
- { width: 15 } // 付款金额
|
|
|
+ { width: 15 }, // 订单编码
|
|
|
+ { width: 20 }, // 组织名称
|
|
|
+ { width: 20 }, // 客户名称
|
|
|
+ { width: 12 }, // 订单类型
|
|
|
+ { width: 12 }, // 订单状态
|
|
|
+ { width: 15 }, // 订单总金额
|
|
|
+ { width: 15 }, // 订单总数量
|
|
|
+ { width: 15 }, // 收货人姓名
|
|
|
+ { width: 15 }, // 收货人电话
|
|
|
+ { width: 20 } // 创建时间
|
|
|
];
|
|
|
|
|
|
// 2. 标题行
|
|
|
const titleRow = worksheet.getRow(rowIndex++);
|
|
|
- titleRow.values = [`订单采购汇总 - ${orderData.orderCode}`];
|
|
|
+ titleRow.values = [`订单汇总 - ${orderData['订单编码']}`];
|
|
|
titleRow.font = { size: 14, bold: true };
|
|
|
titleRow.alignment = { horizontal: 'center', vertical: 'middle' };
|
|
|
titleRow.height = 40;
|
|
|
@@ -97,19 +100,25 @@ class ExcelExportUtil {
|
|
|
|
|
|
// 4. 表头行
|
|
|
const headerRow = worksheet.getRow(rowIndex++);
|
|
|
- headerRow.values = ['订单号', '项目名称', '供应商', '采购数量', '采购单价', '采购金额', '付款金额'];
|
|
|
+ headerRow.values = [
|
|
|
+ '订单编码', '组织名称', '客户名称', '订单类型', '订单状态',
|
|
|
+ '订单总金额', '订单总数量', '收货人姓名', '收货人电话', '创建时间'
|
|
|
+ ];
|
|
|
this.applyHeaderStyle(headerRow);
|
|
|
|
|
|
// 5. 订单主信息行
|
|
|
const mainInfoRow = worksheet.getRow(rowIndex++);
|
|
|
mainInfoRow.values = [
|
|
|
- orderData.orderCode,
|
|
|
- orderData.orgName,
|
|
|
- orderData.supplierName,
|
|
|
- orderData.totalQuantity,
|
|
|
- orderData.unitPrice.toFixed(2),
|
|
|
- orderData.totalAmount.toFixed(2),
|
|
|
- orderData.paymentAmount.toFixed(2)
|
|
|
+ orderData['订单编码'],
|
|
|
+ orderData['组织名称'],
|
|
|
+ orderData['客户名称'],
|
|
|
+ orderData['订单类型'],
|
|
|
+ orderData['订单状态'],
|
|
|
+ orderData['订单总金额'],
|
|
|
+ orderData['订单总数量'],
|
|
|
+ orderData['收货人姓名'],
|
|
|
+ orderData['收货人电话'],
|
|
|
+ orderData['创建时间']
|
|
|
];
|
|
|
this.applyDataStyle(mainInfoRow);
|
|
|
|
|
|
@@ -121,44 +130,36 @@ class ExcelExportUtil {
|
|
|
detailTitleRow.values = ['订单明细信息'];
|
|
|
detailTitleRow.font = { size: 12, bold: true };
|
|
|
detailTitleRow.height = 30;
|
|
|
- worksheet.mergeCells(rowIndex - 1, 1, rowIndex - 1, maxColumns);
|
|
|
+ worksheet.mergeCells(rowIndex - 1, 1, rowIndex - 1, 7); // 明细表7列
|
|
|
|
|
|
// 8. 空行
|
|
|
rowIndex++;
|
|
|
|
|
|
// 9. 明细表头行
|
|
|
const detailHeaderRow = worksheet.getRow(rowIndex++);
|
|
|
- detailHeaderRow.values = ['物料编码', '物料名称', '规格', '数量', '单价', '金额'];
|
|
|
+ detailHeaderRow.values = ['商品编码', '商品名称', '规格型号', '单位', '数量', '单价', '总金额'];
|
|
|
this.applyHeaderStyle(detailHeaderRow);
|
|
|
|
|
|
// 10. 明细数据行
|
|
|
- orderData.orderItems.forEach(item => {
|
|
|
+ const orderItems = orderData['订单明细'] || [];
|
|
|
+ orderItems.forEach(item => {
|
|
|
const dataRow = worksheet.getRow(rowIndex++);
|
|
|
dataRow.values = [
|
|
|
- item.itemCode,
|
|
|
- item.itemName,
|
|
|
- item.specs,
|
|
|
- item.quantity,
|
|
|
- item.unitPrice.toFixed(2),
|
|
|
- item.totalAmount.toFixed(2)
|
|
|
+ item['商品编码'],
|
|
|
+ item['商品名称'],
|
|
|
+ item['规格型号'],
|
|
|
+ item['单位'],
|
|
|
+ item['数量'],
|
|
|
+ item['单价'],
|
|
|
+ item['总金额']
|
|
|
];
|
|
|
this.applyDataStyle(dataRow);
|
|
|
|
|
|
// 设置数字格式
|
|
|
- dataRow.getCell(4).numFmt = '#,##0'; // 数量
|
|
|
- dataRow.getCell(5).numFmt = '#,##0.00'; // 单价
|
|
|
- dataRow.getCell(6).numFmt = '#,##0.00'; // 金额
|
|
|
+ dataRow.getCell(5).numFmt = '#,##0.0000'; // 数量(4位小数)
|
|
|
+ dataRow.getCell(6).numFmt = '#,##0.00'; // 单价(2位小数)
|
|
|
+ dataRow.getCell(7).numFmt = '#,##0.00'; // 总金额(2位小数)
|
|
|
});
|
|
|
-
|
|
|
- // 11. 合计行
|
|
|
- const totalRow = worksheet.getRow(rowIndex++);
|
|
|
- const totalQuantity = orderData.orderItems.reduce((sum, item) => sum + item.quantity, 0);
|
|
|
- const totalAmount = orderData.orderItems.reduce((sum, item) => sum + item.totalAmount, 0);
|
|
|
-
|
|
|
- totalRow.values = ['合计', '', '', totalQuantity, '', totalAmount.toFixed(2), ''];
|
|
|
- this.applyTotalStyle(totalRow);
|
|
|
- totalRow.getCell(4).numFmt = '#,##0';
|
|
|
- totalRow.getCell(6).numFmt = '#,##0.00';
|
|
|
}
|
|
|
|
|
|
/**
|