ZIneen 2 years ago
parent
commit
3037ba8fce

+ 16 - 0
src/api/common/index.ts

@@ -150,6 +150,22 @@ export const fetchDictionary = (codeKey: string = '0101') =>
     params: { ulevel: 2, codeKey, size: 9999 }
   })
 
+  // 算法种类
+  export const fetchInferDictionary = (codeKey: string = 'ALGORITHM_NAME') =>
+  axios.request<IResult<IOriginalDictionary[]>>({
+    url: '/base/code/list',
+    method: 'get',
+    params: { ulevel: 2, codeKey, size: 9999 }
+  })
+
+  // 报警等级种类
+  export const fetchWarnLevelDictionary = (codeKey: string = 'WARN_LEVEL') =>
+  axios.request<IResult<IOriginalDictionary[]>>({
+    url: '/base/code/list',
+    method: 'get',
+    params: { ulevel: 2, codeKey, size: 9999 }
+  })
+
 export const fetchBaseStandards = () =>
   axios.request<IResult<IBaseStandard[]>>({ url: uris.standard.list, method: 'get' })
 

+ 40 - 0
src/api/quexianAnalys.ts

@@ -0,0 +1,40 @@
+import request from '@/utils/request'
+import qs from 'qs'
+/**
+  * 说明:
+  * getdelete传值用params,
+  * post和put传值用data
+  */
+
+// 缺陷分析请求 /lzd-analyze/historyAnalyseByType
+export function quexianAnalysis(params) {
+  return request({
+    url: '/lzd-analyze/historyAnalyseByType',
+    method: 'get',
+    params
+  })
+}
+
+// 历史数据根据缺陷类型清除数据
+export function clearAnalyseByType(params) {
+    return request({
+      url: '/survey/defectinfo/clearAnalyseByType',
+      method: 'get',
+      params
+    })
+  }
+
+  // 报告上传
+export function analysEranLevel(data) {
+  return request({
+      url:'/lzd-analyze/analyseranlevel',
+      method: 'POST',
+      data
+  })
+}
+
+export default {
+    quexianAnalysis,
+    clearAnalyseByType,
+    analysEranLevel
+}

+ 20 - 20
src/views/spectrum/dynamicMonitor/realTimeMonitor/widget.vue

@@ -11,14 +11,14 @@
             <el-option v-for="(item,index) in siteOption" :key="index" :label="item.siteName" :value="item.id"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="站点状态:">
+        <!-- <el-form-item label="站点状态:">
           <el-radio-group v-model="form.siteState">
             <el-radio :label="null">全部</el-radio>
             <el-radio :label="1">正常</el-radio>
             <el-radio :label="0">停用</el-radio>
             <el-radio :label="2">作废</el-radio>
           </el-radio-group>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item>
           <el-button type="primary" @click="query()">查询</el-button>
           <el-button type="primary" @click="reset()">重置</el-button>
@@ -39,42 +39,42 @@
             <el-button type="text" @click="openCurve(row)" style="padding:0">监测曲线</el-button>
           </template>
         </el-table-column>
-        <el-table-column prop="siteName" label="监测点名称" show-overflow-tooltip width="150" align="center"></el-table-column>
-        <el-table-column prop="siteState" label="站点状态" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="siteName" label="监测点名称" show-overflow-tooltip width="200" align="center"></el-table-column>
+        <!-- <el-table-column prop="siteState" label="站点状态" show-overflow-tooltip width="150" align="center">
           <template slot-scope="{ row }">{{ ['正常', '报警', '离线', '维护中'][row.siteState - 1] }}</template>
-        </el-table-column>
-        <el-table-column label="距离当前时间间隔(分钟)" show-overflow-tooltip width="180" align="center">
+        </el-table-column> -->
+        <el-table-column prop="collectionDate" label="最近一次数据采集时间" show-overflow-tooltip width="180" align="center"></el-table-column>
+        <el-table-column label="上传间隔(分钟)" show-overflow-tooltip width="120" align="center">
           <template slot-scope="{ row }">{{ getIntervalMinutes(row.collectionDate) }}</template>
         </el-table-column>
-        <el-table-column prop="collectionDate" label="最近一次数据采集时间" show-overflow-tooltip width="180" align="center"></el-table-column>
-        <el-table-column prop="liquid" label="液位(m)" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="liquid" label="液位(m)" show-overflow-tooltip width="150" align="center" sortable>
           <template slot-scope="{ row }">{{ row.liquid ? row.liquid : '/' }}</template>
         </el-table-column>
-        <el-table-column prop="temperature" label="温度(℃)" show-overflow-tooltip width="150" align="center">
-          <template slot-scope="{ row }">{{ row.temperature ? row.temperature : '/' }}</template>
+        <el-table-column prop="cod" label="化学需氧量(mg/L)" show-overflow-tooltip width="170" align="center" sortable>
+          <template slot-scope="{ row }">{{ row.cod ? row.cod : '/' }}</template>
         </el-table-column>
-        <el-table-column prop="turb" label="浊度(NTU)" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="turb" label="浊度(NTU)" show-overflow-tooltip width="150" align="center" sortable>
           <template slot-scope="{ row }">{{ row.turb ? row.turb : '/' }}</template>
         </el-table-column>
-        <el-table-column prop="cod" label="化学需氧量(mg/L)" show-overflow-tooltip width="150" align="center">
-          <template slot-scope="{ row }">{{ row.cod ? row.cod : '/' }}</template>
-        </el-table-column>
-        <el-table-column prop="ec" label="电导率(uS/cm)" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="ec" label="电导率(uS/cm)" show-overflow-tooltip width="150" align="center" sortable>
           <template slot-scope="{ row }">{{ row.ec ? row.ec : '/' }}</template>
         </el-table-column>
-        <el-table-column prop="chl" label="叶绿素光谱指数" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="temperature" label="温度(℃)" show-overflow-tooltip width="150" align="center" sortable>
+          <template slot-scope="{ row }">{{ row.temperature ? row.temperature : '/' }}</template>
+        </el-table-column>
+        <el-table-column prop="chl" label="叶绿素光谱指数" show-overflow-tooltip width="150" align="center" sortable>
           <template slot-scope="{ row }">{{ row.chl ? row.chl : '/' }}</template>
         </el-table-column>
-        <el-table-column prop="doxygen" label="溶解氧(mg/L)" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="doxygen" label="溶解氧(mg/L)" show-overflow-tooltip width="150" align="center" sortable>
           <template slot-scope="{ row }">{{ row.doxygen ? row.doxygen : '/' }}</template>
         </el-table-column>
-        <el-table-column prop="address" label="总有机碳(mg/L)" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="address" label="总有机碳(mg/L)" show-overflow-tooltip width="150" align="center" sortable>
           <template slot-scope="{ row }">{{ row.address ? row.address : '/' }}</template>
         </el-table-column>
-        <el-table-column prop="codmn" label="高猛酸盐指数" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="codmn" label="高猛酸盐指数" show-overflow-tooltip width="150" align="center" sortable>
           <template slot-scope="{ row }">{{ row.codmn ? row.codmn : '/' }}</template>
         </el-table-column>
