| | |
| | | import { sockteStore } from '@/stores/sockteInfo' |
| | | import { patientInfoStore } from '@/stores/patient' |
| | | import os from "os" |
| | | import { reactive,computed, toRefs,onMounted ,ref,watch} from "vue" |
| | | import{sendPationCode,sendPationSet} from '../../samples/sockteStomp' |
| | | import {formatDate} from '@/utils/formatTime' |
| | | import { reactive, computed, toRefs, onMounted, ref, watch } from "vue" |
| | | import { sendPationCode, sendPationSet } from '../../samples/sockteStomp' |
| | | import { formatDate } from '@/utils/formatTime' |
| | | import state1 from '@/assets/state1.png' |
| | | import state2 from '@/assets/state2.png' |
| | | import state3 from '@/assets/state3.png' |
| | | import logo from '@/assets/LOGO.png' |
| | | |
| | | export default { |
| | | setup() { |
| | | let timer:any=0 |
| | | const user = userInfoStore() |
| | | const sockte= sockteStore() |
| | | const inputRef=ref() |
| | | const AudioRef0=ref() |
| | | const AudioRef=ref() |
| | | const AudioRef2=ref() |
| | | const AudioRef3=ref() |
| | | const isLink= computed(()=>{ |
| | | return !sockte.isLink |
| | | }) |
| | | const netLink= computed(()=>{ |
| | | return !sockte.netLink |
| | | }) |
| | | const weightInfo= computed(()=>{ |
| | | return sockte.weightSockte |
| | | }) |
| | | const xyjInfo= computed(()=>{ |
| | | return sockte.xyjSockte |
| | | }) |
| | | const patientInfo=computed(()=>{ |
| | | return patientInfoStore().patientInfo |
| | | }) |
| | | const viewNumber=computed(()=>{ |
| | | return patientInfoStore().viewNumber |
| | | }) |
| | | export default { |
| | | setup() { |
| | | let timer: any = 0 |
| | | const user = userInfoStore() |
| | | const sockte = sockteStore() |
| | | const inputRef = ref() |
| | | const AudioRef0 = ref() |
| | | const AudioRef = ref() |
| | | const AudioRef2 = ref() |
| | | const AudioRef3 = ref() |
| | | const isLink = computed(() => { |
| | | return !sockte.isLink |
| | | }) |
| | | const netLink = computed(() => { |
| | | return !sockte.netLink |
| | | }) |
| | | const weightInfo = computed(() => { |
| | | return sockte.weightSockte |
| | | }) |
| | | const xyjInfo = computed(() => { |
| | | return sockte.xyjSockte |
| | | }) |
| | | const patientInfo = computed(() => { |
| | | return patientInfoStore().patientInfo |
| | | }) |
| | | const viewNumber = computed(() => { |
| | | return patientInfoStore().viewNumber |
| | | }) |
| | | |
| | | const settime=()=>{ |
| | | // 计数倒计时 |
| | | state.clockNum=patientInfoStore().viewNumber |
| | | // 清除定时器 |
| | | clearInterval(state.timerNum) |
| | | console.log('------------------') |
| | | timer= setInterval(() => { |
| | | if (state.clockNum > 0) { |
| | | state.clockNum-- |
| | | } |
| | | else { |
| | | clearInterval(timer) |
| | | patientInfoStore().setpatientInfo({ |
| | | id:0, |
| | | code:'', |
| | | name:'', |
| | | patientAvatarIcon:'', |
| | | deviceCode:'', |
| | | hemoCode:'', |
| | | pureWeight:'' |
| | | }) |
| | | state.clockNum = patientInfoStore().viewNumber |
| | | } |
| | | }, 1000) |
| | | // 记录定时器 |
| | | state.timerNum=timer |
| | | console.log(timer) |
| | | } |
| | | const state=reactive({ |
| | | dialogVisible:false, |
| | | isActive:false, |
| | | inputCode:"", |
| | | Newdate:"", |
| | | clockNum:60, |
| | | timerNum:0,//定时器数 |
| | | aimTSL:0,// 目标脱水量, |
| | | gao_ya:"",//高压 |
| | | di_ya:"",//低压 |
| | | mai_bu:""//脉搏 |
| | | }) |
| | | watch( |
| | | ()=>patientInfo.value.id, |
| | | ()=>{ |
| | | console.log('患者变化了',patientInfo) |
| | | if(patientInfo.value.id!==0) |
| | | { |
| | | AudioRef.value.play(); |
| | | sockteStore().setweightSockte({ |
| | | type:"体重秤", |
| | | state:2, |
| | | deviceName:"", |
| | | result:"0", |
| | | resultTime:"" |
| | | }) |
| | | sockteStore().setxyjSockte({ |
| | | type:"血压计", |
| | | state:2, |
| | | deviceName:"", |
| | | result:"", |
| | | resultTime:"" |
| | | }) |
| | | settime() |
| | | |
| | | } |
| | | const settime = () => { |
| | | // 计数倒计时 |
| | | state.clockNum = patientInfoStore().viewNumber |
| | | // 清除定时器 |
| | | clearInterval(state.timerNum) |
| | | console.log('------------------') |
| | | timer = setInterval(() => { |
| | | if (state.clockNum > 0) { |
| | | state.clockNum-- |
| | | } |
| | | ) |
| | | watch( |
| | | ()=>weightInfo.value.resultTime, |
| | | ()=>{ |
| | | else { |
| | | clearInterval(timer) |
| | | patientInfoStore().setpatientInfo({ |
| | | id: 0, |
| | | code: '', |
| | | name: '', |
| | | patientAvatarIcon: '', |
| | | deviceCode: '', |
| | | hemoCode: '', |
| | | pureWeight: '' |
| | | }) |
| | | state.clockNum = patientInfoStore().viewNumber |
| | | sockteStore().setweightSockte({ |
| | | type:'体重秤', |
| | | deviceName: '', |
| | | result: '', |
| | | resultTime: '', |
| | | state: 2 |
| | | }) |
| | | sockteStore().setxyjSockte({ |
| | | type:'血压计', |
| | | deviceName: '', |
| | | result: '', |
| | | resultTime: '', |
| | | state: 2 |
| | | }) |
| | | state.aimTSL='' |
| | | state.gao_ya='' |
| | | state.di_ya='' |
| | | state.mai_bu='' |
| | | } |
| | | }, 1000) |
| | | // 记录定时器 |
| | | state.timerNum = timer |
| | | console.log(timer) |
| | | } |
| | | const state = reactive({ |
| | | logo:logo, |
| | | state1:state1, |
| | | state2:state2, |
| | | state3:state3, |
| | | dialogVisible: false, |
| | | isActive: false, |
| | | inputCode: "", |
| | | Newdate: "", |
| | | clockNum: 60, |
| | | timerNum: 0,//定时器数 |
| | | aimTSL: '',// 目标脱水量, |
| | | gao_ya: "",//高压 |
| | | di_ya: "",//低压 |
| | | mai_bu: ""//脉搏 |
| | | }) |
| | | watch( |
| | | () => patientInfo.value.id, |
| | | () => { |
| | | console.log('患者变化了', patientInfo) |
| | | if (patientInfo.value.id !== 0) { |
| | | AudioRef.value.play(); |
| | | sockteStore().setweightSockte({ |
| | | type: "体重秤", |
| | | state: 2, |
| | | deviceName: "", |
| | | result: "0", |
| | | resultTime: "" |
| | | }) |
| | | sockteStore().setxyjSockte({ |
| | | type: "血压计", |
| | | state: 2, |
| | | deviceName: "", |
| | | result: "", |
| | | resultTime: "" |
| | | }) |
| | | settime() |
| | | console.log("体重变化了") |
| | | // AudioRef2.value.play() |
| | | if(patientInfo.value.id===0){ |
| | | |
| | | } |
| | | } |
| | | ) |
| | | watch( |
| | | () => weightInfo.value.resultTime, |
| | | () => { |
| | | settime() |
| | | console.log("体重变化了") |
| | | // AudioRef2.value.play() |
| | | if (patientInfo.value.id === 0) { |
| | | AudioRef0.value.play() |
| | | } |
| | | else { |
| | | AudioRef2.value.play() |
| | | // 发送结果到sockte服务 |
| | | const mode = { |
| | | patientCode: patientInfo.value.code, |
| | | weight: weightInfo.value.result, |
| | | bloodPressure: '' |
| | | |
| | | } |
| | | console.log('发送患者结果', mode) |
| | | sendPationSet(mode) |
| | | // 计算目标脱水量 |
| | | if (Number(weightInfo.value.result) > 0 && Number(patientInfo.value.pureWeight) !== 0) { |
| | | state.aimTSL = (Number(weightInfo.value.result) - Number(patientInfo.value.pureWeight)).toFixed(2) |
| | | } |
| | | } |
| | | } |
| | | ) |
| | | watch( |
| | | () => xyjInfo.value.resultTime, |
| | | () => { |
| | | if (xyjInfo.value.result !== '') { |
| | | const list = xyjInfo.value.result.split(',') |
| | | if (list.length === 3) { |
| | | state.gao_ya = list[0] |
| | | state.di_ya = list[1] |
| | | state.mai_bu = list[2] |
| | | } |
| | | if (patientInfo.value.id === 0) { |
| | | AudioRef0.value.play() |
| | | } |
| | | else{ |
| | | AudioRef2.value.play() |
| | | // 发送结果到sockte服务 |
| | | const mode={ |
| | | patientCode:patientInfo.value.code, |
| | | weight:weightInfo.value.result, |
| | | bloodPressure:'' |
| | | settime() |
| | | } else { |
| | | AudioRef3.value.play() |
| | | settime() |
| | | const mode = { |
| | | patientCode: patientInfo.value.code, |
| | | weight: weightInfo.value.result, |
| | | bloodPressure: xyjInfo.value.result |
| | | |
| | | } |
| | | console.log('发送患者结果',mode) |
| | | console.log('发送患者结果', mode) |
| | | sendPationSet(mode) |
| | | // 计算目标脱水量 |
| | | if(Number(weightInfo.value.result)>0&&Number(patientInfo.value.pureWeight)!==0){ |
| | | state.aimTSL=Number(weightInfo.value.result)-Number(patientInfo.value.pureWeight) |
| | | } |
| | | } |
| | | } else { |
| | | state.gao_ya = "" |
| | | state.di_ya = "" |
| | | state.mai_bu = "" |
| | | } |
| | | ) |
| | | watch( |
| | | ()=>xyjInfo.value.resultTime, |
| | | ()=>{ |
| | | if(xyjInfo.value.result!==''){ |
| | | const list=xyjInfo.value.result.split(',') |
| | | if(list.length===3){ |
| | | state.gao_ya=list[0] |
| | | state.di_ya=list[1] |
| | | state.mai_bu=list[2] |
| | | } |
| | | if(patientInfo.value.id===0){ |
| | | AudioRef0.value.play() |
| | | settime() |
| | | }else{ |
| | | AudioRef3.value.play() |
| | | settime() |
| | | const mode={ |
| | | patientCode:patientInfo.value.code, |
| | | weight:weightInfo.value.result, |
| | | bloodPressure:xyjInfo.value.result |
| | | |
| | | } |
| | | console.log('发送患者结果',mode) |
| | | sendPationSet(mode) |
| | | } |
| | | }else{ |
| | | state.gao_ya="" |
| | | state.di_ya="" |
| | | state.mai_bu="" |
| | | } |
| | | } |
| | | ) |
| | | watch(()=>viewNumber, |
| | | ()=>{ |
| | | state.clockNum=viewNumber.value |
| | | } |
| | | ) |
| | | const inputChabge=()=>{ |
| | | sendPationCode(state.inputCode) |
| | | setTimeout(function(){ |
| | | state.inputCode='' |
| | | },1000) |
| | | } |
| | | onMounted(() => { |
| | | console.log('页面初始化',os.hostname()) |
| | | state.clockNum=patientInfoStore().viewNumber |
| | | setTimeout(function(){ |
| | | console.log('7秒后操作') |
| | | inputRef.value.focus(); |
| | | },7000) |
| | | setInterval(function(){ |
| | | state.Newdate=formatDate(new Date(),"YYYY-mm-dd HH:MM:SS") |
| | | },1000) |
| | | }) |
| | | return{ ...toRefs(state),isLink,netLink,weightInfo,patientInfo,xyjInfo,inputRef,AudioRef0,AudioRef,AudioRef2,AudioRef3,inputChabge |
| | | ) |
| | | watch(() => viewNumber, |
| | | () => { |
| | | state.clockNum = viewNumber.value |
| | | } |
| | | ) |
| | | const inputChabge = () => { |
| | | sendPationCode(state.inputCode) |
| | | setTimeout(function () { |
| | | state.inputCode = '' |
| | | }, 1000) |
| | | } |
| | | onMounted(() => { |
| | | console.log('页面初始化', os.hostname()) |
| | | state.clockNum = patientInfoStore().viewNumber |
| | | setTimeout(function () { |
| | | console.log('7秒后操作') |
| | | inputRef.value.focus(); |
| | | }, 7000) |
| | | setInterval(function () { |
| | | state.Newdate = formatDate(new Date(), "YYYY-mm-dd HH:MM:SS") |
| | | }, 1000) |
| | | }) |
| | | return { |
| | | ...toRefs(state), isLink, netLink, weightInfo, patientInfo, xyjInfo, inputRef, AudioRef0, AudioRef, AudioRef2, AudioRef3, inputChabge |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <template> |
| | | <div class="home"> |
| | | <!-- 提醒刷卡 --> |
| | | <div class="page flex-col"> |
| | | <!-- 提醒刷卡 --> |
| | | <audio src="https://dhcdn.leon056.com/hemo/autoselfsign/step1.mp3" ref="AudioRef0" id="eventAudio"></audio> |
| | | <!-- 患者信息读取成功 --> |
| | | <audio src="https://dhcdn.leon056.com/hemo/autoselfsign/step2.mp3" ref="AudioRef" id="eventAudio"></audio> |
| | |
| | | <audio src="https://dhcdn.leon056.com/hemo/autoselfsign/step3.mp3" ref="AudioRef2" id="eventAudio"></audio> |
| | | <!-- 血压结果回传成功 --> |
| | | <audio src="https://dhcdn.leon056.com/hemo/autoselfsign/step4.mp3" ref="AudioRef3" id="eventAudio"></audio> |
| | | <el-dialog |
| | | title="提示" |
| | | v-model="netLink" |
| | | width="30%"> |
| | | <el-dialog title="提示" v-model="netLink" width="30%"> |
| | | <span>无法链接到网络!</span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="提示" |
| | | v-model="isLink" |
| | | width="30%"> |
| | | <el-dialog title="提示" v-model="isLink" width="30%"> |
| | | <span>sockte连接失败正在重连。。。。。。</span> |
| | | </el-dialog> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <div class="tale"> |
| | | <img class="imgss" alt="Vue logo" src="@/assets/logo.png" /> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <!-- <div> sockte连接状态{{isLink}}</div> |
| | | <div> 网络连接状态{{netLink}}</div> --> |
| | | <el-input id="inputCode" @change="inputChabge" v-model="inputCode" ref="inputRef" placeholder="" /> |
| | | |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <div class="datess"> |
| | | {{clockNum}} |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <div class="grid-container"> |
| | | <div class="grid-item"> |
| | | <el-avatar |
| | | shape="square" |
| | | :size="100" |
| | | fit="cover" |
| | | :src="patientInfo.patientAvatarIcon" |
| | | /> |
| | | <div class="zsf">{{patientInfo.name}}</div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="lableText">当前时间:</div> |
| | | <div class="conText">{{Newdate}}</div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="lableText">透析号:</div> |
| | | <div class="conText">{{patientInfo.hemoCode}}</div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="lableText">机号:</div> |
| | | <div class="conText">{{patientInfo.deviceCode}}</div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="lableText">序号:</div> |
| | | <div class="conText">0</div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="lableText">干体重(kg):</div> |
| | | <div class="conText">{{patientInfo.pureWeight}}</div> |
| | | </div> |
| | | <div class="grid-item" > |
| | | <div> |
| | | <div class="lableText" v-if="weightInfo.state===2">透前称重(kg):</div> |
| | | <div class="lableText" v-if="weightInfo.state===1" style="color:red">体重秤通讯服务正常运行但未联通设备</div> |
| | | <div class="lableText" v-if="weightInfo.state===0" style="color:red">体重秤通讯服务不正常 </div> |
| | | <div class="conText">{{weightInfo.result}}</div> |
| | | </div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="lableText">目标脱水量:</div> |
| | | <div class="conText">{{aimTSL}}</div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="lableText" v-if="xyjInfo.state===2">血压:</div> |
| | | <div class="lableText" v-if="xyjInfo.state===1" style="color:red">血压通讯服务正常运行但未联通设备</div> |
| | | <div class="lableText" v-if="xyjInfo.state===0" style="color:red">血压通讯服务不正常 </div> |
| | | <div class="conText">{{gao_ya}}/{{di_ya}}</div> |
| | | </div> |
| | | <div class="box_7 flex-col justify-between"> |
| | | <div class="header flex-col"> |
| | | <div class="box_8 flex-row"> |
| | | <img |
| | | class="image_1" |
| | | referrerpolicy="no-referrer" |
| | | :src="logo" |
| | | /> |
| | | <el-input id="inputCode" style="width:50px" @change="inputChabge" v-model="inputCode" ref="inputRef" placeholder="" /> |
| | | <span class="text_1">自助签到</span> <span class="text_2">{{clockNum}}</span> |
| | | </div> |
| | | </div> |
| | | <div class="grid_3 flex-row"> |
| | | <div class="section_1 flex-col"> |
| | | <div class="block_2 flex-row justify-between"> |
| | | <div class="image-wrapper_1 flex-col"> |
| | | <img |
| | | class="image_2" |
| | | referrerpolicy="no-referrer" |
| | | :src="patientInfo.patientAvatarIcon" |
| | | /> |
| | | </div> |
| | | <div class="group_6 flex-col"> |
| | | <div class="text-wrapper_13 flex-row justify-between"> |
| | | <span class="text_3">姓名:</span> |
| | | <span class="text_4">{{patientInfo.name}}</span> |
| | | </div> |
| | | <div class="block_1 flex-col"></div> |
| | | <div class="text-wrapper_14 flex-row justify-between"> |
| | | <span class="text_5">透析号:</span> |
| | | <span class="text_6">{{patientInfo.hemoCode}}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="section_4 flex-col"> |
| | | <div class="group_7 flex-row justify-between"> |
| | | <span class="text_7">血压(mmHg):</span> |
| | | <img |
| | | v-if="xyjInfo.state === 2" |
| | | class="group_1" |
| | | referrerpolicy="no-referrer" |
| | | :src="state1" |
| | | /> |
| | | <img |
| | | v-if="xyjInfo.state === 1" |
| | | class="group_1" |
| | | referrerpolicy="no-referrer" |
| | | :src="state2" |
| | | /> |
| | | <img |
| | | v-if="xyjInfo.state === 0" |
| | | class="group_1" |
| | | referrerpolicy="no-referrer" |
| | | :src="state3" |
| | | /> |
| | | </div> |
| | | <div class="text-wrapper_15 flex-row"> |
| | | <span class="text_8">{{ gao_ya }}/{{ di_ya }}</span> |
| | | </div> |
| | | </div> |
| | | <div class="section_5 flex-col"> |
| | | <div class="box_9 flex-col"> |
| | | <div class="text-wrapper_16 flex-row justify-between"> |
| | | <span class="text_9">机号:</span> |
| | | <span class="text_10">{{patientInfo.deviceCode}}</span> |
| | | </div> |
| | | <div class="box_3 flex-col"></div> |
| | | <div class="text-wrapper_17 flex-row justify-between"> |
| | | <span class="text_11">干体重(kg):</span> |
| | | <span class="text_12">{{ patientInfo.pureWeight }}</span> |
| | | </div> |
| | | <div class="box_4 flex-col"></div> |
| | | <div class="text-wrapper_18 flex-row justify-between"> |
| | | <span class="text_13">目标脱水量(L):</span> |
| | | <span class="text_14">{{aimTSL}}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="section_6 flex-col"> |
| | | <div class="section_12 flex-row justify-between"> |
| | | <span class="text_15">透前体重(kg):</span> |
| | | <img |
| | | v-if="weightInfo.state === 2" |
| | | class="group_1" |
| | | referrerpolicy="no-referrer" |
| | | :src="state1" |
| | | /> |
| | | <img |
| | | v-if="weightInfo.state === 1" |
| | | class="group_1" |
| | | referrerpolicy="no-referrer" |
| | | :src="state2" |
| | | /> |
| | | <img |
| | | v-if="weightInfo.state === 0" |
| | | class="group_1" |
| | | referrerpolicy="no-referrer" |
| | | :src="state3" |
| | | /> |
| | | </div> |
| | | <div class="section_13 flex-row justify-between"> |
| | | <span class="text_16">{{ weightInfo.result }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </template> |
| | | <style> |
| | | body { |
| | | background: #f3f7fb; |
| | | } |
| | | .coldev { |
| | | height: 200px; |
| | | background: #ffff; |
| | | } |
| | | .grid-container { |
| | | display: grid; |
| | | grid-template-columns: 33% 33% 33%; |
| | | grid-gap: 20px; |
| | | background: #f3f7fb; |
| | | padding: 10px; |
| | | } |
| | | .grid-container > div { |
| | | background: #ffffff; |
| | | height: 150px; |
| | | text-align: center; |
| | | border-radius: 10px; |
| | | padding: 10px; |
| | | } |
| | | .lableText { |
| | | text-align: left; |
| | | /* height: 50px; */ |
| | | /* line-height: 50px; */ |
| | | padding-top: 30px; |
| | | font-size: 13pt; |
| | | } |
| | | .conText { |
| | | height: 50px; |
| | | line-height: 50px; |
| | | padding-top: 30px; |
| | | color: #769aff; |
| | | font-size: 20pt; |
| | | } |
| | | .imgss { |
| | | height: 30px; |
| | | } |
| | | .tale { |
| | | height: 30px; |
| | | line-height: 50px; |
| | | /* text-align: center; */ |
| | | } |
| | | .zsf { |
| | | font-size: 18pt; |
| | | margin-top: 15pt; |
| | | color: #769aff; |
| | | } |
| | | .active{ |
| | | background: #c1c2c6; |
| | | color: black; |
| | | } |
| | | .datess{ |
| | | text-align: right; |
| | | padding-right: 20px; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | color: red; |
| | | font-weight: 1000; |
| | | } |
| | | </style> |
| | | @import './css/common.css'; |
| | | @import './css/index.css'; |
| | | </style> |