Map3DMain.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <script setup>
  2. /**
  3. * element-plus组件
  4. */
  5. import {
  6. ElMessage
  7. } from 'element-plus';
  8. //组件异步加载
  9. import {
  10. defineAsyncComponent,
  11. markRaw,
  12. computed,
  13. provide,
  14. ref
  15. } from 'vue';
  16. import {
  17. Store
  18. } from '@/store/index'
  19. store = Store()
  20. import {
  21. useWidgetStore,
  22. Widget
  23. } from "@/common/store/widget"
  24. import map3d from './components/map.vue';
  25. import JtWidget from "./widget.vue"
  26. const widgetStore = useWidgetStore()
  27. // widgetStore.state.widgets = store.aa;
  28. // widgetStore.state.widgets = [{
  29. // component: markRaw(defineAsyncComponent(() => import("@/views/map3d/components/layer.vue"))),
  30. // name: "layer",
  31. // autoDisable: true,
  32. // group: "manage",
  33. // } ];
  34. const widgets = computed(() => widgetStore.state.widgets);
  35. const openAtStart = computed(() => widgetStore.state.openAtStart);
  36. let jtMap3dInstance = null;
  37. let isJTMap3DOnload = ref(false);
  38. const jtMap3DOnload = (map) => {
  39. console.log("map构造完成", map)
  40. jtMap3dInstance = map;
  41. isJTMap3DOnload.value = true
  42. }
  43. provide("getMapInstance", () => {
  44. return jtMap3dInstance;
  45. });
  46. </script>
  47. <template>
  48. <div class="jt-map3dMain">
  49. <!-- 地图组件 -->
  50. <map3d @onload="jtMap3DOnload" ref="refMap3d" />
  51. <!-- 地图加载完成后,在加载其他组件 -->
  52. <template v-if="isJTMap3DOnload">
  53. <template v-for="comp in widgets" :key="comp.key">
  54. <jt-widget v-if="openAtStart.includes(comp.name) && comp.visible" v-model:visible="comp.visible" :widget="comp" />
  55. </template>
  56. </template>
  57. </div>
  58. </template>
  59. <script>
  60. import useLifecycle from "@/common/uses/use-lifecycle"
  61. import * as mapWork from "./map"
  62. let store = undefined
  63. // 启用map.ts生命周期
  64. useLifecycle(mapWork)
  65. export default {
  66. name: "JtMap3DMain",
  67. /**
  68. * 数据
  69. */
  70. data() {
  71. return {
  72. }
  73. },
  74. /**
  75. * 方法
  76. */
  77. methods: {
  78. init() {
  79. //默认加载图层控制
  80. mapWork.getLayers().then(layers => {
  81. layers.map((item) => {
  82. if (item.isinit === '1') {
  83. //图层ID
  84. let serviceId = "service_" + item.layercode + item.layerorder;
  85. item.serviceId = serviceId;
  86. //透明度
  87. let opacity = 1;
  88. if (item.opacity == null) {
  89. opacity = 1;
  90. } else {
  91. opacity = Number(item.opacity);
  92. }
  93. item.opacity = opacity;
  94. //默认加载
  95. mapWork.setLayersControl(window.viewer, item, true).then(res => {
  96. if (res === true) {
  97. } else {
  98. ElMessage(res)
  99. }
  100. });
  101. }
  102. //默认展开
  103. if (item.isexpand === '1') {
  104. store.expandedKeys.push(item.id);
  105. }
  106. // 复选框默认选中
  107. if (item.isinit === '1') {
  108. store.checkedkeys.push(item.id);
  109. }
  110. })
  111. });
  112. // 默认加载底图切换
  113. mapWork.getBaseMaps().then(baseMaps => {
  114. baseMaps.map((item) => {
  115. //图层ID
  116. let serviceId = "service_" + item.layercode + item.layerorder;
  117. item.serviceId = serviceId;
  118. //透明度
  119. let opacity = 1;
  120. if (item.opacity == null) {
  121. opacity = 1;
  122. } else {
  123. opacity = Number(item.opacity);
  124. }
  125. item.opacity = opacity;
  126. if (item.layertype === '地形') {
  127. store.terrain.terrainData = item;
  128. if (item.isinit === '1') {
  129. store.terrain.isTerrain = true;
  130. //默认加载的地形
  131. mapWork.setLayersControl(window.viewer, item, true).then(res => {
  132. if (res === true) {
  133. } else {
  134. ElMessage(res)
  135. }
  136. });
  137. }
  138. } else if (item.layertype === '标注') {
  139. store.mark.markData = item;
  140. if (item.isinit === '1') {
  141. store.mark.isMark = true;
  142. //默认加载的标注
  143. mapWork.setLayersControl(window.viewer, item, true).then(res => {
  144. if (res === true) {
  145. } else {
  146. ElMessage(res)
  147. }
  148. });
  149. }
  150. } else {
  151. if (item.isinit === '1') {
  152. store.basemap.selectBaseMap = item;
  153. store.basemap.selectImg = item.layerorder;
  154. //默认加载的底图
  155. mapWork.setLayersControl(window.viewer, item, true).then(res => {
  156. if (res === true) {
  157. } else {
  158. ElMessage(res)
  159. }
  160. });
  161. }
  162. }
  163. })
  164. });
  165. }
  166. },
  167. mounted() {
  168. this.init();
  169. }
  170. };
  171. </script>
  172. <style lang="scss" scoped>
  173. </style>