diff --git a/src/api/supplier/priceSheetReport.js b/src/api/supplier/priceSheetReport.js index 7419bce..70ccfa5 100644 --- a/src/api/supplier/priceSheetReport.js +++ b/src/api/supplier/priceSheetReport.js @@ -1,4 +1,4 @@ -import { createAPI } from '@/utils/httpRequest.js' +import http, { createAPI } from '@/utils/httpRequest.js' export const getPriceListPage = data => createAPI('/supplier/priceSheetReport/priceListPage', 'post', data) @@ -6,9 +6,10 @@ export const getHandlingChargePage = data => createAPI('/supplier/priceSheetRepo export const getPaymentTermsPage = data => createAPI('/supplier/priceSheetReport/paymentTermsPage', 'post', data) -export const exportPriceSheetReport = data => createAPI( - '/supplier/priceSheetReport/export', - 'post', - data, - { responseType: 'blob', timeout: 600000 } -) +export const exportPriceSheetReport = data => http({ + url: http.adornUrl('/supplier/priceSheetReport/export'), + method: 'post', + data: http.adornData(data), + responseType: 'blob', + timeout: 600000 +}) diff --git a/src/views/modules/supplier/priceSheetReport.vue b/src/views/modules/supplier/priceSheetReport.vue index 6246ed0..939ee1d 100644 --- a/src/views/modules/supplier/priceSheetReport.vue +++ b/src/views/modules/supplier/priceSheetReport.vue @@ -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) + }) } } }