Files
sgxt_web/src/views/home/dialog/components/home_yj.vue

130 lines
3.7 KiB
Vue
Raw Normal View History

2025-07-14 17:31:24 +08:00
<template>
2025-08-27 17:26:29 +08:00
<DialogDragger title="预警详情" top="150px" v-model="props.show" @close="close">
2025-07-14 18:15:09 +08:00
<ul class="warningList" ref="gjyjList">
<li v-for="item in props.data" :key="item.id">
2025-08-27 17:26:29 +08:00
<YjItem :item="item" />
2025-07-14 17:31:24 +08:00
</li>
2025-07-14 18:15:09 +08:00
<MOSTY.Empty :show="props.data.length <= 0" :imgSize="150"></MOSTY.Empty>
2025-07-14 17:31:24 +08:00
</ul>
2025-08-27 17:26:29 +08:00
<div style="position:relative;width: 100%;" :style="{ height: `calc(100vh - ${handleHs}px)` }">
2025-10-26 12:25:50 +08:00
<GdMap v-if="showMap" :mapKey="'home_yj_map'" :mapid="'homeYjMap'" />
2025-08-06 14:25:36 +08:00
</div>
2025-07-14 17:31:24 +08:00
</DialogDragger>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
2025-08-06 14:25:36 +08:00
import GdMap from "@/components/GdMap/index.vue";
2025-07-14 17:31:24 +08:00
import DialogDragger from "@/views/home/layout/dialogDragger.vue";
import YjItem from "@/views/home/components/yjItem.vue";
2025-10-26 12:25:50 +08:00
import { ref, defineProps, onMounted, watch, getCurrentInstance } from "vue";
2025-07-14 17:31:24 +08:00
import emitter from "@/utils/eventBus.js";
const gjyjList = ref(null); //预警列表数据
2025-10-26 12:25:50 +08:00
const { proxy } = getCurrentInstance();
2025-07-14 17:31:24 +08:00
//参数传递
const props = defineProps({
//某条预警详情
data: {
2025-08-27 17:26:29 +08:00
type: Array,
default: []
2025-07-14 17:31:24 +08:00
},
show: {
2025-08-27 17:26:29 +08:00
type: Boolean,
default: false
2025-07-14 17:31:24 +08:00
},
});
2025-07-14 18:15:09 +08:00
2025-07-14 17:31:24 +08:00
//关闭
function close() {
2025-08-27 17:26:29 +08:00
emitter.emit('deletePointArea', 'home_yj_map');
emitter.emit("showHomeYJ", false);
2025-07-14 17:31:24 +08:00
}
2025-08-27 17:26:29 +08:00
const showMap = ref(false)
2025-08-06 14:25:36 +08:00
onMounted(() => {
setTimeout(() => {
showMap.value = true
setTimeout(() => {
2025-10-26 12:25:50 +08:00
// 只删除一次home_yj_map区域的点避免影响其他地图
emitter.emit('deletePointArea', 'home_yj_map');
// 收集所有有效坐标的数据点
const validPoints = [];
2025-08-06 14:25:36 +08:00
for (let i = 0; i < props.data.length; i++) {
2025-08-27 17:26:29 +08:00
const item = props.data[i];
2025-10-26 12:25:50 +08:00
// 修复重复的坐标判断条件
if (!item.jd || !item.wd) {
// 使用警告而不是return避免中断循环
console.warn("该预警没有坐标:", item);
continue;
}
validPoints.push(item);
2025-08-27 17:26:29 +08:00
}
2025-08-06 14:25:36 +08:00
2025-10-26 12:25:50 +08:00
// 如果有有效点,显示第一条并添加所有点
if (validPoints.length > 0) {
// 只显示第一条数据的详情
emitter.emit('showHomeYJ', [validPoints[0]]);
// 为每个有效点添加标记
validPoints.forEach((item, index) => {
let icon = require('@/assets/point/yj.png');
if (item.yjjb == '20') icon = require('@/assets/point/yj1.png');
if (item.yjjb == '30') icon = require('@/assets/point/yj2.png');
if (item.yjjb == '40') icon = require('@/assets/point/yj3.png');
// 为每个点添加唯一标识,避免与其他地图冲突
emitter.emit('addPointArea', {
flag: `home_yj_map_${index}`,
baseFlag: 'home_yj_map',
icon,
coords: [item]
});
});
2025-07-14 17:31:24 +08:00
2025-10-26 12:25:50 +08:00
// 只设置一次地图中心(使用第一个有效点)
emitter.emit('setMapCenter', {
location: [validPoints[0].jd, validPoints[0].wd],
zoomLevel: 10,
flag: 'home_yj_map' // 添加标识,确保只影响当前地图
});
}
}, 500);
2025-08-06 14:25:36 +08:00
}, 200);
})
2025-08-27 17:26:29 +08:00
const handleHs = ref(0)
2025-08-06 14:25:36 +08:00
watch(() => gjyjList.value, (val) => {
console.log(val.clientHeight);
2025-08-27 17:26:29 +08:00
handleHs.value = val.clientHeight + 198 + 150 + 20
}, { deep: true })
2025-07-14 17:31:24 +08:00
</script>
<style lang="scss" scoped>
@import "@/assets/css/homeScreen.scss";
2025-08-27 17:26:29 +08:00
2025-07-14 17:31:24 +08:00
.dialogBox {
2025-07-14 18:15:09 +08:00
z-index: 999;
2025-08-27 17:26:29 +08:00
ul.warningList {
2025-07-14 17:31:24 +08:00
height: calc(100vh - 198px);
overflow: hidden;
overflow-y: auto;
padding: 7px 10px;
box-sizing: border-box;
2025-08-27 17:26:29 +08:00
2025-07-14 17:31:24 +08:00
.photo {
width: 60px;
height: 80px;
2025-08-27 17:26:29 +08:00
2025-07-14 17:31:24 +08:00
img {
width: 100%;
height: 100%;
}
}
}
}
2025-08-27 17:26:29 +08:00
2025-07-14 17:31:24 +08:00
//加载时 取消背景
::v-deep .el-loading-mask {
background-color: transparent !important;
}
</style>