import { defineComponent } from 'vue' import styles from './auth.module.less' import { state, setLogin, setLogout, setLoginError } from '@/state' import { browser, setAuth } from '@/helpers/utils' import { postMessage } from '@/helpers/native-message' import { RouterView } from 'vue-router' import { Button, Icon } from 'vant' import request from '@/helpers/request' import OEmpty from '@/components/o-empty' const browserInfo = browser() export default defineComponent({ name: 'Auth-loayout', data() { return { loading: false as boolean } }, computed: { isExternal() { // 该路由在外部连接打开是否需要登录 // 只判断是否在学生端打开 return (this.$route.meta.isExternal && !browserInfo.isStudent) || false }, isNeedView() { return ( state.user.status === 'login' || this.$route.path === '/login' || (this as any).isExternal ) } }, mounted() { !this.isExternal && this.setAuth() }, methods: { async setAuth() { const { query } = this.$route const token = query.userInfo || query.Authorization if (token) { setAuth(token) } if (this.loading) { return } if (state.user.status === 'init' || state.user.status === 'error') { this.loading = true try { const res = await request.get(state.platformApi + '/appLoginUser/getUserInfo', { initRequest: true, // 初始化接口 requestType: 'form', hideLoading: true }) // 初始化学校信息 if (state.platformType === 'SCHOOL') { const schoolInfo = res.data.schoolInfos ? res.data.schoolInfos[0] : {} res.data.school = schoolInfo } setLogin(res.data) } catch (e: any) { // console.log(e, 'e') const message = e.message if (message.indexOf('5000') === -1 && message.indexOf('authentication') === -1) { setLoginError() } else { setLogout() } } this.loading = false } if (state.user.status === 'logout') { if (browser().isApp) { postMessage({ api: 'login' }) } else { try { const route = this.$route const query = { returnUrl: this.$route.path, ...this.$route.query } as any if (route.meta.isRegister) { query.isRegister = route.meta.isRegister } this.$router.replace({ path: '/login', query: query }) } catch (error) { // } } } } }, render() { return ( <> {state.user.status === 'error' ? (
) : this.isNeedView ? ( ) : null} ) } })