php - vue-json-excel 包含多个 excel 下载的数据问题
问题描述
当单击下载按钮时,我需要下载一个包含多个备件数据的 excel 文件。所以excel文件如下所示:
<download-excel v-if="spare_parts.length"
class="btn btn-view"
:data="json_data"
:fields="json_fields"
:title="['Equipments - Spare Part - '+ spare_part.name,'' ]"
worksheet="My Worksheet"
:name="'Equipments - Spare Part - '+spare_part.name+'.xls'">
<i class="fa fa-download sky-fa" title="Download Report" @click="getReportDetails(spare_part.sap)"></i>
</download-excel>
json_fields: {
'Equipment - Serial Number': {
callback: (value) => {
return `${value.maintenance.equipment.serial_number}`;
}
},
'Customer Name': {
callback: (value) => {
return `${value.maintenance.equipment.technical_customer.name}`;
}
},
'Unit Price (LKR) - Without VAT': {
callback: (value) => {
let final = '';
let VAT = '';
let decimalCount = 2;
let decimal = ".";
let thousands = ",";
let amount = `${value.cost}`;
try {
let decimalCount = Math.abs(decimalCount);
decimalCount = isNaN(decimalCount) ? 2 : decimalCount;
const negativeSign = amount < 0 ? "-" : "";
let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
let j = (i.length > 3) ? i.length % 3 : 0;
final = negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "")
// return final;
} catch (e) {
console.log("Errors " + e);
}
return final;
}
},
'Unit Price (LKR) - With VAT': {
callback: (value) => {
let final = '';
let VAT = '';
VAT = (`${value.vat}` == 1) ? `${value.cost + (value.cost * (value.vat_percentage / 100))}` : '-';
if (`${value.vat}` == 1) {
let decimalCount = 2;
let decimal = ".";
let thousands = ",";
let amount = VAT;
try {
let decimalCount = Math.abs(decimalCount);
decimalCount = isNaN(decimalCount) ? 2 : decimalCount;
const negativeSign = amount < 0 ? "-" : "";
let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
let j = (i.length > 3) ? i.length % 3 : 0;
final = negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "")
} catch (e) {
console.log("Errors " + e);
}
} else {
final = '-';
}
return final;
}
},
},
json_data: [],
json_meta: [
[
{
'key': 'charset',
'value': 'utf-8'
}
]
],
单击图标时会触发该getReportDetails(spare_part.sap)
功能。
getReportDetails(name){
axios.get('/technical/sparepart/get-report/'+name)
.then(function (response) {
this.json_data = response.data;
if (this.json_data.length == 0) {
alert('No Data in this Spare Part');
}
}.bind(this))
.catch(error => {
console.log("Errors : " + error);
});
},
所以需要在excel表格中显示的数据是通过调用以下方法从这个函数中获取的SparePartController
:
public function getReportDetails($name)
{
$maintenance_spare_parts = MaintenanceSparePart::with('maintenance.equipment.technicalCustomer')->where('spare_part', $name)->get();
return $maintenance_spare_parts;
}
我这里有 2 个问题。
- 当我单击第二次单击时开始下载的下载图标时。但在那之后,每次点击下载都会发生。为什么总是第二次?
- 下载后,我可以在 Excel 表中看到正确的数据。但是,当我单击另一行中的下载图标而不刷新页面时,我会在我的 excel 文件中获取以前的数据。这是什么原因?
谁能指出我在这种情况下做错了什么?
解决方案
推荐阅读
- javascript - 如何在 reactjs 中使用 Clipboard_API 将 HTML 复制到剪贴板?
- python - 如何在 tkinter 中自动包装小部件?
- ajax - Ajax 调用似乎在 ASP.NET Core 中不起作用
- reactjs - 我的(虚拟)进度条表现得很奇怪,这是 React 状态的问题吗?
- r - 如何使用 R 将复杂文本分成单独的列?
- docusaurus - 如何更改 Docusaurus 登陆页面的背景图片?
- r - 如何摆脱原始向量上的嵌入式 NUL?
- delphi - 德尔福 IDE 和 UNC
- python - 向量化嵌套 vmap
- python - 如何将元音字母之后的字母附加到列表中?