From 08ffcf9d7ffafaa82d8de7f9b5fcfdb49e9c3688 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 05 十一月 2025 17:33:54 +0800
Subject: [PATCH] 动态溯源 1. 修复CO因子文本没有正常显示的问题;
---
src/views/sourcetrace/component/PollutedClueItem.vue | 304 +++++++++++++++++++++++---------------------------
1 files changed, 142 insertions(+), 162 deletions(-)
diff --git a/src/views/sourcetrace/component/PollutedClueItem.vue b/src/views/sourcetrace/component/PollutedClueItem.vue
index 392d271..5208f16 100644
--- a/src/views/sourcetrace/component/PollutedClueItem.vue
+++ b/src/views/sourcetrace/component/PollutedClueItem.vue
@@ -1,186 +1,166 @@
<template>
- <!-- <BaseCard>
- <template #content> -->
- <el-scrollbar class="clue-card">
- <el-row justify="space-between">
- <!-- <el-tag v-if="index == 0" type="danger">鏈�鏂�</el-tag> -->
- <el-text type="primary">{{
- '绾跨储鏃堕棿锛�' +
- item.pollutedData.startTime +
- ' - ' +
- item.pollutedData.endTime
- }}</el-text>
- <el-link
- type="primary"
- :underline="true"
- @click="showMarksAndPolygon(item)"
- >
- {{ item.showMore ? '鏀惰捣寮傚父' : '瀹氫綅寮傚父' }}
- </el-link>
- </el-row>
- <div>
- <el-text type="primary">
- 姹℃煋鍖哄煙锛歿{ item.pollutedArea.address }}
- </el-text>
- </div>
- <div>
- <el-text type="primary">
- 婧簮璺濈锛歿{ formatDistanceType(item.pollutedArea.distanceType) }}
- </el-text>
- </div>
- <div>
- <el-text type="primary">
- 寮傚父绫诲瀷锛歿{ item.pollutedData.exception }}
- </el-text>
- </div>
- <el-row style="border-top: 1px solid white">
- <el-col :span="6">
- <el-statistic title="绐佸彉鍥犲瓙" :value="item.pollutedData.factorName" />
- </el-col>
- <el-col :span="6">
- <el-statistic
- title="鍙樺寲骞呭害"
- :value="formatPercentage(item.pollutedData.avgPer)"
- />
- </el-col>
- <el-col :span="6">
- <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="showMarksAndPolygon(item)"
- >
- {{
- (item.showMore ? '鏀惰捣婧簮鍦烘櫙' : '鏌ョ湅婧簮鍦烘櫙') +
- '锛�' +
- item.pollutedSource.sceneList.length +
- '锛�'
- }}
- </el-link> -->
- </el-row>
- <!-- <div style="width: 320px; height: 80px"> -->
- <RealTimeLineChart
- v-for="(item1, index1) in item._chartOptions"
- :key="index1"
- :model-value="item1"
- chart-height="80px"
- ></RealTimeLineChart>
- <!-- </div> -->
- <div class="border-dashed">
- <el-text type="" tag="mark">
- {{ item.pollutedSource.conclusion }}
- </el-text>
- </div>
- <SceneTable
- :show-marks="item.showMore"
- :scene-list="item.pollutedSource.sceneList"
- ></SceneTable>
+ <!-- <CardDialog
+ :model-value="modelValue"
+ @update:model-value="handleDialogShow"
+ title="姹℃煋绾跨储"
+ draggable
+ :modal="false"
+ width="400px"
+ >
+ <template #default> -->
+ <BaseCard v-if="item" v-show="modelValue">
+ <template #content>
+ <el-scrollbar class="clue-card">
+ <el-row justify="space-between" align="bottom">
+ <el-text type="danger" style="font-weight: 600" size="large">
+ 姹℃煋绾跨储
+ </el-text>
- <!-- <el-space gap="4">
- <el-tag :type="item.status == 1 ? 'danger' : 'info'">{{
- item._statusStr
- }}</el-tag>
- <el-text type="default">{{ item.exception }}</el-text>
- </el-space>
- <el-row gap="4">
- <el-text type="primary">鍙戠敓鏃堕棿锛�</el-text>
- <el-text type="primary">{{
- item.startTime + ' 鑷� '
- }}</el-text>
- <el-text type="primary">{{
- item.status == 1 ? '褰撳墠' : item.endTime
- }}</el-text>
- </el-row>
- <el-row>
- <el-col :span="6">
- <el-statistic title="鍥犲瓙" :value="item.factorName" />
- </el-col>
- <el-col :span="6">
- <el-statistic title="鍧囧��" :value="item.avg" />
- </el-col>
- <el-col :span="6">
- <el-statistic title="宄板��" :value="item.max" />
- </el-col>
- <el-col :span="6">
- <el-statistic title="璋峰��" :value="item.min" />
- </el-col>
- </el-row>
- <el-row justify="space-between">
- <el-link
- type="primary"
- @click="item.showMore = !item.showMore"
- >
- {{
- (item.showMore ? '鏀惰捣婧簮鍦烘櫙' : '鏌ョ湅婧簮鍦烘櫙') +
- '锛�' +
- item.relatedSceneList.length +
- '锛�'
- }}
- </el-link>
- <el-link type="primary" @click="drawSector(item)">
- 鏌ョ湅寮傚父
- </el-link>
- </el-row>
- <SceneTable
- v-show="item.showMore"
- :scene-list="item.relatedSceneList"
- ></SceneTable>
- <el-divider /> -->
- </el-scrollbar>
+ <el-link
+ type="info"
+ :underline="true"
+ @click="handleDialogShow(!modelValue)"
+ >
+ {{ modelValue ? '鏀惰捣' : '鎵撳紑' }}
+ <el-icon size="large"><CircleClose /></el-icon>
+ </el-link>
+ </el-row>
+ <el-row>
+ <el-text type="info" size="small">{{ item._timestr }}</el-text>
+ </el-row>
+ <el-space>
+ <el-icon color="#F56C6C" :size="40"><WarnTriangleFilled /></el-icon>
+ <el-text type="info">
+ {{ item.advice }}
+ </el-text>
+ </el-space>
+ <el-row justify="space-between">
+ <el-text type="info" size="small">
+ 鎺ㄨ崘璺嚎鎬婚暱{{ item.direction.distance }}绫�
+ </el-text>
+ <el-link type="info" size="small" @click="showPolyline">
+ {{ lineShow ? '鏀惰捣璺嚎' : '瀹氫綅璺嚎' }}
+ </el-link>
+ </el-row>
+ <SceneTable
+ :show-marks="lineShow"
+ :scene-list="formatSceneList(item.sortedSceneList)"
+ >
+ <el-table-column prop="_count" width="42" label="婧簮娆℃暟" />
+ </SceneTable>
+ </el-scrollbar>
+ </template>
+ </BaseCard>
<!-- </template>
- </BaseCard> -->
+ <template #footer> </template>
+ </CardDialog> -->
</template>
<script setup>
-import { ref } from 'vue';
+import { ref, onMounted, onUnmounted, reactive, watch } from 'vue';
+
+import { sceneTypes, sceneIcon } from '@/constant/scene-types';
+import mapLine from '@/utils/map/line';
+import mapUtil from '@/utils/map/util';
+import marks from '@/utils/map/marks';
const props = defineProps({
+ modelValue: Boolean,
item: Object
});
-</script>
-<style scoped>
-:deep(.el-statistic) {
- --el-statistic-title-color: rgb(215, 215, 215);
- --el-statistic-content-color: white;
+
+const lineShow = ref(true);
+// 涓婁竴鏉″鑸矾绾�
+let lastPolyline = undefined;
+// 涓婁竴涓鑸洰鐨勫湴
+// let lastDestination = undefined;
+// let layer = undefined;
+
+const emits = defineEmits(['update:modelValue']);
+
+watch(
+ () => [props.item, props.modelValue],
+ (nV, oV) => {
+ // 绾跨储淇℃伅鍙樻洿鍚庯紝閲嶆柊缁樺埗璺嚎鍥�
+ if (nV[0] != oV[0]) {
+ const polyline = mapLine.drawDirection(
+ nV[0].direction.paths.map((v) => [v.first, v.second])
+ );
+ // polylineList.unshift(polyline);
+ if (lastPolyline) {
+ mapUtil.removeViews(lastPolyline);
+ }
+ lastPolyline = polyline;
+ lineShow.value = true;
+ }
+ // 鏄剧ず闅愯棌鍙樺寲鏃讹紝瀵瑰簲鏄剧ず鎴栭殣钘忚矾绾�
+ else if (nV[1] != oV[1]) {
+ // showPolyline(nV[1]);
+ handleDialogShow(nV[1]);
+ }
+ }
+);
+
+function showPolyline(show) {
+ if (typeof show === 'boolean') {
+ lineShow.value = show;
+ } else {
+ lineShow.value = !lineShow.value;
+ }
+
+ if (lineShow.value && lastPolyline) {
+ mapUtil.addViews(lastPolyline);
+ } else {
+ mapUtil.removeViews(lastPolyline);
+ }
}
-:deep(.el-text.el-text--primary) {
+// function removeLayer() {
+// if (layer != undefined) {
+// mapUtil.removeViews(layer);
+// layer = undefined;
+// }
+// }
+
+// function drawMarks(sceneList) {
+// removeLayer();
+// if (sceneList.length != 0) {
+// const icons = [];
+// sceneList.forEach((s) => {
+// icons.push(sceneIcon(s.typeId));
+// });
+// layer = marks.createLabelMarks(icons, sceneList, false);
+// }
+// }
+
+function formatSceneList(sceneList) {
+ return sceneList.map((v) => {
+ return {
+ ...v.first,
+ _count: v.second
+ };
+ });
+}
+
+function handleDialogShow(value) {
+ showPolyline(value);
+ emits('update:modelValue', value);
+}
+</script>
+<style scoped>
+/* :deep(.el-text.el-text--primary) {
--el-text-color: white;
}
:deep(.el-link) {
--el-link-text-color: #23dad1;
-}
-
-.scrollbar {
- min-width: 300px;
- max-width: 60vw;
- /* height: 35vh; */
- /* color: #02ffea; */
-}
+} */
.clue-card {
padding: 0 4px;
/* margin-right: 2px; */
width: 340px;
- height: 35vh;
- border-right: 1px solid white;
+ height: 360px;
+ /* border-right: 1px solid white; */
border-radius: 2px;
-}
-
-.border-dashed {
- /* border: 1px dashed white; */
- border: 1px dashed #ffbc58;
- padding: 0px 1px;
- margin-bottom: 4px;
}
</style>
--
Gitblit v1.9.3