App.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { computed, defineComponent, onBeforeMount, onMounted } from "vue";
  2. import { RouterView } from "vue-router";
  3. import TheError from "../components/The-error";
  4. import { setUserInfo, storeData } from "../store";
  5. import { browser, getRandomKey, getToken, setBehaviorId, setToken } from "../utils";
  6. import { getQuery } from "../utils/queryString";
  7. import { studentQueryUserInfo } from "./api";
  8. import { api_cloudLoading, api_getToken } from "../helpers/communication";
  9. import { showToast } from "vant";
  10. export default defineComponent({
  11. name: "App",
  12. setup() {
  13. const query: any = getQuery();
  14. /** 获取用户信息 */
  15. const getUserInfo = async () => {
  16. return await studentQueryUserInfo();
  17. };
  18. const setUser = async () => {
  19. try {
  20. const res = await getUserInfo();
  21. if (res?.code === 5000) {
  22. const browserInfo = browser();
  23. showToast(res.message);
  24. if (browserInfo.isApp) {
  25. postMessage({ api: "login" });
  26. } else {
  27. window.location.href = `${
  28. /(192|localhost)/.test(location.origin) ? "https://test.lexiaoya.cn" : location.origin
  29. }/classroom`;
  30. }
  31. return;
  32. }
  33. const student = res?.data || {};
  34. setUserInfo(student);
  35. storeData.platformType = student.clientType === 'STUDENT' ? 'STUDENT' : ''
  36. } catch (error) {
  37. storeData.status = "error";
  38. api_cloudLoading();
  39. console.log("🚀 ~ error:", error);
  40. }
  41. };
  42. onBeforeMount(async () => {
  43. if (query.Authorization) {
  44. setToken(query.Authorization);
  45. }
  46. if (!getToken()) {
  47. const res = await api_getToken();
  48. if (res?.content) {
  49. const content = res.content;
  50. const token = content.tokenType + " " + content.accessToken;
  51. setToken(token);
  52. }
  53. }
  54. if (query.productXmlImg) {
  55. storeData.status = "login";
  56. return;
  57. }
  58. setUser();
  59. setBehaviorId(getRandomKey());
  60. });
  61. onMounted(() => {
  62. const _loading = document.getElementById("loading");
  63. _loading && document.body.removeChild(_loading);
  64. });
  65. const inited = computed(() => {
  66. return storeData.status === "login";
  67. });
  68. return () => (
  69. <>{storeData.status === "error" ? <TheError /> : inited.value ? <RouterView /> : null}</>
  70. );
  71. },
  72. });