imageExport.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import Vue from "vue";
  2. import { AES } from "./crypto";
  3. import { pick } from "lodash";
  4. import { DEVICE_ID, PLATFORM } from "@/constants/app";
  5. import { randomCode } from "./utils";
  6. export function getDownloadURLScheme(downloadSet = null, apiUrl = null) {
  7. let user = Vue.ls.get("user");
  8. const schoolId = Vue.ls.get("schoolId");
  9. const curSchoolInfo = user.schoolInfo.find((item) => item.id === schoolId);
  10. user.curSchoolInfo = curSchoolInfo;
  11. user = pick(user, [
  12. "id",
  13. "loginName",
  14. "realName",
  15. "sessionId",
  16. "accessToken",
  17. "orgInfo",
  18. "curSchoolInfo",
  19. ]);
  20. user.deviceId = DEVICE_ID;
  21. user.platform = PLATFORM;
  22. const key = AES(
  23. JSON.stringify({
  24. user,
  25. apiUrl: apiUrl || window.location.origin,
  26. downloadSet,
  27. actionSession: `${Date.now()}${randomCode()}`,
  28. })
  29. );
  30. return `trd://download?q=${key}`;
  31. }
  32. export function openApp(scheme, fallback, timeout = 2000) {
  33. let isPageHidden = false;
  34. const onVisibilityChange = () => {
  35. if (document.hidden) {
  36. isPageHidden = true;
  37. }
  38. };
  39. document.addEventListener("visibilitychange", onVisibilityChange);
  40. // 创建 iframe 来尝试调用 URL Scheme
  41. const iframe = document.createElement("iframe");
  42. iframe.style.display = "none";
  43. iframe.src = scheme;
  44. document.body.appendChild(iframe);
  45. setTimeout(() => {
  46. document.removeEventListener("visibilitychange", onVisibilityChange);
  47. document.body.removeChild(iframe);
  48. if (!isPageHidden) {
  49. // 如果页面未切换到后台,跳转到 fallback URL
  50. fallback && fallback();
  51. }
  52. }, timeout);
  53. }