App.tsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import { computed, defineComponent, onBeforeMount, onMounted, onUnmounted } 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 = query.isCbs || window.location.href.includes("simple-detail") ? { code: 200, data: {} } : 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. if (/(192|localhost)/.test(location.origin)) {
  28. return;
  29. }
  30. // 判断是否在应用中
  31. window.parent.postMessage(
  32. {
  33. api: "onLogin",
  34. },
  35. "*"
  36. );
  37. setTimeout(() => {
  38. window.location.href = `${location.origin}/classroom`;
  39. }, 500);
  40. }
  41. return;
  42. }
  43. const student = res?.data || {};
  44. setUserInfo(student);
  45. storeData.platformType = student.clientType === "STUDENT" ? "STUDENT" : "";
  46. } catch (error) {
  47. storeData.status = "error";
  48. api_cloudLoading();
  49. console.log("🚀 ~ error:", error);
  50. }
  51. };
  52. onBeforeMount(async () => {
  53. if (query.Authorization) {
  54. setToken(query.Authorization);
  55. }
  56. if (window.location.href.includes("simple-detail")) {
  57. //
  58. } else {
  59. if (!getToken()) {
  60. const res = await api_getToken();
  61. if (res?.content) {
  62. const content = res.content;
  63. const token = content.tokenType + " " + content.accessToken;
  64. setToken(token);
  65. }
  66. }
  67. if (query.productXmlImg) {
  68. storeData.status = "login";
  69. return;
  70. }
  71. }
  72. setUser();
  73. setBehaviorId(getRandomKey());
  74. });
  75. // 老师端云练习,上下键切资源
  76. const onKeyBoard = (e: KeyboardEvent) => {
  77. if (e.code === "ArrowUp") {
  78. window.parent.postMessage(
  79. {
  80. api: "documentBodyKeyup",
  81. code: "ArrowUp",
  82. },
  83. "*"
  84. );
  85. } else if (e.code === "ArrowDown") {
  86. window.parent.postMessage(
  87. {
  88. api: "documentBodyKeyup",
  89. code: "ArrowDown",
  90. },
  91. "*"
  92. );
  93. }
  94. };
  95. onMounted(() => {
  96. const _loading = document.getElementById("loading");
  97. _loading && document.body.removeChild(_loading);
  98. // console.log(query);
  99. if (query.platform == "pc") {
  100. document.body.addEventListener("keyup", (e: KeyboardEvent) => onKeyBoard(e));
  101. // 禁用右键菜单
  102. document.addEventListener("contextmenu", function (event) {
  103. event.preventDefault();
  104. });
  105. // 禁用浏览器快捷键
  106. document.addEventListener("keydown", function (event) {
  107. // 屏蔽 F12 和 Ctrl+Shift+I
  108. if (event.key === "F12" || (event.ctrlKey && event.shiftKey && event.key === "I") || (event.metaKey && event.altKey && event.key === "I")) {
  109. event.preventDefault();
  110. }
  111. });
  112. }
  113. // // 禁用右键菜单
  114. // document.addEventListener("contextmenu", function (event) {
  115. // // event.preventDefault();
  116. // });
  117. // // 禁用浏览器快捷键
  118. // document.addEventListener("keydown", function (event) {
  119. // // 屏蔽 F12 和 Ctrl+Shift+I
  120. // if (event.key === "F12" || (event.ctrlKey && event.shiftKey && event.key === "I") || (event.metaKey && event.altKey && event.key === "I")) {
  121. // event.preventDefault();
  122. // }
  123. // });
  124. });
  125. onUnmounted(() => {
  126. if (query.platform == "pc") document.body.removeEventListener("keyup", onKeyBoard);
  127. });
  128. const inited = computed(() => {
  129. return storeData.status === "login";
  130. });
  131. return () => <>{storeData.status === "error" ? <TheError /> : inited.value ? <RouterView /> : null}</>;
  132. },
  133. });