-        <el-table-column prop="tss" label="悬浮物(mg/L)" show-overflow-tooltip width="150" align="center">
+        <el-table-column prop="tss" label="悬浮物(mg/L)" show-overflow-tooltip width="150" align="center" sortable>
           <template slot-scope="{ row }">{{ row.tss ? row.tss : '/' }}</template>
         </el-table-column>
         <el-table-column prop="partitionName" label="排水分区" show-overflow-tooltip width="150" align="center"></el-table-column>

+ 8 - 5
src/views/spectrum/dynamicMonitor/waterQualityLedger/widget.vue

@@ -12,23 +12,23 @@
             <el-option v-for="(item,index) in siteOption" :key="index" :label="item.siteName" :value="item.id"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="设备类型:">
+        <!-- <el-form-item label="设备类型:">
           <el-select v-model="form.deviceType" placeholder="选择设备类型" clearable style="width:160px">
             <el-option v-for="item in devicetypes" :key="item.value" :label="item.deviceTypeName" :value="item.id"></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="采集时间:">
           <el-date-picker v-model="form.date" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions" value-format="yyyy-MM-dd" :clearable="false"
             style="width:240px">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="站点状态:">
+        <!-- <el-form-item label="站点状态:">
           <el-checkbox v-model="checked">显示有效数据</el-checkbox>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item>
           <el-button type="primary" @click="query()">查询</el-button>
           <el-button type="primary" @click="reset()">重置</el-button>
-          <el-button type="primary" @click="checkdataToVoid()">作废</el-button>
+          <!-- <el-button type="primary" @click="checkdataToVoid()">作废</el-button> -->
           <el-button type="primary">导出</el-button>
         </el-form-item>
       </el-form>
@@ -42,6 +42,9 @@
         <el-table-column type="selection" align="center"></el-table-column>
         <el-table-column prop="date" label="序号" width="50" align="center">
           <template slot-scope="scope">{{scope.$index+1}}</template>
+        </el-table-column>
+        <el-table-column prop="siteName" label="编辑" show-overflow-tooltip width="200" align="center">
+
         </el-table-column>
         <el-table-column prop="siteName" label="监测点名称" show-overflow-tooltip width="200" align="center"></el-table-column>
         <el-table-column prop="collectionDate" label="采集数据时间" show-overflow-tooltip width="200" align="center"></el-table-column>

+ 361 - 0
src/views/spectrum/dynamicMonitor/waterQualityLedgerEdit/widget.vue

