riku
2025-10-17 ec763e1cb7dca873caf4afbc0dfde047b51753d3
src/views/historymode/component/MissionReport.vue
@@ -33,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,6 +83,7 @@
import { Legend } from '@/model/Legend';
import { getHexColor, getColorBetweenTwoColors } from '@/utils/color';
import { getGridDataDetailFactorValue } from '@/model/GridDataDetail';
import { factorName } from '@/constant/factor-name';
// 借用卫星遥测模块中的100米网格
const props = defineProps({
@@ -339,55 +340,72 @@
    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.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);
              }
    templateParam.clueByAreaList = res.data
      .groupBy((e) => e.township)
      .map((item, index) => {
        const { key: township, values: clues } = item;
        return {
          _index: index + 1,
          // _area: `${item.sceneInfo.type}${item.sceneInfo.name}周边`,
          _area: `${township}`,
          clueByFactorList: clues
            .groupBy((e) => e.factorTag)
            .map((item2) => {
              const { key: factorTag, values: clues2 } = item2;
              const factorNames = [...new Set(clues2.flatMap((e) => e.factors))]
                .map((e) => factorName(e))
                .join('、');
              return {
                _factorNames: Object.keys(clue.pollutedData.statisticMap)
                  .map((e) => e)
                  .join('、'),
                _time:
                  moment(clue.pollutedData.startTime).format(
                    'YYYY-MM-DD HH:mm:ss'
                  ) +
                  ' - ' +
                  moment(clue.pollutedData.endTime).format('HH:mm:ss'),
                _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
                        .map(
                          (s, index) =>
                            `${index + 1}. ${s.name},${s.type},位于${s.location},距${s.closestStation.name}${parseInt(s.length)}米;`
                        )
                        .join('\n')
                    : '无'
                factor: factorNames,
                clues: clues2.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 {
                    _title:
                      (clue.pollutedArea.street ?? '') +
                      (clue.pollutedArea.streetNumber ?? '') +
                      (clue.pollutedArea.direction ?? ''),
                    _factorNames: Object.keys(clue.pollutedData.statisticMap)
                      .map((e) => factorName(e))
                      .join('、'),
                    _time:
                      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.street ?? '') +
                      (clue.pollutedArea.streetNumber ?? '') +
                      (clue.pollutedArea.direction ?? ''),
                    _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
                            .map(
                              (s, index) =>
                                `${index + 1}. ${s.name},${s.type},位于${s.location},距${s.closestStation.name}${parseInt(s.length)}米;`
                            )
                            .join('\n')
                        : '无'
                  };
                })
              };
            })
          };
        })
      };
    });
        };
      });
  });
}
@@ -445,7 +463,24 @@
        _missionDes: `${item.missionList.map((m) => m.missionCode).join('、')}共${item.missionList.length}次`
      };
      const _highRiskGridList = [];
      item.highRiskGridList.forEach((g, i) => {
      Object.keys(item.highRiskGridMap).forEach((key, i) => {
        const g = item.highRiskGridMap[key][0];
        const infoDes = item.highRiskGridMap[key].map((e) => {
          return {
            factorValue: g.factorValue,
            // 四至范围,顺序为最小经度,最大经度,最小纬度,最大纬度
            _boundsDes: `经度${g.bounds[0]}至${g.bounds[1]},纬度${g.bounds[2]}至${g.bounds[3]}`,
            // 涉及街镇
            town: g.town,
            _scenesDes:
              g.highRiskScenes.length > 0
                ? `涉及的污染场景包括${g.highRiskScenes.map((s) => s.name).join('、')}`
                : '网格内可能存在隐藏风险源'
          };
        });
        // })
        // item.highRiskGridList.forEach((g, i) => {
        // const g = item.highRiskGridList[0];
        // const i = 0;
        const p = generateGridFusionImg(g.factorType, item.gridFusionList).then(
@@ -453,20 +488,12 @@
            const { url1, url2 } = url;
            _highRiskGridList.push({
              index: i + 1,
              factor: g.factorType,
              factor: factorName(g.factorType),
              // 标准色网格图
              gridImgUrl1: url1,
              // 对比色网格图
              gridImgUrl2: url2,
              factorValue: g.factorValue,
              // 四至范围,顺序为最小经度,最大经度,最小纬度,最大纬度
              _boundsDes: `经度${g.bounds[0]}至${g.bounds[1]},纬度${g.bounds[2]}至${g.bounds[3]}`,
              // 涉及街镇
              town: g.town,
              _scenesDes:
                g.highRiskScenes.length > 0
                  ? `涉及的污染场景包括${g.highRiskScenes.map((s) => s.name).join('、')}`
                  : '网格内可能存在隐藏风险源'
              infoDes: infoDes
            });
          }
        );