From ec763e1cb7dca873caf4afbc0dfde047b51753d3 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 17 十月 2025 17:26:54 +0800
Subject: [PATCH] 2025.10.17

---
 /dev/null                                         |    0 
 src/utils/expand/expand.js                        |   15 +++++
 public/underway_season_report.docx                |    0 
 src/components.d.ts                               |    1 
 src/views/historymode/component/MissionReport.vue |  145 ++++++++++++++++++++++++++++-------------------
 5 files changed, 101 insertions(+), 60 deletions(-)

diff --git "a/public/underway_season_report - \345\211\257\346\234\254.docx" "b/public/underway_season_report - \345\211\257\346\234\254.docx"
deleted file mode 100644
index 1a822ce..0000000
--- "a/public/underway_season_report - \345\211\257\346\234\254.docx"
+++ /dev/null
Binary files differ
diff --git a/public/underway_season_report.docx b/public/underway_season_report.docx
index 3b709a4..5e6f7d4 100644
--- a/public/underway_season_report.docx
+++ b/public/underway_season_report.docx
Binary files differ
diff --git a/src/components.d.ts b/src/components.d.ts
index c67b3a0..8ecc1ef 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -38,7 +38,6 @@
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
     ElIcon: typeof import('element-plus/es')['ElIcon']
-    ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
     ElLink: typeof import('element-plus/es')['ElLink']
diff --git a/src/utils/expand/expand.js b/src/utils/expand/expand.js
index 49eb52f..cda8235 100644
--- a/src/utils/expand/expand.js
+++ b/src/utils/expand/expand.js
@@ -30,3 +30,18 @@
   const s = size > this.length ? 0 : this.length - size;
   return this.slice(s, l);
 };
+
+Array.prototype.groupBy = function (func) {
+  const groups = {};
+  this.forEach((item) => {
+    const key = func(item);
+    if (!groups[key]) {
+      groups[key] = [];
+    }
+    groups[key].push(item);
+  });
+  return Object.keys(groups).map((key) => ({
+    key,
+    values: groups[key]
+  }));
+};
diff --git a/src/views/historymode/component/MissionReport.vue b/src/views/historymode/component/MissionReport.vue
index e45fe4b..422c678 100644
--- a/src/views/historymode/component/MissionReport.vue
+++ b/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
             });
           }
         );

--
Gitblit v1.9.3