88 lines
2.6 KiB
Vue
88 lines
2.6 KiB
Vue
<script>
|
||
import { useUserStore } from './store/user.js'
|
||
import { useAppStore } from './store/app.js'
|
||
import { setupRouteGuard } from './utils/routeGuard.js'
|
||
|
||
export default {
|
||
onLaunch: function(options) {
|
||
console.log('App Launch', options)
|
||
// 初始化路由守卫(未登录跳转登录页)
|
||
setupRouteGuard()
|
||
|
||
// 初始化系统信息
|
||
const appStore = useAppStore()
|
||
appStore.initSystemInfo()
|
||
|
||
// 恢复用户状态
|
||
const userStore = useUserStore()
|
||
userStore.restoreFromStorage()
|
||
|
||
// 解析邀请人参数(二维码扫码 scene 或分享链接 query)
|
||
this.parseInviterFromLaunch(options)
|
||
|
||
// 已登录时从服务器刷新用户信息
|
||
if (userStore.isLoggedIn) {
|
||
userStore.fetchUserInfo()
|
||
}
|
||
},
|
||
onShow: function() {
|
||
console.log('App Show')
|
||
},
|
||
onHide: function() {
|
||
console.log('App Hide')
|
||
},
|
||
methods: {
|
||
/**
|
||
* 解析邀请人参数
|
||
* 来源1: 扫描小程序码 scene 参数,格式 inviter={userId}
|
||
* 来源2: 分享链接 query 参数 inviteUid={uid}
|
||
*/
|
||
parseInviterFromLaunch(options) {
|
||
if (!options) return
|
||
|
||
console.log('[App] parseInviterFromLaunch 原始options:', JSON.stringify(options))
|
||
|
||
let inviterId = null
|
||
|
||
// 1. 扫码进入:解析 scene 参数(inviter={userId})
|
||
// 注意:options.scene 是微信启动场景值(数字,如1048),
|
||
// 自定义 scene 参数在 options.query.scene 中(字符串)
|
||
const sceneStr = (options.query && options.query.scene)
|
||
? String(options.query.scene)
|
||
: (typeof options.scene === 'string' ? options.scene : '')
|
||
|
||
if (sceneStr) {
|
||
const scene = decodeURIComponent(sceneStr)
|
||
console.log('[App] 扫码 scene 解码后:', scene)
|
||
const match = scene.match(/inviter=(\d+)/)
|
||
if (match) {
|
||
inviterId = match[1]
|
||
console.log('[App] 从scene解析到inviterId:', inviterId)
|
||
} else {
|
||
console.log('[App] scene中未匹配到inviter参数')
|
||
}
|
||
}
|
||
|
||
// 2. 分享链接进入:解析 inviterId 参数(query 中直接带 inviterId)
|
||
const queryInviterId = (options.query && options.query.inviterId) || options.inviterId
|
||
if (!inviterId && queryInviterId) {
|
||
inviterId = queryInviterId
|
||
console.log('[App] 从query参数获取inviterId:', inviterId)
|
||
}
|
||
|
||
// 存储邀请人ID(仅未登录用户需要绑定)
|
||
if (inviterId) {
|
||
console.log('[App] 存储inviterId到Storage:', inviterId)
|
||
uni.setStorageSync('inviterId', inviterId)
|
||
} else {
|
||
console.log('[App] 未检测到邀请人参数')
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
/*每个页面公共css */
|
||
</style>
|