auth.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { defineComponent } from "vue";
  2. import styles from './auth.module.less';
  3. import { state, setLogin } from '@/state';
  4. import { browser, setAuth } from "@/helpers/utils";
  5. import { postMessage } from "@/helpers/native-message";
  6. import { RouterView } from "vue-router";
  7. import { Button, Icon } from "vant";
  8. import request from "@/helpers/request";
  9. export default defineComponent({
  10. name: "Auth",
  11. data() {
  12. return {
  13. loading: false as boolean,
  14. }
  15. },
  16. computed: {
  17. isNeedView() {
  18. return state.user.status === 'login' || this.$route.path === '/login';
  19. }
  20. },
  21. mounted() {
  22. this.setAuth();
  23. },
  24. methods: {
  25. async setAuth() {
  26. const { query } = this.$route
  27. const token = query.userInfo || query.Authorization
  28. if (token) {
  29. setAuth(token)
  30. }
  31. if (this.loading) {
  32. return
  33. }
  34. if ((state.user.status === 'init' || state.user.status === 'error')) {
  35. this.loading = true
  36. try {
  37. let res = await request.get('/api-auth/api/queryUserInfo', {
  38. initRequest: true // 初始化接口
  39. })
  40. // console.log(res)
  41. setLogin(res.data)
  42. } catch (e: any) {
  43. // console.log(e)
  44. }
  45. this.loading = false
  46. }
  47. if (state.user.status === 'logout') {
  48. if (browser().isApp) {
  49. postMessage({ api: 'login' })
  50. } else {
  51. try {
  52. let route = this.$route
  53. let query = {
  54. returnUrl: this.$route.path,
  55. ...this.$route.query,
  56. } as any;
  57. if (route.meta.isRegister) {
  58. query.isRegister = route.meta.isRegister
  59. }
  60. this.$router.replace({
  61. path: '/login',
  62. query: query
  63. })
  64. } catch (error) { }
  65. }
  66. }
  67. }
  68. },
  69. render() {
  70. return (
  71. <>
  72. {state.user.status === 'error' ? <div class={styles.error}>
  73. <div class={styles.info}>
  74. <Icon name="clear" size="36" color="#ee0a24" />
  75. <span>加载失败,请重新尝试</span>
  76. </div>
  77. <Button type="primary" round onClick={this.setAuth}>重新加载</Button>
  78. </div> : this.isNeedView ? <RouterView></RouterView> : null}
  79. </>
  80. )
  81. }
  82. })