diff --git a/src/views/match/banner/index.vue b/src/views/match/banner/index.vue index abc1c7f..a03f42b 100644 --- a/src/views/match/banner/index.vue +++ b/src/views/match/banner/index.vue @@ -330,16 +330,15 @@ function validateManual() { const list = slots.value; for (let i = 0; i < list.length; i++) { const s = list[i]; - const partial = !!(s.imageUrl || s.eventId); - if (partial && (!s.imageUrl || !s.eventId)) { - ElMessage.warning(`第 ${i + 1} 张需同时上传图片并选择关联赛事`); + if (s.eventId && !s.imageUrl) { + ElMessage.warning(`第 ${i + 1} 张已选择赛事,请同时上传图片`); selectedIndex.value = i; return false; } } - const filled = list.filter((s) => s.imageUrl && s.eventId); + const filled = list.filter((s) => s.imageUrl); if (!filled.length) { - ElMessage.warning('请至少完整配置一张轮播图(图片 + 赛事)'); + ElMessage.warning('请至少上传一张轮播图图片'); return false; } return true; @@ -361,26 +360,26 @@ async function onSave() { const resMode = await bannerConfigPut({ mode: MODE_MANUAL }); if (resMode?.succeeded === false) return; - const filledSlots = slots.value.filter((s) => s.imageUrl && s.eventId); + const filledSlots = slots.value.filter((s) => s.imageUrl); const keptIds = new Set(); for (let i = 0; i < filledSlots.length; i++) { const s = filledSlots[i]; const sort = i + 1; - // 接口要求关联赛事使用 eventId 字段(数字) - const eventId = Number(s.eventId); - if (!Number.isFinite(eventId) || eventId <= 0) { + // 有选择赛事时使用 eventId,否则不传 eventId(后端允许无赛事保存) + const eventId = toEventId(s.eventId); + if (s.eventId && (eventId == null || eventId <= 0)) { ElMessage.warning(`第 ${sort} 条轮播的关联赛事无效,请重新选择`); return; } const payload = { title: s.title || s.eventName || `轮播图${sort}`, imageUrl: s.imageUrl, - linkType: 'Event', - eventId, + linkType: eventId ? 'Event' : 'Url', sort, status: 'Enable', }; + if (eventId) payload.eventId = eventId; if (s.id) { const r = await bannerEditPut({ id: s.id, ...payload }); if (r?.succeeded === false) return;