map.ts 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. import { PointType } from '@/api/globalMap/type';
  2. import { listMenu } from '@/api/system/menu';
  3. export const useMapStore = defineStore('map', () => {
  4. const mapState = reactive({
  5. center: [110.925175, 21.978955],
  6. zoom: 8.5,
  7. minZoom: 6,
  8. maxZoom: 16,
  9. isThreeDimensional: false,
  10. // 是否显示比例尺
  11. showScale: true
  12. });
  13. // 地图左侧菜单
  14. const menuData = ref([]);
  15. // 右侧菜单
  16. const menuState = ref({
  17. showMenu: false,
  18. activeIndex: 0,
  19. menuData: []
  20. });
  21. // 地图加载是否完成
  22. const mapLoaded = ref(false);
  23. // 当前地图类型
  24. const activeMap = ref<string>('');
  25. // 是否显示边界遮罩
  26. const showMask = ref<boolean>(true);
  27. // 高德地图类型
  28. const AMapType: string[] = ['vectorgraph', 'satellite'];
  29. // 粤政图地图类型
  30. const YMapType: string[] = ['satellite2', 'satellite3', 'imageMap', 'imageMap2'];
  31. // 是否是高德地图
  32. const isAMap = computed(() => AMapType.includes(activeMap.value));
  33. // 选中的菜单
  34. const pointType = ref<PointType[]>([]);
  35. // 轨迹
  36. const trackState = reactive({
  37. show: false,
  38. data: []
  39. });
  40. // 是否在选点
  41. const isMapSelect = ref(false);
  42. // 视频打点参数
  43. const pointParams = ref({
  44. // 选择条件
  45. dict_value: [],
  46. option: ''
  47. });
  48. // 是否需要触发点击菜单
  49. const updateMenu = ref({});
  50. // 需要更新灾害点坐标
  51. const updateAddress = ref([]);
  52. // 设置地图加载完成状态
  53. const setMapLoaded = (loaded: boolean) => {
  54. mapLoaded.value = loaded;
  55. };
  56. // 设置zoom
  57. const setZoom = (zoom: number) => {
  58. mapState.zoom = zoom;
  59. };
  60. // 设置地图类
  61. const setActiveMap = (newMapKey: string) => {
  62. activeMap.value = newMapKey;
  63. };
  64. // 修改显示遮罩边界
  65. const setShowMask = (show: boolean) => {
  66. showMask.value = show;
  67. };
  68. // 修改轨迹数据
  69. const setTrackState = (data: any) => {
  70. trackState.data = data;
  71. trackState.show = true;
  72. };
  73. // 修改选点状态
  74. const setIsMapSelect = (flag: boolean) => {
  75. isMapSelect.value = flag;
  76. };
  77. // 更多视频界面、设置视频打点标识
  78. const setPointParams = (dictValue: string) => {
  79. const data = menuData.value;
  80. let shouldBreak = false;
  81. for (let i = 0; i < data.length; i++) {
  82. if (data[i].children && data[i].children.length > 0) {
  83. const data2 = data[i].children;
  84. for (let k = 0; k < data2.length; k++) {
  85. if (data2[k].name === '图像资源') {
  86. shouldBreak = true;
  87. if (data2[k].children && data2[k].children.length > 0) {
  88. const data3 = data2[k].children;
  89. let selectItem = {};
  90. for (let z = 0; z < data3.length; z++) {
  91. if (dictValue === data3[z].component) {
  92. data3[z].checked = true;
  93. selectItem = data3[z];
  94. }
  95. // else {
  96. // data3[z].checked = false;
  97. // }
  98. }
  99. updateMenu.value = selectItem;
  100. let selecData = [];
  101. menuState.value.menuData.forEach((item) => {
  102. if (!item.isVideo || (item.isVideo && selectItem.component !== item.component)) {
  103. selecData.push(item);
  104. }
  105. });
  106. selecData.push(selectItem);
  107. menuState.value.menuData = selecData;
  108. menuState.value.activeIndex = selecData.length - 1;
  109. menuState.value.showMenu = true;
  110. pointParams.value.dict_value = [dictValue];
  111. if (shouldBreak) {
  112. break;
  113. }
  114. }
  115. }
  116. }
  117. if (shouldBreak) {
  118. break;
  119. }
  120. }
  121. }
  122. };
  123. const setUpdateMenu = (obj: object) => {
  124. updateMenu.value = obj;
  125. };
  126. // 打点option变化
  127. const setPointOption = () => {
  128. const path = [];
  129. const path2 = [];
  130. pointType.value.forEach((item: any) => {
  131. if (item.isVideo) {
  132. path2.push(item.component);
  133. } else {
  134. path.push(item.component);
  135. }
  136. });
  137. pointParams.value.option = path.toString();
  138. //合并到视频类别里
  139. pointParams.value.dict_value = path2;
  140. };
  141. // 初始化左侧菜单数据
  142. const initMenuData = () => {
  143. listMenu().then((res: any) => {
  144. const data = res.data ? res.data[0]?.children : [];
  145. data.forEach((item: any) => {
  146. item.show = true;
  147. item.name = item.meta?.title;
  148. item.children?.forEach((item2) => {
  149. item2.show = true;
  150. item2.name = item2.meta?.title;
  151. item2.children?.forEach((item3) => {
  152. item3.name = item3.meta?.title;
  153. if (item3.component === '2' && !!item3.path) {
  154. item3.checked = false;
  155. }
  156. });
  157. });
  158. });
  159. menuData.value = data;
  160. });
  161. };
  162. // 取消勾选左侧所有菜单
  163. const handleCancelAllChecked = () => {
  164. const data = menuData.value;
  165. data.forEach((topLevelItem) => {
  166. if (topLevelItem.children && topLevelItem.children.length > 0) {
  167. topLevelItem.children.forEach((secondLevelItem) => {
  168. if (secondLevelItem.children && secondLevelItem.children.length > 0) {
  169. secondLevelItem.children.forEach((thirdLevelItem) => {
  170. thirdLevelItem.checked = false;
  171. });
  172. }
  173. });
  174. }
  175. });
  176. menuState.value = {
  177. showMenu: false,
  178. activeIndex: 0,
  179. menuData: []
  180. };
  181. pointType.value = [];
  182. setPointOption();
  183. };
  184. const setUpdateAddress = (data) => {
  185. updateAddress.value = data;
  186. };
  187. // 跳转界面时 初始化所有数据
  188. const initData = () => {
  189. mapState.center = [110.925175, 21.978955];
  190. activeMap.value = 'satellite';
  191. showMask.value = true;
  192. trackState.show = false;
  193. trackState.data = [];
  194. isMapSelect.value = false;
  195. pointParams.value = {
  196. dict_value: [],
  197. option: ''
  198. };
  199. pointType.value = [];
  200. menuState.value = {
  201. showMenu: false,
  202. activeIndex: 0,
  203. menuData: []
  204. };
  205. updateMenu.value = [];
  206. initMenuData();
  207. };
  208. return {
  209. mapState,
  210. menuData,
  211. menuState,
  212. mapLoaded,
  213. activeMap,
  214. isAMap,
  215. updateMenu,
  216. updateAddress,
  217. showMask,
  218. AMapType,
  219. YMapType,
  220. pointType,
  221. trackState,
  222. isMapSelect,
  223. pointParams,
  224. setMapLoaded,
  225. setZoom,
  226. setActiveMap,
  227. setShowMask,
  228. setTrackState,
  229. setIsMapSelect,
  230. initData,
  231. setUpdateMenu,
  232. setPointParams,
  233. setPointOption,
  234. handleCancelAllChecked,
  235. setUpdateAddress
  236. };
  237. });
  238. export default useMapStore;