setup.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import { SDK } from "@/sdk";
  2. import { watchEffect, watch, ref } from "vue";
  3. import { Router } from "vue-router";
  4. import { useCustom, useDisabled } from "./hook";
  5. import {
  6. disabledMap,
  7. hotDisabledStack,
  8. mapDisabledStack,
  9. cloundDisabledStack,
  10. fullViewStack,
  11. spiltViewModeStack,
  12. magnifierModeStack,
  13. DisabledCom,
  14. CustomCom,
  15. customMap,
  16. CustomMapStack,
  17. } from "./preset";
  18. // 全屏切换设置
  19. const fullScreenSetting = (sdk: SDK) => {
  20. const disableSceneView = ref(false);
  21. const disableMiniView = ref(false);
  22. // 全屏切换
  23. watch(
  24. () => fullViewStack.current.value.value,
  25. (newFull) => {
  26. if (newFull === "scene") {
  27. mapDisabledStack.current.value === disableMiniView &&
  28. mapDisabledStack.pop();
  29. cloundDisabledStack.push(disableSceneView);
  30. sdk.sceneFullShow();
  31. } else {
  32. cloundDisabledStack.current.value === disableSceneView &&
  33. cloundDisabledStack.pop();
  34. mapDisabledStack.push(disableMiniView);
  35. sdk.mapFullShow();
  36. }
  37. },
  38. { flush: "sync" }
  39. );
  40. };
  41. // 分屏设置
  42. const spliceSetting = (sdk: SDK) => {
  43. watch(
  44. () => spiltViewModeStack.current.value.value,
  45. (newSplice, oldSplice) => {
  46. if (newSplice !== null) {
  47. cloundDisabledStack.push(ref(false));
  48. mapDisabledStack.push(ref(true));
  49. hotDisabledStack.push(ref(true));
  50. fullViewStack.push(ref("scene"));
  51. sdk.openSplitScreen();
  52. sdk.setSplitScreenSize(newSplice);
  53. } else if (oldSplice) {
  54. cloundDisabledStack.pop();
  55. mapDisabledStack.pop();
  56. hotDisabledStack.pop();
  57. fullViewStack.pop();
  58. sdk.setSplitScreenSize(0.5);
  59. sdk.closeSplitScreen();
  60. }
  61. }
  62. );
  63. };
  64. // 放大镜模式
  65. const magnifierSetting = (sdk: SDK) => {
  66. watch(
  67. () => magnifierModeStack.current.value.value,
  68. (magnifierMode, oldVal) => {
  69. if (magnifierMode) {
  70. fullViewStack.push(ref("scene"));
  71. sdk.scene.openMagnifier();
  72. } else if (oldVal) {
  73. sdk.scene.closeMagnifier();
  74. fullViewStack.pop();
  75. }
  76. }
  77. );
  78. };
  79. export const setupSDK = (sdk: SDK) => {
  80. // 基础设置
  81. watchEffect(() => {
  82. sdk.changeScene(!disabledMap[DisabledCom.Clound]);
  83. });
  84. watchEffect(() => sdk.scene.changeMode(customMap[CustomCom.LaserMode]));
  85. watchEffect(() => sdk.carry.setShowHots(!disabledMap[DisabledCom.Hot]));
  86. watchEffect(() =>
  87. sdk.carry.setShowMeasures(!disabledMap[DisabledCom.Measure])
  88. );
  89. fullScreenSetting(sdk);
  90. spliceSetting(sdk);
  91. magnifierSetting(sdk);
  92. };
  93. export type RouteCustomConfig = {
  94. [key in any]: {
  95. disabled?: DisabledCom[];
  96. enabled?: DisabledCom[];
  97. custom?: {
  98. [key in CustomCom]?: CustomMapStack[key]["current"]["value"];
  99. };
  100. };
  101. };
  102. export const setupRouteCustom = (router: Router, config: RouteCustomConfig) => {
  103. const pops = [];
  104. const setting = (name) => {
  105. const atom = config[name];
  106. if (!atom) return;
  107. if (atom.custom) {
  108. Object.keys(atom.custom).forEach((key: CustomCom) => {
  109. pops.push(useCustom(key, atom.custom[key]));
  110. });
  111. }
  112. if (atom.disabled) {
  113. pops.push(useDisabled(atom.disabled, ref(true)));
  114. }
  115. if (atom.enabled) {
  116. pops.push(useDisabled(atom.enabled, ref(false)));
  117. }
  118. };
  119. router.beforeEach((to, _, next) => {
  120. while (pops.length) {
  121. pops.pop()();
  122. }
  123. setting(to.name);
  124. next();
  125. });
  126. setting(router.currentRoute.value.name);
  127. };