vue-openlayers-plugin 1.0.72 → 1.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/lib/{index-034c9e0d.mjs → index-e0d64ecc.mjs} +856 -387
  2. package/lib/{index.es-6551e4c0.mjs → index.es-4f33fe12.mjs} +1 -1
  3. package/lib/index.esm.js +1 -1
  4. package/lib/index.umd.js +856 -386
  5. package/lib/style.css +114 -0
  6. package/package.json +1 -1
  7. package/types/src/components/CustomOpenlayer/components/OlBaseLayerSwitcher.vue.d.ts +19 -0
  8. package/types/src/components/CustomOpenlayer/components/OlBaseLayerSwitcher.vue.d.ts.map +1 -0
  9. package/types/src/components/CustomOpenlayer/components/dialogs/LayerPanel.vue.d.ts +46 -164
  10. package/types/src/components/CustomOpenlayer/components/dialogs/LayerPanel.vue.d.ts.map +1 -1
  11. package/types/src/components/CustomOpenlayer/types/index.d.ts +24 -3
  12. package/types/src/components/CustomOpenlayer/types/index.d.ts.map +1 -1
  13. package/types/src/components/CustomOpenlayer/utils/LayerManager.d.ts.map +1 -1
  14. package/types/src/components/CustomOpenlayer/utils/LayerTreeManager.d.ts.map +1 -1
  15. package/types/src/components/CustomOpenlayer/utils/coordinateTransform.d.ts +28 -0
  16. package/types/src/components/CustomOpenlayer/utils/coordinateTransform.d.ts.map +1 -0
  17. package/types/src/components/CustomOpenlayer/utils/index.d.ts +1 -0
  18. package/types/src/components/CustomOpenlayer/utils/index.d.ts.map +1 -1
  19. package/types/src/components/CustomOpenlayer/utils/layerManager.d.ts +13 -0
  20. package/types/src/components/CustomOpenlayer/utils/layers/BaseLayer.d.ts +5 -0
  21. package/types/src/components/CustomOpenlayer/utils/layers/BaseLayer.d.ts.map +1 -1
  22. package/types/src/components/CustomOpenlayer/utils/layers/GMLLayerHandler.d.ts.map +1 -1
  23. package/types/src/components/CustomOpenlayer/utils/layers/GeoJSONLayerHandler.d.ts.map +1 -1
  24. package/types/src/components/CustomOpenlayer/utils/layers/KMLLayerHandler.d.ts.map +1 -1
  25. package/types/src/components/CustomOpenlayer/utils/layers/TiandituLayerHandler.d.ts.map +1 -1
  26. package/types/src/components/CustomOpenlayer/utils/layers/TileLayerHandler.d.ts.map +1 -1
  27. package/types/src/components/CustomOpenlayer/utils/layers/VectorTileLayerHandler.d.ts.map +1 -1
  28. package/types/src/components/CustomOpenlayer/utils/layers/WKTLayerHandler.d.ts.map +1 -1
  29. package/types/src/components/CustomOpenlayer/utils/layers/WMSLayerHandler.d.ts.map +1 -1
  30. package/types/src/components/CustomOpenlayer/utils/layers/WMTSLayerHandler.d.ts.map +1 -1
  31. package/types/src/components/CustomOpenlayer/utils/mapManager.d.ts.map +1 -1
  32. package/types/tsconfig.tsbuildinfo +1 -1
package/lib/index.umd.js CHANGED
@@ -1557,7 +1557,7 @@ var __publicField = (obj, key, value) => {
1557
1557
  name: "ElIcon",
1558
1558
  inheritAttrs: false
1559
1559
  });
1560
- const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
1560
+ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
1561
1561
  ...__default__$5,
1562
1562
  props: iconProps,
1563
1563
  setup(__props) {
@@ -1582,7 +1582,7 @@ var __publicField = (obj, key, value) => {
1582
1582
  };
1583
1583
  }
1584
1584
  });
1585
- var Icon$4 = /* @__PURE__ */ _export_sfc$1(_sfc_main$y, [["__file", "icon.vue"]]);
1585
+ var Icon$4 = /* @__PURE__ */ _export_sfc$1(_sfc_main$z, [["__file", "icon.vue"]]);
1586
1586
  const ElIcon = withInstall(Icon$4);
1587
1587
  /*! Element Plus Icons Vue v2.3.2 */
1588
1588
  var _sfc_main2 = /* @__PURE__ */ vue.defineComponent({
@@ -2814,7 +2814,7 @@ var __publicField = (obj, key, value) => {
2814
2814
  name: COMPONENT_NAME,
2815
2815
  inheritAttrs: false
2816
2816
  });
2817
- const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
2817
+ const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
2818
2818
  ...__default__$4,
2819
2819
  props: inputProps,
2820
2820
  emits: inputEmits,
@@ -3225,7 +3225,7 @@ var __publicField = (obj, key, value) => {
3225
3225
  };
3226
3226
  }
3227
3227
  });
3228
- var Input = /* @__PURE__ */ _export_sfc$1(_sfc_main$x, [["__file", "input.vue"]]);
3228
+ var Input = /* @__PURE__ */ _export_sfc$1(_sfc_main$y, [["__file", "input.vue"]]);
3229
3229
  const ElInput = withInstall(Input);
3230
3230
  const FOCUS_AFTER_TRAPPED = "focus-trap.focus-after-trapped";
3231
3231
  const FOCUS_AFTER_RELEASED = "focus-trap.focus-after-released";
@@ -3420,7 +3420,7 @@ var __publicField = (obj, key, value) => {
3420
3420
  }
3421
3421
  });
3422
3422
  };
3423
- const _sfc_main$w = vue.defineComponent({
3423
+ const _sfc_main$x = vue.defineComponent({
3424
3424
  name: "ElFocusTrap",
3425
3425
  inheritAttrs: false,
3426
3426
  props: {
@@ -3665,7 +3665,7 @@ var __publicField = (obj, key, value) => {
3665
3665
  function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
3666
3666
  return vue.renderSlot(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown });
3667
3667
  }
3668
- var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$w, [["render", _sfc_render$1], ["__file", "focus-trap.vue"]]);
3668
+ var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$x, [["render", _sfc_render$1], ["__file", "focus-trap.vue"]]);
3669
3669
  const badgeProps = buildProps({
3670
3670
  value: {
3671
3671
  type: [String, Number],
@@ -3701,7 +3701,7 @@ var __publicField = (obj, key, value) => {
3701
3701
  const __default__$3 = vue.defineComponent({
3702
3702
  name: "ElBadge"
3703
3703
  });
3704
- const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
3704
+ const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
3705
3705
  ...__default__$3,
3706
3706
  props: badgeProps,
3707
3707
  setup(__props, { expose }) {
@@ -3763,7 +3763,7 @@ var __publicField = (obj, key, value) => {
3763
3763
  };
3764
3764
  }
3765
3765
  });
3766
- var Badge = /* @__PURE__ */ _export_sfc$1(_sfc_main$v, [["__file", "badge.vue"]]);
3766
+ var Badge = /* @__PURE__ */ _export_sfc$1(_sfc_main$w, [["__file", "badge.vue"]]);
3767
3767
  const ElBadge = withInstall(Badge);
3768
3768
  const buttonGroupContextKey = Symbol("buttonGroupContextKey");
3769
3769
  const useDeprecated = ({ from, replacement: replacement2, scope, version: version2, ref, type = "API" }, condition) => {
@@ -4858,7 +4858,7 @@ var __publicField = (obj, key, value) => {
4858
4858
  const __default__$2 = vue.defineComponent({
4859
4859
  name: "ElButton"
4860
4860
  });
4861
- const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
4861
+ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
4862
4862
  ...__default__$2,
4863
4863
  props: buttonProps,
4864
4864
  emits: buttonEmits,
@@ -4936,7 +4936,7 @@ var __publicField = (obj, key, value) => {
4936
4936
  };
4937
4937
  }
4938
4938
  });
4939
- var Button$2 = /* @__PURE__ */ _export_sfc$1(_sfc_main$u, [["__file", "button.vue"]]);
4939
+ var Button$2 = /* @__PURE__ */ _export_sfc$1(_sfc_main$v, [["__file", "button.vue"]]);
4940
4940
  const buttonGroupProps = {
4941
4941
  size: buttonProps.size,
4942
4942
  type: buttonProps.type
@@ -4944,7 +4944,7 @@ var __publicField = (obj, key, value) => {
4944
4944
  const __default__$1 = vue.defineComponent({
4945
4945
  name: "ElButtonGroup"
4946
4946
  });
4947
- const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
4947
+ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
4948
4948
  ...__default__$1,
4949
4949
  props: buttonGroupProps,
4950
4950
  setup(__props) {
@@ -4963,7 +4963,7 @@ var __publicField = (obj, key, value) => {
4963
4963
  };
4964
4964
  }
4965
4965
  });
4966
- var ButtonGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["__file", "button-group.vue"]]);
4966
+ var ButtonGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$u, [["__file", "button-group.vue"]]);
4967
4967
  const ElButton = withInstall(Button$2, {
4968
4968
  ButtonGroup
4969
4969
  });
@@ -5410,7 +5410,7 @@ var __publicField = (obj, key, value) => {
5410
5410
  const __default__ = vue.defineComponent({
5411
5411
  name: "ElMessage"
5412
5412
  });
5413
- const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
5413
+ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
5414
5414
  ...__default__,
5415
5415
  props: messageProps,
5416
5416
  emits: messageEmits,
@@ -5564,7 +5564,7 @@ var __publicField = (obj, key, value) => {
5564
5564
  };
5565
5565
  }
5566
5566
  });
5567
- var MessageConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$s, [["__file", "message.vue"]]);
5567
+ var MessageConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["__file", "message.vue"]]);
5568
5568
  let seed = 1;
5569
5569
  const normalizeAppendTo = (normalized) => {
5570
5570
  const appendTo = normalized.appendTo;
@@ -5759,7 +5759,7 @@ var __publicField = (obj, key, value) => {
5759
5759
  }
5760
5760
  }
5761
5761
  };
