hum 1 год назад
Родитель
Сommit
50d187ab8a

+ 8 - 0
ruoyi-ui/src/api/analysis/achievement.js

@@ -79,6 +79,14 @@ export function taskAction(siteId, action) {
   })
 }
 
+export function manualMeasure(data) {
+  return request({
+    url: '/directive/manualMeasure',
+    method: 'post',
+    data,
+  })
+}
+
 export function getWaterLevel(siteId) {
   return request({
     url: '/reportData/getWaterLevel',

+ 16 - 0
ruoyi-ui/src/views/site/plain-point/chart-list.vue

@@ -112,6 +112,7 @@ export default {
           containLabel: true
         },
         tooltip: {
+          show: false,
           trigger: 'axis',
           axisPointer: {
             type: 'cross'
@@ -159,6 +160,21 @@ export default {
           },
         }]
       };
+      if (plain.waterlevel) {
+        options.series.push({
+          data: [[Math.min(...xAxisData), plain.waterlevel],[Math.max(...xAxisData), plain.waterlevel]],
+          type: 'line',
+          symbol: 'none',
+          z: 0,
+          lineStyle: {
+            width: 0,
+          },
+          areaStyle: {
+            opacity: 1,
+            color: '#a5cdf7',
+          }
+        })
+      }
       list.forEach((plain, index) => {
         const themes = [
           '#2ec7c9',

+ 15 - 0
ruoyi-ui/src/views/site/plain-point/chart.vue

@@ -172,6 +172,21 @@ export default {
           },
         }]
       };
+      if (plain.waterlevel) {
+        options.series.push({
+          data: [[Math.min(...xAxisData), plain.waterlevel],[Math.max(...xAxisData), plain.waterlevel]],
+          type: 'line',
+          symbol: 'none',
+          z: 0,
+          lineStyle: {
+            width: 0,
+          },
+          areaStyle: {
+            opacity: 1,
+            color: '#a5cdf7',
+          }
+        })
+      }
       if (wlevel > wlevelmin && wlevel < wlevelmax) {
         const points = seriesData.reduce((prev, [x, y]) => {
           if (y < wlevel) {

+ 15 - 0
ruoyi-ui/src/views/site/site/index.vue

@@ -101,6 +101,12 @@
               icon="el-icon-setting"
               @click="handleConfig(scope.row)"
             >参数设置</el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-place"
+              @click="handleManualMeasure(scope.row)"
+            >手动加测</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -112,14 +118,20 @@
         :limit.sync="queryParams.size"
         @pagination="getList"
       />
+
+      <Manual ref="manual" />
     </div>
   </div>
 </template>
 
 <script>
 import { listSite } from "@/api/site/site";
+import Manual from './manual';
 
 export default {
+  components: {
+    Manual,
+  },
   data() {
     return {
       queryParams: {
@@ -172,6 +184,9 @@ export default {
     handleConfig(site) {
       this.$router.push(`/site/site/config/${site.siteId}`);
     },
+    handleManualMeasure(site) {
+      this.$refs.manual.open(site);
+    },
   }
 }
 </script>

+ 130 - 0
ruoyi-ui/src/views/site/site/manual.vue

@@ -0,0 +1,130 @@
+<template>
+  <el-dialog title="手动加测" width="80%" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
+    <el-radio-group v-model="plain.type" @change="typeHandler">
+      <el-radio :label="1">根据设置垂线测流</el-radio>
+      <el-radio :label="2">指定临时垂线测流</el-radio>
+    </el-radio-group>
+    <div style="margin-top: 10px">
+      <ChartList v-if="plain.type===1" :plain="plain" />
+      <Chart v-if="plain.type===2" :plain="plain" @addPoint="addPoint" />
+    </div>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible = false">取 消</el-button>
+      <el-button type="primary" @click="submit">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import {getSiteSection, listPlainPoint} from "@/api/site/berthing";
+import {getConfig} from "@/api/site/site";
+import {getWaterLevel, manualMeasure} from "@/api/analysis/achievement";
+import ChartList from '@/views/site/plain-point/chart-list';
+import Chart from '@/views/site/plain-point/chart';
+
+export default {
+  components: {
+    ChartList,
+    Chart,
+  },
+  data() {
+    return {
+      loading: true,
+      dialogFormVisible: false,
+      plain: {
+        type: 1,
+        wlevelmax: 0,
+        wlevelmin: 0,
+        waterlevel: 0,
+        wlevel: 0,
+        sections: [],
+        list: [],
+        positions: [],
+      },
+      site: {},
+    }
+  },
+  methods: {
+    open(site) {
+      this.site = site;
+      this.dialogFormVisible = true;
+      this.getList();
+      this.loadConfig();
+      this.loadSection();
+      this.loadWaterLevel();
+    },
+    getList() {
+      this.loading = true;
+      listPlainPoint({ siteId: this.site.siteId, page: 1, size: 10000 }).then(response => {
+          this.plain.list = response.data.records;
+          this.loading = false;
+        }
+      );
+    },
+    loadConfig() {
+      getConfig(this.site.siteId).then((res) => {
+        const { wlevelmax, wlevelmin } = res.data || {};
+        this.plain.wlevelmax = wlevelmax;
+        this.plain.wlevelmin = wlevelmin;
+      })
+    },
+    loadSection() {
+      getSiteSection(this.site.siteId).then((res) => {
+        const { positions } = res.data || {};
+        this.plain.sections = JSON.parse(positions) || [];
+      })
+    },
+    loadWaterLevel() {
+      getWaterLevel(this.site.siteId).then((res) => {
+        const { waterlevel } = res.data || {};
+        this.plain.waterlevel = waterlevel;
+      })
+    },
+    typeHandler() {
+      if (this.plain.type === 1) {
+        this.plain.wlevel = 0;
+      } else {
+        this.plain.wlevel = this.plain.waterlevel || (this.plain.wlevelmin + this.plain.wlevelmax) / 2;
+        this.plain.positions = [];
+      }
+    },
+    addPoint(point) {
+      if (this.plain.positions.includes(point)) {
+        const positions = [...this.plain.positions];
+        const index = positions.indexOf(point);
+        positions.splice(index, 1);
+        this.plain.positions = positions;
+        return;
+      }
+      const positions = [...this.plain.positions, point];
+      positions.sort((a, b) => a - b);
+      this.plain.positions = positions;
+    },
+    submit() {
+      const data = {
+        type: this.plain.type,
+        siteId: this.site.siteId,
+      }
+      if (this.plain.type === 1) {
+        if (this.plain.list.length === 0) {
+          return this.$message.error("请先设置停泊点");
+        }
+      }
+      if (this.plain.type === 2) {
+        if (this.plain.positions.length === 0) {
+          return this.$message.error("请添加停泊点");
+        }
+        data.positions = this.plain.sections.filter((s) => this.plain.positions.includes(s.x));
+      }
+      manualMeasure(data).then(() => {
+        this.$message.success("加测指令下发成功");
+        this.dialogFormVisible = false;
+      });
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>