riku
2025-10-16 87e19b5a396ac8fed6a551828b87d263f6425c31
src/views/historymode/component/MissionReport.vue
@@ -14,6 +14,16 @@
        ></OptionLocation2>
      </el-form-item>
      <OptionTime v-model="formObj.timeArray"></OptionTime>
      <el-form-item label="移除其他区县" prop="removeOtherDistrict">
        <el-checkbox v-model="formObj.removeOtherDistrict"
          >移除其他区县</el-checkbox
        >
      </el-form-item>
      <el-form-item label="移除未污染源" prop="removeNoPollutedSource">
        <el-checkbox v-model="formObj.removeNoPollutedSource"
          >移除未发现污染源的线索</el-checkbox
        >
      </el-form-item>
      <el-form-item>
        <el-button
          type="primary"
@@ -23,14 +33,14 @@
        >
          下载报告
        </el-button>
        <!-- <el-button
        <el-button
          type="primary"
          class="el-button-custom"
          @click="handleGenerateImg"
          :loading="docLoading"
        >
          生成图片
        </el-button> -->
        </el-button>
      </el-form-item>
      <!-- <el-form-item>
        <el-image :src="base64Url" fit="fill" :preview-src-list="[base64Url]" />
@@ -83,7 +93,7 @@
});
const formObj = ref({
  timeArray: [new Date('2025-07-01T00:00:00'), new Date('2025-08-31T23:59:59')],
  timeArray: [new Date('2025-07-01T00:00:00'), new Date('2025-09-30T23:59:59')],
  location: {}
});
@@ -108,6 +118,8 @@
      districtCode: formObj.value.location.dCode,
      districtName: formObj.value.location.dName
    },
    removeOtherDistrict: formObj.value.removeOtherDistrict,
    removeNoPollutedSource: formObj.value.removeNoPollutedSource,
    factorTypes: radioOptions(TYPE0).map((e) => e.name)
  };
});
@@ -133,16 +145,19 @@
      mainFactor: '',
      _abnormalFactors: '',
      sceneCount: 0,
      _kilometres: '1000'
      _kilometres: '1000',
      _keyScene: '1个国控点(静安监测站)和2个市控点(和田中学、市北高新)',
      exceptionCount: 0,
      _focusScene: ''
    }
  ],
  missionDetailList: [
    {
      _index: 1,
      missionCode: '',
      _startTime: '2025年07月29日',
      _time: '09:00至14:30',
      _kilometres: '1000',
      _keyScene: '1个国控点(静安监测站)和2个市控点(和田中学、市北高新)',
      _dataStatistics: [
        {
          factor: 'PM10',
@@ -223,7 +238,9 @@
};
const handleGenerateImg = () => {
  generateClueByRiskArea(params.value).then(() => {});
  generateClueByRiskArea(params.value).then(() => {
    generateDocx();
  });
};
function generateMissionSummary(param) {
@@ -314,29 +331,48 @@
}
function generateClueByRiskArea(param) {
  return dataAnalysisApi.fetchClueByRiskArea(param).then((res) => {
  const _param = {
    area: param.area,
    startTime: param.startTime,
    endTime: param.endTime,
    removeOtherDistrict: param.removeOtherDistrict,
    removeNoPollutedSource: param.removeNoPollutedSource
  };
  return dataAnalysisApi.fetchClueByRiskArea(_param).then((res) => {
    templateParam.clueByAreaList = res.data.map((item, index) => {
      return {
        _index: index + 1,
        _area: `${item.sceneInfo.type}${item.sceneInfo.name}周边`,
        // _area: `${item.sceneInfo.type}${item.sceneInfo.name}周边`,
        _area: `${item.township}`,
        clueByFactorList: item.clueByFactorList.map((cbf) => {
          return {
            factor: cbf.factor,
            clues: cbf.clues.map((clue) => {
              const _riskRegion = [];
              if (clue.pollutedArea.address) {
                _riskRegion.push(clue.pollutedArea.address);
              }
              if (clue.pollutedArea.streetNumber) {
                _riskRegion.push(clue.pollutedArea.streetNumber);
              }
              if (clue.pollutedArea.roadinter) {
                _riskRegion.push(clue.pollutedArea.roadinter);
              }
              return {
                _factorNames: Object.keys(clue.pollutedData.statisticMap)
                  .map((e) => e)
                  .join('、'),
                _time:
                  moment(clue.pollutedData.startTime).format('HH:mm:ss') +
                  moment(clue.pollutedData.startTime).format(
                    'YYYY-MM-DD HH:mm:ss'
                  ) +
                  ' - ' +
                  moment(clue.pollutedData.endTime).format('HH:mm:ss'),
                _riskRegion: clue.pollutedArea.address
                  ? clue.pollutedArea.address
                  : '',
                _riskRegion: _riskRegion.join(','),
                _exceptionType: clue.pollutedData.exception,
                _images: generateChartImg(clue.pollutedData),
                _conclusion: clue.pollutedSource.conclusion,
                _hasScene: clue.pollutedSource.sceneList.length > 0,
                _scenes:
                  clue.pollutedSource.sceneList.length > 0
                    ? clue.pollutedSource.sceneList
@@ -558,70 +594,6 @@
function handleMixClick({ tags = [10, 11], factorName = 'PM25' }) {
  generateGridFusion(params.value).then(() => {});
  // const fetchGridData = () => {
  //   gridApi.mixUnderwayGridData(props.groupId, tags).then((res) => {
  //     var min = 1000000;
  //     var max = 0;
  //     res.data.forEach((v) => {
  //       min = Math.min(min, getGridDataDetailFactorValue(v, factorName));
  //       max = Math.max(max, getGridDataDetailFactorValue(v, factorName));
  //     });
  //     const gridData = res.data.map((v) => {
  //       const data = getGridDataDetailFactorValue(v, factorName);
  //       const grid = gridCellList.value.find((g) => {
  //         return g.cellIndex == v.cellId;
  //       });
  //       // const { color, nextColor, range, nextRange } =
  //       //   Legend.getStandardColorAndNext('PM25', data);
  //       // const ratio = (data - range) / (nextRange - range);
  //       // const _color = getColorBetweenTwoColors(
  //       //   color.map((v) => v * 255),
  //       //   nextColor.map((v) => v * 255),
  //       //   ratio
  //       // );
  //       // 根据遥测数据计算网格颜色
  //       const { color, nextColor, range, nextRange } =
  //         Legend.getCustomColorAndNext(data, min, max);
  //       const ratio = (data - range) / (nextRange - range);
  //       const _color = getColorBetweenTwoColors(
  //         color.map((v) => v * 255),
  //         nextColor.map((v) => v * 255),
  //         ratio
  //       );
  //       return {
  //         centerLng: grid.longitude,
  //         centerLat: grid.latitude,
  //         value: _color,
  //         coordinates: [
  //           [grid.point1Lon, grid.point1Lat],
  //           [grid.point2Lon, grid.point2Lat],
  //           [grid.point3Lon, grid.point3Lat],
  //           [grid.point4Lon, grid.point4Lat]
  //         ]
  //       };
  //     });
  //     // chartMapAmap.generateGridMap(gridData).then((url) => {
  //     //   gridBase64Url.value = url;
  //     // });
  //     chartMap.generateGridMap(gridData).then((url) => {
  //       gridBase64Url.value = url;
  //     });
  //   });
  // };
  // if (gridCellList.value.length == 0) {
  //   gridApi
  //     .fetchGridCell(props.groupId)
  //     .then((res) => {
  //       gridCellList.value = res.data;
  //     })
  //     .then(() => fetchGridData());
  // } else {
  //   fetchGridData();
  // }
}
function generateDocx() {
@@ -754,3 +726,8 @@
  return `${datePart} ${startTimePart}至${endTimePart}`;
}
</script>
<style scoped>
.el-checkbox {
  --el-checkbox-text-color: white;
}
</style>