959 lines
33 KiB
Vue
959 lines
33 KiB
Vue
<template>
|
|
<div class="sun-screen-box" ref="pageRef">
|
|
<login-out-button out-url="login" />
|
|
<div class="sun-screen-title">
|
|
<div class="sun-title-left">
|
|
{{ dateInfo?.day }} {{ dateInfo?.times }}<span style="margin-left: 30px">{{ rightDate }}</span>
|
|
</div>
|
|
<div class="sun-title-center">{{ getCenterInfo.screenTitle || '健康服务中心' }}</div>
|
|
<div class="sun-title-right">
|
|
<a-button class="top-right-button" @click="toZ">咨询服务平台</a-button>
|
|
<a-button class="top-right-button" @click="toOther" :loading="otherLoading">健康监测平台</a-button>
|
|
</div>
|
|
</div>
|
|
<div class="sun-body-content">
|
|
<div class="sun-body-left">
|
|
<div class="sun-body-left-one">
|
|
<OneL @handle-click="handleOneLeftClick" :center-id="centerId" :bKey="`one-l-${count}`" />
|
|
</div>
|
|
<div class="sun-body-left-two">
|
|
<twoL @handle-view="handleTwoLClick" :center-id="centerId" :bKey="`two-l-${count}`" />
|
|
</div>
|
|
<div class="sun-body-left-three">
|
|
<three-left-new :bKey="`three-l-n-${count}`" :center-id="centerId" @handle-view="handlePieView" />
|
|
<!-- <threeL />-->
|
|
<!-- <threeNewL :bKey="`three-l-${count}`" :center-id="centerId" />-->
|
|
</div>
|
|
<!-- <div class="sun-body-left-four" style="margin-bottom: 0">-->
|
|
<!-- <threeR @handle-click="handleThreeRClick" :center-id="centerId" :bKey="`four-l-${count}`" />-->
|
|
<!-- </div>-->
|
|
</div>
|
|
<div class="sun-body-center">
|
|
<CenterMap
|
|
ref="centerMapRef"
|
|
:showHospitalList="showHospitalList"
|
|
:hospitalList="hospitalList"
|
|
@clear-hospital-list="clearHospitalList"
|
|
@handle-last-seven="handleLastSeven"
|
|
:show-rest-b="showRestB"
|
|
:user-data="userData"
|
|
@handle-detail="handleCenterMapClick"
|
|
:show-map-bottom="showMapBottom"
|
|
@show-rest-b="
|
|
() => {
|
|
userData = {};
|
|
showRestB = false;
|
|
showMapBottom = false;
|
|
}
|
|
"
|
|
/>
|
|
</div>
|
|
<div class="sun-body-right">
|
|
<div class="sun-body-right-one">
|
|
<one-right-new :user-data="userData" @handle-view="handleOneRightView" @handle-emer="handleEmer" />
|
|
</div>
|
|
<div class="sun-body-right-two">
|
|
<oneR
|
|
@handle-view="handleOneRClick"
|
|
@show-reset="
|
|
() => {
|
|
showRestB = true;
|
|
}
|
|
"
|
|
:bKey="`one-r-${count}`"
|
|
/>
|
|
</div>
|
|
<div class="sun-body-right-three">
|
|
<two-new-r ref="twoNewR" :center-id="centerId" :bKey="`two-n-r-${count}`" @handle-view="handleTwoNewRClick" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<PhoneDialog ref="phoneDialogRef" :title="phoneDialogTitle" :useForm="true" :setting="setting" :phoneType="phoneType" />
|
|
<!-- 健康监测弹窗 -->
|
|
<EmployeeDialog ref="employeeDialogRef" :record="socketData" @confirm-help="confirmHelp" :get-container="() => pageRef" />
|
|
<!-- 应急、120弹窗 -->
|
|
<EmergencyDialog ref="emergencyDialogRef" :record="socketData1" @confirm-help="confirmHelp" :get-container="() => pageRef" />
|
|
<IndexModal
|
|
ref="indexModalRef"
|
|
:api="modalApi"
|
|
:api-params="apiParams"
|
|
:title="indexModalTitle"
|
|
:useForm="true"
|
|
:column="indexColumn"
|
|
:firstForm="firstFormOne"
|
|
:need-dept="needDept"
|
|
:need-date-picker="needDatePicker"
|
|
:date-time-arr="dateTimeArr"
|
|
:twoROnly="twoROnly"
|
|
>
|
|
<template #bodyCell="{ column, record }">
|
|
<template v-if="column.dataIndex === 'd'">
|
|
<template v-if="record?.emergencyType != 2">
|
|
<template v-if="record?.latitude && record?.longitude">
|
|
<environment-outlined style="height: auto !important; color: #178ef2 !important" @click="forHelp(record)" />
|
|
</template>
|
|
<template v-else>
|
|
<span style="color: red">未获取到位置信息</span>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
<template v-if="column.dataIndex === 'cz'">
|
|
<a-button type="link" @click="forHelp(record, false)">求助信息</a-button>
|
|
</template>
|
|
<template v-if="column.dataIndex === 'gName'">
|
|
<a-button type="link" @click="openRBModal(record)">{{ record?.name }}</a-button>
|
|
</template>
|
|
</template>
|
|
</IndexModal>
|
|
<heart-modal ref="heartModalRef" :get-container="() => pageRef" />
|
|
<emer-modal ref="emerRef" :get-container="() => pageRef" />
|
|
</template>
|
|
<script setup lang="ts">
|
|
import { EnvironmentOutlined } from '@ant-design/icons-vue';
|
|
import OneL from '/@/views/indexSun/oneL.vue';
|
|
import twoL from '/@/views/indexSun/twoL.vue';
|
|
import oneR from '/@/views/indexSun/oneR.vue';
|
|
import CenterMap from '/@/views/indexSun/centerMap.vue';
|
|
import { ServerDetailType } from '/@/components/body-d-left/bodyLeftHooks.ts';
|
|
import {
|
|
centerMapColumns,
|
|
centerMapFromList,
|
|
columns,
|
|
contactListColumns,
|
|
fromLists,
|
|
infoContentSpecial,
|
|
monitorColumns,
|
|
oneRNewColumns,
|
|
pieColumns,
|
|
pieSearch,
|
|
threeRModalColumns,
|
|
threeRModalFromList,
|
|
towRcolumns,
|
|
twoRform,
|
|
twoRNewColumns,
|
|
twoRNewForm,
|
|
} from '/@/views/indexSun/indexSun.ts';
|
|
import { nextTick, onMounted, onUnmounted, ref, watch } from 'vue';
|
|
import PhoneDialog from '/@/views/components/phoneDialog/phoneDialog.vue';
|
|
import { DataType, getSettings } from '/@/utils/settings.ts';
|
|
import IndexModal from '/@/views/indexSun/indexModal.vue';
|
|
import LoginOutButton from '/@/views/components/loginOutButton.vue';
|
|
import router from '/@/router';
|
|
import { getAuthCache } from '/@/utils/auth.ts';
|
|
import { basicPath, useSocket, emergencyPath } from '/@/utils/socket.ts';
|
|
import { Map } from '/@/assets/mapUtils/map.ts';
|
|
import EmployeeDialog from '/@/views/components/employeeDialog.vue';
|
|
import EmergencyDialog from '/@/views/components/emergencyDialog.vue';
|
|
import { handleSocketUrl, startTime } from '/@/utils/utils.ts';
|
|
import { useUserStore } from '/@/store/modules/user.ts';
|
|
|
|
const { getCenterInfo, setCount } = useUserStore();
|
|
import {
|
|
careUserApi,
|
|
contactListApi,
|
|
nearResourcesApi,
|
|
oneLApi,
|
|
oneRApi,
|
|
queryAnYanTokenApi,
|
|
roomDetailApi,
|
|
threeRModalApi,
|
|
todayEmergencyListApi,
|
|
twoLModalApi,
|
|
twoRModal1Api,
|
|
twoRModal2Api,
|
|
twoRModal3Api,
|
|
twoRNApi,
|
|
twoRNDetailApi,
|
|
watchPageApi,
|
|
} from '/@/views/indexSun/indexSun.api.ts';
|
|
import dayjs from 'dayjs';
|
|
import ThreeLeftNew from '/@/views/indexSun/threeLeftNew.vue';
|
|
import OneRightNew from '/@/views/indexSun/oneRightNew.vue';
|
|
import TwoNewR from '/@/views/indexSun/twoNewR.vue';
|
|
import { message } from 'ant-design-vue';
|
|
import HeartModal from '/@/views/indexSun/heartModal.vue';
|
|
import EmerModal from '/@/views/indexSun/emerModal.vue';
|
|
//0:处置 1:处理 2:呼入 3:全部
|
|
const phoneType = ref('');
|
|
const phoneDialogTitle = ref('呼入电话');
|
|
const phoneDialogRef = ref();
|
|
const indexModalRef = ref();
|
|
const heartModalRef = ref();
|
|
const emerRef = ref();
|
|
const pageRef = ref();
|
|
const indexModalTitle = ref();
|
|
const indexColumn: any = ref([]);
|
|
const setting = getSettings(DataType.xian);
|
|
const firstFormOne = ref();
|
|
const centerId = ref();
|
|
const apiParams = ref();
|
|
const modalApi = ref();
|
|
const needDept = ref(false);
|
|
const needDatePicker = ref(false);
|
|
const dateTimeArr = ref();
|
|
const twoROnly = ref();
|
|
const showRestB = ref(false);
|
|
const dateInfo = ref<object>({});
|
|
const rightDate = ref<string>('');
|
|
const count = ref<number>(0);
|
|
const qhInterval = ref();
|
|
const cInterval = ref();
|
|
const initDate = ref(startTime);
|
|
const showMapBottom = ref(false);
|
|
const userData = ref<object>({});
|
|
const centerMapRef = ref();
|
|
const twoNewR = ref();
|
|
const otherLoading = ref<boolean>(false);
|
|
|
|
onMounted(() => {
|
|
getTime();
|
|
qhInterval.value = setInterval(() => {
|
|
getTime();
|
|
}, 1000);
|
|
cInterval.value = setInterval(
|
|
() => {
|
|
count.value++;
|
|
},
|
|
5 * 60 * 1000
|
|
);
|
|
rightDate.value = '累计运行时间:' + (dayjs().diff(dayjs(initDate.value), 'days') + 1) + ' 天';
|
|
const centerInfo = getAuthCache('centerInfo');
|
|
centerId.value = centerInfo.id;
|
|
document.title = centerInfo.screenTitle || '健康服务中心';
|
|
|
|
if (sessionStorage.getItem('socketData')) {
|
|
console.log(JSON.parse(sessionStorage.getItem('socketData')));
|
|
confirmHelp(JSON.parse(sessionStorage.getItem('socketData')));
|
|
sessionStorage.removeItem('socketData');
|
|
}
|
|
});
|
|
|
|
function openRBModal(item: any) {
|
|
twoNewR.value.handlePolice(item);
|
|
}
|
|
|
|
const getTime = () => {
|
|
dateInfo.value = {
|
|
day: dayjs().format('YYYY年MM月DD日'),
|
|
times: dayjs().format('HH:mm:ss'),
|
|
};
|
|
};
|
|
watch(
|
|
() => dateInfo.value.day,
|
|
() => {
|
|
rightDate.value = '累计运行时间:' + (dayjs().diff(dayjs(initDate.value), 'days') + 1) + ' 天';
|
|
}
|
|
);
|
|
|
|
async function forHelp(record: any, showBottomInfo = true) {
|
|
indexModalRef.value.closeDialog();
|
|
record['lat'] = record?.latitude;
|
|
record['lon'] = record?.longitude;
|
|
Map.driving && Map.driving.clear();
|
|
Map.walking && Map.walking.clear();
|
|
if (record['lat']) {
|
|
let list: any = [];
|
|
const res: any = await nearResourcesApi({ longitude: record?.lon, latitude: record?.lat });
|
|
if (res.code === 200) {
|
|
list = res.result || [];
|
|
}
|
|
record['hospitalList'] = list.map((item: any) => {
|
|
item['latitude'] = item['lat'];
|
|
item['longitude'] = item['lon'];
|
|
return item;
|
|
});
|
|
} else {
|
|
centerMapRef.value.resetMap();
|
|
showRestB.value = false;
|
|
userData.value = record;
|
|
}
|
|
await confirmHelp(record, showBottomInfo);
|
|
}
|
|
|
|
function toOther() {
|
|
otherLoading.value = true;
|
|
queryAnYanTokenApi()
|
|
.then((res: any) => {
|
|
if (res.code === 200) {
|
|
// res.result = {
|
|
// scope: 'default',
|
|
// expires_in: 3348,
|
|
// token_type: 'bearer',
|
|
// access_token: '2a643081-b661-4f44-bc36-6bc91addde3a',
|
|
// refresh_token: 'e0a91714-59aa-4311-bb6c-ca3a48f20dd1',
|
|
// satoken: '9a493672-36e0-4539-9a74-650e95cefc87',
|
|
// };
|
|
window.open(
|
|
`http://aygc.pc.iosp.ydpt.tech/monitor/health?tokens=${res?.result?.access_token}&expires_in=${res?.result?.expires_in}&refresh_token=${res?.result?.refresh_token}&satoken=${res?.result?.satoken}`,
|
|
'_blank'
|
|
);
|
|
} else {
|
|
message.error(res?.message);
|
|
}
|
|
otherLoading.value = false;
|
|
})
|
|
.catch((err) => {
|
|
otherLoading.value = false;
|
|
console.log(err);
|
|
});
|
|
}
|
|
async function toZ() {
|
|
const routeUrl = router.resolve({
|
|
path: '/home2',
|
|
}).href;
|
|
window.open(routeUrl, '_blank');
|
|
}
|
|
|
|
function handleOneLeftClick(item: any) {
|
|
const { name, key, dateType } = item;
|
|
let startDate;
|
|
let endDate;
|
|
//呼入电话
|
|
//受理电话
|
|
if (key == 'alerdyreceive' || key == 'gross') {
|
|
phoneType.value = (ServerDetailType as any)[key];
|
|
indexModalTitle.value = name;
|
|
firstFormOne.value = fromLists[0];
|
|
indexColumn.value = columns[0];
|
|
modalApi.value = oneLApi;
|
|
needDept.value = false;
|
|
needDatePicker.value = true;
|
|
console.log(dateType, 123);
|
|
if (dateType == '0') {
|
|
startDate = dayjs().startOf('week').format('YYYY-MM-DD');
|
|
endDate = dayjs().endOf('week').format('YYYY-MM-DD');
|
|
} else if (dateType == '1') {
|
|
endDate = dayjs().format('YYYY-MM-DD');
|
|
startDate = dayjs().subtract(7, 'day').format('YYYY-MM-DD');
|
|
} else {
|
|
startDate = '';
|
|
endDate = '';
|
|
}
|
|
if (dateType == '2') {
|
|
dateTimeArr.value = [];
|
|
} else {
|
|
dateTimeArr.value = [startDate, endDate];
|
|
}
|
|
apiParams.value = {
|
|
phoneType: key == 'gross' ? 0 : 1,
|
|
centerId: centerId.value,
|
|
startDate: startDate,
|
|
endDate: endDate,
|
|
};
|
|
twoROnly.value = '';
|
|
nextTick(() => {
|
|
indexModalRef.value.openDialog();
|
|
});
|
|
}
|
|
}
|
|
|
|
function handleTwoLClick(params: any) {
|
|
indexModalTitle.value = '应急求助详情';
|
|
indexColumn.value = columns[1];
|
|
firstFormOne.value = fromLists[1];
|
|
twoROnly.value = '';
|
|
modalApi.value = twoLModalApi;
|
|
needDept.value = true;
|
|
needDatePicker.value = false;
|
|
nextTick(() => {
|
|
emerRef.value.openDialog(params);
|
|
});
|
|
}
|
|
|
|
function handleOneRClick() {
|
|
// router.push({
|
|
// path: '/indexSon',
|
|
// });
|
|
indexModalTitle.value = '健康终端报警';
|
|
indexColumn.value = monitorColumns;
|
|
firstFormOne.value = [];
|
|
twoROnly.value = '';
|
|
modalApi.value = oneRApi;
|
|
needDept.value = true;
|
|
nextTick(() => {
|
|
indexModalRef.value.openDialog();
|
|
});
|
|
}
|
|
|
|
// 健康监测工具报警
|
|
let socketUrl = handleSocketUrl(basicPath, getCenterInfo?.id);
|
|
const { socketData, setSocketData, closeSocket } = useSocket(socketUrl);
|
|
const employeeDialogRef = ref();
|
|
|
|
watch(socketData, (nVal) => {
|
|
if (nVal) {
|
|
nextTick(() => {
|
|
setCount();
|
|
setSocketData(nVal);
|
|
employeeDialogRef.value.openDialog();
|
|
});
|
|
}
|
|
});
|
|
|
|
//应急求助、120弹窗
|
|
let socketUrl1 = handleSocketUrl(emergencyPath, getCenterInfo?.id);
|
|
const { socketData: socketData1, setSocketData: setSocketData1, closeSocket: closeSocket1 } = useSocket(socketUrl1, false);
|
|
const emergencyDialogRef = ref(); //紧急求助
|
|
|
|
watch(socketData1, (nVal) => {
|
|
if (nVal) {
|
|
setCount();
|
|
setSocketData1(nVal);
|
|
emergencyDialogRef.value.openDialog();
|
|
}
|
|
});
|
|
|
|
const hospitalList = ref([]); //医院列表
|
|
const showHospitalList = ref(false);
|
|
|
|
async function confirmHelp(data: any, showBottomInfo = true) {
|
|
showMapBottom.value = false;
|
|
Map.driveLine && Map.driveLine.clear();
|
|
try {
|
|
const res = await careUserApi({ userId: data?.userId, workNo: data?.employeeNum });
|
|
data['careLiaisonName'] = res?.result?.careLiaisonName;
|
|
data['careLiaisonPhone'] = res?.result?.careLiaisonPhone;
|
|
data['lifeguardName'] = res?.result?.lifeguardName;
|
|
data['lifeguardPhone'] = res?.result?.lifeguardPhone;
|
|
} catch (err) {
|
|
console.log(err);
|
|
}
|
|
userData.value = data;
|
|
if (!data.lon || !data.lat) {
|
|
centerMapRef.value.newResetMap();
|
|
showMapBottom.value = data?.emergencyType != 2 && showBottomInfo;
|
|
return;
|
|
}
|
|
Map.removeOverlayGroup();
|
|
try {
|
|
hospitalList.value = data.hospitalList;
|
|
//用户的坐标信息
|
|
let point = [data.lon, data.lat];
|
|
|
|
centerMapRef.value.setStartPosition(data);
|
|
const a = ((await getHospitalList(data.hospitalList, point)) as any) || [];
|
|
hospitalList.value = a.sort((a: any, b: any) => a.distance - b.distance);
|
|
const arr = await Map.createOverlay1(
|
|
hospitalList.value.concat([{ latitude: data.lat, longitude: data.lon }]),
|
|
{
|
|
content: (val: any) => {
|
|
return `<div style="
|
|
width: 21px;
|
|
height: 44px;
|
|
position: absolute;
|
|
left: -20px;
|
|
top: -20px;" title="${val?.name}">
|
|
</div>`;
|
|
},
|
|
},
|
|
async (val) => {
|
|
if (Map.mapDriverOrWalkLoading) return;
|
|
Map.createInfoModal({ option: val, content: infoContentSpecial(val) }, false);
|
|
const end = await Map.getAddressByPoint([val.lon, val.lat]);
|
|
if (!data?.address) {
|
|
data['address'] = await Map.getAddressByPoint([data.lon, data.lat]);
|
|
}
|
|
centerMapRef.value.getSearch({
|
|
startPosition: [data.lon, data.lat],
|
|
endPosition: [val.lon, val.lat],
|
|
start: data['address'],
|
|
end,
|
|
});
|
|
('');
|
|
},
|
|
true,
|
|
'1'
|
|
);
|
|
|
|
Map.getAddressByPoint(point)
|
|
.then((res) => {
|
|
const option = {
|
|
lon: data.lon,
|
|
lat: data.lat,
|
|
position: point,
|
|
name: data.realName,
|
|
address: res,
|
|
sex: data.sex,
|
|
};
|
|
Map.createEmergencyMarker(option);
|
|
Map.map.setFitView([...arr, Map.emergencyMarker], false, [180, 180, 180, 180]);
|
|
})
|
|
.catch((err: any) => {
|
|
console.log(err);
|
|
});
|
|
} catch (e: any) {
|
|
console.log(e);
|
|
}
|
|
}
|
|
|
|
async function getHospitalList(hospitalList, userLocation) {
|
|
const hospitalPromises = hospitalList.map(async (item) => {
|
|
item.distance = getDistance(userLocation, [item.lon, item.lat]);
|
|
|
|
let t = '';
|
|
let r = '';
|
|
if (item.distance > 2000) {
|
|
const { time, routeList } = await getDriveTime(userLocation, [item.lon, item.lat]);
|
|
t = time;
|
|
r = routeList;
|
|
} else {
|
|
const { time, routeList } = await getWalkingTime(userLocation, [item.lon, item.lat]);
|
|
t = time;
|
|
r = routeList;
|
|
}
|
|
item.driveTime = t;
|
|
item.routeList = r;
|
|
item.userLocation = userLocation;
|
|
return item; // 返回更新后的医院条目
|
|
});
|
|
return Promise.all(hospitalPromises);
|
|
}
|
|
|
|
function getDistance(userLocation, destination) {
|
|
const value = Map.getDistance(userLocation, destination);
|
|
// return value > 1000 ? (value / 1000).toFixed(2) + 'km' : parseInt(value) + 'm';
|
|
return value;
|
|
}
|
|
|
|
async function getDriveTime(userLocation, destination) {
|
|
let { time, steps } = await Map.getDriveTime(userLocation, destination);
|
|
let h,
|
|
m,
|
|
s = 0;
|
|
if (time <= 60) {
|
|
return {
|
|
time: `${s}秒`,
|
|
routeList: steps,
|
|
};
|
|
}
|
|
if (time > 60 && time < 3600) {
|
|
m = Math.floor(time / 60);
|
|
return {
|
|
time: `${m}分`,
|
|
routeList: steps,
|
|
};
|
|
}
|
|
if (time >= 3600) {
|
|
h = Math.floor(time / 3600);
|
|
m = Math.floor((time - h * 3600) / 60);
|
|
return {
|
|
time: `${h}小时${m}分`,
|
|
routeList: steps,
|
|
};
|
|
}
|
|
}
|
|
async function getWalkingTime(userLocation, destination) {
|
|
let { time, steps } = await Map.getWalkingTime(userLocation, destination);
|
|
let h,
|
|
m,
|
|
s = 0;
|
|
if (time <= 60) {
|
|
return {
|
|
time: `${s}秒`,
|
|
routeList: steps,
|
|
};
|
|
}
|
|
if (time > 60 && time < 3600) {
|
|
m = Math.floor(time / 60);
|
|
return {
|
|
time: `${m}分`,
|
|
routeList: steps,
|
|
};
|
|
}
|
|
if (time >= 3600) {
|
|
h = Math.floor(time / 3600);
|
|
m = Math.floor((time - h * 3600) / 60);
|
|
return {
|
|
time: `${h}小时${m}分`,
|
|
routeList: steps,
|
|
};
|
|
}
|
|
}
|
|
|
|
function clearHospitalList() {
|
|
hospitalList.value = [];
|
|
showHospitalList.value = false;
|
|
}
|
|
function handleLastSeven(item) {
|
|
handleOneLeftClick(item);
|
|
}
|
|
onUnmounted(() => {
|
|
if (qhInterval.value) clearInterval(qhInterval.value);
|
|
if (cInterval.value) clearInterval(cInterval.value);
|
|
// 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
|
|
window.onbeforeunload = function () {
|
|
closeSocket();
|
|
closeSocket1(); //西安云坐席
|
|
};
|
|
});
|
|
function handleThreeRClick(type) {
|
|
const textArr = ['心血管异常人员列表', '脑血管异常人员列表', '冠状CT异常人员列表'];
|
|
indexModalTitle.value = textArr[type - 1];
|
|
indexColumn.value = threeRModalColumns;
|
|
modalApi.value = threeRModalApi;
|
|
twoROnly.value = '';
|
|
apiParams.value = { queryType: type };
|
|
needDept.value = false;
|
|
firstFormOne.value = threeRModalFromList;
|
|
nextTick(() => {
|
|
indexModalRef.value.openDialog();
|
|
});
|
|
}
|
|
function handleTwoRClick(data) {
|
|
const textArr = ['健康打卡减重数据', '健康打卡减血糖数据', '健康打卡血压数据'];
|
|
indexModalTitle.value = textArr[data.type - 1];
|
|
indexColumn.value = towRcolumns[data.type - 1];
|
|
needDept.value = false;
|
|
twoROnly.value = data;
|
|
const apiArr = [twoRModal1Api, twoRModal2Api, twoRModal3Api];
|
|
const params = {
|
|
inputDateBegin: '',
|
|
inputDateEnd: '',
|
|
abFlag: data.normal == 2 ? '1' : '2',
|
|
};
|
|
if (data.date == 1) {
|
|
params.inputDateBegin = dayjs().format('YYYY-MM-DD');
|
|
params.inputDateEnd = dayjs().format('YYYY-MM-DD');
|
|
} else {
|
|
params.inputDateBegin = dayjs().startOf('month').format('YYYY-MM-DD');
|
|
params.inputDateEnd = dayjs().format('YYYY-MM-DD');
|
|
}
|
|
apiParams.value = params;
|
|
modalApi.value = apiArr[data.type - 1];
|
|
firstFormOne.value = twoRform(data.normal == 2 ? '1' : '');
|
|
nextTick(() => {
|
|
indexModalRef.value.openDialog();
|
|
});
|
|
}
|
|
|
|
function handleTwoNewRClick() {
|
|
indexColumn.value = twoRNewColumns;
|
|
firstFormOne.value = twoRNewForm;
|
|
const params = {
|
|
centerId: centerId.value,
|
|
};
|
|
indexModalTitle.value = '重点关爱趋势预警';
|
|
modalApi.value = twoRNDetailApi;
|
|
needDept.value = false;
|
|
needDatePicker.value = false;
|
|
apiParams.value = params;
|
|
nextTick(() => {
|
|
indexModalRef.value.openDialog();
|
|
});
|
|
}
|
|
function handleOneRightView() {
|
|
indexColumn.value = oneRNewColumns;
|
|
firstFormOne.value = [];
|
|
const params = {
|
|
centerId: centerId.value,
|
|
startDate: '2000-01-01',
|
|
endDate: '2030-12-31',
|
|
};
|
|
indexModalTitle.value = '今日应急';
|
|
modalApi.value = todayEmergencyListApi;
|
|
apiParams.value = params;
|
|
nextTick(() => {
|
|
indexModalRef.value.openDialog();
|
|
});
|
|
}
|
|
function handlePieView(params: any) {
|
|
indexColumn.value = pieColumns;
|
|
firstFormOne.value = pieSearch;
|
|
nextTick(() => {
|
|
heartModalRef.value.openDialog(params);
|
|
});
|
|
}
|
|
function handleEmer(userId: string) {
|
|
indexColumn.value = contactListColumns;
|
|
firstFormOne.value = [];
|
|
const params = {
|
|
userId,
|
|
};
|
|
indexModalTitle.value = '紧急联系人';
|
|
modalApi.value = contactListApi;
|
|
apiParams.value = params;
|
|
nextTick(() => {
|
|
indexModalRef.value.openDialog();
|
|
});
|
|
}
|
|
|
|
function handleCenterMapClick(res: any) {
|
|
indexColumn.value = centerMapColumns;
|
|
firstFormOne.value = centerMapFromList;
|
|
const params = {
|
|
healthRoomId: res?.ayId,
|
|
};
|
|
indexModalTitle.value = '健康小屋详情';
|
|
modalApi.value = roomDetailApi;
|
|
apiParams.value = params;
|
|
nextTick(() => {
|
|
indexModalRef.value.openDialog();
|
|
});
|
|
}
|
|
|
|
function openEmergencyOpen() {
|
|
setSocketData1({
|
|
userId: '1942871719583739905',
|
|
phone: '15129287781',
|
|
realName: '连龙刚',
|
|
lon: 108.94734,
|
|
lat: 34.218951,
|
|
sex: 2,
|
|
age: 37,
|
|
orgCode: 'A01A01A02',
|
|
orgName: '硬件部',
|
|
departCode: 'A01A01',
|
|
departName: '软硬件开发部',
|
|
type: '0',
|
|
centerId: '1940693902422519809',
|
|
popType: 3,
|
|
queue: null,
|
|
noticeId: null,
|
|
careLiaisonName: '周飞飞',
|
|
careLiaisonPhone: '18800001111',
|
|
lifeguardName: '李林林',
|
|
lifeguardPhone: '15511110000',
|
|
});
|
|
emergencyDialogRef.value.openDialog();
|
|
}
|
|
function employeeDialogOpen() {
|
|
setSocketData({
|
|
watchNo: 'A5GTQ24920002519',
|
|
eventType: 'a_key_alarm',
|
|
eventType_dictText: '一键告警',
|
|
bindUserId: '1942871719583739905',
|
|
bindDate: '2025-07-23',
|
|
createBy: 'apiusername',
|
|
createDate: '2025-09-25 15:01:11',
|
|
dataValue: '',
|
|
address: null,
|
|
lon: 0,
|
|
lat: 0,
|
|
dataDate: '2025-09-25',
|
|
warnTime: '2025-09-25 15:00:03',
|
|
gpsErrorMsg: '定位超时',
|
|
lonGd: null,
|
|
latGd: null,
|
|
addressGd: null,
|
|
sendFlag: '0',
|
|
largeScreenFlag: '0',
|
|
orgCode: 'A01A01A02',
|
|
orgName: '硬件部',
|
|
realName: '连龙刚',
|
|
phone: '15129287781',
|
|
hospitalList: [
|
|
{
|
|
name: '跃满油田作业区',
|
|
lon: 82.9955,
|
|
lat: 40.787056,
|
|
},
|
|
{
|
|
name: '跃满油田作业区',
|
|
lon: 82.9955,
|
|
lat: 40.787056,
|
|
},
|
|
{
|
|
name: '采油一厂稠油小屋',
|
|
lon: 84.881775,
|
|
lat: 44.987652,
|
|
},
|
|
],
|
|
centerId: '1940693902422519809',
|
|
popType: 3,
|
|
keyUser: '0',
|
|
avatar: null,
|
|
sex: 2,
|
|
age: 37,
|
|
workNo: '2025001',
|
|
deptName: '软硬件开发部',
|
|
audioUrl: null,
|
|
});
|
|
employeeDialogRef.value.openDialog();
|
|
}
|
|
|
|
// setTimeout(() => {
|
|
// employeeDialogOpen();
|
|
// openEmergencyOpen();
|
|
// yunZOpen();
|
|
// }, 5000);
|
|
</script>
|
|
<style lang="less" scoped>
|
|
.sun-screen-box {
|
|
height: 100vh;
|
|
letter-spacing: 2px;
|
|
background: url('/@/assets/indexSun/bigBg.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
|
|
.sun-screen-title {
|
|
height: 80px;
|
|
background: url('/@/assets/indexSun/bg.png') no-repeat;
|
|
background-size: 100% 100%;
|
|
display: flex;
|
|
font-size: 20px;
|
|
color: #fff;
|
|
text-align: center;
|
|
font-family: MicrosoftYaHei-Bold;
|
|
|
|
.sun-title-left {
|
|
text-align: left;
|
|
flex: 1;
|
|
line-height: 60px;
|
|
padding-left: 15px;
|
|
font-weight: bold;
|
|
}
|
|
.sun-title-right {
|
|
flex: 1;
|
|
text-align: right;
|
|
line-height: 50px;
|
|
> button {
|
|
&:nth-child(1) {
|
|
margin-right: 10px;
|
|
}
|
|
&:nth-child(2) {
|
|
margin-right: 30px;
|
|
}
|
|
}
|
|
}
|
|
|
|
.sun-title-center {
|
|
flex: 1;
|
|
font-size: 50px;
|
|
line-height: 80px;
|
|
letter-spacing: 10px;
|
|
text-shadow: 2px 2px 5px rgba(118, 141, 219, 0.53);
|
|
font-weight: bold;
|
|
}
|
|
}
|
|
|
|
.sun-body-content {
|
|
height: calc(100% - 80px);
|
|
padding: 10px 20px;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
|
|
.sun-body-left,
|
|
.sun-body-right {
|
|
height: 100%;
|
|
width: 22%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
//justify-content: space-between;
|
|
}
|
|
|
|
.sun-body-center {
|
|
flex: 1;
|
|
margin: 0 10px;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.sun-body-left {
|
|
> div {
|
|
margin-bottom: 10px;
|
|
border: 1px solid #00ccff;
|
|
border-radius: 14px;
|
|
|
|
.one-l-box,
|
|
.two-l-box,
|
|
.three-l-box,
|
|
.three-r-box,
|
|
.three-new-l {
|
|
height: 100%;
|
|
}
|
|
}
|
|
|
|
.sun-body-left-one {
|
|
height: 20%;
|
|
}
|
|
|
|
.sun-body-left-two {
|
|
flex: 1;
|
|
}
|
|
|
|
.sun-body-left-three {
|
|
//height: 45%;
|
|
}
|
|
//.sun-body-left-four {
|
|
// height: 18%;
|
|
//}
|
|
}
|
|
|
|
.sun-body-right {
|
|
//display: flex;
|
|
//flex-direction: column;
|
|
> div {
|
|
border: 1px solid #00ccff;
|
|
border-radius: 14px;
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
|
&:not(:last-child) {
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.one-r-box,
|
|
.two-r-box,
|
|
.three-r-box {
|
|
height: 100%;
|
|
}
|
|
}
|
|
.sun-body-right-one {
|
|
}
|
|
.sun-body-right-two {
|
|
flex: 1;
|
|
}
|
|
.sun-body-right-three {
|
|
flex: 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.top-right-button {
|
|
color: #ffffff;
|
|
font-weight: bold;
|
|
font-size: 18px;
|
|
width: 160px;
|
|
height: 40px;
|
|
background: radial-gradient(ellipse at center, #082147 0%, #08254c 55%, #085faa 100%);
|
|
border-radius: 8px;
|
|
border: 1px solid #55d3ff;
|
|
}
|
|
|
|
:deep(.amap-info-close) {
|
|
top: 15px;
|
|
right: 15px;
|
|
}
|
|
|
|
:deep(.emergency-dialog) {
|
|
position: relative;
|
|
&::before {
|
|
content: '';
|
|
position: absolute;
|
|
width: 100%;
|
|
height: 100%;
|
|
top: 0;
|
|
left: 0;
|
|
background:
|
|
linear-gradient(to top, transparent calc(100% - 15px), #a0440f 100%),
|
|
linear-gradient(to bottom, transparent calc(100% - 15px), #a0440f 100%),
|
|
linear-gradient(to left, transparent calc(100% - 15px), #a0440f 100%),
|
|
linear-gradient(to right, transparent calc(100% - 15px), #a0440f 100%);
|
|
animation: borderFlash 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes borderFlash {
|
|
0% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.5;
|
|
}
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
}
|
|
</style>
|