Browse Source

init

master
nicky 5 months ago
parent
commit
f526586ce1
  1. 176
      src/api/index.js
  2. 11
      src/api/login.js
  3. BIN
      src/assets/images/login-bg.png
  4. BIN
      src/assets/images/logo.jpg
  5. 6
      src/assets/less/common.less
  6. 2
      src/config/setting.js
  7. 4
      src/layouts/BasicLayout.less
  8. 6
      src/layouts/BasicLayout.vue
  9. 5
      src/router/index.js
  10. 16
      src/store/modules/patient/mutations.js
  11. 1
      src/store/modules/patient/state.js
  12. 31
      src/store/modules/storm/actions.js
  13. 142
      src/views/Patient/components/patient-detail.vue
  14. 32
      src/views/Patient/components/patient-list.vue
  15. 200
      src/views/Patient/index.vue
  16. 6
      src/views/document/components/report.vue
  17. 28
      src/views/document/index.vue
  18. 182
      src/views/login/index.vue
  19. 53
      src/views/statistics/index.vue
  20. 1
      src/views/thrombolysis/components/throm-before0.vue
  21. 4
      src/views/thrombolysis/components/throm-before2.vue
  22. 12
      src/views/thrombolysis/components/throm-before4.vue
  23. 54
      src/views/thrombolysis/components/throm-report-dnt.vue
  24. 54
      src/views/thrombolysis/components/throm-report-observe.vue
  25. 54
      src/views/thrombolysis/components/throm-report-opera.vue
  26. 48
      src/views/thrombolysis/components/throm-report-record.vue
  27. 137
      src/views/thrombolysis/components/throm-report.vue

176
src/api/index.js

