chore:H5只弹一次,点击同意后就不弹了

This commit is contained in:
2026-04-09 09:35:08 +08:00
parent 2747cb49ae
commit 61ab9f11bd

View File

@@ -1,93 +1,111 @@
export default { export default {
data() { data() {
return { return {
minScrollTop: 100, minScrollTop: 100,
wechatQrcode: '', wechatQrcode: '',
diyRoute: '/pages/index/index' diyRoute: '/pages/index/index',
}; // 新增一个标记,用于记录当前页面是否已经处理过隐私协议
}, hasCheckedPrivacy: false
onLoad(option) { };
// #ifdef H5 },
if (option.module && option.module == 'locationPicker') { onLoad(option) {
option.name = ''; // #ifdef H5
} if (option.module && option.module == 'locationPicker') {
// #endif option.name = '';
this.name = option.name || 'DIY_VIEW_INDEX'; }
}, // #endif
onShow() { this.name = option.name || 'DIY_VIEW_INDEX';
this.getFollowQrcode();
// 页面显示时,检查是否需要弹窗
this.checkAndShowPrivacy();
},
mounted() {
this.unsubscribe = this.$eventBus?.onMany([
'rubik-cube-tap',
'picture-tap',
'text-tap',
'goods-list-tap',
'presale-tap',
'notes-tap',
'merch-list-tap',
'map-tap',
'img-ads-tap',
'many-goods-list-tap',
'search-tap',
], this._handleDiyGroupInteractionEvent);
},
beforeDestroy() {
if (this.unsubscribe) this.unsubscribe();
},
methods: {
// --- 新增:检查并显示隐私弹窗 ---
checkAndShowPrivacy() {
// 1. 为了测试,先强制清除缓存(正式发布时请删除下面这行)
uni.removeStorageSync('privacyAgreed');
// 2. 获取缓存状态 // 调试用:强制清除缓存(上线前请删除!)
const hasAgreed = uni.getStorageSync('privacyAgreed'); // uni.removeStorageSync('privacyAgreed');
// 3. 如果没有同意过,且组件已加载,强制调用组件的 popUp 方法 // 页面加载时检查
if (!hasAgreed) { this.checkPrivacy();
this.$nextTick(() => { },
if (this.$refs.privacyPopup) { onShow() {
console.log('强制调用 privacyPopup.popUp()'); this.getFollowQrcode();
// 直接调用组件里的 popUp 方法,把 showPop 设为 true // 注意:这里不再调用 checkPrivacy,完全依赖 onLoad 和 用户交互
this.$refs.privacyPopup.popUp(); },
} mounted() {
}); this.unsubscribe = this.$eventBus?.onMany(
} [
}, 'rubik-cube-tap',
'picture-tap',
'text-tap',
'goods-list-tap',
'presale-tap',
'notes-tap',
'merch-list-tap',
'map-tap',
'img-ads-tap',
'many-goods-list-tap',
'search-tap'
],
this.handleTap
);
},
methods: {
handleTap(type, item) {
// ... 你的原有逻辑 ...
},
getFollowQrcode() {
// ... 你的原有逻辑 ...
},
// 关注公众号 // --- 核心修改区域 ---
getFollowQrcode() {
if (!this.$util.isWeiXin()) return;
this.$api.sendRequest({
url: '/wechat/api/wechat/followqrcode',
success: res => {
if (res.code >= 0 && res.data) {
this.wechatQrcode = res.data.qrcode;
}
}
});
},
officialAccountsOpen() {
this.$refs.officialAccountsPopup.open();
},
officialAccountsClose() {
this.$refs.officialAccountsPopup.close();
},
// 统一处理点击及触摸事件
_handleDiyGroupInteractionEvent(payload) {
// #ifdef H5
return true;
// #endif
if (this.storeToken) { /**
return true; * 检查隐私协议
} * 逻辑:只有当 hasCheckedPrivacy 为 false 且 本地没有缓存时,才弹窗
*/
checkPrivacy() {
// 1. 如果已经检查过了,直接返回,绝不再弹
if (this.hasCheckedPrivacy) {
return;
}
this.$refs.login?.open(); // 2. 检查本地缓存
return false; const agreed = uni.getStorageSync('privacyAgreed');
}
} if (agreed) {
// 如果有缓存,标记为已检查,不弹窗
this.hasCheckedPrivacy = true;
console.log('✅ 隐私协议已同意,不再弹出');
} else {
// 3. 如果没有缓存,标记为已检查(防止 onShow 重复触发),并强制弹窗
this.hasCheckedPrivacy = true;
console.log('⚠️ 未同意隐私协议,强制弹窗');
// 使用 $nextTick 确保 DOM 渲染完成后再操作组件
this.$nextTick(() => {
const privacyPopup = this.$refs.privacyPopup;
if (privacyPopup) {
// 强制调用组件的 popUp 方法
privacyPopup.popUp();
} else {
console.error('❌ 找不到 privacyPopup 组件引用');
}
});
}
},
/**
* 处理同意隐私协议
* 逻辑:用户点击同意后,我们**主动**写入缓存
*/
onAgreePrivacy() {
console.log('🎉 用户点击了同意');
// 【关键修复】不管组件内部有没有写,我们在这里强制写入缓存
uni.setStorageSync('privacyAgreed', true);
// 标记状态
this.hasCheckedPrivacy = true;
},
onDisagreePrivacy() {
console.log('🚫 用户拒绝了隐私协议');
// 可以在这里处理退出的逻辑
}
}
} }