Browse Source

20250224

master
领悟 5 months ago
parent
commit
b5190c68de
  1. 2
      src/App.vue
  2. 9
      src/api/index.js
  3. 179
      src/components/w-upload/w-upload.vue
  4. 7
      src/config/home.js
  5. 56
      src/layouts/BasicLayout.less
  6. 98
      src/layouts/BasicLayout.vue
  7. 2
      src/views/document/index.vue
  8. 73
      src/views/thrombolysis/components/throm-before3.vue
  9. 365
      src/views/thrombolysis/components/throm-report.vue
  10. 52
      src/views/thrombolysis/components/throm-result-firstInfo.vue
  11. 4
      src/views/thrombolysis/components/throm-result.vue
  12. 45
      src/views/thrombolysis/index.vue

2
src/App.vue

@ -210,7 +210,7 @@
haveFlagInspect,
finishStatus,
} = res.data;
console.log('firstAidInspectDataDtos: ', haveFlagInspect);
// console.log('firstAidInspectDataDtos: ', haveFlagInspect);
// if(finishStatus == 1){
// this.setTimerData({})
// this.request = 0

9
src/api/index.js

@ -327,7 +327,8 @@ export const createPatient = (params) =>
axios.post(`${proxyUrl1}/firstAid/createPatient`, {
...params
});
// export const eduitPatient = (params) =>
// axios.post(`${proxyUrl1}/firstAid/eduitPatient`, {
// ...params
// });
export const exportRsPdf = (params) =>
axios.post(`${proxyUrl1}/admin/export/exportRsPdf`, {
...params
});

179
src/components/w-upload/w-upload.vue

@ -0,0 +1,179 @@
<template>
<div class="w-upload">
<!-- <input type="file" accept="image/*" @change="handleFileChange" capture="camera" /> -->
<input type="file" ref="fileRef" accept="image/*" @change="handleFileChange" capture="camera"
style="display: none;" />
<slot name="default">
<template v-if="btnType == 'button'">
<a-button @click="handleClick" :type="type" :block="block" :size="size"
:disabled="disabled">{{btnText}}</a-button>
</template>
<template v-if="btnType == 'text'">
<a-button @click="handleClick" type="link" :size="size" :disabled="disabled">{{btnText}}</a-button>
</template>
<template v-if="btnType == 'icon'">
<div class="plus-upload" @click="handleClick"
style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: #ffffff; border: 2px dashed #a3acbf; border-radius: 12px; font-size: 40px; color: #a3acbf;">
<a-icon type="plus" />
</div>
</template>
</slot>
</div>
</template>
<script>
import {
uploadfile,
uploadBase64
} from 'api'
export default {
name: 'CommonUpload',
data() {
return {
imageFile: null,
imageSrc: '',
}
},
props: {
type: {
type: String,
default: 'default',
},
btnType: {
type: String,
default: 'button', // 'button' | 'text' | 'icon'
},
disabled: {
type: Boolean,
default: false,
},
width: {
type: String,
default: '100%',
},
height: {
type: String,
default: '100%',
},
btnText: {
type: String,
default: '上传图片'
},
block: {
type: Boolean,
default: true,
},
size: {
type: String,
default: 'large'
},
},
created() {
},
methods: {
handleClick() {
if (this.$refs.fileRef) {
this.$refs.fileRef.click()
}
},
handleFileChange(event) {
const file = event.target.files[0];
if (file) {
this.imageFile = file;
// this.previewImage(file);
this.compressImage(file);
this.uploadImage()
}
},
previewImage(file) {
const reader = new FileReader();
reader.onload = (e) => {
this.imageSrc = e.target.result;
};
reader.readAsDataURL(file);
},
compressImage(file) {
const reader = new FileReader();
reader.onload = (e) => {
const img = new Image();
img.src = e.target.result;
img.onload = () => {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const MAX_WIDTH = 250;
const MAX_HEIGHT = 320;
let width = img.width;
let height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
ctx.drawImage(img, 0, 0, width, height);
canvas.toBlob((blob) => {
this.imageFile = new File([blob], file.name, {
type: 'image/jpeg',
lastModified: Date.now(),
});
}, 'image/jpeg', 0.7);
};
};
reader.readAsDataURL(file);
},
async uploadImage() {
if (!this.imageFile) {
alert('请先选择图片');
return;
}
const formData = new FormData();
formData.append('file', this.imageFile);
try {
const res = await uploadfile(formData)
// const res = await uploadBase64(formData)
console.log('上传成功:', res.data);
console.log('upload', res)
const {
code,
name,
url,
msg
} = res
if (code === 200) {
this.$emit('ok', {
name,
url
})
} else {
this.$message.error(msg)
}
// alert('');
} catch (error) {
console.error('上传失败:', error);
// alert('');
}
}
}
}
</script>
<style lang="less" scoped>
.w-upload {}
</style>

7
src/config/home.js

