zhihao-ui 1.3.1 → 1.3.3

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 (43) hide show
  1. package/dist/es/{BaseInfo-CqPKfZM2.js → BaseInfo-BqJWKOdd.js} +1 -1
  2. package/dist/es/{BaseItem-XXH5e7db.js → BaseItem-BQbkTxt9.js} +3 -3
  3. package/dist/es/{Button-DLAiqJPu.js → Button-1UUC8v6b.js} +2 -2
  4. package/dist/es/{DatePicker-DNED5PYV.js → DatePicker-ByP3ZkhE.js} +3 -3
  5. package/dist/es/{DetailHeader-BCF-X9k8.js → DetailHeader-CnZCthjX.js} +3 -3
  6. package/dist/es/{DetailSubTitle-Booxy4wf.js → DetailSubTitle-COQCdb8X.js} +2 -2
  7. package/dist/es/{Dialog-gDiUEFNF.js → Dialog-DFQIVnQP.js} +3 -3
  8. package/dist/es/{DiyDataTable-CPFSQBiW.js → DiyDataTable-D0gTwPB4.js} +4 -4
  9. package/dist/es/{EditInfoPair-BeQ_RjRC.js → EditInfoPair-CZpQKhX6.js} +3 -3
  10. package/dist/es/{FileWrapper-CyQAOj8M.js → FileWrapper-C9Cqt-L8.js} +4 -4
  11. package/dist/es/{Grid-DAZ59W8l.js → Grid-CfwiS54k.js} +2 -2
  12. package/dist/es/{InfoPair-D2gWOKNY.js → InfoPair-ZKRxEmIC.js} +3 -3
  13. package/dist/es/{Input-DCs9DGvN.js → Input-CloA0e6h.js} +3 -3
  14. package/dist/es/{Loading-tblIiyvu.js → Loading-BXtzvylk.js} +2 -2
  15. package/dist/es/{Map-CWehCrKQ.js → Map-Ce0s7g5Z.js} +556 -466
  16. package/dist/es/{MessageBox-Bwv1ICSl.js → MessageBox-BNOuww77.js} +2 -2
  17. package/dist/es/{MoneyInput-BUho-aKW.js → MoneyInput-CuHL7bEc.js} +8 -8
  18. package/dist/es/{PageHeadPanel-BBzYKasW.js → PageHeadPanel-BroYHTD8.js} +2 -2
  19. package/dist/es/{Table-m_nv-2IU.js → Table-DFGzUqS3.js} +41 -41
  20. package/dist/es/{ToolTips-BrpfWKhV.js → ToolTips-BBi5iPOb.js} +3 -3
  21. package/dist/es/index.js +22 -22
  22. package/dist/es/{utils-sJ-t5B4u.js → utils-BbOeFn3W.js} +3 -3
  23. package/dist/es/{vendor-BUg4XLGS.js → vendor-D-B7bNnH.js} +1910 -1881
  24. package/dist/index.css +1 -1
  25. package/dist/types/components/Map/config/global.d.ts +1 -0
  26. package/dist/types/components/Map/config/index.d.ts +0 -41
  27. package/dist/types/components/Map/config/map.d.ts +0 -3
  28. package/dist/types/components/Map/function/drawPolygon.d.ts +1 -1
  29. package/dist/types/components/Map/function/port.d.ts +1 -2
  30. package/dist/types/components/Map/function/ship/index.d.ts +22 -0
  31. package/dist/types/components/Map/function/ship/style.d.ts +6 -0
  32. package/dist/types/components/Map/function/shipTrack.d.ts +7 -0
  33. package/dist/types/components/Map/meta/index.d.ts +0 -5
  34. package/dist/types/components/Map/utils/overlay.d.ts +2 -1
  35. package/dist/types/components/Map/utils/util.d.ts +42 -0
  36. package/dist/umd/index.css +1 -1
  37. package/dist/umd/index.umd.cjs +18 -16
  38. package/package.json +1 -1
  39. package/dist/types/components/Map/Map.vue.d.ts +0 -112
  40. package/dist/types/components/Map/function/label.d.ts +0 -9
  41. package/dist/types/components/Map/function/ship.d.ts +0 -34
  42. package/dist/types/components/Map/function/shipLabel.d.ts +0 -25
  43. package/dist/types/components/Map/index.d.ts +0 -364
@@ -1,7 +1,7 @@
1
1
  import { ref, computed, watch, onMounted, onBeforeUnmount, h, nextTick, createVNode, render, defineComponent, openBlock, createElementBlock, inject, createElementVNode, Fragment } from "vue";
