123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import { defineComponent } from 'vue';
- import styles from './auth.module.less';
- import { state, setLogin, setLogout, setLoginError } from '@/state';
- import { browser } from '@/helpers/utils';
- import { storage } from '@/helpers/storage';
- import { ACCESS_TOKEN } from '@/store/mutation-types';
- import { postMessage } from '@/helpers/native-message';
- import { RouterView } from 'vue-router';
- import request from '@/helpers/request';
- import MHeader from '@/components/m-header';
- import MEmpty from '@/components/m-empty';
- export default defineComponent({
- name: 'Auth-loayout',
- data() {
- return {
- loading: false as boolean
- };
- },
- computed: {
- isExternal() {
- // 该路由在外部连接打开是否需要登录
- // 只判断是否在学员端打开
- return this.$route.meta.isExternal || 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 || storage.get(ACCESS_TOKEN);
- if (token) {
- storage.set(ACCESS_TOKEN, token);
- }
- if (this.loading) {
- return;
- }
- if (state.user.status === 'init' || state.user.status === 'error') {
- this.loading = true;
- try {
- const res = await request.get('/edu-app/user/getUserInfo', {
- initRequest: true, // 初始化接口
- requestType: 'form',
- hideLoading: true
- });
- if (res?.code === 200){
- setLogin(res.data);
- }
- } catch (e: any) {
- 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}>
- <MHeader />
- <MEmpty
- image="network"
- description="加载失败,请稍后重试"
- buttonText="重新加载"
- showButton
- onClick={this.setAuth}
- />
- </div>
- ) : this.isNeedView ? (
- <RouterView></RouterView>
- ) : null}
- </>
- );
- }
- });
|