update 调整银川大屏和西安大屏

This commit is contained in:
zk
2024-05-17 13:07:39 +08:00
parent 45aec85fad
commit 13faaa92a6
15 changed files with 145 additions and 88 deletions
+44 -35
View File
@@ -1,6 +1,14 @@
import { ref, unref } from 'vue';
import * as echarts from 'echarts';
//服务详情数据弹窗参数
export enum ServerDetailType {
gross = '0', //最新呼入电话
alerdyreceive = '1', //最新受理电话
jqqz = '2', //突发重大伤病应急
dbjy = '3', //重大伤病应急就医
}
export function useStatistics() {
const statistics = ref([
{
@@ -90,36 +98,36 @@ export function useSpin() {
}
export const hospitalList = [
{
name: '泾河医院',
key: 'zhigong',
value: 0,
},
{
name: '兴隆医院',
key: 'tangdu',
value: 0,
},
{
name: '宁夏宝石花医院',
key: 'yangehu',
value: 0,
},
{
name: '延安市人民医院',
key: 'yananshi',
value: 0,
},
{
name: '西京医院',
key: 'xijing',
value: 0,
},
{
name: '庆阳医院',
key: 'changan',
value: 0,
},
// {
// name: '泾河医院',
// key: 'zhigong',
// value: 0,
// },
// {
// name: '兴隆医院',
// key: 'tangdu',
// value: 0,
// },
// {
// name: '宁夏宝石花医院',
// key: 'yangehu',
// value: 0,
// },
// {
// name: '延安市人民医院',
// key: 'yananshi',
// value: 0,
// },
// {
// name: '西京医院',
// key: 'xijing',
// value: 0,
// },
// {
// name: '庆阳医院',
// key: 'changan',
// value: 0,
// },
];
export function useHospitalList() {
@@ -129,11 +137,12 @@ export function useHospitalList() {
return unref(radarList);
}
function setRadarList(res = {}) {
radarList.value.forEach((item) => {
const { key } = item;
item.value = res[key] || 0;
});
function setRadarList(res) {
radarList.value = res;
// radarList.value.forEach((item) => {
// const { key } = item;
// item.value = res[key] || 0;
// });
}
return {
+1 -1
View File
@@ -3,7 +3,7 @@ import { get } from '/@/api/request';
export enum Api {
departList = '/sys/sysDepart/allSecondaryDeparts',
server = '/health-emergency/emergency/tblUserHelp/statistics',
getDetail = '/health-emergency/emergency/tblHealthData/getDetail',
getDetail = '/health-medical/medical/hospital/getMedicalHospital',
complaint = '/health-emergency/emergency/tblHelpCenter/sicknessTypeStatistic',
}
+6 -6
View File
@@ -54,13 +54,13 @@
async function getList() {
setSpin(true);
try {
const { code, result } = (await getDetail({})) || {};
const { code, result } = (await getDetail({ dataType: props.setting.dataType })) || {};
setSpin(!spinning.value);
if (code != 200 || !Array.isArray(result)) {
if (code != 200) {
return;
}
setSession(LEFT_KEY3, JSON.stringify(result[0]));
setValue(result[0]);
setSession(LEFT_KEY3, JSON.stringify(result));
setValue(result);
} catch {
const result = JSON.parse(getSession(LEFT_KEY3));
setValue(result);
@@ -76,9 +76,9 @@
function initChart() {
const myChart = echarts.init(document.querySelector('.RadarCharts'));
let countList = radarList.value.map((item) => item.value);
let countList = radarList.value.map((item) => item?.userCount);
let max = Math.max(...countList);
const indicator = radarList.value.map((item) => ({ name: item.name, max: max }));
const indicator = radarList.value.map((item) => ({ name: item?.hospitalName, max: max }));
const option = radarCharts({ indicator, countList });
myChart.setOption(option);
window.addEventListener('resize', () => {
+16 -3
View File
@@ -1,7 +1,7 @@
<template>
<div>
<public-title title="主诉分类" />
<div class="inner">
<div class="zc-inner">
<div class="title">
<div class="type-check">
<span
@@ -24,7 +24,7 @@
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, watch } from 'vue';
import { ref, onMounted, watch, onUnmounted } from 'vue';
import PublicTitle from '/@/components/publicTitle.vue';
import * as echarts from 'echarts';
import { complaint, getDepart } from '/@/components/body-d-left/left.api.ts';
@@ -51,8 +51,20 @@
}
onMounted(() => {
document.addEventListener('visibilitychange', checkTabState);
init();
});
onUnmounted(() => {
document.removeEventListener('visibilitychange', checkTabState);
});
const tabState = ref('');
function checkTabState() {
console.log('checkTabState', document.hidden);
tabState.value = document.hidden ? 'inactive' : 'active';
if (!document.hidden) {
}
}
function init() {
getDepartOption();
@@ -112,8 +124,9 @@
}
</script>
<style scoped lang="less">
.inner {
.zc-inner {
position: relative;
width: 100%;
height: calc(100% - 40px);
.spin {
+1 -1
View File
@@ -2,7 +2,7 @@ import { get } from '/src/api/request';
export enum Api {
getMonitorList = '/health-watch/watch/watchMonitorData/getMonitorList',
getHealthDataList = '/health-emergency/emergency/tblHealthData/getHealthDataList',
getHealthDataList = '/health-archives/archives/groupUserA/getGroupUserAInfo',
}
//健康终端报警
+4 -1
View File
@@ -13,6 +13,9 @@
import { ringOption, useHealth } from '/@/components/body-d-right/bodyRightHooks.ts';
import { useSession, caching } from '/@/hooks/autoRefresh/caching.ts';
const props = defineProps({
setting: Object,
});
const { setSession, getSession } = useSession();
const { RIGHT_KEY2 } = caching;
const { setSpin, spinning } = useSpin();
@@ -24,7 +27,7 @@
async function init() {
try {
const { code, result } = await getHealthDataList({});
const { code, result } = await getHealthDataList({ dataType: props.setting?.dataType, orgCode: props.setting?.orgCode });
setSpin(true);
if (code != 200) {
return;
+2 -2
View File
@@ -50,11 +50,11 @@
</div>
<div class="center-footer">
<div class="count-item">
<div class="num">{{ useDetail?.alerdyreceive || '/' }}</div>
<div class="num">{{ useDetail?.alerdyreceive || '0' }}</div>
<div class="text">累计受理</div>
</div>
<div class="count-item">
<div class="num">{{ useDetail?.totalacceptance || '/' }}</div>
<div class="num">{{ useDetail?.totalacceptance || '0' }}</div>
<div class="text">累计处置</div>
</div>
</div>
@@ -69,6 +69,10 @@
const dataSource = ref([]);
async function getRecords() {
if (!props.api) {
setDataSource([{ name: '张三', department: '公司机关', sex: '男' }]);
return;
}
const { code, result } = await props.api({ ...props.apiParams, pageSize: pageSize.value, pageNo: current.value });
if (code == 200) {
if (props.afterFetch && isFunction(props.afterFetch)) {
@@ -92,6 +96,9 @@
immediate: true,
}
);
defineExpose({
getRecords,
});
</script>
<style scoped lang="less">
:deep(.ant-table-thead > tr > th) {
@@ -100,7 +100,7 @@
<style scoped lang="less">
.dialog-con {
background-color: #00152b;
border: 1px solid #129bff;
//border: 1px solid #129bff;
min-height: 500px;
}
+1 -1
View File
@@ -28,7 +28,7 @@ export const sexTypeList = [
},
];
interface Settings {
export interface Settings {
dataType: string;
orgCode?: string;
}
+3 -4
View File
@@ -74,15 +74,15 @@ export function useSocket(p = basicPath) {
socket.value.onclose = function () {
reconnect(path.value);
console.log('连接关闭', new Date().toLocaleString());
// console.log('连接关闭', new Date().toLocaleString());
};
socket.value.onerror = function () {
reconnect(path.value);
console.log('连接错误');
console.warn('连接错误');
};
socket.value.onopen = function () {
heartCheck.reset().start(); //心跳检测重置
console.log('连接成功:' + new Date().toLocaleString());
// console.log('连接成功:' + new Date().toLocaleString());
};
socket.value.onmessage = function (event) {
//如果获取到消息,心跳检测重置
@@ -108,4 +108,3 @@ export function useSocket(p = basicPath) {
return { socket, socketData, setSocketData, closeSocket };
}
+20 -7
View File
@@ -10,15 +10,15 @@
<div class="body-d">
<div class="body-d-left">
<one-l :setting="setting" :refreshState="refreshState" @handleClick="handlePhoneDialog" />
<two-l :refreshState="refreshState" />
<three-l :refreshState="refreshState" />
<two-l :key="tabState" :refreshState="refreshState" />
<three-l :key="tabState" :setting="setting" :refreshState="refreshState" />
</div>
<div class="body-d-middle">
<china-map />
</div>
<div class="body-d-right">
<one-r :setting="setting" :refreshState="refreshState" />
<two-r :refreshState="refreshState" />
<two-r :key="tabState" :setting="setting" :refreshState="refreshState" />
<three-r :key="refreshState" />
</div>
</div>
@@ -29,7 +29,7 @@
</div>
</template>
<script setup lang="ts">
import { onUnmounted, ref, watch, nextTick } from 'vue';
import { onUnmounted, ref, watch, nextTick, onMounted } from 'vue';
import OneL from '/@/components/body-d-left/oneL.vue';
import TwoL from '/@/components/body-d-left/twoL.vue';
import ThreeL from '/@/components/body-d-left/threeL.vue';
@@ -44,6 +44,7 @@
import { useRefresh } from '/@/hooks/autoRefresh';
import { DEFAULT_TIME } from '/@/hooks/autoRefresh/pageRefreshTime.ts';
import { DataType, getSettings } from '/@/utils/settings.ts';
import { ServerDetailType } from '/@/components/body-d-left/bodyLeftHooks.ts';
import PhoneDialog from '/@/views/components/phoneDialog/phoneDialog.vue';
const { refreshState } = useRefresh(DEFAULT_TIME);
@@ -65,10 +66,22 @@
dayTimeT.value = timeRight;
}
onMounted(() => {
init();
document.addEventListener('visibilitychange', checkTabState);
});
onUnmounted(() => {
clearInterval(interval.value);
document.removeEventListener('visibilitychange', checkTabState);
});
init();
const tabState = ref('');
//判断窗口是否处于激活状态,切换浏览器tab会导致部门echarts显示不正常
function checkTabState() {
tabState.value = document.hidden ? 'inactive' : 'active';
}
// 健康监测工具报警
const { socketData, setSocketData, closeSocket } = useSocket(basicPath);
const employeeDialogRef = ref();
@@ -113,11 +126,11 @@
nextTick(() => {
//呼入电话
if (key == 'gross') {
phoneType.value = '2';
phoneType.value = ServerDetailType['gross'];
}
//受理电话
if (key == 'alerdyreceive') {
phoneType.value = '1';
phoneType.value = ServerDetailType['alerdyreceive'];
}
phoneDialogTitle.value = name;
phoneDialogRef.value.openDialog();
@@ -19,6 +19,9 @@
import { caching, useSession } from '/@/hooks/autoRefresh/caching.ts';
import { getTeamHealth } from '/@/views/yinChuan/yinChuan.api.ts';
const props = defineProps({
setting: Object,
});
const { setSession, getSession } = useSession();
const { TEAM_HEALTH } = caching;
const list = ref([
@@ -63,7 +66,7 @@
async function viewDetail() {
try {
const { code, result } = await getTeamHealth({});
const { code, result } = await getTeamHealth({ dataType: props.setting?.dataType });
if (code != 200) {
return;
}
+1 -1
View File
@@ -3,7 +3,7 @@ import { get } from '/@/api/request';
export enum Api {
phoneList = '/health-emergency/emergency/tblUserHelp/phoneList',
getWorkDaily = '/health-emergency/emergency/ycLargeScreen/medicalCenter',
getTeamHealth = '/health-emergency/emergency/ycLargeScreen/userHealthCenter',
getTeamHealth = '/health-archives/archives/groupUserA/getGroupUserAInfo',
}
// 呼入电话、受理电话
+24 -14
View File
@@ -10,30 +10,30 @@
<div class="body-d">
<div class="yichuan-body-left">
<!--服务详情数据-->
<ServiceDetails :setting="setting" class="service-details" :refreshState="refreshState" @handleClick="handlePhoneDialog" />
<ServiceDetails :refreshState="refreshState" :setting="setting" class="service-details" @handleClick="handlePhoneDialog" />
<!--一线医疗点每日工作动态-->
<DailyWorkTrends class="daily-work-trends" :refreshState="refreshState" />
<DailyWorkTrends :refreshState="refreshState" class="daily-work-trends" />
</div>
<div class="body-d-middle">
<china-map />
</div>
<div class="body-d-right">
<!--健康终端报警-->
<TerminalAlarm :setting="setting" :refreshState="refreshState" @emit-view-detail="handleEmployeeDialog" />
<TerminalAlarm :refreshState="refreshState" :setting="setting" @emit-view-detail="handleEmployeeDialog" />
<!--员工队伍健康状况-->
<EmployeeHealth :refreshState="refreshState" />
<EmployeeHealth :refreshState="refreshState" :setting="setting" />
<!--体检数据-->
<PhysicalExaminationData :setting="setting" :refreshState="refreshState" />
<PhysicalExaminationData :key="tabState" :refreshState="refreshState" :setting="setting" />
</div>
</div>
<div class="bottom-d"></div>
<EmployeeDialog ref="employeeDialogRef" :record="socketData" />
<EmergencyDialog ref="emergencyDialogRef" :record="emergencyData" />
<PhoneDialog ref="phoneDialogRef" :title="phoneDialogTitle" :useForm="true" :setting="setting" :phoneType="phoneType" />
<PhoneDialog ref="phoneDialogRef" :phoneType="phoneType" :setting="setting" :title="phoneDialogTitle" :useForm="true" />
<TerminalAlarmDialog ref="terminalAlarmDialogRef" :setting="setting" />
</div>
</template>
<script setup lang="ts">
<script lang="ts" setup>
import { onUnmounted, ref, watch, nextTick, onMounted } from 'vue';
import ServiceDetails from '/@/components/body-d-left/oneL.vue';
import DailyWorkTrends from '/@/views/yinChuan/componetns/dailyWorkTrends/dailyWorkTrends.vue';
@@ -52,6 +52,7 @@
// import { useUserStore } from '/@/store/modules/user.ts';
import { useRoute } from 'vue-router';
import { DataType, getSettings } from '/@/utils/settings.ts';
import { ServerDetailType } from '/@/components/body-d-left/bodyLeftHooks.ts';
const route = useRoute();
const setting = getSettings(DataType.yinChuan);
@@ -64,7 +65,20 @@
// userStore.setUserInfo(data.userInfo);
// console.log(useUserStore);
// }
init();
document.addEventListener('visibilitychange', checkTabState);
});
onUnmounted(() => {
clearInterval(interval.value);
document.removeEventListener('visibilitychange', checkTabState);
});
const tabState = ref('');
//判断窗口是否处于激活状态,切换浏览器tab会导致部门echarts显示不正常
function checkTabState() {
tabState.value = document.hidden ? 'inactive' : 'active';
}
const { refreshState } = useRefresh(DEFAULT_TIME);
const dayTimeO = ref();
const dayTimeT = ref();
@@ -83,10 +97,6 @@
dayTimeT.value = timeRight;
}
onUnmounted(() => {
clearInterval(interval.value);
});
init();
// 健康监测工具报警
const { socketData, setSocketData, closeSocket } = useSocket(basicPath);
const employeeDialogRef = ref();
@@ -130,17 +140,17 @@
const { name, key } = item;
//呼入电话
if (key == 'gross') {
phoneType.value = '2';
}
phoneType.value = ServerDetailType['gross'];
//受理电话
if (key == 'alerdyreceive') {
phoneType.value = '1';
phoneType.value = ServerDetailType['alerdyreceive'];
}
nextTick(() => {
phoneDialogTitle.value = name;
phoneDialogRef.value.openDialog();
});
}
}
const terminalAlarmDialogRef = ref();