123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- 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' ? (
- <div class={styles.error}>
- <OEmpty
- type="notFond"
- classImgSize="CERT"
- tips="加载失败,请稍后重试"
- buttonText="重新加载"
- plain={true}
- btnStatus={true}
- onClick={this.setAuth}
- />
- </div>
- ) : this.isNeedView ? (
- <RouterView></RouterView>
- ) : null}
- </>
- )
- }
- })
|