| | |
| | | <script lang="ts"> |
| | | import { userInfoStore } from '@/stores/userInfo' |
| | | import { sockteStore } from '@/stores/sockteInfo' |
| | | import { ipcRenderer } from 'electron' |
| | | import { patientInfoStore } from '@/stores/patient' |
| | | import { updatePatient } from '@/api/user/index' |
| | | import os from "os" |
| | | import Speech from 'speak-tts' |
| | | import { reactive, computed, toRefs, onMounted, ref, watch } from "vue" |
| | | import { sendPationCode, sendPationSet } from '../../samples/sockteStomp' |
| | | import { sendPationCodeApi } from '../../samples/httpApi' |
| | | import { formatDate } from '@/utils/formatTime' |
| | | import logo from '@/assets/LOGO.png' |
| | | import state1 from '@/assets/state1.png' |
| | | import state2 from '@/assets/state2.png' |
| | | import state3 from '@/assets/state3.png' |
| | | import { number } from 'yargs' |
| | | import logo from '@/assets/LOGO.png' |
| | | import step6 from '@/assets/mp3/step6.mp3' |
| | | import step5 from '@/assets/mp3/step5.mp3' |
| | | import step4 from '@/assets/mp3/step4.mp3' |
| | | import step3 from '@/assets/mp3/step3.mp3' |
| | | import step2 from '@/assets/mp3/step2.mp3' |
| | | import step1 from '@/assets/mp3/step1.mp3' |
| | | import step7 from '@/assets/mp3/chongfuchengzhong.mp3' |
| | | import login from '@/views/login/index.vue' |
| | | import { confingInfoStore } from '@/stores/StoresConfing' |
| | | import { ElMessage } from 'element-plus' |
| | | |
| | | 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 |
| | | }) |
| | | name: 'hoem', |
| | | components: { login }, |
| | | setup() { |
| | | let timer: any = 0 |
| | | const loginRef = ref(); |
| | | const speech = ref(null) |
| | | const user = userInfoStore() |
| | | const sockte = sockteStore() |
| | | const inputRef = ref() |
| | | let patientCodeLs = '' |
| | | let patientCodeLsXy = '' |
| | | const isUseFaceRecogService = ref(false) |
| | | const isLink = computed(() => { |
| | | return !sockte.isLink |
| | | }) |
| | | const netLink = computed(() => { |
| | | return !sockte.netLink |
| | | }) |
| | | const weightInfo = computed(() => { |
| | | return sockte.weightSockte |
| | | }) |
| | | const faceInfo = computed(() => { |
| | | return sockte.faceInfoSockte |
| | | }) |
| | | const xyjInfo = computed(() => { |
| | | return sockte.xyjSockte |
| | | }) |
| | | const dkqInfo = computed(() => { |
| | | return sockte.dkqSockte |
| | | }) |
| | | 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 |
| | | 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 settime = () => { |
| | | // 计数倒计时 |
| | | state.clockNum = patientInfoStore().viewNumber |
| | | // 清除定时器 |
| | | clearInterval(state.timerNum) |
| | | console.log('------------------') |
| | | timer = setInterval(() => { |
| | | if (state.clockNum > 0) { |
| | | state.clockNum-- |
| | | } |
| | | const state = reactive({ |
| | | state1:state1, |
| | | state2:state2, |
| | | state3:state3, |
| | | logo:logo, |
| | | 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() |
| | | |
| | | } |
| | | } |
| | | ) |
| | | 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() |
| | | 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) |
| | | else { |
| | | clearInterval(timer) |
| | | const datetimeCON = patientInfoStore().patientInfo.datetime |
| | | patientInfoStore().setpatientInfo({ |
| | | id: 0, |
| | | code: '', |
| | | name: '', |
| | | patientAvatarIcon: '', |
| | | deviceCode: '', |
| | | hemoCode: '', |
| | | pureWeight: '', |
| | | datetime: datetimeCON |
| | | }) |
| | | 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 = '' |
| | | } |
| | | 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 |
| | | } |
| | | }, 1000) |
| | | // 记录定时器 |
| | | state.timerNum = timer |
| | | console.log(timer) |
| | | } |
| | | const state = reactive({ |
| | | caozuo: 0,// 点击10下才能关闭 |
| | | logo: logo, |
| | | step5: step5, |
| | | step4: step4, |
| | | step3: step3, |
| | | step7: step7, |
| | | step2: step2, |
| | | step1: step1, |
| | | step6: step6, |
| | | state1: state1, |
| | | state2: state2, |
| | | state3: state3, |
| | | dialogVisible: false, |
| | | isActive: false, |
| | | inputCode: "", |
| | | Newdate: "", |
| | | clockNum: 60, |
| | | timerNum: 0,//定时器数 |
| | | aimTSL: '',// 目标脱水量, |
| | | gao_ya: "",//高压 |
| | | di_ya: "",//低压 |
| | | mai_bu: "",//脉搏, |
| | | haodu: "0px", |
| | | }) |
| | | watch( |
| | | () => patientInfo.value.datetime, |
| | | () => { |
| | | console.log('患者信息变化', patientInfo.value) |
| | | patientCodeLs = '' |
| | | patientCodeLsXy = '' |
| | | console.log(patientCodeLs, '患者codec初始化') |
| | | state.aimTSL = '' |
| | | sockteStore().setweightSockte({ |
| | | type: "体重秤", |
| | | state: 2, |
| | | deviceName: "", |
| | | result: "0", |
| | | resultTime: "" |
| | | }) |
| | | sockteStore().setxyjSockte({ |
| | | type: "血压计", |
| | | state: 2, |
| | | deviceName: "", |
| | | result: "", |
| | | resultTime: "" |
| | | }) |
| | | settime() |
| | | if (patientInfo.value.id !== 0 && patientInfo.value.name !== '' && patientInfo.value.isScheduled === 1) { |
| | | let str = `${patientInfo.value.name}识别成功。` |
| | | speech.value?.speak({ text: str }).then(() => { |
| | | console.log("播报完成...") |
| | | }) |
| | | |
| | | } |
| | | // 没有找到患者 |
| | | else if (patientInfo.value.name === '') { |
| | | // speech.value?.speak({ text: "没有找到患者,请重新刷卡" }).then(() => { |
| | | // console.log("播报完成...") |
| | | // }) |
| | | if (isUseFaceRecogService.value) { |
| | | state.dialogVisible = true |
| | | } |
| | | return |
| | | } |
| | | // 没有排班 |
| | | else if (patientInfo.value.isScheduled === 0) { |
| | | speech.value?.speak({ text: `${patientInfo.value.name}今日没有排班,不能自助签到` }).then(() => { |
| | | console.log("播报完成...") |
| | | }) |
| | | if (isUseFaceRecogService.value) { |
| | | state.dialogVisible = true |
| | | } |
| | | return |
| | | } |
| | | } |
| | | ); |
| | | watch( |
| | | () => weightInfo.value.resultTime, |
| | | () => { |
| | | console.log("体重变化了", weightInfo.value) |
| | | if (patientInfo.value.id === 0) { |
| | | speech.value?.speak({ text: "没有识别的患者,请先验证患者" }).then(() => { |
| | | console.log("播报完成...") |
| | | }) |
| | | } |
| | | if (weightInfo.value.result !== "0") { |
| | | // 发送结果到sockte服务 |
| | | const mode = { |
| | | patientCode: patientInfo.value.code, |
| | | weight: weightInfo.value.result, |
| | | bloodPressure: '' |
| | | |
| | | } |
| | | console.log('发送患者结果,前提是患者code 不能重复', mode) |
| | | if (patientCodeLs !== mode.patientCode) { |
| | | const tt = mode.weight.replace('.', '点') |
| | | console.log('发送患者结果', tt) |
| | | speech.value?.speak({ text: `称重完成,${tt}kg` }).then(() => { |
| | | console.log("播报完成...") |
| | | }) |
| | | // api上传 |
| | | updatePatient(mode).then(re => { |
| | | console.log(re) |
| | | }).catch(() => { |
| | | ElMessage.error('结果上报出错,请联系后台管理员') |
| | | }) |
| | | // sendPationSet(mode) |
| | | patientCodeLs = mode.patientCode |
| | | } |
| | | else { |
| | | // console.log(`patientCodeLs===${patientCodeLs} ,mode.patCode${mode.patientCode}`) |
| | | // speech.value?.speak({ text: "不能重复称重,请先刷卡然后再称重" }).then(() => { |
| | | // console.log("播报完成...") |
| | | // }) |
| | | } |
| | | // 计算目标脱水量 |
| | | if (Number(weightInfo.value.result) > 0 && Number(patientInfo.value.pureWeight) !== 0) { |
| | | state.aimTSL = (Number(weightInfo.value.result) - Number(patientInfo.value.pureWeight)- Number(patientInfo.value.clothesWeight)).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) { |
| | | speech.value?.speak({ text: "没有识别的患者,请先验证患者" }).then(() => { |
| | | console.log("播报完成...") |
| | | }) |
| | | } else { |
| | | const mode = { |
| | | patientCode: patientInfo.value.code, |
| | | weight: '', |
| | | bloodPressure: xyjInfo.value.result |
| | | |
| | | } |
| | | console.log('发送患者结果', mode) |
| | | if (patientCodeLsXy === mode.patientCode) { |
| | | speech.value?.speak({ text: '不能重复测量血压,请重新识别患者再测量血压' }).then(() => { |
| | | console.log("播报完成...") |
| | | }) |
| | | console.log('如果是重复提交 就不要上传到api') |
| | | return false |
| | | } else { |
| | | updatePatient(mode).then(re => { |
| | | speech.value?.speak({ text: `收缩压:${state.gao_ya},舒张压:${state.di_ya},脉搏:${state.mai_bu}` }).then(() => { |
| | | console.log("播报完成...") |
| | | }) |
| | | patientCodeLsXy = mode.patientCode |
| | | console.log(re) |
| | | }) |
| | | sendPationSet(mode) |
| | | } |
| | | } |
| | | } else { |
| | | state.gao_ya = "" |
| | | state.di_ya = "" |
| | | state.mai_bu = "" |
| | | } |
| | | } |
| | | ); |
| | | watch( |
| | | () => dkqInfo.value.resultTime, |
| | | () => { |
| | | state.dialogVisible = false |
| | | console.log(dkqInfo.value, '读卡器') |
| | | if (dkqInfo.value.result !== '' && dkqInfo.value.result !== undefined) { |
| | | const code = dkqInfo.value.result.split(",")[0] |
| | | console.log('获取读卡器的code', code) |
| | | sendPationCodeApi(code) |
| | | } |
| | | } |
| | | ); |
| | | watch( |
| | | ()=>faceInfo.value.result, |
| | | ()=>{ |
| | | console.log('页面收到了人脸识别') |
| | | sendPationCodeApi(faceInfo.value.result) |
| | | // console.log(faceInfo.value.result) |
| | | } |
| | | ) |
| | | watch(() => viewNumber, |
| | | () => { |
| | | state.clockNum = viewNumber.value |
| | | } |
| | | ); |
| | | const inputChabge = () => { |
| | | sendPationCodeApi(state.inputCode) |
| | | setTimeout(function () { |
| | | state.inputCode = '' |
| | | }, 1000) |
| | | } |
| | | const guyanbi = () => { |
| | | state.caozuo++ |
| | | if (state.caozuo > 10) { |
| | | ipcRenderer.send('winClose') |
| | | } |
| | | console.log(state.caozuo) |
| | | } |
| | | onMounted(() => { |
| | | console.log('页面初始化', os.hostname()) |
| | | console.log('页面初始化读取配置文件', confingInfoStore().confingInfo) |
| | | // 是否开启脸识别 |
| | | isUseFaceRecogService.value = confingInfoStore().confingInfo.isUseFaceRecogService |
| | | if (isUseFaceRecogService.value) { |
| | | state.dialogVisible = true |
| | | } |
| | | state.haodu = (document.documentElement.clientHeight - 180) / 2 + 'px' |
| | | state.clockNum = patientInfoStore().viewNumber |
| | | setInterval(function () { |
| | | inputRef.value.focus(); |
| | | }, 1000) |
| | | speech.value = new Speech(); |
| | | speech.value?.setLanguage('zh-CN') |
| | | speech.value?.init().then(() => { |
| | | console.log('语音初始化成功') |
| | | }) |
| | | |
| | | }) |
| | | return { |
| | | ...toRefs(state), guyanbi, loginRef, isLink, netLink, weightInfo, patientInfo, xyjInfo, inputRef, inputChabge |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <template> |
| | | <div class="home"> |
| | | <!-- 提醒刷卡 --> |
| | | <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%"> |
| | | <span>无法链接到网络!</span> |
| | | </el-dialog> |
| | | <el-dialog title="提示" v-model="isLink" width="30%"> |
| | | <span>sockte连接失败正在重连。。。。。。</span> |
| | | </el-dialog> |
| | | <div> |
| | | <el-row> |
| | | <el-col :span="6"> |
| | | <div class="imglogo"> |
| | | <el-image :src="logo" /> |
| | | </div> |
| | | |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-input id="inputCode" @change="inputChabge" v-model="inputCode" ref="inputRef" placeholder="" /> |
| | | </el-col> |
| | | <el-col :span="8" class="titleText"> |
| | | 患者签到 |
| | | </el-col> |
| | | <el-col class="clockNum" :span="8">{{clockNum}}</el-col> |
| | | </el-row> |
| | | </div> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12" class="item"> |
| | | <div> |
| | | <el-row> |
| | | <el-col :span="10"> |
| | | <div class="patimg"> |
| | | <el-image style="width:200px;height:280px;" :src="patientInfo.patientAvatarIcon" /> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="14"> |
| | | <div class="chenlabe"> |
| | | <div class="chenlabel"> |
| | | <div class="chenlabe2"> |
| | | <el-row> |
| | | <el-col class="lableClass" :span="12"> |
| | | 姓名: |
| | | </el-col> |
| | | <el-col class="inputClasss" :span="12"> |
| | | {{patientInfo.name}} |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | </div> |
| | | </div> |
| | | <div class="chenlabel" > |
| | | <div class="chenlabe2"> |
| | | <el-row> |
| | | <el-col class="lableClass" :span="12"> |
| | | 透析号: |
| | | </el-col> |
| | | <el-col class="inputClasss" :span="12"> |
| | | {{patientInfo.hemoCode}} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | |
| | | </el-col> |
| | | <el-col :span="12" class="item"> |
| | | <div class="xyjCON"> |
| | | <el-row class="xyclass"> |
| | | <el-col :span="12" >血压(mmHg):</el-col> |
| | | <el-col :span="12" > |
| | | <div class="xyimg"> |
| | | <el-image v-if="xyjInfo.state === 2" style="width: 60px; height: 60px" :src="state1" /> |
| | | <el-image v-if="xyjInfo.state === 1" style="width: 60px; height: 60px" :src="state2" /> |
| | | <el-image v-if="xyjInfo.state === 0" style="width: 60px; height: 60px" :src="state3" /> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <div class="xyjnumber"> |
| | | {{ gao_ya }}/{{ di_ya }} |
| | | </div> |
| | | </el-row> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12" class="item"> |
| | | <div> |
| | | <div class="deviceInfo"> |
| | | <el-row class="deviceInfoItem"> |
| | | <el-col class="text" :span="12" >机号:</el-col> |
| | | <el-col class="value" :span="12" > {{patientInfo.deviceCode}}</el-col> |
| | | </el-row> |
| | | <el-row class="deviceInfoItem"> |
| | | <el-col class="text" :span="12" >干体重(kg):</el-col> |
| | | <el-col class="value" :span="12" > {{ patientInfo.pureWeight }}</el-col> |
| | | </el-row> |
| | | <el-row class="deviceInfoItem"> |
| | | <el-col class="text" :span="12" >目标脱水量(L):</el-col> |
| | | <el-col class="value" :span="12" > {{aimTSL}}</el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12" class="item"> |
| | | <div class="xyjCON"> |
| | | <el-row class="xyclass"> |
| | | <el-col :span="12" >透前体重(kg):</el-col> |
| | | <el-col :span="12" > |
| | | <div class="xyimg"> |
| | | <el-image v-if="weightInfo.state === 2" style="width: 60px; height: 60px" :src="state1" /> |
| | | <el-image v-if="weightInfo.state === 1" style="width: 60px; height: 60px" :src="state2" /> |
| | | <el-image v-if="weightInfo.state === 0" style="width: 60px; height: 60px" :src="state3" /> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <div class="xyjnumber"> |
| | | {{ weightInfo.result }} |
| | | </div> |
| | | </el-row> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <div> |
| | | <div class="pagehome"> |
| | | <el-dialog v-model="dialogVisible" width="80%" center :show-close="false"> |
| | | <template> |
| | | <div class="my-header"> |
| | | <h4>人脸识别中。。。</h4> |
| | | </div> |
| | | </template> |
| | | <login ref="loginRef" /> |
| | | </el-dialog> |
| | | </div> |
| | | <el-dialog title="提示" v-model="netLink" width="30%"> |
| | | <span>无法链接到网络!</span> |
| | | </el-dialog> |
| | | <el-row class="header"> |
| | | <el-col :span="8"> |
| | | <img class="image_1" referrerpolicy="no-referrer" :src="logo" /> |
| | | <div class="inpu"> |
| | | <el-input v-model="inputCode" ref="inputRef" id="inputCode" class="inputCode" @change="inputChabge" |
| | | placeholder="请输入患者卡号或扫描条码" /> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" class="titleText"> |
| | | <span class="text_1" @click="guyanbi">自助签到</span> <span class="text_2"></span> |
| | | </el-col> |
| | | <el-col :span="8" class="inputcla"> |
| | | {{ clockNum }} |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <div class="divcol" :style="{ height: haodu }"> |
| | | <el-row style="width: 100%; height: 100%"> |
| | | <el-col :span="8" class="imgclass"> |
| | | <el-image style="width: 100%; height: 85%" :src="patientInfo.patientAvatarIcon" fit="cover" /> |
| | | </el-col> |
| | | <el-col :span="15" class="userinfo"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <div class="lableclass"> |
| | | 姓名: |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="textclass"> |
| | | {{ patientInfo.name }} |
| | | </div> |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | <el-row style="margin-top: 10%;"> |
| | | <el-col :span="12"> |
| | | <div class="lableclass"> |
| | | 透析号: |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="textclass"> |
| | | {{ patientInfo.hemoCode }} |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="divcol" :style="{ height: haodu }"> |
| | | <el-row class="titleHand"> |
| | | <el-col :span="12"> |
| | | <div class="tilaft"> |
| | | 血压(mmHg): |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="tiregth"> |
| | | <img class="image_3" v-if="xyjInfo.state === 2" referrerpolicy="no-referrer" :src="state1" /> |
| | | <img class="image_3" v-if="xyjInfo.state === 1" referrerpolicy="no-referrer" :src="state2" /> |
| | | <img class="image_3" v-if="xyjInfo.state === 0" referrerpolicy="no-referrer" :src="state3" /> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row class="divbody"> |
| | | <div class="bodeText"> |
| | | {{ Number(gao_ya) }}/{{ Number(di_ya) }} |
| | | <br />{{ Number(mai_bu) }} |
| | | </div> |
| | | </el-row> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 20px;" :gutter="20"> |
| | | <el-col :span="12"> |
| | | <div class="divcol" :style="{ height: haodu }"> |
| | | <el-row class="rowdiv"> |
| | | <el-col :span="12"> |
| | | <div class="lableclass"> |
| | | 衣物重(kg): |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="textclass"> |
| | | {{ patientInfo.clothesWeight }} |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row class="rowdiv"> |
| | | <el-col :span="12"> |
| | | <div class="lableclass"> |
| | | 干体重(kg): |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="textclass"> |
| | | {{ patientInfo.pureWeight }} |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row class="rowdiv"> |
| | | <el-col :span="12"> |
| | | <div class="lableclass"> |
| | | 目标脱水量(L): |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="textclass"> |
| | | {{ aimTSL }} |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="divcol" :style="{ height: haodu }"> |
| | | <el-row class="titleHand"> |
| | | <el-col :span="12"> |
| | | <div class="tilaft"> |
| | | 透前体重(kg): |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="tiregth"> |
| | | <img v-if="weightInfo.state === 2" class="image_4" referrerpolicy="no-referrer" :src="state1" /> |
| | | <img v-if="weightInfo.state === 1" class="image_4" referrerpolicy="no-referrer" :src="state2" /> |
| | | <img v-if="weightInfo.state === 0" class="image_4" referrerpolicy="no-referrer" :src="state3" /> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row class="divbody"> |
| | | <div class="bodeText"> |
| | | {{ weightInfo.result }} |
| | | </div> |
| | | </el-row> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | |
| | | </template> |
| | | <style lang="scss"> |
| | | .home{ |
| | | background: #F3F6FE; |
| | | } |
| | | .item{ |
| | | padding: 20px; |
| | | } |
| | | .item>div{ |
| | | background: #FFFFFF; |
| | | box-shadow: 1px 2px 4px 0px rgba(201,223,246,0.5000); |
| | | border-radius: 10px; |
| | | height: 330px; |
| | | } |
| | | .chenlabe{ |
| | | padding-top: 15%; |
| | | } |
| | | .chenlabel{ |
| | | height: 50%; |
| | | // background: #d9ecff; |
| | | } |
| | | .chenlabe2{ |
| | | padding-top: 10%; |
| | | padding-left: 30px; |
| | | .lableClass{ |
| | | height: 42px; |
| | | font-size: 30px; |
| | | font-family: AlibabaPuHuiTi-Regular, AlibabaPuHuiTi; |
| | | font-weight: 400; |
| | | color: #777777; |
| | | line-height: 42px; |
| | | letter-spacing: 1px; |
| | | } |
| | | .inputClasss{ |
| | | height: 42px; |
| | | font-size: 30px; |
| | | font-family: AlibabaPuHuiTi-Medium, AlibabaPuHuiTi; |
| | | font-weight: 500; |
| | | color: #769AFF; |
| | | line-height: 42px; |
| | | letter-spacing: 1px; |
| | | } |
| | | } |
| | | .patimg{ |
| | | width: 227px;height: 315px;border-radius: 4px; |
| | | padding-left: 13px; |
| | | padding-top: 17px; |
| | | } |
| | | .xyclass{ |
| | | padding-top: 10px; |
| | | padding-left: 10px; |
| | | padding-right: 10px; |
| | | font-size: 30px; |
| | | font-family: AlibabaPuHuiTi-Regular, AlibabaPuHuiTi; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | } |
| | | .xyimg{ |
| | | text-align: right; |
| | | } |
| | | .xyjnumber{ |
| | | width:100%; |
| | | height: 100%; |
| | | font-size: 120px; |
| | | font-family: DINAlternate-Bold, DINAlternate; |
| | | font-weight: bold; |
| | | color: #769AFF; |
| | | line-height: 100%; |
| | | margin-top: 7%; |
| | | text-align: center; |
| | | } |
| | | .xyjCON{ |
| | | height: 100%; |
| | | } |
| | | .deviceInfo{ |
| | | padding-top: 60px; |
| | | <style lang="less" scoped> |
| | | body { |
| | | background: #F3F6FE; |
| | | padding: 0; |
| | | |
| | | } |
| | | .deviceInfoItem{ |
| | | // background: #333333; |
| | | height: 70px; |
| | | width: 100%; |
| | | line-height: 70px; |
| | | // background: #769AFF; |
| | | .text{ |
| | | padding-left: 50px; |
| | | height: 42px; |
| | | font-size: 30px; |
| | | font-family: AlibabaPuHuiTi-Regular, AlibabaPuHuiTi; |
| | | font-weight: 400; |
| | | color: #777777; |
| | | line-height: 42px; |
| | | letter-spacing: 1px; |
| | | text-align: right; |
| | | } |
| | | .value{ |
| | | text-align: center; |
| | | height: 47px; |
| | | font-size: 40px; |
| | | font-family: DINAlternate-Bold, DINAlternate; |
| | | font-weight: bold; |
| | | color: #769AFF; |
| | | line-height: 47px; |
| | | letter-spacing: 2px; |
| | | } |
| | | } |
| | | .titlerow{ |
| | | height: 72px; |
| | | background: #FFFFFF; |
| | | line-height: 72px; |
| | | box-shadow: 1px 3px 5px 0px #E9E9E9; |
| | | } |
| | | .imglogo{ |
| | | padding-top: 10px; |
| | | width: 102px; |
| | | height: 40px; |
| | | // background: #769AFF; |
| | | } |
| | | .titleText{ |
| | | text-align: center; |
| | | height: 38px; |
| | | font-size: 27px; |
| | | font-family: PingFangSC-Medium, PingFang SC; |
| | | font-weight: 500; |
| | | color: #333333; |
| | | line-height: 38px; |
| | | letter-spacing: 1px; |
| | | } |
| | | .clockNum{ |
| | | width: 100%; |
| | | height: 38px; |
| | | font-size: 27px; |
| | | font-family: PingFangSC-Medium, PingFang SC; |
| | | font-weight: 500; |
| | | color: #FF7472; |
| | | line-height: 38px; |
| | | letter-spacing: 1px; |
| | | text-align:right; |
| | | padding-right: 10px; |
| | | |
| | | .inpu { |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | </style> |
| | | .header { |
| | | height: 40px; |
| | | background: #FFFFFF; |
| | | box-shadow: 1px 3px 5px 0px #E9E9E9; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .inputcla { |
| | | padding-top: 5px; |
| | | text-align: right; |
| | | font-size: 27px; |
| | | font-family: PingFangSC-Medium, PingFang SC; |
| | | font-weight: 500; |
| | | color: #FF7472; |
| | | |
| | | } |
| | | |
| | | .titleText { |
| | | text-align: center; |
| | | color: red; |
| | | font-size: 2rem; |
| | | height: 40px; |
| | | line-height: 40px; |
| | | |
| | | } |
| | | |
| | | .divcol { |
| | | box-shadow: 1px 2px 4px 0px rgba(201, 223, 246, 0.5); |
| | | background-color: rgba(255, 255, 255, 1); |
| | | border-radius: 20px; |
| | | height: 426px; |
| | | padding-left: 1.5rem; |
| | | padding-top: 5%; |
| | | padding-right: 0.5rem; |
| | | background: #FFFFFF; |
| | | } |
| | | |
| | | .rowdiv { |
| | | /* background: #769AFF; */ |
| | | font-size: 300%; |
| | | height: 15%; |
| | | margin-top: 5%; |
| | | } |
| | | |
| | | .titleHand { |
| | | /* background: #769AFF; */ |
| | | height: 15%; |
| | | } |
| | | |
| | | .tilaft { |
| | | text-align: left; |
| | | font-size: 300%; |
| | | font-family: AlibabaPuHuiTi-Regular, AlibabaPuHuiTi; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | line-height: 42px; |
| | | letter-spacing: 1px; |
| | | } |
| | | |
| | | .tiregth { |
| | | text-align: right; |
| | | padding-left: 5px; |
| | | } |
| | | |
| | | .divbody { |
| | | height: 70%; |
| | | width: 100%; |
| | | display: table; |
| | | } |
| | | |
| | | .bodeText { |
| | | display: table-cell; |
| | | vertical-align: middle; |
| | | width: 100%; |
| | | text-align: center; |
| | | font-size: 700%; |
| | | font-family: DINAlternate-Bold, DINAlternate; |
| | | font-weight: bold; |
| | | color: #769AFF; |
| | | /* line-height: 100%; */ |
| | | } |
| | | |
| | | .imgclass { |
| | | /* background: red; */ |
| | | height: 100%; |
| | | /* padding-top: 5%; */ |
| | | /* padding-top: ; */ |
| | | } |
| | | |
| | | .userinfo { |
| | | padding-top: 6%; |
| | | /* background: #769AFF; */ |
| | | font-size: 300%; |
| | | text-align: right; |
| | | } |
| | | |
| | | .lableclass { |
| | | text-align: right; |
| | | font-weight: 400; |
| | | color: #777777; |
| | | /* background: #769AFF; */ |
| | | |
| | | } |
| | | |
| | | .textclass { |
| | | text-align: left; |
| | | font-family: AlibabaPuHuiTi-Medium, AlibabaPuHuiTi; |
| | | font-weight: 500; |
| | | color: #769AFF; |
| | | |
| | | } |
| | | </style> |