useAppVersion.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { DOMAIN, STRICT_CHECK_HOSTS } from "@/constants/constants";
  2. import { checkMainExe, fileExists, isElectron } from "@/utils/nativeMethods";
  3. import ua from "@/utils/ua";
  4. import { onMounted, Ref, watch } from "vue";
  5. export function useAppVersion(newVersionAvailable: Ref<boolean>) {
  6. // @ts-expect-error
  7. // eslint-disable-next-line no-undef
  8. const portableFile = window.proceess?.env?.PORTABLE_EXECUTABLE_FILE;
  9. function checkApp() {
  10. if (isElectron() && !portableFile) {
  11. // FIXME: 在苹果电脑跳过检测
  12. if (navigator.userAgent.includes("Macintosh")) {
  13. return;
  14. }
  15. disableLoginBtnBecauseAppVersionChecker = true;
  16. if (ua.getBrowser().version !== "1.9.3") {
  17. $message.error("请与学校申请最新的客户端,进行考试!", {
  18. duration: 24 * 60 * 60 * 1000,
  19. });
  20. } else {
  21. $message.error(
  22. "电脑环境达不到考试要求,请清理与考试无关软件或更换电脑",
  23. {
  24. duration: 24 * 60 * 60 * 1000,
  25. }
  26. );
  27. }
  28. }
  29. if (
  30. [
  31. "xjtu.ecs.qmth.com.cn",
  32. "ccnu.ecs.qmth.com.cn",
  33. "snnu.ecs.qmth.com.cn",
  34. "swjtu.ecs.qmth.com.cn",
  35. ].includes(DOMAIN)
  36. ) {
  37. if (!isElectron() || !fileExists("multiCamera.exe")) {
  38. disableLoginBtnBecauseAppVersionChecker = true;
  39. $message.error("请与学校申请最新的客户端,进行考试!", {
  40. duration: 24 * 60 * 60 * 1000,
  41. });
  42. }
  43. }
  44. if (STRICT_CHECK_HOSTS.includes(window.location.hostname)) {
  45. if (!checkMainExe()) {
  46. disableLoginBtnBecauseAppVersionChecker = true;
  47. if (ua.getBrowser().version !== "1.9.3") {
  48. $message.error("请与学校申请最新的客户端,进行考试!", {
  49. duration: 24 * 60 * 60 * 1000,
  50. });
  51. } else {
  52. $message.error(
  53. "电脑环境达不到考试要求,请清理与考试无关软件或更换电脑",
  54. { duration: 24 * 60 * 60 * 1000 }
  55. );
  56. }
  57. }
  58. }
  59. }
  60. onMounted(() => checkApp());
  61. watch(newVersionAvailable, () => {
  62. if (newVersionAvailable) {
  63. $message.error("程序有更新,请重新打开客户端!", {
  64. duration: 24 * 60 * 60 * 1000,
  65. });
  66. }
  67. });
  68. let disableLoginBtnBecauseAppVersionChecker = $ref(false);
  69. return {
  70. disableLoginBtnBecauseAppVersionChecker: $$(
  71. disableLoginBtnBecauseAppVersionChecker
  72. ),
  73. };
  74. }