{"version":3,"file":"TideService.mjs","sources":["../../../../../../../packages/sdk/plugins/weather/Tides/TideService.ts"],"sourcesContent":["import { toRaw, unref } from 'vue'\nimport L from 'leaflet'\n// import * as echarts from 'echarts'\nimport { ShipxyOptions } from '@map-sdk/sdk/config'\nimport { CanvasShipUtils } from '@map-sdk/sdk/utils/CanvasShipUtils'\nimport { CommUtils } from '@map-sdk/sdk/utils/CommUtils'\nimport { TidesPopupWindow } from '@map-sdk/sdk/plugins/weather/Tides/TidesPopupWindow'\nimport { GetAllTidePort } from '@map-sdk/sdk/plugins/weather/Tides//data'\nimport type { MyMap } from '@map-sdk/sdk/ShipxyAPISDK'\n\ninterface TooltipFormatterContext {\n  value: [Date, number]\n  dataIndex: number\n  seriesIndex: number\n  portname: string\n}\n\nexport class Tide {\n  name = ''\n  id = ''\n  timezone = ''\n  city = ''\n  province = ''\n  lat = 0\n  lon = 0\n  tidaldatum = ''\n  tidetype = ''\n  minviewzoom = 3\n  opacity = 0.9\n  offset = [0, 80]\n  direction = 'right'\n  from = 1\n  cnname = ''\n  enname = ''\n  cncountry = ''\n  encountry = ''\n  nodeid = 0\n  country = ''\n}\n\nclass Layers {\n  public static layerMap: MyMap\n  public static layerGroup: L.FeatureGroup<any>\n}\n\n/**\n * 潮服务\n */\nexport class TideService {\n  private _map: any\n  private _Tides: Tide[]\n  private partTime!: number\n  private leftDate!: Date\n  private rightDate!: Date\n  private currentTideTitle!: string\n  private currentId!: number\n  private leftTime: any\n  private rightTime: any\n  constructor(map: MyMap) {\n    Layers.layerMap = toRaw(unref(map))\n    Layers.layerGroup = L.featureGroup().addTo(Layers.layerMap)\n    this._map = toRaw(unref(map))\n    this._Tides = []\n    this._map.options.closePopupOnClick = false\n  }\n  private _Event = {\n    moveend: () => this._drawTides(),\n    zoomend: () => this._drawTides(),\n  }\n  addTides(): void {\n    const tidesGuoWaiUrl = ShipxyOptions.weather.tidesGuoWaiUrl.replace(\n      '{k}',\n      this._map.options.ak\n    )\n    console.log('TODO:请求接口', tidesGuoWaiUrl)\n\n    if (GetAllTidePort.status === 0 && GetAllTidePort.data) {\n      const data = GetAllTidePort.data\n      for (const [i, item] of data.entries()) {\n        const tide = new Tide()\n\n        tide.id = item.id.toString()\n        tide.nodeid = item.id\n        tide.from = 2\n        tide.cnname = item.cnname\n        tide.enname = item.enname\n        tide.cncountry = item.cncountry\n        tide.encountry = item.encountry\n        tide.lat = item.lat\n        tide.lon = item.lon\n        tide.timezone = item.timezone\n        tide.tidaldatum = item.datumn\n        tide.tidetype = item.tidetype\n        tide.minviewzoom =\n          i % 20 === 0 ? 1 : i % 9 === 0 ? 3 : i % 3 === 0 ? 5 : 7\n        tide.name = CommUtils.isEmpty(tide.cnname) ? item.enname : tide.cnname\n        tide.country = CommUtils.isEmpty(tide.cncountry)\n          ? item.encountry\n          : tide.cncountry\n\n        this._Tides.push(tide)\n\n        // 优化部分\n        const tideObj = Object.assign({}, tide)\n        tideObj.id = `${tideObj.id}_360`\n        if (tide.lon < 0) {\n          tideObj.lon += 360\n        }\n        if (tide.lon > 0) {\n          tideObj.lon -= 360\n        }\n        this._Tides.push(tideObj)\n      }\n      this._drawTides()\n    }\n\n    this._map.off('moveend', this._Event.moveend)\n    this._map.on('moveend', this._Event.moveend)\n  }\n  _drawTides() {\n    Layers.layerGroup.remove()\n    Layers.layerGroup = L.featureGroup().addTo(Layers.layerMap)\n    const zoom = this._map.getZoom()\n    const bounds = this._map.getBounds()\n    for (let i = 0; i < this._Tides.length; i++) {\n      bounds.contains(L.latLng(this._Tides[i].lat, this._Tides[i].lon))\n      if (zoom >= this._Tides[i].minviewzoom && 2 == this._Tides[i].from) {\n        this._drawTide_guowai(this._Tides[i])\n      }\n    }\n  }\n  close() {\n    if (Layers.layerGroup) {\n      Layers.layerGroup.remove()\n      this._Tides = []\n    }\n    this._map.off('zoomend', this._Event.zoomend)\n  }\n  _drawTide_guowai(item: Tide) {\n    let utctime: string\n    if (CommUtils.isEmpty(item.timezone)) utctime = ''\n    else {\n      let str = '+'\n      Number(item.timezone) < 0 && (str = '-')\n      utctime = `UTC${str}${Math.abs(Number(item.timezone))}`\n    }\n    const iconUrl = `${ShipxyOptions.weather.icon_base_url}/${ShipxyOptions.weather.icon_types.潮汐.icon}`\n    const marker = L.marker(L.latLng(item.lat, item.lon), {})\n    marker.setIcon(\n      L.icon({\n        iconUrl,\n        iconSize: [18, 18],\n      })\n    )\n    marker.on('click', () => {\n      // TODO: 不使用该方式最后使用组件的方式进行处理\n      return\n      let tbodymove = document.querySelector('#tbodymove') as HTMLDivElement\n      if (!tbodymove) {\n        new TidesPopupWindow(this._map).show()\n        tbodymove = document.querySelector('#tbodymove') as HTMLDivElement\n      }\n      tbodymove.style.display = 'block'\n      this.partTime = 86400000\n      this.leftDate = new Date()\n      this.rightDate = new Date(this.leftDate.getTime() + this.partTime)\n      this.currentTideTitle =\n        `潮汐观测点` +\n        `：${item.country} (${item.name})` +\n        `时区` +\n        `：${utctime}`\n      this.currentId = item.nodeid as any\n      ;(document.querySelector('#tide_title') as HTMLDivElement).innerHTML =\n        this.currentTideTitle\n      const tideClose = document.querySelector('#tideClose') as HTMLDivElement\n      tideClose.style.background = `url(${ShipxyOptions.weather.cha}) no-repeat center`\n      tideClose.onclick = function () {\n        const tbodymove = document.querySelector('#tbodymove') as HTMLDivElement\n        tbodymove.style.display = 'none'\n      }\n      this.setTidesInfoGuoWai(item)\n    })\n    const html = `<div class=\"weather-chaoxi-tooltip\">\n      <div class=\"title\">潮汐观测点：${item.name}</div>\n      <div class=\"field\">时区：${utctime}</div>\n      <div class=\"field\">国家：${item.country}</div>\n      <div class=\"field\">坐标：${CanvasShipUtils.latFormatter(\n        item.lat\n      )}，${CanvasShipUtils.lngFormatter(item.lon)}</div>\n      <div class=\"field\">潮高基准面：${item.tidaldatum}</div>\n      <div class=\"field\" style=\"padding-bottom: 10px;\">潮汐性质：${\n        item.tidetype\n      }</div>\n      </div>`\n    marker.bindTooltip(html, {\n      opacity: 1,\n      className: 'weather-chaoxi-bindTooltip',\n      interactive: false,\n    })\n    const tooltip = marker.getTooltip() as any\n    tooltip._initLayout()\n    tooltip._container.style.padding = 0\n    tooltip._container.style.border = 'none'\n    Layers.layerGroup.addLayer(marker)\n  }\n  setTidesInfoGuoWai(item: { name: any }): void {\n    const tideLoadingDom = document.querySelector(\n      '#tide_loading'\n    ) as HTMLInputElement\n    const tideContentDom = document.querySelector(\n      '#tide_content'\n    ) as HTMLInputElement\n    tideLoadingDom.style.display = 'block'\n    tideContentDom.style.display = 'none'\n    this.leftTime = CommUtils.dataFormat(this.leftDate, 'YYYY-MM-DD')\n    this.rightTime = CommUtils.dataFormat(this.rightDate, 'YYYY-MM-DD')\n\n    const tideDay1 = document.querySelector('#tideDay1') as HTMLInputElement\n    const tideDay2 = document.querySelector('#tideDay2') as HTMLInputElement\n    const tideDayTable1 = document.querySelector(\n      '#tideDayTable1'\n    ) as HTMLTableElement\n    const tideDayTable2 = document.querySelector(\n      '#tideDayTable2'\n    ) as HTMLTableElement\n    // const tide_img = document.getElementById('tide_img') as HTMLTableElement\n    // tide_img.removeEventListener('click')\n    ;(\n      document.querySelector('#tide_echart_div') as HTMLTableElement\n    ).style.display = 'block'\n\n    const list = ['潮时一', '潮时二', '潮时三', '潮时四']\n\n    let tideTimes1 = [null, null, null, null]\n    let tideHeights1 = [null, null, null, null]\n    let tideLowHighs1 = [null, null, null, null]\n\n    let tideTimes2 = [null, null, null, null]\n    let tideHeights2 = [null, null, null, null]\n    let tideLowHighs2 = [null, null, null, null]\n\n    tideDay1.textContent = CommUtils.dataFormat(this.leftDate, 'YYYY-MM-DD')\n    tideDay2.textContent = CommUtils.dataFormat(this.rightDate, 'YYYY-MM-DD')\n\n    for (let i = 0; i < 4; i++) {\n      const row1 = tideDayTable1.rows[i]\n      row1.cells[0].innerHTML = ''\n      row1.cells[1].innerHTML = ''\n      row1.cells[2].innerHTML = ''\n      row1.cells[3].innerHTML = ''\n\n      const row2 = tideDayTable2.rows[i]\n      row2.cells[0].innerHTML = ''\n      row2.cells[1].innerHTML = ''\n      row2.cells[2].innerHTML = ''\n      row2.cells[3].innerHTML = ''\n    }\n\n    const tideA = document.querySelectorAll('.tideA')\n    const tideA0 = tideA[0] as HTMLElement\n    const tideA1 = tideA[1] as HTMLElement\n    tideA0.style.display = 'block'\n    tideA1.style.display = 'block'\n\n    tideA0.addEventListener('click', () => {\n      this.rightDate = this.leftDate\n      this.leftDate = new Date(this.leftDate.getTime() - this.partTime)\n      this.setTidesInfoGuoWai(item)\n      const currentTime = Date.now()\n      const futureTime = currentTime + 6 * this.partTime\n\n      if (this.rightDate.getTime() <= futureTime) {\n        tideA1.style.display = 'block'\n      }\n      if (\n        this.leftDate.getTime() <=\n        new Date(ShipxyOptions.weather.tidesGuoWaiBeginDate).getTime()\n      ) {\n        tideA0.style.display = 'none'\n      }\n    })\n\n    tideA[1].addEventListener('click', () => {\n      this.leftDate = this.rightDate\n      this.rightDate = new Date(this.leftDate.getTime() + this.partTime)\n      this.setTidesInfoGuoWai(item)\n      const currentTime = Date.now()\n      const futureTime = currentTime + 6 * this.partTime\n\n      if (this.rightDate.getTime() >= futureTime) {\n        tideA1.style.display = 'none'\n      }\n      if (\n        this.leftDate.getTime() >=\n        new Date(ShipxyOptions.weather.tidesGuoWaiBeginDate).getTime()\n      ) {\n        tideA0.style.display = 'block'\n      }\n    })\n\n    const apiUrl = ShipxyOptions.weather.tidesInfoGuoWaiUrl\n      .replace('{k}', this._map.options.ak)\n      .replace('{0}', `${this.currentId}`)\n      .replace('{1}', this.leftTime)\n      .replace('{2}', this.rightTime)\n\n    fetch(apiUrl)\n      .then((response) => response.json())\n      .then((data) => {\n        if (data.status === 0) {\n          const parsedData = data.data\n          if (parsedData && parsedData.overview) {\n            const overviewData = parsedData.overview\n            if (overviewData.length > 0) {\n              tideTimes1 = [\n                overviewData[0].tide_time1,\n                overviewData[0].tide_time2,\n                overviewData[0].tide_time3,\n                overviewData[0].tide_time4,\n              ]\n              tideHeights1 = [\n                overviewData[0].tide_height1,\n                overviewData[0].tide_height2,\n                overviewData[0].tide_height3,\n                overviewData[0].tide_height4,\n              ]\n              tideLowHighs1 = [\n                overviewData[0].tide_lowhigh1,\n                overviewData[0].tide_lowhigh2,\n                overviewData[0].tide_lowhigh3,\n                overviewData[0].tide_lowhigh4,\n              ]\n\n              if (overviewData.length > 1) {\n                tideTimes2 = [\n                  overviewData[1].tide_time1,\n                  overviewData[1].tide_time2,\n                  overviewData[1].tide_time3,\n                  overviewData[1].tide_time4,\n                ]\n                tideHeights2 = [\n                  overviewData[1].tide_height1,\n                  overviewData[1].tide_height2,\n                  overviewData[1].tide_height3,\n                  overviewData[1].tide_height4,\n                ]\n                tideLowHighs2 = [\n                  overviewData[1].tide_lowhigh1,\n                  overviewData[1].tide_lowhigh2,\n                  overviewData[1].tide_lowhigh3,\n                  overviewData[1].tide_lowhigh4,\n                ]\n              }\n            }\n\n            for (let i = 0; i < 4; i++) {\n              if (tideHeights1[i]) {\n                const row1 = tideDayTable1.rows[i]\n                row1.cells[0].innerHTML = `${tideLowHighs1[i] || list[i]}:`\n                row1.cells[1].innerHTML = tideTimes1[i] || ''\n                row1.cells[2].innerHTML = '潮高' + ':'\n                row1.cells[3].innerHTML = `${tideHeights1[i]}m`\n              }\n\n              if (tideHeights2[i]) {\n                const row2 = tideDayTable2.rows[i]\n                row2.cells[0].innerHTML = `${tideLowHighs2[i] || list[i]}:`\n                row2.cells[1].innerHTML = tideTimes2[i] || ''\n                row2.cells[2].innerHTML = '潮高' + ':'\n                row2.cells[3].innerHTML = `${tideHeights2[i]}m`\n              }\n            }\n\n            if (parsedData.detail && parsedData.detail.length > 0) {\n              const detailData = parsedData.detail\n              for (let i = 0, len = detailData.length; i < len; i++) {\n                const detailItem = detailData[i]\n                if (detailItem) {\n                  for (let j = 0; j < 24; j++) {\n                    const pointData: any = {}\n                    pointData.name = j\n                    pointData.portid = detailItem.portid\n                    pointData.portname = item.name\n                    pointData.date = CommUtils.replaceAll(\n                      detailItem.date,\n                      '-',\n                      '/'\n                    )\n                    pointData.value = [\n                      `${pointData.date} ${j}:00:00`,\n                      detailItem[`h${j}`],\n                    ]\n                    this.setEchart(pointData)\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          console.error(data.message || 'Error fetching data')\n        }\n\n        tideLoadingDom.style.display = 'none'\n        tideContentDom.style.display = 'block'\n      })\n      .catch((error) => {\n        console.error(error)\n      })\n  }\n  formatTooltip(vals: TooltipFormatterContext[]): string {\n    const val = vals[0]\n    let HTML = `<b>${val.portname}</b><br/>`\n    HTML += `<div style=\"display: inline;\">\n              <div style=\"padding: 0; margin: 0; float: left;\">${CommUtils.dataFormat(\n                val.value[0],\n                'hh:mm'\n              )}</div>\n              <div style=\"padding: 0; margin: 0; margin-left: 12px; float: left;\">${\n                val.value[1]\n              }m</div>\n            </div>`\n    return HTML\n  }\n\n  setEchart(data: Array<{ value: [Date, number]; portname: string }>) {\n    // const echartInstance = echarts.init(\n    //   document.querySelector('#tide_echart_div'),\n    //   'macarons'\n    // )\n    // const options: echarts.EChartsOption = {\n    //   color: ['#2770d4'],\n    //   textStyle: {\n    //     color: '#999',\n    //   },\n    //   title: {\n    //     text: '',\n    //   },\n    //   tooltip: {\n    //     trigger: 'axis',\n    //     formatter: this.formatTooltip,\n    //     axisPointer: {\n    //       type: 'line',\n    //       animation: false,\n    //       lineStyle: {\n    //         color: '#19cebf',\n    //         width: 2,\n    //       },\n    //     },\n    //     backgroundColor: '#ffffffb3',\n    //     borderColor: '#4572A7',\n    //     borderWidth: 2,\n    //     position: (\n    //       _pos: any[],\n    //       _contentSize: any,\n    //       _offset: any,\n    //       _tooltipSize: any,\n    //       viewSize: { viewSize: number[] }\n    //     ): [number, number] => {\n    //       const offsetX = _pos[0] > viewSize.viewSize[0] / 2 ? -10 : 0\n    //       return [_pos[0] + offsetX, _pos[1]]\n    //     },\n    //     textStyle: {\n    //       color: '#333',\n    //       fontFamily: 'Arial',\n    //       fontSize: 13,\n    //     },\n    //     padding: [0, 5],\n    //   } as any,\n    //   xAxis: {\n    //     type: 'category',\n    //     splitLine: {\n    //       show: false,\n    //     },\n    //     axisLabel: {\n    //       formatter: (value: string | number | Date): string =>\n    //         CommUtils.dataFormat(new Date(value), 'h'),\n    //     },\n    //   },\n    //   yAxis: {\n    //     name: `'潮高(米)`, // 这里假设 $i18n 是全局国际化对象\n    //     type: 'value',\n    //     boundaryGap: [0, '100%'],\n    //     splitLine: {\n    //       show: true,\n    //       lineStyle: {\n    //         type: 'dashed',\n    //         color: ['#999'],\n    //         width: 1,\n    //       },\n    //     },\n    //     splitArea: {\n    //       show: false,\n    //       areaStyle: {\n    //         color: ['#ddd', '#fff'],\n    //       },\n    //     },\n    //     max: ({ max }: { max: number }): number => max,\n    //     offset: -5,\n    //   },\n    //   series: [\n    //     {\n    //       name: '',\n    //       type: 'line',\n    //       showSymbol: false,\n    //       hoverAnimation: true,\n    //       data,\n    //       areaStyle: {\n    //         color: '#76a7ea',\n    //       },\n    //       smooth: true,\n    //       lineStyle: {\n    //         width: 2,\n    //       },\n    //     },\n    //   ] as any,\n    // }\n    // echartInstance.setOption(options)\n  }\n}\n"],"names":["Tide","constructor","this","name","id","timezone","city","province","lat","lon","tidaldatum","tidetype","minviewzoom","opacity","offset","direction","from","cnname","enname","cncountry","encountry","nodeid","country","u","TideService","t","_Event","moveend","_drawTides","zoomend","layerMap","S","I","layerGroup","T","featureGroup","addTo","_map","_Tides","options","closePopupOnClick","addTides","y","weather","tidesGuoWaiUrl","replace","ak","H","status","data","l","o","n","entries","i","toString","datumn","h","isEmpty","push","c","Object","assign","off","on","remove","getZoom","getBounds","length","contains","latLng","_drawTide_guowai","close","m","Number","Math","abs","icon_base_url","icon_types","icon","marker","setIcon","iconUrl","iconSize","Y","latFormatter","lngFormatter","bindTooltip","className","interactive","getTooltip","_initLayout","_container","style","padding","border","addLayer","setTidesInfoGuoWai","document","querySelector","display","leftTime","dataFormat","leftDate","rightTime","rightDate","f","v","w","E","k","M","G","textContent","r","s","rows","cells","innerHTML","e","L","querySelectorAll","_","b","addEventListener","Date","getTime","partTime","now","tidesGuoWaiBeginDate","x","tidesInfoGuoWaiUrl","currentId","fetch","then","json","overview","tide_time1","tide_time2","tide_time3","tide_time4","tide_height1","tide_height2","tide_height3","tide_height4","tide_lowhigh1","tide_lowhigh2","tide_lowhigh3","tide_lowhigh4","a","d","detail","z","D","g","p","portid","portname","date","replaceAll","value","setEchart","catch","formatTooltip"],"mappings":"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"}