@@ -0,0 +1,361 @@
+<!-- 增加液位 -->
+<template>
+  <div class="content">
+    <!-- 头部 -->
+    <div class="content-top">
+      <el-form ref="form" :model="form" :inline="true" label-width="auto" size="small">
+        <el-form-item label="关键字:">
+          <el-input v-model="form.deviceName" placeholder="排水分区、监测分组搜索" clearable style="width:200px"></el-input>
+        </el-form-item>
+        <el-form-item label="监测点:">
+          <el-select v-model="form.siteId" filterable multiple collapse-tags clearable placeholder="选择监测点" style="width:200px">
+            <el-option v-for="(item,index) in siteOption" :key="index" :label="item.siteName" :value="item.id"></el-option>
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="设备类型:">
+          <el-select v-model="form.deviceType" placeholder="选择设备类型" clearable style="width:160px">
+            <el-option v-for="item in devicetypes" :key="item.value" :label="item.deviceTypeName" :value="item.id"></el-option>
+          </el-select>
+        </el-form-item> -->
+        <el-form-item label="采集时间:">
+          <el-date-picker v-model="form.date" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions" value-format="yyyy-MM-dd" :clearable="false"
+            style="width:240px">
+          </el-date-picker>
+        </el-form-item>
+        <!-- <el-form-item label="站点状态:">
+          <el-checkbox v-model="checked">显示有效数据</el-checkbox>
+        </el-form-item> -->
+        <el-form-item>
+          <el-button type="primary" @click="query()">查询</el-button>
+          <el-button type="primary" @click="reset()">重置</el-button>
+          <!-- <el-button type="primary" @click="checkdataToVoid()">作废</el-button> -->
+          <el-button type="primary">导出</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <!-- 表格 -->
+    <div class="content-body">
+      <el-table :data="tableData" stripe height="100%" ref="dTable" @row-dblclick="rowDbclick" :header-cell-style="{background:'#eaf1fd',color:'rgb(50,59,65)',height:'40px',textAlign:'center'}">
+        <template slot="empty">
+          <img src="@/assets/icon/null.png" alt="" />
+        </template>
+        <el-table-column type="selection" align="center"></el-table-column>
+        <el-table-column prop="date" label="序号" width="50" align="center">
+          <template slot-scope="scope">{{scope.$index+1}}</template>
+        </el-table-column>
+        <el-table-column prop="siteName" label="编辑" show-overflow-tooltip width="200" align="center">
+
+        </el-table-column>
+        <el-table-column prop="siteName" label="监测点名称" show-overflow-tooltip width="200" align="center"></el-table-column>
+        <el-table-column prop="collectionDate" label="采集数据时间" show-overflow-tooltip width="200" align="center"></el-table-column>
+        <el-table-column prop="isWarning" label="是否存在报警" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">
+            <span :style="{color:row.isWarning=='是'?'red':'#606266'}">{{row.isWarning}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="liquid" label="液位(m)" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{ row }">{{ row.liquid ? row.liquid : '/' }}</template>
+        </el-table-column>
+        <el-table-column prop="temperature" label="温度(℃)" show-overflow-tooltip width="100" align="center">
+          <template slot-scope="{row}">{{row.temperature?row.temperature:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="turb" label="浊度(NTU)" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.turb?row.turb:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="cod" label="化学需氧量(mg/L)" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.cod?row.cod:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="ec" label="电导率(uS/cm)" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.ec?row.ec:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="chl" label="叶绿素光谱指数" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.chl?row.chl:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="doxygen" label="溶解氧(mg/L)" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.doxygen?row.doxygen:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="address" label="总有机碳(mg/L)" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.address?row.address:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="codmn" label="高猛酸盐指数" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.codmn?row.codmn:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="tss" label="悬浮物(mg/L)" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.tss?row.tss:"/"}}</template>
+        </el-table-column>
+        <el-table-column prop="partitionName" label="排水分区" show-overflow-tooltip width="150" align="center"></el-table-column>
+        <el-table-column prop="groupByName" label="监测分组" show-overflow-tooltip width="150" align="center"></el-table-column>
+        <el-table-column prop="deviceTypeName" label="监测设备类型" show-overflow-tooltip width="150" align="center"></el-table-column>
+        <el-table-column prop="isvalidName" label="是否有效" show-overflow-tooltip width="150" align="center">
+          <template slot-scope="{row}">{{row.isvalidName?row.isvalidName:"/"}}</template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <!-- 分页 -->
+    <div class="content-footer">
+      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pagination.current" :page-sizes="[10, 25, 50, 100]" :page-size="pagination.size" layout="total, sizes, prev, pager, next, jumper"
+        :total="pagination.total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import {
+  getSites,
+  getDevicecheckdataList,
+  getDevicetypep,
+  checkdataToVoid
+} from '@/views/spectrum/dynamicMonitor/api/api'
+import { getSiteIcon } from '@/views/spectrum/common/siteIcon/siteIcon' // 站点图标
+export default {
+  data() {
+    return {
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: '今天',
+            onClick(picker) {
+              const start = new Date()
+              const end = new Date()
+              picker.$emit('pick', [start, end])
+            }
+          },
+          {
+            text: '最近一周',
+            onClick(picker) {
+              const end = new Date()
+              const start = new Date()
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
+              picker.$emit('pick', [start, end])
+            }
+          },
+          {
+            text: '最近一个月',
+            onClick(picker) {
+              const end = new Date()
+              const start = new Date()
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
+              picker.$emit('pick', [start, end])
+            }
+          },
+          {
+            text: '最近一年',
+            onClick(picker) {
+              const end = new Date()
+              const start = new Date()
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 365)
+              picker.$emit('pick', [start, end])
+            }
+          }
+        ]
+      },
+      form: {
+        // date: this.getSevenDate()
+      },
+      checked: true,
+      devicetypes: [],
+      tableData: [],
+      interVal: null,
+      pagination: { current: 1, size: 100, total: 0 },
+      siteOption: []
+    }
+  },
+  mounted() {
+    this.getSites()
+    this.getSevenDate()
+    this.getDevicetypep()
+    this.getDevicecheckdataList()
+  },
+  destroyed() {
+    if (this.interVal) clearInterval(this.interVal)
+    window.viewer.entities.removeAll()
+  },
+  methods: {
+    /**
+     * 获取站点
+     */
+    getSites() {
+      getSites({ projectId: this.$store.state.project.project.id, size: 1000 }).then((res) => {
+        if (res.code && res.code == 1) {
+          this.siteOption = res.result.records
+        }
+      })
+    },
+    /**
+     * 获取设备类型
+     */
+    getDevicetypep() {
+      getDevicetypep({ current: 1, size: 1000, projectId: this.$store.state.project.project.id }).then((res) => {
+        if (res.code == 1) {
+          this.devicetypes = res.result.records
+        }
+      })
+    },
+    getDevicecheckdataList() {
+      let params = JSON.parse(JSON.stringify(this.pagination))
+      if (this.form.deviceName) params['deviceName'] = this.form.deviceName
+      if (this.form.deviceType) params['deviceType'] = this.form.deviceType
+      params['isValid'] = this.checked ? 0 : 1
+      params['isOther'] = true
+      if (this.form.date && this.form.date.length == 2) {
+        params['beginTime'] = this.$moment(this.form.date[0]).format('YYYY-MM-DD 00:00:00')
+        params['endTime'] = this.$moment(this.form.date[1]).format('YYYY-MM-DD 23:59:59')
+      }
+      getDevicecheckdataList(params).then((res) => {
+        if (res.code && res.code == 1) {
+          this.tableData = res.result.records
+          this.pagination.total = res.result.total
+        }
+      })
+    },
+    /**
+     * 查询
+     */
+    query() {
+      this.pagination.current = 1
+      this.pagination.size = 100
+      this.getDevicecheckdataList()
+    },
+    /**
+     * 重置
+     */
+    reset() {
+      this.form = { date: this.getSevenDate() }
+      this.checked = true
+      this.pagination.current = 1
+      this.pagination.size = 100
+      this.getDevicecheckdataList()
+    },
+    /**
+     * 作废
+     */
+    checkdataToVoid() {
+      let selection = this.$refs.dTable.selection
+      console.log('输出:selection', selection)
+      if (selection.length > 0) {
+        this.$confirm('确认是否作废选中的监测数据?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+          .then(() => {
+            const ids = selection.map((item) => {
+              return item.id
+            })
+            checkdataToVoid({ ids: ids.join(',') }).then((res) => {
+              if (res.code && res.code == 1) {
+                this.$message.success('数据作废成功')
+                // 重新渲染数据
+                this.getDevicecheckdataList()
+              }
+            })
+          })
+          .catch(() => { })
+      } else {
+        this.$message.info('未选择任何数据!')
+      }
+    },
+    /**
+     * 获取近7天时间区间
+     */
+    getSevenDate() {
+      const end = new Date()
+      const start = new Date()
+      start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
+      return [this.$moment(start).format('YYYY-MM-DD 00:00:00'), this.$moment(end).format('YYYY-MM-DD 23:59:59')]
+    },
+    /**
+     * 双击行
+     */
+    rowDbclick(site, column, event) {
+      let icon = getSiteIcon(site, false)
+      let viewer = window.viewer
+      let lon = site.longitude || null
+      let lat = site.latitude || null
+      if (!lon || !lat) {
+        this.$message.warning('无坐标信息,无法定位!')
+        return
+      }
+      let entity = viewer.entities.getById(site.id)
+      if (!entity) {
+        const position = Cesium.Cartesian3.fromDegrees(lon, lat, 0)
+        entity = new Cesium.Entity({
+          id: site.id,
+          position: position,
+          billboard: {
+            image: icon,
+            width: 40,
+            height: 70,
+            pixelOffset: new Cesium.Cartesian2(0, -35),
+            heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
+            disableDepthTestDistance: Number.POSITIVE_INFINITY,
+            eyeOffset: Cesium.Cartesian3.ZERO
+          }
+        })
+        viewer.entities.removeAll()
+        viewer.entities.add(entity)
+      }
+      // 本组件定义弹窗存在先移除
+      // if (this.popup) {
+      //   this.popup.destroy()
+      // }
+      viewer.flyTo(entity, {
+        offset: {
+          heading: Cesium.Math.toRadians(0.0),
+          pitch: Cesium.Math.toRadians(-25),
+          range: 3000
+        }
+      })
+    },
+    handleSizeChange(size) {
+      this.pagination.size = size
+      this.getDevicecheckdataList()
+    },
+    handleCurrentChange(current) {
+      this.pagination.current = current
+      this.getDevicecheckdataList()
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.content {
+  width: 100%;
+  height: 100%;
+  .content-top {
+    width: 100%;
+    padding: 20px 20px;
+    .el-form {
+      >>> .el-form-item {
+        margin-bottom: 0 !important;
+      }
+    }
+  }
+  .content-body {
+    width: 100%;
+    height: calc(100% - 112px);
+    box-sizing: border-box;
+    padding: 0 20px;
+    padding-bottom: 5px;
+    .el-table {
+      >>> th > .cell {
+        white-space: pre-line;
+      }
+      >>> .el-table__body {
+        td.el-table__cell {
+          padding: 0 !important;
+          height: 34px;
+        }
+      }
+    }
+  }
+  .content-footer {
+    width: 100%;
+    height: 35px;
+    line-height: 35px;
+    padding: 0 20px;
+  }
+}
+</style>

+ 0 - 282
src/views/spectrum/health/flaw/AlarmConfigForm.vue

@@ -1,282 +0,0 @@
-<template>
-  <tf-dialog
-    v-bind="$attrs"
-    v-on="listeners"
-    @submit="onSubmit"
-    :loading="loading"
-    :width="formData.defectinfo.interfaceCode ? '768px' : '768px'"
-  >
-    <el-form class="form" ref="form" v-bind="{ labelWidth: 'auto', size: 'small' }" :model="formData" :rules="rules">
-      <el-row type="flex" :gutter="15">
-        <el-col :span="formData.defectinfo.interfaceCode ? 24 : 24">
-          
-          <el-form-item label="算法名称" prop="defectinfo.interfaceName">
-            <el-select
-              v-model="formData.defectinfo.interfaceCode"
-              placeholder="请选择算法名称"
-              @change="onInterfaceChange"
-              style="width: 100%"
-            >
-              <el-option
-                v-for="item of interfaces"
-                :key="item.id"
-                :value="item.interfaceCode"
-                :label="item.interfaceName"
-              />
-            </el-select>
-          </el-form-item>
-
-          <el-form-item label="报警参数" prop="defectinfo.alarmParam">
-            <el-input
-              v-model="formData.defectinfo.alarmParam"
-              placeholder="请输入报警参数"
-              clearable
-            />
-          </el-form-item>
-
-          <!-- 报警等级 -->
-          <el-row v-for="(item, index) in siteGroups" :key="index">
-              <el-button
-                v-if="index == siteGroups.length - 1"
-                type="text"
-                class="row-btn"
-                icon="el-icon-circle-plus-outline"
-                @click="addSiteItem()"
-              ></el-button>
-              <el-button
-                v-else
-                type="text"
-                class="row-btn"
-                style="color: #f40;"
-                icon="el-icon-remove-outline"
-                @click="romoveSiteItem(index)"
-              ></el-button>
-              <el-col :span="8">
-                <el-form-item label="报警等级" prop="alarmGrade">
-                  <el-select
-                    v-model="item.value"
-                    filterable
-                    placeholder="选择报警等级"
-                    value-key="id"
-                    clearable
-                    style="width: 100%"
-                    @change="selectSite(item.site, index)"
-                  >
-                    <!-- <el-option v-for="(site, index) in siteOption" :key="index" :label="site.siteName" :value="site">
-                    </el-option> -->
-                    <el-option label="1级" value="1级"></el-option>
-                    <el-option label="2级" value="2级"></el-option>
-                    <el-option label="3级" value="3级"></el-option>
-                    <el-option label="4级" value="4级"></el-option>
-                  </el-select>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="下限" prop="min">
-                  <el-input v-model="item.minValue" placeholder="下限">
-                  </el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="上限" prop="max">
-                  <el-input v-model="item.maxValue" placeholder="上限">
-                  </el-input>
-                </el-form-item>
-              </el-col>
-            </el-row>
-
-        </el-col>
-
-      </el-row>
-    </el-form>
-  </tf-dialog>
-</template>
-
-<script lang="ts">
-  import { Vue, Component, Prop, Watch, Ref } from 'vue-property-decorator'
-  import { ElForm } from 'element-ui/types/form'
-  import { IFlaw, IFlawParam, IInterface, IParam } from '../api/common'
-  import { IDictionary } from '@/api/common'
-  import { fetchParams, fetchPointsByUpAndDown } from '../api/flaw'
-  import { IPoint } from '../../configuration/api/common'
-  import { flawPointParamCols } from '../utils'
-
-  const getDefaultFormData = () => ({
-    defectinfo: {
-      id: undefined,
-      // 算法名称
-      interfaceName: '',
-      // 监测时间
-      times:'',
-      // 报警参数
-      alarmParam:'',
-    },
-    defectinfoParmSet: []
-  })
-
-  @Component({ name: 'TeamForm', components: {} })
-  export default class TeamForm extends Vue {
-    @Prop({ type: Object, default: () => ({}) }) data!: object
-    @Prop({ type: Boolean, default: false }) loading!: boolean
-    @Prop({ type: Array, default: () => [] }) types!: IDictionary[]
-    @Prop({ type: Array, default: () => ({}) }) interfaces!: IInterface[]
-    @Prop({ type: Array, default: () => ({}) }) points!: IPoint[]
-    @Ref('form') formRef: ElForm
-
-    formData: IFlawParam = getDefaultFormData()
-
-    currentInterface: Partial<IInterface> = {}
-
-    params: IParam[] = []
-
-    columns = flawPointParamCols
-
-    fetchingParams: boolean = false
-
-    compare = []
-    upAndDown = []
-
-    siteGroups = [
-          {
-            site: null,
-            targets: [],
-            target: null,
-            symbol: null,
-            // 下限
-            minValue: '',
-            // 上限
-            maxValue: '',
-          },
-        ]
-
-        siteOption = []
-
-    get listeners() {
-      const { submit, ...rest } = this.$listeners
-      return rest
-    }
-
-    get computedPoints() {
-      return this.compare.length > 0 ? this.upAndDown : this.points
-    }
-
-    rules = {
-      'defectinfo.interfaceName': [{ required: true, message: '请选择算法名称', trigger: 'blur' }],
-      'grade': [{ required: true, message: '请选择报警等级', trigger: 'blur' }],
-      'min': [{ required: true, message: '请输入下限', trigger: 'blur' }],
-      'max': [{ required: true, message: '请输入上限', trigger: 'blur' }],
-    }
-
-    onInterfaceChange(code: string) {
-      const current = this.interfaces.find((item) => item.interfaceCode === code)
-      this.currentInterface = current
-      const { interfaceName, interfaceCode, interfaceDescription, algorithmNote } = current || {}
-      this.formData = {
-        ...this.formData,
-        defectinfo: { ...this.formData.defectinfo, interfaceName, interfaceDescription, algorithmNote }
-      }
-      this.fetchParams(interfaceCode)
-    }
-
-    async fetchParams(code: string) {
-      this.fetchingParams = true
-      try {
-        const { result } = await fetchParams(code)
-        this.formData.defectinfoParmSet = result || []
-      } catch (error) {
-        console.log(error)
-      }
-      this.fetchingParams = false
-    }
-
-    /**
-  * 添加条件
-  */
-    addSiteItem() {
-      this.siteGroups.push({
-        site: null,
-        targets: [],
-        target: null,
-        symbol: null,
-        targetUnit: '',
-      })
-    }
-
-    /**
- * 移除条件
- */
-    romoveSiteItem(index) {
-      this.siteGroups.splice(index, 1)
-    }
-
-    /**
- * 站点选择
- */
-    selectSite(site, index) {
-      if (!site) {
-        this.$set(this.siteGroups[index], 'target', null)
-        this.$set(this.siteGroups[index], 'targetUnit', null)
-        return
-      }
-    }
-
-    // 提交表单内容
-    onSubmit() {
-      this.formRef.validate((valid) => {
-        if (valid) {
-          const {
-            defectinfo: { monitorIds, ...rest },
-            defectinfoParmSet
-          } = this.formData
-          this.$emit('submit', { defectinfo: { ...rest, monitorIds: monitorIds.join() }, defectinfoParmSet })
-        }
-      })
-    }
-    async fetchPointsByUpAndDown(type: string) {
-      const { result } = await fetchPointsByUpAndDown({ type })
-      this.upAndDown = result
-    }
-
-    @Watch('compare')
-    onCompareChange(val) {
-      this.fetchPointsByUpAndDown(val.join())
-    }
-
-    @Watch('data', { immediate: true })
-    setDefaultData(val: IFlaw) {
-      const { id, interfaceCode, monitorIds } = val || {}
-      this.formData = id
-        ? {
-            defectinfo: {
-              ...val,
-              monitorIds: String(monitorIds || '')
-                .split(',')
-                .filter((item) => !!item)
-                .map((num) => Number(num))
-            },
-            defectinfoParmSet: []
-          }
-        : getDefaultFormData()
-      this.currentInterface = {}
-      if (interfaceCode) {
-        this.onInterfaceChange(interfaceCode)
-      }
-    }
-
-  }
-</script>
-<style lang="scss" scoped>
-.form {
-  /deep/ .input input {
-    text-align: center;
-  }
-}
-
-.row-btn {
-  position: absolute;
-  left: -18px;
-  top: 5px;
-  font-size: 18px;
-  padding: 0;
-}
-</style>

+ 0 - 190
src/views/spectrum/health/flaw/FengxianForm.vue

@@ -1,190 +0,0 @@
-<template>
-  <tf-dialog
-    v-bind="$attrs"
-    v-on="listeners"
-    @submit="onSubmit"
-    :loading="loading"
-    :width="formData.defectinfo.interfaceCode ? '568px' : '568px'"
-  >
-    <el-form class="form" ref="form" v-bind="{ labelWidth: 'auto', size: 'small' }" :model="formData" :rules="rules">
-      <el-row type="flex" :gutter="15">
-        <el-col :span="formData.defectinfo.interfaceCode ? 24 : 24">
-          
-          <el-form-item label="算法名称" prop="defectinfo.interfaceName">
-            <el-select
-              v-model="formData.defectinfo.interfaceCode"
-              placeholder="请选择算法名称"
-              @change="onInterfaceChange"
-              style="width: 100%"
-            >
-              <el-option
-                v-for="item of interfaces"
-                :key="item.id"
-                :value="item.interfaceCode"
-                :label="item.interfaceName"
-              />
-            </el-select>
-          </el-form-item>
-
-          <el-form-item label="监测时间" prop="defectinfo.times">
-            <el-date-picker
-              v-model="formData.defectinfo.times"
-              type="daterange"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-              style="width: 100%">
-            </el-date-picker>
-          </el-form-item>
-        </el-col>
-
-      </el-row>
-
-      <el-button type="danger" plain @click="clear" class="row-btn" size="small">清空已有分析结果</el-button>
-    </el-form>
-  </tf-dialog>
-</template>
-
-<script lang="ts">
-  import { Vue, Component, Prop, Watch, Ref } from 'vue-property-decorator'
-  import { ElForm } from 'element-ui/types/form'
-  import { IFlaw, IFlawParam, IInterface, IParam } from '../api/common'
-  import { IDictionary } from '@/api/common'
-  import { fetchParams, fetchPointsByUpAndDown } from '../api/flaw'
-  import { IPoint } from '../../configuration/api/common'
-  import { flawPointParamCols } from '../utils'
-
-  const getDefaultFormData = () => ({
-    defectinfo: {
-      id: undefined,
-      interfaceName: '',
-      times:'',
-    },
-    defectinfoParmSet: []
-  })
-
-  @Component({ name: 'TeamForm', components: {} })
-  export default class TeamForm extends Vue {
-    @Prop({ type: Object, default: () => ({}) }) data!: object
-    @Prop({ type: Boolean, default: false }) loading!: boolean
-    @Prop({ type: Array, default: () => [] }) types!: IDictionary[]
-    @Prop({ type: Array, default: () => ({}) }) interfaces!: IInterface[]
-    @Prop({ type: Array, default: () => ({}) }) points!: IPoint[]
-    @Ref('form') formRef: ElForm
-
-    formData: IFlawParam = getDefaultFormData()
-
-    currentInterface: Partial<IInterface> = {}
-
-    params: IParam[] = []
-
-    columns = flawPointParamCols
-
-    fetchingParams: boolean = false
-
-    compare = []
-    upAndDown = []
-
-    get listeners() {
-      const { submit, ...rest } = this.$listeners
-      return rest
-    }
-
-    get computedPoints() {
-      return this.compare.length > 0 ? this.upAndDown : this.points
-    }
-
-    rules = {
-      'defectinfo.interfaceName': [{ required: true, message: '请选择算法名称', trigger: 'blur' }],
-      'defectinfo.times': [{ required: true, message: '请选择监测时间', trigger: 'blur' }],
-    }
-
-    onInterfaceChange(code: string) {
-      const current = this.interfaces.find((item) => item.interfaceCode === code)
-      this.currentInterface = current
-      const { interfaceName, interfaceCode, interfaceDescription, algorithmNote } = current || {}
-      this.formData = {
-        ...this.formData,
-        defectinfo: { ...this.formData.defectinfo, interfaceName, interfaceDescription, algorithmNote }
-      }
-      this.fetchParams(interfaceCode)
-    }
-
-    async fetchParams(code: string) {
-      this.fetchingParams = true
-      try {
-        const { result } = await fetchParams(code)
-        this.formData.defectinfoParmSet = result || []
-      } catch (error) {
-        console.log(error)
-      }
-      this.fetchingParams = false
-    }
-
-    // 清空已有数据
-    clear(){
-      this.$confirm(`是否确认清空已有数据?`, '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      })
-      
-    }
-
-    onSubmit() {
-      this.formRef.validate((valid) => {
-        if (valid) {
-          const {
-            defectinfo: { monitorIds, ...rest },
-            defectinfoParmSet
-          } = this.formData
-          this.$emit('submit', { defectinfo: { ...rest, monitorIds: monitorIds.join() }, defectinfoParmSet })
-        }
-      })
-    }
-
-    async fetchPointsByUpAndDown(type: string) {
-      const { result } = await fetchPointsByUpAndDown({ type })
-      this.upAndDown = result
-    }
-
-    @Watch('compare')
-    onCompareChange(val) {
-      this.fetchPointsByUpAndDown(val.join())
-    }
-
-    @Watch('data', { immediate: true })
-    setDefaultData(val: IFlaw) {
-      const { id, interfaceCode, monitorIds } = val || {}
-      this.formData = id
-        ? {
-            defectinfo: {
-              ...val,
-              monitorIds: String(monitorIds || '')
-                .split(',')
-                .filter((item) => !!item)
-                .map((num) => Number(num))
-            },
-            defectinfoParmSet: []
-          }
-        : getDefaultFormData()
-      this.currentInterface = {}
-      if (interfaceCode) {
-        this.onInterfaceChange(interfaceCode)
-      }
-    }
-  }
-</script>
-<style lang="scss" scoped>
-  .form {
-    /deep/ .input input {
-      text-align: center;
-    }
-  }
-
-  .row-btn {
-  position: absolute;
-  left: 20px;
-  top: 213px;
-}
-</style>

+ 7 - 11
src/views/spectrum/health/flaw/QueryForm.vue

@@ -49,10 +49,9 @@
       <el-button
         type="primary"
         size="small"
-        :loading="loading.analyse"
-        :disabled="loading.analyse"
-        @click="$emit('analyse')"
-    
+        @click="$emit('quexian')"
+        :loading="loading.quexian"
+        :disabled="loading.quexian"
       >
         缺陷分析
       </el-button>
@@ -60,12 +59,9 @@
       <el-button
         type="primary"
         size="small"
-        :loading="loading.alarm"
-        :disabled="loading.alarm"
-        @click="$emit('alarm')"
-    
+        @click="$emit('fengxian')"
       >
-        报警等级配
+        风险等级设置
       </el-button>
 
     </el-form-item>
@@ -81,8 +77,8 @@
     add: boolean
     update: boolean
     del: boolean
-    analyse: boolean
-    alarm: boolean
+    quexian: boolean
+    fengxian: boolean
   }
 
   @Component({ name: 'QueryForm' })

+ 198 - 0
src/views/spectrum/health/flaw/fengxiandengjiSite.vue

@@ -0,0 +1,198 @@
+<template>
+    <!-- dialog本身就有close的回调函数 -->
+    <tf-dialog
+      v-bind="$attrs"
+      @submit="onSubmit2"
+      @cancel="onCancel"
+      @close="onClose"
+      width="768px"
+    >
+      <el-form class="form" ref="form" size="small" :model="formData">
+        <el-row>
+          <el-col :span="24">
+            
+            <el-form-item label="算法名称" prop="interfaceName" 
+            :rules="[{ required: true, message: '请选择算法名称!', trigger: 'blur' }]">
+              <el-select
+                v-model="formData.interfaceName"
+                placeholder="请选择算法名称"
+                style="width: 85%"
+              >
+                <el-option
+                  v-for="item of quexianInterfaces"
+                  :label="item.notes"
+                  :value="item.notes"
+                />
+              </el-select>
+            </el-form-item>
+  
+            <el-form-item label="报警参数" prop="alarmParam">
+              <el-input
+                v-model="formData.alarmParam"
+                placeholder="请输入报警参数"
+                clearable
+                style="width: 85%"
+              />
+            </el-form-item>
+  
+            <!-- 报警等级 -->
+            <el-row v-for="(item, index) in formData.alarmGradeParams" :key="index">
+                <el-button
+                  v-if="index == formData.alarmGradeParams.length - 1"
+                  type="text"
+                  class="row-btn"
+                  icon="el-icon-circle-plus-outline"
+                  @click="addSiteItem()"
+                ></el-button>
+                <el-button
+                  v-else
+                  type="text"
+                  class="row-btn"
+                  style="color: #f40;"
+                  icon="el-icon-remove-outline"
+                  @click="romoveSiteItem(index)"
+                ></el-button>
+                  <el-col :span="10">
+                    <el-form-item label="报警等级" prop="alarmGrade" 
+                    :rules="[{ required: true, message: '请选择报警等级', trigger: 'change' }]">
+                    <el-select
+                      v-model="item.alarmGrade"
+                      filterable
+                      placeholder="选择报警等级"
+                      clearable
+                      style="width: 70%"
+                      @change="selectSite(item.alarmGrade, index)"
+                    >
+                      <el-option v-for="(site, index) in warnLevel" :key="index" :label="site.notes" :value="site.codeValue">
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="7">
+                  <el-form-item label="下限" prop="minValue" 
+                  :rules="[{ required: true, message: '请输入两位小数的下限!', trigger: 'change' }]">
+                    <el-input v-model="item.minValue" placeholder="请输入两位小数" style="width: 70%" 
+                    oninput="if(isNaN(value)) { value = null } if(value.indexOf('.')>0){value=value.slice(0,value.indexOf('.')+3)}">
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="6">
+                  <el-form-item label="上限" prop="maxValue" 
+                  :rules="[{ required: true, message: '请输入两位小数的上限!', trigger: 'change' }]">
+                    <el-input v-model="item.maxValue" placeholder="请输入两位小数" style="width: 70%"
+                    oninput="if(isNaN(value)) { value = null } if(value.indexOf('.')>0){value=value.slice(0,value.indexOf('.')+3)}">
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+  
+          </el-col>
+  
+        </el-row>
+      </el-form>
+    </tf-dialog>
+  </template>
+  
+  <script >
+  export default {
+      name: "fengxiandengjiSite",
+      components: {},
+      props: {
+          quexianInterfaces: {
+              type: Array,
+              default() {
+                  return []
+              }
+          },
+          warnLevel:{
+            type: Array,
+              default() {
+                  return []
+              }
+          }
+      },
+      data() {
+          return {
+              formData: {
+                  interfaceName: "",
+                  alarmParam: "",
+                  alarmGradeParams: [{
+                    alarmGrade:"",
+                    minValue:"",
+                    maxValue:"",
+                  }]
+              },
+
+              // rules:{
+              //   'interfaceName':[{required:true,message:"请选择算法!",trigger:'change'}],
+              //   'alarmGrade':[{required:true,message:"请选择报警等级!",trigger:''}],
+              //   'minValue':[{required:true,message:"请输入最小值!",trigger:''}],
+              //   'maxValue':[{required:true,message:"输入最大值!",trigger:''}],
+              // }
+          }
+      },
+      methods: {
+          /**
+  * 添加条件
+  */
+          addSiteItem() {
+              this.formData.alarmGradeParams.push({
+                value:"",
+                  minValue: "",
+                  maxValue: "",
+              })
+          },
+
+                /**
+   * 移除条件
+   */
+      romoveSiteItem(index) {
+        this.formData.alarmGradeParams.splice(index, 1)
+      },
+  
+      /**
+   * 站点选择
+   */
+      selectSite(value, index) {
+          this.$set(this.formData.alarmGradeParams[index], 'minValue', "")
+          this.$set(this.formData.alarmGradeParams[index], 'maxValue', "")
+          return
+          },
+          //   发送请求的数据
+          onSubmit2() {
+            // this.$refs.form.validate((valid) => {
+            //     if(valid){
+                    this.$emit("submit",this.formData)
+                // }
+            // })
+           },
+          // 点击取消按钮
+          onCancel() {
+              this.$emit('cancel',)
+          },
+          // 点击关闭按钮
+          onClose() {
+              this.$emit('close1',)
+          }
+
+      },
+
+  }
+  
+  </script>
+  <style lang="scss" scoped>
+  .form {
+    /deep/ .input input {
+      text-align: center;
+    }
+  }
+  
+  .row-btn {
+    position: absolute;
+    left: -18px;
+    top: 5px;
+    font-size: 18px;
+    padding: 0;
+  }
+  </style>
+  

+ 139 - 0
src/views/spectrum/health/flaw/quexianAnalys.vue

@@ -0,0 +1,139 @@
+<!-- 缺陷分析 -->
+<template>
+    <tf-dialog
+      v-bind="$attrs"
+      @submit="onSubmit1"
+      @cancel="onCancel"
+      @close="onClose"
+      width="600px"
+    >
+      <el-form  class="form" ref="form"  size="small"   :model="formData" :rules="rules">
+        <el-row >
+          <el-col :span="24">
+            
+            <el-form-item label="算法名称" prop="interfaceName">
+              <el-select
+                v-model="formData.interfaceName"
+                placeholder="请选择算法名称"
+                style="width: 80%;">
+                <el-option
+                  v-for="item of quexianInterfaces"
+                  :label="item.notes"
+                  :value="item.sort"
+                />
+              </el-select>
+            </el-form-item>
+  
+            <el-form-item label="监测时间" prop="times">
+              <el-date-picker
+                v-model="formData.times"
+                type="daterange"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                style="width: 80%;"
+                value-format="yyyy-MM-dd 00:00:00">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+  
+        </el-row>
+  
+        <el-button type="danger" plain @click="clear" class="row-btn" size="small">清空已有分析结果</el-button>
+  
+      </el-form>
+    </tf-dialog>
+  </template>
+  
+  <script>
+  import { clearAnalyseByType } from "@/api/quexianAnalys"
+    export default {
+        components:{},
+        name:"quexianAnalys",
+
+        props:{
+            quexianInterfaces:{
+                type:Array,
+                default(){
+                    return []
+                }
+            }
+        },
+
+      data() {
+          return {
+              rules : {
+                  'interfaceName': [{ required: true, message: '请选择算法名称', trigger: 'change' }],
+                  'times': [{ required: true, message: '请选择监测时间', trigger: 'change' }],
+              },
+              formData:{
+                interfaceName:"",
+                times:[],
+              },
+          }
+      },
+
+      methods: {
+          // 清空已有数据
+          clear() {
+              var types = []
+              types.push(this.formData.interfaceName)
+              var params = {
+                  types: types + ''
+              }
+              this.$confirm(`是否确认清空已有数据?`, '提示', {
+                  confirmButtonText: '确定',
+                  cancelButtonText: '取消',
+                  type: 'warning'
+              }).then(() => {
+                  clearAnalyseByType(params).then((res) => {
+                      if (res.code == 1) {
+                          this.$message.success("清楚已有分析结果成功!")
+                          this.$emit('cancel',)
+                      }
+                      else {
+                          this.$message.error("清除已有分析结果失败!")
+                      }
+                  })
+              }).catch(() => {
+                  this.$message({
+                      type: "info",
+                      message: "已取消删除",
+                  });
+              });
+          },
+  
+          onSubmit1() {
+            // this.$refs.form.validate((valid) => {
+            //   if(valid){
+                this.$emit('submit', this.formData)
+            //   }
+            // })
+          },
+          // 点击取消按钮
+          onCancel(){
+            this.$emit('cancel',)
+          },
+          // 点击关闭按钮
+          onClose(){
+            this.$emit('close',)
+          }
+      },
+
+    }
+
+  </script>
+  <style lang="scss" scoped>
+    .form {
+      /deep/ .input input {
+        text-align: center;
+      }
+    }
+  
+    .row-btn {
+    position: absolute;
+    left: 20px;
+    top: 210px;
+  }
+  </style>
+  

+ 145 - 33
src/views/spectrum/health/flaw/widget.vue

@@ -9,8 +9,8 @@
         @update="onUpdate"
         @del="onDel"
         @export="onExport"
-        @analyse="onAnalyse"
-        @alarm="onAlarm"
+        @quexian="onQuexian"
+        @fengxian="onFengxian"
       />
     </template>
     <tf-table
@@ -43,36 +43,40 @@
       :points="points"
     />
 
-    <FengxianForm
-      :visible.sync="visibleFengXian"
-      :title="`算法执行`"
-      :data="current"
-      @submit="onSubmit"
-      :loading="loading.analyse"
-      :types="drainageTypes"
-      :interfaces="interfaces"
-      :points="points"
-    />
+    <quexianAnalys
+    :visible.sync="visibleQuexian"
+    :title="`算法执行`"
+    :loading="loading.quexian"
+    :quexianInterfaces = "quexianInterfaces"
+    @submit="onSubmit1"
+    @cancel="onCancel"
+    @close="onClose"
+      />
 
-    <AlarmConfigForm
-      :visible.sync="visibleAlarmConfig"
-      :title="`报警等级配置`"
-      :data="current"
-      @submit="onSubmit"
-      :loading="loading.alarm"
-      :types="drainageTypes"
-      :interfaces="interfaces"
-      :points="points"
+    <fengxiandengjiSite
+    :visible.sync="visibleFengxian"
+    :title="`报警等级设置`"
+    :quexianInterfaces = "quexianInterfaces"
+    :warnLevel = "warnLevel"
+    @cancel="onCancel1"
+    @close1="onClose1"
+    @submit="onSubmit2"
     />
   </tf-page>
 </template>
 
 <script lang="ts">
+// 引入字典查询请求
+import { fetchInferDictionary , fetchWarnLevelDictionary} from '@/api/common'
   import { Vue, Component, Prop, Watch } from 'vue-property-decorator'
   import QueryForm from './QueryForm.vue'
   import FlawForm from './FlawForm.vue'
-  import FengxianForm from './FengxianForm.vue'
-  import AlarmConfigForm from './AlarmConfigForm.vue'
+  // 引入缺陷分析组件
+  import quexianAnalys from './quexianAnalys.vue'
+  // 引入风险等级设置组件
+  import fengxiandengjiSite from './fengxiandengjiSite.vue'
+  // 
+  import  analyseranLevelZ  from './quexianAnalys.vue'
   import { getDefaultPagination } from '@/utils/constant'
   import { flawCols } from '../utils'
   import { IOriginalDictionary, IPagination } from '@/api/common'
@@ -87,8 +91,10 @@
   } from '../api/flaw'
   import { IFlaw, IFlawParam, IInterface } from '../api/common'
   import { IPoint } from '../../configuration/api/common'
