vue-openlayers-plugin 1.0.82 → 1.0.84

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 (233) hide show
  1. package/lib/BasemapPanel-1145a7ed.mjs +280 -0
  2. package/lib/CoordinateLocationDialog-be972ee5.mjs +263 -0
  3. package/lib/FilterPanel-9d55d20c.mjs +6 -0
  4. package/lib/LayerPanel-0272f4a3.mjs +6 -0
  5. package/lib/MapPrintDialog-3d0a2891.mjs +6 -0
  6. package/lib/MeasurementDialog-37a0bbb3.mjs +369 -0
  7. package/lib/MyMarkersDialog-61d5c30d.mjs +584 -0
  8. package/lib/RegionNavigationDialog-0808549f.mjs +1320 -0
  9. package/lib/ViewBookmarksDialog-107a29d1.mjs +723 -0
  10. package/lib/index-3d1e1ad0.mjs +839 -0
  11. package/lib/{index-61901e1f.mjs → index-6f94a7fa.mjs} +50494 -53897
  12. package/lib/index-91e9a4e6.mjs +756 -0
  13. package/lib/{index.es-c17b5917.mjs → index.es-03fbdea2.mjs} +1 -1
  14. package/lib/index.esm.js +65 -56
  15. package/lib/index.umd.js +73175 -71501
  16. package/lib/style.css +1705 -1704
  17. package/package.json +8 -4
  18. package/types/src/assets/index.d.ts +9 -0
  19. package/types/src/assets/index.d.ts.map +1 -0
  20. package/types/src/components/CustomDialog/CustomDialog.vue.d.ts +16 -16
  21. package/types/src/components/CustomDialog/icons/index.d.ts +14 -0
  22. package/types/src/components/CustomDialog/icons/index.d.ts.map +1 -0
  23. package/types/src/components/OlBaseLayerSwitcher.vue.d.ts +19 -0
  24. package/types/src/components/OlBaseLayerSwitcher.vue.d.ts.map +1 -0
  25. package/types/src/components/OlControlPanel.vue.d.ts +63 -0
  26. package/types/src/components/OlControlPanel.vue.d.ts.map +1 -0
  27. package/types/src/components/OlDialogs/BasemapPanel.vue.d.ts +20 -0
  28. package/types/src/components/OlDialogs/BasemapPanel.vue.d.ts.map +1 -0
  29. package/types/src/components/OlDialogs/CoordinateLocationDialog.vue.d.ts +21 -0
  30. package/types/src/components/OlDialogs/CoordinateLocationDialog.vue.d.ts.map +1 -0
  31. package/types/src/components/OlDialogs/DialogManager.d.ts +58 -0
  32. package/types/src/components/OlDialogs/DialogManager.d.ts.map +1 -0
  33. package/types/src/components/OlDialogs/FilterPanel.vue.d.ts +33 -0
  34. package/types/src/components/OlDialogs/FilterPanel.vue.d.ts.map +1 -0
  35. package/types/src/components/OlDialogs/LayerPanel.vue.d.ts +1345 -0
  36. package/types/src/components/OlDialogs/LayerPanel.vue.d.ts.map +1 -0
  37. package/types/src/components/OlDialogs/LayerStyleConfig.vue.d.ts +23 -0
  38. package/types/src/components/OlDialogs/LayerStyleConfig.vue.d.ts.map +1 -0
  39. package/types/src/components/OlDialogs/LayerTreeNode.vue.d.ts +28 -0
  40. package/types/src/components/OlDialogs/LayerTreeNode.vue.d.ts.map +1 -0
  41. package/types/src/components/OlDialogs/MapDrawingDialog/components/ListTab.vue.d.ts +3 -0
  42. package/types/src/components/OlDialogs/MapDrawingDialog/components/ListTab.vue.d.ts.map +1 -0
  43. package/types/src/components/OlDialogs/MapDrawingDialog/components/MarkTab.vue.d.ts +3 -0
  44. package/types/src/components/OlDialogs/MapDrawingDialog/components/MarkTab.vue.d.ts.map +1 -0
  45. package/types/src/components/OlDialogs/MapDrawingDialog/index.vue.d.ts +3 -0
  46. package/types/src/components/OlDialogs/MapDrawingDialog/index.vue.d.ts.map +1 -0
  47. package/types/src/components/OlDialogs/MapPrintDialog.vue.d.ts +24 -0
  48. package/types/src/components/OlDialogs/MapPrintDialog.vue.d.ts.map +1 -0
  49. package/types/src/components/OlDialogs/MeasurementDialog.vue.d.ts +41 -0
  50. package/types/src/components/OlDialogs/MeasurementDialog.vue.d.ts.map +1 -0
  51. package/types/src/components/OlDialogs/MyMarkersDialog.vue.d.ts +21 -0
  52. package/types/src/components/OlDialogs/MyMarkersDialog.vue.d.ts.map +1 -0
  53. package/types/src/components/OlDialogs/RegionNavigationDialog.vue.d.ts +25 -0
  54. package/types/src/components/OlDialogs/RegionNavigationDialog.vue.d.ts.map +1 -0
  55. package/types/src/components/OlDialogs/ViewBookmarksDialog.vue.d.ts +21 -0
  56. package/types/src/components/OlDialogs/ViewBookmarksDialog.vue.d.ts.map +1 -0
  57. package/types/src/components/OlDialogs/registry.d.ts +39 -0
  58. package/types/src/components/OlDialogs/registry.d.ts.map +1 -0
  59. package/types/src/components/OlDrawToolbar.vue.d.ts +61 -0
  60. package/types/src/components/OlDrawToolbar.vue.d.ts.map +1 -0
  61. package/types/src/components/OlLegendPanel.vue.d.ts +69 -0
  62. package/types/src/components/OlLegendPanel.vue.d.ts.map +1 -0
  63. package/types/src/components/OlMapContainer.vue.d.ts +112 -0
  64. package/types/src/components/OlMapContainer.vue.d.ts.map +1 -0
  65. package/types/src/components/OlMapPopup/ArrayPopup.vue.d.ts +47 -0
  66. package/types/src/components/OlMapPopup/ArrayPopup.vue.d.ts.map +1 -0
  67. package/types/src/components/OlMapPopup/BasePopup.vue.d.ts +63 -0
  68. package/types/src/components/OlMapPopup/BasePopup.vue.d.ts.map +1 -0
  69. package/types/src/components/OlMapPopup/HtmlPopup.vue.d.ts +45 -0
  70. package/types/src/components/OlMapPopup/HtmlPopup.vue.d.ts.map +1 -0
  71. package/types/src/components/OlMapPopup/ImagePopup.vue.d.ts +45 -0
  72. package/types/src/components/OlMapPopup/ImagePopup.vue.d.ts.map +1 -0
  73. package/types/src/components/OlMapPopup/index.d.ts +9 -0
  74. package/types/src/components/OlMapPopup/index.d.ts.map +1 -0
  75. package/types/src/components/OlMapPopup/types.d.ts +118 -0
  76. package/types/src/components/OlMapPopup/types.d.ts.map +1 -0
  77. package/types/src/components/OlMapSearch.vue.d.ts +126 -0
  78. package/types/src/components/OlMapSearch.vue.d.ts.map +1 -0
  79. package/types/src/components/OlMapTooltip.vue.d.ts +70 -0
  80. package/types/src/components/OlMapTooltip.vue.d.ts.map +1 -0
  81. package/types/src/core/EventBus.d.ts +66 -0
  82. package/types/src/core/EventBus.d.ts.map +1 -0
  83. package/types/src/core/EventManager.d.ts +147 -0
  84. package/types/src/core/EventManager.d.ts.map +1 -0
  85. package/types/src/core/FeatureHighlightManager.d.ts +103 -0
  86. package/types/src/core/FeatureHighlightManager.d.ts.map +1 -0
  87. package/types/src/core/GlobalStyleManager.d.ts +76 -0
  88. package/types/src/core/GlobalStyleManager.d.ts.map +1 -0
  89. package/types/src/core/LayerConfigManager.d.ts +66 -0
  90. package/types/src/core/LayerConfigManager.d.ts.map +1 -0
  91. package/types/src/core/LayerManager.d.ts +198 -0
  92. package/types/src/core/LayerManager.d.ts.map +1 -0
  93. package/types/src/core/LayerTreeManager.d.ts +125 -0
  94. package/types/src/core/LayerTreeManager.d.ts.map +1 -0
  95. package/types/src/core/MapManager.d.ts +203 -0
  96. package/types/src/core/MapManager.d.ts.map +1 -0
  97. package/types/src/core/MarkerDrawingAdapter.d.ts +125 -0
  98. package/types/src/core/MarkerDrawingAdapter.d.ts.map +1 -0
  99. package/types/src/core/PluginManager.d.ts +158 -0
  100. package/types/src/core/PluginManager.d.ts.map +1 -0
  101. package/types/src/core/PopupManager.d.ts +110 -0
  102. package/types/src/core/PopupManager.d.ts.map +1 -0
  103. package/types/src/core/SearchMarkerManager.d.ts +96 -0
  104. package/types/src/core/SearchMarkerManager.d.ts.map +1 -0
  105. package/types/src/core/TooltipHelper.d.ts +134 -0
  106. package/types/src/core/TooltipHelper.d.ts.map +1 -0
  107. package/types/src/core/amapSearchApi.d.ts +57 -0
  108. package/types/src/core/amapSearchApi.d.ts.map +1 -0
  109. package/types/src/core/basemapManager.d.ts +63 -0
  110. package/types/src/core/basemapManager.d.ts.map +1 -0
  111. package/types/src/core/configLoader.d.ts +159 -0
  112. package/types/src/core/configLoader.d.ts.map +1 -0
  113. package/types/src/core/drawing/BaseDrawing.d.ts +255 -0
  114. package/types/src/core/drawing/BaseDrawing.d.ts.map +1 -0
  115. package/types/src/core/drawing/DrawingManager.d.ts +394 -0
  116. package/types/src/core/drawing/DrawingManager.d.ts.map +1 -0
  117. package/types/src/core/drawing/IconDrawing.d.ts +188 -0
  118. package/types/src/core/drawing/IconDrawing.d.ts.map +1 -0
  119. package/types/src/core/drawing/ImageDrawing.d.ts +193 -0
  120. package/types/src/core/drawing/ImageDrawing.d.ts.map +1 -0
  121. package/types/src/core/drawing/LineDrawing.d.ts +193 -0
  122. package/types/src/core/drawing/LineDrawing.d.ts.map +1 -0
  123. package/types/src/core/drawing/MilitaryDrawing.d.ts +175 -0
  124. package/types/src/core/drawing/MilitaryDrawing.d.ts.map +1 -0
  125. package/types/src/core/drawing/MultiLineStringDrawing.d.ts +294 -0
  126. package/types/src/core/drawing/MultiLineStringDrawing.d.ts.map +1 -0
  127. package/types/src/core/drawing/MultiPointDrawing.d.ts +244 -0
  128. package/types/src/core/drawing/MultiPointDrawing.d.ts.map +1 -0
  129. package/types/src/core/drawing/MultiPolygonDrawing.d.ts +206 -0
  130. package/types/src/core/drawing/MultiPolygonDrawing.d.ts.map +1 -0
  131. package/types/src/core/drawing/PointDrawing.d.ts +175 -0
  132. package/types/src/core/drawing/PointDrawing.d.ts.map +1 -0
  133. package/types/src/core/drawing/PointWithTextDrawing.d.ts +183 -0
  134. package/types/src/core/drawing/PointWithTextDrawing.d.ts.map +1 -0
  135. package/types/src/core/drawing/PolygonDrawing.d.ts +240 -0
  136. package/types/src/core/drawing/PolygonDrawing.d.ts.map +1 -0
  137. package/types/src/core/drawing/TextDrawing.d.ts +164 -0
  138. package/types/src/core/drawing/TextDrawing.d.ts.map +1 -0
  139. package/types/src/core/drawing/index.d.ts +525 -0
  140. package/types/src/core/drawing/index.d.ts.map +1 -0
  141. package/types/src/core/geoJsonLocationTool.d.ts +116 -0
  142. package/types/src/core/geoJsonLocationTool.d.ts.map +1 -0
  143. package/types/src/core/layers/BaseLayer.d.ts +162 -0
  144. package/types/src/core/layers/BaseLayer.d.ts.map +1 -0
  145. package/types/src/core/layers/CanvasLayerHandler.d.ts +65 -0
  146. package/types/src/core/layers/CanvasLayerHandler.d.ts.map +1 -0
  147. package/types/src/core/layers/ClusterLayerHandler.d.ts +122 -0
  148. package/types/src/core/layers/ClusterLayerHandler.d.ts.map +1 -0
  149. package/types/src/core/layers/GMLLayerHandler.d.ts +107 -0
  150. package/types/src/core/layers/GMLLayerHandler.d.ts.map +1 -0
  151. package/types/src/core/layers/GeoJSONLayerHandler.d.ts +125 -0
  152. package/types/src/core/layers/GeoJSONLayerHandler.d.ts.map +1 -0
  153. package/types/src/core/layers/HeatmapLayerHandler.d.ts +86 -0
  154. package/types/src/core/layers/HeatmapLayerHandler.d.ts.map +1 -0
  155. package/types/src/core/layers/ImageVectorLayerHandler.d.ts +77 -0
  156. package/types/src/core/layers/ImageVectorLayerHandler.d.ts.map +1 -0
  157. package/types/src/core/layers/KMLLayerHandler.d.ts +95 -0
  158. package/types/src/core/layers/KMLLayerHandler.d.ts.map +1 -0
  159. package/types/src/core/layers/LayerFactory.d.ts +63 -0
  160. package/types/src/core/layers/LayerFactory.d.ts.map +1 -0
  161. package/types/src/core/layers/SuperMapServiceTester.d.ts +54 -0
  162. package/types/src/core/layers/SuperMapServiceTester.d.ts.map +1 -0
  163. package/types/src/core/layers/SuperMapTiledMapServiceHandler.d.ts +35 -0
  164. package/types/src/core/layers/SuperMapTiledMapServiceHandler.d.ts.map +1 -0
  165. package/types/src/core/layers/TiandituConfigHelper.d.ts +120 -0
  166. package/types/src/core/layers/TiandituConfigHelper.d.ts.map +1 -0
  167. package/types/src/core/layers/TiandituLayerHandler.d.ts +75 -0
  168. package/types/src/core/layers/TiandituLayerHandler.d.ts.map +1 -0
  169. package/types/src/core/layers/TileLayerHandler.d.ts +42 -0
  170. package/types/src/core/layers/TileLayerHandler.d.ts.map +1 -0
  171. package/types/src/core/layers/TileSuperMapRestHandler.d.ts +161 -0
  172. package/types/src/core/layers/TileSuperMapRestHandler.d.ts.map +1 -0
  173. package/types/src/core/layers/VectorTileLayerHandler.d.ts +126 -0
  174. package/types/src/core/layers/VectorTileLayerHandler.d.ts.map +1 -0
  175. package/types/src/core/layers/WFSLayerHandler.d.ts +80 -0
  176. package/types/src/core/layers/WFSLayerHandler.d.ts.map +1 -0
  177. package/types/src/core/layers/WKTLayerHandler.d.ts +123 -0
  178. package/types/src/core/layers/WKTLayerHandler.d.ts.map +1 -0
  179. package/types/src/core/layers/WMSLayerHandler.d.ts +78 -0
  180. package/types/src/core/layers/WMSLayerHandler.d.ts.map +1 -0
  181. package/types/src/core/layers/WMTSLayerHandler.d.ts +44 -0
  182. package/types/src/core/layers/WMTSLayerHandler.d.ts.map +1 -0
  183. package/types/src/core/layers/index.d.ts +20 -0
  184. package/types/src/core/layers/index.d.ts.map +1 -0
  185. package/types/src/core/layers/interfaces.d.ts +95 -0
  186. package/types/src/core/layers/interfaces.d.ts.map +1 -0
  187. package/types/src/core/mapOperationTool.d.ts +145 -0
  188. package/types/src/core/mapOperationTool.d.ts.map +1 -0
  189. package/types/src/core/measurementTool.d.ts +136 -0
  190. package/types/src/core/measurementTool.d.ts.map +1 -0
  191. package/types/src/core/overviewMapUtil.d.ts +62 -0
  192. package/types/src/core/overviewMapUtil.d.ts.map +1 -0
  193. package/types/src/core/proxyHelper.d.ts +66 -0
  194. package/types/src/core/proxyHelper.d.ts.map +1 -0
  195. package/types/src/core/storage.d.ts +139 -0
  196. package/types/src/core/storage.d.ts.map +1 -0
  197. package/types/src/core/styles/StyleFactory.d.ts +74 -0
  198. package/types/src/core/styles/StyleFactory.d.ts.map +1 -0
  199. package/types/src/core/styles/StyleManager.d.ts +77 -0
  200. package/types/src/core/styles/StyleManager.d.ts.map +1 -0
  201. package/types/src/core/styles/index.d.ts +67 -0
  202. package/types/src/core/styles/index.d.ts.map +1 -0
  203. package/types/src/core/styles/interfaces.d.ts +221 -0
  204. package/types/src/core/styles/interfaces.d.ts.map +1 -0
  205. package/types/src/core/tiandituSearchApi.d.ts +51 -0
  206. package/types/src/core/tiandituSearchApi.d.ts.map +1 -0
  207. package/types/src/data-old/testLayers.d.ts +84 -0
  208. package/types/src/data-old/testLayers.d.ts.map +1 -0
  209. package/types/src/examples-old/FilterExamples.d.ts +104 -0
  210. package/types/src/examples-old/FilterExamples.d.ts.map +1 -0
  211. package/types/src/hooks/useMap.d.ts +5 -0
  212. package/types/src/hooks/useMap.d.ts.map +1 -0
  213. package/types/src/services/searchService.d.ts +106 -0
  214. package/types/src/services/searchService.d.ts.map +1 -0
  215. package/types/src/test-old/FilterSystemTest.d.ts +57 -0
  216. package/types/src/test-old/FilterSystemTest.d.ts.map +1 -0
  217. package/types/src/types/index.d.ts +2 -11
  218. package/types/src/types/index.d.ts.map +1 -1
  219. package/types/src/types/map.d.ts +819 -0
  220. package/types/src/types/map.d.ts.map +1 -0
  221. package/types/src/types/plugin.d.ts +202 -0
  222. package/types/src/types/plugin.d.ts.map +1 -0
  223. package/types/src/utils/DiffusionAnimationHelper.d.ts +60 -0
  224. package/types/src/utils/DiffusionAnimationHelper.d.ts.map +1 -0
  225. package/types/src/utils/GifAnimationHelper.d.ts +31 -0
  226. package/types/src/utils/GifAnimationHelper.d.ts.map +1 -0
  227. package/types/src/utils/coordinateTransform.d.ts +28 -0
  228. package/types/src/utils/coordinateTransform.d.ts.map +1 -0
  229. package/types/src/utils/index.d.ts +8 -8
  230. package/types/src/utils/index.d.ts.map +1 -1
  231. package/types/src/utils/unitConverter.d.ts +36 -0
  232. package/types/src/utils/unitConverter.d.ts.map +1 -0
  233. package/types/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,723 @@
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-6f94a7fa.mjs";
3
+ import { E as ElMessageBox } from "./index-91e9a4e6.mjs";
4
+ import "ol";
5
+ const _hoisted_1 = { class: "bookmarks-content" };
6
+ const _hoisted_2 = { class: "toolbar" };
7
+ const _hoisted_3 = { class: "search-filter" };
8
+ const _hoisted_4 = { class: "bookmarks-grid" };
9
+ const _hoisted_5 = ["onClick"];
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" };
20
+ const _hoisted_16 = { class: "detail-item" };
21
+ const _hoisted_17 = { class: "bookmark-time" };
22
+ const _hoisted_18 = {
23
+ key: 0,
24
+ class: "empty-state"
25
+ };
26
+ const _hoisted_19 = {
27
+ key: 1,
28
+ class: "statistics"
29
+ };
30
+ const _hoisted_20 = { class: "dialog-footer" };
31
+ const _sfc_main = /* @__PURE__ */ defineComponent({
32
+ __name: "ViewBookmarksDialog",
33
+ props: {
34
+ modelValue: { type: Boolean }
35
+ },
36
+ emits: ["update:modelValue", "bookmark-action"],
37
+ setup(__props, { emit: __emit }) {
38
+ const props = __props;
39
+ const emit = __emit;
40
+ const dialogVisible = computed({
41
+ get: () => props.modelValue,
42
+ set: (value) => emit("update:modelValue", value)
43
+ });
44
+ const searchKeyword = ref("");
45
+ const filterCategory = ref("");
46
+ const sortBy = ref("createTime");
47
+ const bookmarks = ref([
48
+ {
49
+ id: "1",
50
+ name: "北京市中心",
51
+ category: "城市",
52
+ description: "北京市中心区域视角",
53
+ center: [116.407526, 39.90403],
54
+ zoom: 12,
55
+ rotation: 0,
56
+ useCount: 5,
57
+ createTime: /* @__PURE__ */ new Date("2024-01-15")
58
+ },
59
+ {
60
+ id: "2",
61
+ name: "上海外滩",
62
+ category: "景点",
63
+ description: "上海外滩全景视角",
64
+ center: [121.485, 31.235],
65
+ zoom: 15,
66
+ rotation: 45,
67
+ useCount: 3,
68
+ createTime: /* @__PURE__ */ new Date("2024-01-20")
69
+ }
70
+ ]);
71
+ const showBookmarkForm = ref(false);
72
+ const editingIndex = ref(-1);
73
+ const bookmarkForm = reactive({
74
+ name: "",
75
+ category: "默认",
76
+ description: "",
77
+ centerLon: 116.407526,
78
+ centerLat: 39.90403,
79
+ zoom: 10,
80
+ rotation: 0
81
+ });
82
+ const categories = computed(() => {
83
+ const cats = [...new Set(bookmarks.value.map((b) => b.category))];
84
+ return cats.filter((cat) => cat);
85
+ });
86
+ const filteredBookmarks = computed(() => {
87
+ let result = bookmarks.value;
88
+ if (searchKeyword.value) {
89
+ const keyword = searchKeyword.value.toLowerCase();
90
+ result = result.filter(
91
+ (bookmark) => bookmark.name.toLowerCase().includes(keyword) || bookmark.description.toLowerCase().includes(keyword)
92
+ );
93
+ }
94
+ if (filterCategory.value) {
95
+ result = result.filter((bookmark) => bookmark.category === filterCategory.value);
96
+ }
97
+ result.sort((a, b) => {
98
+ switch (sortBy.value) {
99
+ case "name":
100
+ return a.name.localeCompare(b.name);
101
+ case "useCount":
102
+ return b.useCount - a.useCount;
103
+ case "createTime":
104
+ default:
105
+ return new Date(b.createTime).getTime() - new Date(a.createTime).getTime();
106
+ }
107
+ });
108
+ return result;
109
+ });
110
+ const todayCount = computed(() => {
111
+ const today = /* @__PURE__ */ new Date();
112
+ today.setHours(0, 0, 0, 0);
113
+ return bookmarks.value.filter((bookmark) => bookmark.createTime >= today).length;
114
+ });
115
+ const totalUseCount = computed(() => {
116
+ return bookmarks.value.reduce((total, bookmark) => total + bookmark.useCount, 0);
117
+ });
118
+ const handleSearch = () => {
119
+ };
120
+ const showAddBookmark = () => {
121
+ editingIndex.value = -1;
122
+ Object.assign(bookmarkForm, {
123
+ name: "",
124
+ category: "默认",
125
+ description: "",
126
+ centerLon: 116.407526,
127
+ centerLat: 39.90403,
128
+ zoom: 10,
129
+ rotation: 0
130
+ });
131
+ showBookmarkForm.value = true;
132
+ };
133
+ const editBookmark = (bookmark, index) => {
134
+ editingIndex.value = index;
135
+ Object.assign(bookmarkForm, {
136
+ name: bookmark.name,
137
+ category: bookmark.category,
138
+ description: bookmark.description,
139
+ centerLon: bookmark.center[0],
140
+ centerLat: bookmark.center[1],
141
+ zoom: bookmark.zoom,
142
+ rotation: bookmark.rotation
143
+ });
144
+ showBookmarkForm.value = true;
145
+ };
146
+ const saveBookmark = () => {
147
+ if (!bookmarkForm.name.trim()) {
148
+ console.error("请输入书签名称");
149
+ return;
150
+ }
151
+ const bookmarkData = {
152
+ id: editingIndex.value >= 0 ? bookmarks.value[editingIndex.value].id : Date.now().toString(),
153
+ name: bookmarkForm.name,
154
+ category: bookmarkForm.category || "默认",
155
+ description: bookmarkForm.description,
156
+ center: [Number(bookmarkForm.centerLon), Number(bookmarkForm.centerLat)],
157
+ zoom: bookmarkForm.zoom,
158
+ rotation: bookmarkForm.rotation,
159
+ useCount: editingIndex.value >= 0 ? bookmarks.value[editingIndex.value].useCount : 0,
160
+ createTime: editingIndex.value >= 0 ? bookmarks.value[editingIndex.value].createTime : /* @__PURE__ */ new Date()
161
+ };
162
+ if (editingIndex.value >= 0) {
163
+ bookmarks.value[editingIndex.value] = bookmarkData;
164
+ console.log("书签更新成功");
165
+ } else {
166
+ bookmarks.value.push(bookmarkData);
167
+ console.log("书签保存成功");
168
+ }
169
+ emit("bookmark-action", {
170
+ action: editingIndex.value >= 0 ? "update" : "add",
171
+ bookmark: bookmarkData
172
+ });
173
+ showBookmarkForm.value = false;
174
+ };
175
+ const applyBookmark = (bookmark) => {
176
+ bookmark.useCount++;
177
+ emit("bookmark-action", {
178
+ action: "apply",
179
+ bookmark
180
+ });
181
+ console.log(`已应用视角: ${bookmark.name}`);
182
+ };
183
+ const deleteBookmark = (index) => {
184
+ ElMessageBox.confirm(
185
+ "确定要删除这个书签吗?",
186
+ "确认删除",
187
+ {
188
+ confirmButtonText: "确定",
189
+ cancelButtonText: "取消",
190
+ type: "warning"
191
+ }
192
+ ).then(() => {
193
+ const bookmark = bookmarks.value[index];
194
+ bookmarks.value.splice(index, 1);
195
+ emit("bookmark-action", {
196
+ action: "delete",
197
+ bookmark
198
+ });
199
+ console.log("书签删除成功");
200
+ }).catch(() => {
201
+ });
202
+ };
203
+ const clearAllBookmarks = () => {
204
+ ElMessageBox.confirm(
205
+ "确定要清空所有书签吗?此操作不可恢复!",
206
+ "确认清空",
207
+ {
208
+ confirmButtonText: "确定",
209
+ cancelButtonText: "取消",
210
+ type: "warning"
211
+ }
212
+ ).then(() => {
213
+ bookmarks.value = [];
214
+ emit("bookmark-action", {
215
+ action: "clear"
216
+ });
217
+ console.log("已清空所有书签");
218
+ }).catch(() => {
219
+ });
220
+ };
221
+ const importBookmarks = () => {
222
+ const input = document.createElement("input");
223
+ input.type = "file";
224
+ input.accept = ".json";
225
+ input.onchange = (e) => {
226
+ var _a;
227
+ const file = (_a = e.target.files) == null ? void 0 : _a[0];
228
+ if (file) {
229
+ const reader = new FileReader();
230
+ reader.onload = (e2) => {
231
+ var _a2;
232
+ try {
233
+ const data = JSON.parse((_a2 = e2.target) == null ? void 0 : _a2.result);
234
+ if (Array.isArray(data)) {
235
+ bookmarks.value = data.map((item) => ({
236
+ ...item,
237
+ createTime: new Date(item.createTime)
238
+ }));
239
+ console.log(`成功导入${data.length}个书签`);
240
+ } else {
241
+ console.error("文件格式不正确");
242
+ }
243
+ } catch (error) {
244
+ console.error("文件解析失败");
245
+ }
246
+ };
247
+ reader.readAsText(file);
248
+ }
249
+ };
250
+ input.click();
251
+ };
252
+ const exportBookmarks = () => {
253
+ if (bookmarks.value.length === 0) {
254
+ console.warn("没有书签可以导出");
255
+ return;
256
+ }
257
+ const data = JSON.stringify(bookmarks.value, null, 2);
258
+ const blob = new Blob([data], { type: "application/json" });
259
+ const url = URL.createObjectURL(blob);
260
+ const a = document.createElement("a");
261
+ a.href = url;
262
+ a.download = `view_bookmarks_${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}.json`;
263
+ a.click();
264
+ URL.revokeObjectURL(url);
265
+ console.log("书签导出成功");
266
+ };
267
+ const formatTime = (time) => {
268
+ return new Date(time).toLocaleDateString();
269
+ };
270
+ const handleClose = () => {
271
+ dialogVisible.value = false;
272
+ searchKeyword.value = "";
273
+ filterCategory.value = "";
274
+ };
275
+ return (_ctx, _cache) => {
276
+ const _component_el_button = resolveComponent("el-button");
277
+ const _component_el_input = resolveComponent("el-input");
278
+ const _component_el_option = resolveComponent("el-option");
279
+ const _component_el_select = resolveComponent("el-select");
280
+ const _component_el_icon = resolveComponent("el-icon");
281
+ const _component_el_button_group = resolveComponent("el-button-group");
282
+ const _component_el_tag = resolveComponent("el-tag");
283
+ const _component_el_empty = resolveComponent("el-empty");
284
+ const _component_el_statistic = resolveComponent("el-statistic");
285
+ const _component_el_col = resolveComponent("el-col");
286
+ const _component_el_row = resolveComponent("el-row");
287
+ const _component_el_form_item = resolveComponent("el-form-item");
288
+ const _component_el_slider = resolveComponent("el-slider");
289
+ const _component_el_form = resolveComponent("el-form");
290
+ const _component_EPlusDialog = resolveComponent("EPlusDialog");
291
+ return openBlock(), createBlock(_component_EPlusDialog, {
292
+ modelValue: dialogVisible.value,
293
+ "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => dialogVisible.value = $event),
294
+ title: "视角书签",
295
+ width: "700px",
296
+ "before-close": handleClose,
297
+ "show-modal": false,
298
+ cacheId: "bookmarks-dialog",
299
+ class: "bookmarks-dialog"
300
+ }, {
301
+ footer: withCtx(() => [
302
+ createElementVNode("div", _hoisted_20, [
303
+ createVNode(_component_el_button, { onClick: handleClose }, {
304
+ default: withCtx(() => [..._cache[23] || (_cache[23] = [
305
+ createTextVNode("关闭", -1)
306
+ ])]),
307
+ _: 1
308
+ })
309
+ ])
310
+ ]),
311
+ default: withCtx(() => [
312
+ createElementVNode("div", _hoisted_1, [
313
+ createElementVNode("div", _hoisted_2, [
314
+ createVNode(_component_el_button, {
315
+ type: "primary",
316
+ icon: unref(plus_default),
317
+ onClick: showAddBookmark
318
+ }, {
319
+ default: withCtx(() => [..._cache[13] || (_cache[13] = [
320
+ createTextVNode(" 保存当前视角 ", -1)
321
+ ])]),
322
+ _: 1
323
+ }, 8, ["icon"]),
324
+ createVNode(_component_el_button, {
325
+ icon: unref(folder_opened_default),
326
+ onClick: importBookmarks
327
+ }, {
328
+ default: withCtx(() => [..._cache[14] || (_cache[14] = [
329
+ createTextVNode(" 导入书签 ", -1)
330
+ ])]),
331
+ _: 1
332
+ }, 8, ["icon"]),
333
+ createVNode(_component_el_button, {
334
+ icon: unref(download_default),
335
+ onClick: exportBookmarks
336
+ }, {
337
+ default: withCtx(() => [..._cache[15] || (_cache[15] = [
338
+ createTextVNode(" 导出书签 ", -1)
339
+ ])]),
340
+ _: 1
341
+ }, 8, ["icon"]),
342
+ createVNode(_component_el_button, {
343
+ icon: unref(delete_default),
344
+ onClick: clearAllBookmarks,
345
+ disabled: bookmarks.value.length === 0
346
+ }, {
347
+ default: withCtx(() => [..._cache[16] || (_cache[16] = [
348
+ createTextVNode(" 清空全部 ", -1)
349
+ ])]),
350
+ _: 1
351
+ }, 8, ["icon", "disabled"])
352
+ ]),
353
+ createElementVNode("div", _hoisted_3, [
354
+ createVNode(_component_el_input, {
355
+ modelValue: searchKeyword.value,
356
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchKeyword.value = $event),
357
+ placeholder: "搜索书签名称或描述...",
358
+ "prefix-icon": unref(search_default),
359
+ clearable: "",
360
+ onInput: handleSearch,
361
+ style: { "width": "300px" }
362
+ }, null, 8, ["modelValue", "prefix-icon"]),
363
+ createVNode(_component_el_select, {
364
+ modelValue: filterCategory.value,
365
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => filterCategory.value = $event),
366
+ placeholder: "筛选分类",
367
+ clearable: "",
368
+ style: { "width": "120px", "margin-left": "10px" }
369
+ }, {
370
+ default: withCtx(() => [
371
+ createVNode(_component_el_option, {
372
+ label: "全部",
373
+ value: ""
374
+ }),
375
+ (openBlock(true), createElementBlock(Fragment, null, renderList(categories.value, (category) => {
376
+ return openBlock(), createBlock(_component_el_option, {
377
+ key: category,
378
+ label: category,
379
+ value: category
380
+ }, null, 8, ["label", "value"]);
381
+ }), 128))
382
+ ]),
383
+ _: 1
384
+ }, 8, ["modelValue"]),
385
+ createVNode(_component_el_select, {
386
+ modelValue: sortBy.value,
387
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => sortBy.value = $event),
388
+ placeholder: "排序方式",
389
+ style: { "width": "120px", "margin-left": "10px" }
390
+ }, {
391
+ default: withCtx(() => [
392
+ createVNode(_component_el_option, {
393
+ label: "创建时间",
394
+ value: "createTime"
395
+ }),
396
+ createVNode(_component_el_option, {
397
+ label: "名称",
398
+ value: "name"
399
+ }),
400
+ createVNode(_component_el_option, {
401
+ label: "使用次数",
402
+ value: "useCount"
403
+ })
404
+ ]),
405
+ _: 1
406
+ }, 8, ["modelValue"])
407
+ ]),
408
+ createElementVNode("div", _hoisted_4, [
409
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filteredBookmarks.value, (bookmark, index) => {
410
+ return openBlock(), createElementBlock("div", {
411
+ key: bookmark.id,
412
+ class: "bookmark-card",
413
+ onClick: ($event) => applyBookmark(bookmark)
414
+ }, [
415
+ createElementVNode("div", _hoisted_6, [
416
+ createElementVNode("div", _hoisted_7, [
417
+ createVNode(_component_el_icon, {
418
+ size: "40",
419
+ color: "#409eff"
420
+ }, {
421
+ default: withCtx(() => [
422
+ createVNode(unref(camera_default))
423
+ ]),
424
+ _: 1
425
+ })
426
+ ]),
427
+ createElementVNode("div", _hoisted_8, [
428
+ createVNode(_component_el_button_group, null, {
429
+ default: withCtx(() => [
430
+ createVNode(_component_el_button, {
431
+ type: "primary",
432
+ size: "small",
433
+ icon: unref(view_default),
434
+ onClick: withModifiers(($event) => applyBookmark(bookmark), ["stop"])
435
+ }, {
436
+ default: withCtx(() => [..._cache[17] || (_cache[17] = [
437
+ createTextVNode(" 应用 ", -1)
438
+ ])]),
439
+ _: 2
440
+ }, 1032, ["icon", "onClick"]),
441
+ createVNode(_component_el_button, {
442
+ size: "small",
443
+ icon: unref(edit_default),
444
+ onClick: withModifiers(($event) => editBookmark(bookmark, index), ["stop"])
445
+ }, {
446
+ default: withCtx(() => [..._cache[18] || (_cache[18] = [
447
+ createTextVNode(" 编辑 ", -1)
448
+ ])]),
449
+ _: 2
450
+ }, 1032, ["icon", "onClick"]),
451
+ createVNode(_component_el_button, {
452
+ size: "small",
453
+ icon: unref(delete_default),
454
+ onClick: withModifiers(($event) => deleteBookmark(index), ["stop"]),
455
+ class: "delete-btn"
456
+ }, {
457
+ default: withCtx(() => [..._cache[19] || (_cache[19] = [
458
+ createTextVNode(" 删除 ", -1)
459
+ ])]),
460
+ _: 2
461
+ }, 1032, ["icon", "onClick"])
462
+ ]),
463
+ _: 2
464
+ }, 1024)
465
+ ])
466
+ ]),
467
+ createElementVNode("div", _hoisted_9, [
468
+ createElementVNode("div", _hoisted_10, toDisplayString(bookmark.name), 1),
469
+ createElementVNode("div", _hoisted_11, [
470
+ createVNode(_component_el_tag, {
471
+ size: "small",
472
+ type: "info"
473
+ }, {
474
+ default: withCtx(() => [
475
+ createTextVNode(toDisplayString(bookmark.category), 1)
476
+ ]),
477
+ _: 2
478
+ }, 1024),
479
+ createElementVNode("span", _hoisted_12, "使用 " + toDisplayString(bookmark.useCount) + " 次", 1)
480
+ ]),
481
+ createElementVNode("div", _hoisted_13, toDisplayString(bookmark.description), 1),
482
+ createElementVNode("div", _hoisted_14, [
483
+ createElementVNode("span", _hoisted_15, [
484
+ createVNode(_component_el_icon, null, {
485
+ default: withCtx(() => [
486
+ createVNode(unref(location_default))
487
+ ]),
488
+ _: 1
489
+ }),
490
+ createTextVNode(" " + toDisplayString(bookmark.center[0].toFixed(4)) + ", " + toDisplayString(bookmark.center[1].toFixed(4)), 1)
491
+ ]),
492
+ createElementVNode("span", _hoisted_16, [
493
+ createVNode(_component_el_icon, null, {
494
+ default: withCtx(() => [
495
+ createVNode(unref(zoom_in_default))
496
+ ]),
497
+ _: 1
498
+ }),
499
+ createTextVNode(" 缩放: " + toDisplayString(bookmark.zoom), 1)
500
+ ])
501
+ ]),
502
+ createElementVNode("div", _hoisted_17, toDisplayString(formatTime(bookmark.createTime)), 1)
503
+ ])
504
+ ], 8, _hoisted_5);
505
+ }), 128))
506
+ ]),
507
+ filteredBookmarks.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_18, [
508
+ createVNode(_component_el_empty, { description: "暂无书签" }, {
509
+ default: withCtx(() => [
510
+ createVNode(_component_el_button, {
511
+ type: "primary",
512
+ onClick: showAddBookmark
513
+ }, {
514
+ default: withCtx(() => [..._cache[20] || (_cache[20] = [
515
+ createTextVNode("保存当前视角", -1)
516
+ ])]),
517
+ _: 1
518
+ })
519
+ ]),
520
+ _: 1
521
+ })
522
+ ])) : createCommentVNode("", true),
523
+ bookmarks.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_19, [
524
+ createVNode(_component_el_row, { gutter: 20 }, {
525
+ default: withCtx(() => [
526
+ createVNode(_component_el_col, { span: 6 }, {
527
+ default: withCtx(() => [
528
+ createVNode(_component_el_statistic, {
529
+ title: "总书签数",
530
+ value: bookmarks.value.length
531
+ }, null, 8, ["value"])
532
+ ]),
533
+ _: 1
534
+ }),
535
+ createVNode(_component_el_col, { span: 6 }, {
536
+ default: withCtx(() => [
537
+ createVNode(_component_el_statistic, {
538
+ title: "分类数",
539
+ value: categories.value.length
540
+ }, null, 8, ["value"])
541
+ ]),
542
+ _: 1
543
+ }),
544
+ createVNode(_component_el_col, { span: 6 }, {
545
+ default: withCtx(() => [
546
+ createVNode(_component_el_statistic, {
547
+ title: "今日新增",
548
+ value: todayCount.value
549
+ }, null, 8, ["value"])
550
+ ]),
551
+ _: 1
552
+ }),
553
+ createVNode(_component_el_col, { span: 6 }, {
554
+ default: withCtx(() => [
555
+ createVNode(_component_el_statistic, {
556
+ title: "总使用次数",
557
+ value: totalUseCount.value
558
+ }, null, 8, ["value"])
559
+ ]),
560
+ _: 1
561
+ })
562
+ ]),
563
+ _: 1
564
+ })
565
+ ])) : createCommentVNode("", true)
566
+ ]),
567
+ createVNode(_component_EPlusDialog, {
568
+ modelValue: showBookmarkForm.value,
569
+ "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => showBookmarkForm.value = $event),
570
+ title: editingIndex.value >= 0 ? "编辑书签" : "保存视角书签",
571
+ width: "450px",
572
+ cacheId: "bookmark-form",
573
+ "show-modal": false
574
+ }, {
575
+ footer: withCtx(() => [
576
+ createVNode(_component_el_button, {
577
+ onClick: _cache[10] || (_cache[10] = ($event) => showBookmarkForm.value = false)
578
+ }, {
579
+ default: withCtx(() => [..._cache[21] || (_cache[21] = [
580
+ createTextVNode("取消", -1)
581
+ ])]),
582
+ _: 1
583
+ }),
584
+ createVNode(_component_el_button, {
585
+ type: "primary",
586
+ onClick: saveBookmark
587
+ }, {
588
+ default: withCtx(() => [..._cache[22] || (_cache[22] = [
589
+ createTextVNode("保存", -1)
590
+ ])]),
591
+ _: 1
592
+ })
593
+ ]),
594
+ default: withCtx(() => [
595
+ createVNode(_component_el_form, {
596
+ model: bookmarkForm,
597
+ "label-width": "80px"
598
+ }, {
599
+ default: withCtx(() => [
600
+ createVNode(_component_el_form_item, {
601
+ label: "名称",
602
+ required: ""
603
+ }, {
604
+ default: withCtx(() => [
605
+ createVNode(_component_el_input, {
606
+ modelValue: bookmarkForm.name,
607
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => bookmarkForm.name = $event),
608
+ placeholder: "请输入书签名称"
609
+ }, null, 8, ["modelValue"])
610
+ ]),
611
+ _: 1
612
+ }),
613
+ createVNode(_component_el_form_item, { label: "分类" }, {
614
+ default: withCtx(() => [
615
+ createVNode(_component_el_select, {
616
+ modelValue: bookmarkForm.category,
617
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => bookmarkForm.category = $event),
618
+ placeholder: "选择或输入分类",
619
+ filterable: "",
620
+ "allow-create": "",
621
+ style: { "width": "100%" }
622
+ }, {
623
+ default: withCtx(() => [
624
+ (openBlock(true), createElementBlock(Fragment, null, renderList(categories.value, (category) => {
625
+ return openBlock(), createBlock(_component_el_option, {
626
+ key: category,
627
+ label: category,
628
+ value: category
629
+ }, null, 8, ["label", "value"]);
630
+ }), 128))
631
+ ]),
632
+ _: 1
633
+ }, 8, ["modelValue"])
634
+ ]),
635
+ _: 1
636
+ }),
637
+ createVNode(_component_el_form_item, { label: "描述" }, {
638
+ default: withCtx(() => [
639
+ createVNode(_component_el_input, {
640
+ modelValue: bookmarkForm.description,
641
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => bookmarkForm.description = $event),
642
+ type: "textarea",
643
+ rows: 3,
644
+ placeholder: "请输入描述信息"
645
+ }, null, 8, ["modelValue"])
646
+ ]),
647
+ _: 1
648
+ }),
649
+ createVNode(_component_el_form_item, { label: "中心点" }, {
650
+ default: withCtx(() => [
651
+ createVNode(_component_el_row, { gutter: 10 }, {
652
+ default: withCtx(() => [
653
+ createVNode(_component_el_col, { span: 12 }, {
654
+ default: withCtx(() => [
655
+ createVNode(_component_el_input, {
656
+ modelValue: bookmarkForm.centerLon,
657
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => bookmarkForm.centerLon = $event),
658
+ type: "number",
659
+ step: "0.000001",
660
+ placeholder: "经度"
661
+ }, null, 8, ["modelValue"])
662
+ ]),
663
+ _: 1
664
+ }),
665
+ createVNode(_component_el_col, { span: 12 }, {
666
+ default: withCtx(() => [
667
+ createVNode(_component_el_input, {
668
+ modelValue: bookmarkForm.centerLat,
669
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => bookmarkForm.centerLat = $event),
670
+ type: "number",
671
+ step: "0.000001",
672
+ placeholder: "纬度"
673
+ }, null, 8, ["modelValue"])
674
+ ]),
675
+ _: 1
676
+ })
677
+ ]),
678
+ _: 1
679
+ })
680
+ ]),
681
+ _: 1
682
+ }),
683
+ createVNode(_component_el_form_item, { label: "缩放级别" }, {
684
+ default: withCtx(() => [
685
+ createVNode(_component_el_slider, {
686
+ modelValue: bookmarkForm.zoom,
687
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => bookmarkForm.zoom = $event),
688
+ min: 1,
689
+ max: 20,
690
+ step: 0.1,
691
+ "show-input": ""
692
+ }, null, 8, ["modelValue"])
693
+ ]),
694
+ _: 1
695
+ }),
696
+ createVNode(_component_el_form_item, { label: "旋转角度" }, {
697
+ default: withCtx(() => [
698
+ createVNode(_component_el_slider, {
699
+ modelValue: bookmarkForm.rotation,
700
+ "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => bookmarkForm.rotation = $event),
701
+ min: 0,
702
+ max: 360,
703
+ step: 1,
704
+ "show-input": ""
705
+ }, null, 8, ["modelValue"])
706
+ ]),
707
+ _: 1
708
+ })
709
+ ]),
710
+ _: 1
711
+ }, 8, ["model"])
712
+ ]),
713
+ _: 1
714
+ }, 8, ["modelValue", "title"])
715
+ ]),
716
+ _: 1
717
+ }, 8, ["modelValue"]);
718
+ };
719
+ }
720
+ });
721
+ export {
722
+ _sfc_main as default
723
+ };