?guide=1 强播标记此前写入 sessionStorage 后在整页加载时只置位不清除, 同一标签页后续普通刷新被残留标记误判为强播: 关闭引导不写库、刷新又弹。 现 MobileLayout 读取标记后立即消费(removeItem), 仅当次加载内强播生效, 刷新后回到数据库判定(未看过 v2 才弹, 关闭即上报写库)。
This commit is contained in:
@@ -55,12 +55,13 @@ const showDetail = ref(false)
|
||||
const detailItem = ref<AnnouncementItem | null>(null)
|
||||
|
||||
// 新手引导:是否展示由后端数据库记录判定(用户 guideVersion 未达当前版本即展示,
|
||||
// 完成/关闭后上报写库,跨设备不再重复打扰)。仅保留会话级测试强播入口。
|
||||
// 完成/关闭后上报写库,跨设备不再重复打扰)。测试强播入口 ?guide=1 保留:
|
||||
// main.ts 将其写入 sessionStorage(一次性,本组件读取即消费),仅当次加载生效。
|
||||
const GUIDE_FORCE_KEY = 'xz_guide_force'
|
||||
/** 与后端 handler.GuideCompleteVersion 一致 */
|
||||
const GUIDE_VERSION = 'v2'
|
||||
const showGuide = ref(false)
|
||||
// 本次展示是否来自测试强播(?guide=1):强播关闭时不写库,便于反复测试
|
||||
// 本次展示是否来自测试强播(?guide=1,仅当次加载):强播关闭时不写库,可反复重播
|
||||
const guideForced = ref(false)
|
||||
// 邀请奖励规则(供引导第 4 步动态展示;接口失败保持 null,气泡用泛指文案)
|
||||
const inviterRewardPerInvite = ref<number | null>(null)
|
||||
@@ -201,6 +202,11 @@ async function handleForcePopupDismiss() {
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
// 强播标记一次性消费:仅本次整页加载(URL 带 ?guide=1)内优先展示且关闭不写库;
|
||||
// 读取后立即清除,避免会话残留把后续普通访问(刷新/重开)误判为强播——
|
||||
// 否则会出现"看完引导后刷新又弹、且永不上报完成"的假象
|
||||
guideForced.value = sessionStorage.getItem(GUIDE_FORCE_KEY) === '1'
|
||||
sessionStorage.removeItem(GUIDE_FORCE_KEY)
|
||||
try {
|
||||
const res = await authApi.getUserInfo()
|
||||
const data = res.data.data
|
||||
@@ -211,8 +217,7 @@ onMounted(async () => {
|
||||
return
|
||||
}
|
||||
// 新手引导:数据库判定该用户未看过当前版本引导则展示(跨设备一致);
|
||||
// 测试强播(?guide=1 会话标记)优先且不写库,可反复重播
|
||||
guideForced.value = sessionStorage.getItem(GUIDE_FORCE_KEY) === '1'
|
||||
// 本次若来自 ?guide=1 强播则优先展示(guideForced 已消费,下次加载不再生效)
|
||||
if (guideForced.value || needGuide(data)) {
|
||||
showGuide.value = true
|
||||
// 引导气泡中展示邀请奖励数值(第 4 步)
|
||||
|
||||
Reference in New Issue
Block a user