|
|
|
@ -320,7 +320,23 @@ export default { |
|
|
|
}, |
|
|
|
handleExport () { |
|
|
|
this.exportLoading = true |
|
|
|
exportPriceSheetReport(this.buildQuery()).then(response => { |
|
|
|
exportPriceSheetReport(this.buildQuery()).then(async response => { |
|
|
|
const contentType = String( |
|
|
|
(response.headers && response.headers['content-type']) || '' |
|
|
|
).toLowerCase() |
|
|
|
if (contentType.includes('application/json') || contentType.includes('text/plain') || contentType.includes('text/html')) { |
|
|
|
const errorText = await this.readBlobAsText(response.data) |
|
|
|
let errorMessage = '导出失败' |
|
|
|
try { |
|
|
|
const errorData = JSON.parse(errorText) |
|
|
|
errorMessage = errorData.msg || errorData.message || errorMessage |
|
|
|
} catch (error) { |
|
|
|
if (errorText) errorMessage = errorText |
|
|
|
} |
|
|
|
this.$message.error(errorMessage) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
const blob = new Blob([response.data], { |
|
|
|
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' |
|
|
|
}) |
|
|
|
@ -332,6 +348,7 @@ export default { |
|
|
|
link.click() |
|
|
|
document.body.removeChild(link) |
|
|
|
window.URL.revokeObjectURL(url) |
|
|
|
this.$message.success('导出成功') |
|
|
|
}).catch(() => { |
|
|
|
this.$message.error('导出失败') |
|
|
|
}).finally(() => { |
|
|
|
@ -343,6 +360,18 @@ export default { |
|
|
|
}, |
|
|
|
formatDollarCell (row, column, value) { |
|
|
|
return value === null || value === undefined || value === '' ? '' : `$${value}` |
|
|
|
}, |
|
|
|
readBlobAsText (blob) { |
|
|
|
return new Promise(resolve => { |
|
|
|
if (!blob) { |
|
|
|
resolve('') |
|
|
|
return |
|
|
|
} |
|
|
|
const reader = new FileReader() |
|
|
|
reader.onload = () => resolve(String(reader.result || '')) |
|
|
|
reader.onerror = () => resolve('') |
|
|
|
reader.readAsText(blob) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|