1. 修复飞行巡检模块中有效率异常详情弹出框无法正常显示的bug;
2.优化各异常类型的折线图配置项生成逻辑;
已修改5个文件
已添加1个文件
859 ■■■■ 文件已修改
src/utils/chartFunction/exceptionOption.js 637 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/exception_common_function/index.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exception/FlightInspection.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exception/components/CompDialogDetail.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exception/components/DustLineChart.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exception/exceptionProxy.js 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/chartFunction/exceptionOption.js
@@ -1,86 +1,9 @@
/** å¼‚常数据的折线图 */
export default {
  /**
   * è®¾ç½®9种异常折线图
   * @param:x轴时间, y轴油烟浓度
   * @param:异常开始时间,异常结束时间,异常开始时间在整个区间的索引下标,异常结束时间在整个区间的索引下标,颜色背景的区间对象结构
   * @param:异常类型
   * @returns:
   */
  setExceptionChartOption({
    xData,
    yData,
    exceptionBeginTime,
    exceptionEndTime,
    beginIndex,
    endIndex,
    exceptionName,
    areaObj,
    lineColor,
    exceptionType
  }
  ) {
    switch (exceptionType) {
      case '0':
        return this.missingDataOption(
          xData,
          yData,
          exceptionBeginTime,
          exceptionEndTime,
          exceptionName
        )
      case '1':
        return this.ultraLowOption(xData, yData, beginIndex, endIndex, exceptionName)
      case '2':
        return this.exceedingOption(
          xData,
          yData,
          exceptionBeginTime,
          exceptionEndTime,
          beginIndex,
          endIndex,
          exceptionName
        )
      case '3':
        return this.longtimeUnchangedOption(
          xData,
          yData,
          exceptionBeginTime,
          exceptionEndTime,
          beginIndex,
          endIndex,
          exceptionName
        )
      case '4':
      case '5':
      case '6':
      case '7':
        return this.exception4567TypeOption(
          xData,
          yData,
          exceptionBeginTime,
          exceptionEndTime,
          beginIndex,
          endIndex,
          exceptionName
        )
      case '8':
        console.log('传进来',lineColor)
        return this.validOption(xData, yData, exceptionName, areaObj,lineColor)
    }
  },
  /**
   * æ•°æ®ç¼ºå¤±
   * @param:
   * @returns:
   */
  missingDataOption(xData, yData, exceptionBeginTime, exceptionEndTime, exceptionName) {
function baseOption(title, xData) {
    return {
      title: {
        text: exceptionName,
      text: title,
        left: '1%',
        textStyle: {
          fontSize: 14
@@ -107,110 +30,60 @@
      yAxis: {
        type: 'value',
        name: 'mg/m³'
      },
      series: [
        {
          name: '颗粒物浓度',
          type: 'line',
          data: yData,
          markLine: {
            silent: true,
            data: [
              // æ ‡æ³¨æ— æ•°æ®æ—¶é—´æ®µçš„æ•ˆæžœï¼Œå°†è¿™ä¸ªæ—¶é—´æ®µçš„æ•°è½´éƒ¨åˆ†å˜ä¸ºçº¢è‰²
              {
                name: '无数据',
                xAxis: exceptionBeginTime
              },
              {
                xAxis: exceptionEndTime
              }
            ],
            lineStyle: {
              color: 'red'
            }
          }
        }
      ]
    }
  },
  /**
   * è¶…æ ‡
   * @param:
   * @returns:
   */
  exceedingOption(
    xData,
    yData,
    exceptionBeginTime,
    exceptionEndTime,
    beginIndex,
    endIndex,
    exceptionName
  ) {
function baseSeries(yData) {
    return {
      title: {
        text: exceptionName,
        left: '1%',
        textStyle: {
          fontSize: 14
        }
      },
      tooltip: {},
      toolbox: {
        // å·¥å…·æ 
        feature: {
          // ä¿å­˜ä¸ºå›¾ç‰‡
          saveAsImage: {}
        }
      },
      xAxis: {
        type: 'category',
        data: xData,
        name: '时间',
        axisLabel: {
          formatter: function (value) {
            return value.slice(11, -3)
          }
        }
      },
      yAxis: {
        type: 'value',
        name: 'mg/m³'
      },
      series: [
        {
          name: '颗粒物浓度',
          type: 'line',
          data: yData.map((item) => {
            if (item >= 1) {
    data: yData
  }
}
function baseMarkArea(area) {
  const _data = []
  area.forEach((v) => {
    _data.push([{ xAxis: v[0] }, { xAxis: v[1] }])
  })
              return {
                value: item,
                itemStyle: {
                  color: 'red'
                }
              }
            }
            return item
          }),
          // å˜æ¢æŒ‡å®šæ—¶é—´åŒºé—´çš„背景颜色
          markArea: {
            itemStyle: {
              color: 'rgba(255, 173, 177, 0.4)'
            },
            data: [
              [
                {
                  name: '异常时间段',
                  xAxis: exceptionBeginTime
                },
                {
                  xAxis: exceptionEndTime
    data: _data
                }
              ]
            ]
          },
          markLine: {
}
function baseVisualMap(area) {
  const _pieces = []
  area.forEach((v, i) => {
    if (i == 0) {
      _pieces.push({
        lt: v[0],
        color: 'green'
      })
    }
    _pieces.push({
      gte: v[0],
      lte: v[1],
      color: 'red'
    })
  })
  const lastOne = area[area.length - 1]
  _pieces.push({
    gt: lastOne[1],
    color: 'green'
  })
  return {
    show: false,
    dimension: 0,
    pieces: _pieces
  }
}
function baseMarkLine() {
  return {
            symbol: 'none',
            itemStyle: {
              // åŸºçº¿å…¬å…±æ ·å¼
@@ -228,112 +101,15 @@
            data: [
              {
                name: '超标',
                type: 'average',
        type: 'max',
                yAxis: 1,
                lineStyle: {
                  // color: '#ff0000'
                  color: 'red'
                }
              }
            ]
          }
        }
      ],
      // æŒ‡å®šæ—¶é—´åŒºé—´çš„线段变颜色
      visualMap: {
        show: false,
        dimension: 0,
        pieces: [
          {
            lte: beginIndex,
            color: 'green'
          },
          {
            gt: beginIndex,
            lte: endIndex,
            color: 'red'
          },
          {
            gt: endIndex,
            lte: xData.length - 1,
            color: 'green'
          }
        ]
      }
    }
  },
  /**
   * æ•°æ®è¶…低
   * @param:
   * @returns:
   */
  ultraLowOption(xData, yData, beginIndex, endIndex, exceptionName) {
    return {
      title: {
        text: exceptionName,
        left: '1%',
        textStyle: {
          fontSize: 14
        }
      },
      tooltip: {},
      toolbox: {
        // å·¥å…·æ 
        feature: {
          // ä¿å­˜ä¸ºå›¾ç‰‡
          saveAsImage: {}
        }
      },
      xAxis: {
        type: 'category',
        data: xData,
        name: '时间',
        axisLabel: {
          formatter: function (value) {
            return value.slice(11, -3)
          }
        }
      },
      yAxis: {
        type: 'value',
        name: 'mg/m³'
      },
      series: [
        {
          name: '颗粒物浓度',
          type: 'line',
          data: yData.map((item) => {
            if (item <= 0.02) {
              return {
                value: item,
                itemStyle: {
                  color: 'red'
                }
              }
            }
            return item
          }),
          markLine: {
            symbol: 'none',
            itemStyle: {
              // åŸºçº¿å…¬å…±æ ·å¼
              normal: {
                lineStyle: {
                  type: 'dashed'
                },
                label: {
                  show: true,
                  position: 'end',
                  formatter: '{b}'
                }
              }
            },
            data: [
              {
                name: '数据超低',
                type: 'average',
        type: 'min',
                yAxis: 0.02,
                lineStyle: {
                  color: 'red'
@@ -342,311 +118,32 @@
            ]
          }
        }
      ],
      // æŒ‡å®šæ—¶é—´åŒºé—´çš„线段变颜色
      visualMap: {
        show: false,
        dimension: 0,
        pieces: [
          {
            lte: beginIndex,
            color: 'green'
          },
          {
            gt: beginIndex,
            lte: endIndex,
            color: 'red'
          },
          {
            gt: endIndex,
            lte: xData.length - 1,
            color: 'green'
          }
        ]
      }
    }
  },
export default {
  /**
   * é•¿æ—¶é—´æ— æ³¢åЍ
   * @param:
   * @returns:
   * èŽ·å–å„ç±»å¼‚å¸¸çš„æŠ˜çº¿å›¾é…ç½®é¡¹
   * @param {*} param0
   * @returns
   */
  longtimeUnchangedOption(
    xData,
    yData,
    exceptionBeginTime,
    exceptionEndTime,
    beginIndex,
    endIndex,
    exceptionName
  ) {
    return {
      title: {
        text: exceptionName,
        left: '1%',
        textStyle: {
          fontSize: 14
  setExceptionChartOption2({ xData, yData, exceptionArea, exceptionName, exceptionType }) {
    const indexArea = []
    exceptionArea.forEach((e) => {
      const i1 = xData.indexOf(e[0])
      const i2 = xData.indexOf(e[1])
      indexArea.push([i1, i2])
    })
    const option = baseOption(exceptionName, xData)
    const series = baseSeries(yData)
    series.markArea = baseMarkArea(exceptionArea)
    // æ•°æ®è¶…低或超标
    if (exceptionType == '1' || exceptionType == '2') {
      series.markLine = baseMarkLine()
        }
      },
      tooltip: {},
      toolbox: {
        // å·¥å…·æ 
        feature: {
          // ä¿å­˜ä¸ºå›¾ç‰‡
          saveAsImage: {}
        }
      },
      xAxis: {
        type: 'category',
        data: xData,
        name: '时间',
        axisLabel: {
          formatter: function (value) {
            return value.slice(11, -3)
          }
        }
      },
      yAxis: {
        type: 'value',
        name: 'mg/m³'
      },
      series: [
        {
          name: '颗粒物浓度',
          type: 'line',
          data: yData.map((item) => {
            if (item >= 1) {
              return {
                value: item,
                itemStyle: {
                  color: 'red'
                }
              }
            }
            return item
          }),
          // å˜æ¢æŒ‡å®šæ—¶é—´åŒºé—´çš„背景颜色
          markArea: {
            itemStyle: {
              color: 'rgba(255, 173, 177, 0.4)'
            },
            data: [
              [
                {
                  name: '异常时间段',
                  xAxis: exceptionBeginTime
                },
                {
                  xAxis: exceptionEndTime
                }
              ]
            ]
          }
        }
      ],
      // æŒ‡å®šæ—¶é—´åŒºé—´çš„线段变颜色
      visualMap: {
        show: false,
        dimension: 0,
        pieces: [
          {
            lte: beginIndex,
            color: 'green'
          },
          {
            gt: beginIndex,
            lte: endIndex,
            color: 'red'
          },
          {
            gt: endIndex,
            lte: xData.length - 1,
            color: 'green'
          }
        ]
      }
    }
  },
    const visualMap = baseVisualMap(indexArea)
  /**
   * é‡çº§çªå˜ ä¸´è¿‘超标异常 å•日超标次数临界异常 å˜åŒ–趋势异常
   * @param:
   * @returns:
   */
  exception4567TypeOption(
    xData,
    yData,
    exceptionBeginTime,
    exceptionEndTime,
    beginIndex,
    endIndex,
    exceptionName
  ) {
    return {
      title: {
        text: exceptionName,
        left: '1%',
        textStyle: {
          fontSize: 14
        }
      },
      tooltip: {},
      toolbox: {
        // å·¥å…·æ 
        feature: {
          // ä¿å­˜ä¸ºå›¾ç‰‡
          saveAsImage: {}
        }
      },
      xAxis: {
        type: 'category',
        data: xData,
        name: '时间',
        axisLabel: {
          formatter: function (value) {
            return value.slice(11, -3)
          }
        }
      },
      yAxis: {
        type: 'value',
        name: 'mg/m³'
      },
      series: [
        {
          name: '颗粒物浓度',
          type: 'line',
          data: yData,
          // å˜æ¢æŒ‡å®šæ—¶é—´åŒºé—´çš„背景颜色
          markArea: {
            itemStyle: {
              color: 'rgba(255, 173, 177, 0.4)'
            },
            data: [
              [
                {
                  name: '异常时间段',
                  xAxis: exceptionBeginTime
                },
                {
                  xAxis: exceptionEndTime
                }
              ]
            ]
          }
        }
      ],
      // æŒ‡å®šæ—¶é—´åŒºé—´çš„线段变颜色
      visualMap: {
        show: false,
        dimension: 0,
        pieces: [
          {
            lte: beginIndex,
            color: 'green'
          },
          {
            gt: beginIndex,
            lte: endIndex,
            color: 'red'
          },
          {
            gt: endIndex,
            lte: xData.length - 1,
            color: 'green'
          }
        ]
      }
    }
  },
    option.series = [series]
    option.visualMap = visualMap
  /**
   * æœ‰æ•ˆçއ
   * @param:
   * @returns:
   */
  validOption(xData, yData, exceptionName, areaObj,lineColor) {
    return {
      title: {
        text: exceptionName,
        left: '1%',
        textStyle: {
          fontSize: 14
        }
      },
      tooltip: {},
      toolbox: {
        // å·¥å…·æ 
        feature: {
          // ä¿å­˜ä¸ºå›¾ç‰‡
          saveAsImage: {}
        }
      },
      xAxis: {
        type: 'category',
        data: xData,
        name: '时间',
        axisLabel: {
          formatter: function (value) {
            return value.slice(11, -3)
          }
        }
      },
      yAxis: {
        type: 'value',
        name: 'mg/m³'
      },
      series: [
        {
          name: '颗粒物浓度',
          type: 'line',
          data: yData,
          //   yData.map((item) => {
          //   if (item >= 1) {
          //     return {
          //       value: item,
          //       itemStyle: {
          //         color: 'red'
          //       }
          //     }
          //   }
          //   return item
          // }),
          // å˜æ¢æŒ‡å®šæ—¶é—´åŒºé—´çš„背景颜色
          markArea: {
            itemStyle: {
              color: 'rgba(255, 173, 177, 0.4)'
            },
            data: areaObj
          }
        }
      ],
      // æŒ‡å®šæ—¶é—´åŒºé—´çš„线段变颜色
      // visualMap: {
      //   show: false,
      //   dimension: 0,
      //   // pieces: [
      //   //   {
      //   //     lte: beginIndex,
      //   //     color: 'green'
      //   //   },
      //   //   {
      //   //     gt: beginIndex,
      //   //     lte: endIndex,
      //   //     color: 'red'
      //   //   },
      //   //   {
      //   //     gt: endIndex,
      //   //     lte: xData.length - 1,
      //   //     color: 'green'
      //   //   }
      //   // ],
      //   pieces: lineColor
      // }
    }
    return option
  }
}
src/utils/exception_common_function/index.js
@@ -77,7 +77,7 @@
     */
    diffFiftyMinutesNum(beginNormal, endNormal) {
        // å°†å¼€å§‹æ—¶é—´å’Œç»“束时间转换为dayjs对象
        const start = dayjs(beginNormal).subtract(15, 'minute');
        const start = dayjs(beginNormal)
        const end = dayjs(endNormal);
  
        // è®¡ç®—结束时间减去开始时间中间相差多少个十分钟
@@ -116,9 +116,8 @@
        let obj = {};
        let current = intervalStarTime;
        let tail = dayjs(intervalEndTime)
          .add(15, 'minute')
          .format('YYYY-MM-DD HH:mm:ss');
        while (current != tail) {
        while (current <= tail) {
          let value = this.findTimeInExceptionData(
            headAndTailExceptionData,
            current
src/views/exception/FlightInspection.vue
@@ -873,35 +873,6 @@
  
        // ä¿å­˜å½“前行数据
        this.tableCurrentRowData = row
        // // èŽ·å–å½“å‰è¡Œçš„ç´¢å¼•
        // this.selectedRowIndex = this.displayData.indexOf(row)
        // //根据当前行的编号,起始时间来 è¯·æ±‚异常数据
        // // å¯¹è¯·æ±‚到的数据进行首尾拼接
        // // å¾—到前后完整数据进行绘制图形
        // historyApi
        //   .queryHistoryData({
        //     siteName: row.name,
        //     beginTime: row.beginTime,
        //     endTime: row.endTime
        //   })
        //   .then((response) => {
        //     // ä¿å­˜è¿”回的超标数据
        //     this.dialog.historyData = response.data.data
        //     this.dialog.exceptionTotal = response.data.data.length
        //     // é€»è¾‘处理
        //     if (this.tableCurrentRowData.exceptionType != '8') {
        //       this.timeAndDataProcessed()
        //     } else {
        //       this.loading.lineChart = true
        //       this.validProcess()
        //       this.loading.lineChart = false
        //       this.flag.banTouch = 0
        //     }
        //   })
      },
      /**
       * description:条件查询异常的数据
src/views/exception/components/CompDialogDetail.vue
@@ -6,16 +6,19 @@
import index from '@/utils/exception_common_function/index.js'
import DustLineChart from '@/views/exception/components/DustLineChart.vue'
import historyApi from '@/api/historyApi.js'
import exceptionProxy from '../exceptionProxy'
export default {
  props: {
    // è¡¨æ ¼çš„一行数据
    row: {
      type: Object,
      default: {}
      default: () => {
        return {}
      }
    },
    // å¯¹è¯æ¡†æ˜¯å¦æ˜¾ç¤º
    dialogTableVisible: {
    visible: {
      type: Boolean,
      default: false
    }
@@ -23,21 +26,11 @@
  components: {
    DustLineChart
  },
  emits: ['update:dialogTableVisible'],
  computed: {
    dialogTableVisible: {
      get() {
        return this.dialogTableVisible
      },
      set(value) {
        this.$emit('update:dialogTableVisible', value)
      }
    }
  },
  emits: ['update:visible'],
  watch: {
    row: {
      handler(newValue) {
        this.display()
        this.display(newValue)
      },
      deep: true
    }
@@ -57,27 +50,30 @@
        lineChart: false
      },
      // æ ‡è®°ä½
      flag: {
        // æ•°æ®åŠ è½½æ—¶ ä¸Šä¸‹æ¡æŒ‰é’®ä¸èƒ½å†ç‚¹å‡»
        banTouch: 0,
        banTouch: 0
      },
      isPreCantouch:false,
      isNextCantouch:false
    }
  },
  mounted() {},
  methods: {
    display() {
    dialogChange(value) {
      this.$emit('update:visible', value)
    },
    async display(row) {
      // æŠ˜çº¿å›¾åŠ è½½ä¸­æ•ˆæžœ
      this.loading.lineChart = true
      // è¡¨æ ¼æ•°æ®
      this.getExceptionTableDataByCurrenrRow(this.row)
      await this.getExceptionTableDataByCurrenrRow(row)
      // æŠ˜çº¿å›¾æ•°æ®
      this.setLineChart(this.row)
      await this.setLineChart(row)
    },
    /**
@@ -116,14 +112,10 @@
      const beforeAndAfterTime = index.before45AndAfter45(beginTime, endTime)
      // è¯·æ±‚整段时间段的颗粒物浓度数据
     
      // å¯¹è¯·æ±‚回的数据进行划分
      const chartParams = await this.organizeLineChartsOptionParams(beforeAndAfterTime, this.row)
      this.lineChartOption = exceptionOption.setExceptionChartOption(chartParams)
      this.lineChartOption = exceptionOption.setExceptionChartOption2(chartParams)
    },
    /**
     * æž„建折线图的配置项的参数
@@ -134,9 +126,6 @@
      time_point,
      { name, beginTime, endTime, exception, exceptionType }
    ) {
      // æŠ˜çº¿å›¾åŠ è½½ä¸­æ•ˆæžœ
      this.loading.lineChart = true
      // è¯·æ±‚整段颗粒物浓度的数据
      const response = await historyApi.queryHistoryData({
        siteName: name,
@@ -162,9 +151,12 @@
      xData = timeAndValue['xAxis']
      yData = timeAndValue['yAxis']
      // æå–异常起始时间点在整个区间内的数据索引
      let beginIndex = xData.findIndex((item) => item === beginTime)
      let endIndex = xData.findIndex((item) => item === endTime)
      const exceptionArea = exceptionProxy.getExceptionArea(
        beginTime,
        endTime,
        this.historyData,
        exceptionType
      )
      this.flag.banTouch = 0
      this.loading.lineChart = false
@@ -173,13 +165,8 @@
      return {
        xData,
        yData,
        exceptionBeginTime: beginTime,
        exceptionEndTime: endTime,
        beginIndex,
        endIndex,
        exceptionArea,
        exceptionName: exception,
        areaObj: '',
        lineColor: '',
        exceptionType
      }
    },
@@ -199,9 +186,12 @@
          mnCode: mnCode,
          dutyCompany: dutyCompany,
          lst: abnormalTimeTenMinute[i],
          yData: ''
          dustValue: ''
        })
      }
    },
    tableRowClassName({ row }) {
      return row.flag == 'N' ? 'normal-row' : 'abnormal-row'
    }
  }
}
@@ -210,14 +200,14 @@
<template>
  <el-dialog
    class="exception-dialog"
    v-model="dialogTableVisible"
    :model-value="visible"
    @open="dialogChange(true)"
    @close="dialogChange(false)"
    draggable
    align-center
    height="700px"
    width="700px"
  >
    <!-- å¤´ -->
    <template #header>
      <div class="diag-head">
@@ -231,7 +221,6 @@
          </div>
        </div>
      </div>
      <!-- <div class="chart-jump-button">
        <el-button
@@ -249,17 +238,20 @@
          >下条异常</el-button
        >
      </div> -->
    </template>
    <!-- å›¾å½¢ -->
    <DustLineChart :option="lineChartOption" v-loading="loading.lineChart"></DustLineChart>
    <!-- è¡¨æ ¼ -->
    <div>
      <el-table :data="historyData" size="default" height="200" border>
      <el-table
        :data="historyData"
        size="default"
        height="200"
        border
        :row-class-name="tableRowClassName"
      >
        <el-table-column
          type="index"
          label="序号"
@@ -269,7 +261,7 @@
        ></el-table-column>
        <el-table-column prop="lst" label="采集时间" align="center" show-overflow-tooltip />
        <el-table-column prop="yData" label="TSP(mg/m³)" align="center" show-overflow-tooltip />
        <el-table-column prop="dustValue" label="TSP(mg/m³)" align="center" show-overflow-tooltip />
        <el-table-column prop="flag" label="数据标识" align="center" show-overflow-tooltip />
      </el-table>
    </div>
@@ -299,13 +291,18 @@
        >
      </div>
    </template>
  </el-dialog>
</template>
<style scoped>
<style>
/* æŸ¥çœ‹è¯¦æƒ…对话框模块的样式 */
.el-table .normal-row {
}
.el-table .abnormal-row {
  /* background-color: var(--el-color-danger-light-5); */
  color: var(--el-color-danger);
}
.diag-head {
  /* å¯¹è¯æ¡†å¤´éƒ¨åŒºåŸŸ */
src/views/exception/components/DustLineChart.vue
@@ -33,10 +33,10 @@
    window.addEventListener('resize', this.resizeChart)
  },
  watch: {
    option() {
    option(nV) {
      // this.chart.clear
      // ä¸ä¸Žä¹‹å‰çš„option进行合并
      this.chart.setOption(this.option, true)
      this.chart.setOption(nV, true)
    }
  },
src/views/exception/exceptionProxy.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
/**
 * å¼‚常数据相关逻辑代理
 */
import index from '@/utils/exception_common_function/index.js'
function findPeriod(dataList, exceptionCheck, specilOption) {
  let start,
    last = undefined
  let isException = false
  const res = []
  dataList.forEach((e) => {
    // åˆ¤æ–­å‰åŽç›¸é‚»ä¸¤ä¸ªæ•°æ®çš„æ—¶é—´ç‚¹æ˜¯å¦è¶…过15分钟
    if (last && !isException) {
      if (typeof specilOption === 'function' && specilOption(last, e)) {
        res.push([last.lst, e.lst])
      }
    }
    if (typeof exceptionCheck === 'function' && exceptionCheck(e)) {
      if (!isException) {
        start = e
        isException = true
      }
    } else {
      if (isException) {
        res.push([start.lst, last.lst])
        isException = false
      }
    }
    last = e
  })
  return res
}
export default {
  /**
   * èŽ·å–æ•°æ®çš„å¼‚å¸¸æ—¶æ®µæ•°ç»„
   * @param {*} beginTime
   * @param {*} endTime
   * @param {*} dataList
   * @param {*} exceptionType
   * @returns
   */
  getExceptionArea(beginTime, endTime, dataList, exceptionType) {
    if (dataList.length == 0) {
      return []
    }
    const d1 = dataList[0].lst
    const d2 = dataList[dataList.length - 1].lst
    switch (exceptionType) {
      // æœ‰æ•ˆçއ异叏
      case '8':
        // ç»Ÿè®¡æ•°æ®ç¼ºå¤±æ—¶æ®µå’Œæ•°æ®æ ‡è¯†ä¸ä¸ºN的时段
        return findPeriod(
          dataList,
          (data) => {
            return data.flag != 'N'
          },
          (last, data) => {
            return index.diffFiftyMinutesNum(last.lst, data.lst) > 1
          }
        )
      //单日超标次数临界异常
      case '6':
        return findPeriod(dataList, (data) => {
          return data.dustValue > 1
        })
      //数据超低
      //超标
      //数据长时段无波动
      //量级突变
      //临近超标异常
      //变化趋势异常
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '7':
        return [[d1, d2]]
      //数据缺失异常
      case '0':
        return [[beginTime, endTime]]
    }
  }
}