1.新需求2025.9.19新需求:
去掉"健康监测"副屏, 修改后健康终端报警点击查看详情弹出告警记录分页列表;
去掉【体检人数统计】【体检数据】【健康打卡数据】,增加【心血管监测】模块功能,【心血管监测】功能将原心血管监测大屏上的内容整理并移动到急救服务平台大屏中;
员工求助时,地图中推荐两个医院、两个健康小屋、两个AED坐标信息,并按距离排序,体现距离远近顺序;
地图中油田医院、健康小屋等各个图例,显示总数信息;
救护车坐标信息维护,并在大屏上标记;
右上角"增加【救助信息】板块, 当出现应急弹窗后或从今日应急选中应急事件 , 该板块需展示应急事件的相关信息(开发中);
This commit is contained in:
2025-09-24 20:53:28 +08:00
parent a97d9c64aa
commit c7abcf1f67
29 changed files with 1783 additions and 175 deletions
+43 -53
View File
@@ -48,7 +48,7 @@
<div v-show="false" id="panel"></div>
<div class="map-legend">
<div v-for="(item, i) in legendList" :key="i" class="legend-item">
<div :style="{ color: item.color }"><img :src="item.img" alt="" class="legend-img" /> {{ item.text }} </div>
<div :style="{ color: item.color }"><img :src="item.img" alt="" class="legend-img" /> {{ item.text }}({{ numList[i] }}) </div>
</div>
</div>
</div>
@@ -64,38 +64,17 @@
</div>
<div class="hospital-list" :class="[themeType]" v-if="showMapBottom">
<!-- <div class="hospital-item" v-for="(item, index) in hospitalList" :key="index" @click.stop="showDrivingLine(item)">-->
<!-- <div>{{ item?.name }}</div>-->
<!-- <div>相距{{ item?.distance }}</div>-->
<!-- <div>驾车大约{{ item?.driveTime }}</div>-->
<!-- </div>-->
<div class="map-bottom">
<div>
<div class="title">关爱联络员</div>
<template v-if="mapBottomInfo?.careLiaisonName && mapBottomInfo?.careLiaisonPhone">
<div>{{ mapBottomInfo?.careLiaisonName }}</div>
<div>{{ mapBottomInfo?.careLiaisonPhone }}</div>
</template>
<template v-else>
<div class="no-data"> 该员工暂未设置关爱联络员 <img :src="pointPng" alt="" /></div>
</template>
</div>
<div>
<div class="title">急救人员</div>
<template v-if="mapBottomInfo?.lifeguardName && mapBottomInfo?.lifeguardPhone">
<div>{{ mapBottomInfo?.lifeguardName }}</div>
<div>{{ mapBottomInfo?.lifeguardPhone }}</div>
</template>
<template v-else>
<div class="no-data"> 该员工暂未设置急救人员 <img :src="pointPng" alt="" /></div>
</template>
<img :src="noLocationPng" alt="" />
</div>
<div> 未获取到当前救助人员的位置信息 </div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { nextTick, onMounted, ref, watch } from 'vue';
import { nextTick, onMounted, reactive, ref, watch } from 'vue';
import { infoContent, infoContent1, infoContent4, legendList, tabList } from '/@/views/indexSun/indexSun.ts';
import { message } from 'ant-design-vue';
import { innerLineLight, outerLineOption } from '/@/assets/mapUtils/mapConstant.ts';
@@ -106,8 +85,11 @@
import { earlyWarning } from '/@/utils/busConstant.ts';
import { useTheme } from '/@/hooks/theme/useTheme.ts';
import { RedoOutlined } from '@ant-design/icons-vue';
import pointPng from '/@/assets/indexSun/point.png';
import { useUserStore } from '/@/store/modules/user.ts';
import noLocationPng from '/@/assets/images/map/noLocation.png';
const useDetail = useDetailStore();
const useStore = useUserStore();
const { themeType } = useTheme();
const list = ref(tabList);
const currentIndex = ref(0);
@@ -116,6 +98,8 @@
start: '',
end: '',
});
// 1 aed 2 健康小屋 3 油田医院 4 救护车
const numList = reactive([useStore.getTypeThree, useStore.getTypeOne, useStore.getTypeFive, useStore.getTypeFour]);
const props = defineProps({
//是否展示底部统计
showFooter: {
@@ -139,16 +123,11 @@
return [];
},
},
mapBottomInfo: {
type: Object,
default: () => {},
},
showMapBottom: {
type: Boolean,
default: () => false,
},
});
const useDetail = useDetailStore();
const showRoutePanel = ref(false);
const panelTitle = ref();
const level = ref(0);
@@ -312,6 +291,16 @@
async function getMapData(type, params = { type: '' }) {
try {
const { code, result } = await mapApiSwitch(type, params);
if (!params.type) {
// aed
useStore.setTypeFour(result ? result.filter((item: any) => item?.type === '4').length : 0);
// 健康小屋
useStore.setTypeThree(result ? result.filter((item: any) => item?.type === '3').length : 0);
// 油田医院
useStore.setTypeOne(result ? result.filter((item: any) => item?.type === '1').length : 0);
// 救护车
useStore.setTypeFive(result ? result.filter((item: any) => item?.type === '5').length : 0);
}
if (code == 200) {
if (Array.isArray(result) && result.length > 0) {
Map.createOverlay(
@@ -403,6 +392,10 @@
changeTab(list.value[currentIndex.value === 4 ? 0 : currentIndex.value], currentIndex.value);
emits('showRestB');
}
defineExpose({
resetMap,
});
</script>
<style lang="less" scoped>
@@ -767,31 +760,28 @@
.map-bottom {
border-radius: 10px;
background: #073148;
width: 570px;
height: 100px;
padding: 5px 0;
display: flex;
line-height: 30px;
> div {
width: 50%;
text-align: center;
}
.title {
color: #45ffa1;
}
.no-data {
display: flex;
flex: 1;
justify-content: center;
align-items: center;
height: 60px;
line-height: 60px;
img {
width: 20px;
height: 20px;
width: 100%;
&:nth-child(1) {
display: flex;
justify-content: center;
padding: 0 0 12px;
img {
width: 100px;
height: 70px;
}
}
&:nth-child(2) {
height: 60px;
line-height: 60px;
text-align: center;
background: rgba(242, 68, 57, 0.3);
color: #f24439;
font-size: 18px;
font-weight: bold;
}
}
}