From 694b955cefa89673a42b255dba9c17e837d7dfd8 Mon Sep 17 00:00:00 2001 From: DevOps Date: Wed, 24 Dec 2025 13:45:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=B5=9B=E7=A8=8B=E8=A1=A8?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 exportSchedule API 调用后端导出接口 - 实现 handleExport 方法,支持下载 Excel 文件 - 文件名格式:赛程表_赛事名称.xlsx 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/api/martial/activitySchedule.js | 13 + src/views/martial/order/index.vue.bak | 355 +++++++ src/views/martial/participant/index.vue.bak | 990 ++++++++++++++++++ src/views/martial/schedule/index.vue | 21 +- src/views/martial/schedule/index.vue.bak | 1019 +++++++++++++++++++ 5 files changed, 2395 insertions(+), 3 deletions(-) create mode 100644 src/views/martial/order/index.vue.bak create mode 100644 src/views/martial/participant/index.vue.bak create mode 100644 src/views/martial/schedule/index.vue.bak diff --git a/src/api/martial/activitySchedule.js b/src/api/martial/activitySchedule.js index 866aea4..81ddcf2 100644 --- a/src/api/martial/activitySchedule.js +++ b/src/api/martial/activitySchedule.js @@ -183,3 +183,16 @@ export const saveDispatch = (data) => { data }) } + +/** + * 导出赛程表 + * @param {Number} competitionId - 赛事ID + */ +export const exportSchedule = (competitionId) => { + return request({ + url: '/martial/export/schedule', + method: 'get', + params: { competitionId }, + responseType: 'blob' + }) +} diff --git a/src/views/martial/order/index.vue.bak b/src/views/martial/order/index.vue.bak new file mode 100644 index 0000000..60b8c4f --- /dev/null +++ b/src/views/martial/order/index.vue.bak @@ -0,0 +1,355 @@ + + + + + diff --git a/src/views/martial/participant/index.vue.bak b/src/views/martial/participant/index.vue.bak new file mode 100644 index 0000000..b260bb8 --- /dev/null +++ b/src/views/martial/participant/index.vue.bak @@ -0,0 +1,990 @@ + + + + + diff --git a/src/views/martial/schedule/index.vue b/src/views/martial/schedule/index.vue index 0f3a22a..1498dd7 100644 --- a/src/views/martial/schedule/index.vue +++ b/src/views/martial/schedule/index.vue @@ -380,7 +380,7 @@ import { ArrowDown, ArrowRight } from '@element-plus/icons-vue' import { getVenuesByCompetition } from '@/api/martial/venue' import { getCompetitionDetail } from '@/api/martial/competition' -import { getScheduleResult, saveAndLockSchedule, saveDraftSchedule, triggerAutoArrange, moveScheduleGroup } from '@/api/martial/activitySchedule' +import { getScheduleResult, saveAndLockSchedule, saveDraftSchedule, triggerAutoArrange, moveScheduleGroup, exportSchedule } from '@/api/martial/activitySchedule' export default { name: 'MartialScheduleList', @@ -1113,8 +1113,23 @@ export default { group.items.splice(itemIndex + 1, 0, temp) this.$message.success('下移成功') }, - handleExport() { - this.$message.success('导出功能开发中') + async handleExport() { + try { + this.loading = true + const res = await exportSchedule(this.competitionId) + const blob = new Blob([res], { type: 'application/vnd.ms-excel' }) + const link = document.createElement('a') + link.href = window.URL.createObjectURL(blob) + link.download = `赛程表_${this.competitionInfo.competitionName || this.competitionId}.xlsx` + link.click() + window.URL.revokeObjectURL(link.href) + this.$message.success('导出成功') + } catch (error) { + console.error('导出失败:', error) + this.$message.error('导出失败,请稍后重试') + } finally { + this.loading = false + } }, handleConfirm() { this.confirmDialogVisible = true diff --git a/src/views/martial/schedule/index.vue.bak b/src/views/martial/schedule/index.vue.bak new file mode 100644 index 0000000..78ed40f --- /dev/null +++ b/src/views/martial/schedule/index.vue.bak @@ -0,0 +1,1019 @@ + + + + +