You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

375 lines
8.3 KiB

5 months ago
<!--
* @Author: gaowenya
* @email: gaowenya_a@163.com
* @Date: 2023-06-19 09:38:10
* @LastEditors:
* @LastEditTime:
-->
<template>
<a-config-provider :locale="locale">
<div id="app" class="storm">
<a-spin tip="正在请求..." class="zhezhao" :spinning="spinning">
<div class="storm-container">
<!-- <Nav /> -->
<div class="storm-content">
<router-view />
</div>
</div>
</a-spin>
<!-- 全局计时 $route.name !== 'PatientList' && -->
<Dragger v-if="getCount" ref="timer" class="count-container">
<div class="count-name">静脉溶栓</div>
<!-- <van-count-down :time="getCount" format="mm:ss" /> -->
<Count />
</Dragger>
<!-- 测评提示信息弹窗 -->
<a-modal class="patient-create patient-form" :width="518" :maskClosable="false" :closable="false"
:destroyOnClose="true" v-model="tip.visible" title="提示" @ok="tipConfirm" okText="去测评" cancelText="忽略">
<div class="modal-content">
{{ tip.content }}
</div>
</a-modal>
<!-- -->
<a-modal class="patient-create patient-form" :width="518" :maskClosable="false" :closable="false"
:destroyOnClose="true" v-model="tip.Lnspect" title="提示" @ok="LnspectConfirm" @cancel="LnspectCancel"
okText="查看" cancelText="忽略">
<div class="modal-content">检验结果已完成, 请前往查看</div>
</a-modal>
</div>
</a-config-provider>
</template>
<script>
import zhCN from 'ant-design-vue/es/locale/zh_CN'; // 引入中文语言包
import Dragger from './components/dragger.vue';
import Count from './components/count.vue';
import {
messageQuery
} from 'api';
import {
mapMutations,
mapState
} from 'vuex';
import Nav from 'components/Nav.vue';
export default {
components: {
Nav,
Dragger,
Count,
},
data() {
return {
locale: zhCN, // 设置为中文
routeName: '',
tip: {
// 提示信息
visible: false, //测评
Lnspect: false, //检验
content: '',
k: null,
},
request: 0,
pushRouter: {
0: 'Inspect',
1: 'Image',
2: 'Min',
},
titleForm: {
'0min': 'JMRS-Q-NIHSS',
'15min': 'JMRS-15-NIHSS',
'30min': 'JMRS-30-NIHSS',
'45min': 'JMRS-45-NIHSS',
'60min': 'JMRS-60-NIHSS',
},
};
},
computed: {
...mapState('storm', ['spinning', 'showNav']),
...mapState('patient', ['patientData', 'timerData', 'overviewType']),
getCount() {
const {
timerData,
patientData
} = this;
if (!timerData && !patientData) return null;
if (timerData.firstAidId !== patientData.firstAidId) return null;
const {
countdown
} = timerData;
if (!countdown) return null;
// const totalSeconds = countdown;
// // ?️ 获取完整分钟数
// const minutes = Math.floor(totalSeconds / 60);
// // ?️ 获得剩余的秒数
// const seconds = totalSeconds % 60;
// // ✅ 格式化为 MM:SS
// const result = `${this.padTo2Digits(minutes)}:${this.padTo2Digits(seconds)}`;
// console.log(result); // ?️ "09:25"
return parseInt(countdown) * 1000;
},
},
watch: {
overviewType: {
deep: true,
handler(n, o) {
if (n === 'overview' || n === 'info') {
this.queryMessage();
}
},
},
$route: {
deep: true,
handler(n, o) {
if (n.name === 'PatientList') {
this.setTimerData({});
}
if (n.name === 'PatientDetails') {
// this.request = 0;
}
if (
n.path !== '/' &&
n.name !== 'PatientList' &&
n.name !== 'Min'
) {
this.init();
}
},
},
},
methods: {
5 months ago
...mapMutations('patient', ['setTimerData', 'setPatientData', 'setPatientDataCur']),
5 months ago
padTo2Digits(num) {
return num.toString().padStart(2, '0');
},
async init() {
const {
firstAidId
} = this.patientData;
if (!firstAidId) return;
// this.queryMessage();
await this.handMessageQuery();
5 months ago
5 months ago
this.request = 0;
this.utils.AnimationFrame.create(
'timerTask',
10000,
true,
(min) => {
this.getMessageQuery(min);
}
);
},
async queryMessage() {
const {
firstAidId
} = this.patientData;
const res = await messageQuery(firstAidId);
const {
code,
msg
} = res;
if (code === 200) {
this.setTimerData(res.data);
}
},
// 测评确认
tipConfirm() {
this.tip.visible = false;
const name = this.pushRouter[this.tip.k];
console.log('name: ', name);
this.$router.push({
name,
});
},
// 检验调取确认
LnspectConfirm() {
this.LnspectCancel();
this.$router.push({
name: 'Inspect',
});
},
LnspectCancel() {
this.tip.Lnspect = false;
this.$forceUpdate();
},
// 消息提示
async handMessageQuery() {
// 异步
const {
firstAidId
} = this.patientData;
if (firstAidId) {
const res = await messageQuery(firstAidId);
const {
code,
msg
} = res;
if (code === 200) {
this.setTimerData(res.data);
const {
map,
5 months ago
haveFlagInspect,
finishStatus,
5 months ago
} = res.data;
console.log('firstAidInspectDataDtos: ', haveFlagInspect);
5 months ago
// if(finishStatus == 1){
// this.setTimerData({})
// this.request = 0
// this.setPatientData({})
// this.setPatientDataCur({})
// }
5 months ago
for (let k in map) {
if (map[k]) {
this.taskList = {
text: map[k],
status: false,
};
}
if (map[k] && this.taskList.status === false) {
// 记录不重复弹窗
if (this.taskList.text === map[k]) {
this.taskList.status = true;
}
if (
this.$route.name !== 'Min' &&
this.$route.name !== 'PatientList'
) {
this.tip = {
visible: true,
k,
content: map[k],
};
}
}
}
5 months ago
// 检验调取 判断是否有急诊号 1 弹窗, 0 不弹窗 Thrombolysis
5 months ago
if (haveFlagInspect) {
if (
this.$route.name !== 'Inspect' &&
this.$route.name !== 'PatientList'
) {
this.tip.Lnspect = true;
}
}
} else {
this.$message.error(msg);
}
}
},
async getMessageQuery(min, firstAidId) {
const n = min;
if (this.request === n) {
// 符合轮训条件
console.log('十秒');
this.request = n + 1;
await this.handMessageQuery();
}
},
},
};
</script>
<style lang="less">
.zhezhao {
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
z-index: 999;
}
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
// text-align: center;
color: #2c3e50;
background: #f6f8fa;
height: 100%;
position: relative;
::-webkit-scrollbar {
display: none;
}
}
// .count-container {
// width: 200px;
// background: rgba(255, 255, 255, 0.1);
// border: 1px solid #ffffff;
// box-shadow: 0px 6px 10px 0px rgba(0, 59, 172, 0.2);
// border-radius: 4px;
// overflow: hidden;
// backdrop-filter: blur(4px);
// text-align: center;
// display: flex;
// flex-direction: column;
// align-items: center;
// padding: 16px 0;
// z-index: 999;
// .count-name {
// font-size: 26px;
// font-family: Source Han Sans CN, Source Han Sans CN-Bold;
// font-weight: 700;
// color: #393d4e;
// line-height: 26px;
// padding-bottom: 7px;
// }
// .van-count-down {
// font-size: 44px;
// font-family: Source Han Sans CN, Source Han Sans CN-Bold;
// font-weight: 700;
// color: #393d4e;
// line-height: 44px;
// }
// }
</style>
<style lang="stylus">
// @import './assets/portrait.styl';
@import './assets/less/common.less';
html {
overflow: hidden !important;
}
html,
body,
#app {
width: 100%;
height: 100%;
font-size: 1.2rem
}
.zhezhao .ant-spin-container {
height: 100%
}
.ant-modal div[aria-hidden="true"] {
display: none !important;
}
.storm {
display: flex;
flex: 1;
.storm-container {
display: flex;
flex-direction: column;
height: 100%;
background: linear-gradient(180deg, #dbeaff, #fbfdff);
.header {
// height: 88px;
}
.storm-content {
flex: 1;
width: 100%;
height: 100%;
overflow-y: auto;
display: flex;
}
}
}
</style>