From 7f6661cca40e3530111d628222fa25462022ec78 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期四, 04 九月 2025 18:25:36 +0800 Subject: [PATCH] 2025.9.4 --- src/views/historymode/component/MissionReport.vue | 311 ++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 257 insertions(+), 54 deletions(-) diff --git a/src/views/historymode/component/MissionReport.vue b/src/views/historymode/component/MissionReport.vue index 2f55c67..8168286 100644 --- a/src/views/historymode/component/MissionReport.vue +++ b/src/views/historymode/component/MissionReport.vue @@ -72,6 +72,7 @@ import chartMapAmap from '@/utils/chart/chart-map-amap'; import { Legend } from '@/model/Legend'; import { getHexColor, getColorBetweenTwoColors } from '@/utils/color'; +import { getGridDataDetailFactorValue } from '@/model/GridDataDetail'; // 鍊熺敤鍗槦閬ユ祴妯″潡涓殑100绫崇綉鏍� const props = defineProps({ @@ -106,7 +107,8 @@ cityName: formObj.value.location.cName, districtCode: formObj.value.location.dCode, districtName: formObj.value.location.dName - } + }, + factorTypes: radioOptions(TYPE0).map((e) => e.name) }; }); @@ -174,6 +176,31 @@ } ] } + ], + gridFusionByAQIList: [ + { + pollutionDegree: '浼�', + _areaDes: '璧拌埅鍖哄煙澶у皬', + _gridDes: '100绫虫鏂瑰舰缃戞牸', + _missionDes: '20250729銆�20250730涓ゆ', + highRiskGridList: [ + { + index: 1, + factor: 'PM2.5', + // 鏍囧噯鑹茬綉鏍煎浘 + gridImgUrl1: '', + // 瀵规瘮鑹茬綉鏍煎浘 + gridImgUrl2: '', + factorValue: 20, + // 鍥涜嚦鑼冨洿锛岄『搴忎负鏈�灏忕粡搴︼紝鏈�澶х粡搴︼紝鏈�灏忕含搴︼紝鏈�澶х含搴� + bounds: [121.4945, 121.4955, 31.2304, 31.2314], + _boundsDes: '鍥涜嚦鑼冨洿', + // 娑夊強琛楅晣 + town: '', + _scenesDes: '娑夊強鐨勬薄鏌撳満鏅�' + } + ] + } ] }; @@ -183,7 +210,9 @@ generateMissionList(params.value).then(() => { generateMissionDetail(params.value).then(() => { generateClueByRiskArea(params.value).then(() => { - generateDocx(); + generateGridFusion(params.value).then(() => { + generateDocx(); + }); }); }); }); @@ -348,63 +377,237 @@ return images; } -function handleMixClick() { - const tags = [1, 2]; - const fetchGridData = () => { - gridApi.mixUnderwayGridData(props.groupId, tags).then((res) => { - const gridData = res.data.map((v) => { - const data = v.pm25; - const grid = gridCellList.value.find((g) => { - return g.cellIndex == v.cellId; +function generateGridFusion(param) { + return dataAnalysisApi.fetchGridFusion(param).then((res) => { + const promiseList = []; + templateParam.gridFusionByAQIList = []; + + res.data.forEach((item) => { + const scenes = []; + item.missionList.forEach((m) => { + m.keyScene.map((s) => { + if (scenes.indexOf(s.name) == -1) { + scenes.push(s.name); + } }); - 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; - // }); - gridBase64Url.value = chartMap.generateGridMap(gridData); + const gfbAQI = { + pollutionDegree: item.pollutionDegree, + _areaDes: `璧拌埅鍖哄煙缁忚繃${scenes.join('銆�')}`, + _gridDes: `${item.gridLen}绫虫鏂瑰舰缃戞牸`, + _missionDes: `${item.missionList.map((m) => m.missioncode).join('銆�')}${item.missionList.length}娆 + }; + const _highRiskGridList = []; + item.highRiskGridList.forEach((g, i) => { + const p = generateGridFusionImg(g.factorType, item.gridFusionList).then( + (url) => { + const { url1, url2 } = url; + _highRiskGridList.push({ + index: i + 1, + factor: 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.map((s) => s.name).join('銆�') + }); + } + ); + promiseList.push(p); + }); + gfbAQI.highRiskGridList = _highRiskGridList; + templateParam.gridFusionByAQIList.push(gfbAQI); }); - }; + return Promise.all(promiseList).then(() => { + return templateParam.gridFusionByAQIList; + }); + // templateParam.gridFusionByAQIList = res.data.map((item) => { + // const scenes = []; + // item.missionList.forEach((m) => { + // m.keyScene.map((s) => { + // if (scenes.indexOf(s.name) == -1) { + // scenes.push(s.name); + // } + // }); + // }); + // return { + // pollutionDegree: item.pollutionDegree, + // _areaDes: `璧拌埅鍖哄煙缁忚繃${scenes.join('銆�')}`, + // _gridDes: `${item.gridLen}绫虫鏂瑰舰缃戞牸`, + // _missionDes: `${item.missionList.map((m) => m.missioncode).join('銆�')}${item.missionList.length}娆, + // highRiskGridList: item.highRiskGridList.map(async (g, i) => { + // const { url1, url2 } = await generateGridFusionImg( + // g.factorType, + // item.gridFusionList + // ); + // return { + // index: i + 1, + // factor: 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.map((s) => s.name).join('銆�') + // }; + // }) + // }; + // }); + }); +} - if (gridCellList.value.length == 0) { - gridApi - .fetchGridCell(props.groupId) - .then((res) => { - gridCellList.value = res.data; - }) - .then(() => fetchGridData()); - } else { - fetchGridData(); +async function generateGridFusionImg(factorName, dataList) { + var min = 1000000; + var max = 0; + dataList.forEach((v) => { + min = Math.min(min, getGridDataDetailFactorValue(v.data, factorName)); + max = Math.max(max, getGridDataDetailFactorValue(v.data, factorName)); + }); + + const gridData = dataList.map((v) => { + const data = getGridDataDetailFactorValue(v.data, factorName); + const grid = v.cell; + + // 鏍囧噯鑹� + const { + color: color1, + nextColor: nextColor1, + range: range1, + nextRange: nextRange1 + } = Legend.getStandardColorAndNext(factorName, data); + const ratio1 = (data - range1) / (nextRange1 - range1); + const _color1 = getColorBetweenTwoColors( + color1.map((v) => v * 255), + nextColor1.map((v) => v * 255), + ratio1 + ); + + // 瀵规瘮鑹� + 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: _color1, + coordinates: [ + [grid.point1Lon, grid.point1Lat], + [grid.point2Lon, grid.point2Lat], + [grid.point3Lon, grid.point3Lat], + [grid.point4Lon, grid.point4Lat] + ] + }, + { + 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] + ] + } + ]; + }); + if (gridData[0] == undefined || gridData[1] == undefined) { + console.log(gridData); } + const url1 = await chartMap.generateGridMap(gridData[0]); + const url2 = await chartMap.generateGridMap(gridData[1]); + if (gridBase64Url.value == null) { + gridBase64Url.value = url1; + } + return { + url1, + url2 + }; +} + +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() { -- Gitblit v1.9.3