@ -1,5 +1,7 @@
import axios from 'axios';
let { proxyUrl } = require('@/config/setting');
let {
proxyUrl
} = require('@/config/setting');
let proxyUrl1 = proxyUrl + '/workstation';
//查询民族列表
export const getNation = () => axios.post(`${proxyUrl1}/sys/nation/list`);
@ -26,32 +28,47 @@ export const create = (params) =>
// 查病历数据
export const queryAidRecord = (firstAidId, codeList) =>
axios.post(`${proxyUrl1}/firstAid/queryAidRecord`, {
param: { firstAidId, codeList },
param: {
firstAidId,
codeList
},
});
// 更新急救code信息
export const saveAidRecord = (param) =>
axios.post(`${proxyUrl1}/firstAid/saveAidRecord`, { param });
axios.post(`${proxyUrl1}/firstAid/saveAidRecord`, {
param
});
// 更新急救基本信息
export const updateAidBase = (param) =>
axios.post(`${proxyUrl1}/firstAid/update`, { param });
axios.post(`${proxyUrl1}/firstAid/update`, {
param
});
//溶栓记录
export const queryLog = (param) =>
axios.post(`${proxyUrl1}/firstAid/queryLog`, { param });
axios.post(`${proxyUrl1}/firstAid/queryLog`, {
param
});
//医嘱查询
export const adviceQuery = (param) =>
axios.post(`${proxyUrl1}/advice/query`, { param });
axios.post(`${proxyUrl1}/advice/query`, {
param
});
//下发医嘱
export const adviceAdd = (params) =>
axios.post(`${proxyUrl1}/advice/add`, { ...params });
axios.post(`${proxyUrl1}/advice/add`, {
...params
});
//推送结果
export const messageQuery = (firstAidId) =>
axios.post(`${proxyUrl1}/message/query`, { firstAidId });
axios.post(`${proxyUrl1}/message/query`, {
firstAidId
});
export function uploadIdcard(data) {
return axios({
@ -68,27 +85,37 @@ export const idcardInfo = `${proxyUrl1}/sys/ocr/idcardInfo`;
// 创建急救身份证扫描
export const idcardInfoBase64 = (picBase64) =>
axios.post(`${proxyUrl1}/sys/ocr/idcardInfoBase64`, { picBase64 });
axios.post(`${proxyUrl1}/sys/ocr/idcardInfoBase64`, {
picBase64
});
//知情同意新增
export const saveInformedConsent = (params) =>
axios.post(`${proxyUrl1}/informed/saveInformedConsent`, { ...params });
axios.post(`${proxyUrl1}/informed/saveInformedConsent`, {
...params
});
// 查询是否有进行中的急救
export const queryFree = (params) =>
axios.post(`${proxyUrl1}/firstAid/queryFree`, { ...params });
axios.post(`${proxyUrl1}/firstAid/queryFree`, {
...params
});
export const endFirstAid = (params) =>
axios.post(`${proxyUrl1}/firstAid/endFirstAid `, {});
//知情同意查询
export const queryConsentResult = (params) =>
axios.post(`${proxyUrl1}/informed/queryConsentResult`, {
param: { ...params },
param: {
...params
},
});
//查看知情同意时添加谈话时间
export const thTime = (params) =>
axios.post(`${proxyUrl1}/firstAid/thTime`, { ...params });
axios.post(`${proxyUrl1}/firstAid/thTime`, {
...params
});
// 上传文件
export function uploadfile(data) {
@ -115,7 +142,11 @@ export function uploadBase64(data) {
}
// 查询平车状态
export const queryByPadNo = (params) =>
axios.post(`${proxyUrl1}/car/queryByPadNo`, { param: { ...params } });
axios.post(`${proxyUrl1}/car/queryByPadNo`, {
param: {
...params
}
});
// 血样报告
export const queryFirstAidInspectData = (params) =>
axios.post(`${proxyUrl1}/firstAid/queryFirstAidInspectData`, {
@ -123,20 +154,34 @@ export const queryFirstAidInspectData = (params) =>
});
// 查询下一个节点
export const getNextNode = (params) =>
axios.post(`${proxyUrl1}/firstAid/next`, { param: { ...params } });
axios.post(`${proxyUrl1}/firstAid/next`, {
param: {
...params
}
});
//导出急救记录
export const exportFirstAid = (params) =>
axios.post(`${proxyUrl1}/firstAid/export`, { param: { ...params } });
axios.post(`${proxyUrl1}/firstAid/export`, {
param: {
...params
}
});
// 溶栓介入视频
export const queryVideo = (param) =>
axios.post(`${proxyUrl1}/video/query`, { param: { ...param } });
axios.post(`${proxyUrl1}/video/query`, {
param: {
...param
}
});
// 溶栓介入视频
export const queryBook = (param) =>
axios.post(`${proxyUrl1}/informed/queryConsentTemplate`, {
param: { ...param },
param: {
...param
},
});
// 溶栓介入视频
@ -147,80 +192,125 @@ export const queryWeight = (firstAidId) =>
// 修改急救信息
export const updateFirstAid = (params) =>
axios.post(`${proxyUrl1}/firstAid/update`, { param: { ...params } });
axios.post(`${proxyUrl1}/firstAid/update`, {
param: {
...params
}
});
// ------------平车相关操作------------
// 授权
export const remoteAuth = (params) =>
axios.post(`${proxyUrl1}/mqtt/remoteAuth`, { ...params });
axios.post(`${proxyUrl1}/mqtt/remoteAuth`, {
...params
});
// 电池容量
export const remoteKljCapacity = (params) =>
axios.post(`${proxyUrl1}/mqtt/remoteKljCapacity`, { ...params });
axios.post(`${proxyUrl1}/mqtt/remoteKljCapacity`, {
...params
});
// 设备重启
export const remoteReboot = (params) =>
axios.post(
`${proxyUrl1}/mqtt/remoteReboot
`,
{ ...params }
`, {
...params
}
);
// 发送远程rfid消息
export const remoteRfid = (params) =>
axios.post(
`${proxyUrl1}/mqtt/remoteRfid
`,
{ ...params }
`, {
...params
}
);
// 发送远程设备心跳(校时)消息
export const remoteTime = (params) =>
axios.post(
`${proxyUrl1}/mqtt/remoteTime
`,
{ ...params }
`, {
...params
}
);
// 称重校准
export const remoteWeightCalibration = (params) =>
axios.post(
`${proxyUrl1}/mqtt/remoteWeightCalibration
`,
{ ...params }
`, {
...params
}
);
// 病例统计
export const getCtInfoPath = (params) =>
axios.post(`${proxyUrl1}/firstAid/getCtInfoPath`, { ...params });
axios.post(`${proxyUrl1}/firstAid/getCtInfoPath`, {
...params
});
// 我的
export const loginInfo = (params) =>
axios.post(`${proxyUrl1}/home/loginInfo`, { ...params } );
axios.post(`${proxyUrl1}/home/loginInfo`, {
...params
});
// RPT统计
export const queryRptResult = (params) =>
axios.post(`${proxyUrl1}/home/queryRptResult`, { ...params });
axios.post(`${proxyUrl1}/home/queryRptResult`, {
...params
});
// DPT统计 / 血管内治疗率
export const queryDptResult = (params) =>
axios.post(`${proxyUrl1}/home/queryDptResult`, { ...params });
axios.post(`${proxyUrl1}/home/queryDptResult`, {
...params
});
// 血管内治疗数据对比
export const selectXgzl = (params) =>
axios.post(`${proxyUrl1}/home/selectXgzl`, { ...params });
axios.post(`${proxyUrl1}/home/selectXgzl`, {
...params
});
// SICH发生率
export const querySichResult = (params) =>
axios.post(`${proxyUrl1}/home/querySichResult`, { ...params });
axios.post(`${proxyUrl1}/home/querySichResult`, {
...params
});
// SICHDNT分布
export const queryDntResult = (params) =>
axios.post(`${proxyUrl1}/home/queryDntResult`, { ...params });
axios.post(`${proxyUrl1}/home/queryDntResult`, {
...params
});
// 静脉溶栓数据对比 / 静脉溶栓率
export const queryJmrs = (params) =>
axios.post(`${proxyUrl1}/home/queryJmrs`, { ...params });
axios.post(`${proxyUrl1}/home/queryJmrs`, {
...params
});
// 病例统计数据分析
export const queryByDatePatient = (params) =>
axios.post(`${proxyUrl1}/home/queryByDatePatient`, { ...params });
axios.post(`${proxyUrl1}/home/queryByDatePatient`, {
...params
});
// 病例统计
export const queryPatient = (params) =>
axios.post(`${proxyUrl1}/home/queryPatient`, { ...params });
// 介入手术记录/总报告
axios.post(`${proxyUrl1}/home/queryPatient`, {
...params
});
// 介入手术记录/总报告/DNT时间表
export const operationLog = (params) =>
axios.post(`${proxyUrl1}/interfere/operationLog`, { ...params });
axios.post(`${proxyUrl1}/interfere/operationLog`, {
...params
});
// 创建急救
export const createFirstAid = (params) =>
axios.post(`${proxyUrl1}/firstAid/createFirstAid`, {
...params
});
export const createPatient = (params) =>
axios.post(`${proxyUrl1}/firstAid/createPatient`, {
...params
});
export const eduitPatient = (params) =>
axios.post(`${proxyUrl1}/firstAid/eduitPatient`, {
...params
});

11
src/api/login.js

@ -1,5 +1,14 @@
import axios from 'axios';
let { proxyUrl } = require('@/config/setting');
let {
proxyUrl
} = require('@/config/setting');
let proxyUrl1 = proxyUrl + '/workstation';
// 登录
export const Login = (params) =>
axios.post(`${proxyUrl}/auth/pad/login`, params);
export const Loginnew = (params) =>
axios.post(`${proxyUrl}/auth/login`, params);
// 登录
export const queryUser = (params) =>
axios.post(`${proxyUrl1}/sys/queryUsername`, params);

BIN
src/assets/images/login-bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 KiB

BIN
src/assets/images/logo.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

6
src/assets/less/common.less

@ -756,7 +756,7 @@
.informed-item {
flex: 1;
display: flex;
justify-content: space-between;
// justify-content: space-between;
align-items: center;
margin-bottom: 15px;
margin-right: 10px;
@ -781,8 +781,8 @@
}
.item-img {
// width: 120px;
flex: 1;
min-width: 120px;
// flex: 1;
height: 40px;
display: flex;
align-items: center;

2
src/config/setting.js

@ -28,7 +28,7 @@ const INDEX_SETTINGS = {
development: {
//开发环境
apiUrl: 'http://116.204.114.73:10050/carbasics2024-yf-gateway/', // apiUrl: 'http://192.168.0.6:9002',
proxyUrl: '',
proxyUrl: '/basic-api',
publicPath: '',
imgUrl: 'http://116.204.114.73:20007',
},

4
src/layouts/BasicLayout.less

@ -121,10 +121,8 @@
.ant-layout-content{
position: relative;
// box-shadow: -2px 0px 8px rgba(238, 238, 238, 0.6); /* 左边阴影 */
.global-layout-content{
height: calc(100vh - 6vw);
height: calc(100vh - 5vw);
overflow-y: auto;
padding: 10px;
}

6
src/layouts/BasicLayout.vue

@ -86,7 +86,7 @@
<div class="person-footer">
<a-button class="persion-footer-button person-footer-reset" block>修改密码</a-button>
<a-button class="persion-footer-button person-footer-logout" type="primary"
block>退出登录</a-button>
block @click="logout" >退出登录</a-button>
</div>
</div>
</a-drawer>
@ -188,9 +188,13 @@
},
onClose() {
this.visible = false;
console.log('ddd')
document.getElementById('globalLayoutContent').style.overflowY = 'auto';
this.current = this.current_
},
logout(){
this.$router.replace('/login')
}
}
}
</script>

5
src/router/index.js

@ -58,6 +58,11 @@ const routes = [{
// }
]
},
{
name: 'Login',
path: '/login',
component: () => import('@/views/login/index')
}
// {
// path: '/404',
// component: () => import('@/views/exception/404')

16
src/store/modules/patient/mutations.js

@ -8,25 +8,25 @@ const mutations = {
// 团注, 剂量, 每次进来复制为空
if (data.recordValDict) {
if (!data.recordValDict['JMRS-TZJL']) {
data.recordValDict['JMRS-TZJL'] = [
{
data.recordValDict['JMRS-TZJL'] = [{
questionCode: 'JMRS-TZJL',
answer: [],
},
];
}, ];
}
if (!data.recordValDict['JMRS-JDJL']) {
data.recordValDict['JMRS-JDJL'] = [
{
data.recordValDict['JMRS-JDJL'] = [{
questionCode: 'JMRS-JDJL',
answer: [],
},
];
}, ];
}
}
sessionStorage.setItem('patientData', JSON.stringify(data));
state.patientData = data;
},
setPatientDataCur(state, data) {
sessionStorage.setItem('patientDataCur', JSON.stringify(data));
state.patientDataCur = data;
},
setTimerData(state, data) {
state.timerData = data;
},

1
src/store/modules/patient/state.js

@ -1,5 +1,6 @@
const state = {
patientData: {}, // 当前患者信息
patientDataCur: {}, // 当前患者信息
timerData: {}, // 计时数据
nextNodeData: {},
overviewType: '',

31
src/store/modules/storm/actions.js

@ -1,16 +1,31 @@
import { Login } from '@/api/login.js';
import {
Loginnew
} from '@/api/login.js';
const actions = {
toLogin({ commit, state }, { no }) {
toLogin({
commit,
state
}, {
no
}) {
return new Promise(async (resolve, reject) => {
try {
console.log('state', state.APP_DEVICE_NO)
console.log('no', no)
let padNo = state.APP_DEVICE_NO;
if (!padNo) return;
const res = await Login({
param: {
padNo,
},
// if (!padNo) return;
const res = await Loginnew({
...no,
// param: {
// // padNo: '3333',
// ...no
// },
});
const { code, data, msg } = res;
const {
code,
data,
msg
} = res;
if (code === 200) {
commit('setToken', data.access_token);
resolve(data);

142
src/views/Patient/components/patient-detail.vue

@ -1,45 +1,11 @@
<template>
<div class="patient-detail">
<!-- <div class="patient-dlist">
<patient-list ref="patientList" :column="1">
<template #default="{ item, index }">
<a-card class="patient-card" :class="{'active': item.firstAidId == patientData.firstAidId}"
hoverable @click="handleClickPatient(item, index)">
<div class="patient-card-header">
<div class="patient-avatar">
<img src="@/assets/images/pc.png" alt="" />
</div>
<div class="patient-info">
<div class="patient-name">{{item.patientName}}<span
class="age">{{item.patientAge}}</span></div>
<div class="patient-IDCard">{{utils.maskIDCard(item.patientIdCardNo)}}</div>
</div>
</div>
<div class="patient-card-body">
<div class="patient-card-row patient-card-row1">
<div class="patient-card-work">卒中</div>
<div class="patient-card-work">平车</div>
</div>
<div class="patient-card-row patient-card-row2">
<div class="patient-dept">
<div class="patient-card-label">分诊时间</div>
<div class="patient-card-text">{{item.firstAidTime.substring(0, 10)}}</div>
</div>
<div class="patient-reg">
<div class="patient-card-label">挂号时间</div>
<div class="patient-card-text">{{item.firstAidTime.substring(0, 10)}}</div>
</div>
</div>
</div>
</a-card>
</template>
</patient-list>
</div> -->
<div class="patient-info-box">
<a-card class="patient-info-card">
<div class="patient-info-header">
<div class="patient-info-header-title">患者基本信息</div>
<div class="patient-info-header-btn"><a-button @click="goEditPatient" v-if="!authEdit && firstAidId">编辑</a-button>
<div class="patient-info-header-btn"><a-button @click="goEditPatient"
v-if="!authEdit && patientDataCur.id">编辑</a-button>
</div>
</div>
<div class="patient-info-body">
@ -50,7 +16,7 @@
<a-col :span="12">
<a-form-model-item label="姓名" prop="patientName1">
<a-input v-model="form.patientName" placeholder="请输入姓名" v-if="authEdit"></a-input>
<div v-else class="edititem"> {{patientData.patientName}} </div>
<div v-else class="edititem"> {{patientDataCur.patientName}} </div>
</a-form-model-item>
</a-col>
<a-col :span="12">
@ -60,7 +26,7 @@
{{ item }}
</a-select-option>
</a-select>
<div v-else class="edititem"> {{patientData.patientNation}} </div>
<div v-else class="edititem"> {{patientDataCur.patientNation}} </div>
</a-form-model-item>
</a-col>
<a-col :span="12">
@ -70,29 +36,31 @@
<a-select-option :value="1"></a-select-option>
</a-select>
<div v-else class="edititem">
<span v-if="patientData.patientGender == 0"></span>
<span v-else-if="patientData.patientGender == 1"></span>
<span v-if="patientDataCur.patientGender == 0"></span>
<span v-else-if="patientDataCur.patientGender == 1"></span>
</div>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="身高">
<a-input v-model="form.height" placeholder="请输入身高 (cm)" v-if="authEdit" />
<div v-else class="edititem"> {{patientData.height}} </div>
<div v-else class="edititem"> {{patientDataCur.height}} </div>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="体重">
<a-input v-model="form.weight" placeholder="请输入体重 (kg)" v-if="authEdit" />
<div v-else class="edititem"> {{patientData.weight}} </div>
<div v-else class="edititem"> {{patientDataCur.weight}} </div>
</a-form-model-item>
</a-col>
<a-col :span="16">
<a-form-model-item label="身份证号" :label-col="{ span: 5 }" :wrapper-col="{ span: 19 }"
placeholder="请输入身份证号">
<keyboard placeHolder="" :index-num="indexNum" @keyboard-input="handleKeyBoard"
:old-value="patientIdCardNo" v-if="authEdit" />
<div v-else class="edititem">{{patientData.patientIdCardNo ? utils.maskIDCard(patientData.patientIdCardNo) : '-'}}</div>
:old-value="form.patientIdCardNo" v-if="authEdit" />
<div v-else class="edititem">
{{patientDataCur.patientIdCardNo ? utils.maskIDCard(patientDataCur.patientIdCardNo) : '-'}}
</div>
</a-form-model-item>
</a-col>
<a-col :span="8" style="padding-top: 0.15vw;" v-if="authEdit">
@ -102,7 +70,7 @@
<a-form-model-item label="联系方式" :label-col="{ span: 5 }" :wrapper-col="{ span: 19 }"
placeholder="请输入联系方式">
<a-input v-model="form.contract" placeholder="请输入联系方式" v-if="authEdit" />
<div v-else class="edititem">{{patientData.contract}}</div>
<div v-else class="edititem">{{patientDataCur.contract}}</div>
</a-form-model-item>
</a-col>
<a-col :span="24">
@ -116,9 +84,9 @@
<a-select-option :value="2">创伤</a-select-option>
</a-select>
<div v-else class="edititem">
<span v-if="patientData.type == 0">卒中急救</span>
<span v-else-if="patientData.type == 1">胸痛</span>
<span v-else-if="patientData.type == 2">创伤</span>
<span v-if="patientDataCur.type == 0">卒中急救</span>
<span v-else-if="patientDataCur.type == 1">胸痛</span>
<span v-else-if="patientDataCur.type == 2">创伤</span>
</div>
</a-form-model-item>
</a-col>
@ -129,26 +97,22 @@
<a-select-option :value="1"></a-select-option>
</a-select> -->
<a-select v-model="form.carNo" placeholder="请选择平车号" v-if="authEdit">
<a-select-option
v-for="item in carList"
:key="item.id"
:value="item.deviceNo"
>
<a-select-option v-for="item in carList" :key="item.id" :value="item.deviceNo">
{{ item.deviceNo }}
</a-select-option>
</a-select>
<div v-else class="edititem">{{patientData.carNo}}</div>
<div v-else class="edititem">{{patientDataCur.carNo}}</div>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="绿道状态" :label-col="{ span: 7 }" :wrapper-col="{ span: 16 }">
<a-switch v-model="form.greenRoadFlag" v-if="authEdit" />
<div v-else class="edititem">{{patientData.greenRoadFlag}}</div>
<div v-else class="edititem">{{patientDataCur.greenRoadFlag}}</div>
</a-form-model-item>
</a-col>
<a-col :span="12" v-if="!authEdit">
<a-form-model-item label="BMI">
<div class="edititem">{{patientData.BMI}}</div>
<div class="edititem">{{patientDataCur.BMI}}</div>
</a-form-model-item>
</a-col>
</a-row>
@ -185,7 +149,10 @@
create,
uploadIdcard,
idcardInfo,
idcardInfoBase64
idcardInfoBase64,
createFirstAid,
createPatient,
eduitPatient
} from 'api';
export default {
data() {
@ -213,14 +180,13 @@
},
computed: {
...mapState('storm', ['nationList', 'APP_DEVICE_NO']),
...mapState('patient', ['patientData', 'timerData']),
...mapState('patient', ['patientData', 'timerData', 'patientDataCur']),
},
async created() {
},
watch:{
watch: {
patientData() {
console.log('watch patientdata')
const {
firstAidId
} = this.patientData;
@ -240,11 +206,49 @@
goPatientList() {
this.$emit('change', 'patient-list')
},
goNext() {
async goNext(e) {
e.preventDefault();
this.$refs.ruleForm.validate(async (valid) => {
if (valid) {
this.confirmLoading = true;
// const reg =
// /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
// if (!reg.test(this.patientIdCardNo) && this.patientIdCardNo) {
// this.$message.error('');
// return;
// }
// if (typeof this.firstAidData.greenRoadFlag == 'boolean') {
// this.firstAidData.greenRoadFlag = 0;
// }
let res = await create({
param: {
...this.patientDataCur,
// patientIdCardNo: "142422199802281819",
// identityNo: "142422199802281819",
},
});
const {
data,
code,
msg
} = res;
if (code === 200) {
this.setPatientData({ ...this.patientDataCur, firstAidId: data.firstAidId })
this.authEdit = false
this.$message.success('更新成功');
this.$router.push('/firstaid/thrombolysis')
// this.$emit('on-success', data);
}
this.confirmLoading = false;
}
});
// this.$router.push('/firstaid/thrombolysis')
},
goEditPatient() {
this.form = JSON.parse(JSON.stringify(this.patientData))
this.form = JSON.parse(JSON.stringify(this.patientDataCur))
this.authEdit = true
},
handleCancel() {
@ -262,15 +266,16 @@
if (!reg.test(this.patientIdCardNo) && this.patientIdCardNo) {
this.$message.error('身份证格式不正确');
this.confirmLoading = false;
return;
}
if (typeof this.firstAidData.greenRoadFlag == 'boolean') {
this.firstAidData.greenRoadFlag = 0;
}
let res = await create({
// if (typeof this.firstAidData.greenRoadFlag == 'boolean') {
// this.firstAidData.greenRoadFlag = 0;
// }
let res = await eduitPatient({
param: {
...this.form,
patientIdCardNo: this.patientIdCardNo,
...this.patientDataCur,
// patientIdCardNo: this.patientIdCardNo,
},
});
@ -283,6 +288,7 @@
this.setPatientData(this.form)
this.authEdit = false
this.$message.success('更新成功');
// this.$router.push('/firstaid/thrombolysis')
this.$emit('on-success', data);
}
this.confirmLoading = false;

32
src/views/Patient/components/patient-list.vue

@ -4,7 +4,7 @@
<a-list :data-source="list" :grid="{ gutter: 16, column }">
<a-list-item slot="renderItem" slot-scope="item, index">
<slot :item="item" :index="index">
<a-card class="patient-card" :class="{'active': item.id == patientData.firstAidId}" hoverable
<a-card class="patient-card" :class="{'active': item.id == patientDataCur.id}" hoverable
@click="checkPaitent(item, index)">
<div class="patient-card-header">
<div class="patient-avatar">
@ -21,7 +21,8 @@
<div class="patient-card-body">
<div class="patient-card-row patient-card-row2">
<div class="patient-card-label" style="margin-right: 15px;">
{{item.type==0?'卒中':item.type==1?'胸痛':item.type==2?'创伤':''}}</div>
{{item.type==0?'卒中':item.type==1?'胸痛':item.type==2?'创伤':''}}
</div>
<div class="patient-card-label">{{item.carNo}}</div>
</div>
<div class="patient-card-row patient-card-row2">
@ -84,17 +85,17 @@
pageSize: 15,
total: 0,
},
listShow: true,
listShow: true
}
},
created() {
// console.log('patient-list start')
},
computed: {
...mapState('patient', ['patientData']),
...mapState('patient', ['patientData', 'patientDataCur']),
},
methods: {
...mapMutations('patient', ['setPatientData']),
...mapMutations('patient', ['setPatientData', 'setPatientDataCur']),
handleInfiniteOnLoad() {
if (this.listShow) {
this.getData();
@ -140,8 +141,11 @@
this.list = [...this.list, ...data.list];
}
const pdata = this.list[0]
console.log('pdata', pdata)
if (pdata?.firstAidId) {
this.home.queryAid(pdata.firstAidId, false);
} else {
this.checkPaitent(pdata, 0)
}
// if (!type) {
// this.getNation();
@ -184,15 +188,13 @@
visitNo,
weight,
} = item;
this.setPatientData({
this.setPatientDataCur({
patientName: name,
patientAge: this.utils.calculateAge(identityNo),
patientGender: sex,
patientNation: nation,
patientIdCardNo: identityNo,
contract: contactPhone,
firstAidId: id,
address,
birthday,
carNo,
@ -222,7 +224,17 @@
visitNo,
weight,
});
this.$emit('change', 'patient-detail')
// this.$emit('change', 'patient-detail')
this.firstAidData = {
...item,
patientName: name,
patientAge: this.utils.calculateAge(identityNo),
patientGender: sex,
patientNation: nation,
patientIdCardNo: identityNo,
contract: contactPhone,
}
this.$emit('change', this.firstAidData)
}
}
}
@ -231,7 +243,7 @@
<style lang="less" scoped>
//
.patient-list {
height: calc(100vh - 220px);
height: calc(100vh - 200px);
overflow-y: auto;
}

200
src/views/Patient/index.vue

@ -10,52 +10,29 @@
<div class="patient-box">
<div class="patient-list-item">
<div class="search-box">
<a-input
placeholder="姓名 (支持拼音、首拼、关键字)"
style="width: 100%"
size="large"
v-model="searchVal"
@pressEnter="onSearch"
allowClear
>
<a-icon
slot="prefix"
type="search"
@click="onSearch"
/>
<a-input placeholder="姓名 (支持拼音、首拼、关键字)" style="width: 100%" size="large" v-model="searchVal"
@pressEnter="onSearch" allowClear>
<a-icon slot="prefix" type="search" @click="onSearch" />
</a-input>
</div>
<patient-list ref="patientList" @change="changeComponent" :column="1"></patient-list>
</div>
<div class="patient-detail">
<patient-detail ref="patientList"
:firstAidData="firstAidData"
:carList="carList"
:carNo="carNo" @change="changeComponent" ></patient-detail>
<patient-detail ref="patientList" :firstAidData="firstAidData" :carList="carList" :carNo="carNo"
@change="changeComponent"></patient-detail>
</div>
</div>
<PatientCreate
ref="patientCreate"
@on-success="onSearch"
:firstAidData="firstAidData"
:carList="carList"
:carNo="carNo"
/>
<PatientCreate ref="patientCreate" @on-success="onSearch" :firstAidData="firstAidData" :carList="carList"
:carNo="carNo" />
<!-- 平车状态按钮 -->
<Dragger ref="pc" class="pc-dragger">
<img src="@/assets/images/pc.png" alt="" @click="pcVisible = true" />
</Dragger>
<!-- 平车弹窗 -->
<a-modal
:width="700"
:destroyOnClose="true"
v-model="pcVisible"
@ok="pcVisible = false"
:footer="null"
>
<a-modal :width="700" :destroyOnClose="true" v-model="pcVisible" @ok="pcVisible = false" :footer="null">
<div class="pc-container">
<div class="pc-no">
<div class="pc-num">{{ pcData.carNo }}</div>
@ -114,33 +91,16 @@
</div>
</div>
<div class="pc-list">
<a-button
v-for="(item, index) in mqttBut"
:key="index"
class="mr-2"
@click="handleMqtt(index + 1)"
>{{ item }}</a-button
>
<a-button v-for="(item, index) in mqttBut" :key="index" class="mr-2"
@click="handleMqtt(index + 1)">{{ item }}</a-button>
</div>
</div>
</a-modal>
<a-modal
class="patient-create patient-form"
:width="600"
:destroyOnClose="true"
v-model="mqttShow"
@ok="pcVisible = false"
:footer="null"
:title="mqttBut[form.type - 1]"
>
<a-form
class="div-form"
:form="form"
:label-col="{ span: 5 }"
:wrapper-col="{ span: 18 }"
>
<a-modal class="patient-create patient-form" :width="600" :destroyOnClose="true" v-model="mqttShow"
@ok="pcVisible = false" :footer="null" :title="mqttBut[form.type - 1]">
<a-form class="div-form" :form="form" :label-col="{ span: 5 }" :wrapper-col="{ span: 18 }">
<a-form-item label="设备编号">
<a-input v-model="form.deviceNo" />
</a-form-item>
@ -148,12 +108,7 @@
<div v-if="form.type == 1">
<a-form-item label="时间">
<!-- <a-input v-model="form.time" /> -->
<a-date-picker
class="div-picker"
@change="onChange"
show-time
format="YYYY-MM-DD HH:mm:ss"
>
<a-date-picker class="div-picker" @change="onChange" show-time format="YYYY-MM-DD HH:mm:ss">
<template slot="renderExtraFooter"> </template>
</a-date-picker>
</a-form-item>
@ -191,10 +146,7 @@
</a-form-item>
</div>
<a-form-item :wrapper-col="{ span: 12, offset: 5 }">
<a-button
type="primary"
@click="handleMqttSubmit(form.type)"
>
<a-button type="primary" @click="handleMqttSubmit(form.type)">
确认
</a-button>
</a-form-item>
@ -204,12 +156,16 @@
</template>
<script>
import { mapState, mapActions, mapMutations } from 'vuex';
import PatientCreate from './components/patient-create.vue';
import PatientList from './components/patient-list.vue';
import PatientDetail from './components/patient-detail.vue';
import Dragger from '@/components/dragger.vue';
import {
import {
mapState,
mapActions,
mapMutations
} from 'vuex';
import PatientCreate from './components/patient-create.vue';
import PatientList from './components/patient-list.vue';
import PatientDetail from './components/patient-detail.vue';
import Dragger from '@/components/dragger.vue';
import {
getNation,
queryByPadNo,
selectList,
@ -222,8 +178,8 @@ import {
queryVideo,
queryBook,
messageQuery
} from 'api/index.js';
export default {
} from 'api/index.js';
export default {
name: 'Index',
components: {
PatientCreate,
@ -292,7 +248,11 @@ export default {
deviceType: 0,
},
});
const { data, code, msg } = res;
const {
data,
code,
msg
} = res;
if (code === 200) {
this.carList = data.list;
this.carNo = this.carList[0]?.deviceNo || ''; //
@ -303,7 +263,11 @@ export default {
//
async getNation() {
let res = await getNation();
const { data, code, msg } = res;
const {
data,
code,
msg
} = res;
if (code === 200) {
this.nationList = data;
this.setNationList(data);
@ -312,7 +276,11 @@ export default {
//
async queryByPadNo() {
const res = await queryByPadNo();
const { data, code, msg } = res;
const {
data,
code,
msg
} = res;
if (code === 200) {
this.pcData = data;
} else {
@ -320,8 +288,9 @@ export default {
}
},
//
changeComponent(c){
this.component = c
changeComponent(item) {
// this.component = c
// this.firstAidData = item
},
async handleMqttSubmit(type) {
@ -341,7 +310,11 @@ export default {
} else if (type == 6) {
res = await remoteRfid(formData);
}
const { code, msg, data } = res;
const {
code,
msg,
data
} = res;
if (code === 200) {
this.mqttShow = false;
this.$message.success('操作成功');
@ -353,12 +326,23 @@ export default {
this.form = {};
let deviceNo = this.pcData.carNo;
const formStructures = {
1: { time: '' }, //
2: { index: '', kg: '' }, //
3: { capacity: '' }, //
4: { needAuthFlag: '' }, //
1: {
time: ''
}, //
2: {
index: '',
kg: ''
}, //
3: {
capacity: ''
}, //
4: {
needAuthFlag: ''
}, //
5: {}, //
6: { rfidNo: '' }, // rfid
6: {
rfidNo: ''
}, // rfid
};
this.form = {
type,
@ -370,29 +354,42 @@ export default {
async queryVideo() {
let res = await queryVideo();
const { data, code, msg } = res;
const {
data,
code,
msg
} = res;
if (code === 200) {
this.setVideo(data.list);
}
},
async queryBook() {
let res = await queryBook();
const { data, code, msg } = res;
const {
data,
code,
msg
} = res;
console.log(data)
if (code === 200) {
this.setBook(data);
}
},
async getMessageQuery() {
const { firstAidId } = this.patientData;
const {
firstAidId
} = this.patientData;
const res = await messageQuery(firstAidId);
const { code, msg } = res;
const {
code,
msg
} = res;
if (code === 200) {
this.setTimerData(res.data);
}
},
}
}
}
</script>
<style lang="less" scoped>
@ -400,29 +397,31 @@ export default {
// padding: 10px;
//
.search-box{
.search-box {
margin-bottom: 10px;
}
//
.operater-box{
.operater-box {
padding: 0.5rem 1rem;
display: flex;
justify-content: space-between;
width: 100%;
background-color: #fff;
margin-bottom: .2rem;
.operater-title{
.operater-title {
font-size: 1rem;
font-weight: bold;
line-height: 1.6rem;
}
}
.patient-box{
.patient-box {
display: flex;
background-color: #fff;
.patient-list-item{
.patient-list-item {
background-color: #fff;
border-radius: 0.2rem;
border-radius: 0.2rem;
@ -431,56 +430,67 @@ export default {
margin-right: 12px;
padding: 12px;
}
.patient-detail{
.patient-detail {
flex: 2;
}
}
.pc-dragger{
.pc-dragger {
width: 3rem;
height: 3rem;
img{
img {
width: 100%;
height: 100%;
}
}
}
.pc-container {
text-align: center;
.pc-no {
font-size: 24px;
font-weight: bold;
font-family: OPPOSans-B;
color: #3e3d4d;
.status {
font-size: 20px;
font-family: OPPOSans-R;
color: #70798c;
padding-top: 10px;
&.active {
color: #7690e5;
}
}
}
.pc-list {
padding: 30px 0;
display: flex;
.pc-list-item {
background: #f6f6f9;
border-radius: 6px;
padding: 6px 24px;
font-size: 20px;
&:not(:last-child) {
margin-right: 10px;
}
}
.item-dash {
width: 15px;
height: 15px;
border-radius: 50%;
margin: 8px auto 5px;
background: #3e3d4d;
&.active {
background: #7690e5;
}

6
src/views/document/components/report.vue

@ -1,7 +1,7 @@
<template>
<a-modal class="doc-report" width="85%" destroyOnClose :footer="null" v-model="visible" title="报告单">
<div class="doc-report-content">
<ThromReport v-if="visible"></ThromReport>
<ThromReport reportType="modal" :dataSource="dataSource" v-if="visible"></ThromReport>
</div>
</a-modal>
</template>
@ -18,6 +18,7 @@
name: 'DocReport',
data() {
return {
dataSource: {},
visible: false
}
},
@ -25,7 +26,8 @@
ThromReport
},
methods: {
open() {
open(item) {
this.dataSource = item
this.visible = true
}
}

28
src/views/document/index.vue

@ -290,20 +290,20 @@
this.getData(1)
},
checkReport(item, modalRef) {
const {
sourceId,
patientName,
patientAge,
patientGender,
firstAidId,
} = item;
this.setPatientData({
sourceId,
patientName,
patientAge,
patientGender,
firstAidId,
});
// const {
// sourceId,
// patientName,
// patientAge,
// patientGender,
// firstAidId,
// } = item;
// this.setPatientData({
// sourceId,
// patientName,
// patientAge,
// patientGender,
// firstAidId,
// });
this.$refs[modalRef].open(item)
}
}

182
src/views/login/index.vue

@ -0,0 +1,182 @@
<template>
<div class="login-page">
<div class="login-left">
<div class="login-left-head">
<div class="login-head-logo"><img src="@/assets/images/logo.jpg" alt="" /></div>
<div class="login-head-title">卒中医生工作站</div>
</div>
<div class="login-left-bg">
<img src="@/assets/images/login-bg.png" alt="" />
</div>
</div>
<div class="login-right">
<div class="login-right-inner">
<div class="login-subflex"></div>
<div class="login-form">
<div class="login-form-title">欢迎登录</div>
<div class="login-form-container">
<a-form-model :model="form">
<a-form-model-item>
<a-select v-model="form.username" placeholder="选择账号" size="large">
<a-select-option v-for="u in userlist"
:value="u.username">{{u.username}}</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item>
<a-input v-model="form.password" placeholder="请输入密码" size="large" />
</a-form-model-item>
<a-form-model-item>
<div style="display: flex;">
<div style="flex: 1;margin-right: 12px;">
<a-input v-model="form.code" placeholder="请输入验证吗" size="large" />
</div>
<div>
<a-button type="primary" size="large">发送验证码</a-button>
</div>
</div>
</a-form-model-item>
<a-form-model-item>
<a-checkbox v-model="form.pwd">记住我</a-checkbox>
</a-form-model-item>
<a-form-model-item>
<a-button type="primary" block size="large" @click="login">登录</a-button>
</a-form-model-item>
</a-form-model>
</div>
</div>
<div class="login-subflex"></div>
</div>
</div>
</div>
</template>
<script>
import {
mapState,
mapActions,
mapMutations
} from 'vuex';
import {
Login,
queryUser
} from 'api/login';
export default {
name: "Login",
data() {
return {
userlist: [],
form: {
username: 'admin',
password: 'Sxinf18aA!',
code: '1'
}
}
},
created() {
this.queryUser()
},
methods: {
...mapActions('storm', ['toLogin']),
async login() {
let res = await this.toLogin({
no: {
...this.form,
// uuid: '7a996ab78a784c9cad3cf16d1b4b3d81',
},
});
this.$router.replace('/firstaid/patientList?deviceNo=P000001')
},
async queryUser() {
let res = await queryUser();
this.userlist = res.data
}
}
}
</script>
<style lang="less" scoped>
.login-page {
display: flex;
width: 100vw;
height: 100vh;
overflow: hidden;
background-color: #fff;
.login-left {
flex: 4;
display: flex;
flex-direction: column;
.login-left-head {
flex: 1;
height: 100%;
display: flex;
padding: 0 2.5rem;
min-height: 25vh;
// justify-content: center;
align-items: center;
.login-head-logo {
img {
width: 3rem;
height: 3rem;
}
margin-right: 1rem;
}
.login-head-title {
font-size: 1.6rem;
color: #007AFF;
}
}
.login-left-bg {
img {
width: 100%;
height: 100%;
}
}
}
.login-right {
flex: 5;
.login-right-inner {
height: 100vh;
display: flex;
flex-direction: column;
padding: 0 8rem;
box-sizing: border-box;
.login-subflex {
flex: 1;
}
.login-form {
.login-form-title {
line-height: 6rem;
font-size: 2.6rem;
font-weight: bold;
padding: 0 1rem;
}
.login-form-container {}
}
}
}
}
</style>
<style lang="less">
.login-page {
.ant-form .ant-form-item {
border: none;
}
}
</style>

53
src/views/statistics/index.vue

@ -255,7 +255,7 @@
// -
async getData1() {
const res = await queryPatient({param: this.queryParams1})
const { onlyRs = 0, onlyXgzl = 0, unRs = 0, xgzl = 0} = res.data
const { onlyRs = 0, onlyXgzl = 0, both = 0, neither = 0} = res.data
var series = [{
value: onlyRs,
name: '仅溶栓人数'
@ -265,12 +265,12 @@
name: '仅介入人数'
},
{
value: unRs,
name: '溶栓且介入人数'
value: both,
name: '溶栓且介入人数'
},
{
value: xgzl,
name: '溶栓且未介入人数'
value: neither,
name: '溶栓且未介入人数'
}
]
@ -333,8 +333,8 @@
var filed = ""
if(i == '仅溶栓人数') filed = "onlyRs"
else if(i == '仅介入人数') filed = "onlyXgzl"
else if(i == '溶栓且介入人数') filed = "unRs"
else if(i == '溶栓且未介入人数') filed = "xgzl"
else if(i == '溶栓且介入人数') filed = "both"
else if(i == '溶栓且未介入人数') filed = "neither"
newlist.forEach(a => {
var itemdata = {
value: a[filed],
@ -387,7 +387,7 @@
type: 'bar',
barWidth: 5,
data: newlist.map(a => ({
value: a['gailv'],
value: a['decimal'],
itemStyle: {
borderRadius: [20, 20, 0, 0]
}
@ -418,30 +418,43 @@
var myChart = echarts.init(chartDom);
const res = await queryJmrs({param: this.queryParams2})
const list = res.data
var items = ['静脉溶栓人数', '急救特征人数']
var xdata = [];
const newlist = res.data.map(a => {
var series = [];
const newlist = list.map(a => {
xdata.push(dayjs(a.time).format('YYYY-MM-DD'))
return { ...a, time: dayjs(a.time).format('YYYY-MM-DD') }
})
var series = [{
items.forEach(i => {
var item = {
type: 'line',
areaStyle: {},
data: newlist.map(a => ({
value: a['total'],
data: [],
}
var filed = ""
if(i == '静脉溶栓人数') filed = "gailv"
else if(i == '急救特征人数') filed = "total"
newlist.forEach(a => {
var itemdata = {
value: a[filed],
itemStyle: {
borderRadius: [20, 20, 0, 0]
}
}))
}];
}
item.data.push(itemdata)
})
series.push(item)
})
var option = {
title: {
text: '数据对比',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
color: ['#008660', '#6F7FF6', '#F3D37C', '#5AD0A5'],
legend: {
left: 'right'
},
@ -473,7 +486,7 @@
type: 'line',
areaStyle: {},
data: newlist.map(a => ({
value: a['bfNum'],
value: a['decimal'],
itemStyle: {
borderRadius: [20, 20, 0, 0]
}
@ -501,7 +514,7 @@
option && myChart.setOption(option);
},
// - DBT
// - DNT
async getData6() {
var chartDom = this.$refs.jmrsboxrb
var myChart = echarts.init(chartDom);
@ -640,8 +653,8 @@
data: [],
}
var filed = ""
if(i == '桥接治疗人数') filed = "bfNum"
else if(i == '非桥接治疗人数') filed = "decimal"
if(i == '桥接治疗人数') filed = "qiaojie"
else if(i == '非桥接治疗人数') filed = "falseQiaojie"
newlist.forEach(a => {
var itemdata = {
value: a[filed],

1
src/views/thrombolysis/components/throm-before0.vue

@ -171,7 +171,6 @@ export default{
await this.home.updateAidCode({
codeAndAnswerList,
}, false);
console.log(res)
this.$emit('next')
});

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

@ -137,8 +137,8 @@ export default {
if (code === 200) {
data.forEach((item) => {
// "0.48.0"
let q = item.referenceValue.split('~')[0];
let h = item.referenceValue.split('~')[1];
let q = item.referenceValue?.split('~')[0];
let h = item.referenceValue?.split('~')[1];
// item.testResult
if (item.testResult - 0 > h - 0) {
item.testResultType = 's';

12
src/views/thrombolysis/components/throm-before4.vue

@ -15,9 +15,7 @@
<div class="item-img" v-if="informed.patientSign" @click="lookSign(informed.patientSign)">
<img :src="apiUrl + informed.patientSign" alt="" />
</div>
<div class="item-img item-img-black" v-else>
签名安全区
</div>
<div class="item-img" v-else></div>
<a-button :disabled="writeAble" shape="round" class="item-btn"
@click="patientSign = !patientSign">
{{ informed.patientSign ? '重新签名' : '点击签名' }}
@ -43,9 +41,7 @@
<div class="item-img" v-if="informed.empowerSign" @click="lookSign(informed.empowerSign)">
<img :src="apiUrl + informed.empowerSign" alt="" />
</div>
<div class="item-img item-img-black" v-else>
签名安全区
</div>
<div class="item-img" style="min-width: 110px;" v-else> </div>
<a-button :disabled="writeAble" type="continue" shape="round" class="item-btn"
@click="empowerSign = !empowerSign">{{
informed.empowerSign ? '重新签名' : '点击签名'
@ -80,9 +76,7 @@
<div class="item-img" v-if="informed.doctorSign" @click="lookSign(informed.doctorSign)">
<img :src="apiUrl + informed.doctorSign" alt="" />
</div>
<div class="item-img item-img-black" v-else>
签名安全区
</div>
<div class="item-img" v-else> </div>
<a-button :disabled="writeAble" type="continue" shape="round" class="item-btn"
@click="doctorSign = !doctorSign">{{
informed.doctorSign

54
src/views/thrombolysis/components/throm-report-dnt.vue

@ -0,0 +1,54 @@
<template>
<a-modal class="doc-ct" width="85%" destroyOnClose :footer="null" v-model="visible" title="DNT时间表">
<div class="doc-ct-content">
<div v-if="dataSource.length">
<div v-for="item in dataSource">
{{item.dcmPath}}
</div>
</div>
<div class="emtpy" v-else>
<a-empty :image="emptyImage" description="未检测到影像信息" />
</div>
</div>
</a-modal>
</template>
<script>
import emptyImage from '@/assets/images/slice/empty.png'
import {operationLog} from 'api'
export default {
name: 'DocCt',
data() {
return {
emptyImage,
visible: false,
dataSource: [],
}
},
methods: {
async open({firstAidId}) {
this.visible = true
const res = await operationLog({firstAidId})
this.dataSource = res.data?.fileDtoList || []
}
}
}
</script>
<style lang="less" scoped>
.doc-ct {
.doc-ct-content {
height: calc(100vh - 68px);
overflow-y: auto;
padding: 10px;
}
}
</style>
<style lang="less">
.doc-ct {
.ant-modal-wrap .ant-modal .ant-modal-body {
padding: 0 !important;
}
}
</style>

54
src/views/thrombolysis/components/throm-report-observe.vue

@ -0,0 +1,54 @@
<template>
<a-modal class="doc-ct" width="85%" destroyOnClose :footer="null" v-model="visible" title="溶栓观察表">
<div class="doc-ct-content">
<div v-if="dataSource.length">
<div v-for="item in dataSource">
{{item.seriesTime}}
</div>
</div>
<div class="emtpy" v-else>
<a-empty :image="emptyImage" description="未检测到影像信息" />
</div>
</div>
</a-modal>
</template>
<script>
import emptyImage from '@/assets/images/slice/empty.png'
import {getCtInfoPath} from 'api'
export default {
name: 'DocCt',
data() {
return {
emptyImage,
visible: false,
dataSource: [],
}
},
methods: {
async open({firstAidId}) {
this.visible = true
const res = await getCtInfoPath({firstAidId})
this.dataSource = res.data || []
}
}
}
</script>
<style lang="less" scoped>
.doc-ct {
.doc-ct-content {
height: calc(100vh - 68px);
overflow-y: auto;
padding: 10px;
}
}
</style>
<style lang="less">
.doc-ct {
.ant-modal-wrap .ant-modal .ant-modal-body {
padding: 0 !important;
}
}
</style>

54
src/views/thrombolysis/components/throm-report-opera.vue

@ -0,0 +1,54 @@
<template>
<a-modal class="doc-ct" width="85%" destroyOnClose :footer="null" v-model="visible" title="介入手术记录">
<div class="doc-ct-content">
<div v-if="dataSource.length">
<div v-for="item in dataSource">
{{item.dcmPath}}
</div>
</div>
<div class="emtpy" v-else>
<a-empty :image="emptyImage" description="未检测到影像信息" />
</div>
</div>
</a-modal>
</template>
<script>
import emptyImage from '@/assets/images/slice/empty.png'
import {operationLog} from 'api'
export default {
name: 'DocCt',
data() {
return {
emptyImage,
visible: false,
dataSource: [],
}
},
methods: {
async open({firstAidId}) {
this.visible = true
const res = await operationLog({firstAidId})
this.dataSource = res.data?.fileDtoList || []
}
}
}
</script>
<style lang="less" scoped>
.doc-ct {
.doc-ct-content {
height: calc(100vh - 68px);
overflow-y: auto;
padding: 10px;
}
}
</style>
<style lang="less">
.doc-ct {
.ant-modal-wrap .ant-modal .ant-modal-body {
padding: 0 !important;
}
}
</style>

48
src/views/thrombolysis/components/throm-report-record.vue

@ -0,0 +1,48 @@
<template>
<a-modal class="doc-ct" width="85%" destroyOnClose :footer="null" v-model="visible" title="急诊溶栓记录">
<div class="doc-ct-content">
<div class="record-content" v-html="dataInfo"></div>
<a-result class="common-result" v-if="!dataInfo" title="暂无记录"></a-result>
</div>
</a-modal>
</template>
<script>
import emptyImage from '@/assets/images/slice/empty.png'
import {queryLog} from 'api'
export default {
name: 'DocCt',
data() {
return {
emptyImage,
visible: false,
dataInfo: '',
}
},
methods: {
async open({firstAidId}) {
this.visible = true
const res = await queryLog({firstAidId})
this.dataInfo = res.data || ''
}
}
}
</script>
<style lang="less" scoped>
.doc-ct {
.doc-ct-content {
height: calc(100vh - 68px);
overflow-y: auto;
padding: 10px;
}
}
</style>
<style lang="less">
.doc-ct {
.ant-modal-wrap .ant-modal .ant-modal-body {
padding: 0 !important;
}
}
</style>

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

@ -8,26 +8,26 @@
<div class="report-patient-info">
<div class="report-patient-avatar"><img src="@/assets/images/ys.png" alt="" /></div>
<div class="report-patient-name">
<div class="report-pname">{{patientData.patientName}}</div>
<div class="report-pname">{{patient.patientName}}</div>
<div class="reort-psan">
<span class="reort-psex">{{patientData.patientGenderString || '-'}}</span>
<span class="reort-page">{{patientData.patientAge || '-'}}</span>
<span class="reort-pnat">{{patientData.patientNation || '-'}}</span>
<span class="reort-psex">{{patient.patientGenderString || '-'}}</span>
<span class="reort-page">{{patient.patientAge || '-'}}</span>
<span class="reort-pnat">{{patient.patientNation || '-'}}</span>
</div>
</div>
</div>
<div class="report-patient-tags">
<div class="report-patient-tag">{{patientData.firstAidZlTypeString || '-'}}</div>
<div class="report-patient-tag">{{patient.firstAidZlTypeString || '-'}}</div>
<div class="report-patient-tag">发病时间</div>
</div>
<div class="report-patient-row">
<span class="report-patient-rowlabel">联系方式: </span>
<span class="report-patient-rowtext">{{patientData.patientIdCardNo || '-'}}</span>
<span class="report-patient-rowtext">{{patient.patientIdCardNo || '-'}}</span>
</div>
<div class="report-patient-row">
<span class="report-patient-rowlabel">身份证: </span>
<span
class="report-patient-rowtext">{{patientData.patientIdCardNo ? utils.maskIDCard(patientData.patientIdCardNo || '') : '-'}}</span>
class="report-patient-rowtext">{{patient.patientIdCardNo ? utils.maskIDCard(patient.patientIdCardNo || '') : '-'}}</span>
</div>
</div>
</a-card>
@ -71,7 +71,7 @@
</div>
<div class="report-treat-row2">
<span class="report-treat-rowlabel">溶栓药物及计量: </span>
<span class="report-treat-rowtext">文案文案文案文案文案文案</span>
<span class="report-treat-rowtext" style="height: 64px;">文案文案文案文案文案文案</span>
</div>
<div class="report-treat-row2">
<span class="report-treat-rowlabel">绿道状态: </span>
@ -159,10 +159,12 @@
</a-card>
</a-col>
<a-col :span="24">
<a-list item-layout="horizontal" :data-source="dataList" style="margin-top: 6px;background-color: #fff">
<a-list item-layout="horizontal" :data-source="dataList"
style="margin-top: 6px;background-color: #fff">
<a-list-item slot="renderItem" slot-scope="item, index">
<a-button slot="actions" shape="round">导出</a-button>
<a-button slot="actions" shape="round" type="primary">查看</a-button>
<a-button slot="actions" shape="round" type="primary"
@click="checkReport(item.type)">查看</a-button>
<a-list-item-meta>
<div slot="title" style="font-weight: bold; font-size: 1rem;">{{item.name}}</div>
</a-list-item-meta>
@ -176,6 +178,10 @@
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
@click="onSubmit">导出</a-button>
</div>
<throm-report-dnt ref="dnt"></throm-report-dnt>
<throm-report-record ref="record"></throm-report-record>
<throm-report-observe ref="observe"></throm-report-observe>
<throm-report-opera ref="opera"></throm-report-opera>
</div>
</template>
@ -186,28 +192,43 @@
} from 'vuex';
import {
getNextNode,
messageQuery
messageQuery,
queryAidRecord
} from 'api';
import dayjs from 'dayjs';
import duration from 'dayjs/plugin/duration';
import ThromReportDnt from './throm-report-dnt.vue';
import ThromReportRecord from './throm-report-record.vue';
import ThromReportObserve from './throm-report-observe.vue';
import ThromReportOpera from './throm-report-opera.vue';
dayjs.extend(duration);
export default {
name: "throm-report",
components: {
ThromReportDnt,
ThromReportRecord,
ThromReportObserve,
ThromReportOpera,
},
data() {
return {
currentIndex: 1,
dataList: [{
name: '急诊溶栓记录'
name: '急诊溶栓记录',
type: 'record'
},
{
name: '溶栓观察表'
name: '溶栓观察表',
type: 'observe'
},
{
name: 'DNT时间表'
name: 'DNT时间表',
type: 'dnt'
},
{
name: '介入手术记录'
name: '介入手术记录',
type: 'opera'
},
],
nodeInfo: {
@ -236,22 +257,31 @@
'RYPG-NIHSS': '',
},
request: 1,
processNodeIndex: 0
processNodeIndex: 0,
patient: {}
}
},
props: {
reportType: {
type: String,
default: "",
},
dataSource: {
type: Object,
default: () => ({})
}
},
computed: {
...mapState('patient', ['patientData', 'nextNodeData', 'writeAble']),
getPatient() {
if (!this.patientData) return;
const {
patientName,
patientGender,
patientAge
} = this.patientData;
} = this.patient;
if (!patientName) return;
return `${patientName} ${
patientGender === 0 ? '男' : patientGender === 1 ? '女' : ''
} ${patientAge || ''}`;
return `${patientName} ${ patientGender === 0 ? '男' : patientGender === 1 ? '女' : '' } ${patientAge || ''}`;
},
getPressure() {
const {
@ -282,7 +312,17 @@
},
async mounted() {
//TODU
this.init();
if (this.reportType == 'modal') {
console.log(this.dataSource)
this.patient = this.dataSource
} else {
if (!this.patientData) return;
this.patient = this.patientData
}
const {
firstAidId
} = this.patient;
firstAidId && this.init(firstAidId);
// await this.getMessageQuery();
},
methods: {
@ -329,6 +369,25 @@
name: 'Record',
});
},
checkReport(modalRef) {
console.log('modalRef', this.patient)
// const {
// sourceId,
// patientName,
// patientAge,
// patientGender,
// firstAidId,
// } = this.patient;
// this.setPatientData({
// sourceId,
// patientName,
// patientAge,
// patientGender,
// firstAidId,
// });
this.$refs[modalRef].open(this.patient)
},
//
echo(data) {
for (let k in data) {
@ -347,20 +406,23 @@
}
},
//
init() {
if (this.patientData) {
const {
recordValDict
} = this.patientData;
let data = Object.assign({}, this.patientData);
this.utils.merge(this.dataInfo, data);
if (recordValDict) {
this.echo(recordValDict);
}
}
const {
firstAidId
} = this.patientData;
async init(firstAidId) {
const res = await queryAidRecord(firstAidId)
console.log(res)
// if (this.patientData) {
// const {
// recordValDict
// } = this.patientData;
// let data = Object.assign({}, this.patientData);
// this.utils.merge(this.dataInfo, data);
// if (recordValDict) {
// this.echo(recordValDict);
// }
// }
// const {
// firstAidId
// } = this.patientData;
this.getNextNode(firstAidId);
},
async getNextNode(firstAidId) {
@ -518,6 +580,9 @@
}
.report-timeline {
height: 424px;
overflow-y: auto;
.ant-steps-vertical .ant-steps-item-content {
// min-height: 4.38rem;
width: 88%;

Loading…
Cancel
Save