125 lines
3.2 KiB
JavaScript
125 lines
3.2 KiB
JavaScript
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',
|
||
})
|
||
}
|
||
}
|
||
}) |