Lin Qilong 1 月之前
父节点
当前提交
293b21fe8c

+ 6 - 3
src/components/StationRightButtonGroup.vue

@@ -249,7 +249,8 @@ function handleWaterLevelChange() {
  * 台风切换
  * @param type
  */
-function handleTyphoonChange(type) {
+function handleTyphoonChange(type: any) {
+  Setting.clearAll()
   if (type === '实时台风') {
     currentTyphoonValue.value = type
     Operate.realTimeTyphoon()
@@ -321,6 +322,7 @@ watch(
 watch(
   () => underwaterState.value,
   value => {
+    Setting.clearAll()
     Layer.underWater(value)
     if (value) {
       legendStore.showLegend('水下地形')
@@ -333,6 +335,7 @@ watch(
 watch(
   () => radarState.value,
   value => {
+    Setting.clearAll()
     if (value === '无') {
       Operate.deleteRadar()
       legendStore.closeLegend()
@@ -410,8 +413,8 @@ watch(
       </template>
       <el-button-group>
         <el-button @click="appStore.changeCurrentView('太湖流域')"
-          >太湖流域</el-button
-        >
+          >太湖流域
+        </el-button>
         <el-button @click="appStore.changeCurrentView()">太湖</el-button>
         <!--        <el-button @click="appStore.changeCurrentView('夹浦')">夹浦</el-button>-->
         <el-button @click="appStore.changeCurrentView('Globe')">台风</el-button>

+ 1 - 1
src/components/Video/video.ts

@@ -116,7 +116,7 @@ export function closeVideo(videoNm = curIndexCode, authorization = token) {
   if (!videoNm) {
     return;
   }
-  debugger
+
   stopVideo(videoNm, authorization).then(res => {
     console.log(res);
   })

+ 1 - 1
src/layout/index.vue

@@ -144,7 +144,7 @@ window.addEventListener("message", (event) => {
         </div>
       </el-dialog>
 
-      <chat></chat>
+<!--      <chat></chat>-->
 
       <div v-if="typhoonStore.isTyphoon" class="typhoon-legend">
         <div class="typhoon-item">

+ 2 - 2
src/permission.ts

@@ -18,8 +18,8 @@ router.beforeEach((to, from, next) => {
       next();
     } else {
       // 否则全部重定向到登录页
-      window.location.href = 'http://10.8.11.123:8089/cas/login?service=http://10.8.11.98:9888/check'
-      // window.location.href = 'http://10.8.11.123:8089/cas/login?service=http://localhost/check'
+      // window.location.href = 'http://10.8.11.123:8089/cas/login?service=http://10.8.11.98:9888/check'
+      window.location.href = 'http://10.8.11.123:8089/cas/login?service=http://localhost/check'
     }
   }
 });

+ 0 - 1
src/utils/tdInstruction/layer.ts

@@ -41,7 +41,6 @@ export function underWater(show = true) {
 }
 
 export function taihuForecast(type = 'Windy', time: string, show = true) {
-  debugger
   if (type === 'Windy') {
     windyIndex++
     if (windyIndex % 5 !== 0) {

+ 1 - 2
src/utils/tdInstruction/operate.ts

@@ -207,7 +207,6 @@ export async function addTyphoonTrack(tfid: string) {
 
     if (data && data.length > 0) {
       const res: any = slopeCalculation(data);
-      debugger
       taihuUI(res.direction, res.slope, res.max, res.min);
     }
 
@@ -319,7 +318,7 @@ export function strategyMap(direction: string, slope: string, show = true) {
     "data": {
       "Direction": direction,
       "Slope": slope,
-      "Diaplay": show ? 'true' : 'false'
+      "Display": show ? 'true' : 'false'
     }
   }
   Bus.emit('emitUIInteraction', descriptor);

+ 196 - 174
src/utils/tdInstruction/point.ts

@@ -1,11 +1,11 @@
-import Bus from "@/utils/bus";
+import Bus from '@/utils/bus'
 
 const exitPoints = new Set()
 
 let exitType: any = {
-  "堤防": [],
-  "视频点": [],
-  "水文站": [],
+  堤防: [],
+  视频点: [],
+  水文站: [],
 }
 
 /**
@@ -13,7 +13,7 @@ let exitType: any = {
  * @param  data
  * @param  type 样式
  */
-export function addPoint(data: any, type = "堤防") {
+export function addPoint(data: any, type = '堤防') {
   let hasPoints = data.filter((p: any) => exitPoints.has(p.id))
   updatePoint(hasPoints, type)
 
@@ -23,25 +23,25 @@ export function addPoint(data: any, type = "堤防") {
   }
 
   let descriptor = {
-    "command": "AddCustomPOI",
-    "data": {
-      "obj": {
-        "coord_type": 0,
-        "cad_mapkey": "",
-        "coord_z": 0,
-        "coord_z_type": 0,
-        "always_show_label": false,
-        "show_label_range": "0,6000",
-        "sort_order": false,
-        "animation_type": "bounce",
-        "duration_time": 0.7,
-        "state": "state_1"
+    command: 'AddCustomPOI',
+    data: {
+      obj: {
+        coord_type: 0,
+        cad_mapkey: '',
+        coord_z: 0,
+        coord_z_type: 0,
+        always_show_label: false,
+        show_label_range: '0,6000',
+        sort_order: false,
+        animation_type: 'bounce',
+        duration_time: 0.7,
+        state: 'state_1',
       },
-      "subobj": createPoints.map((p: any) => createPointObj(p, type))
-    }
-  };
+      subobj: createPoints.map((p: any) => createPointObj(p, type)),
+    },
+  }
   Bus.emit('emitUIInteraction', descriptor)
-  console.log("-- 添加点", JSON.stringify(descriptor));
+  console.log('-- 添加点', JSON.stringify(descriptor))
 
   data.forEach((p: any) => {
     exitPoints.add(p.id)
@@ -60,226 +60,248 @@ export function addPoint(data: any, type = "堤防") {
  */
 export function deletePoint(type: string, data: any) {
   let descriptor = {
-    "command": "DelCustomPOI",
-    "data": {}
-  };
+    command: 'DelCustomPOI',
+    data: {},
+  }
 
-  if (type === "id") {
+  if (type === 'id') {
     descriptor.data = {
-      "id": data,
-      "all": "false"
+      id: data,
+      all: 'false',
     }
     exitPoints.delete(data)
   } else if (type === 'type') {
     descriptor.data = {
-      "id": data,
-      "all": "false"
+      id: data,
+      all: 'false',
     }
     exitType[data].forEach((id: any) => {
       exitPoints.delete(id)
     })
     exitType[data] = []
-  } else if (type === "all") {
+  } else if (type === 'all') {
     descriptor.data = {
-      "all": "true"
+      all: 'true',
     }
     exitPoints.clear()
     exitType = {
-      "堤防": [],
-      "视频点": [],
-      "水文站": [],
+      堤防: [],
+      视频点: [],
+      水文站: [],
     }
   }
 
   Bus.emit('emitUIInteraction', descriptor)
-  console.log("-- 删除点", JSON.stringify(descriptor));
+  console.log('-- 删除点', JSON.stringify(descriptor))
 }
 
-function createPointObj(point: any, type = "堤防") {
+function createPointObj(point: any, type = '堤防') {
   switch (type) {
     case '视频点':
       return {
-        "id": point.id ? point.id : point.name,
-        "type": point.type,
-        "coord": `${point.x}, ${point.y}`,
-        "label": {
-          "bg_size": "70,20",
-          "bg_offset": "-35,-60",
-          "content": [
+        id: point.id ? point.id : point.name,
+        type: point.type,
+        coord: `${point.x}, ${point.y}`,
+        label: {
+          bg_size: '70,20',
+          bg_offset: '-35,-60',
+          content: [
             {
-              "text": [
-                point.name,
-                "fff",
-                "12"
-              ],
-              "text_offset": "0,0",
-              "text_boxwidth": 10,
-              "text_centered": true,
-              "scroll_speed": 1
-            }
-          ]
+              text: [point.name, 'fff', '12'],
+              text_offset: '0,0',
+              text_boxwidth: 10,
+              text_centered: true,
+              scroll_speed: 1,
+            },
+          ],
         },
-        "marker": {
-          "size": "40,40",
-          "images": [
+        marker: {
+          size: '40,40',
+          images: [
             {
-              "define_state": "state_1",
-              "normal_url": "TYPE3Blue.png",
-              "activate_url": "TYPE3Blue.png"
-            }
-          ]
-        }
+              define_state: 'state_1',
+              normal_url: 'TYPE3Blue.png',
+              activate_url: 'TYPE3Blue.png',
+            },
+          ],
+        },
       }
     case '水文站':
+      let image = 'TYPE4Blue.png'
+      if (point.status === 'max') {
+        image = 'TYPE4Red.png'
+      }
+      if (point.status === 'min') {
+        image = 'TYPE4Green.png'
+      }
       return {
-        "id": point.id ? point.id : point.name,
-        "type": point.type,
-        "coord": `${point.x}, ${point.y}`,
-        "label": {
-          "bg_size": "120,50",
-          "bg_offset": "-60,-70",
-          "content": [
+        id: point.id ? point.id : point.name,
+        type: point.type,
+        coord: `${point.x}, ${point.y}`,
+        label: {
+          bg_size: '120,50',
+          bg_offset: '-60,-70',
+          content: [
             {
-              "text": [
-                point.name,
-                "fff",
-                "12"
-              ],
-              "text_offset": "0,0",
-              "text_boxwidth": 10,
-              "text_centered": true,
-              "scroll_speed": 1
-            }
-          ]
+              text: [point.name, 'fff', '12'],
+              text_offset: '0,0',
+              text_boxwidth: 10,
+              text_centered: true,
+              scroll_speed: 1,
+            },
+          ],
         },
-        "marker": {
-          "size": "20,20",
-          "images": [
+        marker: {
+          size: '20,20',
+          images: [
             {
-              "define_state": "state_1",
-              "normal_url": "TYPE4Blue.png",
-              "activate_url": "TYPE4Blue.png"
-            }
-          ]
-        }
+              define_state: 'state_1',
+              normal_url: image,
+              activate_url: image,
+            },
+          ],
+        },
       }
     case '堤防':
     default:
       return {
-        "id": point.id ? point.id : point.name,
-        "type": point.type,
-        "coord": `${point.x}, ${point.y}`,
-        "label": {
-          "bg_size": "60,20",
-          "bg_offset": "-25,-70",
-          "content": [
+        id: point.id ? point.id : point.name,
+        type: point.type,
+        coord: `${point.x}, ${point.y}`,
+        label: {
+          bg_size: '60,20',
+          bg_offset: '-25,-70',
+          content: [
             {
-              "text": [
-                point.name,
-                "fff",
-                "12"
-              ],
-              "text_offset": "0,0",
-              "text_boxwidth": 10,
-              "text_centered": true,
-              "scroll_speed": 1
-            }
-          ]
+              text: [point.name, 'fff', '12'],
+              text_offset: '0,0',
+              text_boxwidth: 10,
+              text_centered: true,
+              scroll_speed: 1,
+            },
+          ],
         },
-        "marker": {
-          "size": "100,100",
-          "images": [
+        marker: {
+          size: '100,100',
+          images: [
             {
-              "define_state": "state_1",
-              "normal_url": "TYPE1Blue.png",
-              "activate_url": "TYPE1Blue.png"
-            }
-          ]
-        }
+              define_state: 'state_1',
+              normal_url: 'TYPE1Blue.png',
+              activate_url: 'TYPE1Blue.png',
+            },
+          ],
+        },
       }
   }
 }
 
-function updatePointObj(point: any, type = "堤防") {
+function updatePointObj(point: any, type = '堤防') {
   switch (type) {
     case '视频点':
       return {
-        "id": point.id ? point.id : point.name,
-        "label": {
-          "bg_size": "70,20",
-          "bg_offset": "-35,-60",
-          "content": [
+        id: point.id ? point.id : point.name,
+        label: {
+          bg_size: '70,20',
+          bg_offset: '-35,-60',
+          content: [
             {
-              "text": [
-                point.name,
-                "fff",
-                "12"
-              ],
-              "text_offset": "0,0",
-              "text_boxwidth": 10,
-              "text_centered": true,
-              "scroll_speed": 1
-            }
-          ]
+              text: [point.name, 'fff', '12'],
+              text_offset: '0,0',
+              text_boxwidth: 10,
+              text_centered: true,
+              scroll_speed: 1,
+            },
+          ],
         },
       }
     case '水文站':
       return {
-        "id": point.id ? point.id : point.name,
-        "label": {
-          "bg_size": "120,50",
-          "bg_offset": "-60,-70",
-          "content": [
+        id: point.id ? point.id : point.name,
+        label: {
+          bg_size: '120,50',
+          bg_offset: '-60,-70',
+          content: [
             {
-              "text": [
-                point.name,
-                "fff",
-                "12"
-              ],
-              "text_offset": "0,0",
-              "text_boxwidth": 10,
-              "text_centered": true,
-              "scroll_speed": 1
-            }
-          ]
+              text: [point.name, 'fff', '12'],
+              text_offset: '0,0',
+              text_boxwidth: 10,
+              text_centered: true,
+              scroll_speed: 1,
+            },
+          ],
         },
       }
     case '堤防':
     default:
       return {
-        "id": point.id ? point.id : point.name,
-        "label": {
-          "bg_size": "60,20",
-          "bg_offset": "-25,-70",
-          "content": [
+        id: point.id ? point.id : point.name,
+        label: {
+          bg_size: '60,20',
+          bg_offset: '-25,-70',
+          content: [
             {
-              "text": [
-                point.name,
-                "fff",
-                "12"
-              ],
-              "text_offset": "0,0",
-              "text_boxwidth": 10,
-              "text_centered": true,
-              "scroll_speed": 1
-            }
-          ]
+              text: [point.name, 'fff', '12'],
+              text_offset: '0,0',
+              text_boxwidth: 10,
+              text_centered: true,
+              scroll_speed: 1,
+            },
+          ],
         },
       }
   }
 }
 
-function updatePoint(data: any, type = "堤防") {
+function updatePoint(data: any, type = '堤防') {
   if (!data || data.length === 0) {
     return
   }
 
   let descriptor = {
-    "command": "UpdateCustomPOILabel",
-    "data": {
-      "subobj": data.map((p: any) => updatePointObj(p, type))
-    }
-  };
+    command: 'UpdateCustomPOILabel',
+    data: {
+      subobj: data.map((p: any) => updatePointObj(p, type)),
+    },
+  }
+  Bus.emit('emitUIInteraction', descriptor)
+  console.log('-- 更新点', JSON.stringify(descriptor))
+
+  // 更新点样式
+  updatePointStyle(data)
+}
+
+function updatePointStyle(data: any) {
+  if (!data || data.length === 0) {
+    return
+  }
+
+  let descriptor = {
+    command: 'UpdateCustomPOIMarker',
+    data: {
+      subobj: data.map((p: any) => {
+        let image = 'TYPE4Blue.png'
+        if (p.status === 'max') {
+          image = 'TYPE4Red.png'
+        }
+        if (p.status === 'min') {
+          image = 'TYPE4Green.png'
+        }
+        return {
+          id: p.id ? p.id : p.name,
+          marker: {
+            size: '20,20',
+            images: [
+              {
+                define_state: 'state_1',
+                normal_url: image,
+                activate_url: image,
+              },
+            ],
+          },
+        }
+      }),
+    },
+  }
   Bus.emit('emitUIInteraction', descriptor)
-  console.log("-- 更新点", JSON.stringify(descriptor));
+  console.log('-- 更新点样式', JSON.stringify(descriptor))
 }

+ 40 - 33
src/utils/tdInstruction/setting.ts

@@ -1,23 +1,23 @@
-import Bus from "@/utils/bus";
+import Bus from '@/utils/bus'
 
 /**
  * 设置分辨率
  * @param {x, y} d
  */
 export function setResolution(d: any) {
-  let data = "null";
+  let data = 'null'
   if (d) {
-    data = `${d.x}x${d.y}`;
+    data = `${d.x}x${d.y}`
   }
 
   let descriptor = {
-    command: "GetSize",
+    command: 'GetSize',
     data: {
       Data: data,
-    }
-  };
+    },
+  }
   Bus.emit('emitUIInteraction', descriptor)
-  console.log("-- 设置分辨率", JSON.stringify(descriptor));
+  console.log('-- 设置分辨率', JSON.stringify(descriptor))
 }
 
 /**
@@ -26,29 +26,29 @@ export function setResolution(d: any) {
  */
 export function setTime(time: string) {
   let descriptor = {
-    "command": "SetTime",
-    "data": {
-      "time": time
-    }
+    command: 'SetTime',
+    data: {
+      time: time,
+    },
   }
   Bus.emit('emitUIInteraction', descriptor)
-  console.log("-- 设置时间", JSON.stringify(descriptor));
+  console.log('-- 设置时间', JSON.stringify(descriptor))
 }
 
 const weatherMap = new Map()
-weatherMap.set("晴", "Sunny")
-weatherMap.set("多云", "Cloudy")
-weatherMap.set("部分多云", "PartlyCloudy")
-weatherMap.set("阴天", "Overcast")
-weatherMap.set("小雨", "LightRain")
-weatherMap.set("中雨", "ModerateRain")
-weatherMap.set("大雨", "HeavyRain")
-weatherMap.set("小雪", "LightSnow")
-weatherMap.set("中雪", "ModerateSnow")
-weatherMap.set("大雪", "HeavySnow")
-weatherMap.set("大雾", "Foggy")
-weatherMap.set("沙尘", "Sand")
-weatherMap.set("霾", "Haze")
+weatherMap.set('晴', 'Sunny')
+weatherMap.set('多云', 'Cloudy')
+weatherMap.set('部分多云', 'PartlyCloudy')
+weatherMap.set('阴天', 'Overcast')
+weatherMap.set('小雨', 'LightRain')
+weatherMap.set('中雨', 'ModerateRain')
+weatherMap.set('大雨', 'HeavyRain')
+weatherMap.set('小雪', 'LightSnow')
+weatherMap.set('中雪', 'ModerateSnow')
+weatherMap.set('大雪', 'HeavySnow')
+weatherMap.set('大雾', 'Foggy')
+weatherMap.set('沙尘', 'Sand')
+weatherMap.set('霾', 'Haze')
 
 /**
  * 设置天气
@@ -56,19 +56,26 @@ weatherMap.set("霾", "Haze")
  * 晴、多云、部分多云、阴天、小雨、中雨、大雨、小雪、中雪、大雪、大雾、沙尘、霾
  * @param weather 天气
  */
-export function setWeather(weather = "晴") {
-  let wr = "Sunny"
+export function setWeather(weather = '晴') {
+  let wr = 'Sunny'
   if (weatherMap.has(weather)) {
-    wr = weatherMap.get(weather) || "Sunny"
+    wr = weatherMap.get(weather) || 'Sunny'
   }
 
   let descriptor = {
-    "command": "SetWeather",
-    "data": {
-      "weather": wr
-    }
+    command: 'SetWeather',
+    data: {
+      weather: wr,
+    },
   }
   Bus.emit('emitUIInteraction', descriptor)
-  console.log("-- 设置天气", JSON.stringify(descriptor));
+  console.log('-- 设置天气', JSON.stringify(descriptor))
 }
 
+export function clearAll() {
+  let descriptor = {
+    command: 'Clear',
+  }
+  Bus.emit('emitUIInteraction', descriptor)
+  console.log('-- 清空所有', JSON.stringify(descriptor))
+}

+ 115 - 33
src/views/Yuyan.vue

@@ -1,18 +1,18 @@
 <script lang="ts" setup>
-import {onMounted, onUnmounted, ref} from 'vue'
+import { onMounted, onUnmounted, ref } from 'vue'
 import RightFrame from '@/components/RightFrame.vue'
 import Card01 from '@/components/card/Card01.vue'
 import StripeTable from '@/components/StripeTable.vue'
-import {Operate, Point, View} from "@/utils/tdInstruction";
-import StationRightButtonGroup from "@/components/StationRightButtonGroup.vue";
-import {useBasinStore} from "@/stores/basin";
-import {getYuyanDataList, getYuyanFanganList} from "@/api/yuyan";
-import {convertDate, removeDuplicates} from "@/utils/date";
-import {useTimeScrollbarStore} from "@/stores/timeScrollbar";
-import {extractList} from "@/utils/list";
-import {formatd} from "@/utils/ruoyi";
-import {stationList} from "@/assets/js/station"
-import {slopeCalculation} from "@/utils/slopeCalculation";
+import { Operate, Point, View } from '@/utils/tdInstruction'
+import StationRightButtonGroup from '@/components/StationRightButtonGroup.vue'
+import { useBasinStore } from '@/stores/basin'
+import { getYuyanDataList, getYuyanFanganList } from '@/api/yuyan'
+import { convertDate, removeDuplicates } from '@/utils/date'
+import { useTimeScrollbarStore } from '@/stores/timeScrollbar'
+import { extractList } from '@/utils/list'
+import { formatd } from '@/utils/ruoyi'
+import { stationList } from '@/assets/js/station'
+import { slopeCalculation } from '@/utils/slopeCalculation'
 
 const timeScrollbarStore = useTimeScrollbarStore()
 const basinStore = useBasinStore()
@@ -24,12 +24,27 @@ const tableColumns = [
   //   showOverflowTooltip: true,
   //   convertFn: (data) => data ? data.trim() : ''
   // },
-  {label: '方案', prop: 'DD_NAME', showOverflowTooltip: true}
+  { label: '方案', prop: 'DD_NAME', showOverflowTooltip: true },
 ]
 const tableData = ref([])
+
+const dataTableColumns = [
+  { label: '测站', prop: 'label' },
+  {
+    label: '预报水位',
+    prop: 'value',
+    convertFn: data => {
+      return data ? data.trim() : ''
+    },
+  },
+]
+const dataTableData = ref([])
+const dataTableMaxData = ref(null)
+const dataTableMinData = ref(null)
+
 const yuyanData = ref([])
 const startTime = new Date()
-startTime.setDate(startTime.getDate() - 3)
+startTime.setDate(startTime.getDate() - 90)
 const value2 = ref([startTime, new Date()])
 const shortcuts = [
   {
@@ -69,7 +84,7 @@ async function getMonitoringPoint() {
     formatd(value2.value[0], 'yyyy-MM-dd hh:mm:ss'),
     formatd(value2.value[1], 'yyyy-MM-dd hh:mm:ss')
   ).then(res => {
-    tableData.value = res.data //.filter(item => item.DD_DISTRIBY === '55')
+    tableData.value = res.data.filter(item => item.DD_DISTRIBY === '55')
   })
 }
 
@@ -81,7 +96,7 @@ function handleCurrentChange(row) {
     yuyanData.value = res.data.map(item => {
       return {
         ...item,
-        YMDHM: convertDate(item.YMDHM)
+        YMDHM: convertDate(item.YMDHM),
       }
     })
 
@@ -94,9 +109,9 @@ function handleCurrentChange(row) {
       timeObj[key] = {
         style: {
           color: '#00c7e3',
-          'text-shadow': '0 0 4px #32003C'
+          'text-shadow': '0 0 4px #32003C',
         },
-        label: formatd(timeObj[key], 'yyyy年MM月dd日hh时')
+        label: formatd(timeObj[key], 'yyyy年MM月dd日hh时'),
       }
     }
     timeScrollbarStore.setMarks(timeObj)
@@ -107,7 +122,23 @@ function handleCurrentChange(row) {
         return 0
       }
 
-      const list = yuyanData.value.filter(y => y.YMDHM.getTime() === date.getTime())
+      const list = yuyanData.value.filter(
+        y => y.YMDHM.getTime() === date.getTime(),
+      )
+      dataTableData.value = list
+        .map(d => {
+          let station = stationList.find(s => s.id === d.STCD)
+          return {
+            stcd: d.STCD,
+            label: station?.name,
+            value: d.DATA,
+          }
+        })
+        .sort((a, b) => b.value - a.value)
+      dataTableMaxData.value = dataTableData.value[0]
+      dataTableMinData.value =
+        dataTableData.value[dataTableData.value.length - 1]
+
       const data = list.map(d => {
         let station = stationList.find(s => s.id === d.STCD)
 
@@ -118,22 +149,63 @@ function handleCurrentChange(row) {
         return {
           id: d.STCD,
           name: `${station.name}`,
-          value: `${(d.DATA).toFixed(2)}`,
-          type: "水文站",
+          value: `${d.DATA.toFixed(2)}`,
+          type: '水文站',
           x: station.lgtd,
-          y: station.lttd
+          y: station.lttd,
         }
       })
 
-      const res = slopeCalculation(data);
-      Operate.strategyMap(res.direction, res.slope);
+      const res = slopeCalculation(data)
+      if (Number(res.slope) === 0) {
+        res.direction = '0'
+      }
+      Operate.strategyMap(res.direction, res.slope)
 
-      Point.addPoint(data.map(a => {
-        return {'id': a.id, 'name': `${a.value}\n${a.name}`, 'type': a.type, 'x': a.x, 'y': a.y}
-      }), '水文站')
+      let maxName = null
+      let minName = null
+
+      if (res.max.split(',')[1] !== res.min.split(',')[1]) {
+        maxName = res.max.split(',')[0]
+        minName = res.min.split(',')[0]
+      }
+
+      Point.addPoint(
+        data.map(a => {
+          if (maxName && a.name === maxName) {
+            return {
+              id: a.id,
+              name: `${a.value}\n${a.name}`,
+              type: a.type,
+              x: a.x,
+              y: a.y,
+              status: 'max',
+            }
+          }
+
+          if (minName && a.name === minName) {
+            return {
+              id: a.id,
+              name: `${a.value}\n${a.name}`,
+              type: a.type,
+              x: a.x,
+              y: a.y,
+              status: 'min',
+            }
+          }
+
+          return {
+            id: a.id,
+            name: `${a.value}\n${a.name}`,
+            type: a.type,
+            x: a.x,
+            y: a.y,
+          }
+        }),
+        '水文站',
+      )
       return formatd(date, 'yyyy年MM月dd日hh时')
     }
-
   })
 }
 
@@ -145,7 +217,7 @@ onMounted(() => {
 })
 
 onUnmounted(() => {
-  Operate.strategyMap("", "", false)
+  Operate.strategyMap('', '', false)
   timeScrollbarStore.close()
   basinStore.setLabelState2('水文站', false)
 })
@@ -153,23 +225,33 @@ onUnmounted(() => {
 <template>
   <right-frame>
     <template #leftModule>
-      <card01 style="height: 40%;" title="预报方案">
+      <card01 style="height: 30%" title="预报方案">
         <template #sec_header>
-          <div style="float: right;margin-right: 60px;">
+          <div style="float: right; margin-right: 60px">
             <el-date-picker
               v-model="value2"
               :shortcuts="shortcuts"
               end-placeholder="结束时间"
               range-separator="至"
               start-placeholder="开始时间"
-              style="width: 220px;"
+              style="width: 220px"
               type="datetimerange"
               @change="getMonitoringPoint"
             />
           </div>
         </template>
-        <stripe-table :columns="tableColumns" :data="tableData" :show-header="false"
-                      @row-click="handleCurrentChange"></stripe-table>
+        <stripe-table
+          :columns="tableColumns"
+          :data="tableData"
+          :show-header="false"
+          @row-click="handleCurrentChange"
+        ></stripe-table>
+      </card01>
+      <card01 style="height: 65%" title="预报数据">
+        <stripe-table
+          :columns="dataTableColumns"
+          :data="dataTableData"
+        ></stripe-table>
       </card01>
     </template>
     <template #btnGroup>