|
|
@@ -1,14 +1,18 @@
|
|
|
<script>
|
|
|
import config from '@/config.js'
|
|
|
import Vue from 'vue'
|
|
|
-import { checkUserFamily, verifyToken } from './utils/api.js'
|
|
|
+import { checkUserFamily, verifyToken, bindReferral } from './utils/api.js'
|
|
|
Vue.prototype.$config = config
|
|
|
|
|
|
export default {
|
|
|
onLaunch: function(options) {
|
|
|
console.log('App Launch', options)
|
|
|
+ // 捕获分享/邀请参数(普通分享链接 ?inviteCode=xxx):未登录写入 storage 供注册登录后绑定推荐人,已登录直接绑定
|
|
|
+ this.captureReferralParams(options)
|
|
|
+ // 分享/深链冷启动(携带分享参数)放行到落地页,不套 splash,避免分享的文章/小程序页面打不开
|
|
|
+ var hasDeepLink = options && options.query && (options.query.inviteCode || options.query.id)
|
|
|
// 冷启动:跳转到 splash 页展示过渡动画,2秒后自动进入首页
|
|
|
- if (options.scene !== 1047 && options.scene !== 1048 && options.scene !== 1049) {
|
|
|
+ if (options.scene !== 1047 && options.scene !== 1048 && options.scene !== 1049 && !hasDeepLink) {
|
|
|
uni.setStorageSync('_isFirstLaunch', '1')
|
|
|
uni.redirectTo({ url: '/pages/splash/index' })
|
|
|
return
|
|
|
@@ -37,6 +41,8 @@ export default {
|
|
|
},
|
|
|
onShow: function(options) {
|
|
|
console.log('App Show', options)
|
|
|
+ // 热启动(含从分享卡重新进入):同样捕获分享参数
|
|
|
+ this.captureReferralParams(options)
|
|
|
// 每次 app 展示时也检查场景值(小程序码可能从冷启动后的 onShow 传入)
|
|
|
this.handleScene(options)
|
|
|
|
|
|
@@ -51,6 +57,31 @@ export default {
|
|
|
console.log('App Hide')
|
|
|
},
|
|
|
methods: {
|
|
|
+ // 捕获分享/邀请参数:普通分享链接 /pages/xxx?inviteCode=yyy 冷/热启动进入时,
|
|
|
+ // 新用户(未登录)写入 storage,登录注册后由 login / user-edit 消费绑定推荐人;
|
|
|
+ // 已登录用户直接绑定(boundInviteCode 防重,避免重复请求)
|
|
|
+ captureReferralParams(options) {
|
|
|
+ if (!options || !options.query) return
|
|
|
+ var code = options.query.inviteCode
|
|
|
+ if (!code) return
|
|
|
+ if (uni.getStorageSync('token')) {
|
|
|
+ var bound = uni.getStorageSync('boundInviteCode')
|
|
|
+ if (bound === code) return
|
|
|
+ bindReferral(code).then(function(res) {
|
|
|
+ if (res && (res.code === 200 || res.code === 400)) {
|
|
|
+ uni.setStorageSync('boundInviteCode', code)
|
|
|
+ console.log('分享参数推荐人绑定结果', res.code, code)
|
|
|
+ }
|
|
|
+ }).catch(function(e) {
|
|
|
+ console.log('分享参数推荐人绑定失败', e)
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ uni.setStorageSync('inviteCode', code)
|
|
|
+ if (options.query.inviteType) {
|
|
|
+ uni.setStorageSync('inviteType', options.query.inviteType)
|
|
|
+ }
|
|
|
+ },
|
|
|
// 校验本地 token 是否有效(开发环境跳过,避免无后端时误报)
|
|
|
verifyStoredToken() {
|
|
|
try {
|