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')