mirror of
https://gitee.com/xiongmao1988/rax-medical.git
synced 2025-08-23 20:44:58 +08:00
加密算法异常,使用新的加密和解密算法
This commit is contained in:
parent
298074da1f
commit
e674cf8cd8
|
@ -12,7 +12,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@stomp/stompjs": "^7.0.0",
|
"@stomp/stompjs": "^7.0.0",
|
||||||
"axios": "^1.3.3",
|
"axios": "^1.3.3",
|
||||||
"crypto-js": "4.2.0",
|
"crypto-js": "^4.2.0",
|
||||||
"echarts": "^5.4.1",
|
"echarts": "^5.4.1",
|
||||||
"element-plus": "2.3.1",
|
"element-plus": "2.3.1",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
|
|
|
@ -1,82 +1,100 @@
|
||||||
import { createRouter, createWebHistory } from 'vue-router'
|
import {createRouter, createWebHistory} from 'vue-router'
|
||||||
import { useLoginStore } from '@/stores/user-info-store'
|
import {useLoginStore} from '@/stores/user-info-store'
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import {ElMessage} from 'element-plus'
|
||||||
import { constantRoute } from './routes'
|
import {constantRoute} from './routes'
|
||||||
|
import {decrypt, decryption, encrypt, encryption, isBase64} from "@/utils/other";
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(import.meta.env.BASE_URL),
|
history: createWebHistory(import.meta.env.BASE_URL),
|
||||||
routes: constantRoute,
|
routes: constantRoute,
|
||||||
|
stringifyQuery: stringifyQuery,
|
||||||
|
parseQuery: parseQuery,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const kk = "raxipnenttlewe";
|
||||||
|
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
const loginInfo = useLoginStore().getlogin()
|
const loginInfo = useLoginStore().getlogin()
|
||||||
// const isLogin = loginInfo.isLogin
|
// const isLogin = loginInfo.isLogin
|
||||||
// 普通用户
|
// 普通用户
|
||||||
const commonUser = [
|
const commonUser = [
|
||||||
'/login',
|
'/login',
|
||||||
'/home',
|
'/home',
|
||||||
'/patients-manage',
|
'/patients-manage',
|
||||||
'/patients-manage/patients-manage',
|
'/patients-manage/patients-manage',
|
||||||
'/patients-manage/surgery-info'
|
'/patients-manage/surgery-info'
|
||||||
]
|
]
|
||||||
// 中级管理员
|
// 中级管理员
|
||||||
const IntermediateAdmin = [
|
const IntermediateAdmin = [
|
||||||
'/login',
|
'/login',
|
||||||
'/home',
|
'/home',
|
||||||
'/patients-manage',
|
'/patients-manage',
|
||||||
'/patients-manage/patients-manage',
|
'/patients-manage/patients-manage',
|
||||||
'/patients-manage/surgery-info',
|
'/patients-manage/surgery-info',
|
||||||
'/remote-manage',
|
'/remote-manage',
|
||||||
'/remote-manage/remote-manage',
|
'/remote-manage/remote-manage',
|
||||||
'/remote-manage/remote-control'
|
'/remote-manage/remote-control'
|
||||||
]
|
]
|
||||||
// 高级管理员
|
// 高级管理员
|
||||||
const SeniorAdmin = [
|
const SeniorAdmin = [
|
||||||
'/login',
|
'/login',
|
||||||
'/home',
|
'/home',
|
||||||
'/patients-manage',
|
'/patients-manage',
|
||||||
'/patients-manage/patients-manage',
|
'/patients-manage/patients-manage',
|
||||||
'/patients-manage/surgery-info',
|
'/patients-manage/surgery-info',
|
||||||
'/remote-manage',
|
'/remote-manage',
|
||||||
'/remote-manage/remote-manage',
|
'/remote-manage/remote-manage',
|
||||||
'/remote-manage/remote-control',
|
'/remote-manage/remote-control',
|
||||||
'/permissions-manage',
|
'/permissions-manage',
|
||||||
'/permissions-manage/doctor-manage',
|
'/permissions-manage/doctor-manage',
|
||||||
'/permissions-manage/role-manage',
|
'/permissions-manage/role-manage',
|
||||||
'/permissions-manage/menu-manage',
|
'/permissions-manage/menu-manage',
|
||||||
'/logs-manage',
|
'/logs-manage',
|
||||||
'/logs-manage/message-manage',
|
'/logs-manage/message-manage',
|
||||||
'/logs-manage/logs-manage'
|
'/logs-manage/logs-manage'
|
||||||
]
|
]
|
||||||
const isViewRoute = () => {
|
const isViewRoute = () => {
|
||||||
let release = true
|
let release = true
|
||||||
/*switch (loginInfo.permissions) {
|
/*switch (loginInfo.permissions) {
|
||||||
case '超级管理员':
|
case '超级管理员':
|
||||||
release = true
|
release = true
|
||||||
break;
|
break;
|
||||||
case '高级管理员':
|
case '高级管理员':
|
||||||
release = SeniorAdmin.some((p: string) => p === to.path)
|
release = SeniorAdmin.some((p: string) => p === to.path)
|
||||||
break;
|
break;
|
||||||
case '中级管理员':
|
case '中级管理员':
|
||||||
release = IntermediateAdmin.some((p: string) => p === to.path)
|
release = IntermediateAdmin.some((p: string) => p === to.path)
|
||||||
break;
|
break;
|
||||||
case '普通用户':
|
case '普通用户':
|
||||||
release = commonUser.some((p: string) => p === to.path)
|
release = commonUser.some((p: string) => p === to.path)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}*/
|
}*/
|
||||||
return release
|
return release
|
||||||
}
|
}
|
||||||
if(to.fullPath ==='/login') {
|
if (to.fullPath === '/login') {
|
||||||
next()
|
next()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
/*if (!isLogin) next('/login') // 重定向登录页
|
/*if (!isLogin) next('/login') // 重定向登录页
|
||||||
else */if(!isViewRoute()) {
|
else */
|
||||||
ElMessage.error('无权访问!')
|
if (!isViewRoute()) {
|
||||||
next(from.fullPath)
|
ElMessage.error('无权访问!')
|
||||||
}else next()
|
next(from.fullPath)
|
||||||
|
} else next()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function stringifyQuery(query: any) {
|
||||||
|
return btoa(encrypt(JSON.stringify(query), kk));
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseQuery(query: any) {
|
||||||
|
if (isBase64(query)) {
|
||||||
|
return JSON.parse(decrypt(atob(query), kk));
|
||||||
|
} else {
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
|
|
|
@ -5,29 +5,47 @@ import * as CryptoJS from 'crypto-js';
|
||||||
*加密处理
|
*加密处理
|
||||||
*/
|
*/
|
||||||
export function encryption(src: string, keyWord: string) {
|
export function encryption(src: string, keyWord: string) {
|
||||||
const key = CryptoJS.enc.Utf8.parse(keyWord);
|
const key = CryptoJS.enc.Utf8.parse(keyWord);
|
||||||
// 加密
|
// 加密
|
||||||
let encrypted = CryptoJS.AES.encrypt(src, key, {
|
const encrypted = CryptoJS.AES.encrypt(src, key, {
|
||||||
iv: key,
|
iv: key,
|
||||||
mode: CryptoJS.mode.CBC,
|
mode: CryptoJS.mode.CBC,
|
||||||
padding: CryptoJS.pad.Pkcs7,
|
padding: CryptoJS.pad.Pkcs7,
|
||||||
});
|
});
|
||||||
return encrypted.toString();
|
return encrypted.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解密
|
* 解密
|
||||||
* @param {*} params 参数列表
|
|
||||||
* @returns 明文
|
* @returns 明文
|
||||||
|
* @param src
|
||||||
|
* @param keyWord
|
||||||
*/
|
*/
|
||||||
export function decryption(src: string, keyWord: string) {
|
export function decryption(src: string, keyWord: string) {
|
||||||
const key = CryptoJS.enc.Utf8.parse(keyWord);
|
const key = keyWord;
|
||||||
// 解密逻辑
|
// 解密逻辑
|
||||||
let decryptd = CryptoJS.AES.decrypt(src, key, {
|
const decryptd = CryptoJS.AES.decrypt(src, key, {
|
||||||
iv: key,
|
iv: key,
|
||||||
mode: CryptoJS.mode.CBC,
|
mode: CryptoJS.mode.CBC,
|
||||||
padding: CryptoJS.pad.Pkcs7,
|
padding: CryptoJS.pad.Pkcs7,
|
||||||
});
|
});
|
||||||
|
|
||||||
return decryptd.toString(CryptoJS.enc.Utf8);
|
return decryptd.toString(CryptoJS.enc.Utf8);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function encrypt(src: string, key: string) {
|
||||||
|
return CryptoJS.AES.encrypt(src, key).toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
export function decrypt(src: string, key: string) {
|
||||||
|
return CryptoJS.AES.decrypt(src, key).toString(CryptoJS.enc.Utf8)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isBase64(s: string) {
|
||||||
|
if (s == "" || s.trim() == "") return false;
|
||||||
|
try {
|
||||||
|
return window.btoa(window.atob(s)) == s;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,119 +1,119 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="remote-part">
|
<div class="remote-part">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span>{{ remoteItem?.taskName || '远程控制' }}</span>
|
<span>{{ remoteItem?.taskName || '远程控制' }}</span>
|
||||||
<el-button v-if="remoteItem?.taskName" class="break-btn" @click="breakRemote">断开连接</el-button>
|
<el-button v-if="remoteItem?.taskName" class="break-btn" @click="breakRemote">断开连接</el-button>
|
||||||
</div>
|
</div>
|
||||||
<!-- 小分辨率 -->
|
<!-- 小分辨率 -->
|
||||||
<div v-if="mediaMini800" class="content mini" :class="{'is-total': remoteItem?.isRemote}">
|
<div v-if="mediaMini800" class="content mini" :class="{'is-total': remoteItem?.isRemote}">
|
||||||
<div class="left-box">
|
<div class="left-box">
|
||||||
<div class="info-box">
|
<div class="info-box">
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">病人名称</span>
|
<span class="label">病人名称</span>
|
||||||
<span class="input-value">{{ remoteItem.patient }}</span>
|
<span class="input-value">{{ remoteItem.patient }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">住院号</span>
|
<span class="label">住院号</span>
|
||||||
<span class="input-value">{{ remoteItem.patientId }}</span>
|
<span class="input-value">{{ remoteItem.patientId }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">手术时间</span>
|
<span class="label">手术时间</span>
|
||||||
<span class="input-value">{{
|
<span class="input-value">{{
|
||||||
remoteItem.date
|
remoteItem.date
|
||||||
}}</span>
|
}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">手术状态</span>
|
<span class="label">手术状态</span>
|
||||||
<span class="tag-value" :class="{'normal': !patientInfo.state}">正常</span>
|
<span class="tag-value" :class="{'normal': !patientInfo.state}">正常</span>
|
||||||
<span class="tag-value" :class="{'alarm': patientInfo.state}">异常</span>
|
<span class="tag-value" :class="{'alarm': patientInfo.state}">异常</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item" :class="{'alarm': patientInfo.BIS_except}">
|
<div class="row-item" :class="{'alarm': patientInfo.BIS_except}">
|
||||||
<span class="label">BIS</span>
|
<span class="label">BIS</span>
|
||||||
<span class="value">{{ patientInfo.BIS }}</span>
|
<span class="value">{{ patientInfo.BIS }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item" :class="{'alarm': patientInfo.SBP_except}">
|
<div class="row-item" :class="{'alarm': patientInfo.SBP_except}">
|
||||||
<span class="label">SBP</span>
|
<span class="label">SBP</span>
|
||||||
<span class="value">{{ patientInfo.SBP }}<span class="unit">mmHg</span></span>
|
<span class="value">{{ patientInfo.SBP }}<span class="unit">mmHg</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">SPO2</span>
|
<span class="label">SPO2</span>
|
||||||
<span class="value">{{ patientInfo.SPO2 }}</span>
|
<span class="value">{{ patientInfo.SPO2 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item yellow" :class="{'alarm': patientInfo.DBP_except}">
|
<div class="row-item yellow" :class="{'alarm': patientInfo.DBP_except}">
|
||||||
<span class="label">DBP</span>
|
<span class="label">DBP</span>
|
||||||
<span class="value">{{ patientInfo.DBP }}<span class="unit">mmHg</span></span>
|
<span class="value">{{ patientInfo.DBP }}<span class="unit">mmHg</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item yellow" :class="{'alarm': patientInfo.HR_except}">
|
<div class="row-item yellow" :class="{'alarm': patientInfo.HR_except}">
|
||||||
<span class="label">HR</span>
|
<span class="label">HR</span>
|
||||||
<span class="value">{{ patientInfo.HR }}<span class="unit">次/分</span></span>
|
<span class="value">{{ patientInfo.HR }}<span class="unit">次/分</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item yellow">
|
<div class="row-item yellow">
|
||||||
<span class="label">TEMP</span>
|
<span class="label">TEMP</span>
|
||||||
<span class="value">{{ patientInfo.TEMP }}</span>
|
<span class="value">{{ patientInfo.TEMP }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="center-box">
|
<div class="center-box">
|
||||||
<img src="@/assets/imgs/main_body_intact.png">
|
<img src="@/assets/imgs/main_body_intact.png">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="content" :class="{'is-total': remoteItem?.isRemote}">
|
<div v-else class="content" :class="{'is-total': remoteItem?.isRemote}">
|
||||||
<div class="left-box">
|
<div class="left-box">
|
||||||
<div class="info-box">
|
<div class="info-box">
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">病人名称</span>
|
<span class="label">病人名称</span>
|
||||||
<span class="input-value">{{ remoteItem.patient }}</span>
|
<span class="input-value">{{ remoteItem.patient }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">住院号</span>
|
<span class="label">住院号</span>
|
||||||
<span class="input-value">{{ remoteItem.patientId }}</span>
|
<span class="input-value">{{ remoteItem.patientId }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item" :class="{'alarm': patientInfo.BIS_except}">
|
<div class="row-item" :class="{'alarm': patientInfo.BIS_except}">
|
||||||
<span class="label">BIS</span>
|
<span class="label">BIS</span>
|
||||||
<span class="value">{{ patientInfo.BIS }}</span>
|
<span class="value">{{ patientInfo.BIS }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item" :class="{'alarm': patientInfo.SBP_except}">
|
<div class="row-item" :class="{'alarm': patientInfo.SBP_except}">
|
||||||
<span class="label">SBP</span>
|
<span class="label">SBP</span>
|
||||||
<span class="value">{{ patientInfo.SBP }}<span class="unit">mmHg</span></span>
|
<span class="value">{{ patientInfo.SBP }}<span class="unit">mmHg</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">SPO2</span>
|
<span class="label">SPO2</span>
|
||||||
<span class="value">{{ patientInfo.SPO2 }}</span>
|
<span class="value">{{ patientInfo.SPO2 }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="center-box">
|
<div class="center-box">
|
||||||
<img src="@/assets/imgs/main_body_intact.png">
|
<img src="@/assets/imgs/main_body_intact.png">
|
||||||
</div>
|
</div>
|
||||||
<div class="right-box">
|
<div class="right-box">
|
||||||
<div class="info-box">
|
<div class="info-box">
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">手术时间</span>
|
<span class="label">手术时间</span>
|
||||||
<span class="input-value">{{
|
<span class="input-value">{{
|
||||||
remoteItem.date
|
remoteItem.date
|
||||||
}}</span>
|
}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">手术状态</span>
|
<span class="label">手术状态</span>
|
||||||
<span class="tag-value" :class="{'normal': !patientInfo.state}">正常</span>
|
<span class="tag-value" :class="{'normal': !patientInfo.state}">正常</span>
|
||||||
<span class="tag-value" :class="{'alarm': patientInfo.state}">异常</span>
|
<span class="tag-value" :class="{'alarm': patientInfo.state}">异常</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item" :class="{'alarm': patientInfo.DBP_except}">
|
<div class="row-item" :class="{'alarm': patientInfo.DBP_except}">
|
||||||
<span class="label">DBP</span>
|
<span class="label">DBP</span>
|
||||||
<span class="value">{{ patientInfo.DBP }}<span class="unit">mmHg</span></span>
|
<span class="value">{{ patientInfo.DBP }}<span class="unit">mmHg</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item" :class="{'alarm': patientInfo.HR_except}">
|
<div class="row-item" :class="{'alarm': patientInfo.HR_except}">
|
||||||
<span class="label">HR</span>
|
<span class="label">HR</span>
|
||||||
<span class="value">{{ patientInfo.HR }}<span class="unit">次/分</span></span>
|
<span class="value">{{ patientInfo.HR }}<span class="unit">次/分</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row-item">
|
<div class="row-item">
|
||||||
<span class="label">TEMP</span>
|
<span class="label">TEMP</span>
|
||||||
<span class="value">{{ patientInfo.TEMP }}</span>
|
<span class="value">{{ patientInfo.TEMP }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang='ts' setup>
|
<script lang='ts' setup>
|
||||||
|
@ -127,256 +127,289 @@ const patientInfo = ref({} as any)
|
||||||
const remoteWsStore = useRemoteWsStore()
|
const remoteWsStore = useRemoteWsStore()
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
initData, showData
|
initData, showData
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener('resize', () => {
|
window.addEventListener('resize', () => {
|
||||||
mediaMini800.value = Boolean(window.innerWidth < 801)
|
mediaMini800.value = Boolean(window.innerWidth < 801)
|
||||||
});
|
});
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
remoteWsStore.unsubscribeVital(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date);
|
remoteWsStore.unsubscribeVital(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date);
|
||||||
})
|
})
|
||||||
|
|
||||||
function showData(i: number) {
|
function showData(i: number) {
|
||||||
const lastTaskIndex = remoteWsStore.currentTaskIndex;
|
const lastTaskIndex = remoteWsStore.currentTaskIndex;
|
||||||
const lastTask: any = remoteWsStore.remoteTasks[lastTaskIndex];
|
const lastTask: any = remoteWsStore.remoteTasks[lastTaskIndex];
|
||||||
if (lastTask) {
|
if (lastTask) {
|
||||||
remoteWsStore.unsubscribeVital(lastTask.patient, lastTask.patientId, lastTask.date);
|
remoteWsStore.unsubscribeVital(lastTask.patient, lastTask.patientId, lastTask.date);
|
||||||
}
|
}
|
||||||
remoteWsStore.currentTaskIndex = i
|
remoteWsStore.currentTaskIndex = i
|
||||||
remoteItem.value = remoteWsStore.remoteTasks[remoteWsStore.currentTaskIndex]
|
remoteItem.value = remoteWsStore.remoteTasks[remoteWsStore.currentTaskIndex]
|
||||||
getData()
|
getData()
|
||||||
}
|
}
|
||||||
|
|
||||||
function initData() {
|
function initData() {
|
||||||
remoteItem.value = remoteWsStore.remoteTasks[remoteWsStore.currentTaskIndex]
|
remoteItem.value = remoteWsStore.remoteTasks[remoteWsStore.currentTaskIndex]
|
||||||
remoteWsStore.createConnect(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date)
|
remoteWsStore.createConnect(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date)
|
||||||
getData()
|
getData()
|
||||||
}
|
}
|
||||||
|
|
||||||
function getData() {
|
function getData() {
|
||||||
remoteWsStore.unsubscribeVital(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date);
|
remoteWsStore.unsubscribeVital(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date);
|
||||||
remoteWsStore.subscribeVital(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date, (res: any) => {
|
remoteWsStore.subscribeVital(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date, (res: any) => {
|
||||||
const data = JSON.parse(res.data);
|
if (res && res.data) {
|
||||||
if (data.vitalSignsList && data.vitalSignsList.length > 0) {
|
const data = JSON.parse(res.data);
|
||||||
Object.assign(patientInfo.value, data.vitalSignsList[0]);
|
if (data.vitalSignsList && data.vitalSignsList.length > 0) {
|
||||||
patientInfo.value.state = (patientInfo.value.BIS_except || patientInfo.value.SBP_except ||
|
Object.assign(patientInfo.value, data.vitalSignsList[0]);
|
||||||
patientInfo.value.DBP_except || patientInfo.value.HR_except);
|
patientInfo.value.state = (patientInfo.value.BIS_except || patientInfo.value.SBP_except ||
|
||||||
setLog(patientInfo.value)
|
patientInfo.value.DBP_except || patientInfo.value.HR_except);
|
||||||
emit('addLogAfter')
|
setLog(patientInfo.value)
|
||||||
}
|
emit('addLogAfter')
|
||||||
})
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function setLog(data: any) {
|
function setLog(data: any) {
|
||||||
remoteWsStore.exceptionType.forEach((item: any) => {
|
remoteWsStore.exceptionType.forEach((item: any) => {
|
||||||
if (data[item]) {
|
if (data[item]) {
|
||||||
const msg: any = remoteWsStore.exceptionMsg[item];
|
const msg: any = remoteWsStore.exceptionMsg[item];
|
||||||
remoteWsStore.setRemoteLog({
|
remoteWsStore.setRemoteLog({
|
||||||
state: msg,
|
state: msg,
|
||||||
taskName: remoteItem.value.taskName,
|
taskName: remoteItem.value.taskName,
|
||||||
time: new Date(),
|
time: new Date(),
|
||||||
type: "exception"
|
type: "exception"
|
||||||
}, remoteWsStore.currentTaskIndex);
|
}, remoteWsStore.currentTaskIndex);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const breakRemote = () => {
|
const breakRemote = () => {
|
||||||
remoteWsStore.disconnect(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date)
|
remoteWsStore.disconnect(remoteItem.value.patient, remoteItem.value.patientId, remoteItem.value.date)
|
||||||
remoteWsStore.resetRemoteTask(remoteWsStore.currentTaskIndex)
|
remoteWsStore.resetRemoteTask(remoteWsStore.currentTaskIndex)
|
||||||
if (remoteWsStore.getActiveRemoteTask()) {
|
if (remoteWsStore.getActiveRemoteTask()) {
|
||||||
showData(remoteWsStore.getActiveRemoteTask())
|
showData(remoteWsStore.getActiveRemoteTask())
|
||||||
}
|
}
|
||||||
emit('breakRemote')
|
emit('breakRemote')
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang='scss' scoped>
|
<style lang='scss' scoped>
|
||||||
.remote-part {
|
.remote-part {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
border: 1px solid $border-color;
|
border: 1px solid $border-color;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: white;
|
color: white;
|
||||||
background: $main-color;
|
background: $main-color;
|
||||||
.break-btn {
|
|
||||||
position: absolute;
|
|
||||||
top: 4px;
|
|
||||||
right: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.content {
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100% - 40px);
|
|
||||||
padding: 20px 50px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.common-box {
|
|
||||||
width: 30%;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: space-evenly;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.left-box {
|
|
||||||
@extend .common-box;
|
|
||||||
|
|
||||||
.label {
|
.break-btn {
|
||||||
background: $main-color;
|
position: absolute;
|
||||||
}
|
top: 4px;
|
||||||
}
|
right: 20px;
|
||||||
.center-box {
|
}
|
||||||
@extend .common-box;
|
}
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
max-height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.right-box {
|
|
||||||
@extend .common-box;
|
|
||||||
.label {
|
|
||||||
background: $main-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.row-item {
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.label {
|
|
||||||
flex-shrink: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 40px;
|
|
||||||
color: white;
|
|
||||||
font-size: 18px;
|
|
||||||
line-height: 40px;
|
|
||||||
text-align: center;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.info-box, .row-item .value {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
&.is-total {
|
|
||||||
.info-box, .row-item .value {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.label {
|
|
||||||
width: calc(50% - 10px);
|
|
||||||
}
|
|
||||||
.value {
|
|
||||||
width: 50%;
|
|
||||||
height: 40px;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
text-align: center;
|
|
||||||
border-radius: 5px;
|
|
||||||
color: $main-color;
|
|
||||||
border-color: $main-color;
|
|
||||||
font-size: 22px;
|
|
||||||
line-height: 40px;
|
|
||||||
font-weight: 600;
|
|
||||||
.unit {
|
|
||||||
font-size: 16px;
|
|
||||||
font-family: 400;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.right-box .value {
|
|
||||||
color: $main-color;
|
|
||||||
border-color: $main-color;
|
|
||||||
}
|
|
||||||
.row-item.alarm {
|
|
||||||
.label {
|
|
||||||
background: red !important;
|
|
||||||
}
|
|
||||||
.value {
|
|
||||||
color: red !important;
|
|
||||||
border-color: red !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.info-box {
|
|
||||||
width: 100%;
|
|
||||||
.row-item {
|
|
||||||
padding: 10px 0;
|
|
||||||
height: 40px;
|
|
||||||
justify-content: flex-start;
|
|
||||||
align-items: center;
|
|
||||||
.label {
|
|
||||||
width: 70px;
|
|
||||||
height: 20px;
|
|
||||||
background: transparent;
|
|
||||||
color: $main-color;
|
|
||||||
font-size: 16px;
|
|
||||||
line-height: 20px;
|
|
||||||
font-weight: 600;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
.input-value {
|
|
||||||
width: 100%;
|
|
||||||
height: 21px;
|
|
||||||
line-height: 20px;
|
|
||||||
font-size: 16px;
|
|
||||||
color: $main-color;
|
|
||||||
border-bottom: 1px solid $border2-color;
|
|
||||||
}
|
|
||||||
.tag-value {
|
|
||||||
margin-left: 30px;
|
|
||||||
padding: 0 20px;
|
|
||||||
height: 30px;
|
|
||||||
line-height: 30px;
|
|
||||||
font-size: 18px;
|
|
||||||
color: white;
|
|
||||||
font-weight: 600;
|
|
||||||
background: $border2-color;
|
|
||||||
border-radius: 8px;
|
|
||||||
&.normal {
|
|
||||||
background: $main-color;
|
|
||||||
}
|
|
||||||
&.alarm {
|
|
||||||
background: red;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.mini {
|
|
||||||
padding: 20px;
|
|
||||||
.left-box {
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
.center-box {
|
|
||||||
width: calc(100% - 250px);
|
|
||||||
}
|
|
||||||
&.is-total {
|
|
||||||
.left-box {
|
|
||||||
.info-box {
|
|
||||||
display: block;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
.row-item.yellow {
|
|
||||||
.label {
|
|
||||||
background: $main-color;
|
|
||||||
}
|
|
||||||
.value {
|
|
||||||
color:$main-color;
|
|
||||||
border-color: $main-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
.content {
|
||||||
}
|
width: 100%;
|
||||||
|
height: calc(100% - 40px);
|
||||||
|
padding: 20px 50px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.common-box {
|
||||||
|
width: 30%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-box {
|
||||||
|
@extend .common-box;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
background: $main-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.center-box {
|
||||||
|
@extend .common-box;
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-box {
|
||||||
|
@extend .common-box;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
background: $main-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.row-item {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
flex-shrink: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 40px;
|
||||||
|
color: white;
|
||||||
|
font-size: 18px;
|
||||||
|
line-height: 40px;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box, .row-item .value {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-total {
|
||||||
|
.info-box, .row-item .value {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label {
|
||||||
|
width: calc(50% - 10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
width: 50%;
|
||||||
|
height: 40px;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 5px;
|
||||||
|
color: $main-color;
|
||||||
|
border-color: $main-color;
|
||||||
|
font-size: 22px;
|
||||||
|
line-height: 40px;
|
||||||
|
font-weight: 600;
|
||||||
|
|
||||||
|
.unit {
|
||||||
|
font-size: 16px;
|
||||||
|
font-family: 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-box .value {
|
||||||
|
color: $main-color;
|
||||||
|
border-color: $main-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row-item.alarm {
|
||||||
|
.label {
|
||||||
|
background: red !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
color: red !important;
|
||||||
|
border-color: red !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.row-item {
|
||||||
|
padding: 10px 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
width: 70px;
|
||||||
|
height: 20px;
|
||||||
|
background: transparent;
|
||||||
|
color: $main-color;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-weight: 600;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-value {
|
||||||
|
width: 100%;
|
||||||
|
height: 21px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-size: 16px;
|
||||||
|
color: $main-color;
|
||||||
|
border-bottom: 1px solid $border2-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-value {
|
||||||
|
margin-left: 30px;
|
||||||
|
padding: 0 20px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
font-size: 18px;
|
||||||
|
color: white;
|
||||||
|
font-weight: 600;
|
||||||
|
background: $border2-color;
|
||||||
|
border-radius: 8px;
|
||||||
|
|
||||||
|
&.normal {
|
||||||
|
background: $main-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.alarm {
|
||||||
|
background: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.mini {
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.left-box {
|
||||||
|
width: 240px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center-box {
|
||||||
|
width: calc(100% - 250px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-total {
|
||||||
|
.left-box {
|
||||||
|
.info-box {
|
||||||
|
display: block;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row-item.yellow {
|
||||||
|
.label {
|
||||||
|
background: $main-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
color: $main-color;
|
||||||
|
border-color: $main-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -481,7 +481,7 @@ const viewPatientInfo = () => {
|
||||||
}, 0)
|
}, 0)
|
||||||
}
|
}
|
||||||
const backRemote = () => {
|
const backRemote = () => {
|
||||||
router.back()
|
router.back();
|
||||||
}
|
}
|
||||||
const playPause = () => {
|
const playPause = () => {
|
||||||
if (liveVideo.value.paused) {
|
if (liveVideo.value.paused) {
|
||||||
|
|
|
@ -46,11 +46,14 @@ onMounted(() => {
|
||||||
|
|
||||||
function initRemoteTask() {
|
function initRemoteTask() {
|
||||||
remoteTask.value = remoteWsStore.initRemoteTask()
|
remoteTask.value = remoteWsStore.initRemoteTask()
|
||||||
|
remotePartRef.value.showData(remoteWsStore.currentTaskIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
const viewThumbnail = () => {
|
const viewThumbnail = () => {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/remote-manage/remote-thumbnail'
|
path: '/remote-manage/remote-thumbnail',
|
||||||
|
query: {
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 打开任务连接弹窗
|
// 打开任务连接弹窗
|
||||||
|
|
|
@ -39,12 +39,11 @@ const remoteTask = ref([] as any);
|
||||||
const remoteWsStore = useRemoteWsStore();
|
const remoteWsStore = useRemoteWsStore();
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
console.log("remoteThumbnail", remoteWsStore.remoteTasks)
|
|
||||||
remoteTask.value = remoteWsStore.remoteTasks;
|
remoteTask.value = remoteWsStore.remoteTasks;
|
||||||
})
|
})
|
||||||
|
|
||||||
const openRemote = (params: any) => {
|
const openRemote = (params: any) => {
|
||||||
router.push('/remote-manage/remote-manage')
|
router.push('/remote-manage/remote-manage');
|
||||||
}
|
}
|
||||||
const addLogAfter = (index: number) => {
|
const addLogAfter = (index: number) => {
|
||||||
messageItemPartRef.value[index].scrollToBottom()
|
messageItemPartRef.value[index].scrollToBottom()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user