index.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template></template>
  2. <script setup lang="ts">
  3. import { computed, ref } from "vue";
  4. import { loadModel, fuseModel as FModel } from "@/model";
  5. import { fetchScene, fetchScenesAll, getSceneUrl, Scene, SceneType } from "@/api";
  6. import { createFuseModels, defTitle, fuseModels, SceneStatus } from "@/store";
  7. import {
  8. custom,
  9. params,
  10. showModelsMapStack,
  11. showRightPanoStack,
  12. viewModeStack,
  13. } from "@/env";
  14. import { Dialog } from "bill/index";
  15. import { useViewStack, useActive } from "@/hook";
  16. import { sdk } from "@/sdk";
  17. const active = useActive();
  18. let pop: () => void;
  19. const loadSignModel = async () => {
  20. showRightPanoStack.push(ref(false));
  21. viewModeStack.push(ref("full"));
  22. let scene: Scene | undefined;
  23. if ("modelId" in params) {
  24. const mscene = await fetchScene(Number(params.modelId));
  25. if (mscene.status !== SceneStatus.SUCCESS) {
  26. scene = mscene;
  27. }
  28. } else if ("m" in params) {
  29. const SSscenes = await fetchScenesAll({
  30. numList: [params.m!],
  31. type: SceneType.SWSSMX,
  32. });
  33. const YDscenes = await fetchScenesAll({
  34. numList: [params.m!],
  35. type: SceneType.SWYDMX,
  36. });
  37. const scenes = [...SSscenes, ...YDscenes];
  38. scene = scenes.find((scene) => scene.num === params.m);
  39. console.log(scene);
  40. }
  41. if (!scene) {
  42. return Dialog.alert(`模型不存在!`);
  43. }
  44. if (active.value) {
  45. defTitle.value = scene.title || scene.modelTitle;
  46. const fuseModel = createFuseModels({
  47. modelId: scene.modelId,
  48. show: true,
  49. raw: scene,
  50. url: getSceneUrl(scene),
  51. type: scene.type,
  52. opacity: 100,
  53. modelType: scene.modelDateType,
  54. });
  55. fuseModels.value.push(fuseModel);
  56. await loadModel(FModel);
  57. pop = showModelsMapStack.push(ref(new Map([[fuseModel, true]])));
  58. (window as any).__sdk = sdk;
  59. }
  60. };
  61. useViewStack(() => {
  62. const bcModels = fuseModels.value;
  63. fuseModels.value = [];
  64. loadSignModel();
  65. return () => {
  66. fuseModels.value = bcModels;
  67. pop && pop();
  68. };
  69. });
  70. </script>