|
@@ -27,6 +27,7 @@ import { ref } from 'vue'
|
|
|
import { ElMessage } from 'element-plus'
|
|
import { ElMessage } from 'element-plus'
|
|
|
import { Download, ArrowDown, Document } from '@element-plus/icons-vue'
|
|
import { Download, ArrowDown, Document } from '@element-plus/icons-vue'
|
|
|
import { buildApiUrl, REPORT_API_PREFIX, SSE_API_PREFIX } from '@/utils/apiConfig'
|
|
import { buildApiUrl, REPORT_API_PREFIX, SSE_API_PREFIX } from '@/utils/apiConfig'
|
|
|
|
|
+import { getToken } from '@/utils/auth'
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
|
reports: {
|
|
reports: {
|
|
@@ -54,11 +55,23 @@ const handleExport = async (format) => {
|
|
|
loading.value = true
|
|
loading.value = true
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- // 调用后端导出API
|
|
|
|
|
- const response = await fetch(buildApiUrl('/report/export'), {
|
|
|
|
|
|
|
+ // 获取token
|
|
|
|
|
+ const token = getToken()
|
|
|
|
|
+ if (!token) {
|
|
|
|
|
+ ElMessage.error('请先登录')
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 调用后端导出API - 使用正确的报告服务前缀
|
|
|
|
|
+ const exportUrl = buildApiUrl('/report/export', REPORT_API_PREFIX)
|
|
|
|
|
+ console.log('导出请求URL:', exportUrl)
|
|
|
|
|
+ console.log('导出请求数据:', { report_content: props.reports, format, title: props.title })
|
|
|
|
|
+
|
|
|
|
|
+ const response = await fetch(exportUrl, {
|
|
|
method: 'POST',
|
|
method: 'POST',
|
|
|
headers: {
|
|
headers: {
|
|
|
'Content-Type': 'application/json',
|
|
'Content-Type': 'application/json',
|
|
|
|
|
+ 'Authorization': `Bearer ${token}`
|
|
|
},
|
|
},
|
|
|
body: JSON.stringify({
|
|
body: JSON.stringify({
|
|
|
report_content: props.reports,
|
|
report_content: props.reports,
|
|
@@ -68,7 +81,9 @@ const handleExport = async (format) => {
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
if (!response.ok) {
|
|
if (!response.ok) {
|
|
|
- throw new Error('导出失败')
|
|
|
|
|
|
|
+ const errorText = await response.text()
|
|
|
|
|
+ console.error('导出请求失败:', response.status, errorText)
|
|
|
|
|
+ throw new Error(`导出失败: ${response.status} ${errorText}`)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const result = await response.json()
|
|
const result = await response.json()
|
|
@@ -78,9 +93,16 @@ const handleExport = async (format) => {
|
|
|
let downloadUrl = result.download_url
|
|
let downloadUrl = result.download_url
|
|
|
if (downloadUrl.startsWith('/api/v1')) {
|
|
if (downloadUrl.startsWith('/api/v1')) {
|
|
|
// 替换为当前环境的正确前缀
|
|
// 替换为当前环境的正确前缀
|
|
|
- downloadUrl = downloadUrl.replace('/api/v1', SSE_API_PREFIX)
|
|
|
|
|
|
|
+ downloadUrl = downloadUrl.replace('/api/v1', REPORT_API_PREFIX)
|
|
|
|
|
+ } else if (!downloadUrl.startsWith('http') && !downloadUrl.startsWith(REPORT_API_PREFIX)) {
|
|
|
|
|
+ // 如果是相对路径且没有前缀,添加报告服务前缀
|
|
|
|
|
+ downloadUrl = `${REPORT_API_PREFIX}${downloadUrl.startsWith('/') ? downloadUrl : '/' + downloadUrl}`
|
|
|
}
|
|
}
|
|
|
- const downloadResponse = await fetch(downloadUrl)
|
|
|
|
|
|
|
+ const downloadResponse = await fetch(downloadUrl, {
|
|
|
|
|
+ headers: {
|
|
|
|
|
+ 'Authorization': `Bearer ${token}`
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
if (!downloadResponse.ok) {
|
|
if (!downloadResponse.ok) {
|
|
|
throw new Error('下载失败')
|
|
throw new Error('下载失败')
|
|
|
}
|
|
}
|