Merge branch 'material-ui' of http://192.168.30.2:3000/bonus/bonus-ui into material-ui
This commit is contained in:
commit
0e4b980e49
|
|
@ -427,6 +427,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="success" icon="el-icon-download" @click="exportHistoryReportList" :disabled="historyReportList.length === 0">导出Excel</el-button>
|
||||||
<el-button @click="historyReportListVisible = false">关闭</el-button>
|
<el-button @click="historyReportListVisible = false">关闭</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
@ -531,6 +532,7 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="success" icon="el-icon-download" @click="exportHistoryCostDetail" :disabled="historyCostDetailList.length === 0">导出Excel</el-button>
|
||||||
<el-button @click="historyCostDetailVisible = false">关闭</el-button>
|
<el-button @click="historyCostDetailVisible = false">关闭</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
@ -1284,6 +1286,256 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 导出历史报表列表为Excel
|
||||||
|
exportHistoryReportList() {
|
||||||
|
if (!this.historyReportList || this.historyReportList.length === 0) {
|
||||||
|
this.$message.warning('没有可导出的数据');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 定义Excel列配置
|
||||||
|
const columns = [
|
||||||
|
{ key: 'index', title: '序号' },
|
||||||
|
{ key: 'agreementCode', title: '协议号' },
|
||||||
|
{ key: 'unitName', title: '结算单位' },
|
||||||
|
{ key: 'projectName', title: '结算工程' },
|
||||||
|
{ key: 'settlementType', title: '结算类型' },
|
||||||
|
{ key: 'leaseCost', title: '租赁费用' },
|
||||||
|
{ key: 'repairCost', title: '维修费用' },
|
||||||
|
{ key: 'loseCost', title: '丢失费用' },
|
||||||
|
{ key: 'scrapCost', title: '报废费用' },
|
||||||
|
{ key: 'totalCost', title: '合计费用(元)' }
|
||||||
|
];
|
||||||
|
|
||||||
|
// 准备Excel数据
|
||||||
|
const excelData = [];
|
||||||
|
|
||||||
|
// 添加表头
|
||||||
|
const headerRow = columns.map(col => col.title);
|
||||||
|
excelData.push(headerRow);
|
||||||
|
|
||||||
|
// 添加数据行
|
||||||
|
this.historyReportList.forEach((row, index) => {
|
||||||
|
const dataRow = columns.map(col => {
|
||||||
|
let value = '';
|
||||||
|
|
||||||
|
if (col.key === 'index') {
|
||||||
|
value = index + 1;
|
||||||
|
} else if (col.key === 'settlementType') {
|
||||||
|
const typeMap = {
|
||||||
|
0: '总费用',
|
||||||
|
1: '工器具',
|
||||||
|
2: '安全工器具'
|
||||||
|
};
|
||||||
|
value = typeMap[row.settlementType] || '';
|
||||||
|
} else if (col.key === 'totalCost') {
|
||||||
|
// 合计费用:转换为数字,保留2位小数
|
||||||
|
value = parseFloat(this.calculateTotalCost(row).toFixed(2));
|
||||||
|
} else if (['leaseCost', 'repairCost', 'loseCost', 'scrapCost'].includes(col.key)) {
|
||||||
|
// 其他金额字段:转换为数字,保留2位小数
|
||||||
|
const numValue = row[col.key] || 0;
|
||||||
|
value = parseFloat(parseFloat(numValue).toFixed(2));
|
||||||
|
} else {
|
||||||
|
value = row[col.key] || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
});
|
||||||
|
excelData.push(dataRow);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 创建工作簿和工作表
|
||||||
|
const ws = XLSX.utils.aoa_to_sheet(excelData);
|
||||||
|
const wb = XLSX.utils.book_new();
|
||||||
|
XLSX.utils.book_append_sheet(wb, ws, '历史报表');
|
||||||
|
|
||||||
|
// 设置列宽
|
||||||
|
const colWidths = [
|
||||||
|
{ wch: 8 }, // 序号
|
||||||
|
{ wch: 15 }, // 协议号
|
||||||
|
{ wch: 15 }, // 结算单位
|
||||||
|
{ wch: 15 }, // 结算工程
|
||||||
|
{ wch: 12 }, // 结算类型
|
||||||
|
{ wch: 12 }, // 租赁费用
|
||||||
|
{ wch: 12 }, // 维修费用
|
||||||
|
{ wch: 12 }, // 丢失费用
|
||||||
|
{ wch: 12 }, // 报废费用
|
||||||
|
{ wch: 15 } // 合计费用
|
||||||
|
];
|
||||||
|
ws['!cols'] = colWidths;
|
||||||
|
|
||||||
|
// 设置边框和居中对齐
|
||||||
|
const border = {
|
||||||
|
top: { style: 'thin' },
|
||||||
|
bottom: { style: 'thin' },
|
||||||
|
left: { style: 'thin' },
|
||||||
|
right: { style: 'thin' }
|
||||||
|
};
|
||||||
|
const alignment = { horizontal: 'center', vertical: 'center', wrapText: true };
|
||||||
|
|
||||||
|
// 遍历所有单元格,添加边框和居中对齐
|
||||||
|
for (let row = 0; row < excelData.length; row++) {
|
||||||
|
for (let col = 0; col < excelData[row].length; col++) {
|
||||||
|
const cellAddress = XLSX.utils.encode_cell({ r: row, c: col });
|
||||||
|
if (!ws[cellAddress]) {
|
||||||
|
ws[cellAddress] = {};
|
||||||
|
}
|
||||||
|
ws[cellAddress].border = border;
|
||||||
|
ws[cellAddress].alignment = alignment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出文件
|
||||||
|
const fileName = `历史报表_${this.historyReportParams.yearMonth}.xlsx`;
|
||||||
|
XLSX.writeFile(wb, fileName);
|
||||||
|
|
||||||
|
this.$message.success('导出成功');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('导出失败:', error);
|
||||||
|
this.$message.error('导出失败');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出历史费用详情为Excel
|
||||||
|
exportHistoryCostDetail() {
|
||||||
|
if (!this.historyCostDetailList || this.historyCostDetailList.length === 0) {
|
||||||
|
this.$message.warning('没有可导出的数据');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 根据费用类型定义不同的列配置
|
||||||
|
let columns = [];
|
||||||
|
let fileName = '';
|
||||||
|
let sheetName = '';
|
||||||
|
|
||||||
|
switch (this.historyCostDetailType) {
|
||||||
|
case 'lease':
|
||||||
|
columns = [
|
||||||
|
{ key: 'index', title: '序号' },
|
||||||
|
{ key: 'name', title: '名称' },
|
||||||
|
{ key: 'model', title: '型号' },
|
||||||
|
{ key: 'unit', title: '单位' },
|
||||||
|
{ key: 'unitPrice', title: '单价(元)' },
|
||||||
|
{ key: 'quantity', title: '数量' },
|
||||||
|
{ key: 'returnQuantity', title: '归还数量' },
|
||||||
|
{ key: 'startTime', title: '租赁开始日期' },
|
||||||
|
{ key: 'endTime', title: '租赁结束日期' },
|
||||||
|
{ key: 'leaseDays', title: '租赁天数' },
|
||||||
|
{ key: 'cost', title: '费用(元)' }
|
||||||
|
];
|
||||||
|
fileName = `历史租赁费用详情_${this.currentHistoryRow.agreementCode}_${this.historyReportParams.yearMonth}`;
|
||||||
|
sheetName = '历史租赁费用';
|
||||||
|
break;
|
||||||
|
case 'repair':
|
||||||
|
columns = [
|
||||||
|
{ key: 'index', title: '序号' },
|
||||||
|
{ key: 'name', title: '机具名称' },
|
||||||
|
{ key: 'model', title: '规格型号' },
|
||||||
|
{ key: 'unit', title: '单位' },
|
||||||
|
{ key: 'quantity', title: '维修数量' },
|
||||||
|
{ key: 'cost', title: '维修费用(元)' }
|
||||||
|
];
|
||||||
|
fileName = `历史维修费用详情_${this.currentHistoryRow.agreementCode}_${this.historyReportParams.yearMonth}`;
|
||||||
|
sheetName = '历史维修费用';
|
||||||
|
break;
|
||||||
|
case 'lose':
|
||||||
|
columns = [
|
||||||
|
{ key: 'index', title: '序号' },
|
||||||
|
{ key: 'name', title: '机具名称' },
|
||||||
|
{ key: 'model', title: '规格型号' },
|
||||||
|
{ key: 'unit', title: '单位' },
|
||||||
|
{ key: 'quantity', title: '丢失数量' },
|
||||||
|
{ key: 'cost', title: '丢失费用(元)' }
|
||||||
|
];
|
||||||
|
fileName = `历史丢失费用详情_${this.currentHistoryRow.agreementCode}_${this.historyReportParams.yearMonth}`;
|
||||||
|
sheetName = '历史丢失费用';
|
||||||
|
break;
|
||||||
|
case 'scrap':
|
||||||
|
columns = [
|
||||||
|
{ key: 'index', title: '序号' },
|
||||||
|
{ key: 'name', title: '机具名称' },
|
||||||
|
{ key: 'model', title: '机具规格' },
|
||||||
|
{ key: 'unit', title: '单位' },
|
||||||
|
{ key: 'quantity', title: '报废数量' },
|
||||||
|
{ key: 'cost', title: '报废费用(元)' }
|
||||||
|
];
|
||||||
|
fileName = `历史报废费用详情_${this.currentHistoryRow.agreementCode}_${this.historyReportParams.yearMonth}`;
|
||||||
|
sheetName = '历史报废费用';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
this.$message.error('未知的费用类型');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 准备Excel数据
|
||||||
|
const excelData = [];
|
||||||
|
|
||||||
|
// 添加表头
|
||||||
|
const headerRow = columns.map(col => col.title);
|
||||||
|
excelData.push(headerRow);
|
||||||
|
|
||||||
|
// 添加数据行
|
||||||
|
this.historyCostDetailList.forEach((row, index) => {
|
||||||
|
const dataRow = columns.map(col => {
|
||||||
|
let value = '';
|
||||||
|
|
||||||
|
if (col.key === 'index') {
|
||||||
|
value = index + 1;
|
||||||
|
} else if (['cost', 'unitPrice'].includes(col.key)) {
|
||||||
|
// 金额字段:转换为数字,保留2位小数
|
||||||
|
const numValue = row[col.key] || 0;
|
||||||
|
value = parseFloat(parseFloat(numValue).toFixed(2));
|
||||||
|
} else {
|
||||||
|
value = row[col.key] || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
});
|
||||||
|
excelData.push(dataRow);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 创建工作簿和工作表
|
||||||
|
const ws = XLSX.utils.aoa_to_sheet(excelData);
|
||||||
|
const wb = XLSX.utils.book_new();
|
||||||
|
XLSX.utils.book_append_sheet(wb, ws, sheetName);
|
||||||
|
|
||||||
|
// 设置列宽
|
||||||
|
const colWidths = columns.map(() => ({ wch: 15 }));
|
||||||
|
ws['!cols'] = colWidths;
|
||||||
|
|
||||||
|
// 设置边框和居中对齐
|
||||||
|
const border = {
|
||||||
|
top: { style: 'thin' },
|
||||||
|
bottom: { style: 'thin' },
|
||||||
|
left: { style: 'thin' },
|
||||||
|
right: { style: 'thin' }
|
||||||
|
};
|
||||||
|
const alignment = { horizontal: 'center', vertical: 'center', wrapText: true };
|
||||||
|
|
||||||
|
// 遍历所有单元格,添加边框和居中对齐
|
||||||
|
for (let row = 0; row < excelData.length; row++) {
|
||||||
|
for (let col = 0; col < excelData[row].length; col++) {
|
||||||
|
const cellAddress = XLSX.utils.encode_cell({ r: row, c: col });
|
||||||
|
if (!ws[cellAddress]) {
|
||||||
|
ws[cellAddress] = {};
|
||||||
|
}
|
||||||
|
ws[cellAddress].border = border;
|
||||||
|
ws[cellAddress].alignment = alignment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出文件
|
||||||
|
XLSX.writeFile(wb, `${fileName}.xlsx`);
|
||||||
|
|
||||||
|
this.$message.success('导出成功');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('导出失败:', error);
|
||||||
|
this.$message.error('导出失败');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue