vue-openlayers-plugin 1.0.91 → 1.0.92

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 (169) hide show
  1. package/lib/{BasemapPanel-97a57e6f.mjs → BasemapPanel-a7640f57.mjs} +68 -22
  2. package/lib/{CoordinateLocationDialog-090ead21.mjs → CoordinateLocationDialog-3fd9613f.mjs} +105 -51
  3. package/lib/{FilterPanel-ac96a573.mjs → FilterPanel-53958140.mjs} +1 -1
  4. package/lib/{MapPrintDialog-a440a6ab.mjs → LayerPanel-02152994.mjs} +1 -1
  5. package/lib/{LayerPanel-f9bbcdc1.mjs → MapPrintDialog-bbf1ccc1.mjs} +1 -1
  6. package/lib/{MeasurementDialog-6ec17375.mjs → MeasurementDialog-4ffa44ae.mjs} +84 -33
  7. package/lib/{MyMarkersDialog-1f9f82ed.mjs → MyMarkersDialog-605a60e2.mjs} +138 -63
  8. package/lib/{RegionNavigationDialog-d21ed4a6.mjs → RegionNavigationDialog-b0b6f86b.mjs} +29 -26
  9. package/lib/{ViewBookmarksDialog-b9fdb1d5.mjs → ViewBookmarksDialog-475f44f3.mjs} +250 -92
  10. package/lib/{index-a081b5c1.mjs → index-30b0d26c.mjs} +1 -1
  11. package/lib/{index-dd63f686.mjs → index-7f38e279.mjs} +3359 -1919
  12. package/lib/{index-cdbb6879.mjs → index-ecd9c14c.mjs} +13 -17
  13. package/lib/{index.es-d367a4fc.mjs → index.es-d464d539.mjs} +1 -1
  14. package/lib/index.esm.js +63 -63
  15. package/lib/index.umd.js +3947 -2128
  16. package/lib/style.css +707 -634
  17. package/package.json +2 -2
  18. package/types/src/components/CustomDialog/CustomDialog.vue.d.ts +11 -11
  19. package/types/src/components/CustomDialog/CustomDialog.vue.d.ts.map +1 -1
  20. package/types/src/components/CustomDialog/dialogCache.d.ts.map +1 -1
  21. package/types/src/components/CustomDialog/icons/index.d.ts.map +1 -1
  22. package/types/src/components/CustomDialog/index.d.ts.map +1 -1
  23. package/types/src/components/OlBaseLayerSwitcher.vue.d.ts.map +1 -1
  24. package/types/src/components/OlControlPanel.vue.d.ts +2 -2
  25. package/types/src/components/OlControlPanel.vue.d.ts.map +1 -1
  26. package/types/src/components/OlDialogs/BasemapPanel.vue.d.ts +1 -1
  27. package/types/src/components/OlDialogs/BasemapPanel.vue.d.ts.map +1 -1
  28. package/types/src/components/OlDialogs/CoordinateLocationDialog.vue.d.ts +1 -1
  29. package/types/src/components/OlDialogs/CoordinateLocationDialog.vue.d.ts.map +1 -1
  30. package/types/src/components/OlDialogs/DialogManager.d.ts +1 -1
  31. package/types/src/components/OlDialogs/DialogManager.d.ts.map +1 -1
  32. package/types/src/components/OlDialogs/FilterPanel.vue.d.ts +3 -3
  33. package/types/src/components/OlDialogs/FilterPanel.vue.d.ts.map +1 -1
  34. package/types/src/components/OlDialogs/LayerPanel.vue.d.ts +786 -786
  35. package/types/src/components/OlDialogs/LayerPanel.vue.d.ts.map +1 -1
  36. package/types/src/components/OlDialogs/LayerStyleConfig.vue.d.ts +3 -3
  37. package/types/src/components/OlDialogs/LayerStyleConfig.vue.d.ts.map +1 -1
  38. package/types/src/components/OlDialogs/LayerTreeNode.vue.d.ts +5 -5
  39. package/types/src/components/OlDialogs/LayerTreeNode.vue.d.ts.map +1 -1
  40. package/types/src/components/OlDialogs/MapDrawingDialog/index.vue.d.ts.map +1 -1
  41. package/types/src/components/OlDialogs/MapPrintDialog.vue.d.ts +2 -2
  42. package/types/src/components/OlDialogs/MapPrintDialog.vue.d.ts.map +1 -1
  43. package/types/src/components/OlDialogs/MeasurementDialog.vue.d.ts +1 -1
  44. package/types/src/components/OlDialogs/MeasurementDialog.vue.d.ts.map +1 -1
  45. package/types/src/components/OlDialogs/MyMarkersDialog.vue.d.ts +2 -2
  46. package/types/src/components/OlDialogs/MyMarkersDialog.vue.d.ts.map +1 -1
  47. package/types/src/components/OlDialogs/RegionNavigationDialog.vue.d.ts +5 -5
  48. package/types/src/components/OlDialogs/RegionNavigationDialog.vue.d.ts.map +1 -1
  49. package/types/src/components/OlDialogs/ViewBookmarksDialog.vue.d.ts +2 -2
  50. package/types/src/components/OlDialogs/ViewBookmarksDialog.vue.d.ts.map +1 -1
  51. package/types/src/components/OlDialogs/registry.d.ts.map +1 -1
  52. package/types/src/components/OlDrawToolbar.vue.d.ts +16 -16
  53. package/types/src/components/OlDrawToolbar.vue.d.ts.map +1 -1
  54. package/types/src/components/OlLegendPanel.vue.d.ts +1 -1
  55. package/types/src/components/OlLegendPanel.vue.d.ts.map +1 -1
  56. package/types/src/components/OlMapContainer.vue.d.ts +31 -31
  57. package/types/src/components/OlMapContainer.vue.d.ts.map +1 -1
  58. package/types/src/components/OlMapPopup/ArrayPopup.vue.d.ts +4 -4
  59. package/types/src/components/OlMapPopup/ArrayPopup.vue.d.ts.map +1 -1
  60. package/types/src/components/OlMapPopup/BasePopup.vue.d.ts +6 -6
  61. package/types/src/components/OlMapPopup/BasePopup.vue.d.ts.map +1 -1
  62. package/types/src/components/OlMapPopup/HtmlPopup.vue.d.ts +3 -3
  63. package/types/src/components/OlMapPopup/HtmlPopup.vue.d.ts.map +1 -1
  64. package/types/src/components/OlMapPopup/ImagePopup.vue.d.ts +3 -3
  65. package/types/src/components/OlMapPopup/ImagePopup.vue.d.ts.map +1 -1
  66. package/types/src/components/OlMapPopup/index.d.ts +1 -1
  67. package/types/src/components/OlMapPopup/index.d.ts.map +1 -1
  68. package/types/src/components/OlMapPopup/types.d.ts +12 -12
  69. package/types/src/components/OlMapPopup/types.d.ts.map +1 -1
  70. package/types/src/components/OlMapSearch.vue.d.ts +3 -3
  71. package/types/src/components/OlMapSearch.vue.d.ts.map +1 -1
  72. package/types/src/components/OlMapTooltip.vue.d.ts +8 -8
  73. package/types/src/components/OlMapTooltip.vue.d.ts.map +1 -1
  74. package/types/src/components/SvgIcon/index.vue.d.ts.map +1 -1
  75. package/types/src/core/EventBus.d.ts.map +1 -1
  76. package/types/src/core/EventManager.d.ts.map +1 -1
  77. package/types/src/core/FeatureHighlightManager.d.ts.map +1 -1
  78. package/types/src/core/GlobalStyleManager.d.ts +1 -1
  79. package/types/src/core/LayerConfigManager.d.ts.map +1 -1
  80. package/types/src/core/LayerManager.d.ts +2 -2
  81. package/types/src/core/LayerManager.d.ts.map +1 -1
  82. package/types/src/core/LayerTreeManager.d.ts +1 -1
  83. package/types/src/core/LayerTreeManager.d.ts.map +1 -1
  84. package/types/src/core/MapManager.d.ts +15 -15
  85. package/types/src/core/MapManager.d.ts.map +1 -1
  86. package/types/src/core/MarkerDrawingAdapter.d.ts.map +1 -1
  87. package/types/src/core/PluginManager.d.ts +1 -1
  88. package/types/src/core/PluginManager.d.ts.map +1 -1
  89. package/types/src/core/PopupManager.d.ts.map +1 -1
  90. package/types/src/core/SearchMarkerManager.d.ts.map +1 -1
  91. package/types/src/core/TooltipHelper.d.ts +1 -1
  92. package/types/src/core/TooltipHelper.d.ts.map +1 -1
  93. package/types/src/core/amapSearchApi.d.ts.map +1 -1
  94. package/types/src/core/configLoader.d.ts +33 -33
  95. package/types/src/core/configLoader.d.ts.map +1 -1
  96. package/types/src/core/drawing/BaseDrawing.d.ts.map +1 -1
  97. package/types/src/core/drawing/DrawingManager.d.ts.map +1 -1
  98. package/types/src/core/drawing/IconDrawing.d.ts.map +1 -1
  99. package/types/src/core/drawing/ImageDrawing.d.ts.map +1 -1
  100. package/types/src/core/drawing/LineDrawing.d.ts.map +1 -1
  101. package/types/src/core/drawing/MilitaryDrawing.d.ts.map +1 -1
  102. package/types/src/core/drawing/MultiLineStringDrawing.d.ts.map +1 -1
  103. package/types/src/core/drawing/MultiPointDrawing.d.ts.map +1 -1
  104. package/types/src/core/drawing/MultiPolygonDrawing.d.ts.map +1 -1
  105. package/types/src/core/drawing/PointDrawing.d.ts +2 -2
  106. package/types/src/core/drawing/PointDrawing.d.ts.map +1 -1
  107. package/types/src/core/drawing/PointWithTextDrawing.d.ts +2 -2
  108. package/types/src/core/drawing/PointWithTextDrawing.d.ts.map +1 -1
  109. package/types/src/core/drawing/PolygonDrawing.d.ts.map +1 -1
  110. package/types/src/core/drawing/TextDrawing.d.ts.map +1 -1
  111. package/types/src/core/drawing/index.d.ts +12 -12
  112. package/types/src/core/drawing/index.d.ts.map +1 -1
  113. package/types/src/core/geoJsonLocationTool.d.ts +3 -3
  114. package/types/src/core/geoJsonLocationTool.d.ts.map +1 -1
  115. package/types/src/core/layers/BaseLayer.d.ts +1 -1
  116. package/types/src/core/layers/BaseLayer.d.ts.map +1 -1
  117. package/types/src/core/layers/CanvasLayerHandler.d.ts.map +1 -1
  118. package/types/src/core/layers/ClusterLayerHandler.d.ts.map +1 -1
  119. package/types/src/core/layers/GMLLayerHandler.d.ts.map +1 -1
  120. package/types/src/core/layers/GeoJSONLayerHandler.d.ts.map +1 -1
  121. package/types/src/core/layers/HeatmapLayerHandler.d.ts.map +1 -1
  122. package/types/src/core/layers/ImageVectorLayerHandler.d.ts.map +1 -1
  123. package/types/src/core/layers/KMLLayerHandler.d.ts.map +1 -1
  124. package/types/src/core/layers/LayerFactory.d.ts.map +1 -1
  125. package/types/src/core/layers/SuperMapServiceTester.d.ts.map +1 -1
  126. package/types/src/core/layers/SuperMapTiledMapServiceHandler.d.ts.map +1 -1
  127. package/types/src/core/layers/TiandituConfigHelper.d.ts.map +1 -1
  128. package/types/src/core/layers/TiandituLayerHandler.d.ts.map +1 -1
  129. package/types/src/core/layers/TileLayerHandler.d.ts.map +1 -1
  130. package/types/src/core/layers/TileSuperMapRestHandler.d.ts +1 -1
  131. package/types/src/core/layers/TileSuperMapRestHandler.d.ts.map +1 -1
  132. package/types/src/core/layers/VectorTileLayerHandler.d.ts +3 -3
  133. package/types/src/core/layers/VectorTileLayerHandler.d.ts.map +1 -1
  134. package/types/src/core/layers/WFSLayerHandler.d.ts +1 -1
  135. package/types/src/core/layers/WFSLayerHandler.d.ts.map +1 -1
  136. package/types/src/core/layers/WKTLayerHandler.d.ts.map +1 -1
  137. package/types/src/core/layers/WMSLayerHandler.d.ts +1 -1
  138. package/types/src/core/layers/WMSLayerHandler.d.ts.map +1 -1
  139. package/types/src/core/layers/WMTSLayerHandler.d.ts.map +1 -1
  140. package/types/src/core/layers/interfaces.d.ts +1 -1
  141. package/types/src/core/layers/interfaces.d.ts.map +1 -1
  142. package/types/src/core/mapOperationTool.d.ts.map +1 -1
  143. package/types/src/core/measurementTool.d.ts.map +1 -1
  144. package/types/src/core/overviewMapUtil.d.ts.map +1 -1
  145. package/types/src/core/proxyHelper.d.ts +1 -1
  146. package/types/src/core/proxyHelper.d.ts.map +1 -1
  147. package/types/src/core/storage.d.ts.map +1 -1
  148. package/types/src/core/styles/StyleFactory.d.ts.map +1 -1
  149. package/types/src/core/styles/StyleManager.d.ts.map +1 -1
  150. package/types/src/core/styles/index.d.ts +1 -1
  151. package/types/src/core/styles/index.d.ts.map +1 -1
  152. package/types/src/core/styles/interfaces.d.ts +3 -3
  153. package/types/src/core/styles/interfaces.d.ts.map +1 -1
  154. package/types/src/core/tiandituSearchApi.d.ts.map +1 -1
  155. package/types/src/hooks/useMap.d.ts.map +1 -1
  156. package/types/src/services/searchService.d.ts +2 -2
  157. package/types/src/services/searchService.d.ts.map +1 -1
  158. package/types/src/style.d.ts.map +1 -1
  159. package/types/src/types/map.d.ts +75 -0
  160. package/types/src/types/map.d.ts.map +1 -1
  161. package/types/src/utils/DiffusionAnimationHelper.d.ts.map +1 -1
  162. package/types/src/utils/GifAnimationHelper.d.ts.map +1 -1
  163. package/types/src/utils/coordinateTransform.d.ts.map +1 -1
  164. package/types/src/utils/html2pdf.d.ts +3 -0
  165. package/types/src/utils/html2pdf.d.ts.map +1 -1
  166. package/types/src/utils/index.d.ts +1 -1
  167. package/types/src/utils/index.d.ts.map +1 -1
  168. package/types/src/utils/unitConverter.d.ts.map +1 -1
  169. package/types/tsconfig.tsbuildinfo +1 -1
@@ -1,6 +1,6 @@
1
- import { defineComponent, computed, ref, reactive, resolveComponent, openBlock, createBlock, withCtx, createElementVNode, createVNode, createTextVNode, unref, createElementBlock, Fragment, renderList, withModifiers, toDisplayString, createCommentVNode } from "vue";
2
- import { i as plus_default, j as folder_opened_default, k as download_default, m as delete_default, s as search_default, q as camera_default, v as view_default, o as edit_default, u as location_default, z as zoom_in_default } from "./index-dd63f686.mjs";
3
- import { E as ElMessageBox } from "./index-a081b5c1.mjs";
1
+ import { defineComponent, inject, computed, ref, reactive, resolveComponent, openBlock, createBlock, withCtx, createElementVNode, createVNode, createTextVNode, unref, createElementBlock, Fragment, renderList, withModifiers, toDisplayString, createCommentVNode } from "vue";
2
+ import { j as plus_default, k as folder_opened_default, m as download_default, n as delete_default, s as search_default, v as camera_default, w as view_default, q as edit_default, x as location_default, z as zoom_in_default, u as toLonLat, t as fromLonLat, E as ElMessage, y as getUid } from "./index-7f38e279.mjs";
3
+ import { E as ElMessageBox } from "./index-30b0d26c.mjs";
4
4
  import "ol";
5
5
  const _hoisted_1 = { class: "bookmarks-content" };
6
6
  const _hoisted_2 = { class: "toolbar" };
@@ -8,26 +8,30 @@ const _hoisted_3 = { class: "search-filter" };
8
8
  const _hoisted_4 = { class: "bookmarks-grid" };
9
9
  const _hoisted_5 = ["onClick"];
10
10
  const _hoisted_6 = { class: "bookmark-thumbnail" };
11
- const _hoisted_7 = { class: "thumbnail-placeholder" };
12
- const _hoisted_8 = { class: "bookmark-overlay" };
13
- const _hoisted_9 = { class: "bookmark-info" };
14
- const _hoisted_10 = { class: "bookmark-title" };
15
- const _hoisted_11 = { class: "bookmark-meta" };
16
- const _hoisted_12 = { class: "use-count" };
17
- const _hoisted_13 = { class: "bookmark-description" };
18
- const _hoisted_14 = { class: "bookmark-details" };
19
- const _hoisted_15 = { class: "detail-item" };
11
+ const _hoisted_7 = ["src"];
12
+ const _hoisted_8 = {
13
+ key: 1,
14
+ class: "thumbnail-placeholder"
15
+ };
16
+ const _hoisted_9 = { class: "bookmark-overlay" };
17
+ const _hoisted_10 = { class: "bookmark-info" };
18
+ const _hoisted_11 = { class: "bookmark-title" };
19
+ const _hoisted_12 = { class: "bookmark-meta" };
20
+ const _hoisted_13 = { class: "use-count" };
21
+ const _hoisted_14 = { class: "bookmark-description" };
22
+ const _hoisted_15 = { class: "bookmark-details" };
20
23
  const _hoisted_16 = { class: "detail-item" };
