diff --git a/src/api/lb-daily-user-trade-report.js b/src/api/lb-daily-user-trade-report.js
index 9c7d780..5604bc2 100644
--- a/src/api/lb-daily-user-trade-report.js
+++ b/src/api/lb-daily-user-trade-report.js
@@ -59,3 +59,15 @@ export function calculateReportSumByDateAndTenant(reportDate, tenantId) {
}
})
}
+
+export function exportLbDailyUserTradeReportByDateAndTenant(reportDate, tenantId) {
+ return request({
+ url: '/lbDailyUserTradeReport/export/by-date-and-tenant',
+ method: 'get',
+ params: {
+ reportDate,
+ tenantId
+ },
+ responseType: 'blob'
+ })
+}
diff --git a/src/utils/request.js b/src/utils/request.js
index 0a30440..6748d10 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -65,6 +65,13 @@ service.interceptors.request.use(
// response interceptor
service.interceptors.response.use(
response => {
+ // File download responses (blob/arraybuffer) should bypass JSON normalization.
+ // Otherwise the logic below will treat Blob as an error object and reject.
+ const rt = response?.config?.responseType
+ if (rt === 'blob' || rt === 'arraybuffer' || (typeof Blob !== 'undefined' && response?.data instanceof Blob)) {
+ return response.data
+ }
+
const loginHeaderValues = {
'X-Role-Name': pickValueFromSources(
[response.headers, response.data?.data, response.data],
diff --git a/src/views/lb-business/daily-report/index.vue b/src/views/lb-business/daily-report/index.vue
index 90b6738..38a131c 100644
--- a/src/views/lb-business/daily-report/index.vue
+++ b/src/views/lb-business/daily-report/index.vue
@@ -44,6 +44,7 @@
新增
汇总数据
删除报表数据
+ 报表导出
说明:服务费=当日买入×0.01;差额=当日卖出−当日买入;应收应付=差额−服务费(>0 应收(当前人),<0 应付(当前人))
@@ -212,6 +213,24 @@
确定汇总
+
+
+
+
+
+
+
+
+
@@ -221,6 +240,7 @@ import {
calculateReportSumByDateAndTenant,
deleteLbDailyUserTradeReportByDateAndTenant,
deleteLbDailyUserTradeReport,
+ exportLbDailyUserTradeReportByDateAndTenant,
getLbDailyUserTradeReportList,
updateLbDailyUserTradeReport
} from '@/api/lb-daily-user-trade-report'
@@ -259,11 +279,13 @@ export default {
submitLoading: false,
deleteByDateLoading: false,
reportSumLoading: false,
+ exportLoading: false,
list: [],
total: 0,
dialogVisible: false,
deleteByDateDialogVisible: false,
reportSumDialogVisible: false,
+ exportDialogVisible: false,
dialogTitle: '',
isEdit: false,
queryParams: {
@@ -303,6 +325,12 @@ export default {
},
reportSumRules: {
reportDate: [{ required: true, message: '请选择报表日期', trigger: 'change' }]
+ },
+ exportForm: {
+ reportDate: getLocalTodayDateString()
+ },
+ exportRules: {
+ reportDate: [{ required: true, message: '请选择报表日期', trigger: 'change' }]
}
}
},
@@ -423,6 +451,13 @@ export default {
if (this.$refs.reportSumFormRef) this.$refs.reportSumFormRef.clearValidate()
})
},
+ openExportDialog() {
+ this.exportForm.reportDate = getLocalTodayDateString()
+ this.exportDialogVisible = true
+ this.$nextTick(() => {
+ if (this.$refs.exportFormRef) this.$refs.exportFormRef.clearValidate()
+ })
+ },
submitDeleteByDate() {
this.$refs.deleteByDateFormRef.validate((valid) => {
if (!valid) return
@@ -479,6 +514,42 @@ export default {
reportDate: getLocalTodayDateString()
}
},
+ submitExport() {
+ this.$refs.exportFormRef.validate((valid) => {
+ if (!valid) return
+ const tenantId = this.getTenantIdFromBusinessHeaders()
+ if (!tenantId) {
+ this.$message.error('未获取到租户ID,请先登录或切换到正确租户后重试')
+ return
+ }
+ this.exportLoading = true
+ exportLbDailyUserTradeReportByDateAndTenant(this.exportForm.reportDate, tenantId)
+ .then((blob) => {
+ const safeBlob = blob instanceof Blob ? blob : new Blob([blob], {
+ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ })
+ const url = window.URL.createObjectURL(safeBlob)
+ const link = document.createElement('a')
+ link.href = url
+ link.download = `lbDailyUserTradeReport_${this.exportForm.reportDate}_${tenantId}.xlsx`
+ document.body.appendChild(link)
+ link.click()
+ document.body.removeChild(link)
+ window.URL.revokeObjectURL(url)
+ this.$message.success('导出成功')
+ this.exportDialogVisible = false
+ })
+ .finally(() => {
+ this.exportLoading = false
+ })
+ })
+ },
+ resetExportForm() {
+ if (this.$refs.exportFormRef) this.$refs.exportFormRef.resetFields()
+ this.exportForm = {
+ reportDate: getLocalTodayDateString()
+ }
+ },
getTenantIdFromBusinessHeaders() {
const headers = getBusinessHeaders()
const value = headers && headers['X-Tenant-Id']