niucloud/uni-app/src/App.vue
全栈小学生 e978947715 up
2024-12-21 18:42:42 +08:00

205 lines
7.8 KiB
Vue
Raw 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 setup lang="ts">
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
import { launchInterceptor } from '@/utils/interceptor'
import { getToken, isWeixinBrowser, getSiteId, currRoute, deepClone } 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'
onLaunch((data: any) => {
// 添加初始化拦截器
launchInterceptor()
// #ifdef H5
uni.getSystemInfoSync().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: '加载完成'
}), '*');
}
} 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;
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()
if ((['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)
} else {
login.getAuthCode({ updateFlag: true }) // 更新oppenid
}
// #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_force_access_user_info) {
// 强制获取用户信息
login.getAuthCode({ scopes: 'snsapi_userinfo' })
} else {
// 静默获取
login.getAuthCode({ scopes: 'snsapi_base' })
}
}
}
}
// #endif
}
// 开启强制绑定手机号
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
// 判断是否开启第三方自动注册登录
if (loginConfig.is_auth_register) {
// 第三方平台自动登录
login.getAuthCode()
}
// #endif
// #ifdef H5
if (isWeixinBrowser()) {
if (uni.getStorageSync('autoLoginLock') && !uni.getStorageSync('wechat_login_back')) return;
if (loginConfig.is_auth_register || uni.getStorageSync('wechat_login_back')) {
uni.removeStorageSync('wechat_login_back') // 删除微信公众号手动授权登录回调标识
if (data.query.code) {
login.authLogin({ code: data.query.code })
} else {
if (loginConfig.is_force_access_user_info) {
// 强制获取用户信息
login.getAuthCode({ scopes: 'snsapi_userinfo' })
} else {
// 静默获取
login.getAuthCode({ scopes: 'snsapi_base' })
}
}
}
}
// #endif
}
})
})
onShow(() => {
})
onHide(() => {
})
</script>
<style>
uni-page-head {
display: none !important;
}
</style>