+  // 引入缺陷分析接口
+  import { quexianAnalysis, analysEranLevel } from "@/api/quexianAnalys"
 
-  @Component({ name: 'Device', components: { QueryForm, FlawForm, FengxianForm, AlarmConfigForm } })
+  @Component({ name: 'Device', components: { QueryForm, FlawForm, quexianAnalys, fengxiandengjiSite } })
   export default class Device extends Vue {
     @Prop({ type: Boolean, default: false }) isActive!: boolean
     teamCols = flawCols
@@ -98,8 +104,10 @@
     // 缺陷
     visibleFengXian = false
 
-    // 报警
-    visibleAlarmConfig = false
+    // 风险
+    visibleFengxian = false
+
+    visibleQuexian = false
 
     current: Partial<IFlaw> = {}
 
@@ -107,7 +115,7 @@
 
     teams: IFlaw[] = []
 
-    loading = { query: false, del: false, export: false, add: false, update: false, analyse:  false, alarm: false}
+    loading = { query: false, del: false, export: false, add: false, update: false, quexian: false}
 
     pagination: IPagination = getDefaultPagination()
 
@@ -117,6 +125,12 @@
 
     interfaces: IInterface[] = []
 
+    // 算法名称
+    quexianInterfaces = [] 
+
+    // 报警等级
+    warnLevel = []
+
     points: IPoint[] = []
 
     onQuery(query) {
@@ -160,19 +174,93 @@
       this.loading[data.defectinfo.id ? 'update' : 'add'] = false
     }
 
+    // 测试
+     onSubmit1(data) {
+      // alert(1111)
+      console.log("++++"+JSON.stringify(data))
+    // 此处拿到表单数据data,然后发送网络请求
+    var startDate = data.times[0]
+    var endDate = data.times[1]
+    var types = []
+    types.push(data.interfaceName)
+    var params = {
+      startDate : startDate,
+      endDate : endDate,
+      types : types + ''
+    }
+    quexianAnalysis(params).then((res) => {
+      if(res.code == 1){
+        this.$message.success("缺陷分析提交成功!")
+      }else{
+        this.$message.error("缺陷分析提交失败!");
+      }
+    })
+      this.visibleQuexian = false
+    }
+
+        // 风险
+  onSubmit2(data) {
+    alert(1111)
+    console.log("fengxian___" + JSON.stringify(data))
+    // 此处拿到表单数据data,然后发送网络请求
+    var analyseranLevel = {}
+    var analyseranLevelTemp = [{}]
+    for(var index = 0;index < data.alarmGradeParams.length;index++){
+      analyseranLevelTemp[index] = {
+      name: data.interfaceName,
+      warnParam: data.alarmParam,
+      warnLevel: parseInt(data.alarmGradeParams[index].alarmGrade),
+      up: data.alarmGradeParams[index].maxValue,
+      low: data.alarmGradeParams[index].minValue
+    }
+    }
+    analyseranLevel = {
+      analyseranLevelTemp : analyseranLevelTemp
+    }
+    console.log("参数" + JSON.stringify(analyseranLevel))
+    analysEranLevel(analyseranLevel).then((res) => {
+      if (res.code == 1) {
+        this.$message.success("风险等级设置成功!")
+      } else {
+        this.$message.error("风险等级设置失败!");
+      }
+    })
+    this.visibleFengxian = false
+  }
+
+    // 点击取消关闭弹窗
+    onCancel(){
+      this.visibleQuexian = false
+    }
+
+  // 点击关闭符号关闭弹窗
+  onClose() {
+    this.visibleQuexian = false
+  }
+
+  // 点击取消关闭弹窗
+  onCancel1() {
+    this.visibleFengxian = false
+  }
+
+  // 点击关闭符号关闭弹窗
+  onClose1() {
+    this.visibleFengxian = false
+  }
+
     onAdd() {
       this.current = {}
       this.visible = true
     }
 
-    onAnalyse(){
-      this.current = {}
-      this.visibleFengXian = true
+    // 缺陷分析
+    onQuexian(){
+      this.visibleQuexian = true
     }
 
-    onAlarm(){
-      this.current = {}
-      this.visibleAlarmConfig = true
+    // 风险等级设置
+    onFengxian(){
+      this.visibleFengxian = true
     }
 
     onUpdate(row) {
@@ -231,11 +319,35 @@
       this.points = records
     }
 
+    // 通过字典取值(算法类型)获取下拉菜单
+    async fetchInferDictionary1() {
+      try {
+        const { result } = await fetchInferDictionary()
+        this.quexianInterfaces = result || []
+        console.log("@@@@"+JSON.stringify(this.quexianInterfaces))
+      } catch (error) {
+        console.log(error)
+      }
+    }
+
+    // 报警等级
+    async fetchWarnLevelDictionary1() {
+      try {
+        const { result } = await fetchWarnLevelDictionary()
+        this.warnLevel = result || []
+        console.log("@@@@"+JSON.stringify(this.warnLevel))
+      } catch (error) {
+        console.log(error)
+      }
+    }
+
     preparing() {
       this.doQuery()
       this.getWaterTypes()
       this.fetchPoints()
       this.fetchInterfaces()
+      this.fetchInferDictionary1()
+      this.fetchWarnLevelDictionary1()
     }
 
     mounted() {

+ 1 - 1
src/views/spectrum/reform/connectivity/widget.vue

@@ -64,7 +64,7 @@
           <template slot-scope="scope">{{ scope.$index + 1 }}</template>
         </el-table-column>
         <el-table-column prop="siteName" label="监测点名称" align="center"></el-table-column>
-        <el-table-column prop="deviceTypeName" label="设备类型" align="center"></el-table-column>
+        <!-- <el-table-column prop="deviceTypeName" label="设备类型" align="center"></el-table-column> -->
       </el-table>
     </div>
     <!-- 监测曲线 -->

+ 1 - 1
src/views/spectrum/reform/groundWater/widget.vue

@@ -79,7 +79,7 @@
             align="center"
             show-overflow-tooltip
           ></el-table-column>
-          <el-table-column prop="pipeCount" label="关联管网" align="center" show-overflow-tooltip>
+          <el-table-column prop="pipeCount" label="上游管网" align="center" show-overflow-tooltip>
             <template slot-scope="{ row }">
               <el-button type="text" style="padding: 0" @click="locationPipe(row)">{{ row.pipeCount }}</el-button>
             </template>

+ 1 - 1
src/views/spectrum/reform/sewageDirect/widget.vue

@@ -79,7 +79,7 @@
             align="center"
             show-overflow-tooltip
           ></el-table-column>
-          <el-table-column prop="pipeCount" label="关联管网" align="center" show-overflow-tooltip>
+          <el-table-column prop="pipeCount" label="上游管网" align="center" show-overflow-tooltip>
             <template slot-scope="{ row }">
               <el-button type="text" style="padding: 0" @click="locationPipe(row)">{{ row.pipeCount }}</el-button>
             </template>

+ 2 - 2
src/views/spectrum/statisticalAnalysis/wqMultipleSites/sitesanalysisResult/widget.vue

@@ -21,7 +21,7 @@
         <div class="empty"></div>
       </div>
     </div>
-    <el-table :data="tableData" stripe style="width: 100%" :header-cell-style="{backgroundColor:'#eaf1fd',height:'39px',textAlign:'center',fontWeight:600}" max-height="350px">
+    <!-- <el-table :data="tableData" stripe style="width: 100%" :header-cell-style="{backgroundColor:'#eaf1fd',height:'39px',textAlign:'center',fontWeight:600}" max-height="350px">
       <template slot="empty">
         <img src="@/assets/icon/null.png" alt />
       </template>
@@ -31,7 +31,7 @@
       <el-table-column prop="targetValue" label="监测值" align="center">
         <template slot-scope="{row}">{{row.targetValue?row.targetValue:'/'}}</template>
       </el-table-column>
-    </el-table>
+    </el-table> -->
   </div>
 </template>
 

+ 5 - 5
src/views/spectrum/statisticalAnalysis/wqMultipleSites/widget.vue

@@ -68,12 +68,12 @@
         <el-table-column label="顺序" align="center" width="50">
           <template slot-scope="scope">{{scope.$index+1}}</template>
         </el-table-column>
-        <el-table-column prop="siteName" label="名称" align="center" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="drainageType" label="类型" align="center" show-overflow-tooltip></el-table-column>
-        <el-table-column label="操作" width="100" align="center">
+        <el-table-column prop="siteName" label="站点名称" align="center" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="drainageType" label="类型" align="center" show-overflow-tooltip></el-table-column> -->
+        <el-table-column label="操作" width="70" align="center">
           <template slot-scope="scope">
-            <el-button type="text" style="padding:0" @click="moveUp(scope)">上移</el-button>
-            <el-button type="text" style="padding:0" @click="moveDown(scope)">下移</el-button>
+            <el-button type="text" style="padding:0" @click="moveUp(scope)"  icon='el-icon-top'></el-button>
+            <el-button type="text" style="padding:0" @click="moveDown(scope)" icon='el-icon-bottom'></el-button>
           </template>
         </el-table-column>
       </el-table>