21
- const _hoisted_17 = { class: "bookmark-time" };
22
- const _hoisted_18 = {
24
+ const _hoisted_17 = { class: "detail-item" };
25
+ const _hoisted_18 = { class: "bookmark-time" };
26
+ const _hoisted_19 = {
23
27
  key: 0,
24
28
  class: "empty-state"
25
29
  };
26
- const _hoisted_19 = {
30
+ const _hoisted_20 = {
27
31
  key: 1,
28
32
  class: "statistics"
29
33
  };
30
- const _hoisted_20 = { class: "dialog-footer" };
34
+ const _hoisted_21 = { class: "dialog-footer" };
31
35
  const _sfc_main = /* @__PURE__ */ defineComponent({
32
36
  __name: "ViewBookmarksDialog",
33
37
  props: {
@@ -37,6 +41,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
37
41
  setup(__props, { emit: __emit }) {
38
42
  const props = __props;
39
43
  const emit = __emit;
44
+ const mapRef = inject("map");
45
+ const map = computed(() => mapRef == null ? void 0 : mapRef.value);
40
46
  const dialogVisible = computed({
41
47
  get: () => props.modelValue,
42
48
  set: (value) => emit("update:modelValue", value)
@@ -77,8 +83,110 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
77
83
  centerLon: 116.407526,
78
84
  centerLat: 39.90403,
79
85
  zoom: 10,
80
- rotation: 0
86
+ rotation: 0,
87
+ thumbnail: "",
88
+ saveLayerState: true
81
89
  });
90
+ const getLayerStates = () => {
91
+ if (!map.value)
92
+ return [];
93
+ const states = [];
94
+ const layers = map.value.getLayers().getArray();
95
+ const processLayer = (layer) => {
96
+ const id = layer.get("id") || getUid(layer).toString();
97
+ const title = layer.get("title") || layer.get("name") || "未命名图层";
98
+ states.push({
99
+ id,
100
+ visible: layer.getVisible(),
101
+ opacity: layer.getOpacity(),
102
+ title
103
+ });
104
+ if (layer.getLayers) {
105
+ layer.getLayers().forEach((child) => processLayer(child));
106
+ }
107
+ };
108
+ layers.forEach((layer) => processLayer(layer));
109
+ return states;
110
+ };
111
+ const mapManager = inject("mapManager");
112
+ inject("eventBus");
113
+ const layerEventBus = inject("layerEventBus");
114
+ const restoreLayerStates = (states) => {
115
+ if (!map.value || !states || states.length === 0)
116
+ return;
117
+ let restoredCount = 0;
118
+ const allLayers = [];
119
+ const collectLayers = (layers) => {
120
+ layers.forEach((layer) => {
121
+ allLayers.push(layer);
122
+ if (layer.getLayers) {
123
+ collectLayers(layer.getLayers().getArray());
124
+ }
125
+ });
126
+ };
127
+ collectLayers(map.value.getLayers().getArray());
128
+ states.forEach((state) => {
129
+ var _a, _b;
130
+ const layer = allLayers.find((l) => {
131
+ const id = l.get("id") || getUid(l).toString();
132
+ return id === state.id || state.title && l.get("title") === state.title;
133
+ });
134
+ if (layer) {
135
+ if (layer.getVisible() !== state.visible) {
136
+ layer.setVisible(state.visible);
137
+ const layerId = layer.get("id") || getUid(layer).toString();
138
+ const layerName = layer.get("name") || layer.get("title") || "未命名图层";
139
+ const layerType = layer.get("type") || "unknown";
140
+ if ((_a = mapManager == null ? void 0 : mapManager.value) == null ? void 0 : _a.layerManager) {
141
+ mapManager.value.layerManager.setLayerVisible(layerId, state.visible);
142
+ }
143
+ if (layerEventBus) {
144
+ layerEventBus.emit("layer-visibility-changed", {
145
+ layerId,
146
+ visible: state.visible,
147
+ layerName,
148
+ layerType
149
+ });
150
+ }
151
+ }
152
+ if (Math.abs(layer.getOpacity() - state.opacity) > 0.01) {
153
+ layer.setOpacity(state.opacity);
154
+ const layerId = layer.get("id") || getUid(layer).toString();
155
+ if ((_b = mapManager == null ? void 0 : mapManager.value) == null ? void 0 : _b.layerManager) {
156
+ mapManager.value.layerManager.setLayerOpacity(layerId, state.opacity);
157
+ }
158
+ }
159
+ restoredCount++;
160
+ }
161
+ });
162
+ if (restoredCount < states.length) {
163
+ console.warn(
164
+ `部分图层状态未恢复: 仅恢复 ${restoredCount}/${states.length} 个图层`
165
+ );
166
+ }
167
+ };
168
+ const generateThumbnail = () => {
169
+ if (!map.value)
170
+ return "";
171
+ try {
172
+ const mapCanvas = map.value.getViewport().querySelector("canvas");
173
+ if (mapCanvas) {
174
+ const canvas = document.createElement("canvas");
175
+ const ctx = canvas.getContext("2d");
176
+ const width = 300;
177
+ const height = width * (mapCanvas.height / mapCanvas.width);
178
+ canvas.width = width;
179
+ canvas.height = height;
180
+ if (ctx) {
181
+ ctx.drawImage(mapCanvas, 0, 0, width, height);
182
+ return canvas.toDataURL("image/jpeg", 0.7);
183
+ }
184
+ }
185
+ } catch (error) {
186
+ console.error("生成缩略图失败:", error);
187
+ }
188
+ return "";
189
+ };
82
190
  const categories = computed(() => {
83
191
  const cats = [...new Set(bookmarks.value.map((b) => b.category))];
84
192
  return cats.filter((cat) => cat);
@@ -92,7 +200,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
92
200
  );
93
201
  }
94
202
  if (filterCategory.value) {
95
- result = result.filter((bookmark) => bookmark.category === filterCategory.value);
203
+ result = result.filter(
204
+ (bookmark) => bookmark.category === filterCategory.value
205
+ );
96
206
  }
97
207
  result.sort((a, b) => {
98
208
  switch (sortBy.value) {
@@ -113,12 +223,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
113
223
  return bookmarks.value.filter((bookmark) => bookmark.createTime >= today).length;
114
224
  });
115
225
  const totalUseCount = computed(() => {
116
- return bookmarks.value.reduce((total, bookmark) => total + bookmark.useCount, 0);
226
+ return bookmarks.value.reduce(
227
+ (total, bookmark) => total + bookmark.useCount,
228
+ 0
229
+ );
117
230
  });
118
231
  const handleSearch = () => {
119
232
  };
120
233
  const showAddBookmark = () => {
121
234
  editingIndex.value = -1;
235
+ const thumbnail = generateThumbnail();
122
236
  Object.assign(bookmarkForm, {
123
237
  name: "",
124
238
  category: "默认",
@@ -126,8 +240,25 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
126
240
  centerLon: 116.407526,
127
241
  centerLat: 39.90403,
128
242
  zoom: 10,
129
- rotation: 0
243
+ rotation: 0,
244
+ thumbnail,
245
+ saveLayerState: true
130
246
  });
247
+ if (map.value) {
248
+ const view = map.value.getView();
249
+ const center = view.getCenter();
250
+ const zoom = view.getZoom();
251
+ const rotation = view.getRotation();
252
+ const projection = view.getProjection().getCode();
253
+ const lonLat = projection === "EPSG:4326" || projection === "EPSG:4490" ? center : toLonLat(center);
254
+ Object.assign(bookmarkForm, {
255
+ centerLon: lonLat[0],
256
+ centerLat: lonLat[1],
257
+ zoom,
258
+ rotation: rotation * 180 / Math.PI
259
+ // 转换为角度
260
+ });
261
+ }
131
262
  showBookmarkForm.value = true;
132
263
  };
133
264
  const editBookmark = (bookmark, index) => {
@@ -139,7 +270,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
139
270
  centerLon: bookmark.center[0],
140
271
  centerLat: bookmark.center[1],
141
272
  zoom: bookmark.zoom,
142
- rotation: bookmark.rotation
273
+ rotation: bookmark.rotation,
274
+ thumbnail: bookmark.thumbnail || "",
275
+ saveLayerState: !!(bookmark.layerStates && bookmark.layerStates.length > 0)
143
276
  });
144
277
  showBookmarkForm.value = true;
145
278
  };
@@ -148,16 +281,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
148
281
  console.error("请输入书签名称");
149
282
  return;
150
283
  }
284
+ const layerStates = bookmarkForm.saveLayerState ? getLayerStates() : void 0;
151
285
  const bookmarkData = {
152
286
  id: editingIndex.value >= 0 ? bookmarks.value[editingIndex.value].id : Date.now().toString(),
153
287
  name: bookmarkForm.name,
154
288
  category: bookmarkForm.category || "默认",
155
289
  description: bookmarkForm.description,
156
- center: [Number(bookmarkForm.centerLon), Number(bookmarkForm.centerLat)],
290
+ center: [
291
+ Number(bookmarkForm.centerLon),
292
+ Number(bookmarkForm.centerLat)
293
+ ],
157
294
  zoom: bookmarkForm.zoom,
158
295
  rotation: bookmarkForm.rotation,
159
296
  useCount: editingIndex.value >= 0 ? bookmarks.value[editingIndex.value].useCount : 0,
160
- createTime: editingIndex.value >= 0 ? bookmarks.value[editingIndex.value].createTime : /* @__PURE__ */ new Date()
297
+ createTime: editingIndex.value >= 0 ? bookmarks.value[editingIndex.value].createTime : /* @__PURE__ */ new Date(),
298
+ thumbnail: bookmarkForm.thumbnail,
299
+ layerStates
161
300
  };
162
301
  if (editingIndex.value >= 0) {
163
302
  bookmarks.value[editingIndex.value] = bookmarkData;
@@ -174,6 +313,24 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
174
313
  };
175
314
  const applyBookmark = (bookmark) => {
176
315
  bookmark.useCount++;
316
+ if (map.value) {
317
+ const view = map.value.getView();
318
+ const projection = view.getProjection().getCode();
319
+ const center = projection === "EPSG:4326" || projection === "EPSG:4490" ? bookmark.center : fromLonLat(bookmark.center);
320
+ view.animate({
321
+ center,
322
+ zoom: bookmark.zoom,
323
+ rotation: bookmark.rotation * Math.PI / 180,
324
+ // 转换为弧度
325
+ duration: 1e3
326
+ });
327
+ if (bookmark.layerStates && bookmark.layerStates.length > 0) {
328
+ restoreLayerStates(bookmark.layerStates);
329
+ ElMessage.success(`已应用视角并恢复图层状态`);
330
+ } else {
331
+ ElMessage.success(`已应用视角`);
332
+ }
333
+ }
177
334
  emit("bookmark-action", {
178
335
  action: "apply",
179
336
  bookmark
@@ -181,15 +338,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
181
338
  console.log(`已应用视角: ${bookmark.name}`);
182
339
  };
183
340
  const deleteBookmark = (index) => {
184
- ElMessageBox.confirm(
185
- "确定要删除这个书签吗?",
186
- "确认删除",
187
- {
188
- confirmButtonText: "确定",
189
- cancelButtonText: "取消",
190
- type: "warning"
191
- }
192
- ).then(() => {
341
+ ElMessageBox.confirm("确定要删除这个书签吗?", "确认删除", {
342
+ confirmButtonText: "确定",
343
+ cancelButtonText: "取消",
344
+ type: "warning"
345
+ }).then(() => {
193
346
  const bookmark = bookmarks.value[index];
194
347
  bookmarks.value.splice(index, 1);
195
348
  emit("bookmark-action", {
@@ -201,15 +354,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
201
354
  });
202
355
  };
203
356
  const clearAllBookmarks = () => {
204
- ElMessageBox.confirm(
205
- "确定要清空所有书签吗?此操作不可恢复!",
206
- "确认清空",
207
- {
208
- confirmButtonText: "确定",
209
- cancelButtonText: "取消",
210
- type: "warning"
211
- }
212
- ).then(() => {
357
+ ElMessageBox.confirm("确定要清空所有书签吗?此操作不可恢复!", "确认清空", {
358
+ confirmButtonText: "确定",
359
+ cancelButtonText: "取消",
360
+ type: "warning"
361
+ }).then(() => {
213
362
  bookmarks.value = [];
214
363
  emit("bookmark-action", {
215
364
  action: "clear"
@@ -285,7 +434,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
285
434
  const _component_el_col = resolveComponent("el-col");
286
435
  const _component_el_row = resolveComponent("el-row");
287
436
  const _component_el_form_item = resolveComponent("el-form-item");
288
- const _component_el_slider = resolveComponent("el-slider");
437
+ const _component_el_checkbox = resolveComponent("el-checkbox");
289
438
  const _component_el_form = resolveComponent("el-form");
290
439
  const _component_EPlusDialog = resolveComponent("EPlusDialog");
291
440
  return openBlock(), createBlock(_component_EPlusDialog, {
@@ -296,13 +445,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
296
445
  "before-close": handleClose,
297
446
  "show-modal": false,
298
447
  "modal-class": ["pointer-events-none"],
299
- cacheId: "bookmarks-dialog",
448
+ "cache-id": "bookmarks-dialog",
300
449
  class: "bookmarks-dialog"
301
450
  }, {
302
451
  footer: withCtx(() => [
303
- createElementVNode("div", _hoisted_20, [
452
+ createElementVNode("div", _hoisted_21, [
304
453
  createVNode(_component_el_button, { onClick: handleClose }, {
305
- default: withCtx(() => [..._cache[23] || (_cache[23] = [
454
+ default: withCtx(() => [..._cache[24] || (_cache[24] = [
306
455
  createTextVNode("关闭", -1)
307
456
  ])]),
308
457
  _: 1
@@ -342,8 +491,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
342
491
  }, 8, ["icon"]),
343
492
  createVNode(_component_el_button, {
344
493
  icon: unref(delete_default),
345
- onClick: clearAllBookmarks,
346
- disabled: bookmarks.value.length === 0
494
+ disabled: bookmarks.value.length === 0,
495
+ onClick: clearAllBookmarks
347
496
  }, {
348
497
  default: withCtx(() => [..._cache[16] || (_cache[16] = [
349
498
  createTextVNode(" 清空全部 ", -1)
@@ -358,8 +507,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
358
507
  placeholder: "搜索书签名称或描述...",
359
508
  "prefix-icon": unref(search_default),
360
509
  clearable: "",
361
- onInput: handleSearch,
362
- style: { "width": "300px" }
510
+ style: { "width": "300px" },
511
+ onInput: handleSearch
363
512
  }, null, 8, ["modelValue", "prefix-icon"]),
364
513
  createVNode(_component_el_select, {
365
514
  modelValue: filterCategory.value,
@@ -414,7 +563,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
414
563
  onClick: ($event) => applyBookmark(bookmark)
415
564
  }, [
416
565
  createElementVNode("div", _hoisted_6, [
417
- createElementVNode("div", _hoisted_7, [
566
+ bookmark.thumbnail ? (openBlock(), createElementBlock("img", {
567
+ key: 0,
568
+ src: bookmark.thumbnail,
569
+ class: "thumbnail-image"
570
+ }, null, 8, _hoisted_7)) : (openBlock(), createElementBlock("div", _hoisted_8, [
418
571
  createVNode(_component_el_icon, {
419
572
  size: "40",
420
573
  color: "#409eff"
@@ -424,8 +577,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
424
577
  ]),
425
578
  _: 1
426
579
  })
427
- ]),
428
- createElementVNode("div", _hoisted_8, [
580
+ ])),
581
+ createElementVNode("div", _hoisted_9, [
429
582
  createVNode(_component_el_button_group, null, {
430
583
  default: withCtx(() => [
431
584
  createVNode(_component_el_button, {
@@ -452,8 +605,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
452
605
  createVNode(_component_el_button, {
453
606
  size: "small",
454
607
  icon: unref(delete_default),
455
- onClick: withModifiers(($event) => deleteBookmark(index), ["stop"]),
456
- class: "delete-btn"
608
+ class: "delete-btn",
609
+ onClick: withModifiers(($event) => deleteBookmark(index), ["stop"])
457
610
  }, {
458
611
  default: withCtx(() => [..._cache[19] || (_cache[19] = [
459
612
  createTextVNode(" 删除 ", -1)
@@ -465,9 +618,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
465
618
  }, 1024)
466
619
  ])
467
620
  ]),
468
- createElementVNode("div", _hoisted_9, [
469
- createElementVNode("div", _hoisted_10, toDisplayString(bookmark.name), 1),
470
- createElementVNode("div", _hoisted_11, [
621
+ createElementVNode("div", _hoisted_10, [
622
+ createElementVNode("div", _hoisted_11, toDisplayString(bookmark.name), 1),
623
+ createElementVNode("div", _hoisted_12, [
471
624
  createVNode(_component_el_tag, {
472
625
  size: "small",
473
626
  type: "info"
@@ -477,11 +630,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
477
630
  ]),
478
631
  _: 2
479
632
  }, 1024),
480
- createElementVNode("span", _hoisted_12, "使用 " + toDisplayString(bookmark.useCount) + " 次", 1)
633
+ createElementVNode("span", _hoisted_13, "使用 " + toDisplayString(bookmark.useCount) + " 次", 1)
481
634
  ]),
482
- createElementVNode("div", _hoisted_13, toDisplayString(bookmark.description), 1),
483
- createElementVNode("div", _hoisted_14, [
484
- createElementVNode("span", _hoisted_15, [
635
+ createElementVNode("div", _hoisted_14, toDisplayString(bookmark.description), 1),
636
+ createElementVNode("div", _hoisted_15, [
637
+ createElementVNode("span", _hoisted_16, [
485
638
  createVNode(_component_el_icon, null, {
486
639
  default: withCtx(() => [
487
640
  createVNode(unref(location_default))
@@ -490,7 +643,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
490
643
  }),
491
644
  createTextVNode(" " + toDisplayString(bookmark.center[0].toFixed(4)) + ", " + toDisplayString(bookmark.center[1].toFixed(4)), 1)
492
645
  ]),
493
- createElementVNode("span", _hoisted_16, [
646
+ createElementVNode("span", _hoisted_17, [
494
647
  createVNode(_component_el_icon, null, {
495
648
  default: withCtx(() => [
496
649
  createVNode(unref(zoom_in_default))
@@ -500,12 +653,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
500
653
  createTextVNode(" 缩放: " + toDisplayString(bookmark.zoom), 1)
501
654
  ])
502
655
  ]),
503
- createElementVNode("div", _hoisted_17, toDisplayString(formatTime(bookmark.createTime)), 1)
656
+ createElementVNode("div", _hoisted_18, toDisplayString(formatTime(bookmark.createTime)), 1)
504
657
  ])
505
658
  ], 8, _hoisted_5);
506
659
  }), 128))
507
660
  ]),
508
- filteredBookmarks.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_18, [
661
+ filteredBookmarks.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_19, [
509
662
  createVNode(_component_el_empty, { description: "暂无书签" }, {
510
663
  default: withCtx(() => [
511
664
  createVNode(_component_el_button, {
@@ -521,7 +674,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
521
674
  _: 1
522
675
  })
523
676
  ])) : createCommentVNode("", true),
524
- bookmarks.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_19, [
677
+ bookmarks.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_20, [
525
678
  createVNode(_component_el_row, { gutter: 20 }, {
526
679
  default: withCtx(() => [
527
680
  createVNode(_component_el_col, { span: 6 }, {
@@ -570,14 +723,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
570
723
  "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => showBookmarkForm.value = $event),
571
724
  title: editingIndex.value >= 0 ? "编辑书签" : "保存视角书签",
572
725
  width: "450px",
573
- cacheId: "bookmark-form",
726
+ "cache-id": "bookmark-form",
574
727
  "show-modal": false
575
728
  }, {
576
729
  footer: withCtx(() => [
577
730
  createVNode(_component_el_button, {
578
731
  onClick: _cache[10] || (_cache[10] = ($event) => showBookmarkForm.value = false)
579
732
  }, {
580
- default: withCtx(() => [..._cache[21] || (_cache[21] = [
733
+ default: withCtx(() => [..._cache[22] || (_cache[22] = [
581
734
  createTextVNode("取消", -1)
582
735
  ])]),
583
736
  _: 1
@@ -586,7 +739,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
586
739
  type: "primary",
587
740
  onClick: saveBookmark
588
741
  }, {
589
- default: withCtx(() => [..._cache[22] || (_cache[22] = [
742
+ default: withCtx(() => [..._cache[23] || (_cache[23] = [
590
743
  createTextVNode("保存", -1)
591
744
  ])]),
592
745
  _: 1
@@ -649,27 +802,34 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
649
802
  }),
650
803
  createVNode(_component_el_form_item, { label: "中心点" }, {
651
804
  default: withCtx(() => [
652
- createVNode(_component_el_row, { gutter: 10 }, {
805
+ createVNode(_component_el_row, {
806
+ gutter: 10,
807
+ style: { "width": "100%", "margin": "0" }
808
+ }, {
653
809
  default: withCtx(() => [
654
- createVNode(_component_el_col, { span: 12 }, {
810
+ createVNode(_component_el_col, {
811
+ span: 12,
812
+ style: { "padding-left": "0" }
813
+ }, {
655
814
  default: withCtx(() => [
656
815
  createVNode(_component_el_input, {
657
816
  modelValue: bookmarkForm.centerLon,
658
817
  "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => bookmarkForm.centerLon = $event),
659
- type: "number",
660
- step: "0.000001",
818
+ readonly: "",
661
819
  placeholder: "经度"
662
820
  }, null, 8, ["modelValue"])
663
821
  ]),
664
822
  _: 1
665
823
  }),
666
- createVNode(_component_el_col, { span: 12 }, {
824
+ createVNode(_component_el_col, {
825
+ span: 12,
826
+ style: { "padding-right": "0" }
827
+ }, {
667
828
  default: withCtx(() => [
668
829
  createVNode(_component_el_input, {
669
830
  modelValue: bookmarkForm.centerLat,
670
831
  "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => bookmarkForm.centerLat = $event),
671
- type: "number",
672
- step: "0.000001",
832
+ readonly: "",
673
833
  placeholder: "纬度"
674
834
  }, null, 8, ["modelValue"])
675
835
  ]),
@@ -681,29 +841,27 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
681
841
  ]),
682
842
  _: 1
683
843
  }),
684
- createVNode(_component_el_form_item, { label: "缩放级别" }, {
844
+ createVNode(_component_el_form_item, { label: "旋转角度" }, {
685
845
  default: withCtx(() => [
686
- createVNode(_component_el_slider, {
687
- modelValue: bookmarkForm.zoom,
688
- "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => bookmarkForm.zoom = $event),
689
- min: 1,
690
- max: 20,
691
- step: 0.1,
692
- "show-input": ""
846
+ createVNode(_component_el_input, {
847
+ modelValue: bookmarkForm.rotation,
848
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => bookmarkForm.rotation = $event),
849
+ readonly: ""
693
850
  }, null, 8, ["modelValue"])
694
851
  ]),
695
852
  _: 1
696
853
  }),
697
- createVNode(_component_el_form_item, { label: "旋转角度" }, {
854
+ createVNode(_component_el_form_item, null, {
698
855
  default: withCtx(() => [
699
- createVNode(_component_el_slider, {
700
- modelValue: bookmarkForm.rotation,
701
- "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => bookmarkForm.rotation = $event),
702
- min: 0,
703
- max: 360,
704
- step: 1,
705
- "show-input": ""
706
- }, null, 8, ["modelValue"])
856
+ createVNode(_component_el_checkbox, {
857
+ modelValue: bookmarkForm.saveLayerState,
858
+ "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => bookmarkForm.saveLayerState = $event)
859
+ }, {
860
+ default: withCtx(() => [..._cache[21] || (_cache[21] = [
861
+ createTextVNode("保存当前图层状态(可见性、透明度)", -1)
862
+ ])]),
863
+ _: 1
864
+ }, 8, ["modelValue"])
707
865
  ]),
708
866
  _: 1
709
867
  })
@@ -1,5 +1,5 @@
1
1
  import { nextTick, defineComponent, computed, ref, reactive, markRaw, watch, onMounted, onBeforeUnmount, toRefs, resolveComponent, openBlock, createBlock, Transition, withCtx, withDirectives, createVNode, createElementVNode, normalizeClass, normalizeStyle, withModifiers, createElementBlock, resolveDynamicComponent, createCommentVNode, toDisplayString, withKeys, renderSlot, vShow, createTextVNode, isVNode, render } from "vue";
2
- import { w as componentSizes, x as obtainAllFocusableElements, y as getEventCode, E as EVENT_CODE, A as ElButton, B as ElFocusTrap, C as ElInput, D as ElOverlay, F as ElIcon, G as TypeComponents, H as useGlobalComponentSettings, I as loading_default, J as TypeComponentsMap, K as useId, L as useDraggable, N as isFunction, O as isString, P as useLockscreen, Q as _export_sfc, S as useSameTarget, U as isClient, V as hasOwn, W as isObject, Y as isUndefined, Z as isElement, $ as debugWarn } from "./index-dd63f686.mjs";
2
+ import { A as componentSizes, B as obtainAllFocusableElements, C as getEventCode, D as EVENT_CODE, F as ElButton, G as ElFocusTrap, H as ElInput, I as ElOverlay, J as ElIcon, K as TypeComponents, L as useGlobalComponentSettings, N as loading_default, O as TypeComponentsMap, P as useId, Q as useDraggable, S as isFunction, U as isString, V as useLockscreen, W as _export_sfc, Y as useSameTarget, Z as isClient, $ as hasOwn, a0 as isObject, a1 as isUndefined, a2 as isElement, a3 as debugWarn } from "./index-7f38e279.mjs";
3
3
  const isValidComponentSize = (val) => ["", ...componentSizes].includes(val);
4
4
  const FOCUSABLE_CHILDREN = "_trap-focus-children";
5
5
  const FOCUS_STACK = [];