fix(frontend): align daily_login storage cache with backend task_completed
Header.vue 的 '日内去重' 逻辑原本在 reportEvent 走 .then() 时无条 件 setStorageSync(true),但 reportEvent 在后端 task_completed=false 时仍 HTTP 200 + code=0(例如 trigger_event=NULL / 任务不存在等), .then() 照样跑,storage 缓存被错误标记为'已报',后续进 home 永远跳 过 reportEvent,daily_login 任务永远无法补完成(死锁)。 修后 .then((res) => ...) 按后端真实 task_completed 判定: - task_completed=true → setStorageSync + 清昨日(保持原优化) - task_completed=false → removeStorageSync(自愈,允许下次重试) 影响范围:仅 daily_login。其他 daily 任务(daily_browse_asset / daily_place_asset)本来就没前端 storage cache,不受影响。 当前 daily_login 卡住的用户:手动清 storage 后重进 home 可触发自愈; 或等明天 5 点跨天后 storage key 自动失效(同日 5 点重置周期)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
b17a3b4b4a
commit
d6573efcdd
@ -309,15 +309,24 @@ function checkAndReportDailyLogin() {
|
||||
const dailyLoginKey = `daily_login_completed_${today}_${userId}_${starId}`;
|
||||
if (!uni.getStorageSync(dailyLoginKey)) {
|
||||
reportEvent("daily_login", starId)
|
||||
.then(() => {
|
||||
// 报告成功后标记今日已完成,并清除昨日的记录
|
||||
uni.setStorageSync(dailyLoginKey, true);
|
||||
const yesterday = new Date(now.getTime() - 86400000)
|
||||
.toISOString()
|
||||
.split("T")[0];
|
||||
uni.removeStorageSync(
|
||||
`daily_login_completed_${yesterday}_${userId}_${starId}`,
|
||||
);
|
||||
.then((res) => {
|
||||
// ★ 按后端真实 task_completed 判定 storage:只有真完成才缓存;
|
||||
// 否则 removeStorageSync(自愈)防止 HTTP 200 但 task_completed=false
|
||||
// (如 trigger_event=NULL 等)时 storage 永远挡死 daily_login 上报。
|
||||
if (res?.data?.task_completed) {
|
||||
uni.setStorageSync(dailyLoginKey, true);
|
||||
const yesterday = new Date(now.getTime() - 86400000)
|
||||
.toISOString()
|
||||
.split("T")[0];
|
||||
uni.removeStorageSync(
|
||||
`daily_login_completed_${yesterday}_${userId}_${starId}`,
|
||||
);
|
||||
} else {
|
||||
uni.removeStorageSync(dailyLoginKey);
|
||||
console.warn(
|
||||
"[daily_login] 后端未完成任务(可能 trigger_event 缺失或任务不存在),保持 storage 未缓存以便下次重试",
|
||||
);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error("上报登录事件失败:", err);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user