2
- import { T as Text, F as Fill, S as Style, p as getLength, R as RBush$1, q as fromLonLat, O as Overlay, I as Icon, V as VectorSource, r as VectorLayer, s as debounce, i as cloneDeep, t as Feature, P as Point, h as hooks, L as LineString, u as Stroke, C as CircleStyle, v as Polyline, w as buffer, x as transform, y as getVectorContext, D as DoubleClickZoom, z as Draw, A as unByKey, B as getUid, M as Map$2, G as TileLayer, X as XYZ, H as View, J as toLonLat, K as ScaleLine$1, N as MultiPoint, Q as getArea } from "./vendor-BUg4XLGS.js";
3
- import { _ as _export_sfc } from "./Button-DLAiqJPu.js";
4
- import { w as withInstall } from "./utils-sJ-t5B4u.js";
2
+ import { T as Text, F as Fill, S as Style, p as fromLonLat, t as transformExtent, q as getLength, R as RBush$1, O as Overlay, I as Icon, V as VectorSource, r as VectorLayer, s as debounce, i as cloneDeep, u as Feature, P as Point, h as hooks, L as LineString, v as Stroke, C as CircleStyle, w as Polyline, x as buffer, y as transform, z as getVectorContext, D as DoubleClickZoom, A as Draw, B as unByKey, G as getUid, M as Map$2, H as TileLayer, X as XYZ, J as View, K as defaults, N as toLonLat, Q as ScaleLine$1, U as getArea, W as MultiPoint } from "./vendor-D-B7bNnH.js";
3
+ import { _ as _export_sfc } from "./Button-1UUC8v6b.js";
4
+ import { w as withInstall } from "./utils-BbOeFn3W.js";
5
5
  const TIAN_DI_TU_KEY = "a6e8f78974f2581f2ca00485b40c948f", MAP_ZOOM = {
6
6
  // 地图默认层级
7
7
  default: 13,
@@ -20,26 +20,41 @@ const TIAN_DI_TU_KEY = "a6e8f78974f2581f2ca00485b40c948f", MAP_ZOOM = {
20
20
  data: "EPSG:4326",
21
21
  // 墨卡托投影坐标 渲染坐标
22
22
  mercator: "EPSG:3857"
23
- }, MAP_DEFAULT_CENTER = [114.84, 30.52], CDN_URL = "https://static.zhihaoscm.cn/", formatLength = function(e, t) {
24
- const n = getLength(e);
23
+ }, MAP_DEFAULT_CENTER = [114.84, 30.52], CDN_URL = "https://static.zhihaoscm.cn/", equatorialCircumference = 2003750834e-2;
24
+ var BASE_MAP_LINK = ((e) => (e.vectorTile = `https://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.vectorTileMark = `https://t0.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.satelliteImgTile = `https://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.satelliteImgTileMark = `https://t0.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.greenTile = `${CDN_URL}/map/tile/{z}/{x}/{y}.png`, e))(BASE_MAP_LINK || {}), LENGTH_UNIT = /* @__PURE__ */ ((e) => (e[e.M = 1] = "M", e[e.KM = 2] = "KM", e[e.NM = 3] = "NM", e))(LENGTH_UNIT || {});
25
+ const calculateCirclePoints = (e, t) => {
26
+ const n = fromLonLat(e), o = t * 1e3, r = [
27
+ n[0] - o,
28
+ n[1] - o,
29
+ n[0] + o,
30
+ n[1] + o
31
+ ], l = transformExtent(r, projection.mercator, projection.data);
32
+ return {
33
+ leftTopPoint: { lng: l[0], lat: l[3] },
34
+ rightTopPoint: { lng: l[2], lat: l[3] },
35
+ rightBottomPoint: { lng: l[2], lat: l[1] },
36
+ leftBottomPoint: { lng: l[0], lat: l[1] }
37
+ };
38
+ }, formatLength = function(e, t) {
39
+ const o = getLength(e);
25
40
  let r = "";
26
- switch (t) {
41
+ switch (console.log(t, LENGTH_UNIT), t) {
27
42
  case LENGTH_UNIT.M:
28
- r = Math.round(n * 100) / 100 + " m";
43
+ r = Math.round(o * 100) / 100 + " m";
29
44
  break;
30
45
  case LENGTH_UNIT.KM:
31
- r = Math.round(n / 1e3 * 100) / 100 + " km";
46
+ r = Math.round(o / 1e3 * 100) / 100 + " km";
32
47
  break;
33
48
  case LENGTH_UNIT.NM:
34
- r = (Math.round(n / 1e3 * 100) / 100 / 1.852).toFixed(2) + " nm";
49
+ r = (Math.round(o / 1e3 * 100) / 100 / 1.852).toFixed(2) + " nm";
35
50
  break;
36
51
  }
37
52
  return r;
38
- }, equatorialCircumference = 2003750834e-2;
53
+ };
39
54
  function lonLatToMercator(e) {
40
55
  const t = e[0] * equatorialCircumference / 180;
41
- let o = Math.log(Math.tan((90 + e[1]) * Math.PI / 360)) / (Math.PI / 180);
42
- return o = o * equatorialCircumference / 180, [t, o];
56
+ let n = Math.log(Math.tan((90 + e[1]) * Math.PI / 360)) / (Math.PI / 180);
57
+ return n = n * equatorialCircumference / 180, [t, n];
43
58
  }
44
59
  function getIconFont(unicode = "") {
45
60
  return unicode.indexOf("&") !== -1 && (unicode = unicode.replace("&", "&")), unicode.indexOf("&amp") !== -1 && (unicode = unicode.replace("&amp", "&")), eval('("' + unicode.replace("&#x", "\\u").replace(";", "") + '")');
@@ -55,21 +70,23 @@ const getIconStyle = (e) => {
55
70
  text: t,
56
71
  zIndex: 100
57
72
  });
58
- }, adjustBounds = (e, t) => t.length === 2 ? [e[0] - t[0], e[1] - t[1], e[2] + t[0], e[3] + t[1]] : [e[0] + t[0], e[1] + t[1], e[2] + t[2], e[3] + t[3]], isOverlapping$1 = (e, t) => e[0] <= t[2] && e[2] >= t[0] && e[1] <= t[3] && e[3] >= t[1], mercatorToLonLat = (e, t = "lonlat") => {
59
- const o = { lon: 0, lat: 0 }, n = e[0] / equatorialCircumference * 180;
73
+ }, mercatorToLonLat = (e, t = "lonlat") => {
74
+ const n = { lon: 0, lat: 0 }, o = e[0] / equatorialCircumference * 180;
60
75
  let r = e[1] / equatorialCircumference * 180;
61
- return r = 180 / Math.PI * (2 * Math.atan(Math.exp(r * Math.PI / 180)) - Math.PI / 2), o.lon = n, o.lat = r, t === "lonlat" ? o : [n, r];
62
- };
63
- var BASE_MAP_LINK = ((e) => (e.vectorTile = `https://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.vectorTileMark = `https://t0.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.satelliteImgTile = `https://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.satelliteImgTileMark = `https://t0.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.greenTile = `${CDN_URL}/map/tile/{z}/{x}/{y}.png`, e))(BASE_MAP_LINK || {}), LENGTH_UNIT = /* @__PURE__ */ ((e) => (e[e.M = 1] = "M", e[e.KM = 2] = "KM", e[e.NM = 3] = "NM", e))(LENGTH_UNIT || {});
64
- const getRightIcons = (e) => {
76
+ return r = 180 / Math.PI * (2 * Math.atan(Math.exp(r * Math.PI / 180)) - Math.PI / 2), n.lon = o, n.lat = r, t === "lonlat" ? n : [o, r];
77
+ }, adjustBounds = (e, t) => t.length === 2 ? [e[0] - t[0], e[1] - t[1], e[2] + t[0], e[3] + t[1]] : [e[0] + t[0], e[1] + t[1], e[2] + t[2], e[3] + t[3]], isOverlapping$1 = (e, t) => e[0] <= t[2] && e[2] >= t[0] && e[1] <= t[3] && e[3] >= t[1];
78
+ var SHIP_SAIL_STATUS = /* @__PURE__ */ ((e) => (e[e.发动机使用中 = 0] = "发动机使用中", e[e.锚泊 = 1] = "锚泊", e[e.未操作 = 2] = "未操作", e[e.操纵能力受限 = 3] = "操纵能力受限", e[e.吃水受限 = 4] = "吃水受限", e[e.系泊 = 5] = "系泊", e[e.搁浅 = 6] = "搁浅", e[e.从事捕捞 = 7] = "从事捕捞", e[e.航行中 = 8] = "航行中", e[e.留作将来修正导航状态 = 9] = "留作将来修正导航状态", e[e.高速船留用 = 10] = "高速船留用", e[e.机动船尾推作业 = 11] = "机动船尾推作业", e[e.机动船顶推或侧推作业 = 12] = "机动船顶推或侧推作业", e[e.飞翼船留用 = 13] = "飞翼船留用", e[e.现行的 = 14] = "现行的", e[e.未定义 = 15] = "未定义", e))(SHIP_SAIL_STATUS || {}), SHIP_DIRECT = /* @__PURE__ */ ((e) => (e.left = "left", e.right = "right", e.front = "front", e.up = "up", e.down = "down", e.back = "back", e))(SHIP_DIRECT || {});
79
+ const convertSixHundredThousandToLatLng = function(e, t) {
80
+ const n = Number(t) / 6e5;
81
+ return [Number(e) / 6e5, n];
82
+ }, getRightIcons = (e) => {
65
83
  const t = [];
66
84
  return e.existDevice && t.push("&#xe687;"), e.existMobile && t.push("&#xe688;"), e.existWaterGauge && t.push("&#xe686;"), t;
67
85
  };
68
86
  new RBush$1();
69
- var SHIP_SAIL_STATUS = /* @__PURE__ */ ((e) => (e[e.发动机使用中 = 0] = "发动机使用中", e[e.锚泊 = 1] = "锚泊", e[e.未操作 = 2] = "未操作", e[e.操纵能力受限 = 3] = "操纵能力受限", e[e.吃水受限 = 4] = "吃水受限", e[e.系泊 = 5] = "系泊", e[e.搁浅 = 6] = "搁浅", e[e.从事捕捞 = 7] = "从事捕捞", e[e.航行中 = 8] = "航行中", e[e.留作将来修正导航状态 = 9] = "留作将来修正导航状态", e[e.高速船留用 = 10] = "高速船留用", e[e.机动船尾推作业 = 11] = "机动船尾推作业", e[e.机动船顶推或侧推作业 = 12] = "机动船顶推或侧推作业", e[e.飞翼船留用 = 13] = "飞翼船留用", e[e.现行的 = 14] = "现行的", e[e.未定义 = 15] = "未定义", e))(SHIP_SAIL_STATUS || {}), SHIP_DIRECT = /* @__PURE__ */ ((e) => (e.left = "left", e.right = "right", e.front = "front", e.up = "up", e.down = "down", e.back = "back", e))(SHIP_DIRECT || {});
70
87
  function useShipOverlay(e) {
71
- const t = ref(null), o = ref(null), n = computed(() => ({
72
- "--overlay-color": e.color,
88
+ const t = ref(null), n = ref(null), o = computed(() => ({
89
+ "--overlay-color": e.color || "#FFF",
73
90
  "--bg-color": e.selected ? e.color : "#ffffff",
74
91
  position: "relative",
75
92
  "pointer-events": "none"
@@ -88,26 +105,12 @@ function useShipOverlay(e) {
88
105
  "z-index": "1",
89
106
  display: "flex",
90
107
  "align-items": "center"
91
- })), a = computed(() => ({
108
+ })), l = computed(() => ({
92
109
  width: "14px",
93
110
  height: "14px",
94
111
  margin: "1px 5px 1px 1px",
95
112
  "background-color": "var(--bg-color)"
96
- })), l = computed(() => ({
97
- // 'position': 'absolute',
98
- // 'background': '#FFF',
99
- // 'height': '1px',
100
- // 'color': 'var(--overlay-color)',
101
- // .connection-line::before {
102
- // content: '';
103
- // position: absolute;
104
- // width: var(--length);
105
- // height: 100%;
106
- // transform: rotate(var(--angle));
107
- // transform-origin: left center;
108
- // left: var(--start-x);
109
- // top: var(--start-y);
110
- // }
113
+ })), s = computed(() => ({
111
114
  position: "absolute",
112
115
  top: "0px",
113
116
  color: "var(--overlay-color)",
@@ -118,23 +121,23 @@ function useShipOverlay(e) {
118
121
  height: "20px",
119
122
  overflow: "visible"
120
123
  }));
121
- let i = null;
124
+ let a = null;
122
125
  const c = () => {
123
- d(), i = window.setInterval(() => {
126
+ d(), a = window.setInterval(() => {
124
127
  if (t.value) {
125
- const s = t.value.querySelector(".ship-overlay-content");
126
- s && s.style && (s.style.backgroundColor = e.color, s.style.color = "#FFF", setTimeout(() => {
127
- s && s.style && (s.style.backgroundColor = "#ffffff", s.style.color = "#000");
128
+ const i = t.value.querySelector(".ship-overlay-content");
129
+ i && i.style && (i.style.backgroundColor = e.color, i.style.color = "#FFF", setTimeout(() => {
130
+ i && i.style && (i.style.backgroundColor = "#ffffff", i.style.color = "#000");
128
131
  }, 500));
129
132
  }
130
133
  }, 1e3);
131
134
  }, d = () => {
132
- i && (clearInterval(i), i = null);
135
+ a && (clearInterval(a), a = null);
133
136
  }, u = () => {
134
- o.value && o.value.setPosition(fromLonLat(e.position));
137
+ n.value && n.value.setPosition(fromLonLat(e.position));
135
138
  };
136
- return watch(() => e.selected, (s) => {
137
- s ? c() : d();
139
+ return watch(() => e.selected, (i) => {
140
+ i ? c() : d();
138
141
  }, { immediate: !0 }), watch(() => e.position, () => {
139
142
  u();
140
143
  }, { deep: !0 }), onMounted(() => {
@@ -143,7 +146,7 @@ function useShipOverlay(e) {
143
146
  }), () => h("div", {
144
147
  ref: t,
145
148
  class: "ship-overlay-container",
146
- style: n.value
149
+ style: o.value
147
150
  }, [
148
151
  h(
149
152
  "div",
@@ -153,7 +156,7 @@ function useShipOverlay(e) {
153
156
  },
154
157
  [
155
158
  h("div", {
156
- style: e.selected ? a.value : {}
159
+ style: e.selected ? l.value : {}
157
160
  }, ""),
158
161
  h("div", {
159
162
  class: "text"
@@ -185,13 +188,9 @@ function useShipOverlay(e) {
185
188
  ])
186
189
  ]
187
190
  ),
188
- // h('div',{
189
- // class: 'ship-overlay-line',
190
- // style: lineStyle.value,
191
- // })
192
191
  h("svg", {
193
192
  class: "ship-overlay-line",
194
- style: l.value,
193
+ style: s.value,
195
194
  viewBox: "0 0 20 20",
196
195
  xmlns: "http://www.w3.org/2000/svg"
197
196
  }, [
@@ -242,72 +241,72 @@ function isOverlapping(e, t) {
242
241
  return !(e.right < t.left || e.left > t.right || e.bottom < t.top || e.top > t.bottom);
243
242
  }
244
243
  function calculateBestPosition(e, t) {
245
- const o = existingOverlays.value.filter((n) => n !== e).map((n) => {
244
+ const n = existingOverlays.value.filter((o) => o !== e).map((o) => {
246
245
  var r;
247
- return (r = n.getElement()) == null ? void 0 : r.getBoundingClientRect();
248
- }).filter((n) => n !== void 0);
249
- for (const n of POSITION_PRIORITY) {
250
- e.setPositioning(n.positioning), e.setOffset(n.offset), e.setPosition(t);
246
+ return (r = o.getElement()) == null ? void 0 : r.getBoundingClientRect();
247
+ }).filter((o) => o !== void 0);
248
+ for (const o of POSITION_PRIORITY) {
249
+ e.setPositioning(o.positioning), e.setOffset(o.offset), e.setPosition(t);
251
250
  const r = e.getElement();
252
251
  if (!r) continue;
253
252
  r.offsetHeight;
254
- const a = r.getBoundingClientRect();
255
- if (!o.some(
256
- (i) => isOverlapping(a, i)
253
+ const l = r.getBoundingClientRect();
254
+ if (!n.some(
255
+ (a) => isOverlapping(l, a)
257
256
  ))
258
257
  break;
259
258
  }
260
259
  }
261
- function addOverlay(e, t, o, n) {
260
+ function addOverlay(e, t, n, o) {
262
261
  const r = new Overlay({
263
- element: o,
262
+ element: n,
264
263
  positioning: "top-left",
265
- id: "label-" + n,
264
+ id: "label-" + (o == null ? void 0 : o.id),
266
265
  offset: [0, 0],
267
266
  autoPan: !1,
268
- className: "ship-label-overlay"
267
+ className: o.blinking ? "ship-label-overlay-blinking" : "ship-label-overlay"
269
268
  });
270
269
  r.set("class", "zh-map-ship-overlay"), e.addOverlay(r), existingOverlays.value.push(r), nextTick(async () => {
271
270
  await calculateBestPosition(r, t), setLinePath(r);
272
271
  });
273
272
  }
274
273
  function setLinePath(e) {
275
- const t = e.getElement(), o = t == null ? void 0 : t.querySelector(".ship-overlay-line"), n = e.getPositioning(), r = e.getOffset();
276
- o && n === "top-right" && (o.style.right = "-20px"), o && n === "top-left" && (o.style.left = "-20px");
277
- const a = POSITION_PRIORITY.filter((i) => i.positioning === n && i.offset === r), l = t == null ? void 0 : t.querySelector(".ship-overlay-line line");
278
- if (a.length > 0) {
279
- const { x1: i, y1: c, x2: d, y2: u } = a[0].line;
280
- l && (l.setAttribute("x1", i), l.setAttribute("y1", c), l.setAttribute("x2", d), l.setAttribute("y2", u));
274
+ const t = e.getElement(), n = t == null ? void 0 : t.querySelector(".ship-overlay-line"), o = e.getPositioning(), r = e.getOffset();
275
+ n && o === "top-right" && (n.style.right = "-20px"), n && o === "top-left" && (n.style.left = "-20px");
276
+ const l = POSITION_PRIORITY.filter((a) => a.positioning === o && a.offset === r), s = t == null ? void 0 : t.querySelector(".ship-overlay-line line");
277
+ if (l.length > 0) {
278
+ const { x1: a, y1: c, x2: d, y2: u } = l[0].line;
279
+ s && (s.setAttribute("x1", a), s.setAttribute("y1", c), s.setAttribute("x2", d), s.setAttribute("y2", u));
281
280
  }
282
281
  }
283
282
  function removeLabelOverlay(e) {
284
- existingOverlays.value = [], e.getOverlays().getArray().filter((n) => n.get("class") === "zh-map-ship-overlay").forEach((n) => {
285
- n.setPosition(void 0), n.setElement(void 0), e.removeOverlay(n), n.dispose();
283
+ existingOverlays.value = [], e.getOverlays().getArray().filter((o) => o.get("class") === "zh-map-ship-overlay").forEach((o) => {
284
+ o.setPosition(void 0), o.setElement(void 0), e.removeOverlay(o), o.dispose();
286
285
  });
287
286
  }
288
287
  const getShipDirectPath = (e) => {
289
- const { spd: t, hdg: o, cog: n } = e;
290
- return t ? o !== null && +o != 511 && n !== null ? n - +o >= 3 ? SHIP_DIRECT.right : n - +o <= -3 ? SHIP_DIRECT.left : SHIP_DIRECT.front : SHIP_DIRECT.front : "";
288
+ const { spd: t, hdg: n, cog: o } = e;
289
+ return t ? n !== null && +n != 511 && o !== null ? o - +n >= 3 ? SHIP_DIRECT.right : o - +n <= -3 ? SHIP_DIRECT.left : SHIP_DIRECT.front : SHIP_DIRECT.front : "";
291
290
  }, createShipStyle = (e) => {
292
- const { shipData: t } = e.getProperties(), o = getShipType(), n = getShipScale(t, o);
293
- return initShipStyle(e, n, o);
291
+ const { shipData: t } = e.getProperties(), n = getShipType(), o = getShipScale(t, n);
292
+ return initShipStyle(e, o, n);
294
293
  }, getShipType = () => {
295
294
  const e = getZoom();
296
295
  return e <= MAP_ZOOM.shipModelMax && e >= MAP_ZOOM.shipTriggleMin ? "ship" : "triangle";
297
296
  }, getShipScale = (e, t) => {
298
297
  if (t === "ship") {
299
- const { len: o, wid: n } = e, r = 97, a = 20, i = 1 / getView().getResolution(), c = o * i / r, d = n * i / a;
298
+ const { len: n, wid: o } = e, r = 97, l = 20, a = 1 / getView().getResolution(), c = n * a / r, d = o * a / l;
300
299
  return Math.max(c, d);
301
300
  }
302
301
  return MAP_ZOOM.scaleNum;
303
- }, initShipStyle = (e, t, o) => {
304
- const { color: n, direct: r, isHighlight: a, shipData: l } = e.getProperties(), i = (l.cog - 90 + 360) % 360;
302
+ }, initShipStyle = (e, t, n) => {
303
+ const { color: o, direct: r, isHighlight: l, shipData: s } = e.getProperties(), a = (s.cog - 90 + 360) % 360;
305
304
  return new Style({
306
305
  image: new Icon({
307
306
  src: c(),
308
307
  scale: t || MAP_ZOOM.scaleNum,
309
308
  anchor: [0.5, 0.5],
310
- rotation: i * Math.PI / 180,
309
+ rotation: a * Math.PI / 180,
311
310
  rotateWithView: !1
312
311
  })
313
312
  });
@@ -315,26 +314,26 @@ const getShipDirectPath = (e) => {
315
314
  return `data:image/svg+xml;utf8,${encodeURIComponent(d())}`;
316
315
  }
317
316
  function d() {
318
- switch (o) {
317
+ switch (n) {
319
318
  case "triangle":
320
319
  return `<svg width="41" height="24" viewBox="0 0 41 24" fill="none" xmlns="http://www.w3.org/2000/svg">
321
320
  <path d="M30.8843 12.6777L2.21343 21.7067C1.75559 21.8509 1.28947 21.509 1.28947 21.029L1.28947 2.97103C1.28947 2.49102 1.75558 2.14913 2.21342 2.29331L30.8843 11.3223C31.5471 11.531 31.5471 12.469 30.8843 12.6777Z"
322
- fill="${n}" stroke="${a ? "#FF2424" : "black"}" stroke-width="${a ? "2" : "0.578947"}" />
321
+ fill="${o}" stroke="${l ? "#FF2424" : "black"}" stroke-width="${l ? "2" : "0.578947"}" />
323
322
  <!--path船航向左边或者向前-->
324
- ${r === SHIP_DIRECT.left && `<path d="M30 12L40 12L40 8" stroke="${a ? "#FF2424" : "black"}" stroke-width="2"/>`}
323
+ ${r === SHIP_DIRECT.left && `<path d="M30 12L40 12L40 8" stroke="${l ? "#FF2424" : "black"}" stroke-width="2"/>`}
325
324
  <!--path船航向右边-->
326
- ${r === SHIP_DIRECT.right && `<path d="M30 12L40 12L40 16" stroke="${a ? "#FF2424" : "black"}" stroke-width="2"/>`}
325
+ ${r === SHIP_DIRECT.right && `<path d="M30 12L40 12L40 16" stroke="${l ? "#FF2424" : "black"}" stroke-width="2"/>`}
327
326
  <!--path黑线无左右-->
328
- ${r === SHIP_DIRECT.front && `<path d="M30 12L40 12" stroke="${a ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
327
+ ${r === SHIP_DIRECT.front && `<path d="M30 12L40 12" stroke="${l ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
329
328
  </svg>
330
329
  `;
331
330
  case "ship":
332
331
  return `<svg width="97" height="20" viewBox="0 0 97 20" fill="none" xmlns="http://www.w3.org/2000/svg">
333
332
  <path d="M0.289474 17.3433L0.289474 2.65655C0.289474 2.28572 0.574654 1.97725 0.944343 1.9482L22.0544 0.289473L67.5204 0.289473C67.6295 0.289473 67.7372 0.314613 67.835 0.362943L86.0565 9.3629C86.5844 9.6236 86.5844 10.3763 86.0565 10.637L67.835 19.6371C67.7372 19.6854 67.6295 19.7105 67.5203 19.7105L22.0544 19.7105L0.944343 18.0517C0.574653 18.0226 0.289474 17.7142 0.289474 17.3433Z"
334
- fill="${n}" stroke="${a ? "#FF2424" : "black"}" stroke-width="${a ? "4" : "0.578947"}"/>
335
- ${r === SHIP_DIRECT.left && `<path d="M86 10L96 10L96 6" stroke="${a ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
336
- ${r === SHIP_DIRECT.right && `<path d="M86 10L96 10L96 14" stroke="${a ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
337
- ${r === SHIP_DIRECT.front && `<path d="M86 10L96 10" stroke="${a ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
333
+ fill="${o}" stroke="${l ? "#FF2424" : "black"}" stroke-width="${l ? "4" : "0.578947"}"/>
334
+ ${r === SHIP_DIRECT.left && `<path d="M86 10L96 10L96 6" stroke="${l ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
335
+ ${r === SHIP_DIRECT.right && `<path d="M86 10L96 10L96 14" stroke="${l ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
336
+ ${r === SHIP_DIRECT.front && `<path d="M86 10L96 10" stroke="${l ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
338
337
  </svg>
339
338
  `;
340
339
  default:
@@ -342,39 +341,43 @@ const getShipDirectPath = (e) => {
342
341
  }
343
342
  }
344
343
  }, selectedShipStyle = (e) => {
345
- const t = getShipType(), o = getShipScale(e, t), n = e.id, r = t === "ship" ? 109 : 49, a = `
346
- <svg style="transform:scale(${o});" xmlns="http://www.w3.org/2000/svg" width="${r}" height="${r}" viewBox="0 0 49 49" fill="none">
347
- <path d="M1.99982 46.9998L1.99982 1.99982L46.9998 1.99982L46.9998 46.9998L1.99982 46.9998Z" fill="#FF2424" fill-opacity="0.2"/>
348
- <path fill-rule="evenodd" clip-rule="evenodd" d="M19.9998 0.5V3.5L3.49976 3.5V20H0.499756V0.500002L19.9998 0.5ZM45.4998 3.5H28.9998V0.5H48.4998V20H45.4998V3.5ZM48.4998 29L48.4998 48.5H28.9998V45.5H45.4998L45.4998 29H48.4998ZM3.49976 45.5L3.49976 29H0.499756L0.499758 48.5L19.9998 48.5V45.5L3.49976 45.5Z" fill="#FF2424"/>
349
- </svg>
350
- `, l = document.createElement("div");
351
- l.className = "ship-overlay-selected", l.innerHTML = a;
352
- const { lon: i, lat: c } = e, d = new Overlay({
353
- element: l,
354
- position: fromLonLat([i, c]),
344
+ const t = selectedShipElement(e), n = e.id, { lon: o, lat: r } = e, l = new Overlay({
345
+ element: t,
346
+ position: fromLonLat([o, r]),
355
347
  id: "selected-" + n,
356
348
  positioning: "center-center",
357
349
  offset: [0, 5],
358
350
  className: "ship-selected-overlay"
359
351
  });
360
- return d.set("class", "ship-overlay-selected"), d;
352
+ return l.set("class", "ship-overlay-selected"), l;
353
+ }, selectedShipElement = (e) => {
354
+ const t = getShipType(), n = getShipScale(e, t), o = t === "ship" ? 109 : 49, r = `
355
+ <svg style="transform:scale(${n});" xmlns="http://www.w3.org/2000/svg" width="${o}" height="${o}" viewBox="0 0 49 49" fill="none">
356
+ <path d="M1.99982 46.9998L1.99982 1.99982L46.9998 1.99982L46.9998 46.9998L1.99982 46.9998Z" fill="#FF2424" fill-opacity="0.2"/>
357
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M19.9998 0.5V3.5L3.49976 3.5V20H0.499756V0.500002L19.9998 0.5ZM45.4998 3.5H28.9998V0.5H48.4998V20H45.4998V3.5ZM48.4998 29L48.4998 48.5H28.9998V45.5H45.4998L45.4998 29H48.4998ZM3.49976 45.5L3.49976 29H0.499756L0.499758 48.5L19.9998 48.5V45.5L3.49976 45.5Z" fill="#FF2424"/>
358
+ </svg>
359
+ `, l = document.createElement("div");
360
+ return l.className = "ship-overlay-selected", l.innerHTML = r, l;
361
361
  }, createLabelStyle = (e) => {
362
- const t = getInstall(), o = document.createElement("div");
363
- o.className = "ship-overlay-box", o.style.zIndex = "9", o.style.position = "relative";
364
- const n = e.getProperties(), { shipData: r, blinking: a, blinkingColor: l, name: i } = n, { lon: c, lat: d } = r, u = createVNode({
362
+ const t = getInstall(), { shipData: n, blinking: o } = e.getProperties(), { lon: r, lat: l } = n, s = createLabelElement(e);
363
+ addOverlay(t, fromLonLat([r, l]), s, { ...n, blinking: o });
364
+ }, createLabelElement = (e) => {
365
+ const t = document.createElement("div");
366
+ t.className = "ship-overlay-box", t.style.position = "relative";
367
+ const n = e.getProperties(), { shipData: o, blinking: r, blinkingColor: l, name: s } = n, { lon: a, lat: c } = o, d = createVNode({
365
368
  setup() {
366
369
  return useShipOverlay({
367
- position: [c + 2e-3, d + 2e-3],
368
- selected: a,
369
- name: i,
370
+ position: [a + 2e-3, c + 2e-3],
371
+ selected: r,
372
+ name: s,
370
373
  color: l,
371
- existDevice: r == null ? void 0 : r.existDevice,
372
- existMobile: r == null ? void 0 : r.existMobile,
373
- existWaterGauge: r == null ? void 0 : r.existWaterGauge
374
+ existDevice: o == null ? void 0 : o.existDevice,
375
+ existMobile: o == null ? void 0 : o.existMobile,
376
+ existWaterGauge: o == null ? void 0 : o.existWaterGauge
374
377
  });
375
378
  }
376
379
  });
377
- render(u, o), addOverlay(t, fromLonLat([c, d]), o, r.id);
380
+ return render(d, t), t;
378
381
  };
379
382
  let selectedShipFeature = null, selectedShip = null;
380
383
  const shipsSource = new VectorSource(), shipsLayer = new VectorLayer({
@@ -391,104 +394,139 @@ const renderShipList = (e) => {
391
394
  const t = getInstall();
392
395
  if (!t) return;
393
396
  t.getLayers().getArray().includes(shipsLayer) || t.addLayer(shipsLayer);
394
- const o = (selectedShip == null ? void 0 : selectedShip.id) || (selectedShipFeature == null ? void 0 : selectedShipFeature.get("id"));
397
+ const n = (selectedShip == null ? void 0 : selectedShip.id) || (selectedShipFeature == null ? void 0 : selectedShipFeature.get("id"));
395
398
  removeLabelOverlay(t), removeSelectedOverlay(), shipsSource && shipsSource.clear();
396
- const n = [];
399
+ const o = [];
397
400
  if (selectedShip) {
398
- const r = e.filter((a) => a.id === o);
401
+ const r = e.filter((l) => l.id === n);
399
402
  r.length === 0 ? e.push(selectedShip) : selectedShip = r[0];
400
403
  }
401
404
  e.forEach((r) => {
402
- const a = fromLonLat([r.lon, r.lat]), l = new Feature({
403
- geometry: new Point(a),
404
- // 船舶数据
405
- shipData: r,
406
- id: r.id,
407
- name: r.cnname || "未命名船舶",
408
- selected: r.id === o,
409
- // 图标
410
- rightIcons: getRightIcons(r),
411
- // 是否闪烁
412
- blinking: attentionShips[r.id] || !1,
413
- // 闪烁颜色
414
- blinkingColor: attentionShipsColor[r.id] || "",
415
- // 船舶颜色
416
- color: r.fill || "#04C900",
417
- // 船艏向的方向
418
- direct: getShipDirectPath(r),
419
- // 高亮
420
- isHighlight: !1
421
- });
422
- l.setStyle(createShipStyle(l)), n.push(l), createLabelStyle(l);
423
- }), shipsSource.addFeatures(n), setTimeout(() => {
424
- if (selectedShip) {
425
- const r = selectedShipStyle(selectedShip);
426
- t.addOverlay(r);
427
- }
428
- }, 500);
405
+ const l = createShipFetature(r);
406
+ o.push(l), createLabelStyle(l);
407
+ }), shipsSource.addFeatures(o), handleChangeSelected();
408
+ }, createShipFetature = (e) => {
409
+ const t = (selectedShip == null ? void 0 : selectedShip.id) || (selectedShipFeature == null ? void 0 : selectedShipFeature.get("id")), n = fromLonLat([e.lon, e.lat]), o = new Feature({
410
+ geometry: new Point(n),
411
+ // 船舶数据
412
+ shipData: e,
413
+ id: e.id,
414
+ name: e.cnname || "未命名船舶",
415
+ selected: e.id === t,
416
+ // 图标
417
+ rightIcons: getRightIcons(e),
418
+ // 是否闪烁
419
+ blinking: attentionShips[e.id] || !1,
420
+ // 闪烁颜色
421
+ blinkingColor: attentionShipsColor[e.id] || "",
422
+ // 船舶颜色
423
+ color: e.fill || "#04C900",
424
+ // 船艏向的方向
425
+ direct: getShipDirectPath(e),
426
+ // 高亮
427
+ isHighlight: !1
428
+ });
429
+ return o.setStyle(createShipStyle(o)), o;
430
+ }, handleChangeSelected = () => {
431
+ var o;
432
+ if (!selectedShip) return;
433
+ const e = getInstall();
434
+ if (!e) return;
435
+ const n = cloneDeep(e.getOverlays().getArray()).find((r) => r.get("class") == "ship-overlay-selected");
436
+ if (console.log("selectedOverlay-----------", n), n) {
437
+ const r = selectedShipElement(selectedShip);
438
+ n.setElement(r), n.setPosition(fromLonLat([selectedShip.lon, selectedShip.lat])), n.get("element").style.visibility = "visible";
439
+ } else {
440
+ const r = selectedShipStyle(selectedShip);
441
+ e.addOverlay(r);
442
+ }
443
+ (o = n.get("element")) != null && o.parentElement && (n.get("element").parentElement.style.display = "block");
429
444
  }, clearShipList = () => {
430
445
  const e = getInstall();
431
446
  if (!e || !shipsSource) return;
432
447
  const t = (selectedShip == null ? void 0 : selectedShip.id) || "";
433
- shipsSource.getFeatures().forEach((n) => {
434
- n.get("shipData").shipId !== t && shipsSource.removeFeature(n);
448
+ shipsSource.getFeatures().forEach((o) => {
449
+ o.get("shipData").shipId !== t && shipsSource.removeFeature(o);
435
450
  });
436
- const o = e.getOverlays().getArray();
437
- cloneDeep(o).map((n) => {
438
- (n.getId() !== "label-" + t || n.getId() !== "selected-" + t) && (n.setPosition(void 0), n.setElement(void 0), e.removeOverlay(n), n.dispose());
451
+ const n = e.getOverlays().getArray();
452
+ cloneDeep(n).map((o) => {
453
+ (o.getId() !== "label-" + t || o.getId() !== "selected-" + t) && (o.setPosition(void 0), e.removeOverlay(o), o.dispose());
439
454
  });
440
455
  }, renderShipBlink = (e, t) => {
456
+ const n = getInstall();
441
457
  attentionShips = e, attentionShipsColor = t;
458
+ const o = cloneDeep(n.getOverlays().getArray()), r = cloneDeep(shipsSource.getFeatures());
459
+ for (const l in attentionShips) {
460
+ const s = attentionShips[l], a = o.find((d) => d.getId() === "label-" + l), c = r.find((d) => l === d.get("id"));
461
+ if (a && c) {
462
+ c.set("blinking", s), c.set("blinkingColor", attentionShipsColor[l] || "");
463
+ const d = a.getElement(), u = createLabelElement(c), i = u.querySelector(".ship-overlay-line"), p = d == null ? void 0 : d.querySelector(".ship-overlay-line");
464
+ d && d !== u && (p && i && i.replaceWith(p), a.setElement(u));
465
+ }
466
+ }
442
467
  }, filterShipShow = (e) => {
443
- if (!getInstall()) return;
444
- const o = shipsSource.getFeatures(), n = selectedShipFeature ? selectedShipFeature.get("id") : "", r = o.filter((l) => l.getId() !== n), a = /* @__PURE__ */ new Map();
445
- e.forEach((l) => {
446
- a.set(l.id, !0);
447
- }), r.forEach((l) => {
448
- const i = l.get("id");
449
- if (!a.has(i))
450
- l.setStyle([]);
468
+ const t = getInstall();
469
+ if (!t) return;
470
+ const n = shipsSource.getFeatures(), o = selectedShipFeature ? selectedShipFeature.get("id") : "", r = n.filter((a) => a.get("id") !== o), l = /* @__PURE__ */ new Map();
471
+ e.forEach((a) => {
472
+ l.set(a.id, !0);
473
+ });
474
+ const s = cloneDeep(t.getOverlays().getArray());
475
+ r.forEach((a) => {
476
+ const c = a.get("id"), d = s.find((u) => u.getId() === "label-" + c);
477
+ if (!l.has(c))
478
+ a.setStyle([]), d && (d.get("element").style.visibility = "hidden");
451
479
  else {
452
- const c = l.getStyle();
453
- (c == null ? void 0 : c.length) == 0 && l.setStyle(createShipStyle(l));
480
+ d && (d.get("element").style.visibility = "visible");
481
+ const u = a.getStyle();
482
+ (u == null ? void 0 : u.length) == 0 && a.setStyle(createShipStyle(a));
454
483
  }
455
484
  });
456
485
  }, renderShipSelected = (e) => {
457
486
  if (e) {
458
487
  console.log("选中", e);
459
- const t = shipsSource.getFeatures().find((o) => o.get("id") === e.id);
488
+ const t = shipsSource.getFeatures().find((n) => n.get("id") === e.id);
460
489
  t && (selectedShipFeature = t), selectedShip = e;
461
490
  } else
462
- console.log("取消选中"), removeSelectedOverlay();
463
- }, handleShipMapEvent = debounce((e, t, o) => {
464
- const n = getInstall();
491
+ console.log("取消选中"), selectedShip = null, removeSelectedOverlay();
492
+ }, renderShipSelectedChange = () => {
493
+ console.log("selectedShip------------------", selectedShip);
494
+ const e = shipsSource.getFeatures().find((t) => t.get("id") === (selectedShip == null ? void 0 : selectedShip.id));
495
+ if (console.log("hasShipFetature------------------", e), e)
496
+ hasShip == null || hasShip.setStyle(createShipStyle(hasShip)), createLabelStyle(hasShip);
497
+ else {
498
+ const t = createShipFetature(selectedShip);
499
+ shipsSource.addFeature(t), createLabelStyle(t);
500
+ }
501
+ handleChangeSelected();
502
+ }, handleShipMapEvent = debounce((e, t, n) => {
503
+ const o = getInstall();
465
504
  if (e) {
466
- const r = e.get("shipData"), a = e.get("id");
467
- if (n.getTargetElement().style.cursor = a ? "pointer" : "", t === "click" && (renderShipSelected(r), o && o(a)), t === "hover") {
468
- hoveredShipId && hoveredShipId !== a && clearHoverHight(), hoveredShipId = a;
469
- const l = shipsSource.getFeatures().find((i) => i.get("id") === hoveredShipId);
470
- l == null || l.set("isHighlight", !0), l == null || l.setStyle(createShipStyle(l));
505
+ const r = e.get("shipData"), l = e.get("id");
506
+ if (o.getTargetElement().style.cursor = l ? "pointer" : "", t === "click" && (renderShipSelected(r), n && n(l)), t === "hover") {
507
+ hoveredShipId && hoveredShipId !== l && clearHoverHight(), hoveredShipId = l;
508
+ const s = shipsSource.getFeatures().find((a) => a.get("id") === hoveredShipId);
509
+ s == null || s.set("isHighlight", !0), s == null || s.setStyle(createShipStyle(s));
471
510
  }
472
511
  } else
473
- n.getTargetElement().style.cursor = "", clearHoverHight();
512
+ o.getTargetElement().style.cursor = "", clearHoverHight();
474
513
  }, 10), clearHoverHight = () => {
475
514
  const e = hoveredShipId ? shipsSource.getFeatures().find((t) => t.get("id") === hoveredShipId) : null;
476
515
  hoveredShipId = null, e == null || e.set("isHighlight", !1), e == null || e.setStyle(createShipStyle(e));
477
516
  }, removeSelectedOverlay = () => {
478
- const e = getInstall();
479
- e.getOverlays().getArray().filter((n) => n.get("class") == "ship-overlay-selected").forEach((n) => {
480
- n.setPosition(void 0), n.setElement(void 0), e.removeOverlay(n), n.dispose();
481
- });
482
- }, convertSixHundredThousandToLatLng = function(e, t) {
483
- const o = Number(t) / 6e5;
484
- return [Number(e) / 6e5, o];
517
+ try {
518
+ const e = getInstall(), n = cloneDeep(e.getOverlays().getArray()).find((o) => o.get("class") == "ship-overlay-selected");
519
+ n && n.get("element") && (n.get("element").style.visibility = "hidden");
520
+ } catch (e) {
521
+ console.log(e);
522
+ }
485
523
  }, stopIcon = "&#xe6e2;", stopColor = "#E31818", slowIcon = "&#xe703;", slowColor = "#1890FF", dropletsIcon = "&#xe6d2", DEFAULT_VALUE = "--";
486
524
  let moveFeatureHandler = null;
487
525
  const stopIconStyle = getIconStyle(stopIcon), slowIconStyle = getIconStyle(slowIcon), popupEle = document.createElement("div"), popupOverlay = new Overlay({
488
526
  element: popupEle,
489
527
  positioning: "top-left",
490
528
  stopEvent: !1,
491
- className: "track-label-overlay"
529
+ className: "track-label-popup"
492
530
  });
493
531
  let polyline, linePath, startMarker, position, geoMarker, trackAnimating = !1, lastTime = Date.now(), vectorLayer$3, distance = 0, thresholdNum = 20;
494
532
  const routesSource = new VectorSource(), routeLayer = new VectorLayer({
@@ -496,57 +534,59 @@ const routesSource = new VectorSource(), routeLayer = new VectorLayer({
496
534
  className: "zh-map--track-layer",
497
535
  zIndex: 102
498
536
  });
499
- let routeFeatures = [], showTracks = [], allTracks = {}, trackId = "", trackColor = "", trackList = [], mapInstance$1 = null;
537
+ let routeFeatures = [], showTracks = [], allTracks = {}, trackId = "", trackColor = "", trackList = [], mapInstance$1 = null, isClosing = !1;
500
538
  const reRenderTrackLine = () => {
501
- mapInstance$1 = getInstall(), handlerRenderLine();
502
- }, renderTrackLine = async (e, t, o, n = LENGTH_UNIT.NM, r = "ship", a = 200) => {
539
+ mapInstance$1 = getInstall(), isClosing || handlerRenderLine();
540
+ }, renderTrackLine = async (e, t, n, o = LENGTH_UNIT.NM, r = "ship", l = 200) => {
503
541
  if (mapInstance$1 = getInstall(), !mapInstance$1) return;
504
- if (routeLayer == null || routeLayer.setVisible(!0), t = t == null ? void 0 : t.reverse(), popupOverlay && r === "ship" && (mapInstance$1 != null && mapInstance$1.getOverlays().getArray().includes(popupOverlay) || mapInstance$1.addOverlay(popupOverlay)), clearShipList(), (t == null ? void 0 : t.length) < 2) {
505
- (showTracks == null ? void 0 : showTracks.findIndex((s) => s.id === e)) < 0 && showTracks.push({ id: e, length: "" });
542
+ if (routeLayer == null || routeLayer.setVisible(!0), t = t == null ? void 0 : t.reverse(), popupOverlay && r === "ship" && (mapInstance$1 != null && mapInstance$1.getOverlays().getArray().includes(popupOverlay) || mapInstance$1.addOverlay(popupOverlay)), renderShipSelectedChange(), isClosing = !1, (t == null ? void 0 : t.length) < 2) {
543
+ (showTracks == null ? void 0 : showTracks.findIndex((i) => i.id === e)) < 0 && showTracks.push({ id: e, length: "" });
506
544
  return;
507
545
  }
508
- const l = {};
509
- t.forEach((s) => {
510
- s.state ? s.state = Number(s.state) : delete s.state;
511
- }), trackId = e, l[e] = t, trackList = t;
512
- const i = l[e].map(
513
- (s) => transform([s.lon, s.lat], projection.data, projection.mercator)
514
- ), c = new LineString(i), d = formatLength(c, n) || "--", u = showTracks == null ? void 0 : showTracks.findIndex((s) => s.id === e);
515
- u < 0 ? showTracks.push({ id: e, length: d }) : showTracks[u].length = d, allTracks[e] = t, trackList = [], trackColor = o, thresholdNum = a, await handlerRenderLine(), await setTrackViewCenter(trackId);
546
+ const s = {};
547
+ t.forEach((i) => {
548
+ i.state ? i.state = Number(i.state) : delete i.state;
549
+ }), trackId = e, s[e] = t, trackList = t;
550
+ const a = s[e].map(
551
+ (i) => transform([i.lon, i.lat], projection.data, projection.mercator)
552
+ ), c = new LineString(a), d = formatLength(c, o) || "--";
553
+ console.log("length", formatLength(c, o));
554
+ const u = showTracks == null ? void 0 : showTracks.findIndex((i) => i.id === e);
555
+ u < 0 ? showTracks.push({ id: e, length: d }) : showTracks[u].length = d, console.log("showTracks", showTracks), allTracks[e] = t, trackList = [], trackColor = n, thresholdNum = l, await handlerRenderLine(), await setTrackViewCenter(trackId);
516
556
  }, handlerRenderLine = async () => {
517
- const e = trackColor || "", t = trackId, o = allTracks[trackId] || [], n = thresholdNum || 200, r = Math.max(1, Math.floor(o.length / n));
518
- trackList = o.filter((i, c) => c % r === 0).map((i, c) => {
519
- if (Number(i.lon) > 180 || Number(i.lat) > 180) {
520
- const [d, u] = convertSixHundredThousandToLatLng(i.lon, i.lat);
521
- i.lon = d, i.lat = u;
557
+ const e = trackColor || "", t = trackId, n = allTracks[trackId] || [], o = thresholdNum || 200, r = Math.max(1, Math.floor(n.length / o));
558
+ trackList = n.filter((a, c) => c % r === 0).map((a, c) => {
559
+ if (Number(a.lon) > 180 || Number(a.lat) > 180) {
560
+ const [d, u] = convertSixHundredThousandToLatLng(a.lon, a.lat);
561
+ a.lon = d, a.lat = u;
522
562
  }
523
- return i.center = [i.lon, i.lat], i.centerPoint = lonLatToMercator(i.center), i.id = t, i.index = c, i.time = hooks(i.createdAt).format("YYYY-MM-DD HH:mm:ss"), i;
563
+ return a.center = [a.lon, a.lat], a.centerPoint = lonLatToMercator(a.center), a.id = t, a.index = c, a.time = hooks(a.createdAt).format("YYYY-MM-DD HH:mm:ss"), a;
524
564
  });
525
- const l = trackList.map((i) => i.centerPoint);
526
- l.length >= 2 && (mapInstance$1 == null || mapInstance$1.addLayer(routeLayer), await createTrackLineFeature(t, l, e));
527
- }, createTrackLineFeature = (e, t, o) => {
528
- var l;
529
- const n = new LineString(t), r = new Feature({ geometry: n });
530
- r.setStyle(createTrackLineStyle(o)), r.setId(e), r.set("type", "line"), (l = routeLayer == null ? void 0 : routeLayer.getSource()) == null || l.clear(), removeAllLabel(), routeFeatures = [];
531
- const a = routeFeatures.findIndex((i) => i.getId() === e);
532
- a >= 0 ? routeFeatures[a] = r : routeFeatures.push(r), routesSource.addFeatures([...routeFeatures]), createPointFeature(o);
565
+ const s = trackList.map((a) => a.centerPoint);
566
+ s.length >= 2 && (mapInstance$1 == null || mapInstance$1.addLayer(routeLayer), await createTrackLineFeature(t, s, e));
567
+ }, createTrackLineFeature = (e, t, n) => {
568
+ var s;
569
+ const o = new LineString(t), r = new Feature({ geometry: o });
570
+ r.setStyle(createTrackLineStyle(n)), r.setId(e), r.set("type", "line"), (s = routeLayer == null ? void 0 : routeLayer.getSource()) == null || s.clear(), removeAllLabel(), routeFeatures = [];
571
+ const l = routeFeatures.findIndex((a) => a.getId() === e);
572
+ l >= 0 ? routeFeatures[l] = r : routeFeatures.push(r), routesSource.addFeatures([...routeFeatures]), createPointFeature(n);
533
573
  }, createTrackLineStyle = (e) => new Style({
534
574
  stroke: new Stroke({
535
575
  color: e,
536
576
  width: 2
537
577
  })
538
- }), handleTrackMapEvent = (e, t, o) => {
539
- const n = e == null ? void 0 : e.get("trackId");
540
- if (e && n && t === "hover") {
541
- mapInstance$1.getTargetElement().style.cursor = n ? "pointer" : "";
542
- const r = e.get("data"), a = renderTrackPointHtml(r), l = o == null ? void 0 : o.coordinate;
543
- l && (popupEle.querySelector(".popup-content"), popupEle.innerHTML = a, popupOverlay == null || popupOverlay.setPosition(l));
578
+ }), handleTrackMapEvent = (e, t, n) => {
579
+ const o = e == null ? void 0 : e.get("trackId");
580
+ if (e && o && t === "hover") {
581
+ mapInstance$1.getTargetElement().style.cursor = o ? "pointer" : "";
582
+ const r = e.get("data"), l = renderTrackPointHtml(r), s = n == null ? void 0 : n.coordinate;
583
+ s && (popupEle.querySelector(".popup-content"), popupEle.innerHTML = l, popupOverlay == null || popupOverlay.setPosition(s));
544
584
  } else
545
585
  popupOverlay && popupOverlay.setPosition(void 0);
546
586
  }, formatMinutesToDDHHMM = (e) => {
547
- const t = hooks.duration(e, "minutes"), o = Math.floor(t.asDays()), n = t.hours(), r = t.minutes();
548
- let a = `${String(r).padStart(2, "0")}分`;
549
- return n !== 0 && (a = `${String(n).padStart(2, "0")}时${a}`), o !== 0 && (a = `${String(o).padStart(2, "0")}天${a}`), a;
587
+ const t = hooks.duration(e, "minutes"), n = Math.floor(t.asDays()), o = t.hours(), r = t.minutes();
588
+ let l = `${String(r).padStart(2, "0")}分`;
589
+ return o !== 0 && (l = `${String(o).padStart(2, "0")}时${l}`), n !== 0 && (l = `${String(n).padStart(2, "0")}天${l}`), l;
550
590
  }, renderTrackPointHtml = (e) => {
551
591
  if (!(e != null && e.time)) return;
552
592
  let t = "";
@@ -590,44 +630,44 @@ const reRenderTrackLine = () => {
590
630
  }, createPointFeature = (e) => {
591
631
  const t = trackList || [];
592
632
  if (!(t && t.length > 1)) return [];
593
- const o = { 16: 24, 17: 15, default: 4 }, n = [], r = t.length;
594
- for (let l = 0; l < r; l++) {
595
- t[l].index = l;
596
- const i = mapInstance$1 == null ? void 0 : mapInstance$1.getPixelFromCoordinate(t[l].centerPoint);
597
- if (i) {
598
- let c = i.concat(i);
633
+ const n = { 16: 24, 17: 15, default: 4 }, o = [], r = t.length;
634
+ for (let s = 0; s < r; s++) {
635
+ t[s].index = s;
636
+ const a = mapInstance$1 == null ? void 0 : mapInstance$1.getPixelFromCoordinate(t[s].centerPoint);
637
+ if (a) {
638
+ let c = a.concat(a);
599
639
  c = adjustBounds(c, [20, 20]);
600
640
  const d = mapInstance$1 == null ? void 0 : mapInstance$1.getView().getZoom();
601
641
  if (!d) return;
602
642
  if (d > 15) {
603
- const s = o[d] || o.default;
604
- c = adjustBounds(c, [s, s]);
643
+ const i = n[d] || n.default;
644
+ c = adjustBounds(c, [i, i]);
605
645
  }
606
646
  let u = !0;
607
- if (t[l].state !== "0") {
608
- for (let s = 0; s < n.length; s++)
609
- if (isOverlapping$1(c, n[s].bounds)) {
647
+ if (t[s].state !== "0") {
648
+ for (let i = 0; i < o.length; i++)
649
+ if (isOverlapping$1(c, o[i].bounds)) {
610
650
  u = !1;
611
651
  break;
612
652
  }
613
653
  }
614
- u && (t[l].bounds = c, n.push(t[l]));
654
+ u && (t[s].bounds = c, o.push(t[s]));
615
655
  }
616
656
  }
617
- const a = [];
618
- n.forEach((l) => {
619
- const i = new Feature({
620
- geometry: new Point(l.centerPoint),
621
- time: l.time
657
+ const l = [];
658
+ o.forEach((s) => {
659
+ const a = new Feature({
660
+ geometry: new Point(s.centerPoint),
661
+ time: s.time
622
662
  });
623
- i.set("type", "track_point"), i.set("trackId", l.id), i.set("data", l), i.setStyle(createPointStyle(e)), a.push(i), typeof l == "object" && Object.prototype.hasOwnProperty.call(l, "state") && createIconFeature(l);
624
- }), routesSource.addFeatures(a), a.forEach((l) => {
625
- const i = l.getProperties().data, c = createPointLabelOverlay(e, i);
663
+ a.set("type", "track_point"), a.set("trackId", s.id), a.set("data", s), a.setStyle(createPointStyle(e)), l.push(a), typeof s == "object" && Object.prototype.hasOwnProperty.call(s, "state") && createIconFeature(s);
664
+ }), routesSource.addFeatures(l), console.log("createPointLabelOverlay---------------"), l.forEach((s) => {
665
+ const a = s.getProperties().data, c = createPointLabelOverlay(e, a);
626
666
  mapInstance$1 == null || mapInstance$1.addOverlay(c);
627
- }), createArrowFetaure(n, e), createIconPointFeature();
667
+ }), createArrowFetaure(o, e), createIconPointFeature();
628
668
  }, createPointLabelOverlay = (e, t) => {
629
- const o = document.createElement("div");
630
- o.className = "track-overlay-label", o.style.position = "relative", o.style.backgroundColor = "rgba(255,255,255,0.8)", o.style.border = `1px solid ${e}`, o.style.fontSize = "12px", o.innerHTML = `
669
+ const n = document.createElement("div");
670
+ n.className = "track-overlay-label", n.style.position = "relative", n.style.backgroundColor = "rgba(255,255,255,0.8)", n.style.border = `1px solid ${e}`, n.style.fontSize = "12px", n.innerHTML = `
631
671
  <span>${t.time}</span>
632
672
  <svg
633
673
  style="position: absolute;left: -20px;top: 0;"
@@ -640,18 +680,19 @@ const reRenderTrackLine = () => {
640
680
  stroke="${e}"
641
681
  stroke-width="1" />
642
682
  `;
643
- const n = new Overlay({
644
- element: o,
683
+ const o = new Overlay({
684
+ element: n,
645
685
  position: fromLonLat(t.center),
646
686
  positioning: "top-left",
647
687
  offset: [20, -20],
688
+ stopEvent: !1,
648
689
  className: "track-label-time-overlay"
649
690
  });
650
- return n.set("class", "track-label-overlay"), n;
691
+ return o.set("class", "track-label-overlay"), o;
651
692
  }, removeAllLabel = () => {
652
- const e = mapInstance$1 == null ? void 0 : mapInstance$1.getOverlays().getArray(), t = e == null ? void 0 : e.filter((o) => o.get("class") === "track-label-overlay");
653
- t && t.length > 0 && t.forEach((o) => {
654
- o.setPosition(void 0), o.setElement(void 0), mapInstance$1 == null || mapInstance$1.removeOverlay(o), o.dispose();
693
+ const e = cloneDeep(mapInstance$1 == null ? void 0 : mapInstance$1.getOverlays().getArray()), t = e == null ? void 0 : e.filter((n) => n.get("class") === "track-label-overlay");
694
+ t && t.length > 0 && t.forEach((n) => {
695
+ n.setPosition(void 0), n.setElement(void 0), mapInstance$1 == null || mapInstance$1.removeOverlay(n), n.dispose();
655
696
  });
656
697
  }, createPointStyle = (e) => [
657
698
  new Style({
@@ -771,7 +812,7 @@ const reRenderTrackLine = () => {
771
812
  time: e.time
772
813
  });
773
814
  t.set("type", "track_icon");
774
- const o = new Style({
815
+ const n = new Style({
775
816
  text: new Text({
776
817
  font: "Normal 22px map-iconfont",
777
818
  text: getIconFont(dropletsIcon),
@@ -781,26 +822,26 @@ const reRenderTrackLine = () => {
781
822
  })
782
823
  }),
783
824
  zIndex: 99
784
- }), n = [];
785
- Number(e.state) === 0 ? n.push(stopIconStyle) : Number(e.state) === 1 && n.push(slowIconStyle), n.push(o), t.setStyle(n), routesSource.addFeature(t);
825
+ }), o = [];
826
+ Number(e.state) === 0 ? o.push(stopIconStyle) : Number(e.state) === 1 && o.push(slowIconStyle), o.push(n), t.setStyle(o), routesSource.addFeature(t);
786
827
  }, createArrowFetaure = (e, t) => {
787
- const o = e || [], n = e.length;
788
- n || (o.push(trackList[0]), o.push(trackList[trackList.length - 1]));
789
- for (let r = 0; r < n - 1; r++) {
790
- let a;
791
- const l = e[r], i = (e[r + 1].index + l.index) / 2;
792
- if (i % 2 === 0)
793
- a = trackList[i].centerPoint;
828
+ const n = e || [], o = e.length;
829
+ o || (n.push(trackList[0]), n.push(trackList[trackList.length - 1]));
830
+ for (let r = 0; r < o - 1; r++) {
831
+ let l;
832
+ const s = e[r], a = (e[r + 1].index + s.index) / 2;
833
+ if (a % 2 === 0)
834
+ l = trackList[a].centerPoint;
794
835
  else {
795
- const c = trackList[Math.floor(i)], d = trackList[Math.ceil(i)];
836
+ const c = trackList[Math.floor(a)], d = trackList[Math.ceil(a)];
796
837
  if (c && d) {
797
- const [u, s] = c.centerPoint, [p, m] = d.centerPoint;
798
- a = [(u + p) / 2, (s + m) / 2];
838
+ const [u, i] = c.centerPoint, [p, m] = d.centerPoint;
839
+ l = [(u + p) / 2, (i + m) / 2];
799
840
  }
800
841
  }
801
- if (a) {
842
+ if (l) {
802
843
  const c = new Feature({
803
- geometry: new Point(a)
844
+ geometry: new Point(l)
804
845
  });
805
846
  c.set("type", "track_arrow"), c.setStyle(
806
847
  new Style({
@@ -820,34 +861,34 @@ const reRenderTrackLine = () => {
820
861
  }
821
862
  }, setTrackViewCenter = (e) => {
822
863
  var r;
823
- const t = mapInstance$1.getView(), o = e ? routeFeatures.find((a) => a.getId() === e) : routeFeatures[0];
824
- if (!o) return;
825
- const n = (r = o == null ? void 0 : o.getGeometry()) == null ? void 0 : r.getExtent();
826
- if (n != null && n.length)
864
+ const t = mapInstance$1.getView(), n = e ? routeFeatures.find((l) => l.getId() === e) : routeFeatures[0];
865
+ if (!n) return;
866
+ const o = (r = n == null ? void 0 : n.getGeometry()) == null ? void 0 : r.getExtent();
867
+ if (o != null && o.length)
827
868
  try {
828
- const a = buffer(n, Math.max(n[2] - n[0], n[3] - n[1]) * 0.02);
829
- t.fit(a);
830
- } catch (a) {
831
- console.log(a);
869
+ const l = buffer(o, Math.max(o[2] - o[0], o[3] - o[1]) * 0.02);
870
+ t.fit(l);
871
+ } catch (l) {
872
+ console.log(l);
832
873
  }
833
874
  }, createIconPointFeature = () => {
834
- const e = "&#xe69b;", t = "#fcdc3f", o = "#ff0000";
875
+ const e = "&#xe69b;", t = "#fcdc3f", n = "#ff0000";
835
876
  (trackList.length < 2 ? [trackList[0]] : [trackList[0], trackList[trackList.length - 1]]).forEach((r) => {
836
- const a = new Feature({
877
+ const l = new Feature({
837
878
  geometry: new Point(r.centerPoint)
838
879
  });
839
- a.set("type", "track_begin"), a.set("data", r);
840
- const l = r.index === 0 && trackList.length >= 2 ? t : o;
841
- a.setStyle(
880
+ l.set("type", "track_begin"), l.set("data", r);
881
+ const s = r.index === 0 && trackList.length >= 2 ? t : n;
882
+ l.setStyle(
842
883
  new Style({
843
884
  text: new Text({
844
885
  font: "Normal 14px map-iconfont",
845
886
  text: getIconFont(e),
846
- fill: new Fill({ color: l })
887
+ fill: new Fill({ color: s })
847
888
  }),
848
889
  zIndex: 101
849
890
  })
850
- ), routesSource.addFeature(a);
891
+ ), routesSource.addFeature(l);
851
892
  });
852
893
  }, geoMarkerStyle = new Style({
853
894
  text: new Text({
@@ -862,28 +903,32 @@ const reRenderTrackLine = () => {
862
903
  }, removeAllTrackLayer = () => {
863
904
  showTracks = [], allTracks = {}, routesSource == null || routesSource.clear();
864
905
  }, closeTrack = (e = !1) => {
865
- routeLayer == null || routeLayer.setVisible(!1), e && removeAllTrackLayer(), stopAnimation();
866
- }, handlePlay = (e, t) => {
867
- const o = allTracks[String(e)];
868
- playAnimation(o == null ? void 0 : o.map((n) => [n.lon, n.lat]), t);
906
+ routeLayer == null || routeLayer.setVisible(!1);
907
+ const t = getInstall();
908
+ cloneDeep(t.getOverlays().getArray()).forEach((o) => {
909
+ o.get("class") === "track-label-overlay" && (o.setPosition(void 0), t.removeOverlay(o), o.dispose());
910
+ }), e && removeAllTrackLayer(), stopAnimation(), isClosing = !0;
911
+ }, getShowTracks = () => showTracks, handlePlay = (e, t) => {
912
+ const n = allTracks[String(e)];
913
+ playAnimation(n == null ? void 0 : n.map((o) => [o.lon, o.lat]), t);
869
914
  }, moveFeature = (e, t) => {
870
- var s, p;
871
- const o = Number(50 * t), n = ((s = e.frameState) == null ? void 0 : s.time) ?? Date.now(), r = n - lastTime;
872
- if (distance = (distance + o * r / 1e6) % 2, lastTime = n, distance >= 1) {
915
+ var i, p;
916
+ const n = Number(50 * t), o = ((i = e.frameState) == null ? void 0 : i.time) ?? Date.now(), r = o - lastTime;
917
+ if (distance = (distance + n * r / 1e6) % 2, lastTime = o, distance >= 1) {
873
918
  stopAnimation();
874
919
  return;
875
920
  }
876
- const a = linePath.getCoordinateAt(
921
+ const l = linePath.getCoordinateAt(
877
922
  distance > 1 ? 2 - distance : distance
878
- ), l = linePath.getCoordinateAt(
923
+ ), s = linePath.getCoordinateAt(
879
924
  distance > 1 ? distance - 0.01 : distance
880
- ), i = linePath.getCoordinateAt(
925
+ ), a = linePath.getCoordinateAt(
881
926
  distance > 1 ? 2 - distance : distance + 0.01
882
927
  ), d = getRotation(
883
- mercatorToLonLat(l, "array"),
884
- mercatorToLonLat(i, "array")
928
+ mercatorToLonLat(s, "array"),
929
+ mercatorToLonLat(a, "array")
885
930
  ) * Math.PI / 180;
886
- (p = geoMarkerStyle.getText()) == null || p.setRotation(d), position.setCoordinates(a);
931
+ (p = geoMarkerStyle.getText()) == null || p.setRotation(d), position.setCoordinates(l);
887
932
  const u = getVectorContext(e);
888
933
  u.setStyle(geoMarkerStyle), u.drawGeometry(position), mapInstance$1 == null || mapInstance$1.render();
889
934
  }, startAnimation = () => {
@@ -903,8 +948,8 @@ const reRenderTrackLine = () => {
903
948
  type: "icon",
904
949
  geometry: new Point(linePath.getFirstCoordinate())
905
950
  });
906
- const o = startMarker.getGeometry();
907
- position = o ? o.clone() : new Point([0, 0]), geoMarker = new Feature({
951
+ const n = startMarker.getGeometry();
952
+ position = n ? n.clone() : new Point([0, 0]), geoMarker = new Feature({
908
953
  type: "geoMarker",
909
954
  style: geoMarkerStyle,
910
955
  geometry: position
@@ -912,43 +957,43 @@ const reRenderTrackLine = () => {
912
957
  source: new VectorSource({
913
958
  features: [geoMarker]
914
959
  })
915
- }), mapInstance$1 == null || mapInstance$1.addLayer(vectorLayer$3), moveFeatureHandler = (n) => moveFeature(n, t), startAnimation();
916
- }, getRotation = (e, t, o) => {
917
- function n(s) {
918
- return 180 * (s % (2 * Math.PI)) / Math.PI;
960
+ }), mapInstance$1 == null || mapInstance$1.addLayer(vectorLayer$3), moveFeatureHandler = (o) => moveFeature(o, t), startAnimation();
961
+ }, getRotation = (e, t, n) => {
962
+ function o(i) {
963
+ return 180 * (i % (2 * Math.PI)) / Math.PI;
919
964
  }
920
- function r(s) {
921
- return s % 360 * Math.PI / 180;
965
+ function r(i) {
966
+ return i % 360 * Math.PI / 180;
922
967
  }
923
- function a(s) {
968
+ function l(i) {
924
969
  var p;
925
- if (!s) throw new Error("Coordinate is required");
926
- if (!Array.isArray(s)) {
927
- if ((s == null ? void 0 : s.type) === "Feature" && (s == null ? void 0 : s.geometry) !== null && ((p = s == null ? void 0 : s.geometry) == null ? void 0 : p.type) === "Point")
928
- return s == null ? void 0 : s.geometry.coordinates;
929
- if (s.type === "Point") return (s == null ? void 0 : s.coordinates) || [];
970
+ if (!i) throw new Error("Coordinate is required");
971
+ if (!Array.isArray(i)) {
972
+ if ((i == null ? void 0 : i.type) === "Feature" && (i == null ? void 0 : i.geometry) !== null && ((p = i == null ? void 0 : i.geometry) == null ? void 0 : p.type) === "Point")
973
+ return i == null ? void 0 : i.geometry.coordinates;
974
+ if (i.type === "Point") return (i == null ? void 0 : i.coordinates) || [];
930
975
  }
931
- if (Array.isArray(s) && s.length >= 2 && !Array.isArray(s[0]) && !Array.isArray(s[1]))
932
- return s;
976
+ if (Array.isArray(i) && i.length >= 2 && !Array.isArray(i[0]) && !Array.isArray(i[1]))
977
+ return i;
933
978
  throw new Error(
934
979
  "Coordinate must be GeoJSON Point or an Array of numbers"
935
980
  );
936
981
  }
937
- function l(s, p, m = {}) {
982
+ function s(i, p, m = {}) {
938
983
  if (m.final)
939
- return function(k, M) {
940
- return (l(M, k) + 180) % 360;
941
- }(s, p);
942
- const g = a(s), y = a(p), v = r(g[0]), w = r(y[0]), L = r(g[1]), f = r(y[1]), T = Math.sin(w - v) * Math.cos(f), E = Math.cos(L) * Math.sin(f) - Math.sin(L) * Math.cos(f) * Math.cos(w - v);
943
- return n(Math.atan2(T, E));
984
+ return function(k, S) {
985
+ return (s(S, k) + 180) % 360;
986
+ }(i, p);
987
+ const g = l(i), y = l(p), v = r(g[0]), w = r(y[0]), T = r(g[1]), f = r(y[1]), L = Math.sin(w - v) * Math.cos(f), E = Math.cos(T) * Math.sin(f) - Math.sin(T) * Math.cos(f) * Math.cos(w - v);
988
+ return o(Math.atan2(L, E));
944
989
  }
945
- function i(s) {
946
- return !isNaN(s) && s !== null && !Array.isArray(s);
990
+ function a(i) {
991
+ return !isNaN(i) && i !== null && !Array.isArray(i);
947
992
  }
948
- function c(s, p = {}, m = {}) {
949
- return s || console.log("Coordinates are required"), Array.isArray(s) || console.log("Coordinates must be an Array"), s.length < 2 && console.log("Coordinates must be at least 2 numbers long"), (!i(s[0]) || !i(s[1])) && console.log("Coordinates must contain numbers"), d({ type: "Point", coordinates: s }, p, m);
993
+ function c(i, p = {}, m = {}) {
994
+ return i || console.log("Coordinates are required"), Array.isArray(i) || console.log("Coordinates must be an Array"), i.length < 2 && console.log("Coordinates must be at least 2 numbers long"), (!a(i[0]) || !a(i[1])) && console.log("Coordinates must contain numbers"), d({ type: "Point", coordinates: i }, p, m);
950
995
  }
951
- function d(s, p = {}, m = {}) {
996
+ function d(i, p = {}, m = {}) {
952
997
  const g = {
953
998
  type: "Feature",
954
999
  id: "",
@@ -956,30 +1001,35 @@ const reRenderTrackLine = () => {
956
1001
  bbox: {},
957
1002
  geometry: {}
958
1003
  };
959
- return m.id !== void 0 && (g.id = m.id), m.bbox && (g.bbox = m.bbox), g.properties = p, g.geometry = s, g;
1004
+ return m.id !== void 0 && (g.id = m.id), m.bbox && (g.bbox = m.bbox), g.properties = p, g.geometry = i, g;
960
1005
  }
961
- const u = l(c(e), c(t), o);
1006
+ const u = s(c(e), c(t), n);
962
1007
  return u < 0 ? 360 + u : u;
963
1008
  }, PORT_LAYER_CLASS_NAME = "zh-map-port-layer";
964
1009
  let vectorLayer$2, vectorSource$2;
965
1010
  const renderPortList = (e) => {
966
- var o;
967
- if (!e || e.length === 0) return;
968
- const t = getZoom();
969
- vectorSource$2 || (vectorSource$2 = new VectorSource()), e.forEach((n) => {
970
- if ((selectedPortFeature == null ? void 0 : selectedPortFeature.get("portData").id) === n.id) return;
971
- const [r, a] = n.latLon.split(","), l = new Feature({
972
- geometry: new Point(fromLonLat([Number(r), Number(a)]))
973
- });
974
- l.setStyle(setPortStyle(n, t, !1)), l.set("portData", n), vectorSource$2.addFeature(l);
975
- }), vectorLayer$2 || (vectorLayer$2 = new VectorLayer({
976
- className: PORT_LAYER_CLASS_NAME,
977
- source: vectorSource$2,
978
- zIndex: 100
979
- }), (o = getInstall()) == null || o.addLayer(vectorLayer$2));
980
- }, setPortStyle = (e, t, o) => {
981
- const n = (a) => `<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
982
- <path fill-rule="evenodd" clip-rule="evenodd" d="M22.6563 44.9304C22.5453 44.8844 22.4445 44.817 22.3595 44.7321C22.3595 44.7321 9.36986 31.7424 9.32952 31.6913C7.09059 29.0791 5.64794 25.8802 5.17255 22.4736C4.69716 19.0671 5.20896 15.5957 6.64728 12.471C8.08561 9.34625 10.3902 6.69909 13.2878 4.84325C16.1855 2.98741 19.5548 2.00068 22.9965 2C26.4381 1.99932 29.8078 2.98473 32.7062 4.83943C35.6046 6.69414 37.9102 9.34039 39.3498 12.4646C40.7893 15.5888 41.3025 19.0599 40.8284 22.4666C40.3544 25.8734 38.913 29.0729 36.6751 31.686C36.6401 31.737 23.6531 44.7321 23.6531 44.7321C23.5682 44.817 23.4674 44.8844 23.3564 44.9304C23.2454 44.9763 23.1265 45 23.0063 45C22.8862 45 22.7673 44.9763 22.6563 44.9304Z" fill="${a}"/>
1011
+ var t;
1012
+ if (!(!e || e.length === 0)) {
1013
+ if (vectorSource$2 || (vectorSource$2 = new VectorSource()), vectorSource$2.clear(), selectedPortData) {
1014
+ const n = e.find((o) => o.id === selectedPortData.id);
1015
+ n ? selectedPortData = n : e.push(selectedPortData);
1016
+ }
1017
+ e.forEach((n) => {
1018
+ renderPortPoint(n);
1019
+ }), vectorLayer$2 || (vectorLayer$2 = new VectorLayer({
1020
+ className: PORT_LAYER_CLASS_NAME,
1021
+ source: vectorSource$2,
1022
+ zIndex: 100
1023
+ }), (t = getInstall()) == null || t.addLayer(vectorLayer$2));
1024
+ }
1025
+ }, renderPortPoint = (e) => {
1026
+ const t = getZoom(), [n, o] = e.latLon.split(","), r = new Feature({
1027
+ geometry: new Point(fromLonLat([Number(n), Number(o)]))
1028
+ });
1029
+ r.setStyle(setPortStyle(e, t, e.id === (selectedPortData == null ? void 0 : selectedPortData.id))), r.set("portData", e), vectorSource$2.addFeature(r);
1030
+ }, setPortStyle = (e, t, n) => {
1031
+ const o = (l) => `<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
1032
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M22.6563 44.9304C22.5453 44.8844 22.4445 44.817 22.3595 44.7321C22.3595 44.7321 9.36986 31.7424 9.32952 31.6913C7.09059 29.0791 5.64794 25.8802 5.17255 22.4736C4.69716 19.0671 5.20896 15.5957 6.64728 12.471C8.08561 9.34625 10.3902 6.69909 13.2878 4.84325C16.1855 2.98741 19.5548 2.00068 22.9965 2C26.4381 1.99932 29.8078 2.98473 32.7062 4.83943C35.6046 6.69414 37.9102 9.34039 39.3498 12.4646C40.7893 15.5888 41.3025 19.0599 40.8284 22.4666C40.3544 25.8734 38.913 29.0729 36.6751 31.686C36.6401 31.737 23.6531 44.7321 23.6531 44.7321C23.5682 44.817 23.4674 44.8844 23.3564 44.9304C23.2454 44.9763 23.1265 45 23.0063 45C22.8862 45 22.7673 44.9763 22.6563 44.9304Z" fill="${l}"/>
983
1033
  <g clip-path="url(#clip0_10059_122082)">
984
1034
  <path d="M34.8624 22.8687L32.5874 25.6313L33.4812 25.7125C33.4812 25.7125 30.5562 28.0687 27.9562 28.2312C25.3562 28.3937 24.1374 24.9 24.1374 24.9V19.1312H27.6312V17.425H24.2999V15.15C25.7624 14.6625 26.7374 13.2812 26.7374 11.6562C26.7374 9.625 25.1124 8 23.0812 8H22.9999C20.9687 8 19.3437 9.625 19.3437 11.6562C19.3437 13.2812 20.3999 14.6625 21.7812 15.15V17.425H18.4499V19.1312H21.9437V24.9C21.9437 24.9 20.6437 28.3125 18.0437 28.2312C15.4437 28.0687 12.5187 25.7125 12.5187 25.7125L13.4124 25.6313L11.0562 22.8687L10.2437 26.2812L11.2187 26.0375C11.2187 26.0375 13.1687 29.5313 16.1749 30.8313C19.1812 32.2125 22.1874 33.9187 22.8374 34C23.4874 33.9187 26.4937 32.2125 29.4187 30.8313C32.3437 29.45 34.3749 26.0375 34.3749 26.0375L35.3499 26.2812L34.8624 22.8687ZM23.0812 13.6875C21.9437 13.6875 21.0499 12.7937 21.0499 11.6562C21.0499 10.6 21.9437 9.70625 22.9999 9.70625H23.0812C24.1374 9.70625 25.0312 10.6 25.0312 11.6562C25.1124 12.7937 24.1374 13.6875 23.0812 13.6875Z" fill="white"/>
985
1035
  </g>
@@ -989,16 +1039,16 @@ const renderPortList = (e) => {
989
1039
  </clipPath>
990
1040
  </defs>
991
1041
  </svg>
992
- `, r = () => `data:image/svg+xml;utf8,${encodeURIComponent(n(o ? "#FF5733" : "#3370FF"))}`;
1042
+ `, r = () => `data:image/svg+xml;utf8,${encodeURIComponent(o(n ? "#FF5733" : "#3370FF"))}`;
993
1043
  return new Style({
994
1044
  text: new Text({
995
1045
  text: e.shortName,
996
1046
  font: "12px sans-serif",
997
1047
  fill: new Fill({
998
- color: o ? "#ffffff" : "#000000"
1048
+ color: n ? "#ffffff" : "#000000"
999
1049
  }),
1000
1050
  backgroundFill: new Fill({
1001
- color: o ? "#FF5733" : "#FFFFFF"
1051
+ color: n ? "#FF5733" : "#FFFFFF"
1002
1052
  }),
1003
1053
  offsetY: 30
1004
1054
  }),
@@ -1016,21 +1066,26 @@ const renderPortList = (e) => {
1016
1066
  });
1017
1067
  } else
1018
1068
  console.log("清除所有港口"), vectorSource$2.clear();
1069
+ }, clearSelectedPort = () => {
1070
+ const e = selectedPortFeature.get("portData"), t = getZoom();
1071
+ vectorSource$2.getFeatures().forEach((o) => {
1072
+ o.get("portData").id === e.id && (o == null || o.setStyle(setPortStyle(e, t, !1)));
1073
+ }), selectedPortData = null, selectedPortFeature = null;
1019
1074
  };
1020
- let selectedPortFeature = null;
1075
+ let selectedPortFeature = null, selectedPortData = null;
1021
1076
  const selectedPort = (e) => {
1022
- clearPrevSelectedPort(), addSelectedPortStyle(e);
1077
+ e ? (clearPrevSelectedPort(), addSelectedPortStyle(e)) : clearSelectedPort();
1023
1078
  }, clearPrevSelectedPort = () => {
1024
1079
  if (selectedPortFeature) {
1025
1080
  const e = selectedPortFeature.get("portData"), t = getZoom();
1026
1081
  selectedPortFeature.setStyle(setPortStyle(e, t, !1));
1027
1082
  }
1028
1083
  }, addSelectedPortStyle = (e) => {
1029
- const t = e.get("portData"), o = getZoom();
1030
- selectedPortFeature = e, e.setStyle(setPortStyle(t, o, !0));
1084
+ const t = vectorSource$2.getFeatures();
1085
+ selectedPortData = e, selectedPortFeature = t.find((n) => n.get("portData").id === e.id);
1031
1086
  }, handlePortHover = (e) => {
1032
- const t = getInstall(), o = t.forEachFeatureAtPixel(e, (n) => n);
1033
- o && o.get("portData") && (t.getTargetElement().style.cursor = "pointer");
1087
+ const t = getInstall(), n = t.forEachFeatureAtPixel(e, (o) => o);
1088
+ n && n.get("portData") && (t.getTargetElement().style.cursor = "pointer");
1034
1089
  }, disableDoubleClickZoom = () => {
1035
1090
  getInstall().getInteractions().forEach((t) => {
1036
1091
  t instanceof DoubleClickZoom && t.setActive(!1);
@@ -1104,25 +1159,25 @@ const addInteraction = () => {
1104
1159
  }), getInstall().addInteraction(draw$1), createMeasureTooltip$1(), createHelpTooltip$1();
1105
1160
  let e;
1106
1161
  draw$1.on("drawstart", function(t) {
1107
- var n;
1162
+ var o;
1108
1163
  sketch$1 = t.feature, sketch$1.set("randomId", generateRandomId());
1109
- let o;
1110
- e = (n = sketch$1.getGeometry()) == null ? void 0 : n.on("change", function(r) {
1111
- const a = r.target, l = computedDistance(a, unit.value);
1112
- o = a.getLastCoordinate(), measureTooltipElement$1 && l && (measureTooltipElement$1.innerHTML = l), measureTooltip$1.setPosition(o);
1164
+ let n;
1165
+ e = (o = sketch$1.getGeometry()) == null ? void 0 : o.on("change", function(r) {
1166
+ const l = r.target, s = computedDistance(l, unit.value);
1167
+ n = l.getLastCoordinate(), measureTooltipElement$1 && s && (measureTooltipElement$1.innerHTML = s), measureTooltip$1.setPosition(n);
1113
1168
  });
1114
1169
  }), draw$1.on("drawend", function() {
1115
- var t, o, n;
1170
+ var t, n, o;
1116
1171
  if (measureTooltipElement$1 && (measureTooltipElement$1.className = "ol-tooltip ol-tooltip-static ol-tooltip-measure"), measureTooltipElement$1 != null && measureTooltipElement$1.innerHTML) {
1117
1172
  const r = (sketch$1 == null ? void 0 : sketch$1.get("randomId")) || generateRandomId();
1118
1173
  measureHistory.value.push({ id: r, value: measureTooltipElement$1 == null ? void 0 : measureTooltipElement$1.innerHTML }), measureTooltipElement$1.innerHTML = `${measureTooltipElement$1.innerHTML}<div class="ol-tooltip-delete-button" data-id="${r}"><i class="map-iconfont icon-delete"></i></div>`;
1119
1174
  }
1120
1175
  (t = document.querySelector(".ol-selectable:has(.ol-tooltip-delete-button):last-child .ol-tooltip-delete-button")) == null || t.addEventListener("click", (r) => {
1121
- var l;
1176
+ var s;
1122
1177
  r.preventDefault(), r.stopPropagation();
1123
- const a = (l = r.target) == null ? void 0 : l.getAttribute("data-id");
1124
- a && deleteLine(a);
1125
- }), measureTooltip$1.setOffset([0, -7]), sketch$1 = null, measureTooltipElement$1 = null, createMeasureTooltip$1(), e && unByKey(e), (o = getProps()) != null && o.lineDrawEnd && ((n = getProps()) == null || n.lineDrawEnd(measureHistory.value));
1178
+ const l = (s = r.target) == null ? void 0 : s.getAttribute("data-id");
1179
+ l && deleteLine(l);
1180
+ }), measureTooltip$1.setOffset([0, -7]), sketch$1 = null, measureTooltipElement$1 = null, createMeasureTooltip$1(), e && unByKey(e), (n = getProps()) != null && n.lineDrawEnd && ((o = getProps()) == null || o.lineDrawEnd(measureHistory.value));
1126
1181
  });
1127
1182
  }, generateRandomId = () => Math.random().toString(36).substring(2, 9);
1128
1183
  let measureTooltipElement$1, measureTooltip$1;
@@ -1142,46 +1197,46 @@ const createMeasureTooltip$1 = () => {
1142
1197
  }), getInstall().addOverlay(helpTooltip);
1143
1198
  }, close$1 = () => {
1144
1199
  measureHistory.value.forEach((e, t) => {
1145
- var r, a;
1146
- const o = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
1147
- o[t] && ((a = (r = o[t]) == null ? void 0 : r.parentNode) == null || a.removeChild(o[t]));
1148
- const n = vectorSource$1.getFeatures();
1149
- n[t] && vectorSource$1.removeFeature(n[t]);
1200
+ var r, l;
1201
+ const n = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
1202
+ n[t] && ((l = (r = n[t]) == null ? void 0 : r.parentNode) == null || l.removeChild(n[t]));
1203
+ const o = vectorSource$1.getFeatures();
1204
+ o[t] && vectorSource$1.removeFeature(o[t]);
1150
1205
  }), removeInteraction(), enableDoubleClickZoom(), state.value = !1;
1151
1206
  }, deleteLine = (e) => {
1152
- var o, n, r, a;
1153
- const t = measureHistory.value.findIndex((l) => l.id === e);
1207
+ var n, o, r, l;
1208
+ const t = measureHistory.value.findIndex((s) => s.id === e);
1154
1209
  if (t !== -1) {
1155
1210
  measureHistory.value.splice(t, 1);
1156
- const l = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
1157
- l[t] && ((n = (o = l[t]) == null ? void 0 : o.parentNode) == null || n.removeChild(l[t]));
1158
- const i = vectorSource$1.getFeatures();
1159
- i[t] && vectorSource$1.removeFeature(i[t]);
1211
+ const s = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
1212
+ s[t] && ((o = (n = s[t]) == null ? void 0 : n.parentNode) == null || o.removeChild(s[t]));
1213
+ const a = vectorSource$1.getFeatures();
1214
+ a[t] && vectorSource$1.removeFeature(a[t]);
1160
1215
  }
1161
- (r = getProps()) != null && r.lineDrawEnd && ((a = getProps()) == null || a.lineDrawEnd(measureHistory.value));
1216
+ (r = getProps()) != null && r.lineDrawEnd && ((l = getProps()) == null || l.lineDrawEnd(measureHistory.value));
1162
1217
  }, computedDistance = (e, t) => {
1163
- const n = getLength(e);
1218
+ const o = getLength(e);
1164
1219
  let r = "";
1165
1220
  switch (t) {
1166
1221
  case "m":
1167
- r = `${Math.round(n * 100) / 100} m`;
1222
+ r = `${Math.round(o * 100) / 100} m`;
1168
1223
  break;
1169
1224
  case "km":
1170
- r = `${Math.round(n / 1e3 * 100) / 100} km`;
1225
+ r = `${Math.round(o / 1e3 * 100) / 100} km`;
1171
1226
  break;
1172
1227
  case "nm":
1173
- r = `${Math.round(n / 1.852 * 100) / 100} nm`;
1228
+ r = `${Math.round(o / 1.852 * 100) / 100} nm`;
1174
1229
  break;
1175
1230
  }
1176
1231
  return r;
1177
1232
  }, removeInteraction = () => {
1178
1233
  measureHistory.value = [], document.querySelectorAll(".ol-tooltip.ol-tooltip-static").forEach((t) => {
1179
- var o;
1180
- (o = t == null ? void 0 : t.parentNode) == null || o.removeChild(t);
1234
+ var n;
1235
+ (n = t == null ? void 0 : t.parentNode) == null || n.removeChild(t);
1181
1236
  }), vectorSource$1.clear();
1182
1237
  const e = getInstall();
1183
1238
  if (draw$1) {
1184
- const t = e.getInteractions().getArray().find((o) => getUid(o) === getUid(draw$1));
1239
+ const t = e.getInteractions().getArray().find((n) => getUid(n) === getUid(draw$1));
1185
1240
  t && e.removeInteraction(t);
1186
1241
  }
1187
1242
  e.removeLayer(vectorLayer$1), helpTooltipElement$1 != null && helpTooltipElement$1.parentNode && helpTooltipElement$1.parentNode.removeChild(helpTooltipElement$1), measureTooltipElement$1 != null && measureTooltipElement$1.parentNode && measureTooltipElement$1.parentNode.removeChild(measureTooltipElement$1);
@@ -1198,8 +1253,8 @@ const createMeasureTooltip$1 = () => {
1198
1253
  var t;
1199
1254
  (t = getView()) == null || t.setZoom(e);
1200
1255
  }, setCenter = (e, t) => {
1201
- var o;
1202
- (o = getView()) == null || o.setCenter(fromLonLat([e, t]));
1256
+ var n;
1257
+ (n = getView()) == null || n.setCenter(fromLonLat([e, t]));
1203
1258
  }, getCenter = () => {
1204
1259
  var t;
1205
1260
  const e = (t = getView()) == null ? void 0 : t.getCenter();
@@ -1217,8 +1272,11 @@ const createMeasureTooltip$1 = () => {
1217
1272
  constrainResolution: !0,
1218
1273
  enableRotation: !1,
1219
1274
  multiWorld: !0
1220
- }, o = new Map$2({
1275
+ }, n = new Map$2({
1221
1276
  target: "map",
1277
+ controls: defaults({
1278
+ zoom: !1
1279
+ }),
1222
1280
  layers: [
1223
1281
  BASE_LAYER_MAP.get("vectorTile"),
1224
1282
  BASE_LAYER_MAP.get("vectorTileMark"),
@@ -1227,7 +1285,7 @@ const createMeasureTooltip$1 = () => {
1227
1285
  ],
1228
1286
  view: new View(t)
1229
1287
  });
1230
- mapInstance.value = o, setBaseMapEvent(o, e);
1288
+ mapInstance.value = n, setBaseMapEvent(n, e);
1231
1289
  }, setBaseLayerMap = (e) => {
1232
1290
  BASE_LAYER_MAP.set("vectorTile", new TileLayer({
1233
1291
  source: new XYZ({ url: BASE_MAP_LINK.vectorTile }),
@@ -1261,27 +1319,29 @@ const createMeasureTooltip$1 = () => {
1261
1319
  }));
1262
1320
  }, setBaseMapEvent = (e, t) => {
1263
1321
  e.on("moveend", () => {
1264
- var n;
1265
- const o = getZoom();
1266
- (n = t.mapMoveEnd) == null || n.call(t, o), reRenderTrackLine();
1267
- }), e.on("pointermove", (o) => {
1268
- const n = e.getEventPixel(o.originalEvent), r = e.forEachFeatureAtPixel(n, (a) => a);
1269
- handleShipMapEvent(r, "hover"), r && (handleTrackMapEvent(r, "hover", o), handlePortHover(n));
1270
- }), e.on("click", debounce((o) => {
1322
+ var o;
1323
+ const n = getZoom();
1324
+ (o = t.mapMoveEnd) == null || o.call(t, n), reRenderTrackLine();
1325
+ }), e.on("pointermove", (n) => {
1326
+ const o = e.getEventPixel(n.originalEvent), r = e.forEachFeatureAtPixel(o, (l) => l);
1327
+ handleShipMapEvent(r, "hover"), handleTrackMapEvent(r, "hover", n), r && handlePortHover(o);
1328
+ }), e.on("movestart", () => {
1329
+ removeSelectedOverlay();
1330
+ }), e.on("click", debounce((n) => {
1271
1331
  if (console.log("1", drawLine.getState()), drawLine.getState()) return;
1272
- const n = e.getEventPixel(o.originalEvent), r = e.forEachFeatureAtPixel(
1273
- n,
1274
- (a) => {
1275
- if (a != null && a.get("shipData") || a != null && a.get("portData"))
1276
- return a;
1332
+ const o = e.getEventPixel(n.originalEvent), r = e.forEachFeatureAtPixel(
1333
+ o,
1334
+ (l) => {
1335
+ if (l != null && l.get("shipData") || l != null && l.get("portData"))
1336
+ return l;
1277
1337
  }
1278
1338
  );
1279
1339
  if (console.log("2", r), !!r) {
1280
- if (o.preventDefault(), o.stopPropagation(), r.get("shipData"))
1340
+ if (n.preventDefault(), n.stopPropagation(), r.get("shipData"))
1281
1341
  handleShipMapEvent(r, "click", t == null ? void 0 : t.selectShip);
1282
1342
  else if (r.get("portData")) {
1283
- const a = r.get("portData");
1284
- selectedPort(r), t == null || t.selectPort(String(a == null ? void 0 : a.id));
1343
+ const l = r.get("portData");
1344
+ selectedPort(l), t == null || t.selectPort(l);
1285
1345
  }
1286
1346
  }
1287
1347
  }, 150));
@@ -1289,39 +1349,39 @@ const createMeasureTooltip$1 = () => {
1289
1349
  __name: "scaleLine",
1290
1350
  setup(e, { expose: t }) {
1291
1351
  return t({
1292
- setScaleLine: (n) => {
1293
- n || (n = "metric");
1352
+ setScaleLine: (o) => {
1353
+ o || (o = "metric");
1294
1354
  const r = new ScaleLine$1({
1295
- units: n
1296
- }), a = document.getElementById("scale-line-container");
1297
- a && (r.setTarget(a), getInstall().addControl(r));
1355
+ units: o
1356
+ }), l = document.getElementById("scale-line-container");
1357
+ l && (r.setTarget(l), getInstall().addControl(r));
1298
1358
  }
1299
- }), (n, r) => (openBlock(), createElementBlock("div", _hoisted_1$1));
1359
+ }), (o, r) => (openBlock(), createElementBlock("div", _hoisted_1$1));
1300
1360
  }
1301
1361
  }), ScaleLine = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-31ff8293"]]), _hoisted_1 = { class: "zoom" }, _sfc_main$1 = /* @__PURE__ */ defineComponent({
1302
1362
  __name: "zoomControl",
1303
1363
  setup(e) {
1304
- const t = inject("mapInstance"), o = () => {
1364
+ const t = inject("mapInstance"), n = () => {
1305
1365
  if (t != null && t.value) {
1306
1366
  const r = getZoom();
1307
1367
  if (!r) return;
1308
1368
  setZoom(r + 1);
1309
1369
  }
1310
- }, n = () => {
1370
+ }, o = () => {
1311
1371
  if (t != null && t.value) {
1312
1372
  const r = getZoom();
1313
1373
  if (!r) return;
1314
1374
  setZoom(r - 1);
1315
1375
  }
1316
1376
  };
1317
- return (r, a) => (openBlock(), createElementBlock("div", _hoisted_1, [
1377
+ return (r, l) => (openBlock(), createElementBlock("div", _hoisted_1, [
1318
1378
  createElementVNode("div", {
1319
1379
  class: "button big-button",
1320
- onClick: o
1380
+ onClick: n
1321
1381
  }, " + "),
1322
1382
  createElementVNode("div", {
1323
1383
  class: "button small-button",
1324
- onClick: n
1384
+ onClick: o
1325
1385
  }, " - ")
1326
1386
  ]));
1327
1387
  }
@@ -1331,30 +1391,34 @@ const createMeasureTooltip$1 = () => {
1331
1391
  }, layerType = ref("vector"), getShowLayerType = () => layerType.value, setShowLayerType = (e) => {
1332
1392
  layerType.value = e;
1333
1393
  const t = getLayers();
1334
- t && t.getArray().forEach((o) => {
1335
- o.setVisible(o.className_ === e);
1394
+ t && t.getArray().forEach((n) => {
1395
+ n.setVisible(n.className_ === e);
1336
1396
  });
1337
1397
  }, showGreenTile = ref(), getGreenTileVisible = () => showGreenTile.value, setGreenTileVisible = (e) => {
1338
1398
  if (e !== showGreenTile.value) {
1339
1399
  if (e) {
1340
1400
  const t = getLayers();
1341
- if (!t.getArray().find((n) => n.className_ === "greenTile")) {
1342
- const n = new TileLayer({
1401
+ if (!t.getArray().find((o) => o.className_ === "greenTile")) {
1402
+ const o = new TileLayer({
1343
1403
  source: new XYZ({ url: BASE_MAP_LINK.greenTile }),
1344
1404
  visible: e,
1345
1405
  zIndex: 2,
1346
1406
  className: "greenTile"
1347
1407
  });
1348
- t.push(n);
1408
+ t.push(o);
1349
1409
  }
1350
1410
  } else {
1351
- const t = getLayers(), o = t.getArray().find((n) => n.className_ === "greenTile");
1352
- o && t.remove(o);
1411
+ const t = getLayers(), n = t.getArray().find((o) => o.className_ === "greenTile");
1412
+ n && t.remove(n);
1353
1413
  }
1354
1414
  showGreenTile.value = e;
1355
1415
  }
1356
- }, open = () => {
1357
- initLayer(), initDraw(), createMeasureTooltip(), createHelpTooltip();
1416
+ };
1417
+ let storeFeature;
1418
+ const open = () => {
1419
+ init();
1420
+ }, init = () => {
1421
+ initLayer(), createMeasureTooltip(), createHelpTooltip(), initDraw();
1358
1422
  };
1359
1423
  let vectorLayer = null, vectorSource = null;
1360
1424
  const initLayer = () => {
@@ -1369,9 +1433,9 @@ const initLayer = () => {
1369
1433
  })
1370
1434
  });
1371
1435
  vectorLayer = t, vectorSource = e;
1372
- const o = getInstall();
1373
- o.on("pointermove", pointerMoveHandler), o.addLayer(t), o.on(["dblclick"], function(n) {
1374
- draw && (n.stopPropagation(), n.preventDefault());
1436
+ const n = getInstall();
1437
+ n.on("pointermove", pointerMoveHandler), n.addLayer(t), n.on(["dblclick"], function(o) {
1438
+ draw && (o.stopPropagation(), o.preventDefault());
1375
1439
  });
1376
1440
  };
1377
1441
  let sketch;
@@ -1380,9 +1444,27 @@ const pointerMoveHandler = (e) => {
1380
1444
  const t = sketch ? "单击继续,双击结束" : "点击选择起点";
1381
1445
  helpTooltipElement && (helpTooltipElement.innerHTML = t, tipOverlay.setPosition(e.coordinate));
1382
1446
  };
1383
- let draw;
1447
+ let draw, lineLimitError = !1;
1384
1448
  const initDraw = () => {
1385
- let e = !1;
1449
+ var t, n;
1450
+ if (storeFeature) {
1451
+ helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement);
1452
+ const o = storeFeature.getGeometry();
1453
+ if (!o) return;
1454
+ const r = computedArea(o, "nm");
1455
+ measureTooltipElement && (measureTooltipElement.innerHTML = `
1456
+ <span class="text">面积:${r}${lineLimitError ? '<span class="error pl-12">超出可以绘画的距离</span>' : ""}</span>
1457
+ `), measureTooltipElement && (measureTooltipElement.innerHTML += '<span class="delete-icon" ><i class="map-iconfont icon-delete" /></div>');
1458
+ const l = o.getCoordinates(), s = l[0][l[0].length - 2];
1459
+ measureTooltip.setPosition(s), vectorLayer && ((t = vectorLayer.getSource()) == null || t.addFeature(storeFeature)), console.log("helpTooltipElement", (n = document.querySelector(".delete-icon")) == null ? void 0 : n.parentNode), setTimeout(() => {
1460
+ var a;
1461
+ (a = document.querySelector(".delete-icon")) == null || a.addEventListener("click", () => {
1462
+ var c;
1463
+ console.log("delete"), reset(), (c = getProps()) == null || c.areaDrawEnd([]);
1464
+ });
1465
+ }, 0);
1466
+ return;
1467
+ }
1386
1468
  draw = new Draw({
1387
1469
  type: "Polygon",
1388
1470
  source: vectorSource,
@@ -1404,30 +1486,30 @@ const initDraw = () => {
1404
1486
  })
1405
1487
  }),
1406
1488
  geometry: function(o) {
1407
- const n = o.getGeometry().getCoordinates();
1408
- return new MultiPoint(n);
1489
+ const r = o.getGeometry().getCoordinates();
1490
+ return new MultiPoint(r);
1409
1491
  }
1410
1492
  })]
1411
1493
  }), getInstall().addInteraction(draw);
1412
- let t;
1494
+ let e;
1413
1495
  draw.on("drawstart", (o) => {
1414
- var n;
1415
- sketch = o.feature, t = (n = sketch.getGeometry()) == null ? void 0 : n.on("change", (r) => {
1416
- const a = r.target, l = computedArea(a, "nm"), c = a.getCoordinates()[0], d = new LineString([c[c.length - 2], c[c.length - 1]]), u = computedDistance(d, "nm");
1417
- if (e = Number(getLength(d) / 1e3) > 150, !l) return;
1418
- const s = '<span class="error pl-4">超出可以绘画的距离</span>';
1496
+ var r;
1497
+ sketch = o.feature, e = (r = sketch.getGeometry()) == null ? void 0 : r.on("change", (l) => {
1498
+ const s = l.target, a = computedArea(s, "nm"), d = s.getCoordinates()[0], u = new LineString([d[d.length - 2], d[d.length - 1]]), i = computedDistance(u, "nm");
1499
+ if (lineLimitError = Number(getLength(u) / 1e3) > 150, !a) return;
1500
+ const p = '<span class="error pl-4">超出可以绘画的距离</span>';
1419
1501
  measureTooltipElement && (measureTooltipElement.innerHTML = `
1420
1502
  <div class="text">
1421
- 面积:${l}
1422
- ${e ? s : ""}
1503
+ 面积:${a}
1504
+ ${lineLimitError ? p : ""}
1423
1505
  </div>
1424
1506
  `), helpTooltipElement && (helpTooltipElement.innerHTML = `
1425
1507
  <div class="text">
1426
- 面积:${l}
1508
+ 面积:${a}
1427
1509
  </div>
1428
- <div class="text ${e ? "error" : ""}">
1429
- 线段 ${c.length - 2}: ${u}
1430
- ${e ? s : ""}
1510
+ <div class="text ${lineLimitError ? "error" : ""}">
1511
+ 线段 ${d.length - 2}: ${i}
1512
+ ${lineLimitError ? p : ""}
1431
1513
 
1432
1514
  </div>
1433
1515
  <div>
@@ -1436,23 +1518,29 @@ const initDraw = () => {
1436
1518
  `);
1437
1519
  });
1438
1520
  }), draw.on("drawend", (o) => {
1439
- var l, i, c;
1521
+ var a, c, d;
1440
1522
  if (!o.feature.getGeometry()) return;
1441
- measureTooltipElement && (measureTooltipElement.innerHTML += '<span class="delete-icon"><i class="map-iconfont icon-delete" /></div>'), measureTooltip.setOffset([10, 0]);
1442
- const r = o.feature.getGeometry().getCoordinates(), a = r[0][r[0].length - 2];
1443
- measureTooltip.setPosition(a), helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement), (l = getProps()) != null && l.areaDrawEnd && ((i = getProps()) == null || i.areaDrawEnd(r)), draw && (draw.setActive(!1), getInstall().removeInteraction(draw), getInstall().getInteractions().forEach((u) => {
1444
- u instanceof Draw && (u.setActive(!1), getInstall().removeInteraction(u));
1445
- })), t && unByKey(t), (c = document.querySelector(".delete-icon")) == null || c.addEventListener("click", () => {
1446
- reset();
1523
+ storeFeature = o.feature, measureTooltipElement && (measureTooltipElement.innerHTML += '<span class="delete-icon"><i class="map-iconfont icon-delete" /></div>'), measureTooltip.setOffset([10, 0]);
1524
+ const r = o.feature.getGeometry(), l = r.getCoordinates(), s = l[0][l[0].length - 2];
1525
+ if (measureTooltip.setPosition(s), helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement), (a = getProps()) != null && a.areaDrawEnd) {
1526
+ r.getInteriorPoint().getCoordinates();
1527
+ const u = l[0].map((i) => transform(i, projection.mercator, projection.data));
1528
+ (c = getProps()) == null || c.areaDrawEnd(u);
1529
+ }
1530
+ draw && (draw.setActive(!1), getInstall().removeInteraction(draw), getInstall().getInteractions().forEach((i) => {
1531
+ i instanceof Draw && (i.setActive(!1), getInstall().removeInteraction(i));
1532
+ })), e && unByKey(e), (d = document.querySelector(".delete-icon")) == null || d.addEventListener("click", () => {
1533
+ var u;
1534
+ reset(), (u = getProps()) == null || u.areaDrawEnd([]);
1447
1535
  });
1448
1536
  });
1449
1537
  }, computedArea = (e, t) => {
1450
- const o = getArea(e);
1538
+ const n = getArea(e);
1451
1539
  switch (t) {
1452
1540
  case "km":
1453
- return o > 1e4 ? Math.round(o / 1e6 * 100) / 100 + " km<sup>2</sup>" : Math.round(o * 100) / 100 + " m<sup>2</sup>";
1541
+ return n > 1e4 ? Math.round(n / 1e6 * 100) / 100 + " km<sup>2</sup>" : Math.round(n * 100) / 100 + " m<sup>2</sup>";
1454
1542
  case "nm":
1455
- return o > 1e4 ? Math.round(o / 1e6 / Math.pow(1.852, 2) * 100) / 100 + " nm<sup>2</sup>" : Math.round(o * 100) / 100 + " m<sup>2</sup>";
1543
+ return n > 1e4 ? Math.round(n / 1e6 / Math.pow(1.852, 2) * 100) / 100 + " nm<sup>2</sup>" : Math.round(n * 100) / 100 + " m<sup>2</sup>";
1456
1544
  }
1457
1545
  };
1458
1546
  let measureTooltipElement, measureTooltip;
@@ -1460,52 +1548,52 @@ const createMeasureTooltip = () => {
1460
1548
  measureTooltipElement != null && measureTooltipElement.parentNode && measureTooltipElement.parentNode.removeChild(measureTooltipElement), measureTooltipElement = document.createElement("div"), measureTooltipElement.style.display = "flex", measureTooltipElement.className = "ol-tooltip ol-tooltip-draw-polygon", measureTooltip = new Overlay({
1461
1549
  element: measureTooltipElement,
1462
1550
  offset: [0, -15],
1463
- positioning: "bottom-center"
1464
- // stopEvent: false,
1465
- // insertFirst: false
1551
+ positioning: "bottom-center",
1552
+ stopEvent: !1,
1553
+ insertFirst: !1
1466
1554
  }), getInstall().addOverlay(measureTooltip);
1467
1555
  };
1468
1556
  let helpTooltipElement, tipOverlay;
1469
1557
  const createHelpTooltip = () => {
1470
- helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement), helpTooltipElement = document.createElement("div"), helpTooltipElement.className = "ol-tooltip ol-help-tooltip hidden", tipOverlay = new Overlay({
1558
+ helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement), helpTooltipElement = document.createElement("div"), helpTooltipElement.className = "ol-tooltip ol-help-tooltip", tipOverlay = new Overlay({
1471
1559
  element: helpTooltipElement,
1472
1560
  offset: [15, 0],
1473
1561
  positioning: "center-left"
1474
1562
  }), getInstall().addOverlay(tipOverlay);
1475
1563
  }, reset = () => {
1476
- var e;
1477
- vectorSource == null || vectorSource.clear(), draw == null || draw.setActive(!0), (e = measureTooltipElement == null ? void 0 : measureTooltipElement.parentNode) == null || e.removeChild(measureTooltipElement), measureTooltip.setPosition(void 0), createMeasureTooltip(), createHelpTooltip(), getInstall().removeOverlay(tipOverlay), getInstall().removeOverlay(measureTooltip), initDraw();
1564
+ vectorSource == null || vectorSource.clear(), storeFeature = null, createMeasureTooltip(), createHelpTooltip(), initDraw();
1478
1565
  }, close = () => {
1479
- vectorSource == null || vectorSource.clear(), vectorSource = null;
1480
1566
  const e = getInstall();
1481
- vectorLayer && (e.removeLayer(vectorLayer), vectorLayer = null), sketch = null, draw && (e.removeInteraction(draw), draw = null);
1567
+ vectorSource == null || vectorSource.clear(), vectorSource = null, vectorLayer && (e.removeLayer(vectorLayer), vectorLayer = null), sketch = null, draw && (draw = null, e.getInteractions().forEach((t) => {
1568
+ t instanceof Draw && e.removeInteraction(t);
1569
+ })), helpTooltipElement != null && helpTooltipElement.parentElement && helpTooltipElement.parentElement.removeChild(helpTooltipElement), measureTooltipElement != null && measureTooltipElement.parentElement && measureTooltipElement.parentElement.removeChild(measureTooltipElement), tipOverlay && e.removeOverlay(tipOverlay), measureTooltip && e.removeOverlay(measureTooltip);
1482
1570
  }, drawPolygon = {
1483
1571
  open,
1484
- reset,
1485
- close
1572
+ close,
1573
+ reset
1486
1574
  };
1487
1575
  let currentTruckOverlay = null;
1488
1576
  const locationTruck = async (e) => {
1489
1577
  const t = getInstall();
1490
1578
  if (!t || (console.log("vehicleInfo", e), !(e != null && e.lon && (e != null && e.lat)))) return;
1491
- const o = Math.abs(Number(e.lon)) > 180 ? convertSixHundredThousandToLatLng(e.lon, e.lat) : [e.lon, e.lat];
1492
- drawTruckIcon(e, fromLonLat(o));
1493
- const n = t.getView(), r = new Point(o);
1494
- n.setCenter(transform(r.getCoordinates(), projection.data, projection.mercator));
1579
+ const n = Math.abs(Number(e.lon)) > 180 ? convertSixHundredThousandToLatLng(e.lon, e.lat) : [e.lon, e.lat];
1580
+ drawTruckIcon(e, fromLonLat(n));
1581
+ const o = t.getView(), r = new Point(n);
1582
+ o.setCenter(transform(r.getCoordinates(), projection.data, projection.mercator));
1495
1583
  }, drawTruckIcon = (e, t) => {
1496
- const o = getInstall(), n = `${CDN_URL}map/car-icon.gif`;
1584
+ const n = getInstall(), o = `${CDN_URL}map/car-icon.gif`;
1497
1585
  currentTruckOverlay || (currentTruckOverlay = new Overlay({
1498
1586
  element: document.createElement("div"),
1499
1587
  positioning: "center-center",
1500
1588
  stopEvent: !1
1501
1589
  // 允许交互事件穿透
1502
- }), o.addOverlay(currentTruckOverlay));
1590
+ }), n.addOverlay(currentTruckOverlay));
1503
1591
  const r = currentTruckOverlay.getElement();
1504
- r.style.backgroundImage = `url(${n})`, r.style.width = "80px", r.style.height = "80px";
1505
- const a = (e == null ? void 0 : e.drc) || "";
1506
- r.style.transform = `rotate(${a}deg)`, r.style.backgroundSize = "cover", currentTruckOverlay == null || currentTruckOverlay.setPosition(t);
1507
- }, renderTruckTrack = (e, t, o, n = 1e3) => {
1508
- renderTrackLine(e, t, o, LENGTH_UNIT.KM, "truck", n);
1592
+ r.style.backgroundImage = `url(${o})`, r.style.width = "80px", r.style.height = "80px";
1593
+ const l = (e == null ? void 0 : e.drc) || "";
1594
+ r.style.transform = `rotate(${l}deg)`, r.style.backgroundSize = "cover", currentTruckOverlay == null || currentTruckOverlay.setPosition(t);
1595
+ }, renderTruckTrack = (e, t, n, o = 1e3) => {
1596
+ renderTrackLine(e, t, n, LENGTH_UNIT.KM, "truck", o);
1509
1597
  }, closeTruckTrack = () => {
1510
1598
  closeTrack();
1511
1599
  }, removeTruckIcon = () => {
@@ -1542,10 +1630,10 @@ const locationTruck = async (e) => {
1542
1630
  } }
1543
1631
  },
1544
1632
  setup(e, { expose: t }) {
1545
- const o = ref(), n = ref(), r = e;
1633
+ const n = ref(), o = ref(), r = e;
1546
1634
  return console.log(r), onMounted(() => {
1547
- var l;
1548
- initMap(r), setProps(r), setShowLayerType(r.layerType), setGreenTileVisible(r.showGreenLayer), (l = n.value) == null || l.setScaleLine(r.scaleLineUnit);
1635
+ var s;
1636
+ initMap(r), setProps(r), setShowLayerType(r.layerType), setGreenTileVisible(r.showGreenLayer), (s = o.value) == null || s.setScaleLine(r.scaleLineUnit);
1549
1637
  }), t({
1550
1638
  getInstall,
1551
1639
  getZoom,
@@ -1572,7 +1660,8 @@ const locationTruck = async (e) => {
1572
1660
  removeAllTrackLayer,
1573
1661
  playShipTrack,
1574
1662
  setTrackViewCenter,
1575
- closeTrack
1663
+ closeTrack,
1664
+ getTrack: getShowTracks
1576
1665
  },
1577
1666
  port: {
1578
1667
  render: renderPortList,
@@ -1585,26 +1674,27 @@ const locationTruck = async (e) => {
1585
1674
  carTrack,
1586
1675
  utils: {
1587
1676
  getCalculateExtent: () => {
1588
- const l = getView().calculateExtent(getSize()), i = transform([l[0], l[1]], projection.mercator, projection.data), c = transform([l[2], l[3]], projection.mercator, projection.data);
1589
- return [i[0], i[1], c[0], c[1]];
1677
+ const s = getView().calculateExtent(getSize()), a = transform([s[0], s[1]], projection.mercator, projection.data), c = transform([s[2], s[3]], projection.mercator, projection.data);
1678
+ return [a[0], a[1], c[0], c[1]];
1590
1679
  },
1591
- convertSixHundredThousandToLatLng
1680
+ convertSixHundredThousandToLatLng,
1681
+ calculateCirclePoints
1592
1682
  }
1593
- }), (l, i) => (openBlock(), createElementBlock(Fragment, null, [
1683
+ }), (s, a) => (openBlock(), createElementBlock(Fragment, null, [
1594
1684
  createElementVNode("div", {
1595
1685
  id: "map",
1596
1686
  ref_key: "zhMapRef",
1597
- ref: o,
1687
+ ref: n,
1598
1688
  class: "zh-map"
1599
1689
  }, null, 512),
1600
1690
  createVNode(ScaleLine, {
1601
1691
  ref_key: "scaleLineRef",
1602
- ref: n
1692
+ ref: o
1603
1693
  }, null, 512),
1604
1694
  createVNode(ZoomControl, { ref: "zoomControlRef" }, null, 512)
1605
1695
  ], 64));
1606
1696
  }
1607
- }), Map$1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1f377837"]]), ZhMap = withInstall(Map$1);
1697
+ }), Map$1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a27bd97d"]]), ZhMap = withInstall(Map$1);
1608
1698
  export {
1609
1699
  ZhMap as Z
1610
1700
  };