From d7af8d13941633b2ab023403a3e5365fb2a40a00 Mon Sep 17 00:00:00 2001 From: DevOps Date: Tue, 13 Jan 2026 16:42:28 +0800 Subject: [PATCH] fix: venue tab filtering using String() comparison for large IDs - Fixed JavaScript precision loss issue with large venue IDs - Changed Number() to String() comparison in filteredCompetitionGroups - Changed Number() to String() comparison in venueData computed property - Added ExportPreview component Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- src/api/martial/activitySchedule.js | 11 +- src/views/martial/schedule/ExportPreview.vue | 145 +++++++++++++++++++ src/views/martial/schedule/index.vue | 28 ++-- 3 files changed, 170 insertions(+), 14 deletions(-) create mode 100644 src/views/martial/schedule/ExportPreview.vue diff --git a/src/api/martial/activitySchedule.js b/src/api/martial/activitySchedule.js index fb3c93d..83827bb 100644 --- a/src/api/martial/activitySchedule.js +++ b/src/api/martial/activitySchedule.js @@ -188,6 +188,15 @@ export const saveDispatch = (data) => { * 导出赛程表 * @param {Number} competitionId - 赛事ID */ +// 预览赛程表数据 +export const getScheduleExportPreview = (competitionId, template, venueId) => { + return request({ + url: "/api/martial/export/schedule/preview", + method: "get", + params: { competitionId, template, venueId } + }) +} + export const exportSchedule = (competitionId) => { return request({ url: '/martial/export/schedule', @@ -197,7 +206,7 @@ export const exportSchedule = (competitionId) => { }) } -// Export schedule template 2 (competition time format) + export const exportScheduleTemplate2 = (competitionId, venueId, venueName, timeSlot) => { return request({ url: '/martial/export/schedule2', diff --git a/src/views/martial/schedule/ExportPreview.vue b/src/views/martial/schedule/ExportPreview.vue new file mode 100644 index 0000000..48aed1a --- /dev/null +++ b/src/views/martial/schedule/ExportPreview.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/views/martial/schedule/index.vue b/src/views/martial/schedule/index.vue index fe8ddc7..71cead1 100644 --- a/src/views/martial/schedule/index.vue +++ b/src/views/martial/schedule/index.vue @@ -7,12 +7,13 @@
- {{ isScheduleCompleted ? '重新编排' : '自动编排' }} + 自动编排 异常组 @@ -277,15 +278,7 @@ @@ -382,6 +375,13 @@ + +
@@ -391,10 +391,12 @@ import { getVenuesByCompetition } from '@/api/martial/venue' import { getCompetitionDetail } from '@/api/martial/competition' import { getScheduleResult, saveAndLockSchedule, saveDraftSchedule, triggerAutoArrange, moveScheduleGroup, exportSchedule, exportScheduleTemplate2 } from '@/api/martial/activitySchedule' import { updateCheckInStatus, getScheduleConfig } from '@/api/martial/schedulePlan' +import ExportPreview from './ExportPreview.vue' export default { name: 'MartialScheduleList', components: { + ExportPreview, ArrowDown, ArrowRight }, @@ -408,6 +410,7 @@ export default { selectedVenueIdForVenueTab: null, // 选中的场地ID(场地Tab) confirmDialogVisible: false, isScheduleCompleted: false, // 是否已完成编排 + exportPreviewVisible: false, // 导出预览对话框 loading: false, autoArrangeLoading: false, // 自动编排加载状态 venues: [], // 场地列表(从后端加载) @@ -448,7 +451,7 @@ export default { const filtered = this.competitionGroups.filter(group => { console.log(`分组"${group.title}": venueId=${group.venueId}(${typeof group.venueId}), timeSlotIndex=${group.timeSlotIndex}(${typeof group.timeSlotIndex})`) - const venueMatch = group.venueId === this.selectedVenueId || Number(group.venueId) === Number(this.selectedVenueId) + const venueMatch = String(group.venueId) === String(this.selectedVenueId) const timeMatch = group.timeSlotIndex === this.selectedTime console.log(` 场地匹配:${venueMatch}, 时间匹配:${timeMatch}`) return venueMatch && timeMatch @@ -472,8 +475,7 @@ export default { // 如果选中了场地,进一步过滤 if (this.selectedVenueIdForVenueTab) { groupsInTimeSlot = groupsInTimeSlot.filter(group => { - return group.venueId === this.selectedVenueIdForVenueTab || - Number(group.venueId) === Number(this.selectedVenueIdForVenueTab) + return String(group.venueId) === String(this.selectedVenueIdForVenueTab) }) }