| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // 仅内存去重:工作台重建不会再弹,冷启动或重新登录可以再次检查。
- const sessionMemory = { handledSession: '' }
- export function createWechatFollowReminder({
- getSessionKey, isActive, loadStatus, showPrompt, openGuide, memory = sessionMemory
- }) {
- let revision = 0
- let pending = false
- const cancel = () => {
- revision++
- pending = false
- }
- const check = async () => {
- const session = getSessionKey()
- if (!session || !isActive() || pending || memory.handledSession === session) return
- const currentRevision = ++revision
- const current = () => revision === currentRevision && isActive() && getSessionKey() === session
- pending = true
- let presenting = false
- try {
- const status = await loadStatus()
- if (!current()) return
- memory.handledSession = session
- if (!status.enabled || (status.bound && status.subscribed)) return
- presenting = true
- const confirmed = await showPrompt({
- title: status.bound ? '关注服务号' : '开启服务号通知',
- content: status.bound
- ? '您绑定的微信尚未关注“山峡化工”服务号,暂时无法接收业务通知。是否前往关注?'
- : '关注“山峡化工”服务号并绑定门户账号,即可接收审批、发放及证件提醒。如已关注,请完成账号绑定。',
- confirmText: status.bound ? '去关注' : '去开启',
- cancelText: '稍后再说',
- confirmColor: '#0a9f6d'
- })
- if (confirmed && current()) openGuide()
- } catch {
- // 状态不可用时不打断登录;弹窗自身失败允许下次进入工作台重试。
- if (presenting && current() && memory.handledSession === session) {
- memory.handledSession = ''
- }
- } finally {
- if (revision === currentRevision) pending = false
- }
- }
- return { check, cancel }
- }
|