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