From c0e2a7442c1348655364570162d74733b7d0266a Mon Sep 17 00:00:00 2001 From: ulleo Date: Tue, 5 Aug 2025 11:21:16 +0800 Subject: [PATCH] feat: export chart data excel --- backend/apps/chat/api/chat.py | 7 ++----- frontend/src/api/chat.ts | 2 +- frontend/src/views/chat/chat-block/ChartBlock.vue | 4 +++- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/backend/apps/chat/api/chat.py b/backend/apps/chat/api/chat.py index 2ce81ad3..95dbfcdd 100644 --- a/backend/apps/chat/api/chat.py +++ b/backend/apps/chat/api/chat.py @@ -206,12 +206,9 @@ async def export_excel(excel_data: ExcelData): _fields_list.append(field.name) df = pd.DataFrame(np.array(data), columns=_fields_list) - file_name = f"{excel_data.name}-{datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}.xlsx" - - file_path = f'{(settings.EXCEL_PATH if settings.EXCEL_PATH[-1] == "/" else (settings.EXCEL_PATH + "/"))}{file_name}' - buffer = io.BytesIO() df.to_excel(buffer, index=False) buffer.seek(0) - return StreamingResponse(io.BytesIO(buffer.getvalue())) + return StreamingResponse(io.BytesIO(buffer.getvalue()), + media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") diff --git a/frontend/src/api/chat.ts b/frontend/src/api/chat.ts index 62ddde24..df842629 100644 --- a/frontend/src/api/chat.ts +++ b/frontend/src/api/chat.ts @@ -329,5 +329,5 @@ export const chatApi = { return request.fetchStream(`/chat/recommend_questions/${record_id}`, {}, controller) }, checkLLMModel: () => request.get('/system/aimodel/default', { requestOptions: { silent: true } }), - export2Excel: (data: any) => request.post('/chat/excel/export', data), + export2Excel: (data: any) => request.post('/chat/excel/export', data, { responseType: 'blob' }), } diff --git a/frontend/src/views/chat/chat-block/ChartBlock.vue b/frontend/src/views/chat/chat-block/ChartBlock.vue index 855ed99d..a5bc9d57 100644 --- a/frontend/src/views/chat/chat-block/ChartBlock.vue +++ b/frontend/src/views/chat/chat-block/ChartBlock.vue @@ -232,7 +232,9 @@ function exportToExcel() { chatApi .export2Excel({ ...chartRef.value?.getExcelData(), name: chartObject.value.title }) .then((res) => { - const blob = new Blob([res.data]) + const blob = new Blob([res], { + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + }) const link = document.createElement('a') link.href = URL.createObjectURL(blob) link.download = `${chartObject.value.title ?? 'Excel'}.xlsx`