From ae458f7c9bdcc863467d2377da3198b7daa1ced3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E6=B1=89?= <5725748+qin_and_han_dynasties@user.noreply.gitee.com> Date: Mon, 4 May 2026 19:44:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8=EF=BC=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=96=E4=BA=86=E4=BB=BB=E5=8A=A1=E4=BB=A5=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=88=B7=E6=96=B0=E6=95=B4=E4=B8=AA=E5=88=97?= =?UTF-8?q?=E8=A1=A8=EF=BC=8C=E8=80=8C=E6=98=AF=E6=9B=B4=E6=96=B0=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E7=9A=84=E4=BB=BB=E5=8A=A1=E7=9A=84=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build_God_Game/src/views/DailyMissionView.vue | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/Build_God_Game/src/views/DailyMissionView.vue b/Build_God_Game/src/views/DailyMissionView.vue index 176a082..0228996 100644 --- a/Build_God_Game/src/views/DailyMissionView.vue +++ b/Build_God_Game/src/views/DailyMissionView.vue @@ -45,11 +45,41 @@ const loadMissions = async () => { } } +/** 接取成功后的本地状态(与后端 AcceptMission 一致,避免整表重拉) */ +const patchMissionAfterAccept = (mission: DailyMission) => { + const startMs = Date.now() + const endMs = startMs + mission.spendTimeMinutes * 60 * 1000 + missions.value = missions.value.map((m) => + m.id === mission.id + ? { + ...m, + status: DailyMissionStatus.InProgress, + startTime: new Date(startMs).toISOString(), + endTime: new Date(endMs).toISOString(), + } + : m + ) +} + +/** 领取成功后的本地状态(todayClaimedCount 在每条 DTO 上重复,需一并 +1) */ +const patchMissionAfterClaim = (mission: DailyMission) => { + const nextClaimed = mission.todayClaimedCount + 1 + missions.value = missions.value.map((m) => + m.id === mission.id + ? { ...m, status: DailyMissionStatus.Claimed, todayClaimedCount: nextClaimed } + : { ...m, todayClaimedCount: nextClaimed } + ) + todayStats.value = { + claimed: nextClaimed, + total: mission.todayTotalCount, + } +} + const handleAccept = async (mission: DailyMission) => { try { await dailyMissionApi.accept(mission.id) showMsg('接取任务成功') - await loadMissions() + patchMissionAfterAccept(mission) } catch (error: any) { const errorMsg = error?.data?.message || error?.data || error?.message || '接取任务失败' showMsg(errorMsg, 'error') @@ -60,7 +90,7 @@ const handleClaim = async (mission: DailyMission) => { try { await dailyMissionApi.claim(mission.id) showMsg('领取奖励成功!') - await loadMissions() + patchMissionAfterClaim(mission) } catch (error: any) { const errorMsg = error?.data?.message || error?.data || error?.message || '领取奖励失败' showMsg(errorMsg, 'error')