2025-04-22 14:39:59 +08:00

125 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

let privacyHandler
let privacyResolves = new Set()
let closeOtherPageshowDialogHooks = new Set()
if (wx.onNeedPrivacyAuthorization) {
wx.onNeedPrivacyAuthorization(resolve => {
if (typeof privacyHandler === 'function') {
privacyHandler(resolve)
}
})
}
const closeOtherPageshowDialog = (closeDialog) => {
closeOtherPageshowDialogHooks.forEach(hook => {
if (closeDialog !== hook) {
hook()
}
})
}
Component({
data: {
visible: false,
mini_logo: __wxConfig.accountInfo.icon,
mini_name: __wxConfig.accountInfo.nickname
},
properties: {
useSafeArea: { // 是否在非tabBar页面引用
type: Boolean,
value: true
}
},
lifetimes: {
attached() {
const closeDialog = () => {
this.hideDialog()
}
privacyHandler = resolve => {
privacyResolves.add(resolve)
this.showDialog()
// 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
closeOtherPageshowDialog(closeDialog)
}
closeOtherPageshowDialogHooks.add(closeDialog)
this.closeDialog = closeDialog
},
detached() {
closeOtherPageshowDialogHooks.delete(this.closeDialog)
this.handleDisagree()
}
},
methods: {
handleAgree() {
this.hideDialog()
// 这里演示了同时调用多个wx隐私接口时要如何处理让隐私弹窗保持单例点击一次同意按钮即可让所有pending中的wx隐私接口继续执行
privacyResolves.forEach(resolve => {
resolve({
event: 'agree',
buttonId: 'agree-btn'
})
})
privacyResolves.clear()
},
handleDisagree(e) {
this.hideDialog()
privacyResolves.forEach(resolve => {
resolve({
event: 'disagree'
})
})
privacyResolves.clear()
wx.exitMiniProgram();
},
showDialog() {
if (!this.data.visible) {
this.setData({
visible: true
})
wx.setPageStyle({
style: {
overflow: 'hidden'
}
})
}
},
hideDialog() {
if (this.data.visible) {
this.setData({
visible: false
})
wx.setPageStyle({
style: {
overflow: 'auto'
}
})
}
},
openPrivacyContract() {
wx.openPrivacyContract({
success: res => {
console.log('openPrivacyContract success', res)
},
fail: err => {
console.error('openPrivacyContract fail', err)
}
})
},
tabBarPageShow() {
this.handleDisagree()
if (this.closeDialog) {
privacyHandler = resolve => {
privacyResolves.add(resolve)
this.showDialog()
// 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
closeOtherPageshowDialog(this.closeDialog)
}
}
},
openUserAgreementConfig(){
wx.navigateTo({
url: '/pages/index/illustrate?type=miniprogram_user_agreement',
})
}
}
})