mi-assessment/uniapp/App.vue
zpc 46ed573221
All checks were successful
continuous-integration/drone/push Build is passing
213
2026-04-13 19:27:52 +08:00

88 lines
2.6 KiB
Vue
Raw Permalink 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.

<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>