5762
- const _sfc_main$r = vue.defineComponent({
5762
+ const _sfc_main$s = vue.defineComponent({
5763
5763
  name: "ElMessageBox",
5764
5764
  directives: {
5765
5765
  TrapFocus
@@ -6231,7 +6231,7 @@ var __publicField = (obj, key, value) => {
6231
6231
  _: 3
6232
6232
  }, 8, ["onAfterLeave"]);
6233
6233
  }
6234
- var MessageBoxConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$r, [["render", _sfc_render], ["__file", "index.vue"]]);
6234
+ var MessageBoxConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$s, [["render", _sfc_render], ["__file", "index.vue"]]);
6235
6235
  const messageInstance = /* @__PURE__ */ new Map();
6236
6236
  const getAppendToElement = (props) => {
6237
6237
  let appendTo = document.body;
@@ -81994,6 +81994,24 @@ ${this.attributes_.map(
81994
81994
  this.config.opacity = this.config.opacity / 100;
81995
81995
  }
81996
81996
  }
81997
+ /**
81998
+ * 注册自定义投影
81999
+ * @returns 注册的投影代码,如果没有注册则返回 undefined
82000
+ */
82001
+ registerCustomProjection() {
82002
+ const projectionCode = this.config.projection;
82003
+ const projectionDefinition = this.config.projectionDefinition;
82004
+ if (projectionCode && projectionDefinition) {
82005
+ try {
82006
+ proj4$1.defs(projectionCode, projectionDefinition);
82007
+ register$3(proj4$1);
82008
+ return projectionCode;
82009
+ } catch (error2) {
82010
+ console.error(`Failed to register projection ${projectionCode}:`, error2);
82011
+ }
82012
+ }
82013
+ return void 0;
82014
+ }
81997
82015
  /**
81998
82016
  * 获取图层实例(同步方法,用于向后兼容)
81999
82017
  */
@@ -82451,6 +82469,7 @@ ${this.attributes_.map(
82451
82469
  * 创建瓦片数据源
82452
82470
  */
82453
82471
  createTileSource() {
82472
+ this.registerCustomProjection();
82454
82473
  let sourceType = this.getSourceTypeFromLayerType();
82455
82474
  sourceType = sourceType || "xyz";
82456
82475
  switch (sourceType.toLowerCase()) {
@@ -82569,7 +82588,8 @@ ${this.attributes_.map(
82569
82588
  * 创建WMS数据源
82570
82589
  */
82571
82590
  createWMSSource() {
82572
- return new ImageWMS$1({
82591
+ this.registerCustomProjection();
82592
+ const options = {
82573
82593
  url: this.config.url,
82574
82594
  params: {
82575
82595
  "LAYERS": this.config.wmsLayers || "",
@@ -82579,7 +82599,11 @@ ${this.attributes_.map(
82579
82599
  },
82580
82600
  ratio: 1,
82581
82601
  crossOrigin: "anonymous"
82582
- });
82602
+ };
82603
+ if (this.config.projection) {
82604
+ options.projection = this.config.projection;
82605
+ }
82606
+ return new ImageWMS$1(options);
82583
82607
  }
82584
82608
  /**
82585
82609
  * 更新WMS参数
@@ -82864,13 +82888,17 @@ ${this.attributes_.map(
82864
82888
  * 创建WMTS数据源
82865
82889
  */
82866
82890
  createWMTSSource() {
82867
- if (this.config.url && !this.capabilities) {
82868
- throw new Error("WMTS capabilities must be loaded first. Use loadCapabilities() method.");
82891
+ const wmtsConfig = this.config.wmtsConfig || {};
82892
+ const url = wmtsConfig.url || this.config.url;
82893
+ if (!url) {
82894
+ throw new Error("WMTS URL is required");
82869
82895
  }
82896
+ if (this.config.url && !this.capabilities && !wmtsConfig.resolutions)
82897
+ ;
82870
82898
  if (this.capabilities) {
82871
82899
  const options = optionsFromCapabilities(this.capabilities, {
82872
- layer: this.config.wmtsLayer || "",
82873
- matrixSet: this.config.wmtsMatrixSet || "EPSG:4326"
82900
+ layer: wmtsConfig.layer || this.config.layerName || "",
82901
+ matrixSet: wmtsConfig.matrixSet || this.config.matrixSet || "EPSG:4326"
82874
82902
  });
82875
82903
  if (!options) {
82876
82904
  throw new Error("Failed to create WMTS options from capabilities");
@@ -82886,26 +82914,46 @@ ${this.attributes_.map(
82886
82914
  crossOrigin: "anonymous"
82887
82915
  });
82888
82916
  } else {
82889
- const projection2 = get$c("EPSG:4326");
82890
- const projectionExtent = projection2.getExtent();
82891
- const size2 = Math.sqrt(projectionExtent[2] - projectionExtent[0]) / 256;
82892
- const resolutions = new Array(19);
82893
- const matrixIds = new Array(19);
82894
- for (let z2 = 0; z2 < 19; ++z2) {
82895
- resolutions[z2] = size2 / Math.pow(2, z2);
82896
- matrixIds[z2] = z2;
82917
+ const projectionCode = wmtsConfig.projection || this.config.projection || "EPSG:4326";
82918
+ const projectionDefinition = wmtsConfig.projectionDefinition || this.config.projectionDefinition;
82919
+ if (projectionDefinition) {
82920
+ proj4$1.defs(projectionCode, projectionDefinition);
82921
+ register$3(proj4$1);
82897
82922
  }
82923
+ const projection2 = get$c(projectionCode);
82924
+ const projectionExtent = projection2.getExtent();
82925
+ let resolutions = wmtsConfig.resolutions || this.config.resolutions;
82926
+ let matrixIds = wmtsConfig.matrixIds || this.config.matrixIds;
82927
+ const tileSize = wmtsConfig.tileSize || 256;
82928
+ const tileSizeNumber = typeof tileSize === "number" ? tileSize : tileSize[0];
82929
+ if (!resolutions) {
82930
+ const width = projectionExtent[2] - projectionExtent[0];
82931
+ const size2 = width / tileSizeNumber;
82932
+ const zoomLevels = 19;
82933
+ resolutions = new Array(zoomLevels);
82934
+ for (let z2 = 0; z2 < zoomLevels; ++z2) {
82935
+ resolutions[z2] = size2 / Math.pow(2, z2);
82936
+ }
82937
+ }
82938
+ if (!matrixIds) {
82939
+ matrixIds = new Array(resolutions.length);
82940
+ for (let z2 = 0; z2 < resolutions.length; ++z2) {
82941
+ matrixIds[z2] = z2.toString();
82942
+ }
82943
+ }
82944
+ const origin = wmtsConfig.origin || this.config.origin || [projectionExtent[0], projectionExtent[3]];
82898
82945
  return new WMTS$3({
82899
- url: this.config.url,
82900
- layer: this.config.wmtsLayer || "",
82901
- matrixSet: this.config.wmtsMatrixSet || "EPSG:4326",
82902
- format: "image/png",
82903
- projection: "EPSG:4326",
82904
- style: this.config.wmtsStyle || "default",
82946
+ url,
82947
+ layer: wmtsConfig.layer || this.config.layerName || "",
82948
+ matrixSet: wmtsConfig.matrixSet || this.config.matrixSet || projectionCode,
82949
+ format: wmtsConfig.format || this.config.format || "image/png",
82950
+ projection: projectionCode,
82951
+ style: wmtsConfig.style || this.config.style || "default",
82905
82952
  tileGrid: new WMTSTileGrid$3({
82906
- origin: [projectionExtent[0], projectionExtent[3]],
82953
+ origin,
82907
82954
  resolutions,
82908
- matrixIds
82955
+ matrixIds,
82956
+ tileSize
82909
82957
  }),
82910
82958
  crossOrigin: "anonymous"
82911
82959
  });
@@ -82949,21 +82997,21 @@ ${this.attributes_.map(
82949
82997
  * 设置图层
82950
82998
  */
82951
82999
  setLayer(layer2) {
82952
- this.config.wmtsLayer = layer2;
83000
+ this.config.layerName = layer2;
82953
83001
  this.layer = null;
82954
83002
  }
82955
83003
  /**
82956
83004
  * 设置矩阵集
82957
83005
  */
82958
83006
  setMatrixSet(matrixSet) {
82959
- this.config.wmtsMatrixSet = matrixSet;
83007
+ this.config.matrixSet = matrixSet;
82960
83008
  this.layer = null;
82961
83009
  }
82962
83010
  /**
82963
83011
  * 设置样式
82964
83012
  */
82965
83013
  setWMTSStyle(style) {
82966
- this.config.wmtsStyle = style;
83014
+ this.config.style = style;
82967
83015
  this.layer = null;
82968
83016
  }
82969
83017
  /**
@@ -83768,10 +83816,13 @@ ${this.attributes_.map(
83768
83816
  */
83769
83817
  createVectorSource() {
83770
83818
  var _a3;
83819
+ this.registerCustomProjection();
83771
83820
  const format2 = new GeoJSON$4();
83772
83821
  const mapProjection = ((_a3 = this.map) == null ? void 0 : _a3.getView().getProjection().getCode()) || "EPSG:4326";
83822
+ const dataProjection = this.config.projection || "EPSG:4326";
83773
83823
  if (this.config.data) {
83774
83824
  const features2 = format2.readFeatures(this.config.data, {
83825
+ dataProjection,
83775
83826
  featureProjection: mapProjection
83776
83827
  });
83777
83828
  this.originalFeatures = features2;
@@ -83779,7 +83830,10 @@ ${this.attributes_.map(
83779
83830
  } else if (this.config.url) {
83780
83831
  const source = new VectorSource$2({
83781
83832
  url: this.config.url,
83782
- format: new GeoJSON$4({ featureProjection: mapProjection })
83833
+ format: new GeoJSON$4({
83834
+ dataProjection,
83835
+ featureProjection: mapProjection
83836
+ })
83783
83837
  });
83784
83838
  source.on("featuresloadend", () => {
83785
83839
  this.originalFeatures = source.getFeatures();
@@ -84172,6 +84226,7 @@ ${this.attributes_.map(
84172
84226
  * 应用过滤器(实现基类的抽象方法)
84173
84227
  */
84174
84228
  applyFilters() {
84229
+ debugger;
84175
84230
  const layer2 = this.getLayer();
84176
84231
  const source = layer2.getSource();
84177
84232
  if (!source)
@@ -84418,6 +84473,7 @@ ${this.attributes_.map(
84418
84473
  * 创建图层
84419
84474
  */
84420
84475
  createLayer() {
84476
+ this.registerCustomProjection();
84421
84477
  this.vectorSource = new VectorSource$2({
84422
84478
  url: this.config.url,
84423
84479
  format: this.kmlFormat
@@ -84693,9 +84749,10 @@ ${this.attributes_.map(
84693
84749
  * 初始化GML格式处理器
84694
84750
  */
84695
84751
  initializeGMLFormat() {
84752
+ this.registerCustomProjection();
84696
84753
  const gmlConfig = this.config.gmlConfig || {};
84697
84754
  this.gmlFormat = new GML$1({
84698
- srsName: gmlConfig.srsName || "EPSG:4326"
84755
+ srsName: gmlConfig.srsName || this.config.projection || "EPSG:4326"
84699
84756
  });
84700
84757
  }
84701
84758
  /**
@@ -85071,13 +85128,20 @@ ${this.attributes_.map(
85071
85128
  * 从WKT字符串加载数据
85072
85129
  */
85073
85130
  loadWKTFromString(wktString) {
85131
+ var _a3;
85074
85132
  if (!this.wktFormat || !this.vectorSource)
85075
85133
  return;
85134
+ this.registerCustomProjection();
85135
+ const dataProjection = this.config.projection || "EPSG:4326";
85136
+ const featureProjection = ((_a3 = this.map) == null ? void 0 : _a3.getView().getProjection().getCode()) || "EPSG:4326";
85076
85137
  try {
85077
85138
  const wktLines = wktString.split("\n").filter((line2) => line2.trim());
85078
85139
  wktLines.forEach((line2, index2) => {
85079
85140
  try {
85080
- const geometry2 = this.wktFormat.readGeometry(line2.trim());
85141
+ const geometry2 = this.wktFormat.readGeometry(line2.trim(), {
85142
+ dataProjection,
85143
+ featureProjection
85144
+ });
85081
85145
  const feature2 = new ol$1.Feature({
85082
85146
  geometry: geometry2,
85083
85147
  id: `wkt_feature_${index2}`,
@@ -85163,10 +85227,16 @@ ${this.attributes_.map(
85163
85227
  * 添加WKT几何
85164
85228
  */
85165
85229
  addWKTGeometry(wktString, properties) {
85230
+ var _a3;
85166
85231
  if (!this.wktFormat || !this.vectorSource)
85167
85232
  return null;
85233
+ const dataProjection = this.config.projection || "EPSG:4326";
85234
+ const featureProjection = ((_a3 = this.map) == null ? void 0 : _a3.getView().getProjection().getCode()) || "EPSG:4326";
85168
85235
  try {
85169
- const geometry2 = this.wktFormat.readGeometry(wktString);
85236
+ const geometry2 = this.wktFormat.readGeometry(wktString, {
85237
+ dataProjection,
85238
+ featureProjection
85239
+ });
85170
85240
  const feature2 = new ol$1.Feature({
85171
85241
  geometry: geometry2,
85172
85242
  wkt: wktString,
@@ -466232,6 +466302,7 @@ ${this.attributes_.map(
466232
466302
  * 创建天地图XYZ数据源
466233
466303
  */
466234
466304
  createTiandituSource() {
466305
+ this.registerCustomProjection();
466235
466306
  const url = this.processUrl(this.config.url || "");
466236
466307
  const xyzOptions = {
466237
466308
  url,
@@ -466628,6 +466699,7 @@ ${this.attributes_.map(
466628
466699
  * 创建矢量瓦片数据源
466629
466700
  */
466630
466701
  createVectorTileSource() {
466702
+ this.registerCustomProjection();
466631
466703
  const config = this.config;
466632
466704
  const format2 = this.createFormat();
466633
466705
  const sourceOptions = {
@@ -466676,7 +466748,7 @@ ${this.attributes_.map(
466676
466748
  });
466677
466749
  case "geojson":
466678
466750
  return new GeoJSON$4({
466679
- dataProjection: config.dataProjection || "EPSG:4326",
466751
+ dataProjection: config.dataProjection || config.projection || "EPSG:4326",
466680
466752
  featureProjection: config.featureProjection || "EPSG:4326"
466681
466753
  });
466682
466754
  default:
@@ -467148,6 +467220,8 @@ ${this.attributes_.map(
467148
467220
  __publicField(this, "storage");
467149
467221
  // 存储baseLayers配置,用于判断图层是否为底图
467150
467222
  __publicField(this, "baseLayerIds", /* @__PURE__ */ new Set());
467223
+ // 存储共享图层组信息
467224
+ __publicField(this, "sharedLayerGroups", /* @__PURE__ */ new Map());
467151
467225
  this.map = map2;
467152
467226
  this.eventBus = eventBus;
467153
467227
  this.storage = storage2;
@@ -467157,6 +467231,7 @@ ${this.attributes_.map(
467157
467231
  * 添加图层(支持按需加载)
467158
467232
  */
467159
467233
  async addLayer(config) {
467234
+ var _a3, _b3;
467160
467235
  try {
467161
467236
  const layerId = config.id || `layer_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
467162
467237
  if (this.layerHandlers.has(layerId) || this.pendingLayerConfigs.has(layerId)) {
@@ -467171,7 +467246,11 @@ ${this.attributes_.map(
467171
467246
  opacity: config.opacity ?? 1,
467172
467247
  zIndex: config.zIndex ?? 0
467173
467248
  };
467174
- if (fullConfig.type === "group" && (fullConfig.children || fullConfig.layers)) {
467249
+ const isGroup = fullConfig.type === "group" || (((_a3 = fullConfig.children) == null ? void 0 : _a3.length) ?? 0) > 0 || (((_b3 = fullConfig.layers) == null ? void 0 : _b3.length) ?? 0) > 0;
467250
+ if (isGroup) {
467251
+ if (fullConfig.type !== "group") {
467252
+ fullConfig.type = "group";
467253
+ }
467175
467254
  return this.addLayerGroup(fullConfig);
467176
467255
  }
467177
467256
  if (fullConfig.visible && this.isBasemapLayer(layerId)) {
@@ -467283,6 +467362,174 @@ ${this.attributes_.map(
467283
467362
  console.error("执行定位动画失败:", error2);
467284
467363
  }
467285
467364
  }
467365
+ /**
467366
+ * 设置共享图层样式函数
467367
+ */
467368
+ setupSharedLayerStyle(layer2, reuseId) {
467369
+ if (!(layer2 instanceof VectorLayer$3)) {
467370
+ return;
467371
+ }
467372
+ const originalStyleFunction = layer2.getStyleFunction();
467373
+ layer2.setStyle((function(feature2, resolution) {
467374
+ const group2 = this.sharedLayerGroups.get(reuseId);
467375
+ if (!group2)
467376
+ return null;
467377
+ let matched = false;
467378
+ let styleToUse = null;
467379
+ for (const layerId of group2.logicalLayers) {
467380
+ const config = this.layerConfigs.get(layerId);
467381
+ if (config && config.visible) {
467382
+ try {
467383
+ if (this.checkFeatureFilter(feature2, config.filters)) {
467384
+ matched = true;
467385
+ const handler = this.layerHandlers.get(layerId);
467386
+ if (handler) {
467387
+ const isFirst = group2.logicalLayers.values().next().value === layerId;
467388
+ if (isFirst) {
467389
+ if (originalStyleFunction) {
467390
+ styleToUse = originalStyleFunction(feature2, resolution);
467391
+ }
467392
+ } else {
467393
+ const logicalLayer = handler.getLayer();
467394
+ if (logicalLayer && logicalLayer instanceof VectorLayer$3 && logicalLayer !== layer2) {
467395
+ const styleFunc = logicalLayer.getStyleFunction();
467396
+ if (styleFunc) {
467397
+ styleToUse = styleFunc(feature2, resolution);
467398
+ }
467399
+ } else {
467400
+ if (originalStyleFunction) {
467401
+ styleToUse = originalStyleFunction(feature2, resolution);
467402
+ }
467403
+ }
467404
+ }
467405
+ if (styleToUse || matched) {
467406
+ break;
467407
+ }
467408
+ }
467409
+ }
467410
+ } catch (e3) {
467411
+ console.error("Error checking feature filter:", e3);
467412
+ }
467413
+ }
467414
+ }
467415
+ if (matched) {
467416
+ if (styleToUse)
467417
+ return styleToUse;
467418
+ if (originalStyleFunction)
467419
+ return originalStyleFunction(feature2, resolution);
467420
+ return void 0;
467421
+ }
467422
+ return null;
467423
+ }).bind(this));
467424
+ }
467425
+ /**
467426
+ * 更新共享图层状态(处理WMS参数更新或Vector重绘)
467427
+ */
467428
+ updateSharedLayerState(reuseId) {
467429
+ const group2 = this.sharedLayerGroups.get(reuseId);
467430
+ if (!group2)
467431
+ return;
467432
+ const layer2 = group2.physicalLayer;
467433
+ const source = layer2.getSource();
467434
+ if (source && typeof source.updateParams === "function") {
467435
+ const visibleLayers = Array.from(group2.logicalLayers).filter((id2) => {
467436
+ const config = this.layerConfigs.get(id2);
467437
+ return config && config.visible;
467438
+ });
467439
+ const wmsLayersList = [];
467440
+ const cqlFilterList = [];
467441
+ visibleLayers.forEach((id2) => {
467442
+ var _a3, _b3;
467443
+ const config = this.layerConfigs.get(id2);
467444
+ if (config) {
467445
+ const layers = config.wmsLayers || ((_b3 = (_a3 = config.config) == null ? void 0 : _a3.wms) == null ? void 0 : _b3.layers);
467446
+ if (layers) {
467447
+ wmsLayersList.push(layers);
467448
+ let cql = "";
467449
+ if (config.filters && config.filters.length > 0) {
467450
+ const conditions = config.filters.filter((f2) => f2.enabled && f2.type === FilterType.ATTRIBUTE).map((f2) => {
467451
+ const attrFilter = f2;
467452
+ let val = attrFilter.value;
467453
+ if (typeof val === "string") {
467454
+ val = `'${val}'`;
467455
+ }
467456
+ switch (attrFilter.operator) {
467457
+ case FilterOperator.EQUAL:
467458
+ return `${attrFilter.property}=${val}`;
467459
+ case FilterOperator.NOT_EQUAL:
467460
+ return `${attrFilter.property}<>${val}`;
467461
+ case FilterOperator.GREATER_THAN:
467462
+ return `${attrFilter.property}>${val}`;
467463
+ case FilterOperator.LESS_THAN:
467464
+ return `${attrFilter.property}<${val}`;
467465
+ case FilterOperator.GREATER_EQUAL:
467466
+ return `${attrFilter.property}>=${val}`;
467467
+ case FilterOperator.LESS_EQUAL:
467468
+ return `${attrFilter.property}<=${val}`;
467469
+ case FilterOperator.LIKE:
467470
+ return `${attrFilter.property} LIKE ${val}`;
467471
+ case FilterOperator.IN:
467472
+ if (Array.isArray(attrFilter.value)) {
467473
+ const inVals = attrFilter.value.map((v5) => typeof v5 === "string" ? `'${v5}'` : v5).join(",");
467474
+ return `${attrFilter.property} IN (${inVals})`;
467475
+ }
467476
+ return `${attrFilter.property} IN (${attrFilter.value})`;
467477
+ default:
467478
+ return "";
467479
+ }
467480
+ }).filter((c2) => c2 !== "");
467481
+ if (conditions.length > 0) {
467482
+ cql = conditions.join(" AND ");
467483
+ }
467484
+ }
467485
+ cqlFilterList.push(cql === "" ? "INCLUDE" : cql);
467486
+ }
467487
+ }
467488
+ });
467489
+ if (wmsLayersList.length > 0) {
467490
+ const newLayersParam = wmsLayersList.join(",");
467491
+ const newCqlFilterParam = cqlFilterList.join(";");
467492
+ const params2 = { "LAYERS": newLayersParam };
467493
+ if (cqlFilterList.some((c2) => c2 !== "INCLUDE")) {
467494
+ params2["CQL_FILTER"] = newCqlFilterParam;
467495
+ } else {
467496
+ params2["CQL_FILTER"] = null;
467497
+ }
467498
+ source.updateParams(params2);
467499
+ console.log(`共享WMS图层 ${reuseId} 更新参数: LAYERS=${newLayersParam}, CQL_FILTER=${newCqlFilterParam}`);
467500
+ return;
467501
+ }
467502
+ }
467503
+ layer2.changed();
467504
+ }
467505
+ /**
467506
+ * 检查要素是否匹配过滤条件
467507
+ */
467508
+ checkFeatureFilter(feature2, filters) {
467509
+ if (!filters || filters.length === 0) {
467510
+ return true;
467511
+ }
467512
+ for (const filter2 of filters) {
467513
+ if (!filter2.enabled)
467514
+ continue;
467515
+ if (filter2.type === FilterType.ATTRIBUTE) {
467516
+ const props = feature2.getProperties();
467517
+ const value = props[filter2.property];
467518
+ const targetValue = filter2.value;
467519
+ switch (filter2.operator) {
467520
+ case FilterOperator.EQUAL:
467521
+ if (value != targetValue)
467522
+ return false;
467523
+ break;
467524
+ case FilterOperator.NOT_EQUAL:
467525
+ if (value == targetValue)
467526
+ return false;
467527
+ break;
467528
+ }
467529
+ }
467530
+ }
467531
+ return true;
467532
+ }
467286
467533
  /**
467287
467534
  * 获取缓动函数
467288
467535
  */
@@ -467313,19 +467560,44 @@ ${this.attributes_.map(
467313
467560
  * 异步添加图层
467314
467561
  */
467315
467562
  async addLayerAsync(fullConfig, handler) {
467316
- var _a3;
467563
+ var _a3, _b3;
467317
467564
  try {
467318
467565
  const layer2 = await handler.getLayerAsync();
467319
467566
  layer2.set("layerId", fullConfig.id);
467320
467567
  this.layerHandlers.set(fullConfig.id, handler);
467321
467568
  this.layerConfigs.set(fullConfig.id, fullConfig);
467322
467569
  console.log("kjthis.layerConfigs:", this.layerConfigs);
467323
- this.map.addLayer(layer2);
467570
+ let isReuse = false;
467571
+ if (fullConfig.reuseId) {
467572
+ const reuseId = fullConfig.reuseId;
467573
+ let group2 = this.sharedLayerGroups.get(reuseId);
467574
+ if (group2) {
467575
+ console.log(`图层 ${fullConfig.id} 复用物理图层 ${reuseId}`);
467576
+ group2.logicalLayers.add(fullConfig.id);
467577
+ isReuse = true;
467578
+ this.updateSharedLayerState(reuseId);
467579
+ } else {
467580
+ console.log(`图层 ${fullConfig.id} 创建共享物理图层 ${reuseId}`);
467581
+ this.sharedLayerGroups.set(reuseId, {
467582
+ physicalLayer: layer2,
467583
+ logicalLayers: /* @__PURE__ */ new Set([fullConfig.id])
467584
+ });
467585
+ this.setupSharedLayerStyle(layer2, reuseId);
467586
+ this.map.addLayer(layer2);
467587
+ }
467588
+ } else {
467589
+ this.map.addLayer(layer2);
467590
+ }
467324
467591
  if (fullConfig.zIndex !== void 0) {
467325
- handler.setZIndex(fullConfig.zIndex);
467592
+ if (fullConfig.reuseId && this.sharedLayerGroups.has(fullConfig.reuseId)) {
467593
+ const group2 = this.sharedLayerGroups.get(fullConfig.reuseId);
467594
+ group2.physicalLayer.setZIndex(fullConfig.zIndex);
467595
+ } else {
467596
+ handler.setZIndex(fullConfig.zIndex);
467597
+ }
467326
467598
  console.log(`图层 ${fullConfig.id} 设置 zIndex: ${fullConfig.zIndex}`);
467327
467599
  }
467328
- if ("applyLayerStyles" in handler) {
467600
+ if ("applyLayerStyles" in handler && !isReuse) {
467329
467601
  setTimeout(() => {
467330
467602
  handler.applyLayerStyles();
467331
467603
  }, 50);
@@ -467339,7 +467611,9 @@ ${this.attributes_.map(
467339
467611
  layerConfig: fullConfig
467340
467612
  });
467341
467613
  if (((_a3 = fullConfig.locationAnimation) == null ? void 0 : _a3.enabled) && fullConfig.visible) {
467342
- this.handleLocationAnimation(layer2, fullConfig);
467614
+ if (!isReuse || !((_b3 = this.sharedLayerGroups.get(fullConfig.reuseId)) == null ? void 0 : _b3.physicalLayer.getVisible())) {
467615
+ this.handleLocationAnimation(fullConfig.reuseId ? this.sharedLayerGroups.get(fullConfig.reuseId).physicalLayer : layer2, fullConfig);
467616
+ }
467343
467617
  }
467344
467618
  return true;
467345
467619
  } catch (error2) {
@@ -467364,7 +467638,7 @@ ${this.attributes_.map(
467364
467638
  const childLayers = [];
467365
467639
  if (groupConfig.children) {
467366
467640
  for (const childConfig of groupConfig.children) {
467367
- const childLayerId = `${groupConfig.id}_child_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
467641
+ const childLayerId = childConfig.id || `${groupConfig.id}_child_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
467368
467642
  const childFullConfig = {
467369
467643
  ...childConfig,
467370
467644
  id: childLayerId,
@@ -467377,9 +467651,10 @@ ${this.attributes_.map(
467377
467651
  }
467378
467652
  }
467379
467653
  }
467654
+ const layersList = [];
467380
467655
  if (groupConfig.layers) {
467381
467656
  for (const layerConfig of groupConfig.layers) {
467382
- const layerLayerId = `${groupConfig.id}_layer_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
467657
+ const layerLayerId = layerConfig.id || `${groupConfig.id}_layer_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
467383
467658
  const layerFullConfig = {
467384
467659
  ...layerConfig,
467385
467660
  id: layerLayerId,
@@ -467388,10 +467663,14 @@ ${this.attributes_.map(
467388
467663
  opacity: layerConfig.opacity ?? groupConfig.opacity
467389
467664
  };
467390
467665
  if (this.addLayer(layerFullConfig)) {
467666
+ layersList.push(layerFullConfig);
467391
467667
  }
467392
467668
  }
467393
467669
  }
467394
467670
  groupConfig.children = childLayers;
467671
+ if (layersList.length > 0) {
467672
+ groupConfig.layers = layersList;
467673
+ }
467395
467674
  this.layerConfigs.set(groupConfig.id, groupConfig);
467396
467675
  this.saveLayerConfigs();
467397
467676
  this.eventBus.emit("layer-added", {
@@ -467418,15 +467697,26 @@ ${this.attributes_.map(
467418
467697
  console.warn(`未找到图层配置: ${layerId}`);
467419
467698
  return false;
467420
467699
  }
467421
- if (handler && this.layerConfigs.has(layerId)) {
467422
- if (config.type === "group" && config.children) {
467423
- for (const child of config.children) {
467424
- this.removeLayer(child.id);
467700
+ if ((handler || config.type === "group") && this.layerConfigs.has(layerId)) {
467701
+ if (config.type === "group") {
467702
+ if (config.children) {
467703
+ for (const child of config.children) {
467704
+ this.removeLayer(child.id);
467705
+ }
467425
467706
  }
467426
- } else {
467707
+ if (config.layers) {
467708
+ for (const layer2 of config.layers) {
467709
+ this.removeLayer(layer2.id);
467710
+ }
467711
+ }
467712
+ if (handler)
467713
+ handler.destroy();
467714
+ } else if (handler) {
467427
467715
  handler.destroy();
467428
467716
  }
467429
- this.layerHandlers.delete(layerId);
467717
+ if (handler) {
467718
+ this.layerHandlers.delete(layerId);
467719
+ }
467430
467720
  this.layerConfigs.delete(layerId);
467431
467721
  }
467432
467722
  this.pendingLayerConfigs.delete(layerId);
@@ -467498,7 +467788,7 @@ ${this.attributes_.map(
467498
467788
  console.warn(`图层配置不存在: ${layerId}`);
467499
467789
  return false;
467500
467790
  }
467501
- if (config.type === "group" && config.children) {
467791
+ if (config.type === "group" && (config.children || config.layers)) {
467502
467792
  return await this.setGroupLayerVisible(layerId, visible);
467503
467793
  }
467504
467794
  if (visible && !this.layerHandlers.has(layerId)) {
@@ -467513,28 +467803,58 @@ ${this.attributes_.map(
467513
467803
  if (visible && this.isBasemapLayer(layerId)) {
467514
467804
  await this.hideOtherBasemaps(layerId);
467515
467805
  }
467516
- handler.setVisible(visible);
467517
467806
  config.visible = visible;
467518
- this.saveLayerConfigs();
467519
467807
  if (this.pendingLayerConfigs.has(layerId)) {
467520
467808
  this.pendingLayerConfigs.set(layerId, config);
467521
467809
  }
467522
- if (visible) {
467523
- const layer2 = handler.getLayer();
467524
- const animCfg = config.locationAnimation;
467525
- if (animCfg && animCfg.enabled) {
467526
- this.handleLocationAnimation(layer2, config);
467527
- } else if (config.fitToExtent) {
467528
- const defaultAnim = {
467529
- enabled: true,
467530
- duration: 1e3,
467531
- easing: "ease-out",
467532
- maxZoom: 16,
467533
- padding: [50, 50, 50, 50]
467534
- };
467535
- this.performLocationAnimation(layer2, config, defaultAnim);
467810
+ this.layerConfigs.set(layerId, config);
467811
+ if (config.reuseId && this.sharedLayerGroups.has(config.reuseId)) {
467812
+ const group2 = this.sharedLayerGroups.get(config.reuseId);
467813
+ const anyVisible = Array.from(group2.logicalLayers).some((id2) => {
467814
+ const c2 = this.layerConfigs.get(id2);
467815
+ return c2 && c2.visible;
467816
+ });
467817
+ group2.physicalLayer.setVisible(anyVisible);
467818
+ this.updateSharedLayerState(config.reuseId);
467819
+ console.log(`共享图层 ${config.reuseId} 逻辑图层 ${layerId} 可见性设为 ${visible}, 物理图层可见性: ${anyVisible}`);
467820
+ if (visible) {
467821
+ if (anyVisible) {
467822
+ const layer2 = group2.physicalLayer;
467823
+ const animCfg = config.locationAnimation;
467824
+ if (animCfg && animCfg.enabled) {
467825
+ this.handleLocationAnimation(layer2, config);
467826
+ } else if (config.fitToExtent) {
467827
+ const defaultAnim = {
467828
+ enabled: true,
467829
+ duration: 1e3,
467830
+ easing: "ease-out",
467831
+ maxZoom: 16,
467832
+ padding: [50, 50, 50, 50]
467833
+ };
467834
+ this.performLocationAnimation(layer2, config, defaultAnim);
467835
+ }
467836
+ }
467837
+ }
467838
+ } else {
467839
+ handler.setVisible(visible);
467840
+ if (visible) {
467841
+ const layer2 = handler.getLayer();
467842
+ const animCfg = config.locationAnimation;
467843
+ if (animCfg && animCfg.enabled) {
467844
+ this.handleLocationAnimation(layer2, config);
467845
+ } else if (config.fitToExtent) {
467846
+ const defaultAnim = {
467847
+ enabled: true,
467848
+ duration: 1e3,
467849
+ easing: "ease-out",
467850
+ maxZoom: 16,
467851
+ padding: [50, 50, 50, 50]
467852
+ };
467853
+ this.performLocationAnimation(layer2, config, defaultAnim);
467854
+ }
467536
467855
  }
467537
467856
  }
467857
+ this.saveLayerConfigs();
467538
467858
  this.eventBus.emit("layer-visibility-changed", {
467539
467859
  layerId,
467540
467860
  visible,
@@ -467586,10 +467906,9 @@ ${this.attributes_.map(
467586
467906
  }
467587
467907
  }
467588
467908
  if (groupConfig.layers) {
467589
- const allConfigs = new Map([...this.layerConfigs, ...this.pendingLayerConfigs]);
467590
- for (const [layerId, config] of allConfigs) {
467591
- if (layerId.startsWith(`${groupLayerId}_layer_`)) {
467592
- const result = await this.setLayerVisible(layerId, visible);
467909
+ for (const layerConfig of groupConfig.layers) {
467910
+ if (layerConfig.id) {
467911
+ const result = await this.setLayerVisible(layerConfig.id, visible);
467593
467912
  results.push(result);
467594
467913
  }
467595
467914
  }
@@ -467841,7 +468160,6 @@ ${this.attributes_.map(
467841
468160
  * 按需加载图层(原loadLayerConfigs的单个图层版本)
467842
468161
  */
467843
468162
  async loadLayerOnDemand(layerId) {
467844
- var _a3;
467845
468163
  try {
467846
468164
  if (this.layerHandlers.has(layerId)) {
467847
468165
  return true;
@@ -467853,23 +468171,15 @@ ${this.attributes_.map(
467853
468171
  }
467854
468172
  const handler = layerFactory.createLayerHandler(config);
467855
468173
  handler.setMap(this.map);
467856
- const layer2 = await ((_a3 = handler.getLayerAsync) == null ? void 0 : _a3.call(handler)) || handler.getLayer();
467857
- layer2.set("layerId", config.id);
467858
- this.layerHandlers.set(config.id, handler);
467859
- this.layerConfigs.set(config.id, config);
467860
- this.map.addLayer(layer2);
467861
- if (config.zIndex !== void 0) {
467862
- handler.setZIndex(config.zIndex);
467863
- console.log(`按需加载图层 ${layerId} 设置 zIndex: ${config.zIndex}`);
467864
- }
467865
- this.pendingLayerConfigs.delete(layerId);
467866
- if ("applyLayerStyles" in handler) {
467867
- setTimeout(() => {
467868
- handler.applyLayerStyles();
467869
- }, 50);
468174
+ const success = await this.addLayerAsync(config, handler);
468175
+ if (success) {
468176
+ this.pendingLayerConfigs.delete(layerId);
468177
+ console.log(`图层 ${layerId} 按需加载完成`);
468178
+ return true;
468179
+ } else {
468180
+ console.error(`按需加载图层 ${layerId} 失败`);
468181
+ return false;
467870
468182
  }
467871
- console.log(`图层 ${layerId} 按需加载完成`);
467872
- return true;
467873
468183
  } catch (error2) {
467874
468184
  console.error(`按需加载图层 ${layerId} 失败:`, error2);
467875
468185
  return false;
@@ -468330,8 +468640,8 @@ ${this.attributes_.map(
468330
468640
  this.map.removeLayer(this.highlightLayer);
468331
468641
  }
468332
468642
  }
468333
- const _hoisted_1$p = ["id"];
468334
- const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
468643
+ const _hoisted_1$q = ["id"];
468644
+ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
468335
468645
  __name: "BasePopup",
468336
468646
  props: {
468337
468647
  config: {},
@@ -468449,7 +468759,7 @@ ${this.attributes_.map(
468449
468759
  }, [
468450
468760
  vue.createElementVNode("div", {
468451
468761
  id: `popup-slot-${_ctx.id}`
468452
- }, null, 8, _hoisted_1$p),
468762
+ }, null, 8, _hoisted_1$q),
468453
468763
  vue.renderSlot(_ctx.$slots, "default", {
468454
468764
  feature: _ctx.feature,
468455
468765
  coordinate: _ctx.coordinate,
@@ -468465,13 +468775,13 @@ ${this.attributes_.map(
468465
468775
  }
468466
468776
  });
468467
468777
  const BasePopup_vue_vue_type_style_index_0_lang = "";
468468
- const _hoisted_1$o = { class: "html-popup-content" };
468469
- const _hoisted_2$m = {
468778
+ const _hoisted_1$p = { class: "html-popup-content" };
468779
+ const _hoisted_2$n = {
468470
468780
  key: 0,
468471
468781
  class: "html-popup-title"
468472
468782
  };
468473
- const _hoisted_3$l = ["innerHTML"];
468474
- const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
468783
+ const _hoisted_3$m = ["innerHTML"];
468784
+ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
468475
468785
  __name: "HtmlPopup",
468476
468786
  props: {
468477
468787
  config: {},
@@ -468519,7 +468829,7 @@ ${this.attributes_.map(
468519
468829
  return sanitizeHtml(content2);
468520
468830
  });
468521
468831
  return (_ctx, _cache) => {
468522
- return vue.openBlock(), vue.createBlock(_sfc_main$q, {
468832
+ return vue.openBlock(), vue.createBlock(_sfc_main$r, {
468523
468833
  config: _ctx.config,
468524
468834
  coordinate: _ctx.coordinate,
468525
468835
  feature: _ctx.feature,
@@ -468532,12 +468842,12 @@ ${this.attributes_.map(
468532
468842
  default: vue.withCtx(() => {
468533
468843
  var _a3;
468534
468844
  return [
468535
- vue.createElementVNode("div", _hoisted_1$o, [
468536
- ((_a3 = _ctx.config.template) == null ? void 0 : _a3.title) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$m, vue.toDisplayString(resolveTitle()), 1)) : vue.createCommentVNode("", true),
468845
+ vue.createElementVNode("div", _hoisted_1$p, [
468846
+ ((_a3 = _ctx.config.template) == null ? void 0 : _a3.title) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$n, vue.toDisplayString(resolveTitle()), 1)) : vue.createCommentVNode("", true),
468537
468847
  vue.createElementVNode("div", {
468538
468848
  class: "html-popup-body",
468539
468849
  innerHTML: resolveContent()
468540
- }, null, 8, _hoisted_3$l)
468850
+ }, null, 8, _hoisted_3$m)
468541
468851
  ])
468542
468852
  ];
468543
468853
  }),
@@ -468547,17 +468857,17 @@ ${this.attributes_.map(
468547
468857
  }
468548
468858
  });
468549
468859
  const HtmlPopup_vue_vue_type_style_index_0_lang = "";
468550
- const _hoisted_1$n = { class: "image-popup-content" };
468551
- const _hoisted_2$l = {
468860
+ const _hoisted_1$o = { class: "image-popup-content" };
468861
+ const _hoisted_2$m = {
468552
468862
  key: 0,
468553
468863
  class: "image-popup-title"
468554
468864
  };
468555
- const _hoisted_3$k = {
468865
+ const _hoisted_3$l = {
468556
468866
  key: 1,
468557
468867
  class: "image-popup-description"
468558
468868
  };
468559
- const _hoisted_4$k = { class: "image-popup-main" };
468560
- const _hoisted_5$k = { class: "image-container" };
468869
+ const _hoisted_4$l = { class: "image-popup-main" };
468870
+ const _hoisted_5$l = { class: "image-container" };
468561
468871
  const _hoisted_6$h = ["src", "alt"];
468562
468872
  const _hoisted_7$f = {
468563
468873
  key: 0,
@@ -468587,7 +468897,7 @@ ${this.attributes_.map(
468587
468897
  };
468588
468898
  const _hoisted_15$7 = { class: "fullscreen-container" };
468589
468899
  const _hoisted_16$7 = ["src", "alt"];
468590
- const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
468900
+ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
468591
468901
  __name: "ImagePopup",
468592
468902
  props: {
468593
468903
  config: {},
@@ -468720,7 +469030,7 @@ ${this.attributes_.map(
468720
469030
  document.removeEventListener("keydown", handleKeydown);
468721
469031
  });
468722
469032
  return (_ctx, _cache) => {
468723
- return vue.openBlock(), vue.createBlock(_sfc_main$q, {
469033
+ return vue.openBlock(), vue.createBlock(_sfc_main$r, {
468724
469034
  config: _ctx.config,
468725
469035
  coordinate: _ctx.coordinate,
468726
469036
  feature: _ctx.feature,
@@ -468731,11 +469041,11 @@ ${this.attributes_.map(
468731
469041
  onHide: _cache[3] || (_cache[3] = ($event) => _ctx.$emit("hide"))
468732
469042
  }, {
468733
469043
  default: vue.withCtx(() => [
468734
- vue.createElementVNode("div", _hoisted_1$n, [
468735
- _ctx.config.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$l, vue.toDisplayString(resolveTitle()), 1)) : vue.createCommentVNode("", true),
468736
- _ctx.config.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$k, vue.toDisplayString(_ctx.config.description), 1)) : vue.createCommentVNode("", true),
468737
- vue.createElementVNode("div", _hoisted_4$k, [
468738
- vue.createElementVNode("div", _hoisted_5$k, [
469044
+ vue.createElementVNode("div", _hoisted_1$o, [
469045
+ _ctx.config.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$m, vue.toDisplayString(resolveTitle()), 1)) : vue.createCommentVNode("", true),
469046
+ _ctx.config.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$l, vue.toDisplayString(_ctx.config.description), 1)) : vue.createCommentVNode("", true),
469047
+ vue.createElementVNode("div", _hoisted_4$l, [
469048
+ vue.createElementVNode("div", _hoisted_5$l, [
468739
469049
  vue.createElementVNode("img", {
468740
469050
  src: currentImage.value,
468741
469051
  alt: `图片 ${currentIndex.value + 1}`,
@@ -468842,20 +469152,20 @@ ${this.attributes_.map(
468842
469152
  }
468843
469153
  });
468844
469154
  const ImagePopup_vue_vue_type_style_index_0_lang = "";
468845
- const _hoisted_1$m = { class: "array-popup-content" };
468846
- const _hoisted_2$k = {
469155
+ const _hoisted_1$n = { class: "array-popup-content" };
469156
+ const _hoisted_2$l = {
468847
469157
  key: 0,
468848
469158
  class: "array-popup-title"
468849
469159
  };
468850
- const _hoisted_3$j = {
469160
+ const _hoisted_3$k = {
468851
469161
  key: 1,
468852
469162
  class: "array-popup-description"
468853
469163
  };
468854
- const _hoisted_4$j = {
469164
+ const _hoisted_4$k = {
468855
469165
  key: 2,
468856
469166
  class: "view-switch"
468857
469167
  };
468858
- const _hoisted_5$j = {
469168
+ const _hoisted_5$k = {
468859
469169
  key: 3,
468860
469170
  class: "search-container"
468861
469171
  };
@@ -468919,7 +469229,7 @@ ${this.attributes_.map(
468919
469229
  class: "empty-data"
468920
469230
  };
468921
469231
  const _hoisted_44$1 = { class: "empty-text" };
468922
- const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
469232
+ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
468923
469233
  __name: "ArrayPopup",
468924
469234
  props: {
468925
469235
  config: {},
@@ -469065,7 +469375,7 @@ ${this.attributes_.map(
469065
469375
  }
469066
469376
  });
469067
469377
  return (_ctx, _cache) => {
469068
- return vue.openBlock(), vue.createBlock(_sfc_main$q, {
469378
+ return vue.openBlock(), vue.createBlock(_sfc_main$r, {
469069
469379
  config: _ctx.config,
469070
469380
  coordinate: _ctx.coordinate,
469071
469381
  feature: _ctx.feature,
@@ -469076,10 +469386,10 @@ ${this.attributes_.map(
469076
469386
  onHide: _cache[8] || (_cache[8] = ($event) => _ctx.$emit("hide"))
469077
469387
  }, {
469078
469388
  default: vue.withCtx(() => [
469079
- vue.createElementVNode("div", _hoisted_1$m, [
469080
- _ctx.config.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$k, vue.toDisplayString(resolveTitle()), 1)) : vue.createCommentVNode("", true),
469081
- _ctx.config.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$j, vue.toDisplayString(_ctx.config.description), 1)) : vue.createCommentVNode("", true),
469082
- _ctx.config.allowViewSwitch ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$j, [
469389
+ vue.createElementVNode("div", _hoisted_1$n, [
469390
+ _ctx.config.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$l, vue.toDisplayString(resolveTitle()), 1)) : vue.createCommentVNode("", true),
469391
+ _ctx.config.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$k, vue.toDisplayString(_ctx.config.description), 1)) : vue.createCommentVNode("", true),
469392
+ _ctx.config.allowViewSwitch ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$k, [
469083
469393
  vue.createVNode(vue.unref(ElButton), {
469084
469394
  class: vue.normalizeClass(["view-btn", { active: currentView.value === "table" }]),
469085
469395
  onClick: _cache[0] || (_cache[0] = ($event) => setView("table")),
@@ -469114,7 +469424,7 @@ ${this.attributes_.map(
469114
469424
  _: 1
469115
469425
  }, 8, ["class", "type"])
469116
469426
  ])) : vue.createCommentVNode("", true),
469117
- _ctx.config.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$j, [
469427
+ _ctx.config.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$k, [
469118
469428
  vue.createVNode(vue.unref(ElInput), {
469119
469429
  modelValue: searchQuery.value,
469120
469430
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => searchQuery.value = $event),
@@ -469500,7 +469810,7 @@ ${this.attributes_.map(
469500
469810
  let app = null;
469501
469811
  switch (type) {
469502
469812
  case "html":
469503
- app = vue.createApp(_sfc_main$p, {
469813
+ app = vue.createApp(_sfc_main$q, {
469504
469814
  id: popupId,
469505
469815
  config: { ...this.config.defaultConfig, ...config },
469506
469816
  coordinate,
@@ -469510,7 +469820,7 @@ ${this.attributes_.map(
469510
469820
  });
469511
469821
  break;
469512
469822
  case "image":
469513
- app = vue.createApp(_sfc_main$o, {
469823
+ app = vue.createApp(_sfc_main$p, {
469514
469824
  id: popupId,
469515
469825
  config: { ...this.config.defaultConfig, ...config },
469516
469826
  coordinate,
@@ -469520,7 +469830,7 @@ ${this.attributes_.map(
469520
469830
  });
469521
469831
  break;
469522
469832
  case "array":
469523
- app = vue.createApp(_sfc_main$n, {
469833
+ app = vue.createApp(_sfc_main$o, {
469524
469834
  id: popupId,
469525
469835
  config: { ...this.config.defaultConfig, ...config },
469526
469836
  coordinate,
@@ -469536,7 +469846,7 @@ ${this.attributes_.map(
469536
469846
  case "all":
469537
469847
  const allConfig = config;
469538
469848
  if (allConfig.htmlContent) {
469539
- app = vue.createApp(_sfc_main$p, {
469849
+ app = vue.createApp(_sfc_main$q, {
469540
469850
  id: popupId,
469541
469851
  config: {
469542
469852
  ...allConfig,
@@ -469548,7 +469858,7 @@ ${this.attributes_.map(
469548
469858
  onClose: () => this.closePopup(popupId)
469549
469859
  });
469550
469860
  } else if (allConfig.images) {
469551
- app = vue.createApp(_sfc_main$o, {
469861
+ app = vue.createApp(_sfc_main$p, {
469552
469862
  id: popupId,
469553
469863
  config: {
469554
469864
  ...allConfig,
@@ -469560,7 +469870,7 @@ ${this.attributes_.map(
469560
469870
  onClose: () => this.closePopup(popupId)
469561
469871
  });
469562
469872
  } else if (allConfig.data) {
469563
- app = vue.createApp(_sfc_main$n, {
469873
+ app = vue.createApp(_sfc_main$o, {
469564
469874
  id: popupId,
469565
469875
  config: {
469566
469876
  ...allConfig,
@@ -469576,7 +469886,7 @@ ${this.attributes_.map(
469576
469886
  }
469577
469887
  });
469578
469888
  } else {
469579
- app = vue.createApp(_sfc_main$q, {
469889
+ app = vue.createApp(_sfc_main$r, {
469580
469890
  id: popupId,
469581
469891
  config: allConfig,
469582
469892
  coordinate,
@@ -469599,7 +469909,7 @@ ${this.attributes_.map(
469599
469909
  },
469600
469910
  render() {
469601
469911
  return vue.h(
469602
- _sfc_main$q,
469912
+ _sfc_main$r,
469603
469913
  { config: this.cfg, coordinate: this.coordinate, feature: this.feature, visible: true, id: popupId, onClose: this.onClose },
469604
469914
  { default: () => vue.h(this.CustomComp, { ...this.computedProps, feature: this.feature, coordinate: this.coordinate, config: this.cfg }) }
469605
469915
  );
@@ -469883,7 +470193,11 @@ ${this.attributes_.map(
469883
470193
  initMap(targetId) {
469884
470194
  var _a3;
469885
470195
  const projection2 = this.config.projection || "EPSG:4326";
469886
- if (projection2 === "EPSG:4490") {
470196
+ if (this.config.projectionDefinition) {
470197
+ proj4$1.defs(projection2, this.config.projectionDefinition);
470198
+ register$3(proj4$1);
470199
+ }
470200
+ if (projection2 === "EPSG:4490" && !this.config.projectionDefinition) {
469887
470201
  setupEPSG4490();
469888
470202
  }
469889
470203
  const center2 = this.config.center || [116.404, 39.915];
@@ -470596,13 +470910,13 @@ ${this.attributes_.map(
470596
470910
  this.map = null;
470597
470911
  }
470598
470912
  }
470599
- const _hoisted_1$l = ["id"];
470600
- const _hoisted_2$j = {
470913
+ const _hoisted_1$m = ["id"];
470914
+ const _hoisted_2$k = {
470601
470915
  class: "absolute top-0 left-0 w-full h-full z-2000",
470602
470916
  "element-loading-text": "地图加载中...",
470603
470917
  "element-loading-background": "rgba(0, 0, 0, 0.3)"
470604
470918
  };
470605
- const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
470919
+ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
470606
470920
  __name: "MapContainer",
470607
470921
  props: {
470608
470922
  config: {},
@@ -470785,8 +471099,8 @@ ${this.attributes_.map(
470785
471099
  vue.createElementVNode("div", {
470786
471100
  id: mapId.value,
470787
471101
  class: "w-full h-full bg-gray-100"
470788
- }, null, 8, _hoisted_1$l),
470789
- vue.withDirectives(vue.createElementVNode("div", _hoisted_2$j, null, 512), [
471102
+ }, null, 8, _hoisted_1$m),
471103
+ vue.withDirectives(vue.createElementVNode("div", _hoisted_2$k, null, 512), [
470790
471104
  [vue.vShow, _ctx.loading],
470791
471105
  [_directive_loading, _ctx.loading]
470792
471106
  ])
@@ -470795,8 +471109,8 @@ ${this.attributes_.map(
470795
471109
  }
470796
471110
  });
470797
471111
  const MapContainer_vue_vue_type_style_index_0_lang = "";
470798
- const _hoisted_1$k = ["href"];
470799
- const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
471112
+ const _hoisted_1$l = ["href"];
471113
+ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
470800
471114
  __name: "index",
470801
471115
  props: {
470802
471116
  prefix: { default: "icon" },
@@ -470814,7 +471128,7 @@ ${this.attributes_.map(
470814
471128
  class: computedClass.value,
470815
471129
  "aria-hidden": "true"
470816
471130
  }, _ctx.$attrs), [
470817
- vue.createElementVNode("use", { href: symbolId.value }, null, 8, _hoisted_1$k)
471131
+ vue.createElementVNode("use", { href: symbolId.value }, null, 8, _hoisted_1$l)
470818
471132
  ], 16);
470819
471133
  };
470820
471134
  }
@@ -471015,14 +471329,14 @@ ${this.attributes_.map(
471015
471329
  }
471016
471330
  const dialogCacheManager = new DialogCacheManager();
471017
471331
  const dialogCacheManager$1 = dialogCacheManager;
471018
- const _hoisted_1$j = { class: "text-base font-semibold text-gray-800 flex-1 overflow-hidden text-ellipsis whitespace-nowrap" };
471019
- const _hoisted_2$i = { class: "flex items-center gap-2" };
471020
- const _hoisted_3$i = { class: "flex-1 overflow-auto min-h-0 h-0" };
471021
- const _hoisted_4$i = {
471332
+ const _hoisted_1$k = { class: "text-base font-semibold text-gray-800 flex-1 overflow-hidden text-ellipsis whitespace-nowrap" };
471333
+ const _hoisted_2$j = { class: "flex items-center gap-2" };
471334
+ const _hoisted_3$j = { class: "flex-1 overflow-auto min-h-0 h-0" };
471335
+ const _hoisted_4$j = {
471022
471336
  key: 0,
471023
471337
  class: "px-5 py-4 border-t border-gray-200 bg-gray-50 flex justify-end gap-3"
471024
471338
  };
471025
- const _hoisted_5$i = ["onMousedown"];
471339
+ const _hoisted_5$j = ["onMousedown"];
471026
471340
  const _hoisted_6$f = { class: "text-base font-semibold text-gray-800 flex-1 overflow-hidden text-ellipsis whitespace-nowrap" };
471027
471341
  const _hoisted_7$d = { class: "flex items-center gap-2" };
471028
471342
  const _hoisted_8$a = { class: "flex-1 overflow-auto min-h-0 h-0" };
@@ -471034,7 +471348,7 @@ ${this.attributes_.map(
471034
471348
  key: 1,
471035
471349
  class: "absolute top-0 left-0 w-full h-full pointer-events-none"
471036
471350
  };
471037
- const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
471351
+ const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
471038
471352
  ...{
471039
471353
  inheritAttrs: false
471040
471354
  },
@@ -471525,12 +471839,12 @@ ${this.attributes_.map(
471525
471839
  class: vue.normalizeClass(["flex items-center justify-between px-5 py-4 border-b border-gray-200 bg-gray-50", { "cursor-move": _ctx.draggable && !isFullscreen.value }]),
471526
471840
  onMousedown: startDrag
471527
471841
  }, [
471528
- vue.createElementVNode("div", _hoisted_1$j, [
471842
+ vue.createElementVNode("div", _hoisted_1$k, [
471529
471843
  vue.renderSlot(_ctx.$slots, "title", {}, () => [
471530
471844
  vue.createTextVNode(vue.toDisplayString(_ctx.title), 1)
471531
471845
  ])
471532
471846
  ]),
471533
- vue.createElementVNode("div", _hoisted_2$i, [
471847
+ vue.createElementVNode("div", _hoisted_2$j, [
471534
471848
  _ctx.showFullscreen ? (vue.openBlock(), vue.createBlock(vue.unref(ElButton), {
471535
471849
  key: 0,
471536
471850
  class: "w-6 h-6 border-none bg-transparent cursor-pointer flex items-center justify-center rounded text-gray-500 transition-all duration-200 hover:bg-gray-200 hover:text-gray-600",
@@ -471538,7 +471852,7 @@ ${this.attributes_.map(
471538
471852
  title: isFullscreen.value ? "退出全屏" : "全屏"
471539
471853
  }, {
471540
471854
  default: vue.withCtx(() => [
471541
- vue.createVNode(_sfc_main$l, {
471855
+ vue.createVNode(_sfc_main$m, {
471542
471856
  name: isFullscreen.value ? "exit-fullscreen" : "fullscreen"
471543
471857
  }, null, 8, ["name"])
471544
471858
  ]),
@@ -471551,16 +471865,16 @@ ${this.attributes_.map(
471551
471865
  title: "关闭"
471552
471866
  }, {
471553
471867
  default: vue.withCtx(() => [
471554
- vue.createVNode(_sfc_main$l, { name: "close" })
471868
+ vue.createVNode(_sfc_main$m, { name: "close" })
471555
471869
  ]),
471556
471870
  _: 1
471557
471871
  })) : vue.createCommentVNode("", true)
471558
471872
  ])
471559
471873
  ], 34),
471560
- vue.createElementVNode("div", _hoisted_3$i, [
471874
+ vue.createElementVNode("div", _hoisted_3$j, [
471561
471875
  vue.renderSlot(_ctx.$slots, "default")
471562
471876
  ]),
471563
- _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$i, [
471877
+ _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$j, [
471564
471878
  vue.renderSlot(_ctx.$slots, "footer")
471565
471879
  ])) : vue.createCommentVNode("", true),
471566
471880
  _ctx.resizable && !isFullscreen.value ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(resizeDirections, (direction2) => {
@@ -471568,7 +471882,7 @@ ${this.attributes_.map(
471568
471882
  key: direction2,
471569
471883
  class: vue.normalizeClass(`absolute bg-transparent z-10 pointer-events-auto resize-${direction2}`),
471570
471884
  onMousedown: ($event) => startResize($event, direction2)
471571
- }, null, 42, _hoisted_5$i);
471885
+ }, null, 42, _hoisted_5$j);
471572
471886
  }), 64)) : vue.createCommentVNode("", true)
471573
471887
  ], 16)
471574
471888
  ], 6)) : vue.createCommentVNode("", true)
@@ -471621,7 +471935,7 @@ ${this.attributes_.map(
471621
471935
  title: isFullscreen.value ? "退出全屏" : "全屏"
471622
471936
  }, {
471623
471937
  default: vue.withCtx(() => [
471624
- vue.createVNode(_sfc_main$l, {
471938
+ vue.createVNode(_sfc_main$m, {
471625
471939
  name: isFullscreen.value ? "exit-fullscreen" : "fullscreen"
471626
471940
  }, null, 8, ["name"])
471627
471941
  ]),
@@ -471634,7 +471948,7 @@ ${this.attributes_.map(
471634
471948
  title: "关闭"
471635
471949
  }, {
471636
471950
  default: vue.withCtx(() => [
471637
- vue.createVNode(_sfc_main$l, { name: "close" })
471951
+ vue.createVNode(_sfc_main$m, { name: "close" })
471638
471952
  ]),
471639
471953
  _: 1
471640
471954
  })) : vue.createCommentVNode("", true)
@@ -471696,13 +472010,13 @@ ${this.attributes_.map(
471696
472010
  const tencentVecUrl = "data:image/png;base64,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";
471697
472011
  const osmUrl = "data:image/png;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2YyZjJmMiIvPgogIDxyZWN0IHg9IjEwIiB5PSIxMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiNjY2NjY2MiIHN0cm9rZS13aWR0aD0iMSIvPgogIDxwYXRoIGQ9Ik0yMCAzMCBMNDAgMjAgTDYwIDM1IEw4MCAyNSBMODAgNzAgTDYwIDc1IEw0MCA2MCBMMjAgNzAgWiIgZmlsbD0iIzdkZDNjMCIgc3Ryb2tlPSIjNWNiM2EwIiBzdHJva2Utd2lkdGg9IjEiLz4KICA8Y2lyY2xlIGN4PSIzNSIgY3k9IjQ1IiByPSIzIiBmaWxsPSIjZmY2YjZiIi8+CiAgPGNpcmNsZSBjeD0iNTUiIGN5PSIzNSIgcj0iMiIgZmlsbD0iIzRlY2RjNCIvPgogIDxjaXJjbGUgY3g9IjY1IiBjeT0iNTUiIHI9IjIiIGZpbGw9IiM0NWI3ZDEiLz4KICA8dGV4dCB4PSI1MCIgeT0iOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iIzY2NiI+T1NNPC90ZXh0Pgo8L3N2Zz4=";
471698
472012
  const customBlueUrl = "data:image/png;base64,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";
471699
- const _hoisted_1$i = { class: "basemap-content" };
471700
- const _hoisted_2$h = { class: "basemap-grid" };
471701
- const _hoisted_3$h = ["onClick"];
471702
- const _hoisted_4$h = { class: "basemap-preview" };
471703
- const _hoisted_5$h = ["src", "alt"];
472013
+ const _hoisted_1$j = { class: "basemap-content" };
472014
+ const _hoisted_2$i = { class: "basemap-grid" };
472015
+ const _hoisted_3$i = ["onClick"];
472016
+ const _hoisted_4$i = { class: "basemap-preview" };
472017
+ const _hoisted_5$i = ["src", "alt"];
471704
472018
  const _hoisted_6$e = { class: "basemap-name" };
471705
- const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
472019
+ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
471706
472020
  __name: "BasemapPanel",
471707
472021
  props: {
471708
472022
  modelValue: { type: Boolean }
@@ -471917,7 +472231,7 @@ ${this.attributes_.map(
471917
472231
  }
471918
472232
  };
471919
472233
  return (_ctx, _cache) => {
471920
- return vue.openBlock(), vue.createBlock(_sfc_main$k, {
472234
+ return vue.openBlock(), vue.createBlock(_sfc_main$l, {
471921
472235
  modelValue: visible.value,
471922
472236
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => visible.value = $event),
471923
472237
  title: "底图选择",
@@ -471933,23 +472247,23 @@ ${this.attributes_.map(
471933
472247
  onClose: handleClose
471934
472248
  }, {
471935
472249
  default: vue.withCtx(() => [
471936
- vue.createElementVNode("div", _hoisted_1$i, [
471937
- vue.createElementVNode("div", _hoisted_2$h, [
472250
+ vue.createElementVNode("div", _hoisted_1$j, [
472251
+ vue.createElementVNode("div", _hoisted_2$i, [
471938
472252
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(displayBasemaps.value, (basemap) => {
471939
472253
  return vue.openBlock(), vue.createElementBlock("div", {
471940
472254
  key: basemap.id,
471941
472255
  class: vue.normalizeClass(["basemap-item", { active: selectedBasemap.value === basemap.id }]),
471942
472256
  onClick: ($event) => selectBasemap(basemap)
471943
472257
  }, [
471944
- vue.createElementVNode("div", _hoisted_4$h, [
472258
+ vue.createElementVNode("div", _hoisted_4$i, [
471945
472259
  vue.createElementVNode("img", {
471946
472260
  src: basemap.thumbnail,
471947
472261
  alt: basemap.name,
471948
472262
  loading: "lazy"
471949
- }, null, 8, _hoisted_5$h)
472263
+ }, null, 8, _hoisted_5$i)
471950
472264
  ]),
471951
472265
  vue.createElementVNode("div", _hoisted_6$e, vue.toDisplayString(basemap.name), 1)
471952
- ], 10, _hoisted_3$h);
472266
+ ], 10, _hoisted_3$i);
471953
472267
  }), 128))
471954
472268
  ])
471955
472269
  ])
@@ -472291,15 +472605,15 @@ ${this.attributes_.map(
472291
472605
  function createOverviewMapUtil() {
472292
472606
  return new OverviewMapUtil();
472293
472607
  }
472294
- const _hoisted_1$h = { class: "measurement-content h-full flex flex-col" };
472295
- const _hoisted_2$g = { class: "measurement-header flex justify-between items-center px-6 py-4" };
472296
- const _hoisted_3$g = { class: "measurement-result py-8 text-center" };
472297
- const _hoisted_4$g = { class: "result-value" };
472298
- const _hoisted_5$g = { class: "tool-grid flex-1 py-5" };
472608
+ const _hoisted_1$i = { class: "measurement-content h-full flex flex-col" };
472609
+ const _hoisted_2$h = { class: "measurement-header flex justify-between items-center px-6 py-4" };
472610
+ const _hoisted_3$h = { class: "measurement-result py-8 text-center" };
472611
+ const _hoisted_4$h = { class: "result-value" };
472612
+ const _hoisted_5$h = { class: "tool-grid flex-1 py-5" };
472299
472613
  const _hoisted_6$d = ["onClick"];
472300
472614
  const _hoisted_7$c = ["src", "alt"];
472301
472615
  const _hoisted_8$9 = { class: "tool-label" };
472302
- const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
472616
+ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
472303
472617
  __name: "MeasurementDialog",
472304
472618
  props: {
472305
472619
  modelValue: { type: Boolean }
@@ -472531,7 +472845,7 @@ ${this.attributes_.map(
472531
472845
  const _component_el_option_group = vue.resolveComponent("el-option-group");
472532
472846
  const _component_el_select = vue.resolveComponent("el-select");
472533
472847
  const _component_el_button = vue.resolveComponent("el-button");
472534
- return vue.openBlock(), vue.createBlock(_sfc_main$k, {
472848
+ return vue.openBlock(), vue.createBlock(_sfc_main$l, {
472535
472849
  modelValue: dialogVisible.value,
472536
472850
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => dialogVisible.value = $event),
472537
472851
  title: "图上量算",
@@ -472541,8 +472855,8 @@ ${this.attributes_.map(
472541
472855
  cacheId: "measurement-dialog"
472542
472856
  }, {
472543
472857
  default: vue.withCtx(() => [
472544
- vue.createElementVNode("div", _hoisted_1$h, [
472545
- vue.createElementVNode("div", _hoisted_2$g, [
472858
+ vue.createElementVNode("div", _hoisted_1$i, [
472859
+ vue.createElementVNode("div", _hoisted_2$h, [
472546
472860
  vue.createVNode(_component_el_select, {
472547
472861
  modelValue: selectedUnit.value,
472548
472862
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedUnit.value = $event),
@@ -472610,10 +472924,10 @@ ${this.attributes_.map(
472610
472924
  _: 1
472611
472925
  })
472612
472926
  ]),
472613
- vue.createElementVNode("div", _hoisted_3$g, [
472614
- vue.createElementVNode("div", _hoisted_4$g, vue.toDisplayString(getDisplayValue()), 1)
472927
+ vue.createElementVNode("div", _hoisted_3$h, [
472928
+ vue.createElementVNode("div", _hoisted_4$h, vue.toDisplayString(getDisplayValue()), 1)
472615
472929
  ]),
472616
- vue.createElementVNode("div", _hoisted_5$g, [
472930
+ vue.createElementVNode("div", _hoisted_5$h, [
472617
472931
  (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(measurementTools, (tool) => {
472618
472932
  return vue.createElementVNode("div", {
472619
472933
  key: tool.type,
@@ -472644,13 +472958,13 @@ ${this.attributes_.map(
472644
472958
  }
472645
472959
  return target;
472646
472960
  };
472647
- const MeasurementDialog = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-d868b567"]]);
472648
- const _hoisted_1$g = { class: "coordinate-content" };
472649
- const _hoisted_2$f = { class: "format-selection" };
472650
- const _hoisted_3$f = { class: "format-options" };
472651
- const _hoisted_4$f = { class: "coordinate-input" };
472652
- const _hoisted_5$f = { class: "dialog-footer" };
472653
- const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
472961
+ const MeasurementDialog = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-d868b567"]]);
472962
+ const _hoisted_1$h = { class: "coordinate-content" };
472963
+ const _hoisted_2$g = { class: "format-selection" };
472964
+ const _hoisted_3$g = { class: "format-options" };
472965
+ const _hoisted_4$g = { class: "coordinate-input" };
472966
+ const _hoisted_5$g = { class: "dialog-footer" };
472967
+ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
472654
472968
  __name: "CoordinateLocationDialog",
472655
472969
  props: {
472656
472970
  modelValue: { type: Boolean }
@@ -472800,7 +473114,7 @@ ${this.attributes_.map(
472800
473114
  const _component_el_form_item = vue.resolveComponent("el-form-item");
472801
473115
  const _component_el_form = vue.resolveComponent("el-form");
472802
473116
  const _component_el_button = vue.resolveComponent("el-button");
472803
- return vue.openBlock(), vue.createBlock(_sfc_main$k, {
473117
+ return vue.openBlock(), vue.createBlock(_sfc_main$l, {
472804
473118
  modelValue: dialogVisible.value,
472805
473119
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => dialogVisible.value = $event),
472806
473120
  title: "坐标拾取",
@@ -472811,7 +473125,7 @@ ${this.attributes_.map(
472811
473125
  class: "coordinate-dialog"
472812
473126
  }, {
472813
473127
  footer: vue.withCtx(() => [
472814
- vue.createElementVNode("div", _hoisted_5$f, [
473128
+ vue.createElementVNode("div", _hoisted_5$g, [
472815
473129
  vue.createVNode(_component_el_button, {
472816
473130
  type: "primary",
472817
473131
  onClick: getCurrentLocation
@@ -472833,10 +473147,10 @@ ${this.attributes_.map(
472833
473147
  ])
472834
473148
  ]),
472835
473149
  default: vue.withCtx(() => [
472836
- vue.createElementVNode("div", _hoisted_1$g, [
472837
- vue.createElementVNode("div", _hoisted_2$f, [
473150
+ vue.createElementVNode("div", _hoisted_1$h, [
473151
+ vue.createElementVNode("div", _hoisted_2$g, [
472838
473152
  _cache[6] || (_cache[6] = vue.createElementVNode("div", { class: "format-title" }, "坐标格式", -1)),
472839
- vue.createElementVNode("div", _hoisted_3$f, [
473153
+ vue.createElementVNode("div", _hoisted_3$g, [
472840
473154
  vue.createVNode(_component_el_radio_group, {
472841
473155
  modelValue: selectedFormat.value,
472842
473156
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedFormat.value = $event),
@@ -472860,7 +473174,7 @@ ${this.attributes_.map(
472860
473174
  }, 8, ["modelValue"])
472861
473175
  ])
472862
473176
  ]),
472863
- vue.createElementVNode("div", _hoisted_4$f, [
473177
+ vue.createElementVNode("div", _hoisted_4$g, [
472864
473178
  vue.createVNode(_component_el_form, {
472865
473179
  model: coordinateForm,
472866
473180
  "label-width": "60px"
@@ -472902,14 +473216,14 @@ ${this.attributes_.map(
472902
473216
  }
472903
473217
  });
472904
473218
  const CoordinateLocationDialog_vue_vue_type_style_index_0_lang = "";
472905
- const _hoisted_1$f = { class: "region-content" };
472906
- const _hoisted_2$e = {
473219
+ const _hoisted_1$g = { class: "region-content" };
473220
+ const _hoisted_2$f = {
472907
473221
  key: 0,
472908
473222
  class: "region-categories"
472909
473223
  };
472910
- const _hoisted_3$e = { class: "region-group" };
472911
- const _hoisted_4$e = { class: "region-items" };
472912
- const _hoisted_5$e = { class: "region-group" };
473224
+ const _hoisted_3$f = { class: "region-group" };
473225
+ const _hoisted_4$f = { class: "region-items" };
473226
+ const _hoisted_5$f = { class: "region-group" };
472913
473227
  const _hoisted_6$c = { class: "region-items" };
472914
473228
  const _hoisted_7$b = { class: "region-group" };
472915
473229
  const _hoisted_8$8 = { class: "region-items" };
@@ -472928,7 +473242,7 @@ ${this.attributes_.map(
472928
473242
  class: "sub-regions"
472929
473243
  };
472930
473244
  const _hoisted_20$4 = { class: "district-grid" };
472931
- const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
473245
+ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
472932
473246
  __name: "RegionNavigationDialog",
472933
473247
  props: {
472934
473248
  modelValue: { type: Boolean }
@@ -474013,7 +474327,7 @@ ${this.attributes_.map(
474013
474327
  const _component_el_button = vue.resolveComponent("el-button");
474014
474328
  const _component_el_tab_pane = vue.resolveComponent("el-tab-pane");
474015
474329
  const _component_el_tabs = vue.resolveComponent("el-tabs");
474016
- return vue.openBlock(), vue.createBlock(_sfc_main$k, {
474330
+ return vue.openBlock(), vue.createBlock(_sfc_main$l, {
474017
474331
  modelValue: dialogVisible.value,
474018
474332
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => dialogVisible.value = $event),
474019
474333
  title: "地区导航",
@@ -474024,7 +474338,7 @@ ${this.attributes_.map(
474024
474338
  class: "region-dialog"
474025
474339
  }, {
474026
474340
  default: vue.withCtx(() => [
474027
- vue.createElementVNode("div", _hoisted_1$f, [
474341
+ vue.createElementVNode("div", _hoisted_1$g, [
474028
474342
  vue.createVNode(_component_el_tabs, {
474029
474343
  modelValue: activeTab.value,
474030
474344
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activeTab.value = $event),
@@ -474042,10 +474356,10 @@ ${this.attributes_.map(
474042
474356
  closable: index2 > 0
474043
474357
  }, {
474044
474358
  default: vue.withCtx(() => [
474045
- tab.name === "china" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$e, [
474046
- vue.createElementVNode("div", _hoisted_3$e, [
474359
+ tab.name === "china" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$f, [
474360
+ vue.createElementVNode("div", _hoisted_3$f, [
474047
474361
  _cache[2] || (_cache[2] = vue.createElementVNode("div", { class: "group-title" }, "华北", -1)),
474048
- vue.createElementVNode("div", _hoisted_4$e, [
474362
+ vue.createElementVNode("div", _hoisted_4$f, [
474049
474363
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(regions.north, (region) => {
474050
474364
  return vue.openBlock(), vue.createBlock(_component_el_button, {
474051
474365
  key: region.code,
@@ -474061,7 +474375,7 @@ ${this.attributes_.map(
474061
474375
  }), 128))
474062
474376
  ])
474063
474377
  ]),
474064
- vue.createElementVNode("div", _hoisted_5$e, [
474378
+ vue.createElementVNode("div", _hoisted_5$f, [
474065
474379
  _cache[3] || (_cache[3] = vue.createElementVNode("div", { class: "group-title" }, "东北", -1)),
474066
474380
  vue.createElementVNode("div", _hoisted_6$c, [
474067
474381
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(regions.northeast, (region) => {
@@ -474218,12 +474532,12 @@ ${this.attributes_.map(
474218
474532
  }
474219
474533
  });
474220
474534
  const RegionNavigationDialog_vue_vue_type_style_index_0_lang = "";
474221
- const _hoisted_1$e = { class: "markers-content" };
474222
- const _hoisted_2$d = { class: "toolbar" };
474223
- const _hoisted_3$d = { class: "search-filter" };
474224
- const _hoisted_4$d = { class: "markers-list" };
474225
- const _hoisted_5$d = { class: "marker-name" };
474226
- const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
474535
+ const _hoisted_1$f = { class: "markers-content" };
474536
+ const _hoisted_2$e = { class: "toolbar" };
474537
+ const _hoisted_3$e = { class: "search-filter" };
474538
+ const _hoisted_4$e = { class: "markers-list" };
474539
+ const _hoisted_5$e = { class: "marker-name" };
474540
+ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
474227
474541
  __name: "MyMarkersDialog",
474228
474542
  props: {
474229
474543
  modelValue: { type: Boolean }
@@ -474549,7 +474863,7 @@ ${this.attributes_.map(
474549
474863
  const _component_el_form_item = vue.resolveComponent("el-form-item");
474550
474864
  const _component_el_form = vue.resolveComponent("el-form");
474551
474865
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
474552
- vue.createVNode(_sfc_main$k, {
474866
+ vue.createVNode(_sfc_main$l, {
474553
474867
  modelValue: dialogVisible.value,
474554
474868
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => dialogVisible.value = $event),
474555
474869
  title: "我的标记",
@@ -474560,8 +474874,8 @@ ${this.attributes_.map(
474560
474874
  class: "markers-dialog"
474561
474875
  }, {
474562
474876
  default: vue.withCtx(() => [
474563
- vue.createElementVNode("div", _hoisted_1$e, [
474564
- vue.createElementVNode("div", _hoisted_2$d, [
474877
+ vue.createElementVNode("div", _hoisted_1$f, [
474878
+ vue.createElementVNode("div", _hoisted_2$e, [
474565
474879
  vue.createVNode(_component_el_button, {
474566
474880
  type: "primary",
474567
474881
  icon: vue.unref(plus_default),
@@ -474602,7 +474916,7 @@ ${this.attributes_.map(
474602
474916
  _: 1
474603
474917
  }, 8, ["icon", "disabled"])
474604
474918
  ]),
474605
- vue.createElementVNode("div", _hoisted_3$d, [
474919
+ vue.createElementVNode("div", _hoisted_3$e, [
474606
474920
  vue.createVNode(_component_el_input, {
474607
474921
  modelValue: searchKeyword.value,
474608
474922
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchKeyword.value = $event),
@@ -474635,7 +474949,7 @@ ${this.attributes_.map(
474635
474949
  _: 1
474636
474950
  }, 8, ["modelValue"])
474637
474951
  ]),
474638
- vue.createElementVNode("div", _hoisted_4$d, [
474952
+ vue.createElementVNode("div", _hoisted_4$e, [
474639
474953
  vue.createVNode(_component_el_table, {
474640
474954
  data: filteredMarkers.value,
474641
474955
  height: "300",
@@ -474649,7 +474963,7 @@ ${this.attributes_.map(
474649
474963
  width: "120"
474650
474964
  }, {
474651
474965
  default: vue.withCtx(({ row }) => [
474652
- vue.createElementVNode("div", _hoisted_5$d, [
474966
+ vue.createElementVNode("div", _hoisted_5$e, [
474653
474967
  vue.createVNode(_component_el_icon, {
474654
474968
  color: row.color,
474655
474969
  size: "16"
@@ -474723,7 +475037,7 @@ ${this.attributes_.map(
474723
475037
  ]),
474724
475038
  _: 1
474725
475039
  }, 8, ["modelValue"]),
474726
- vue.createVNode(_sfc_main$k, {
475040
+ vue.createVNode(_sfc_main$l, {
474727
475041
  modelValue: showAddDialog.value,
474728
475042
  "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => showAddDialog.value = $event),
474729
475043
  title: "添加标记",
@@ -474795,11 +475109,11 @@ ${this.attributes_.map(
474795
475109
  }
474796
475110
  });
474797
475111
  const MyMarkersDialog_vue_vue_type_style_index_0_lang = "";
474798
- const _hoisted_1$d = { class: "bookmarks-content" };
474799
- const _hoisted_2$c = { class: "toolbar" };
474800
- const _hoisted_3$c = { class: "search-filter" };
474801
- const _hoisted_4$c = { class: "bookmarks-grid" };
474802
- const _hoisted_5$c = ["onClick"];
475112
+ const _hoisted_1$e = { class: "bookmarks-content" };
475113
+ const _hoisted_2$d = { class: "toolbar" };
475114
+ const _hoisted_3$d = { class: "search-filter" };
475115
+ const _hoisted_4$d = { class: "bookmarks-grid" };
475116
+ const _hoisted_5$d = ["onClick"];
474803
475117
  const _hoisted_6$b = { class: "bookmark-thumbnail" };
474804
475118
  const _hoisted_7$a = { class: "thumbnail-placeholder" };
474805
475119
  const _hoisted_8$7 = { class: "bookmark-overlay" };
@@ -474821,7 +475135,7 @@ ${this.attributes_.map(
474821
475135
  class: "statistics"
474822
475136
  };
474823
475137
  const _hoisted_20$3 = { class: "dialog-footer" };
474824
- const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
475138
+ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
474825
475139
  __name: "ViewBookmarksDialog",
474826
475140
  props: {
474827
475141
  modelValue: { type: Boolean }
@@ -475080,7 +475394,7 @@ ${this.attributes_.map(
475080
475394
  const _component_el_form_item = vue.resolveComponent("el-form-item");
475081
475395
  const _component_el_slider = vue.resolveComponent("el-slider");
475082
475396
  const _component_el_form = vue.resolveComponent("el-form");
475083
- return vue.openBlock(), vue.createBlock(_sfc_main$k, {
475397
+ return vue.openBlock(), vue.createBlock(_sfc_main$l, {
475084
475398
  modelValue: dialogVisible.value,
475085
475399
  "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => dialogVisible.value = $event),
475086
475400
  title: "视角书签",
@@ -475101,8 +475415,8 @@ ${this.attributes_.map(
475101
475415
  ])
475102
475416
  ]),
475103
475417
  default: vue.withCtx(() => [
475104
- vue.createElementVNode("div", _hoisted_1$d, [
475105
- vue.createElementVNode("div", _hoisted_2$c, [
475418
+ vue.createElementVNode("div", _hoisted_1$e, [
475419
+ vue.createElementVNode("div", _hoisted_2$d, [
475106
475420
  vue.createVNode(_component_el_button, {
475107
475421
  type: "primary",
475108
475422
  icon: vue.unref(plus_default),
@@ -475142,7 +475456,7 @@ ${this.attributes_.map(
475142
475456
  _: 1
475143
475457
  }, 8, ["icon", "disabled"])
475144
475458
  ]),
475145
- vue.createElementVNode("div", _hoisted_3$c, [
475459
+ vue.createElementVNode("div", _hoisted_3$d, [
475146
475460
  vue.createVNode(_component_el_input, {
475147
475461
  modelValue: searchKeyword.value,
475148
475462
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchKeyword.value = $event),
@@ -475197,7 +475511,7 @@ ${this.attributes_.map(
475197
475511
  _: 1
475198
475512
  }, 8, ["modelValue"])
475199
475513
  ]),
475200
- vue.createElementVNode("div", _hoisted_4$c, [
475514
+ vue.createElementVNode("div", _hoisted_4$d, [
475201
475515
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredBookmarks.value, (bookmark, index2) => {
475202
475516
  return vue.openBlock(), vue.createElementBlock("div", {
475203
475517
  key: bookmark.id,
@@ -475293,7 +475607,7 @@ ${this.attributes_.map(
475293
475607
  ]),
475294
475608
  vue.createElementVNode("div", _hoisted_17$4, vue.toDisplayString(formatTime(bookmark.createTime)), 1)
475295
475609
  ])
475296
- ], 8, _hoisted_5$c);
475610
+ ], 8, _hoisted_5$d);
475297
475611
  }), 128))
475298
475612
  ]),
475299
475613
  filteredBookmarks.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_18$4, [
@@ -475356,7 +475670,7 @@ ${this.attributes_.map(
475356
475670
  })
475357
475671
  ])) : vue.createCommentVNode("", true)
475358
475672
  ]),
475359
- vue.createVNode(_sfc_main$k, {
475673
+ vue.createVNode(_sfc_main$l, {
475360
475674
  modelValue: showBookmarkForm.value,
475361
475675
  "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => showBookmarkForm.value = $event),
475362
475676
  title: editingIndex.value >= 0 ? "编辑书签" : "保存视角书签",
@@ -475511,11 +475825,11 @@ ${this.attributes_.map(
475511
475825
  }
475512
475826
  });
475513
475827
  const ViewBookmarksDialog_vue_vue_type_style_index_0_lang = "";
475514
- const _hoisted_1$c = { class: "py-2.5" };
475515
- const _hoisted_2$b = { class: "h-150 overflow-y-auto" };
475516
- const _hoisted_3$b = { class: "flex items-center justify-between" };
475517
- const _hoisted_4$b = { class: "mb-5" };
475518
- const _hoisted_5$b = { class: "mb-3" };
475828
+ const _hoisted_1$d = { class: "py-2.5" };
475829
+ const _hoisted_2$c = { class: "h-150 overflow-y-auto" };
475830
+ const _hoisted_3$c = { class: "flex items-center justify-between" };
475831
+ const _hoisted_4$c = { class: "mb-5" };
475832
+ const _hoisted_5$c = { class: "mb-3" };
475519
475833
  const _hoisted_6$a = {
475520
475834
  key: 0,
475521
475835
  class: "mb-3"
@@ -475600,7 +475914,7 @@ ${this.attributes_.map(
475600
475914
  const _hoisted_45 = { key: 0 };
475601
475915
  const _hoisted_46 = { key: 0 };
475602
475916
  const _hoisted_47 = { class: "text-right" };
475603
- const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
475917
+ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
475604
475918
  __name: "MapPrintDialog",
475605
475919
  props: {
475606
475920
  modelValue: { type: Boolean },
@@ -475979,7 +476293,7 @@ ${this.attributes_.map(
475979
476293
  const _component_el_col = vue.resolveComponent("el-col");
475980
476294
  const _component_el_button_group = vue.resolveComponent("el-button-group");
475981
476295
  const _component_el_row = vue.resolveComponent("el-row");
475982
- return vue.openBlock(), vue.createBlock(_sfc_main$k, {
476296
+ return vue.openBlock(), vue.createBlock(_sfc_main$l, {
475983
476297
  modelValue: dialogVisible.value,
475984
476298
  "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => dialogVisible.value = $event),
475985
476299
  title: "地图打印",
@@ -476017,15 +476331,15 @@ ${this.attributes_.map(
476017
476331
  ])
476018
476332
  ]),
476019
476333
  default: vue.withCtx(() => [
476020
- vue.createElementVNode("div", _hoisted_1$c, [
476334
+ vue.createElementVNode("div", _hoisted_1$d, [
476021
476335
  vue.createVNode(_component_el_row, { gutter: 20 }, {
476022
476336
  default: vue.withCtx(() => [
476023
476337
  vue.createVNode(_component_el_col, { span: 8 }, {
476024
476338
  default: vue.withCtx(() => [
476025
- vue.createElementVNode("div", _hoisted_2$b, [
476339
+ vue.createElementVNode("div", _hoisted_2$c, [
476026
476340
  vue.createVNode(_component_el_card, { shadow: "hover" }, {
476027
476341
  header: vue.withCtx(() => [
476028
- vue.createElementVNode("div", _hoisted_3$b, [
476342
+ vue.createElementVNode("div", _hoisted_3$c, [
476029
476343
  _cache[18] || (_cache[18] = vue.createElementVNode("span", null, "打印设置", -1)),
476030
476344
  vue.createVNode(_component_el_button, {
476031
476345
  type: "text",
@@ -476045,9 +476359,9 @@ ${this.attributes_.map(
476045
476359
  ])
476046
476360
  ]),
476047
476361
  default: vue.withCtx(() => [
476048
- vue.createElementVNode("div", _hoisted_4$b, [
476362
+ vue.createElementVNode("div", _hoisted_4$c, [
476049
476363
  _cache[21] || (_cache[21] = vue.createElementVNode("label", { class: "block text-sm font-medium text-gray-700 mb-2" }, "纸张设置", -1)),
476050
- vue.createElementVNode("div", _hoisted_5$b, [
476364
+ vue.createElementVNode("div", _hoisted_5$c, [
476051
476365
  vue.createVNode(_component_el_select, {
476052
476366
  modelValue: printSettings.paperSize,
476053
476367
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => printSettings.paperSize = $event),
@@ -476589,17 +476903,17 @@ ${this.attributes_.map(
476589
476903
  const MapPrintDialog_vue_vue_type_style_index_0_lang = "";
476590
476904
  const MarkTab_vue_vue_type_style_index_0_scoped_127b85ab_lang = "";
476591
476905
  const MarkTab_vue_vue_type_style_index_1_lang = "";
476592
- const _hoisted_1$b = { class: "mark-tab-container" };
476593
- const _hoisted_2$a = { class: "continuous-switch" };
476594
- const _hoisted_3$a = { class: "tools-grid" };
476595
- const _hoisted_4$a = ["onClick"];
476596
- const _hoisted_5$a = ["src"];
476906
+ const _hoisted_1$c = { class: "mark-tab-container" };
476907
+ const _hoisted_2$b = { class: "continuous-switch" };
476908
+ const _hoisted_3$b = { class: "tools-grid" };
476909
+ const _hoisted_4$b = ["onClick"];
476910
+ const _hoisted_5$b = ["src"];
476597
476911
  const _hoisted_6$9 = { class: "tool-label" };
476598
476912
  const _hoisted_7$8 = {
476599
476913
  key: 0,
476600
476914
  class: "stop-drawing-section"
476601
476915
  };
476602
- const _sfc_main$c = {
476916
+ const _sfc_main$d = {
476603
476917
  __name: "MarkTab",
476604
476918
  setup(__props) {
476605
476919
  const mapRef = vue.inject("map");
@@ -477122,7 +477436,7 @@ ${this.attributes_.map(
477122
477436
  const _component_el_select = vue.resolveComponent("el-select");
477123
477437
  const _component_el_switch = vue.resolveComponent("el-switch");
477124
477438
  const _component_el_button = vue.resolveComponent("el-button");
477125
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
477439
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
477126
477440
  vue.createVNode(_component_el_select, {
477127
477441
  modelValue: selectedType.value,
477128
477442
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedType.value = $event),
@@ -477140,7 +477454,7 @@ ${this.attributes_.map(
477140
477454
  ]),
477141
477455
  _: 1
477142
477456
  }, 8, ["modelValue"]),
477143
- vue.createElementVNode("div", _hoisted_2$a, [
477457
+ vue.createElementVNode("div", _hoisted_2$b, [
477144
477458
  _cache[2] || (_cache[2] = vue.createElementVNode("span", { class: "switch-label" }, "连续标绘模式", -1)),
477145
477459
  vue.createVNode(_component_el_switch, {
477146
477460
  modelValue: continuousDrawing.value,
@@ -477148,7 +477462,7 @@ ${this.attributes_.map(
477148
477462
  size: "small"
477149
477463
  }, null, 8, ["modelValue"])
477150
477464
  ]),
477151
- vue.createElementVNode("div", _hoisted_3$a, [
477465
+ vue.createElementVNode("div", _hoisted_3$b, [
477152
477466
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(currentTools.value, (tool, idx) => {
477153
477467
  return vue.openBlock(), vue.createElementBlock("div", {
477154
477468
  key: idx,
@@ -477160,12 +477474,12 @@ ${this.attributes_.map(
477160
477474
  src: tool.icon,
477161
477475
  class: "tool-image",
477162
477476
  alt: "tool icon"
477163
- }, null, 8, _hoisted_5$a)) : (vue.openBlock(), vue.createElementBlock("i", {
477477
+ }, null, 8, _hoisted_5$b)) : (vue.openBlock(), vue.createElementBlock("i", {
477164
477478
  key: 1,
477165
477479
  class: vue.normalizeClass([tool.icon, "tool-icon-large"])
477166
477480
  }, null, 2)),
477167
477481
  vue.createElementVNode("span", _hoisted_6$9, vue.toDisplayString(tool.label), 1)
477168
- ], 8, _hoisted_4$a);
477482
+ ], 8, _hoisted_4$b);
477169
477483
  }), 128))
477170
477484
  ]),
477171
477485
  activeDrawingTool.value && continuousDrawing.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$8, [
@@ -477185,19 +477499,19 @@ ${this.attributes_.map(
477185
477499
  };
477186
477500
  }
477187
477501
  };
477188
- const MarkTab = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-127b85ab"]]);
477502
+ const MarkTab = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-127b85ab"]]);
477189
477503
  const ListTab_vue_vue_type_style_index_0_scoped_1cc008ea_lang = "";
477190
- const _hoisted_1$a = { class: "list-tab-container" };
477191
- const _hoisted_2$9 = { class: "toolbar" };
477192
- const _hoisted_3$9 = { class: "toolbar-left" };
477193
- const _hoisted_4$9 = { class: "data-count" };
477194
- const _hoisted_5$9 = { class: "list-content" };
477504
+ const _hoisted_1$b = { class: "list-tab-container" };
477505
+ const _hoisted_2$a = { class: "toolbar" };
477506
+ const _hoisted_3$a = { class: "toolbar-left" };
477507
+ const _hoisted_4$a = { class: "data-count" };
477508
+ const _hoisted_5$a = { class: "list-content" };
477195
477509
  const _hoisted_6$8 = { class: "tree-node" };
477196
477510
  const _hoisted_7$7 = {
477197
477511
  key: 1,
477198
477512
  class: "empty-state"
477199
477513
  };
477200
- const _sfc_main$b = {
477514
+ const _sfc_main$c = {
477201
477515
  __name: "ListTab",
477202
477516
  setup(__props) {
477203
477517
  const groups = vue.ref([
@@ -477218,9 +477532,9 @@ ${this.attributes_.map(
477218
477532
  return (_ctx, _cache) => {
477219
477533
  const _component_el_button = vue.resolveComponent("el-button");
477220
477534
  const _component_el_tree = vue.resolveComponent("el-tree");
477221
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
477222
- vue.createElementVNode("div", _hoisted_2$9, [
477223
- vue.createElementVNode("div", _hoisted_3$9, [
477535
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
477536
+ vue.createElementVNode("div", _hoisted_2$a, [
477537
+ vue.createElementVNode("div", _hoisted_3$a, [
477224
477538
  _cache[2] || (_cache[2] = vue.createElementVNode("span", { class: "toolbar-title" }, "分组管理:", -1)),
477225
477539
  vue.createVNode(_component_el_button, {
477226
477540
  type: "primary",
@@ -477243,9 +477557,9 @@ ${this.attributes_.map(
477243
477557
  _: 1
477244
477558
  })
477245
477559
  ]),
477246
- vue.createElementVNode("div", _hoisted_4$9, "共" + vue.toDisplayString(groups.value.length) + "条数据", 1)
477560
+ vue.createElementVNode("div", _hoisted_4$a, "共" + vue.toDisplayString(groups.value.length) + "条数据", 1)
477247
477561
  ]),
477248
- vue.createElementVNode("div", _hoisted_5$9, [
477562
+ vue.createElementVNode("div", _hoisted_5$a, [
477249
477563
  groups.value.length ? (vue.openBlock(), vue.createBlock(_component_el_tree, {
477250
477564
  key: 0,
477251
477565
  data: groups.value,
@@ -477268,16 +477582,16 @@ ${this.attributes_.map(
477268
477582
  };
477269
477583
  }
477270
477584
  };
477271
- const ListTab = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-1cc008ea"]]);
477585
+ const ListTab = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-1cc008ea"]]);
477272
477586
  const index_vue_vue_type_style_index_0_scoped_16fc7a81_lang = "";
477273
- const _hoisted_1$9 = { class: "dialog-content" };
477274
- const _hoisted_2$8 = { class: "toolbar" };
477275
- const _hoisted_3$8 = { class: "toolbar-left" };
477276
- const _hoisted_4$8 = ["onClick"];
477277
- const _hoisted_5$8 = { class: "toolbar-right" };
477587
+ const _hoisted_1$a = { class: "dialog-content" };
477588
+ const _hoisted_2$9 = { class: "toolbar" };
477589
+ const _hoisted_3$9 = { class: "toolbar-left" };
477590
+ const _hoisted_4$9 = ["onClick"];
477591
+ const _hoisted_5$9 = { class: "toolbar-right" };
477278
477592
  const _hoisted_6$7 = ["onClick"];
477279
477593
  const _hoisted_7$6 = { class: "content-area" };
477280
- const _sfc_main$a = {
477594
+ const _sfc_main$b = {
477281
477595
  __name: "index",
477282
477596
  setup(__props) {
477283
477597
  const visible = vue.ref(true);
@@ -477339,9 +477653,9 @@ ${this.attributes_.map(
477339
477653
  onClose: handleClose
477340
477654
  }, {
477341
477655
  default: vue.withCtx(() => [
477342
- vue.createElementVNode("div", _hoisted_1$9, [
477343
- vue.createElementVNode("div", _hoisted_2$8, [
477344
- vue.createElementVNode("div", _hoisted_3$8, [
477656
+ vue.createElementVNode("div", _hoisted_1$a, [
477657
+ vue.createElementVNode("div", _hoisted_2$9, [
477658
+ vue.createElementVNode("div", _hoisted_3$9, [
477345
477659
  (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(leftTools, (tool, idx) => {
477346
477660
  return vue.createVNode(_component_el_tooltip, {
477347
477661
  key: idx,
@@ -477353,13 +477667,13 @@ ${this.attributes_.map(
477353
477667
  vue.createElementVNode("i", {
477354
477668
  class: vue.normalizeClass([tool.icon, "tool-icon"]),
477355
477669
  onClick: ($event) => handleToolClick(tool, "left", idx)
477356
- }, null, 10, _hoisted_4$8)
477670
+ }, null, 10, _hoisted_4$9)
477357
477671
  ]),
477358
477672
  _: 2
477359
477673
  }, 1032, ["content"]);
477360
477674
  }), 64))
477361
477675
  ]),
477362
- vue.createElementVNode("div", _hoisted_5$8, [
477676
+ vue.createElementVNode("div", _hoisted_5$9, [
477363
477677
  (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(rightTools, (tool, idx) => {
477364
477678
  return vue.createVNode(_component_el_tooltip, {
477365
477679
  key: idx,
@@ -477415,9 +477729,9 @@ ${this.attributes_.map(
477415
477729
  };
477416
477730
  }
477417
477731
  };
477418
- const MapDrawingDialog = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-16fc7a81"]]);
477419
- const _hoisted_1$8 = { class: "flex" };
477420
- const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
477732
+ const MapDrawingDialog = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-16fc7a81"]]);
477733
+ const _hoisted_1$9 = { class: "flex" };
477734
+ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
477421
477735
  __name: "MapToolbar",
477422
477736
  props: {
477423
477737
  config: { default: void 0 },
@@ -477608,7 +477922,7 @@ ${this.attributes_.map(
477608
477922
  class: "main-menu-item"
477609
477923
  }, {
477610
477924
  title: vue.withCtx(() => [
477611
- vue.createElementVNode("div", _hoisted_1$8, [
477925
+ vue.createElementVNode("div", _hoisted_1$9, [
477612
477926
  vue.createElementVNode("div", null, [
477613
477927
  vue.createVNode(_component_el_icon, null, {
477614
477928
  default: vue.withCtx(() => [
@@ -477785,7 +478099,7 @@ ${this.attributes_.map(
477785
478099
  ]),
477786
478100
  _: 1
477787
478101
  }, 8, ["default-active"]),
477788
- vue.createVNode(_sfc_main$j, {
478102
+ vue.createVNode(_sfc_main$k, {
477789
478103
  modelValue: showBasemapPanel.value,
477790
478104
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => showBasemapPanel.value = $event),
477791
478105
  config: props.config,
@@ -477796,28 +478110,28 @@ ${this.attributes_.map(
477796
478110
  modelValue: showMeasurement.value,
477797
478111
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => showMeasurement.value = $event)
477798
478112
  }, null, 8, ["modelValue"]),
477799
- vue.createVNode(_sfc_main$h, {
478113
+ vue.createVNode(_sfc_main$i, {
477800
478114
  ref_key: "coordinateLocationDialogRef",
477801
478115
  ref: coordinateLocationDialogRef,
477802
478116
  modelValue: showCoordinateLocation.value,
477803
478117
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => showCoordinateLocation.value = $event)
477804
478118
  }, null, 8, ["modelValue"]),
477805
- vue.createVNode(_sfc_main$g, {
478119
+ vue.createVNode(_sfc_main$h, {
477806
478120
  modelValue: showRegionNavigation.value,
477807
478121
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => showRegionNavigation.value = $event),
477808
478122
  onNavigationAction: handleNavigationAction
477809
478123
  }, null, 8, ["modelValue"]),
477810
- vue.createVNode(_sfc_main$f, {
478124
+ vue.createVNode(_sfc_main$g, {
477811
478125
  modelValue: showMyMarkers.value,
477812
478126
  "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => showMyMarkers.value = $event),
477813
478127
  onMarkerAction: handleMarkerAction
477814
478128
  }, null, 8, ["modelValue"]),
477815
- vue.createVNode(_sfc_main$e, {
478129
+ vue.createVNode(_sfc_main$f, {
477816
478130
  modelValue: showViewBookmarks.value,
477817
478131
  "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => showViewBookmarks.value = $event),
477818
478132
  onBookmarkAction: handleBookmarkAction
477819
478133
  }, null, 8, ["modelValue"]),
477820
- vue.createVNode(_sfc_main$d, {
478134
+ vue.createVNode(_sfc_main$e, {
477821
478135
  modelValue: showMapPrint.value,
477822
478136
  "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => showMapPrint.value = $event),
477823
478137
  onPrintAction: handlePrintAction
@@ -477832,7 +478146,7 @@ ${this.attributes_.map(
477832
478146
  }
477833
478147
  });
477834
478148
  const MapToolbar_vue_vue_type_style_index_0_scoped_f8ee8458_lang = "";
477835
- const MapToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-f8ee8458"]]);
478149
+ const MapToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-f8ee8458"]]);
477836
478150
  const TIANDITU_CONFIG = {
477837
478151
  baseUrl: "https://api.tianditu.gov.cn/v2/search",
477838
478152
  key: "9a7244dd5d1a1299a52946a3d0f8ff68"
@@ -478492,14 +478806,14 @@ ${this.attributes_.map(
478492
478806
  MapSearchService,
478493
478807
  defaultSearchConfig
478494
478808
  }, Symbol.toStringTag, { value: "Module" }));
478495
- const _hoisted_1$7 = { class: "search-input-wrapper" };
478496
- const _hoisted_2$7 = { class: "search-results" };
478497
- const _hoisted_3$7 = {
478809
+ const _hoisted_1$8 = { class: "search-input-wrapper" };
478810
+ const _hoisted_2$8 = { class: "search-results" };
478811
+ const _hoisted_3$8 = {
478498
478812
  key: 0,
478499
478813
  class: "search-section"
478500
478814
  };
478501
- const _hoisted_4$7 = { class: "section-title" };
478502
- const _hoisted_5$7 = ["onClick"];
478815
+ const _hoisted_4$8 = { class: "section-title" };
478816
+ const _hoisted_5$8 = ["onClick"];
478503
478817
  const _hoisted_6$6 = { class: "item-content" };
478504
478818
  const _hoisted_7$5 = { class: "item-name" };
478505
478819
  const _hoisted_8$5 = { class: "item-address" };
@@ -478528,7 +478842,7 @@ ${this.attributes_.map(
478528
478842
  key: 0,
478529
478843
  class: "no-results"
478530
478844
  };
478531
- const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
478845
+ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
478532
478846
  __name: "MapSearch",
478533
478847
  props: {
478534
478848
  config: { default: () => ({
@@ -478773,7 +479087,7 @@ ${this.attributes_.map(
478773
479087
  class: vue.normalizeClass(["map-search-container", [`position-${position2.value}`, { "search-active": isSearchActive.value }]])
478774
479088
  }, [
478775
479089
  vue.renderSlot(_ctx.$slots, "prepend"),
478776
- vue.createElementVNode("div", _hoisted_1$7, [
479090
+ vue.createElementVNode("div", _hoisted_1$8, [
478777
479091
  vue.renderSlot(_ctx.$slots, "search-input", {
478778
479092
  searchQuery: searchQuery.value,
478779
479093
  placeholder: placeholder.value,
@@ -478829,7 +479143,7 @@ ${this.attributes_.map(
478829
479143
  }, 8, ["modelValue", "placeholder"])
478830
479144
  ])
478831
479145
  ]),
478832
- vue.withDirectives(vue.createElementVNode("div", _hoisted_2$7, [
479146
+ vue.withDirectives(vue.createElementVNode("div", _hoisted_2$8, [
478833
479147
  vue.renderSlot(_ctx.$slots, "search-results", {
478834
479148
  searchResults: searchResults.value,
478835
479149
  searchHistory: searchHistory.value,
@@ -478841,9 +479155,9 @@ ${this.attributes_.map(
478841
479155
  clearHistory,
478842
479156
  highlightText
478843
479157
  }, () => [
478844
- showHistory.value && searchHistory.value.length > 0 && !searchQuery.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$7, [
479158
+ showHistory.value && searchHistory.value.length > 0 && !searchQuery.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$8, [
478845
479159
  vue.renderSlot(_ctx.$slots, "history-title", { clearHistory }, () => [
478846
- vue.createElementVNode("div", _hoisted_4$7, [
479160
+ vue.createElementVNode("div", _hoisted_4$8, [
478847
479161
  _cache[2] || (_cache[2] = vue.createElementVNode("span", null, "搜索历史", -1)),
478848
479162
  vue.createVNode(vue.unref(ElButton), {
478849
479163
  type: "text",
@@ -478879,7 +479193,7 @@ ${this.attributes_.map(
478879
479193
  vue.createElementVNode("div", _hoisted_7$5, vue.toDisplayString(item.name), 1),
478880
479194
  vue.createElementVNode("div", _hoisted_8$5, vue.toDisplayString(item.address), 1)
478881
479195
  ])
478882
- ], 10, _hoisted_5$7)
479196
+ ], 10, _hoisted_5$8)
478883
479197
  ]);
478884
479198
  }), 128))
478885
479199
  ])) : vue.createCommentVNode("", true),
@@ -478954,7 +479268,7 @@ ${this.attributes_.map(
478954
479268
  }
478955
479269
  });
478956
479270
  const MapSearch_vue_vue_type_style_index_0_lang = "";
478957
- const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
479271
+ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
478958
479272
  __name: "index",
478959
479273
  props: {
478960
479274
  config: {},
@@ -479501,12 +479815,12 @@ ${this.attributes_.map(
479501
479815
  }
479502
479816
  });
479503
479817
  const index_vue_vue_type_style_index_0_scoped_45410a30_lang = "";
479504
- const MapControls = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-45410a30"]]);
479505
- const _hoisted_1$6 = { class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 bg-gray-50 rounded-t-lg" };
479506
- const _hoisted_2$6 = { class: "panel-actions" };
479507
- const _hoisted_3$6 = { class: "panel-content max-h-125 overflow-y-auto" };
479508
- const _hoisted_4$6 = { class: "p-2" };
479509
- const _hoisted_5$6 = { class: "legend-content p-2" };
479818
+ const MapControls = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-45410a30"]]);
479819
+ const _hoisted_1$7 = { class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 bg-gray-50 rounded-t-lg" };
479820
+ const _hoisted_2$7 = { class: "panel-actions" };
479821
+ const _hoisted_3$7 = { class: "panel-content max-h-125 overflow-y-auto" };
479822
+ const _hoisted_4$7 = { class: "p-2" };
479823
+ const _hoisted_5$7 = { class: "legend-content p-2" };
479510
479824
  const _hoisted_6$5 = { key: 0 };
479511
479825
  const _hoisted_7$4 = { class: "text-xs text-gray-600" };
479512
479826
  const _hoisted_8$4 = { key: 1 };
@@ -479537,7 +479851,7 @@ ${this.attributes_.map(
479537
479851
  key: 1,
479538
479852
  class: "py-10 px-5 text-center"
479539
479853
  };
479540
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
479854
+ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
479541
479855
  __name: "LegendPanel",
479542
479856
  props: {
479543
479857
  position: { default: "right" },
@@ -479747,9 +480061,9 @@ ${this.attributes_.map(
479747
480061
  class: vue.normalizeClass(["custom-legend-box absolute bg-white rounded-lg bottom-40px shadow-lg transition-all duration-300 max-h-[calc(100vh-40px)] overflow-hidden z-1000", { "legend-collapsed": isCollapsed.value }]),
479748
480062
  style: vue.normalizeStyle(panelStyle.value)
479749
480063
  }, [
479750
- vue.createElementVNode("div", _hoisted_1$6, [
480064
+ vue.createElementVNode("div", _hoisted_1$7, [
479751
480065
  _cache[1] || (_cache[1] = vue.createElementVNode("h3", { class: "m-0 text-sm font-semibold text-gray-800" }, "图例", -1)),
479752
- vue.createElementVNode("div", _hoisted_2$6, [
480066
+ vue.createElementVNode("div", _hoisted_2$7, [
479753
480067
  vue.createVNode(_component_el_button, {
479754
480068
  link: "",
479755
480069
  size: "small",
@@ -479758,8 +480072,8 @@ ${this.attributes_.map(
479758
480072
  }, null, 8, ["icon"])
479759
480073
  ])
479760
480074
  ]),
479761
- vue.createElementVNode("div", _hoisted_3$6, [
479762
- vue.createElementVNode("div", _hoisted_4$6, [
480075
+ vue.createElementVNode("div", _hoisted_3$7, [
480076
+ vue.createElementVNode("div", _hoisted_4$7, [
479763
480077
  visibleLegends.value.length > 0 ? (vue.openBlock(), vue.createBlock(_component_el_collapse, {
479764
480078
  key: 0,
479765
480079
  modelValue: activeNames.value,
@@ -479775,7 +480089,7 @@ ${this.attributes_.map(
479775
480089
  class: "legend-item"
479776
480090
  }, {
479777
480091
  default: vue.withCtx(() => [
479778
- vue.createElementVNode("div", _hoisted_5$6, [
480092
+ vue.createElementVNode("div", _hoisted_5$7, [
479779
480093
  legend.type === "symbol" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$5, [
479780
480094
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(legend.items, (item) => {
479781
480095
  return vue.openBlock(), vue.createElementBlock("div", {
@@ -480279,8 +480593,12 @@ ${this.attributes_.map(
480279
480593
  __publicField(this, "defaultCheckedKeys", vue.computed(() => {
480280
480594
  const checkedKeys = [];
480281
480595
  const collectVisibleIds = (layer2) => {
480282
- if (layer2.visible && layer2.type !== "group") {
480283
- checkedKeys.push(layer2.id);
480596
+ if (layer2.visible) {
480597
+ const isGroup = layer2.type === "group";
480598
+ const hasChildren = layer2.children && Array.isArray(layer2.children) && layer2.children.length > 0;
480599
+ if (!isGroup || isGroup && !hasChildren) {
480600
+ checkedKeys.push(layer2.id);
480601
+ }
480284
480602
  }
480285
480603
  if (layer2.children && Array.isArray(layer2.children)) {
480286
480604
  layer2.children.forEach((child) => collectVisibleIds(child));
@@ -480321,10 +480639,11 @@ ${this.attributes_.map(
480321
480639
  * @returns 树节点数据
480322
480640
  */
480323
480641
  buildLayerNode(layer2) {
480642
+ const isGroup = layer2.type === "group" || layer2.children && Array.isArray(layer2.children) && layer2.children.length > 0;
480324
480643
  const node2 = {
480325
480644
  id: layer2.id,
480326
480645
  label: layer2.name,
480327
- type: "layer",
480646
+ type: isGroup ? "group" : "layer",
480328
480647
  layerType: layer2.type,
480329
480648
  layerData: layer2
480330
480649
  };
@@ -480978,11 +481297,11 @@ ${this.attributes_.map(
480978
481297
  console.log("批量更新结果:", results);
480979
481298
  }
480980
481299
  }
480981
- const _hoisted_1$5 = { class: "filter-panel" };
480982
- const _hoisted_2$5 = { class: "config-section" };
480983
- const _hoisted_3$5 = { class: "config-item" };
480984
- const _hoisted_4$5 = { class: "value-text" };
480985
- const _hoisted_5$5 = { class: "config-item" };
481300
+ const _hoisted_1$6 = { class: "filter-panel" };
481301
+ const _hoisted_2$6 = { class: "config-section" };
481302
+ const _hoisted_3$6 = { class: "config-item" };
481303
+ const _hoisted_4$6 = { class: "value-text" };
481304
+ const _hoisted_5$6 = { class: "config-item" };
480986
481305
  const _hoisted_6$4 = { class: "value-text" };
480987
481306
  const _hoisted_7$3 = { class: "config-item" };
480988
481307
  const _hoisted_8$3 = { class: "value-text" };
@@ -480999,7 +481318,7 @@ ${this.attributes_.map(
480999
481318
  const _hoisted_19 = { class: "value-text" };
481000
481319
  const _hoisted_20 = { class: "config-section" };
481001
481320
  const _hoisted_21 = { class: "preset-buttons" };
481002
- const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
481321
+ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
481003
481322
  __name: "FilterPanel",
481004
481323
  props: {
481005
481324
  filters: {}
@@ -481019,10 +481338,10 @@ ${this.attributes_.map(
481019
481338
  return (_ctx, _cache) => {
481020
481339
  const _component_el_slider = vue.resolveComponent("el-slider");
481021
481340
  const _component_el_button = vue.resolveComponent("el-button");
481022
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
481023
- vue.createElementVNode("div", _hoisted_2$5, [
481341
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
481342
+ vue.createElementVNode("div", _hoisted_2$6, [
481024
481343
  _cache[15] || (_cache[15] = vue.createElementVNode("h5", null, "色彩调整", -1)),
481025
- vue.createElementVNode("div", _hoisted_3$5, [
481344
+ vue.createElementVNode("div", _hoisted_3$6, [
481026
481345
  _cache[11] || (_cache[11] = vue.createElementVNode("label", null, "色相:", -1)),
481027
481346
  vue.createVNode(_component_el_slider, {
481028
481347
  modelValue: _ctx.filters.hue,
@@ -481032,9 +481351,9 @@ ${this.attributes_.map(
481032
481351
  step: 1,
481033
481352
  onInput: handleFilterChange
481034
481353
  }, null, 8, ["modelValue"]),
481035
- vue.createElementVNode("span", _hoisted_4$5, vue.toDisplayString(_ctx.filters.hue) + "°", 1)
481354
+ vue.createElementVNode("span", _hoisted_4$6, vue.toDisplayString(_ctx.filters.hue) + "°", 1)
481036
481355
  ]),
481037
- vue.createElementVNode("div", _hoisted_5$5, [
481356
+ vue.createElementVNode("div", _hoisted_5$6, [
481038
481357
  _cache[12] || (_cache[12] = vue.createElementVNode("label", null, "饱和度:", -1)),
481039
481358
  vue.createVNode(_component_el_slider, {
481040
481359
  modelValue: _ctx.filters.saturate,
@@ -481170,14 +481489,14 @@ ${this.attributes_.map(
481170
481489
  }
481171
481490
  });
481172
481491
  const FilterPanel_vue_vue_type_style_index_0_lang = "";
481173
- const _hoisted_1$4 = { class: "style-config-panel" };
481174
- const _hoisted_2$4 = { class: "panel-title" };
481175
- const _hoisted_3$4 = {
481492
+ const _hoisted_1$5 = { class: "style-config-panel" };
481493
+ const _hoisted_2$5 = { class: "panel-title" };
481494
+ const _hoisted_3$5 = {
481176
481495
  key: 0,
481177
481496
  class: "config-section"
481178
481497
  };
481179
- const _hoisted_4$4 = { class: "config-item" };
481180
- const _hoisted_5$4 = { class: "value-text" };
481498
+ const _hoisted_4$5 = { class: "config-item" };
481499
+ const _hoisted_5$5 = { class: "value-text" };
481181
481500
  const _hoisted_6$3 = { class: "config-item" };
481182
481501
  const _hoisted_7$2 = { class: "value-text" };
481183
481502
  const _hoisted_8$2 = {
@@ -481189,7 +481508,7 @@ ${this.attributes_.map(
481189
481508
  const _hoisted_11$1 = { class: "config-item" };
481190
481509
  const _hoisted_12$1 = { class: "config-item" };
481191
481510
  const _hoisted_13$1 = { class: "panel-actions" };
481192
- const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
481511
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
481193
481512
  __name: "LayerStyleConfig",
481194
481513
  props: {
481195
481514
  layerData: {}
@@ -481220,11 +481539,11 @@ ${this.attributes_.map(
481220
481539
  const _component_el_select = vue.resolveComponent("el-select");
481221
481540
  const _component_el_switch = vue.resolveComponent("el-switch");
481222
481541
  const _component_el_button = vue.resolveComponent("el-button");
481223
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
481224
- vue.createElementVNode("h4", _hoisted_2$4, vue.toDisplayString(_ctx.layerData.label) + " - 样式配置", 1),
481225
- isClusterLayer.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$4, [
481542
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
481543
+ vue.createElementVNode("h4", _hoisted_2$5, vue.toDisplayString(_ctx.layerData.label) + " - 样式配置", 1),
481544
+ isClusterLayer.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$5, [
481226
481545
  _cache[8] || (_cache[8] = vue.createElementVNode("h5", null, "聚合配置", -1)),
481227
- vue.createElementVNode("div", _hoisted_4$4, [
481546
+ vue.createElementVNode("div", _hoisted_4$5, [
481228
481547
  _cache[6] || (_cache[6] = vue.createElementVNode("label", null, "聚合距离:", -1)),
481229
481548
  vue.createVNode(_component_el_slider, {
481230
481549
  modelValue: _ctx.layerData.clusterDistance,
@@ -481234,7 +481553,7 @@ ${this.attributes_.map(
481234
481553
  size: "small",
481235
481554
  onInput: handleClusterDistanceChange
481236
481555
  }, null, 8, ["modelValue"]),
481237
- vue.createElementVNode("span", _hoisted_5$4, vue.toDisplayString(_ctx.layerData.clusterDistance) + "px", 1)
481556
+ vue.createElementVNode("span", _hoisted_5$5, vue.toDisplayString(_ctx.layerData.clusterDistance) + "px", 1)
481238
481557
  ]),
481239
481558
  vue.createElementVNode("div", _hoisted_6$3, [
481240
481559
  _cache[7] || (_cache[7] = vue.createElementVNode("label", null, "最小距离:", -1)),
@@ -481320,12 +481639,12 @@ ${this.attributes_.map(
481320
481639
  }
481321
481640
  });
481322
481641
  const LayerStyleConfig_vue_vue_type_style_index_0_lang = "";
481323
- const _hoisted_1$3 = { class: "font-medium" };
481324
- const _hoisted_2$3 = { class: "layer-info" };
481325
- const _hoisted_3$3 = { class: "layer-name" };
481326
- const _hoisted_4$3 = { class: "opacity-control" };
481327
- const _hoisted_5$3 = { class: "opacity-value" };
481328
- const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
481642
+ const _hoisted_1$4 = { class: "font-medium" };
481643
+ const _hoisted_2$4 = { class: "layer-info" };
481644
+ const _hoisted_3$4 = { class: "layer-name" };
481645
+ const _hoisted_4$4 = { class: "opacity-control" };
481646
+ const _hoisted_5$4 = { class: "opacity-value" };
481647
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
481329
481648
  __name: "LayerTreeNode",
481330
481649
  props: {
481331
481650
  data: {},
@@ -481377,7 +481696,7 @@ ${this.attributes_.map(
481377
481696
  ]),
481378
481697
  _: 1
481379
481698
  }),
481380
- vue.createElementVNode("span", _hoisted_1$3, vue.toDisplayString(_ctx.data.label), 1)
481699
+ vue.createElementVNode("span", _hoisted_1$4, vue.toDisplayString(_ctx.data.label), 1)
481381
481700
  ], 32)) : (vue.openBlock(), vue.createElementBlock("div", {
481382
481701
  key: 1,
481383
481702
  class: "layer-item",
@@ -481385,7 +481704,7 @@ ${this.attributes_.map(
481385
481704
  onClick: _cache[5] || (_cache[5] = vue.withModifiers(() => {
481386
481705
  }, ["stop"]))
481387
481706
  }, [
481388
- vue.createElementVNode("div", _hoisted_2$3, [
481707
+ vue.createElementVNode("div", _hoisted_2$4, [
481389
481708
  vue.createVNode(_component_el_icon, {
481390
481709
  class: vue.normalizeClass(["layer-icon", layerIconClass.value])
481391
481710
  }, {
@@ -481394,7 +481713,7 @@ ${this.attributes_.map(
481394
481713
  ]),
481395
481714
  _: 1
481396
481715
  }, 8, ["class"]),
481397
- vue.createElementVNode("span", _hoisted_3$3, vue.toDisplayString(_ctx.data.label), 1)
481716
+ vue.createElementVNode("span", _hoisted_3$4, vue.toDisplayString(_ctx.data.label), 1)
481398
481717
  ]),
481399
481718
  vue.createElementVNode("div", {
481400
481719
  class: "layer-controls",
@@ -481405,7 +481724,7 @@ ${this.attributes_.map(
481405
481724
  onDblclick: _cache[4] || (_cache[4] = vue.withModifiers(() => {
481406
481725
  }, ["stop"]))
481407
481726
  }, [
481408
- vue.createElementVNode("div", _hoisted_4$3, [
481727
+ vue.createElementVNode("div", _hoisted_4$4, [
481409
481728
  vue.createVNode(_component_el_slider, {
481410
481729
  modelValue: _ctx.data.layerData.opacity,
481411
481730
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.data.layerData.opacity = $event),
@@ -481415,7 +481734,7 @@ ${this.attributes_.map(
481415
481734
  class: "opacity-slider",
481416
481735
  onInput: handleOpacityChange
481417
481736
  }, null, 8, ["modelValue"]),
481418
- vue.createElementVNode("span", _hoisted_5$3, vue.toDisplayString(_ctx.data.layerData.opacity) + "%", 1)
481737
+ vue.createElementVNode("span", _hoisted_5$4, vue.toDisplayString(_ctx.data.layerData.opacity) + "%", 1)
481419
481738
  ]),
481420
481739
  vue.createVNode(_component_el_popover, {
481421
481740
  placement: "left",
@@ -481444,7 +481763,7 @@ ${this.attributes_.map(
481444
481763
  })
481445
481764
  ]),
481446
481765
  default: vue.withCtx(() => [
481447
- vue.createVNode(_sfc_main$4, {
481766
+ vue.createVNode(_sfc_main$5, {
481448
481767
  "layer-data": _ctx.data.layerData,
481449
481768
  onClusterDistanceChange: handleClusterDistanceChange,
481450
481769
  onSuperMapConfigChange: handleSuperMapConfigChange,
@@ -481460,15 +481779,15 @@ ${this.attributes_.map(
481460
481779
  }
481461
481780
  });
481462
481781
  const LayerTreeNode_vue_vue_type_style_index_0_lang = "";
481463
- const _hoisted_1$2 = { class: "flex-1 overflow-y-auto p-4" };
481464
- const _hoisted_2$2 = { class: "pb-2 flex items-center justify-between" };
481465
- const _hoisted_3$2 = { class: "text-xs font-semibold text-gray-700 px-1 py-1 border-b border-gray-200 mb-2" };
481466
- const _hoisted_4$2 = { class: "global-style-panel" };
481467
- const _hoisted_5$2 = { class: "config-section" };
481782
+ const _hoisted_1$3 = { class: "flex-1 overflow-y-auto p-4" };
481783
+ const _hoisted_2$3 = { class: "pb-2 flex items-center justify-between" };
481784
+ const _hoisted_3$3 = { class: "text-xs font-semibold text-gray-700 px-1 py-1 border-b border-gray-200 mb-2" };
481785
+ const _hoisted_4$3 = { class: "global-style-panel" };
481786
+ const _hoisted_5$3 = { class: "config-section" };
481468
481787
  const _hoisted_6$2 = { class: "config-item" };
481469
481788
  const _hoisted_7$1 = { class: "current-style-display" };
481470
481789
  const _hoisted_8$1 = { class: "style-preview" };
481471
- const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
481790
+ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
481472
481791
  __name: "LayerPanel",
481473
481792
  props: {
481474
481793
  modelValue: { type: Boolean }
@@ -481591,7 +481910,7 @@ ${this.attributes_.map(
481591
481910
  }
481592
481911
  const willCheck = checkedKeys ? checkedKeys.includes(data2.id) : !defaultCheckedKeys.value.includes(data2.id);
481593
481912
  const toggleNodeAndChildren = (node2, checked) => {
481594
- if (node2.type === "layer" && node2.layerData) {
481913
+ if ((node2.type === "layer" || node2.type === "group") && node2.layerData) {
481595
481914
  node2.layerData.visible = checked;
481596
481915
  handleLayerVisibilityChange(node2.layerData);
481597
481916
  if (node2.layerData.type === "group") {
@@ -482306,7 +482625,7 @@ ${this.attributes_.map(
482306
482625
  const _component_el_tree = vue.resolveComponent("el-tree");
482307
482626
  const _component_el_tab_pane = vue.resolveComponent("el-tab-pane");
482308
482627
  const _component_el_tabs = vue.resolveComponent("el-tabs");
482309
- return vue.openBlock(), vue.createBlock(_sfc_main$k, vue.mergeProps({
482628
+ return vue.openBlock(), vue.createBlock(_sfc_main$l, vue.mergeProps({
482310
482629
  modelValue: visible.value,
482311
482630
  "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => visible.value = $event)
482312
482631
  }, dialogProps.value, { onClose: handleClose }), vue.createSlots({
@@ -482344,8 +482663,8 @@ ${this.attributes_.map(
482344
482663
  name: "layers"
482345
482664
  }, {
482346
482665
  default: vue.withCtx(() => [
482347
- vue.createElementVNode("div", _hoisted_1$2, [
482348
- vue.createElementVNode("div", _hoisted_2$2, [
482666
+ vue.createElementVNode("div", _hoisted_1$3, [
482667
+ vue.createElementVNode("div", _hoisted_2$3, [
482349
482668
  _cache[7] || (_cache[7] = vue.createElementVNode("div", { class: "text-sm text-gray-600" }, "树形视图", -1)),
482350
482669
  vue.createVNode(_component_el_radio_group, {
482351
482670
  modelValue: activeTreeType.value,
@@ -482391,7 +482710,7 @@ ${this.attributes_.map(
482391
482710
  class: "layer-tree"
482392
482711
  }, {
482393
482712
  default: vue.withCtx(({ node: node2, data: data2 }) => [
482394
- vue.createVNode(_sfc_main$3, {
482713
+ vue.createVNode(_sfc_main$4, {
482395
482714
  data: data2,
482396
482715
  "layer-tree-manager": vue.unref(layerTreeManager),
482397
482716
  onDoubleClick: handleLayerDoubleClick,
@@ -482407,7 +482726,7 @@ ${this.attributes_.map(
482407
482726
  key: group2.id,
482408
482727
  class: "mb-3"
482409
482728
  }, [
482410
- vue.createElementVNode("div", _hoisted_3$2, vue.toDisplayString(group2.name), 1),
482729
+ vue.createElementVNode("div", _hoisted_3$3, vue.toDisplayString(group2.name), 1),
482411
482730
  vue.createVNode(_component_el_tree, {
482412
482731
  ref_for: true,
482413
482732
  ref: (el) => classificationTreeRefs.value[group2.id] = el,
@@ -482429,7 +482748,7 @@ ${this.attributes_.map(
482429
482748
  class: "layer-tree"
482430
482749
  }, {
482431
482750
  default: vue.withCtx(({ node: node2, data: data2 }) => [
482432
- vue.createVNode(_sfc_main$3, {
482751
+ vue.createVNode(_sfc_main$4, {
482433
482752
  data: data2,
482434
482753
  "layer-tree-manager": vue.unref(layerTreeManager),
482435
482754
  onDoubleClick: handleLayerDoubleClick,
@@ -482452,7 +482771,7 @@ ${this.attributes_.map(
482452
482771
  name: "style"
482453
482772
  }, {
482454
482773
  default: vue.withCtx(() => [
482455
- vue.createElementVNode("div", _hoisted_4$2, [
482774
+ vue.createElementVNode("div", _hoisted_4$3, [
482456
482775
  vue.createVNode(_component_el_tabs, {
482457
482776
  modelValue: activeStyleTab.value,
482458
482777
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => activeStyleTab.value = $event),
@@ -482464,7 +482783,7 @@ ${this.attributes_.map(
482464
482783
  name: "filters"
482465
482784
  }, {
482466
482785
  default: vue.withCtx(() => [
482467
- vue.createVNode(_sfc_main$5, {
482786
+ vue.createVNode(_sfc_main$6, {
482468
482787
  filters: vue.unref(globalFilters),
482469
482788
  onFilterChange: applyFilterEffect,
482470
482789
  onReset: resetFilters,
@@ -482478,7 +482797,7 @@ ${this.attributes_.map(
482478
482797
  name: "custom"
482479
482798
  }, {
482480
482799
  default: vue.withCtx(() => [
482481
- vue.createElementVNode("div", _hoisted_5$2, [
482800
+ vue.createElementVNode("div", _hoisted_5$3, [
482482
482801
  vue.createElementVNode("div", _hoisted_6$2, [
482483
482802
  vue.createVNode(vue.unref(ElInput), {
482484
482803
  modelValue: vue.unref(globalCustomCss),
@@ -482550,6 +482869,151 @@ ${this.attributes_.map(
482550
482869
  }
482551
482870
  });
482552
482871
  const LayerPanel_vue_vue_type_style_index_0_lang = "";
482872
+ const _hoisted_1$2 = { class: "layer-panel" };
482873
+ const _hoisted_2$2 = ["onClick"];
482874
+ const _hoisted_3$2 = ["title"];
482875
+ const _hoisted_4$2 = {
482876
+ key: 0,
482877
+ class: "active-border"
482878
+ };
482879
+ const _hoisted_5$2 = { class: "layer-name" };
482880
+ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
482881
+ __name: "OlBaseLayerSwitcher",
482882
+ props: {
482883
+ map: {},
482884
+ baseLayers: {}
482885
+ },
482886
+ setup(__props) {
482887
+ const props = __props;
482888
+ const expand = vue.ref(false);
482889
+ const validBaseLayers = vue.computed(() => {
482890
+ return props.baseLayers.filter((layer2) => layer2.baseImgUrl && layer2.baseImgUrl.trim() !== "");
482891
+ });
482892
+ const containerStyle = vue.computed(() => {
482893
+ if (!expand.value) {
482894
+ return { width: "96px" };
482895
+ }
482896
+ const count2 = validBaseLayers.value.length;
482897
+ if (count2 === 0)
482898
+ return { width: "96px" };
482899
+ const width = count2 * 86 + (count2 - 1) * 10 + 10;
482900
+ return { width: `${width}px` };
482901
+ });
482902
+ const currentLayer = vue.ref(null);
482903
+ vue.watch(() => props.baseLayers, (layers) => {
482904
+ if (!currentLayer.value) {
482905
+ const visibleLayer = layers.find((l2) => l2.visible && l2.baseImgUrl);
482906
+ if (visibleLayer) {
482907
+ currentLayer.value = visibleLayer;
482908
+ } else if (validBaseLayers.value.length > 0) {
482909
+ currentLayer.value = validBaseLayers.value[0];
482910
+ }
482911
+ }
482912
+ }, { deep: true, immediate: true });
482913
+ const switchLayer = (targetLayer) => {
482914
+ if (!props.map)
482915
+ return;
482916
+ currentLayer.value = targetLayer;
482917
+ layerEventBus.emit("basemap-switch-request", {
482918
+ basemapId: targetLayer.id,
482919
+ basemapName: targetLayer.name,
482920
+ basemapType: targetLayer.type,
482921
+ basemapConfig: targetLayer
482922
+ });
482923
+ props.baseLayers.forEach((layerConfig) => {
482924
+ const isVisible2 = layerConfig.id === targetLayer.id;
482925
+ setLayerVisibility(layerConfig, isVisible2);
482926
+ });
482927
+ expand.value = false;
482928
+ };
482929
+ const setLayerVisibility = (config, visible) => {
482930
+ config.visible = visible;
482931
+ if (config.type === "group") {
482932
+ if (config.layers) {
482933
+ config.layers.forEach((child) => setLayerVisibility(child, visible));
482934
+ }
482935
+ if (config.children) {
482936
+ config.children.forEach((child) => setLayerVisibility(child, visible));
482937
+ }
482938
+ }
482939
+ if (config.id) {
482940
+ const layer2 = findLayerById(props.map, config.id);
482941
+ if (layer2) {
482942
+ layer2.setVisible(visible);
482943
+ }
482944
+ }
482945
+ };
482946
+ const findLayerById = (map2, id2) => {
482947
+ const layers = map2.getLayers().getArray();
482948
+ return findLayerRecursive(layers, id2);
482949
+ };
482950
+ const findLayerRecursive = (layers, id2) => {
482951
+ for (const layer2 of layers) {
482952
+ if (layer2.get("id") === id2) {
482953
+ return layer2;
482954
+ }
482955
+ if (layer2.getLayers && typeof layer2.getLayers === "function") {
482956
+ const found = findLayerRecursive(layer2.getLayers().getArray(), id2);
482957
+ if (found)
482958
+ return found;
482959
+ }
482960
+ }
482961
+ return null;
482962
+ };
482963
+ return (_ctx, _cache) => {
482964
+ var _a3, _b3;
482965
+ return vue.openBlock(), vue.createElementBlock("div", {
482966
+ class: vue.normalizeClass(["ol-base-layer-switcher", { "is-expanded": expand.value }]),
482967
+ style: vue.normalizeStyle(containerStyle.value),
482968
+ onMouseenter: _cache[0] || (_cache[0] = ($event) => expand.value = true),
482969
+ onMouseleave: _cache[1] || (_cache[1] = ($event) => expand.value = false)
482970
+ }, [
482971
+ vue.createElementVNode("div", _hoisted_1$2, [
482972
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(validBaseLayers.value, (layer2) => {
482973
+ var _a4, _b4;
482974
+ return vue.openBlock(), vue.createElementBlock("div", {
482975
+ key: layer2.id,
482976
+ class: vue.normalizeClass(["layer-item", { active: ((_a4 = currentLayer.value) == null ? void 0 : _a4.id) === layer2.id }]),
482977
+ onClick: ($event) => switchLayer(layer2),
482978
+ style: vue.normalizeStyle({ backgroundImage: `url(${layer2.baseImgUrl})` })
482979
+ }, [
482980
+ vue.createElementVNode("div", {
482981
+ class: "layer-name",
482982
+ title: layer2.name
482983
+ }, vue.toDisplayString(layer2.name), 9, _hoisted_3$2),
482984
+ ((_b4 = currentLayer.value) == null ? void 0 : _b4.id) === layer2.id ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, [..._cache[2] || (_cache[2] = [
482985
+ vue.createElementVNode("div", { class: "check-icon" }, [
482986
+ vue.createElementVNode("svg", {
482987
+ viewBox: "0 0 1024 1024",
482988
+ width: "16",
482989
+ height: "16"
482990
+ }, [
482991
+ vue.createElementVNode("path", {
482992
+ d: "M384 725.333333l-192-192 64-64 128 128 320-320 64 64z",
482993
+ fill: "#fff"
482994
+ })
482995
+ ])
482996
+ ], -1)
482997
+ ])])) : vue.createCommentVNode("", true)
482998
+ ], 14, _hoisted_2$2);
482999
+ }), 128))
483000
+ ]),
483001
+ vue.createElementVNode("div", {
483002
+ class: vue.normalizeClass(["layer-trigger", { "is-hidden": expand.value }])
483003
+ }, [
483004
+ vue.createElementVNode("div", {
483005
+ class: "current-layer-box",
483006
+ style: vue.normalizeStyle({ backgroundImage: `url(${(_a3 = currentLayer.value) == null ? void 0 : _a3.baseImgUrl})` })
483007
+ }, [
483008
+ vue.createElementVNode("div", _hoisted_5$2, vue.toDisplayString((_b3 = currentLayer.value) == null ? void 0 : _b3.name), 1)
483009
+ ], 4)
483010
+ ], 2)
483011
+ ], 38);
483012
+ };
483013
+ }
483014
+ });
483015
+ const OlBaseLayerSwitcher_vue_vue_type_style_index_0_scoped_396e5ed1_lang = "";
483016
+ const OlBaseLayerSwitcher = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-396e5ed1"]]);
482553
483017
  const _hoisted_1$1 = {
482554
483018
  key: 2,
482555
483019
  class: "tooltip-content"
@@ -483795,12 +484259,13 @@ ${this.attributes_.map(
483795
484259
  isInFullscreen: () => isFullscreen.value
483796
484260
  });
483797
484261
  return (_ctx, _cache) => {
484262
+ var _a3;
483798
484263
  const _component_el_icon = vue.resolveComponent("el-icon");
483799
484264
  const _component_el_button = vue.resolveComponent("el-button");
483800
484265
  return vue.openBlock(), vue.createElementBlock("div", {
483801
484266
  class: vue.normalizeClass(["relative w-full h-full overflow-hidden", { "fixed top-0 left-0 w-screen h-screen z-9999": isFullscreen.value }])
483802
484267
  }, [
483803
- vue.createVNode(_sfc_main$m, {
484268
+ vue.createVNode(_sfc_main$n, {
483804
484269
  ref_key: "mapContainerRef",
483805
484270
  ref: mapContainerRef,
483806
484271
  config: finalMapConfig.value,
@@ -483904,7 +484369,7 @@ ${this.attributes_.map(
483904
484369
  }, null, 8, ["config", "left-offset", "right-offset", "top-offset", "bottom-offset"]), [
483905
484370
  [vue.vShow, finalShowToolbar.value]
483906
484371
  ]),
483907
- vue.withDirectives(vue.createVNode(_sfc_main$8, {
484372
+ vue.withDirectives(vue.createVNode(_sfc_main$9, {
483908
484373
  ref_key: "mapSearchRef",
483909
484374
  ref: mapSearchRef,
483910
484375
  config: finalSearchConfig.value,
@@ -483939,7 +484404,7 @@ ${this.attributes_.map(
483939
484404
  hasToolbarSlot.value ? vue.renderSlot(_ctx.$slots, "toolbar", { key: 2 }) : vue.createCommentVNode("", true),
483940
484405
  hasMapInfoSlot.value ? vue.renderSlot(_ctx.$slots, "mapInfo", { key: 3 }) : vue.createCommentVNode("", true),
483941
484406
  hasMapInfoSlot.value ? vue.renderSlot(_ctx.$slots, "map-info", { key: 4 }) : vue.createCommentVNode("", true),
483942
- finalEnableLayerPanel.value ? (vue.openBlock(), vue.createBlock(_sfc_main$2, {
484407
+ finalEnableLayerPanel.value ? (vue.openBlock(), vue.createBlock(_sfc_main$3, {
483943
484408
  key: 5,
483944
484409
  modelValue: showLayerPanel.value,
483945
484410
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => showLayerPanel.value = $event)
@@ -483970,7 +484435,7 @@ ${this.attributes_.map(
483970
484435
  key: "2"
483971
484436
  } : void 0
483972
484437
  ]), 1032, ["modelValue"])) : vue.createCommentVNode("", true),
483973
- showLegend.value ? (vue.openBlock(), vue.createBlock(_sfc_main$6, {
484438
+ showLegend.value ? (vue.openBlock(), vue.createBlock(_sfc_main$7, {
483974
484439
  key: 6,
483975
484440
  position: finalLegendPosition.value,
483976
484441
  width: finalLegendWidth.value,
@@ -484018,7 +484483,12 @@ ${this.attributes_.map(
484018
484483
  }), 128))
484019
484484
  ])
484020
484485
  ])) : vue.createCommentVNode("", true),
484021
- vue.createVNode(_sfc_main$d, {
484486
+ map2.value && ((_a3 = finalMapConfig.value.baseLayers) == null ? void 0 : _a3.length) ? (vue.openBlock(), vue.createBlock(OlBaseLayerSwitcher, {
484487
+ key: 9,
484488
+ map: map2.value,
484489
+ "base-layers": finalMapConfig.value.baseLayers
484490
+ }, null, 8, ["map", "base-layers"])) : vue.createCommentVNode("", true),
484491
+ vue.createVNode(_sfc_main$e, {
484022
484492
  modelValue: showPrintDialog.value,
484023
484493
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => showPrintDialog.value = $event),
484024
484494
  "map-instance": map2.value,
@@ -501112,14 +501582,14 @@ ${this.attributes_.map(
501112
501582
  };
501113
501583
  const install = (app) => {
501114
501584
  app.component("CustomOpenlayer", _sfc_main);
501115
- app.component("CustomDialog", _sfc_main$k);
501116
- app.component("SvgIcon", _sfc_main$l);
501585
+ app.component("CustomDialog", _sfc_main$l);
501586
+ app.component("SvgIcon", _sfc_main$m);
501117
501587
  };
501118
501588
  const index$1 = {
501119
501589
  install,
501120
501590
  CustomOpenlayer: _sfc_main,
501121
- CustomDialog: _sfc_main$k,
501122
- SvgIcon: _sfc_main$l
501591
+ CustomDialog: _sfc_main$l,
501592
+ SvgIcon: _sfc_main$m
501123
501593
  };
501124
501594
  const version$1 = "1.0.0";
501125
501595
  function commonjsRequire(path2) {
@@ -511311,7 +511781,7 @@ ${this.attributes_.map(
511311
511781
  }, Symbol.toStringTag, { value: "Module" }));
511312
511782
  exports2.BaseDrawing = BaseDrawing;
511313
511783
  exports2.BasemapManager = BasemapManager;
511314
- exports2.CustomDialog = _sfc_main$k;
511784
+ exports2.CustomDialog = _sfc_main$l;
511315
511785
  exports2.CustomOpenlayer = _sfc_main;
511316
511786
  exports2.DrawingFactoryRegistry = DrawingFactoryRegistry;
511317
511787
  exports2.DrawingManager = DrawingManager;
@@ -511345,7 +511815,7 @@ ${this.attributes_.map(
511345
511815
  exports2.PolygonDrawing = PolygonDrawing;
511346
511816
  exports2.PolygonDrawingFactory = PolygonDrawingFactory;
511347
511817
  exports2.SpatialFilterType = SpatialFilterType;
511348
- exports2.SvgIcon = _sfc_main$l;
511818
+ exports2.SvgIcon = _sfc_main$m;
511349
511819
  exports2.TextDrawing = TextDrawing;
511350
511820
  exports2.TextDrawingFactory = TextDrawingFactory;
511351
511821
  exports2.VectorTileLayerHandler = VectorTileLayerHandler;