| | |
| | | <button @click="handleSend">send</button> |
| | | <button @click="handleLink">link</button> |
| | | </div> --> |
| | | <div>动态溯源</div> |
| | | <!-- <div> |
| | | <el-text type="primary" size="large" tag="b">动态溯源</el-text> |
| | | </div> --> |
| | | <el-scrollbar ref="scrollbarRef" :height="height" class="scrollbar"> |
| | | <div ref="scrollContentRef"> |
| | | <div v-for="(item, index) in streams" :key="index"> |
| | | <el-row gap="4"> |
| | | <el-text type="primary">发生时间:</el-text> |
| | | <!-- <el-tag v-if="index == 0" type="danger">最新</el-tag> --> |
| | | <el-text type="primary">{{ |
| | | item.pollutedData.startTime + ' 至 ' |
| | | }}</el-text> |
| | | <el-text type="primary">{{ |
| | | '线索时间:' + |
| | | item.pollutedData.startTime + |
| | | ' - ' + |
| | | item.pollutedData.endTime |
| | | }}</el-text> |
| | | </el-row> |
| | | <div>污染区域:{{ item.pollutedArea.address }}</div> |
| | | <div>污染距离:{{ item.pollutedArea.distanceType }}</div> |
| | | <div> |
| | | <el-text type="primary"> |
| | | 污染区域:{{ item.pollutedArea.address }} |
| | | </el-text> |
| | | </div> |
| | | <div> |
| | | <el-text type="primary"> |
| | | 溯源距离:{{ |
| | | formatDistanceType(item.pollutedArea.distanceType) |
| | | }} |
| | | </el-text> |
| | | </div> |
| | | <el-row> |
| | | <el-col :span="6"> |
| | | <el-statistic title="因子" :value="item.pollutedData.factorName" /> |
| | | <el-statistic |
| | | title="突变因子" |
| | | :value="item.pollutedData.factorName" |
| | | /> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-statistic title="变化幅度" :value="formatPercentage(item.pollutedData.avgPer)" /> |
| | | <el-statistic |
| | | title="变化幅度" |
| | | :value="formatPercentage(item.pollutedData.avgPer)" |
| | | /> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-statistic title="发生次数" :value="item.pollutedData.times" /> |
| | | <el-statistic |
| | | title="发生次数" |
| | | :value="item.pollutedData.times" |
| | | /> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-statistic |
| | | title="平均风速" |
| | | :value="item.pollutedData.windSpeed" |
| | | suffix="m/s" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row justify="space-between"> |
| | | <el-link |
| | | type="primary" |
| | | underline |
| | | @click="item.showMore = !item.showMore" |
| | | > |
| | | {{ |
| | |
| | | ')' |
| | | }} |
| | | </el-link> |
| | | <el-link type="primary" @click="drawPolygon(item.pollutedArea)"> |
| | | 查看异常 |
| | | <el-link |
| | | type="primary" |
| | | underline |
| | | @click="drawPolygon(item.pollutedArea)" |
| | | > |
| | | 定位异常 |
| | | </el-link> |
| | | </el-row> |
| | | <div v-show="item.showMore" style="width: 320px; height: 140px"> |
| | | <RealTimeLineChart |
| | | v-for="(item1, index1) in item._chartOptions" |
| | | :key="index1" |
| | | :model-value="item1" |
| | | ></RealTimeLineChart> |
| | | </div> |
| | | <SceneTable |
| | | v-show="item.showMore" |
| | | :show-marks="item.showMore" |
| | | :scene-list="item.pollutedSource.sceneList" |
| | | ></SceneTable> |
| | | <el-divider /> |
| | |
| | | import marks from '@/utils/map/marks'; |
| | | import { map, onMapMounted } from '@/utils/map/index_old'; |
| | | import { FactorDatas } from '@/model/FactorDatas'; |
| | | import factorDataParser from '@/utils/chart/factor-data-parser'; |
| | | |
| | | const START_STR = '##'; |
| | | const SPLIT_STR = '&&'; |
| | |
| | | // 污染线索 PollutedClue |
| | | if (type == '1') { |
| | | const obj = JSON.parse(content); |
| | | obj.showMore = true; |
| | | console.log('污染线索: ', obj); |
| | | drawPolygon(obj.pollutedArea); |
| | | parseChartData(obj); |
| | | if (streams.length == 0) { |
| | | streams.push(obj); |
| | | } else { |
| | | streams.forEach((s) => { |
| | | s.showMore = false; |
| | | }); |
| | | streams.unshift(obj); |
| | | show.value = true; |
| | | } |
| | | |
| | | // scrollToBottom(); |
| | | scrollToTop(); |
| | | |
| | | drawPolygon(obj.pollutedArea); |
| | | } |
| | | // 污染分析结果 AnalysisResult |
| | | else if (type == '2') { |
| | |
| | | path: bounds, //多边形轮廓线的节点坐标数组 |
| | | fillOpacity: 0, //多边形填充透明度 |
| | | fillColor: '#CCF3FF', //多边形填充颜色 |
| | | // strokeColor: '#ffffff' //线条颜色 |
| | | strokeColor: '#0552f7', //线条颜色 |
| | | strokeColor: '#02ffea', //线条颜色 |
| | | // strokeColor: '#0552f7', //线条颜色 |
| | | strokeStyle: 'dashed', |
| | | zIndex: 9 |
| | | }); |
| | | map.setFitView(); |
| | | } |
| | | |
| | | function parseChartData(obj) { |
| | | const factorDatas = new FactorDatas(); |
| | | factorDatas.setData(obj.pollutedData.dataVoList, 0, () => { |
| | | obj._chartOptions = factorDataParser.parseData(factorDatas, [ |
| | | { |
| | | label: obj.pollutedData.factorName, |
| | | name: obj.pollutedData.factorName, |
| | | value: obj.pollutedData.factorId + '' |
| | | } |
| | | ]); |
| | | console.log('折线图:', obj._chartOptions); |
| | | }); |
| | | } |
| | | |
| | | function formatPercentage(value) { |
| | | return Math.round(value * 100) + '%' |
| | | return Math.round(value * 100) + '%'; |
| | | } |
| | | |
| | | function formatDistanceType(value) { |
| | | switch (value) { |
| | | case 'TYPE1': |
| | | return '50米'; |
| | | case 'TYPE2': |
| | | return '50米 - 500米'; |
| | | case 'TYPE3': |
| | | return '50米 - 1公里'; |
| | | case 'TYPE4': |
| | | return '50米 - 2公里'; |
| | | |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | /******************************************************************************************************************** */ |
| | |
| | | --el-text-color: white; |
| | | } |
| | | |
| | | :deep(.el-link) { |
| | | --el-link-text-color: #23dad1; |
| | | } |
| | | |
| | | .scrollbar { |
| | | min-width: 300px; |
| | | /* color: #02ffea; */ |
| | | } |
| | | </style> |