mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2025-12-11 09:32:48 +00:00
231 lines
8.2 KiB
Vue
231 lines
8.2 KiB
Vue
<script setup lang="ts">
|
||
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
|
||
import { launchInterceptor } from '@/utils/interceptor'
|
||
import { getToken, isWeixinBrowser, getSiteId, currRoute, deepClone, setThemeColor } from '@/utils/common'
|
||
import useMemberStore from '@/stores/member'
|
||
import useConfigStore from '@/stores/config'
|
||
import useSystemStore from '@/stores/system'
|
||
import { useLogin } from '@/hooks/useLogin'
|
||
import { useShare } from '@/hooks/useShare'
|
||
import { useLocation } from '@/hooks/useLocation'
|
||
const locationVal = useLocation(true);
|
||
onLaunch((data: any) => {
|
||
// 添加初始化拦截器
|
||
launchInterceptor()
|
||
const systemStore = useSystemStore()
|
||
|
||
// 初始化全局数据
|
||
const initGlobalData = () => {
|
||
systemStore.systemInfo = uni.getSystemInfoSync();
|
||
systemStore.getMenuButtonInfoFn()
|
||
}
|
||
|
||
initGlobalData()
|
||
|
||
// #ifdef H5
|
||
systemStore.systemInfo.platform == 'ios' && (uni.setStorageSync('initUrl', location.href))
|
||
|
||
// 传输给后台数据
|
||
window.parent.postMessage(JSON.stringify({
|
||
type: 'appOnLaunch',
|
||
message: '初始化加载完成'
|
||
}), '*');
|
||
|
||
// 监听父页面发来的消息
|
||
window.addEventListener('message', event => {
|
||
try {
|
||
let data = {
|
||
type: ''
|
||
};
|
||
if (typeof event.data == 'string') {
|
||
data = JSON.parse(event.data)
|
||
} else if (typeof event.data == 'object') {
|
||
data = event.data
|
||
}
|
||
if (data.type && data.type == 'appOnReady') {
|
||
window.parent.postMessage(JSON.stringify({
|
||
type: 'appOnReady',
|
||
message: '加载完成'
|
||
}), '*');
|
||
// 更新全局数据
|
||
initGlobalData()
|
||
}
|
||
} catch (e) {
|
||
console.log('uni-app App.vue 接受数据错误', e)
|
||
}
|
||
}, false);
|
||
|
||
// 缺少站点id,拦截
|
||
if (process.env.NODE_ENV == 'development' && (getSiteId(uni.getStorageSync('wap_site_id') || import.meta.env.VITE_SITE_ID) === '')) return;
|
||
|
||
try {
|
||
uni.hideTabBar() // 隐藏tabbar
|
||
} catch (e) {
|
||
|
||
}
|
||
|
||
const { wechatInit } = useShare()
|
||
wechatInit()
|
||
// #endif
|
||
|
||
// #ifdef MP
|
||
const updateManager = uni.getUpdateManager();
|
||
updateManager.onCheckForUpdate(function (res) {
|
||
// 请求完新版本信息的回调
|
||
});
|
||
|
||
updateManager.onUpdateReady(function (res) {
|
||
uni.showModal({
|
||
title: '更新提示',
|
||
content: '新版本已经准备好,是否重启应用?',
|
||
success(res) {
|
||
if (res.confirm) {
|
||
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
||
updateManager.applyUpdate();
|
||
}
|
||
}
|
||
});
|
||
});
|
||
|
||
updateManager.onUpdateFailed(function (res) {
|
||
// 新的版本下载失败
|
||
});
|
||
// #endif
|
||
|
||
// 获取初始化数据信息
|
||
useSystemStore().getInitFn(async () => {
|
||
|
||
const configStore = useConfigStore()
|
||
|
||
let loginConfig = uni.getStorageSync('login_config')
|
||
if (!loginConfig) {
|
||
loginConfig = deepClone(configStore.login)
|
||
}
|
||
|
||
let url: any = currRoute()
|
||
// 设置主色调
|
||
setThemeColor(url)
|
||
|
||
// 判断账号锁定后在登录注册页面不进行请求三方登录注册,防止在页面出不去 member_lock 为账号锁定标识
|
||
if (uni.getStorageSync('member_lock') && (['app/pages/auth/index', 'app/pages/auth/login', 'app/pages/auth/register', 'app/pages/auth/resetpwd'].indexOf(url) != -1) && (loginConfig.is_username || loginConfig.is_mobile || loginConfig.is_bind_mobile)) {
|
||
return false
|
||
}
|
||
|
||
// 判断是否已登录
|
||
if (getToken()) {
|
||
const memberStore: any = useMemberStore()
|
||
|
||
await memberStore.setToken(getToken(), () => {
|
||
if (!uni.getStorageSync('openid')) {
|
||
const memberInfo = useMemberStore().info
|
||
const login = useLogin()
|
||
|
||
// #ifdef MP-WEIXIN
|
||
if (memberInfo.mobile) uni.setStorageSync('wap_member_mobile', memberInfo.mobile) // 存储会员手机号,防止重复请求微信获取手机号接口
|
||
if (memberInfo && memberInfo.weapp_openid) {
|
||
uni.setStorageSync('openid', memberInfo.weapp_openid) // 授权登录后存储openid
|
||
} else {
|
||
login.getAuthCode({ updateFlag: true }) // 更新openid
|
||
}
|
||
// #endif
|
||
|
||
// #ifdef H5
|
||
if (isWeixinBrowser()) {
|
||
if (memberInfo && memberInfo.wx_openid) {
|
||
uni.setStorageSync('openid', memberInfo.wx_openid)
|
||
} else {
|
||
if (data.query.code) {
|
||
// 检测身份是否合法(当前登录的账号是不是我的),openid有效后才能更新登录
|
||
login.updateOpenid(data.query.code, () => {
|
||
login.authLogin({ code: data.query.code })
|
||
})
|
||
} else if (loginConfig.is_auth_register && loginConfig.is_force_access_user_info) {
|
||
// 强制获取用户信息
|
||
login.getAuthCode({ scopes: 'snsapi_userinfo' })
|
||
} else {
|
||
// 静默获取
|
||
login.getAuthCode({ scopes: 'snsapi_base' })
|
||
}
|
||
}
|
||
}
|
||
// #endif
|
||
|
||
}
|
||
|
||
// todo 已注册的会员不受影响
|
||
// 开启强制绑定手机号
|
||
if (uni.getStorageSync('isBindMobile')) {
|
||
uni.removeStorageSync('isBindMobile');
|
||
}
|
||
//
|
||
// if (loginConfig.is_bind_mobile && !memberStore.info.mobile) {
|
||
// // 强制绑定手机号
|
||
// uni.setStorageSync('isBindMobile', true)
|
||
// }
|
||
})
|
||
|
||
}
|
||
|
||
if (!getToken()) {
|
||
|
||
// #ifdef MP
|
||
// 小程序 会员退出后不会自动登录
|
||
if (uni.getStorageSync('autoLoginLock')) return;
|
||
// #endif
|
||
|
||
const login = useLogin()
|
||
|
||
// #ifdef MP
|
||
// 第三方平台自动注册登录
|
||
login.getAuthCode()
|
||
// #endif
|
||
|
||
// #ifdef H5
|
||
if (isWeixinBrowser()) {
|
||
if (uni.getStorageSync('autoLoginLock') && !uni.getStorageSync('wechat_login_back')) return;
|
||
if (uni.getStorageSync('wechat_login_back')) {
|
||
uni.removeStorageSync('wechat_login_back') // 删除微信公众号手动授权登录回调标识
|
||
if (data.query.code) {
|
||
login.authLogin({ code: data.query.code })
|
||
}
|
||
} else if (loginConfig.is_auth_register && loginConfig.is_force_access_user_info) {
|
||
// 开启自动注册会员,并且强制获取用户信息
|
||
// 检测是否已授权获取用户信息
|
||
// let nickname = uni.getStorageSync('nickname');
|
||
// let avatar = uni.getStorageSync('avatar');
|
||
// let openid = uni.getStorageSync('openid');
|
||
// if (!nickname || !avatar || !openid) {}
|
||
login.getAuthCode({ scopes: 'snsapi_userinfo' })
|
||
} else {
|
||
// 检测是否已授权获取用户信息
|
||
// let openid = uni.getStorageSync('openid');
|
||
// if (!openid) {}
|
||
login.getAuthCode({ scopes: 'snsapi_base' }) // 静默获取
|
||
}
|
||
}
|
||
// #endif
|
||
}
|
||
})
|
||
|
||
// 控制弹窗展示
|
||
uni.setStorageSync('isOnLoad', true); // 存储是页面是否加载完成的状态
|
||
|
||
// #ifdef APP-PLUS
|
||
systemStore.getVersionInfoFn()
|
||
// #endif
|
||
})
|
||
|
||
onShow(() => {
|
||
|
||
})
|
||
|
||
onHide(() => {
|
||
})
|
||
</script>
|
||
|
||
<style>
|
||
uni-page-head {
|
||
display: none !important;
|
||
}
|
||
</style>
|