@ -14,7 +14,12 @@ async function updateAidCode(param, type) {
const { code, data, msg } = res;
if (code === 200) {
// message.success('更新成功')
queryAid(firstAidId, type);
if(param.finishStatus ==1){
store.commit('patient/setPatientData', {});
store.commit('patient/setWriteAble', false);
} else{
queryAid(firstAidId, type);
}
} else {
message.error(msg);
}

56
src/layouts/BasicLayout.less

@ -23,14 +23,14 @@
.sider-header-icon{
display: inline-block;
text-align: center;
width: 1.8rem;
height: 1.8rem;
line-height: 1.8rem;
width: 2.8rem;
height: 2.8rem;
line-height: 2.8rem;
background-color: #659aff;
border-radius: 50px;
overflow: hidden;
color: #FFFFFF;
font-size: 1rem;
font-size: 1.8rem;
}
}
@ -88,24 +88,51 @@
background-color: #FFFFFF !important;
.patient-box{
display: flex;
justify-content: center;
justify-content: flex-start;
padding: 0 20px;
box-sizing: border-box;
.paitent-title{
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
font-size: 1.5rem;
font-weight: bold;
margin-right: 1rem;
}
.patient-info {
// background-color: #fff;
// border-radius: 5px;
// padding: 12px;
font-size: 1rem;
height: 100%;
display: flex;
align-items: center;
font-size: 1.5rem;
.lable {
color: #AAAAAA;
padding: 0 .5rem 0 1rem;
// color: #AAAAAA;
padding: 0 .5rem 0 0.3rem;
}
.text {
color: #000000;
padding: 0 2rem 0 0;
// padding: 0 1rem 0 0;
&.text-red{
color: red;
}
&.mr-sm{
margin-right: .5rem;
}
}
}
.patient-action{
display: flex;
font-size: 1.5rem;
padding: 0 .2rem;
align-items: center;
margin-left: 1rem;
.action{
padding: 0 .2rem;
font-weight: bold;
}
}
}
.layout-sider-header-row-title{
@ -125,6 +152,7 @@
height: calc(100vh - 66px);
// overflow-y: auto;
padding: 10px;
position: relative;
}
.ant-drawer-body{

98
src/layouts/BasicLayout.vue

@ -27,26 +27,46 @@
<a-layout>
<a-layout-header>
<div class="patient-box">
<div class="patient-info" @click="onClickPat"
v-if="patientData.firstAidId && patientData.finish_status != 1">
<span class="lable">姓名: </span>
<span class="text">{{patientData.patientName || '-'}}</span>
<span class="lable">性别: </span>
<span
class="text">{{patientData.patientGender == 1 ? '女' : patientData.patientGender == 0 ? '男' : '-'}}</span>
<span class="lable">年龄: </span>
<span class="text">{{patientData.patientAge || '-'}}</span>
<span class="lable">证件号: </span>
<div class="paitent-title">卒中急救质控系统</div>
<template v-if="patientData.firstAidId && patientData.finish_status != 1">
<div class="patient-info" @click="onClickPat">
(
<span class="lable">姓名: </span>
<span class="text text-red mr-sm">{{patientData.patientName || '-'}}</span>
<span class="lable">性别: </span>
<span class="text mr-sm">
{{patientData.patientGender == 1 ? '女' : patientData.patientGender == 0 ? '男' : '-'}}
</span>
<span class="lable">年龄: </span>
<span
class="text">{{patientData.patientAge ? (patientData.patientAge+'岁') : '-'}}</span>
<!-- <span class="lable">证件号: </span>
<span
class="text">{{patientData.patientIdCardNo ? utils.maskIDCard(patientData.patientIdCardNo) : '-'}}</span>
<span class="lable">门急诊号: </span>
<span class="text">{{patientData.servialNo || '-'}}</span>
</div>
<span class="text">{{patientData.servialNo || '-'}}</span> -->
)
</div>
<div class="patient-action">
<div class="action" @click="showDrawer"><a-icon type="logout" /></div>
<!-- <div class="action"><a-icon type="pause-circle" /></div> -->
</div>
</template>
</div>
</a-layout-header>
<a-layout-content ref="layoutContent" id="layoutContent">
<div class="global-layout-content" id="globalLayoutContent">
<router-view />
<a-drawer placement="bottom" closable :visible="termVisible" @close="onTermClose"
:get-container="false" :wrap-style="{ position: 'absolute' }">
<div style="text-align: center;line-height: 3rem;font-weight: bold;font-size: 1.5rem;">
退出急救
</div>
<div style="text-align: center;font-size: 1.2rem; line-height: 5rem;">
<div style="border-bottom: 1px solid #eee;" @click="handleTermin(1)">终止急救</div>
<div @click="handleTermin(0)">暂停急救</div>
</div>
</a-drawer>
</div>
<a-drawer placement="left" :visible="visible" width="320" @close="onClose" :getContainer="false"
@ -125,6 +145,7 @@
current: 0,
current_: 0,
visible: false,
termVisible: false,
loginInfo: null,
menus: [{
name: '急救',
@ -154,6 +175,7 @@
},
beforeRouteEnter(to, from, next) {
next((vm) => {
console.log('beforeRouteEnter', to)
if (to.fullPath == '/document') {
vm.current = 1
vm.current_ = 1
@ -163,6 +185,15 @@
} else if (to.fullPath == '/firstaid/patientList') {
vm.current = 0
vm.current_ = 0
if (vm.patientData?.firstAidId) {
vm.$router.replace('/firstaid/thrombolysis')
}
} else if (to.fullPath == '/firstaid/thrombolysis') {
vm.current = 0
vm.current_ = 0
if (!vm.patientData?.firstAidId) {
vm.$router.replace('/firstaid/patientList')
}
} else {
vm.current = 0
vm.current_ = 0
@ -182,17 +213,19 @@
if (item.path == 'person') {
if (this.visible) this.onClose()
else this.showPersion()
} else if(item.path == '/firstaid/patientList'){
} else if (item.path == '/firstaid/patientList') {
this.visible = false;
this.onClickPat()
}else {
} else {
this.visible = false;
this.$router.push(item.path)
}
},
async onClickPat() {
const {firstAidId} = this.patientData
if(firstAidId){
const {
firstAidId
} = this.patientData
if (firstAidId) {
const res = await messageQuery(firstAidId);
const {
code,
@ -203,18 +236,37 @@
const {
finishStatus,
} = res.data;
if(finishStatus == 0){
if(this.$route.name != 'Thrombolysis') this.$router.push('/firstaid/thrombolysis')
}else{
if (finishStatus == 0) {
if (this.$route.name != 'Thrombolysis') this.$router.push('/firstaid/thrombolysis')
} else {
this.setPatientData({});
this.setPatientDataCur({});
if(this.$route.name != 'PatientList') this.$router.replace('/firstaid/patientList')
if (this.$route.name != 'PatientList') this.$router.replace('/firstaid/patientList')
}
}
} else {
this.setPatientData({});
this.setPatientDataCur({});
if (this.$route.name != 'PatientList') this.$router.replace('/firstaid/patientList')
}
},
async handleTermin(status) {
this.$message.info('结束急救,类型: ' + status)
// this.termVisible = true;
this.onTermClose()
},
showDrawer() {
this.termVisible = true;
},
onTermClose() {
this.termVisible = false;
},
getContainer() {
return document.getElementById('globalLayoutContent')
},
async showPersion() {
this.visible = true;

2
src/views/document/index.vue

@ -224,7 +224,7 @@
key: 'operation',
fixed: 'right',
align: 'center',
width: 300,
width: 380,
scopedSlots: {
customRender: 'action'
},

73
src/views/thrombolysis/components/throm-before3.vue

@ -3,28 +3,24 @@
<a-card style="width:100%" :tab-list="tabList" :active-tab-key="activeTabKey"
@tabChange="key => onTabChange(key, 'key')">
<div class="image-container" v-if="activeTabKey == 'tab1'">
<!-- <div class="notImg">单次检验影像安全区域</div> -->
<!-- <div v-if="list.length">
<video :src="apiUrl+ img.path" controls autoplay loop muted width="100%" v-for="img in list">
您的浏览器不支持 video 标签
</video>
<img :src="apiUrl+ img.path" :alt="img.name" v-for="img in list" style="width: 100%;" />
</div>
<div class="emtpy" v-else>
<a-empty :image="emptyImage" description="未检测到影像信息" />
</div> -->
<throm-interfere-image-dcm></throm-interfere-image-dcm>
</div>
<div class="image-container" v-else-if="activeTabKey == 'ct'">
<div class="emtpy">
<template v-if="fileList && fileList.length">
<div class="image-box" v-for="(img, index) in fileList">
<img :src="'http://116.204.114.73:20007'+ img" :alt="'ct'+index" />
</div>
</template>
<div class="emtpy" v-else>
<a-empty :image="emptyImage" description="暂无数据" />
</div>
</div>
</a-card>
<div class="btns" v-if="!outside">
<input type="file" ref="fileInput" @change="onFileChange" accept="image/*" style="display: none;" />
<a-button :disabled="writeAble" class="common-button" block size="large" v-if="fileList.length < 5"
@click="openCamera">上传院前CT图片</a-button>
<div class="btns " v-if="!outside">
<w-upload @ok="handleUpload" btn-type="button" btn-text="上传院前CT图片" style="margin-bottom: 1rem; "
v-if="fileList.length < 5" />
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
@click="onSubmit">下一步</a-button>
</div>
@ -40,6 +36,7 @@
} from '@/config/setting.js';
import emptyImage from '@/assets/images/slice/empty.png'
import ThromInterfereImageDcm from './throm-interfere-image-dcm.vue'
import WUpload from '@/components/w-upload/w-upload.vue'
import {
queryFirstAidInspectData,
queryVideo
@ -76,7 +73,8 @@
},
props: ['outside'],
components: {
ThromInterfereImageDcm
ThromInterfereImageDcm,
WUpload
},
computed: {
...mapState('patient', ['patientData', 'writeAble']),
@ -135,6 +133,15 @@
this.list = data.list
}
},
handleUpload({
name,
url
}) {
console.log('upload end', 'http://116.204.114.73:20007' + url) //_doc/upload/
this.fileList.push(url);
const index = this.tabList.findIndex(a => a.key == 'ct')
this.tabList[index].tab = `院前CT (${this.fileList.length}张)`
},
openCamera() {
if (this.writeAble) {
this.$message.success('患者已审核,内容不可更改')
@ -148,14 +155,17 @@
// }
const cmr = plus.camera.getCamera();
if (!cmr) {
this.$message.success('没有可用的摄像头');
return;
this.$message.success('没有可用的摄像头');
return;
}
const res = cmr.supportedImageResolutions.length > 0 ? cmr.supportedImageResolutions[0] : { width: 640, height: 480 }; // ;
const res = cmr.supportedImageResolutions.length > 0 ? cmr.supportedImageResolutions[0] : {
width: 640,
height: 480
}; // ;
const fmt = cmr.supportedImageFormats.length > 0 ? cmr.supportedImageFormats[0] : 'jpeg';
if (!res || !fmt) {
plus.nativeUI.toast('摄像头不支持该格式或分辨率');
return;
plus.nativeUI.toast('摄像头不支持该格式或分辨率');
return;
}
// const res = cmr.supportedImageResolutions[0];
// const fmt = cmr.supportedImageFormats[0];
@ -204,11 +214,11 @@
);
},
onFileChange(event) {
const file = event.target.files[0];
if (file) {
//
this.compressImage(file);
}
const file = event.target.files[0];
if (file) {
//
this.compressImage(file);
}
},
//
showPics(url, name) {
@ -286,6 +296,17 @@
align-items: center;
}
.image-box {
padding: .5rem;
box-sizing: border-box;
img {
width: 100%;
height: 100%;
}
}
}
.btns {

365
src/views/thrombolysis/components/throm-report.vue

@ -109,63 +109,6 @@
<div slot="description">{{item.record ? item.record.answer[0] : ''}}</div>
</a-step>
</template>
<!-- <a-step :status="currentIndex == 0 ? 'process' : currentIndex > 0 ? 'finish' : 'wait'">
<div slot="title" style="display: flex;justify-content: space-between;width: 100%">
<div>到达</div>
<div>{{currentIndex == 0 ? '进行中' : currentIndex > 0 ? '已完成' : ''}}</div>
</div>
<div slot="description">{{currentIndex >= 0 ? '2025-01-08 12:47:42' : ''}}</div>
</a-step>
<a-step :status="currentIndex == 1 ? 'process' : currentIndex > 1 ? 'finish' : 'wait'">
<div slot="title" style="display: flex;justify-content: space-between;width: 100%">
<div>呼叫</div>
<div>{{currentIndex == 1 ? '进行中' : currentIndex > 1 ? '已完成' : ''}}</div>
</div>
<div slot="description">{{currentIndex >= 1 ? '2025-01-08 12:47:42' : ''}}</div>
</a-step>
<a-step :status="currentIndex == 2 ? 'process' : currentIndex > 2 ? 'finish' : 'wait'">
<div slot="title" style="display: flex;justify-content: space-between;width: 100%">
<div>到场</div>
<div>{{currentIndex == 2 ? '进行中' : currentIndex > 2 ? '已完成' : ''}}</div>
</div>
<div slot="description">{{currentIndex >= 2 ? '2025-01-08 12:47:42' : ''}}</div>
</a-step>
<a-step :status="currentIndex == 3 ? 'process' : currentIndex > 3 ? 'finish' : 'wait'">
<div slot="title" style="display: flex;justify-content: space-between;width: 100%">
<div>采血</div>
<div>{{currentIndex == 2 ? '进行中' : currentIndex > 2 ? '已完成' : ''}}</div>
</div>
<div slot="description">{{currentIndex >= 2 ? '2025-01-08 12:47:42' : ''}}</div>
</a-step>
<a-step :status="currentIndex == 4 ? 'process' : currentIndex > 4 ? 'finish' : 'wait'">
<div slot="title" style="display: flex;justify-content: space-between;width: 100%">
<div>心点</div>
<div>{{currentIndex == 2 ? '进行中' : currentIndex > 2 ? '已完成' : ''}}</div>
</div>
<div slot="description">{{currentIndex >= 2 ? '2025-01-08 12:47:42' : ''}}</div>
</a-step>
<a-step :status="currentIndex == 5 ? 'process' : currentIndex > 5 ? 'finish' : 'wait'">
<div slot="title" style="display: flex;justify-content: space-between;width: 100%">
<div>到达CT</div>
<div>{{currentIndex == 2 ? '进行中' : currentIndex > 2 ? '已完成' : ''}}</div>
</div>
<div slot="description">{{currentIndex >= 2 ? '2025-01-08 12:47:42' : ''}}</div>
</a-step>
<a-step :status="currentIndex == 6 ? 'process' : currentIndex > 6 ? 'finish' : 'wait'">
<div slot="title" style="display: flex;justify-content: space-between;width: 100%">
<div>知情同意</div>
<div>{{currentIndex == 2 ? '进行中' : currentIndex > 2 ? '已完成' : ''}}</div>
</div>
<div slot="description">{{currentIndex >= 2 ? '2025-01-08 12:47:42' : ''}}</div>
</a-step>
<a-step :status="currentIndex == 7 ? 'process' : currentIndex > 7 ? 'finish' : 'wait'">
<div slot="title" style="display: flex;justify-content: space-between;width: 100%">
<div>开始静脉溶栓时间</div>
<div>{{currentIndex == 2 ? '进行中' : currentIndex > 2 ? '已完成' : ''}}</div>
</div>
<div slot="description">{{currentIndex >= 2 ? '2025-01-08 12:47:42' : ''}}</div>
</a-step> -->
</a-steps>
</div>
</a-card>
@ -183,117 +126,105 @@
</a-col>
<a-col :span="24">
<a-card class="report-card" title="溶栓观察表">
<a slot="extra" href="#">导出</a>
<a slot="extra" href="#" @click="handleExport">导出</a>
<div class="doc-ct-content">
<!-- <div class="record-content" v-html="observeData"></div>
<div class="emtpy" v-if="!observeData">
<a-empty :image="emptyImage" description="暂无溶栓记录" />
</div> -->
<div>
<table border class="report-rsgcb">
<tr>
<td>姓名{{patient.patientName}}</td>
<td>性别{{patient.patientGenderString}}</td>
<td>年龄{{patient.patientAge}}</td>
<td>诊断{{patient.firstAidZlTypeString}}</td>
<td>观察者</td>
<td>诊断 {{patient.firstAidZlType}}</td>
<td>观察者 </td>
</tr>
<tr>
<td colspan="3">发病时间{{queryItemInfo('XGZL-CCWC-TIME').toString()}}</td>
<td colspan="3">用药时间{{}}</td>
<td colspan="3">用药时间{{queryItemInfo('RYPG-CBZD').toString()}}</td>
</tr>
<tr>
<td colspan="2">溶栓药物{{queryItemInfo('JMRS-RSYW').toString()}}</td>
<td colspan="2">剂量</td>
<td colspan="2">用法用量</td>
</tr>
<tr>
<td></td>
<td>血压(BP)</td>
<td>心率(HR)</td>
<td>血样饱和度(HR)</td>
<td>格拉斯评分</td>
<td>NIHSS</td>
<td colspan="2">剂量{{queryItemInfo('JMRS-JDJL').toString()}}</td>
<td colspan="2">用法用量 </td>
</tr>
<tr>
<td>时间点</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>血压(BP)</td>
<td>心率(HR)</td>
<td>血样饱和度(HR)</td>
<td>格拉斯评分</td>
<td>NIHSS</td>
</tr>
<tr>
<td>用药前</td>
<td>{{queryItemInfo('JMRS-Q-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-Q-NIHSS').toString()}}</td>
</tr>
<tr>
<td>15min</td>
<td>{{queryItemInfo('JMRS-15-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-15-NIHSS').toString()}}</td>
</tr>
<tr>
<td>30min</td>
<td>{{queryItemInfo('JMRS-30-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-30-NIHSS').toString()}}</td>
</tr>
<tr>
<td>45min</td>
<td>{{queryItemInfo('JMRS-45-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-45-NIHSS').toString()}}</td>
</tr>
<tr>
<td>60min</td>
<td>{{queryItemInfo('JMRS-60-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-60-NIHSS').toString()}}</td>
</tr>
<tr>
<td>75min</td>
<td>{{queryItemInfo('JMRS-75-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-75-NIHSS').toString()}}</td>
</tr>
<tr>
<td>90min</td>
<td>{{queryItemInfo('JMRS-90-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-90-NIHSS').toString()}}</td>
</tr>
<tr>
<td>105min</td>
<td>{{queryItemInfo('JMRS-105-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-105-NIHSS').toString()}}</td>
</tr>
<tr>
<td>120min</td>
<td>{{queryItemInfo('JMRS-120-SYSTOLIC-PRESSURE').toString()}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{{queryItemInfo('JMRS-120-NIHSS').toString()}}</td>
</tr>
</table>
</div>
@ -304,9 +235,166 @@
<a-card class="report-card" title="DNT时间表">
<a slot="extra" href="#">导出</a>
<div class="doc-ct-content">
<div class="record-content" v-html="dntData"></div>
<div class="emtpy" v-if="!dntData">
<a-empty :image="emptyImage" description="暂无DNT时间表" />
<div class="record-content">
<table border class="report-rsgcb">
<tr>
<td colspan="2">姓名{{patient.patientName}}</td>
<td colspan="3">性别{{patient.patientGenderString}}</td>
<td colspan="1">年龄{{patient.patientAge}}</td>
<td colspan="2">血糖(BS){{queryItemInfo('RYPG-BLOOD-SUGAR').toString()}}</td>
<td colspan="2">血压(BP){{queryItemInfo('JMRS-Q-SYSTOLIC-PRESSURE').toString()}}
</td>
</tr>
<tr>
<td colspan="3">一线</td>
<td colspan="3">二线</td>
<td colspan="4">NIHSS{{queryItemInfo('JMRS-Q-NIHSS').toString()}}</td>
</tr>
<tr>
<td colspan="2">溶栓流程</td>
<td colspan="3">具体时间</td>
<td colspan="2">采集方式</td>
<td colspan="3">备注</td>
</tr>
<tr>
<td colspan="2">发病时间</td>
<td colspan="3">{{queryItemInfo('JBXX-FBSJ').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">到院时间</td>
<td colspan="3">{{queryItemInfo('JBXX-FBSJ').toString()}}</td>
<td colspan="2">质控平车</td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">启动绿道时间</td>
<td colspan="3">{{queryItemInfo('RYPG-GR-TIME').toString()}}</td>
<td colspan="2">可视化信息竖屏</td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">呼叫时间</td>
<td colspan="3">{{queryItemInfo('JBXX-TZCZYS-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">一线到场时间</td>
<td colspan="3">{{queryItemInfo('JBXX-CZYSDC-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">采血开始时间</td>
<td colspan="3">{{queryItemInfo('RYPG-BLOOD-TIME').toString()}}</td>
<td colspan="2">质控平车</td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">血样报告时间</td>
<td colspan="3">{{queryItemInfo('RYPG-BLOOD-REPORT-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">心电开始时间</td>
<td colspan="3">{{queryItemInfo('RYPG-ECG-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">到达CT时间</td>
<td colspan="3">{{queryItemInfo('RYPG-CT-DD-TIME').toString()}}</td>
<td colspan="2">质控平车</td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">CT检查开始时间</td>
<td colspan="3">{{queryItemInfo('RYPG-CT-JCKS-TIME').toString()}}</td>
<td colspan="2">质控平车</td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">CT检查完毕时间</td>
<td colspan="3">{{queryItemInfo('RYPG-CT-JCWB-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<!-- <tr>
<td colspan="2">离开CT时间</td>
<td colspan="3">{{queryItemInfo('RYPG-CT-LK-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr> -->
<tr>
<td colspan="2">到达核磁时间</td>
<td colspan="3">{{queryItemInfo('JMRS-HC-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">二线医生到场时间</td>
<td colspan="3">{{queryItemInfo('JBXX-SNYSDC-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">谈话开始时间</td>
<td colspan="3">{{queryItemInfo('JMRS-TH-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">签署知情同意书时间</td>
<td colspan="3">{{queryItemInfo('JMRS-ZQTY-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">到达溶栓区时间</td>
<td colspan="3">{{queryItemInfo('JMRS-RSQ-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">静脉溶栓开始时间</td>
<td colspan="3">{{queryItemInfo('JMRS-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">静脉溶栓结束时间</td>
<td colspan="3">{{queryItemInfo('JMRS-END-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">进入介入室时间</td>
<td colspan="3">{{queryItemInfo('JMRS-DDJRS').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">置鞘时间</td>
<td colspan="3">{{queryItemInfo('XGZL-CCWC-TIME').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">血管再通时间</td>
<td colspan="3">{{queryItemInfo('XGZL-SH-SCXGZTSJ').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
<tr>
<td colspan="2">进入病房时间</td>
<td colspan="3">{{queryItemInfo('JMRS-DDBF').toString()}}</td>
<td colspan="2"></td>
<td colspan="3"></td>
</tr>
</table>
</div>
</div>
</a-card>
@ -334,6 +422,7 @@
<throm-report-record ref="record"></throm-report-record>
<throm-report-observe ref="observe"></throm-report-observe>
<throm-report-opera ref="opera"></throm-report-opera>
<a ref="downloadRef" target="_blank" href="javascript:;" style="display: none;"></a>
</div>
</template>
@ -342,6 +431,9 @@
mapMutations,
mapState
} from 'vuex';
import {
apiUrl
} from '@/config/setting.js';
import {
getNextNode,
messageQuery,
@ -349,7 +441,8 @@
queryLog,
operationLog,
getCtInfoPath,
operationLogEx
operationLogEx,
exportRsPdf
} from 'api';
import dayjs from 'dayjs';
import duration from 'dayjs/plugin/duration';
@ -431,6 +524,10 @@
dataSource: {
type: Object,
default: () => ({})
},
firstAidId: {
type: String,
default: "",
}
},
computed: {
@ -496,23 +593,28 @@
//TODU
if (this.reportType == 'modal') {
console.log(this.dataSource)
this.patient = this.dataSource
// this.patient = this.dataSource
this.init(this.dataSource.firstAidId);
} else {
if (!this.patientData) return;
this.patient = this.patientData
// if (!this.patientData) return;
// this.patient = this.patientData
if (this.firstAidId) {
this.init(this.firstAidId);
await this.getMessageQuery(this.firstAidId);
}
}
const {
firstAidId
} = this.patient;
firstAidId && this.init(firstAidId);
await this.getMessageQuery();
// const {
// firstAidId
// } = this.patient;
console.log('report firstAidId', this.firstAidId)
},
methods: {
...mapMutations('patient', ['setNextNodeData', 'setTimerData']),
async getMessageQuery() {
const {
firstAidId
} = this.patientData;
async getMessageQuery(firstAidId) {
// const {
// firstAidId
// } = this.patientData;
const res = await messageQuery(firstAidId);
const {
code,
@ -533,11 +635,7 @@
onSubmit() {
// this.$emit('next')
},
async getData() {
const {
firstAidId
} = this.patientData
async getData(firstAidId) {
const resLog = await queryLog({
firstAidId
})
@ -585,7 +683,18 @@
name: 'Record',
});
},
async handleExport() {
console.log('this.patient.firstAidId', this.patient.firstAidId)
const res = await exportRsPdf({
firstAidId: this.patient.firstAidId
})
if (res.code == 200) {
console.log('http://116.204.114.73:20007' + res.data)
this.$refs.downloadRef.setAttribute('href', 'http://116.204.114.73:20007' + res.data)
this.$refs.downloadRef.click()
}
},
checkReport(modalRef) {
console.log('modalRef', this.patient)
// const {
@ -626,6 +735,7 @@
const res = await queryAidRecord(firstAidId)
console.log(res)
this.patient = res.data
// if (this.patientData) {
// const {
// recordValDict
@ -640,7 +750,7 @@
// firstAidId
// } = this.patientData;
this.getNextNode(firstAidId);
this.getData()
this.getData(firstAidId)
},
async getNextNode(firstAidId) {
let res = await getNextNode({
@ -662,9 +772,12 @@
async exportRecord() {
const {
firstAidId
} = this.patientData
} = this.patient
const res = await queryLog({
// const res = await queryLog({
// firstAidId
// })
const res = await exportRsPdf({
firstAidId
})
const {
@ -680,8 +793,12 @@
},
toDownLoad(path) {
try {
document.getElementById('exportFirst').href = path;
document.getElementById('exportFirst').download = '.xlsx';
// document.getElementById('exportFirst').href = path;
// document.getElementById('exportFirst').download = '.xlsx';
this.$refs.downloadRef.setAttribute('href', 'http://116.204.114.73:20007' + path)
this.$refs.downloadRef.setAttribute('download', '.xlsx')
this.$refs.downloadRef.click()
} catch (e) {
//TODO handle the exception
console.log(e.message)

52
src/views/thrombolysis/components/throm-result-firstInfo.vue

@ -233,7 +233,7 @@
</div>
<div class="first-footer">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
@click="onSubmit">{{patientId? '保存' : '下一步'}}</a-button>
@click="onSubmit($event, patientId)">{{patientId? '保存' : '完成'}}</a-button>
<!-- <a-button :disabled="writeAble" type="link" size="large" @click="onSubmit">
保存<a-icon type="check" />
</a-button> -->
@ -374,6 +374,7 @@
},
methods: {
...mapMutations('patient', ['setPatientData']),
successInformed() {
this.modalVisable = false;
},
@ -487,19 +488,40 @@
}
// this.updateAidBase(code, value, type)
},
async onSubmit(e) {
async onSubmit(e, patientId) {
e.preventDefault();
let codeAndAnswerList = [],
params = {};
const _this = this;
if(!patientId){
this.$confirm({
title: '提示',
okText: '确认',
cancelText: '取消',
content: '是否确定生成报告单,生成报告单后无法修改内容',
onOk() {
_this.handleSubmit(1)
},
onCancel() {
_this.handleSubmit(0)
},
});
}else{
this.handleSubmit()
}
},
handleSubmit(finishStatus){
this.$nextTick(async () => {
let adverseSubmit = this.$refs.adverse;
if (adverseSubmit) {
let res = await adverseSubmit.onAdverseSubmit(e, 'first');
if (res.length > 0) {
codeAndAnswerList = codeAndAnswerList.concat(res);
}
}
this.firstForm.validateFields(async (err, values) => {
let codeAndAnswerList = [],
params = {};
const { firstAidId } = this.patientData
console.log('firstinfo handleSubmit', firstAidId)
let adverseSubmit = this.$refs.adverse;
if (adverseSubmit) {
let res = await adverseSubmit.onAdverseSubmit(e, 'first');
if (res.length > 0) {
codeAndAnswerList = codeAndAnswerList.concat(res);
}
}
for (var k in values) {
if (Object.keys(this.codeForm).includes(k)) {
let answer = [values[k]];
@ -524,12 +546,18 @@
await this.home.updateAidCode({
...params,
codeAndAnswerList,
finishStatus
},
false
);
this.$message.success("操作成功")
this.$emit('next')
if(finishStatus === 1) {
console.log('firstinfo', firstAidId)
this.$emit('next', {firstAidId})
// this.setPatientData({})
}
});
});
},
//

4
src/views/thrombolysis/components/throm-result.vue

@ -48,8 +48,8 @@
handleNext() {
this.currentIndex++
},
handleNextStep() {
this.$emit('next')
handleNextStep(data) {
this.$emit('next', data)
}
}
}

45
src/views/thrombolysis/index.vue

@ -4,28 +4,27 @@
<div class="thrombolysis-box">
<a-steps v-model="current" type="navigation" size="small" :style="stepStyle">
<a-step status="finish" title="创建患者" disabled />
<a-step :status="current == 1 ? 'process' : current > 1 ? 'finish' : 'wait'" title="溶栓前">
<!-- <div slot="icon" style="font-size: 1.7rem;">1.</div> -->
<a-step :status="current == 1 ? 'process' : current > 1 ? 'finish' : 'wait'" title="溶栓前" :disabled="!!firstAidId">
</a-step>
<template v-if="isrs && !isjr">
<a-step :status="current == 2 ? 'process' : current > 2 ? 'finish' : 'wait'" title="溶栓中" />
<a-step :status="current == 3 ? 'process' : current > 3 ? 'finish' : 'wait'" title="查看结果" />
<a-step :status="current == 4 ? 'process' : current > 4 ? 'finish' : 'wait'" title="报告" />
<a-step :status="current == 2 ? 'process' : current > 2 ? 'finish' : 'wait'" title="溶栓中" :disabled="!!firstAidId" />
<a-step :status="current == 3 ? 'process' : current > 3 ? 'finish' : 'wait'" title="查看结果" :disabled="!!firstAidId" />
<a-step :status="current == 4 ? 'process' : current > 4 ? 'finish' : 'wait'" title="报告" disabled />
</template>
<template v-else-if="!isrs && isjr">
<a-step :status="current == 2 ? 'process' : current > 2 ? 'finish' : 'wait'" title="介入" />
<a-step :status="current == 3 ? 'process' : current > 3 ? 'finish' : 'wait'" title="查看结果" />
<a-step :status="current == 4 ? 'process' : current > 4 ? 'finish' : 'wait'" title="报告" />
<a-step :status="current == 2 ? 'process' : current > 2 ? 'finish' : 'wait'" title="介入" :disabled="!!firstAidId" />
<a-step :status="current == 3 ? 'process' : current > 3 ? 'finish' : 'wait'" title="查看结果" :disabled="!!firstAidId" />
<a-step :status="current == 4 ? 'process' : current > 4 ? 'finish' : 'wait'" title="报告" disabled />
</template>
<template v-else-if="!isrs && !isjr">
<a-step :status="current == 2 ? 'process' : current > 2 ? 'finish' : 'wait'" title="查看结果" />
<a-step :status="current == 3 ? 'process' : current > 3 ? 'finish' : 'wait'" title="报告" />
<a-step :status="current == 2 ? 'process' : current > 2 ? 'finish' : 'wait'" title="查看结果" :disabled="!!firstAidId" />
<a-step :status="current == 3 ? 'process' : current > 3 ? 'finish' : 'wait'" title="报告" disabled />
</template>
<template v-else>
<a-step :status="current == 2 ? 'process' : current > 2 ? 'finish' : 'wait'" title="溶栓中" />
<a-step :status="current == 3 ? 'process' : current > 3 ? 'finish' : 'wait'" title="介入" />
<a-step :status="current == 4 ? 'process' : current > 4 ? 'finish' : 'wait'" title="查看结果" />
<a-step :status="current == 5 ? 'process' : current > 5 ? 'finish' : 'wait'" title="报告" />
<a-step :status="current == 2 ? 'process' : current > 2 ? 'finish' : 'wait'" title="溶栓中" :disabled="!!firstAidId" />
<a-step :status="current == 3 ? 'process' : current > 3 ? 'finish' : 'wait'" title="介入" :disabled="!!firstAidId" />
<a-step :status="current == 4 ? 'process' : current > 4 ? 'finish' : 'wait'" title="查看结果" :disabled="!!firstAidId" />
<a-step :status="current == 5 ? 'process' : current > 5 ? 'finish' : 'wait'" title="报告" disabled />
</template>
</a-steps>
@ -34,22 +33,22 @@
<template v-if="isrs && !isjr">
<throm-ing v-if="current == 2" @next="handleNext"></throm-ing>
<throm-result v-if="current == 3" @next="handleNext"></throm-result>
<throm-report v-else-if="current == 4" @next="handleNext"></throm-report>
<throm-report v-else-if="current == 4" @next="handleNext" :firstAidId="firstAidId"></throm-report>
</template>
<template v-else-if="!isrs && isjr">
<throm-interfere v-if="current == 2" @next="handleNext"></throm-interfere>
<throm-result v-if="current == 3" @next="handleNext"></throm-result>
<throm-report v-else-if="current == 4" @next="handleNext"></throm-report>
<throm-report v-else-if="current == 4" @next="handleNext" :firstAidId="firstAidId"></throm-report>
</template>
<template v-else-if="!isrs && !isjr">
<throm-result v-if="current == 2" @next="handleNext"></throm-result>
<throm-report v-else-if="current == 3" @next="handleNext"></throm-report>
<throm-report v-else-if="current == 3" @next="handleNext" :firstAidId="firstAidId"></throm-report>
</template>
<template v-else>
<throm-ing v-if="current == 2" @next="handleNext"></throm-ing>
<throm-interfere v-else-if="current == 3" @next="handleNext"></throm-interfere>
<throm-result v-else-if="current == 4" @next="handleNext"></throm-result>
<throm-report v-else-if="current == 5" @next="handleNext"></throm-report>
<throm-report v-else-if="current == 5" @next="handleNext" :firstAidId="firstAidId"></throm-report>
</template>
@ -94,11 +93,17 @@
marginBottom: '60px',
boxShadow: '0px -1px 0 0 #e8e8e8 inset',
},
firstAidId: ''
}
},
methods: {
handleNext() {
this.current++
handleNext(data) {
this.firstAidId = data?.firstAidId
// console.log(firstAidId)
this.$nextTick(()=> {
this.current++
})
}
}
}

Loading…
Cancel
Save