Browse Source

0225

master
领悟 5 months ago
parent
commit
e13dafa443
  1. 49
      public/index.html
  2. 2
      src/App.vue
  3. 41
      src/api/index.js
  4. 10
      src/assets/less/common.less
  5. 8
      src/layouts/BasicLayout.less
  6. 17
      src/layouts/BasicLayout.vue
  7. 4
      src/views/Patient/components/patient-detail.vue
  8. 27
      src/views/document/components/ct.vue
  9. 23
      src/views/document/components/detail.vue
  10. 2
      src/views/document/components/inspect.vue
  11. 3
      src/views/document/components/report.vue
  12. 33
      src/views/document/index.vue
  13. 1001
      src/views/statistics/index - 副本.vue
  14. 577
      src/views/statistics/index.vue
  15. 11
      src/views/thrombolysis/components/throm-before.vue
  16. 81
      src/views/thrombolysis/components/throm-before0.vue
  17. 291
      src/views/thrombolysis/components/throm-before1.vue
  18. 4
      src/views/thrombolysis/components/throm-before2.vue
  19. 34
      src/views/thrombolysis/components/throm-before3.vue
  20. 12
      src/views/thrombolysis/components/throm-before4.vue
  21. 4
      src/views/thrombolysis/components/throm-ing-date.vue
  22. 10
      src/views/thrombolysis/components/throm-ing-min.vue
  23. 10
      src/views/thrombolysis/components/throm-ing-reactions.vue
  24. 41
      src/views/thrombolysis/components/throm-ing-record.vue
  25. 5
      src/views/thrombolysis/components/throm-ing-selDrug.vue
  26. 28
      src/views/thrombolysis/components/throm-ing.vue
  27. 25
      src/views/thrombolysis/components/throm-interfere-image-dcm.vue
  28. 2
      src/views/thrombolysis/components/throm-interfere-image.vue
  29. 12
      src/views/thrombolysis/components/throm-interfere-informed.vue
  30. 10
      src/views/thrombolysis/components/throm-interfere-surgical.vue
  31. 11
      src/views/thrombolysis/components/throm-interfere.vue
  32. 116
      src/views/thrombolysis/components/throm-report.vue
  33. 4
      src/views/thrombolysis/components/throm-result-baseInfo.vue
  34. 4
      src/views/thrombolysis/components/throm-result-firstInfo.vue
  35. 4
      src/views/thrombolysis/components/throm-result.vue

49
public/index.html

@ -1,30 +1,31 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>logo.jpg">
<title>绿道质控</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Expires" content="0">
</head>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>logo.jpg">
<title>绿道质控</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Expires" content="0">
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<!-- <script type="text/javascript" src="./vconsole.js"></script> -->
<script type="text/javascript" src="./uni.webview.1.5.4.js"></script>
<script>
// var vConsole = new VConsole()
</script>
</body>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript
enabled.
Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<!-- <script type="text/javascript" src="./vconsole.js"></script> -->
<script type="text/javascript" src="./uni.webview.1.5.4.js"></script>
<script>
// var vConsole = new VConsole()
</script>
</body>
</html>

2
src/App.vue

@ -145,7 +145,7 @@
firstAidId
} = this.patientData;
if (!firstAidId) return;
// this.queryMessage();
this.queryMessage();
await this.handMessageQuery();
this.request = 0;

41
src/api/index.js

@ -307,6 +307,31 @@ export const queryPatient = (params) =>
axios.post(`${proxyUrl1}/home/queryPatient`, {
...params
});
export const queryDitResult = (params) =>
axios.post(`${proxyUrl1}/home/queryDitResult`, {
...params
});
export const queryOntResult = (params) =>
axios.post(`${proxyUrl1}/home/queryOntResult`, {
...params
});
export const queryOptResult = (params) =>
axios.post(`${proxyUrl1}/home/queryOptResult`, {
...params
});
export const queryXgzlBfzResult = (params) =>
axios.post(`${proxyUrl1}/home/queryXgzlBfzResult`, {
...params
});
export const queryXgzlLv = (params) =>
axios.post(`${proxyUrl1}/home/queryXgzlLv`, {
...params
});
// 介入手术记录/总报告/DNT时间表
export const operationLog = (params) =>
axios.post(`${proxyUrl1}/interfere/operationLog`, {
@ -331,4 +356,20 @@ export const createPatient = (params) =>
export const exportRsPdf = (params) =>
axios.post(`${proxyUrl1}/admin/export/exportRsPdf`, {
...params
});
export const exportDntPdf = (params) =>
axios.post(`${proxyUrl1}/admin/export/exportDntPdf`, {
...params
});
export const exportRsgcbPdf = (params) =>
axios.post(`${proxyUrl1}/admin/export/exportRsgcbPdf`, {
...params
});
export const exportAll = (params) =>
axios.post(`${proxyUrl1}/admin/export/exportAll`, {
...params
});
export const exportJrPdf = (params) =>
axios.post(`${proxyUrl1}/admin/export/exportJrPdf`, {
...params
});

10
src/assets/less/common.less

@ -124,6 +124,16 @@
margin-bottom: 12px;
border-radius: 20px;
}
.throm-common-button {
width: 60% !important;
margin: 0 auto;
// margin-bottom: 12px;
border-radius: 20px;
.ant-btn {
margin-top: 12px;
}
}
.common-slider{
width: 100%;
display: flex;

8
src/layouts/BasicLayout.less

@ -130,6 +130,10 @@
.action{
padding: 0 .2rem;
font-weight: bold;
color: red;
display: flex;
flex-direction: column;
align-items: center;
}
}
@ -149,8 +153,8 @@
position: relative;
.global-layout-content{
height: calc(100vh - 66px);
// overflow-y: auto;
height: calc(100vh - 56px);
overflow-y: hidden;
padding: 10px;
position: relative;
}

17
src/layouts/BasicLayout.vue

@ -48,7 +48,7 @@
)
</div>
<div class="patient-action">
<div class="action" @click="showDrawer"><a-icon type="logout" /></div>
<div class="action" @click="showDrawer"><a-icon type="minus-circle" /></div>
<!-- <div class="action"><a-icon type="pause-circle" /></div> -->
</div>
</template>
@ -59,13 +59,16 @@
<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 v-if="termVisible">
<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>
</div>
</a-drawer>
</div>

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

@ -236,7 +236,7 @@
msg
} = res;
if (code === 200) {
this.home.queryAid(data.firstAidId, false);
// this.setPatientData({ ...this.patientDataCur, firstAidId: data.firstAidId })
this.authEdit = false
@ -410,6 +410,8 @@
<style lang="less" scoped>
.patient-detail {
display: flex;
height: calc(100vh - 200px);
overflow-y: auto;
.patient-dlist {
flex: 1;

27
src/views/document/components/ct.vue

@ -1,21 +1,25 @@
<template>
<a-modal class="doc-ct" width="85%" destroyOnClose :footer="null" v-model="visible" title="CT影像">
<div class="doc-ct-content">
<div v-if="dataSource.length">
<!-- <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> -->
<throm-interfere-image-dcm :firstAidId="firstAidId"></throm-interfere-image-dcm>
</div>
</a-modal>
</template>
<script>
import emptyImage from '@/assets/images/slice/empty.png'
import {getCtInfoPath} from 'api'
import ThromInterfereImageDcm from '@/views/thrombolysis/components/throm-interfere-image-dcm.vue'
import {
getCtInfoPath
} from 'api'
export default {
name: 'DocCt',
data() {
@ -23,13 +27,22 @@
emptyImage,
visible: false,
dataSource: [],
firstAidId: '',
}
},
components: {
ThromInterfereImageDcm
},
methods: {
async open({firstAidId}) {
async open({
firstAidId
}) {
this.firstAidId = firstAidId
this.visible = true
const res = await getCtInfoPath({firstAidId})
this.dataSource = res.data?.fileDtoList || []
// const res = await getCtInfoPath({
// firstAidId
// })
// this.dataSource = res.data?.fileDtoList || []
}
}
}
@ -38,7 +51,7 @@
<style lang="less" scoped>
.doc-ct {
.doc-ct-content {
height: calc(100vh - 68px);
height: calc(100vh - 100px);
overflow-y: auto;
padding: 10px;
}

23
src/views/document/components/detail.vue

@ -1,8 +1,8 @@
<template>
<a-modal class="" width="80%" :maskClosable="false" destroyOnClose v-model="visible" :title="title" :footer="null"
<a-modal class="doc-detail" width="85%" :maskClosable="false" destroyOnClose v-model="visible" :title="title" :footer="null"
@cancel="close">
<a-card :tab-list="tabList" :active-tab-key="activeKey" @tabChange="key => onTabChange(key)">
<div style="height: calc(100vh - 25vw); width: 100%; overflow-y: auto;">
<div class="doc-detail-content" >
<throm-result-baseInfo v-if="activeKey == 'base'" :patientId="patientId"></throm-result-baseInfo>
<throm-result-firstInfo v-else-if="activeKey == 'first'" :patientId="patientId"></throm-result-firstInfo>
</div>
@ -60,5 +60,22 @@
}
</script>
<style>
<style lang="less" scoped>
.doc-detail {
.doc-detail-content {
width: 100%;
height: calc(100vh - 205px);
overflow-x: hidden;
overflow-y: auto;
}
}
</style>
<style lang="less">
.doc-detail{
.ant-modal-wrap .ant-modal .ant-modal-body{
padding: 0 !important;
}
}
</style>

2
src/views/document/components/inspect.vue

@ -108,7 +108,7 @@
<style lang="less" scoped>
.doc-inspect {
.doc-inspect-content {
height: calc(100vh - 68px);
height: calc(100vh - 100px);
overflow-y: auto;
padding: 10px;
}

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

@ -40,7 +40,8 @@
<style lang="less" scoped>
.doc-report {
.doc-report-content {
height: calc(100vh - 68px);
height: calc(100vh - 100px);
overflow-x: hidden;
overflow-y: auto;
padding: 10px;
}

33
src/views/document/index.vue

@ -1,18 +1,11 @@
<template>
<div class="document">
<!-- <div class="doc-search">
<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> -->
<div class="doc-list">
<div class="doc-list-action">
<div class="doc-list-title">
全部患者
</div>
<div class="doc-list-btns">
<!-- <a-button type="primary" icon="plus" @click="goCreate">新建患者</a-button> -->
<a-input placeholder="请输入患者姓名 (支持拼音、首拼、关键字)" style="width: 34vw" size="large" v-model="searchVal"
@pressEnter="onSearch(1)" allowClear>
<a-icon slot="prefix" type="search" @click="onSearch(1)" />
@ -20,7 +13,7 @@
</div>
</div>
<div class="doc-list-table">
<a-table :columns="columns" :data-source="dataSource" :scroll="{ y: 720, x: 1000 }"
<a-table :columns="columns" :data-source="dataSource" :scroll="{ y: 700, x: 800 }"
:locale="{ emptyText: '暂无数据'}" rowKey="firstAidId" size="middle" :pagination="pagination">
<template slot="action" slot-scope="text, row">
<a-button type="link" @click="editReport(row, 'patientDetail')">详情</a-button>
@ -79,8 +72,14 @@
pageNum: 1,
pageSize: 10,
pagination: {
onChange: (page) => {
onChange: (page, pageSize) => {
this.pageNum = page;
this.pageSize = pageSize
this.getData();
},
onShowSizeChange: (current, size) => {
this.pageNum = current;
this.pageSize = size
this.getData();
},
pageSize: 10,
@ -93,7 +92,7 @@
},
columns: [{
title: '姓名',
width: 100,
width: 120,
dataIndex: 'patientName',
key: 'name',
fixed: 'left'
@ -112,7 +111,7 @@
title: '身份证号',
dataIndex: 'patientIdCardNo',
key: '1',
width: 238
width: 248
},
{
title: '联系方式',
@ -216,7 +215,7 @@
{
title: '备注',
dataIndex: 'remark',
width: 160,
width: 500,
key: '17'
},
{
@ -345,9 +344,16 @@
<style lang="less" scoped>
.document {
height: 100%;
overflow-y: auto;
.doc-search {}
.doc-list {
height: 100%;
display: flex;
flex-direction: column;
.doc-list-action {
display: flex;
justify-content: space-between;
@ -365,8 +371,11 @@
}
.doc-list-table {
flex: 1;
overflow-y: auto;
background-color: #fff;
padding: 10px;
}
}

1001
src/views/statistics/index - 副本.vue

File diff suppressed because it is too large

577
src/views/statistics/index.vue

@ -11,7 +11,7 @@
<a-radio-group v-model="queryParams1.timeType" @change="typeChange($event, 'queryParams1')">
<a-radio-button value="0"></a-radio-button>
<a-radio-button value="1"></a-radio-button>
<a-radio-button value="2"></a-radio-button>
<!-- <a-radio-button value="2"></a-radio-button> -->
<a-radio-button value="3"></a-radio-button>
</a-radio-group>
<a-range-picker format="YYYY-MM-DD" style="width: 280px;" :placeholder="['开始日期','结束日期']"
@ -29,6 +29,44 @@
</a-row>
</div>
</div>
<div class="sta-row">
<div class="sta-row-head">
<div class="sta-row-title">
<img src="@/assets/images/slice/title-line.png" alt="" />
<span class="sta-row-text">指标</span>
</div>
<div class="sta-row-filter">
<a-radio-group v-model="queryParams4.timeType" @change="typeChange($event, 'queryParams4')">
<a-radio-button value="0"></a-radio-button>
<a-radio-button value="1"></a-radio-button>
<!-- <a-radio-button value="2"></a-radio-button> -->
<a-radio-button value="3"></a-radio-button>
</a-radio-group>
<a-range-picker format="YYYY-MM-DD" style="width: 280px;" :placeholder="['开始日期','结束日期']"
separator="至" @change="dateChange($event, 'queryParams4')" />
</div>
</div>
<div class="sta-row-echart">
<a-row :gutter="[16,16]">
<a-col :span="12">
<div class="echarts-box" ref="zbboxlt"></div>
</a-col>
<a-col :span="12">
<div class="echarts-box" ref="zbboxrt"></div>
</a-col>
<a-col :span="12">
<div class="echarts-box" ref="zbboxlb"></div>
</a-col>
<a-col :span="12">
<div class="echarts-box" ref="zbboxrb"></div>
</a-col>
<a-col :span="12">
<div class="echarts-box" ref="zbboxlbb"></div>
</a-col>
</a-row>
</div>
</div>
<div class="sta-row">
<div class="sta-row-head">
<div class="sta-row-title">
@ -39,7 +77,7 @@
<a-radio-group v-model="queryParams2.timeType" @change="typeChange($event, 'queryParams2')">
<a-radio-button value="0"></a-radio-button>
<a-radio-button value="1"></a-radio-button>
<a-radio-button value="2"></a-radio-button>
<!-- <a-radio-button value="2"></a-radio-button> -->
<a-radio-button value="3"></a-radio-button>
</a-radio-group>
<a-range-picker format="YYYY-MM-DD" style="width: 280px;" :placeholder="['开始日期','结束日期']"
@ -51,15 +89,15 @@
<a-col :span="12">
<div class="echarts-box" ref="jmrsboxlt"></div>
</a-col>
<a-col :span="12">
<!-- <a-col :span="12">
<div class="echarts-box" ref="jmrsboxrt"></div>
</a-col>
</a-col> -->
<a-col :span="12">
<div class="echarts-box" ref="jmrsboxlb"></div>
</a-col>
<a-col :span="12">
<!-- <a-col :span="12">
<div class="echarts-box" ref="jmrsboxrb"></div>
</a-col>
</a-col> -->
</a-row>
</div>
</div>
@ -73,7 +111,7 @@
<a-radio-group v-model="queryParams3.timeType" @change="typeChange($event, 'queryParams3')">
<a-radio-button value="0"></a-radio-button>
<a-radio-button value="1"></a-radio-button>
<a-radio-button value="2"></a-radio-button>
<!-- <a-radio-button value="2"></a-radio-button> -->
<a-radio-button value="3"></a-radio-button>
</a-radio-group>
<a-range-picker format="YYYY-MM-DD" style="width: 280px;" :placeholder="['开始日期','结束日期']"
@ -106,13 +144,17 @@
queryRptResult,
queryDptResult,
selectXgzl,
// queryDptResult,
queryDitResult,
queryOntResult,
queryOptResult,
querySichResult,
queryDntResult,
queryJmrs,
queryJmrsResult,
queryByDatePatient,
queryPatient,
queryXgzlBfzResult,
queryXgzlLv,
} from 'api';
import * as echarts from 'echarts'
import * as dayjs from 'dayjs'
@ -121,88 +163,35 @@
data() {
return {
queryParams1: {
"timeType": "0", // 0: 1: 2: 3:
"timeType": "1", // 0: 1: 2: 3:
"startTime": "2024-10-01 00:00:00", //
"endTime": "2025-01-01 00:00:00" //
},
queryParams2: {
"timeType": "0", // 0: 1: 2: 3:
"timeType": "1", // 0: 1: 2: 3:
"startTime": "2024-10-01 00:00:00", //
"endTime": "2025-01-01 00:00:00" //
},
queryParams3: {
"timeType": "0", // 0: 1: 2: 3:
"timeType": "1", // 0: 1: 2: 3:
"startTime": "2024-10-01 00:00:00", //
"endTime": "2025-01-01 00:00:00" //
},
queryParams4: {
"timeType": "1", // 0: 1: 2: 3:
"startTime": "2024-10-01 00:00:00", //
"endTime": "2025-01-01 00:00:00" //
}
}
},
mounted() {
// queryRptResult({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
// queryDptResult({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
// selectXgzl({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
// querySichResult({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
// queryDntResult({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
// queryJmrs({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
// queryJmrsResult({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
// queryByDatePatient({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
// queryPatient({
// param: {
// "timeType":"0", // 0: 1: 2: 3:
// "startTime":"2024-10-01 00:00:00", //
// "endTime":"2025-01-01 00:00:00" //
// }
// })
this.init()
const _this = this;
setTimeout(() => {
_this.$nextTick(() => {
_this.init()
})
}, 100)
},
methods: {
init(filed) {
@ -223,6 +212,13 @@
this.getData9()
this.getData10()
break;
case "queryParams3":
this.getData11()
this.getData12()
this.getData13()
this.getData14()
this.getData15()
break;
default:
this.getData1()
this.getData2()
@ -234,6 +230,11 @@
this.getData8()
this.getData9()
this.getData10()
this.getData11()
this.getData12()
this.getData13()
this.getData14()
this.getData15()
break;
}
@ -281,7 +282,7 @@
var myChart = echarts.init(chartDom);
var option = {
title: {
text: '病历统计',
text: '患者总数',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
@ -388,7 +389,7 @@
var option = {
title: {
text: '数据对比',
text: '患者统计',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
@ -462,6 +463,7 @@
},
// -
async getData4() {
return
var chartDom = this.$refs.jmrsboxrt
var myChart = echarts.init(chartDom);
@ -527,7 +529,7 @@
option && myChart.setOption(option);
},
// - sICH
// - sICH
async getData5() {
var chartDom = this.$refs.jmrsboxlb
var myChart = echarts.init(chartDom);
@ -561,7 +563,7 @@
var option = {
title: {
text: 'slCH发生率',
text: '静脉溶栓并发症发生率',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
@ -582,6 +584,7 @@
},
// - DNT
async getData6() {
return
var chartDom = this.$refs.jmrsboxrb
var myChart = echarts.init(chartDom);
@ -650,7 +653,8 @@
async getData7() {
var chartDom = this.$refs.xgnboxlt
var myChart = echarts.init(chartDom);
const res = await querySichResult({
// const res = await querySichResult({
const res = await queryXgzlLv({
param: this.queryParams3
})
@ -667,7 +671,7 @@
type: 'line',
areaStyle: {},
data: newlist.map(a => ({
value: a['bfNum'],
value: a['total'],
itemStyle: {
borderRadius: [20, 20, 0, 0]
},
@ -695,7 +699,7 @@
var option = {
title: {
text: '血管内治疗率',
text: '血管内治疗再通率',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
@ -716,7 +720,7 @@
option && myChart.setOption(option);
},
// -
async getData8() {
async _getData8() {
var chartDom = this.$refs.xgnboxrt
var myChart = echarts.init(chartDom);
@ -780,6 +784,61 @@
option && myChart.setOption(option);
},
// - (2)
async getData8() {
var chartDom = this.$refs.xgnboxrt;
chartDom.style.width = '100%'; //
var myChart = echarts.init(chartDom);
const res = await queryXgzlBfzResult({
param: this.queryParams3
})
var xdata = [];
const newlist = res.data.map(a => {
xdata.push(dayjs(a.time).format('YYYY-MM-DD'))
return {
...a,
time: dayjs(a.time).format('YYYY-MM-DD')
}
})
var series = [{
type: 'line',
areaStyle: {},
data: newlist.map(a => ({
value: a['bfNum'],
itemStyle: {
borderRadius: [20, 20, 0, 0]
},
label: {
show: true,
position: 'top'
},
}))
}];
var option = {
title: {
text: '血管内治疗并发症发生率',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
legend: {
left: 'right'
},
xAxis: [{
type: 'category',
boundaryGap: false,
data: xdata
}],
yAxis: [{
type: 'value'
}],
series: series
};
option && myChart.setOption(option);
},
// - DPT
async getData9() {
var chartDom = this.$refs.xgnboxlb
@ -914,12 +973,350 @@
option && myChart.setOption(option);
},
// - DNT
async getData11() {
var chartDom = this.$refs.zbboxlt
var myChart = echarts.init(chartDom);
const res = await queryDntResult({
param: this.queryParams4
})
var items = ['≤45min', '≤60min', '>60min']
var xdata = [];
var series = [];
const newlist = res.data.map(a => {
xdata.push(dayjs(a.time).format('YYYY-MM-DD'))
return {
...a,
time: dayjs(a.time).format('YYYY-MM-DD')
}
})
items.forEach(i => {
var item = {
name: i,
type: 'bar',
barWidth: 5,
data: [],
}
var filed = ""
if (i == '≤45min') filed = "dy45"
else if (i == '≤60min') filed = "dy60"
else if (i == '>60min') filed = "other"
newlist.forEach(a => {
var itemdata = {
value: a[filed],
itemStyle: {
borderRadius: [20, 20, 0, 0]
},
label: {
show: true,
position: 'top'
},
}
item.data.push(itemdata)
})
series.push(item)
})
var option = {
title: {
text: 'DNT分布',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
legend: {
left: 'right'
},
xAxis: [{
type: 'category',
boundaryGap: false,
data: xdata
}],
yAxis: [{
type: 'value'
}],
series: series
};
option && myChart.setOption(option);
},
// - DPT
async getData12() {
var chartDom = this.$refs.zbboxrt
var myChart = echarts.init(chartDom);
const res = await queryDptResult({
param: this.queryParams4
})
var items = ['≤45min', '≤60min', '>60min']
var xdata = [];
var series = [];
const newlist = res.data.map(a => {
xdata.push(dayjs(a.time).format('YYYY-MM-DD'))
return {
...a,
time: dayjs(a.time).format('YYYY-MM-DD')
}
})
items.forEach(i => {
var item = {
name: i,
type: 'bar',
barWidth: 5,
data: [],
}
var filed = ""
if (i == '≤45min') filed = "dy45"
else if (i == '≤60min') filed = "dy60"
else if (i == '>60min') filed = "other"
newlist.forEach(a => {
var itemdata = {
value: a[filed],
itemStyle: {
borderRadius: [20, 20, 0, 0]
},
label: {
show: true,
position: 'top'
},
}
item.data.push(itemdata)
})
series.push(item)
})
var option = {
title: {
text: 'DPT分布',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
legend: {
left: 'right'
},
xAxis: [{
type: 'category',
data: xdata
}],
yAxis: [{
type: 'value'
}],
series: series
};
option && myChart.setOption(option);
},
// - DIT
async getData13() {
var chartDom = this.$refs.zbboxlb
var myChart = echarts.init(chartDom);
const res = await queryDitResult({
param: this.queryParams4
})
var items = ['≤45min', '≤60min', '>60min']
var xdata = [];
var series = [];
const newlist = res.data.map(a => {
xdata.push(dayjs(a.time).format('YYYY-MM-DD'))
return {
...a,
time: dayjs(a.time).format('YYYY-MM-DD')
}
})
items.forEach(i => {
var item = {
name: i,
type: 'bar',
barWidth: 5,
data: [],
}
var filed = ""
if (i == '≤45min') filed = "dy45"
else if (i == '≤60min') filed = "dy60"
else if (i == '>60min') filed = "other"
newlist.forEach(a => {
var itemdata = {
value: a[filed],
itemStyle: {
borderRadius: [20, 20, 0, 0]
},
label: {
show: true,
position: 'top'
},
}
item.data.push(itemdata)
})
series.push(item)
})
var option = {
title: {
text: 'DIT分布',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
legend: {
left: 'right'
},
xAxis: [{
type: 'category',
data: xdata
}],
yAxis: [{
type: 'value'
}],
series: series
};
option && myChart.setOption(option);
},
// - ONT
async getData14() {
var chartDom = this.$refs.zbboxrb
var myChart = echarts.init(chartDom);
const res = await queryOntResult({
param: this.queryParams4
})
var items = ['≤45min', '≤60min', '>60min']
var xdata = [];
var series = [];
const newlist = res.data.map(a => {
xdata.push(dayjs(a.time).format('YYYY-MM-DD'))
return {
...a,
time: dayjs(a.time).format('YYYY-MM-DD')
}
})
items.forEach(i => {
var item = {
name: i,
type: 'bar',
barWidth: 5,
data: [],
}
var filed = ""
if (i == '≤45min') filed = "dy45"
else if (i == '≤60min') filed = "dy60"
else if (i == '>60min') filed = "other"
newlist.forEach(a => {
var itemdata = {
value: a[filed],
itemStyle: {
borderRadius: [20, 20, 0, 0]
},
label: {
show: true,
position: 'top'
},
}
item.data.push(itemdata)
})
series.push(item)
})
var option = {
title: {
text: 'ONT分布',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
legend: {
left: 'right'
},
xAxis: [{
type: 'category',
data: xdata
}],
yAxis: [{
type: 'value'
}],
series: series
};
option && myChart.setOption(option);
},
// - OPT
async getData15() {
var chartDom = this.$refs.zbboxlbb
var myChart = echarts.init(chartDom);
const res = await queryOptResult({
param: this.queryParams4
})
var items = ['≤45min', '≤60min', '>60min']
var xdata = [];
var series = [];
const newlist = res.data.map(a => {
xdata.push(dayjs(a.time).format('YYYY-MM-DD'))
return {
...a,
time: dayjs(a.time).format('YYYY-MM-DD')
}
})
items.forEach(i => {
var item = {
name: i,
type: 'bar',
barWidth: 5,
data: [],
}
var filed = ""
if (i == '≤45min') filed = "dy45"
else if (i == '≤60min') filed = "dy60"
else if (i == '>60min') filed = "other"
newlist.forEach(a => {
var itemdata = {
value: a[filed],
itemStyle: {
borderRadius: [20, 20, 0, 0]
},
label: {
show: true,
position: 'top'
},
}
item.data.push(itemdata)
})
series.push(item)
})
var option = {
title: {
text: 'OPT分布',
left: 'left'
},
color: ['#6F7FF6', '#F3D37C', '#5AD0A5', '#008660'],
legend: {
left: 'right'
},
xAxis: [{
type: 'category',
boundaryGap: false,
data: xdata
}],
yAxis: [{
type: 'value'
}],
series: series
};
option && myChart.setOption(option);
},
}
}
</script>
<style lang="less" scoped>
.statistics {
height: 100%;
overflow-y: auto;
// padding: 10px;
.statistics-container {
@ -960,8 +1357,18 @@
}
}
.sta-row-echart {
.ant-row {
.ant-col {
// width: 100%;
// height: 500px;
}
}
}
.echarts-box {
height: 420px;
width: 100%;
height: 350px;
background-color: #ffffff;
border-radius: 10px;
padding: 10px;

11
src/views/thrombolysis/components/throm-before.vue

@ -63,7 +63,16 @@
background-color: #fff;
.ant-steps-vertical .ant-steps-item-content {
min-height: 6.8rem;
// min-height: 6.8rem;
}
.ant-steps {
height: 100%;
padding-bottom: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.ant-steps-item-title {

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

@ -1,52 +1,60 @@
<template>
<div class="throm-before0">
<a-form
class="patient-form medical-form"
:form="form"
layout="vertical"
>
<a-form-item v-for="(k,v) in MEDICAL_CODE" :key="v" :label="k.text" v-if="computeShow(v, codeForm)" class="borderNone">
<a-radio-group :disabled="writeAble" v-if="k.type==='radio'" v-decorator="[v,{ initialValue: k.default },]" button-style="solid" @change="changeRadio($event.target.value, v)">
<a-form class="patient-form medical-form" :form="form" layout="vertical">
<a-form-item v-for="(k,v) in MEDICAL_CODE" :key="v" :label="k.text" v-if="computeShow(v, codeForm)"
class="borderNone">
<a-radio-group :disabled="writeAble" v-if="k.type==='radio'"
v-decorator="[v,{ initialValue: k.default },]" button-style="solid"
@change="changeRadio($event.target.value, v)">
<a-radio-button v-for="(item,index) in k.range" :key="item" :value="item">
{{item}}
</a-radio-button>
</a-radio-group>
<a-input :disabled="writeAble" style="width: 80%;" v-if="k.type==='datetime'" readOnly @click="selectOption(v)" v-decorator="[v,{ initialValue: k.default }]"></a-input>
<a-input-number :disabled="writeAble" style="width: 80%;" :type="k.inputType" v-if="k.type === 'input'" v-decorator="[ v]"/>
<a-input :disabled="writeAble" style="width: 80%;" v-if="k.type==='datetime'" readOnly
@click="selectOption(v)" v-decorator="[v,{ initialValue: k.default }]"></a-input>
<a-input-number :disabled="writeAble" style="width: 80%;" :type="k.inputType" v-if="k.type === 'input'"
v-decorator="[ v]" />
</a-form-item>
<a-form-item v-for="(k,v) in HISTORY_CODE" :key="v" :label="k.text" v-if="computeShow(v, codeForm)" class="borderNone">
<a-input :disabled="writeAble" style="width: 80%;" v-if="k.type==='input'" v-decorator="[v, { initialValue: k.default },]"></a-input>
<a-radio-group :disabled="writeAble" v-if="k.type==='radio'" v-decorator="[v,]" button-style="solid" @change="changeRadio($event.target.value, v)">
<a-form-item v-for="(k,v) in HISTORY_CODE" :key="v" :label="k.text" v-if="computeShow(v, codeForm)"
class="borderNone">
<a-input :disabled="writeAble" style="width: 80%;" v-if="k.type==='input'"
v-decorator="[v, { initialValue: k.default },]"></a-input>
<a-radio-group :disabled="writeAble" v-if="k.type==='radio'" v-decorator="[v,]" button-style="solid"
@change="changeRadio($event.target.value, v)">
<a-radio-button :disabled="writeAble" v-for="(item,index) in k.range" :key="item" :value="item">
{{item}}
</a-radio-button>
</a-radio-group>
<a-checkbox-group :disabled="writeAble" class="solid" v-if="k.type === 'checkbox'" @change="changeRadio($event, v)" :options="k.range" v-decorator="[v,{ initialValue: codeForm[k] },]" />
<a-input :disabled="writeAble" style="width: 80%;" v-if="k.type==='datetime'" readOnly @click="selectOption(v)" v-decorator="[v,{ initialValue: codeForm[k] },]"></a-input>
<a-checkbox-group :disabled="writeAble" class="solid" v-if="k.type === 'checkbox'"
@change="changeRadio($event, v)" :options="k.range"
v-decorator="[v,{ initialValue: codeForm[k] },]" />
<a-input :disabled="writeAble" style="width: 80%;" v-if="k.type==='datetime'" readOnly
@click="selectOption(v)" v-decorator="[v,{ initialValue: codeForm[k] },]"></a-input>
</a-form-item>
</a-form>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" block type="primary" @click="onSubmit">下一步</a-button>
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" block type="primary" @click="onSubmit">下一步</a-button>
</div>
<div class="common-picker">
<van-datetime-picker
v-if="pickerVisable"
v-model="currentDate"
:formatter="formatter"
@cancel="pickerVisable = false"
@confirm="onConfirm"
/>
<van-datetime-picker v-if="pickerVisable" v-model="currentDate" :formatter="formatter"
@cancel="pickerVisable = false" @confirm="onConfirm" />
</div>
</div>
</template>
<script>
import { mapMutations, mapState } from 'vuex';
import { MEDICAL_CODE, HISTORY_CODE } from '@/config/code.js';
export default{
name: "ThromBefore0",
import {
mapMutations,
mapState
} from 'vuex';
import {
MEDICAL_CODE,
HISTORY_CODE
} from '@/config/code.js';
export default {
name: "ThromBefore0",
data() {
return{
return {
currentDate: new Date(),
pickerVisable: false,
MEDICAL_CODE,
@ -80,7 +88,9 @@ export default{
},
mounted() {
console.log('patientData', this.patientData)
const { recordValDict } = this.patientData;
const {
recordValDict
} = this.patientData;
if (recordValDict) {
this.$nextTick(() => {
this.echo(recordValDict);
@ -92,7 +102,9 @@ export default{
echo(data) {
for (let k in data) {
if (data[k]) {
const { answer } = data[k][0];
const {
answer
} = data[k][0];
for (let j in this.codeForm) {
if (k === j) {
this.codeForm[k] = answer.toString();
@ -174,7 +186,7 @@ export default{
codeAndAnswerList,
}, false);
this.$emit('next')
});
},
},
@ -182,10 +194,11 @@ export default{
</script>
<style lang="less" scoped>
.throm-before0{
.throm-before0 {
// padding: 1rem;
}
.ant-input-number-input-wrap{
font-size:1.2rem;
.ant-input-number-input-wrap {
font-size: 1.2rem;
}
</style>

291
src/views/thrombolysis/components/throm-before1.vue

@ -1,7 +1,7 @@
<template>
<div class="throm-befor1">
<a-form class="medical-form" :form="form" layout="vertical">
<a-form-item class="jmrs-form-item pt" v-for="(k, v) in recordDict" :key="v" >
<a-form class="medical-form" :form="form" layout="vertical">
<a-form-item class="jmrs-form-item pt" v-for="(k, v) in recordDict" :key="v">
<div class="jmrs-form-item-con" :class="k.type">
<div class="ant-form-item-label">
<label :for="`${v}`">
@ -15,62 +15,25 @@
{{ `${k}` }}
</div>
</template>
<a-icon
v-if="k.labelList"
class="item-icon"
type="question-circle"
/>
<a-icon v-if="k.labelList" class="item-icon" type="question-circle" />
</a-tooltip>
</label>
</div>
<div class="">
<!-- slider -->
<div class="common-slider" v-if="k.type === 'slider'">
<van-stepper
:disabled="writeAble"
:integer="true"
v-model="k.value"
step="10"
class="ten"
theme="round"
/>
<van-stepper
:disabled="writeAble"
:integer="true"
v-model="k.value"
step="5"
class="five"
theme="round"
/>
<van-stepper
:disabled="writeAble"
:integer="true"
v-model="k.value"
step="1"
class="one"
theme="round"
/>
<van-slider
:disabled="writeAble"
class="common-slider-slider"
:min="0"
:max="300"
step="10"
v-model="k.value"
>
<van-stepper :disabled="writeAble" :integer="true" v-model="k.value" step="10" class="ten"
theme="round" />
<van-stepper :disabled="writeAble" :integer="true" v-model="k.value" step="5" class="five"
theme="round" />
<van-stepper :disabled="writeAble" :integer="true" v-model="k.value" step="1" class="one"
theme="round" />
<van-slider :disabled="writeAble" class="common-slider-slider" :min="0" :max="300" step="10"
v-model="k.value">
<template #button>
<a-input-number
:disabled="writeAble"
type="number"
id="inputNumber"
v-model="k.value"
:min="0"
:max="300"
/>
<a-icon
class="slider-icon"
type="caret-down"
/>
<a-input-number :disabled="writeAble" type="number" id="inputNumber"
v-model="k.value" :min="0" :max="300" />
<a-icon class="slider-icon" type="caret-down" />
<div class="inner-circle"></div>
</template>
</van-slider>
@ -78,20 +41,10 @@
<!-- radio
v-decorator="[v, { initialValue: k.default }]"-->
<div class="mrsitem">
<a-radio-group
:disabled="writeAble"
size="large"
v-if="k.type === 'radio'"
v-model="k.value"
button-style="solid"
@change="changeRadio($event, v)"
>
<a-radio-button
:disabled="writeAble"
v-for="(item, index) in k.range"
:key="item"
:value="item"
>
<a-radio-group :disabled="writeAble" size="large" v-if="k.type === 'radio'"
v-model="k.value" button-style="solid" @change="changeRadio($event, v)">
<a-radio-button :disabled="writeAble" v-for="(item, index) in k.range" :key="item"
:value="item">
{{ item }}
</a-radio-button>
</a-radio-group>
@ -101,19 +54,10 @@
<div class="item-name">
<span class="item-info">得分</span>
</div>
<a-input-number
:type="k.inputType"
:min="0"
:max="100"
style="width: 20%; margin-left: 20px"
v-decorator="[v]"
/>
<a-input-number :type="k.inputType" :min="0" :max="100"
style="width: 20%; margin-left: 20px" v-decorator="[v]" />
</div>
<div
class="niss-list-item"
v-for="(item, index) in k.range"
:key="item.text"
>
<div class="niss-list-item" v-for="(item, index) in k.range" :key="item.text">
<div class="item-name">
<span class="item-info">{{
item.text
@ -122,47 +66,23 @@
<template slot="title">
{{ item.description }}
</template>
<a-icon
v-if="item.description"
class="item-icon"
type="question-circle"
/>
<a-icon v-if="item.description" class="item-icon" type="question-circle" />
</a-tooltip>
</div>
<a-popover
v-model="item.visible"
placement="bottom"
>
<a-popover v-model="item.visible" placement="bottom">
<template slot="content" v-if="item.range">
<a-radio-group
:disabled="writeAble"
v-model="nissValue"
button-style="solid"
@change="changeRangeRadio(item, v)"
>
<a-radio-button
v-for="(
<a-radio-group :disabled="writeAble" v-model="nissValue" button-style="solid"
@change="changeRangeRadio(item, v)">
<a-radio-button v-for="(
val, index
) in item.range"
:key="val.value"
:value="val.value"
@click="item.visible = false"
>
) in item.range" :key="val.value" :value="val.value" @click="item.visible = false">
{{ val.value }}
</a-radio-button>
</a-radio-group>
</template>
<a-input-number
:disabled="writeAble"
ref="inputNumber"
class="noControls"
@focus="focusInput(index)"
@click="changeInput($event, item)"
style="width: 20%; margin-left: 20px"
v-model="item.value"
:min="0"
:max="10"
/>
<a-input-number :disabled="writeAble" ref="inputNumber" class="noControls"
@focus="focusInput(index)" @click="changeInput($event, item)"
style="width: 20%; margin-left: 20px" v-model="item.value" :min="0" :max="10" />
</a-popover>
</div>
</div>
@ -170,14 +90,17 @@
</div>
</a-form-item>
</a-form>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large" @click="onSubmit">下一步</a-button>
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" block type="primary" size="large" @click="onSubmit">下一步</a-button>
</div>
</div>
</template>
<script>
import { mapMutations, mapState } from 'vuex';
import {
mapMutations,
mapState
} from 'vuex';
import {
EMERGENCY_CODE,
EMERGENCY_Q_CODE,
@ -246,16 +169,21 @@
},
mounted() {
console.log(this.timerData)
const { code } = this.timerData;
const {
code
} = this.timerData;
if (code) {
this.recordDict = this.dataForm[`${code}`];
}else{
} else {
this.recordDict = EMERGENCY_CODE;
}
const { recordValDict } = this.patientData;
const {
recordValDict
} = this.patientData;
if (recordValDict) {
this.$nextTick(() => {
// console.log('recordValDict', recordValDict)
this.echo(recordValDict);
});
}
@ -263,13 +191,18 @@
methods: {
...mapMutations('patient', ['setPatientData']),
echo(data) {
const { code } = this.timerData;
const wangbadan = code
? this.codeFormData[`${code}`]
: this.codeForm;
const {
code
} = this.timerData;
// console.log('code', code)
const wangbadan = code ?
this.codeFormData[`${code}`] :
this.codeForm;
for (let k in wangbadan) {
if (data[k]) {
const { answer } = data[k][0];
const {
answer
} = data[k][0];
this.form.getFieldDecorator([`${k}`], {
preserve: true, //便使
});
@ -277,9 +210,12 @@
[`${k}`]: answer.toString(),
});
let value = this.recordDict[k];
if (value && value.value) {
if (value && value.value && k !== 'RYPG-MRS') {
value.value = Number(answer.toString());
} else if (value && value.value) {
value.value = answer.toString();
}
}
}
},
@ -322,9 +258,13 @@
e.preventDefault();
this.form.validateFields(async (err, values) => {
// if (err) return
const { firstAidId } = this.patientData;
const {
firstAidId
} = this.patientData;
let codeAndAnswerList = [];
const { recordDict } = this;
const {
recordDict
} = this;
const codes = [
// 'RYPG-MRS',
'RYPG-NIHSS',
@ -384,7 +324,7 @@
this.home.updateAidCode({
codeAndAnswerList,
}, false);
this.$emit('next')
});
},
@ -405,66 +345,67 @@
flex: 1;
display: flex;
flex-direction: column;
// .noControls {
// /deep/ .ant-input-number-handler-wrap {
// display: none;
// }
// }
// .patient-form {
// flex: 1;
// overflow-y: auto;
// .pt {
// padding-top: 36px;
// }
// .content-left {
// width: 30%;
// label {
// display: flex;
// align-items: center;
// }
// }
// .content-right {
// flex: 1;
// }
// }
// .xy-wrapper {
// display: flex;
// justify-content: space-between;
// align-items: center;
// padding-bottom: 20px;
// .xy-label {
// font-size: 26px;
// font-family: Source Han Sans CN, Source Han Sans CN-Medium;
// font-weight: 500;
// text-align: left;
// color: #565e6f;
// }
// }
// .patient-form {
// flex: 1;
// overflow-y: auto;
// .pt {
// padding-top: 36px;
// }
// .content-left {
// width: 30%;
// label {
// display: flex;
// align-items: center;
// }
// }
// .content-right {
// flex: 1;
// }
// }
// .xy-wrapper {
// display: flex;
// justify-content: space-between;
// align-items: center;
// padding-bottom: 20px;
// .xy-label {
// font-size: 26px;
// font-family: Source Han Sans CN, Source Han Sans CN-Medium;
// font-weight: 500;
// text-align: left;
// color: #565e6f;
// }
// }
.niss-list {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.niss-list-item {
width: 45%;
display: flex;
justify-content: space-between;
.item-name {
display: flex;
align-items: center;
justify-content: space-between;
flex: 1;
}
.item-info {
flex: 1;
font-size: 1rem;
@ -475,14 +416,15 @@
}
}
}
.item-icon {
width: 25px;
font-size: 22px;
color: #007AFF;
}
}
// .common-slider-slider{
// background: linear-gradient(#007AFF, #52A5FF);
// }
@ -496,17 +438,20 @@
</style>
<style lang="less">
.throm-befor1{
.ant-form .ant-form-item{
.throm-befor1 {
.ant-form .ant-form-item {
margin-bottom: 1.5rem;
}
.ant-form .ant-form-item {
border: none;
}
}
.mrsitem{
text-align:center;
.mrsitem {
text-align: center;
}
// .common-slider .common-slider-slider .ant-input-number .ant-input-number-input {
// text-align: center;
// font-size: 2vw;

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

@ -20,8 +20,8 @@
</template>
</a-table>
<div class="btns" v-if="!outside">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large" @click="onSubmit">下一步</a-button>
<div class="throm-common-button" v-if="!outside">
<a-button :disabled="writeAble" class="" block type="primary" size="large" @click="onSubmit">下一步</a-button>
</div>
</div>
</template>

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

@ -3,7 +3,7 @@
<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'">
<throm-interfere-image-dcm></throm-interfere-image-dcm>
<throm-interfere-image-dcm :firstAidId="patientData?.firstAidId"></throm-interfere-image-dcm>
</div>
<div class="image-container" v-else-if="activeTabKey == 'ct'">
<template v-if="fileList && fileList.length">
@ -17,11 +17,12 @@
</div>
</div>
</a-card>
<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"
<div class="throm-common-button " v-if="!outside">
<!-- <w-upload @ok="handleUpload" btn-type="button" btn-text="上传院前CT图片"
v-if="fileList.length < 5" /> -->
<a-button :disabled="writeAble" class="" block size="large" v-if="fileList.length < 5"
@click="openCamera">上传院前CT图片</a-button>
<a-button :disabled="writeAble" class="" block type="primary" size="large"
@click="onSubmit">下一步</a-button>
</div>
</div>
@ -147,30 +148,20 @@
this.$message.success('患者已审核,内容不可更改')
return
}
// if (!window.plus) {
// // H5 使 `plus` API
// this.$message.success(' plus API')
// return
// // console.log(' plus API');
// }
const cmr = plus.camera.getCamera();
if (!cmr) {
this.$message.success('没有可用的摄像头');
return;
}
const res = cmr.supportedImageResolutions.length > 0 ? cmr.supportedImageResolutions[0] : {
width: 640,
height: 480
}; // ;
const fmt = cmr.supportedImageFormats.length > 0 ? cmr.supportedImageFormats[0] : 'jpeg';
const res = cmr.supportedImageResolutions[0]; // ;
const fmt = cmr.supportedImageFormats[0];
if (!res || !fmt) {
plus.nativeUI.toast('摄像头不支持该格式或分辨率');
return;
}
// const res = cmr.supportedImageResolutions[0];
// const fmt = cmr.supportedImageFormats[0];
cmr.captureImage(
(path) => {
// console.log('captureImage', path)
plus.io.resolveLocalFileSystemURL(
path,
(entry) => {
@ -187,11 +178,12 @@
(error) => {
// alert("Capture image failed: " + error.message);
}, {
resolution: res,
format: fmt,
resolution: "640*480",
format: "jpg",
filter: 'image',
}
);
},
//
compressImage(url, filename) {

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

@ -101,8 +101,6 @@
@cancel="picker = false" />
</div>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" type="primary" size="large" block
@click="onSubmitSign" v-if="!disabled">提交</a-button>
</div>
</div>
@ -125,10 +123,6 @@
</div>
</div>
</div>
<div class="btns" style="margin-top: 50px;">
<a-button :disabled="writeAble" class="common-button" type="primary" size="large" block
@click="onSubmit">提交</a-button>
</div>
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img style="width: 100%" :src="previewImage" />
@ -150,8 +144,10 @@
</div>
</div>
</div>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" type="primary" size="large" block
@click="onSubmitSign" v-if="!disabled && activeTabKey == 'tab1'">提交</a-button>
<a-button :disabled="writeAble" class="" block type="primary" size="large"
@click="handleNext">下一步</a-button>
</div>
</div>

4
src/views/thrombolysis/components/throm-ing-date.vue

@ -256,8 +256,8 @@
</a-modal> -->
</div>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large" @click="onSubmit">下一步</a-button>
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" block type="primary" size="large" @click="onSubmit">下一步</a-button>
</div>
<!-- <div class="first-footer">
<a-button

10
src/views/thrombolysis/components/throm-ing-min.vue

@ -68,7 +68,8 @@
</a-tooltip>
</div>
</div>
<a-popover v-model="item.visible" placement="bottomRight" arrow-point-at-center>
<a-popover v-model="item.visible" placement="bottomRight" arrow-point-at-center
trigger="click">
<template slot="content" v-if="item.range">
<a-radio-group :disabled="writeAble" v-model="nissValue" button-style="solid"
@change="changeRangeRadio(item, v)">
@ -80,7 +81,7 @@
</a-radio-group>
</template>
<a-input-number :disabled="writeAble" ref="inputNumber" class="noControls"
@focus="focusInput(index)" @click="changeInput($event, item)"
@focus="focusInput(index)" @click="changeInput($event, item)" readonly
style="width: 20%; margin-left: 20px" v-model="item.value" :min="0" :max="10" />
</a-popover>
</div>
@ -89,8 +90,8 @@
</div>
</a-form-item>
</a-form>
<div class="btns" style="margin-top: 2rem;">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
<div class="throm-common-button" >
<a-button :disabled="writeAble" class="" block type="primary" size="large"
@click="onSubmit">下一步</a-button>
</div>
</div>
@ -208,6 +209,7 @@
const {
code
} = this.timerData;
console.log('code=====', code)
const wangbadan = code ?
this.codeFormData[`${code}`] :
this.codeForm;

10
src/views/thrombolysis/components/throm-ing-reactions.vue

@ -41,12 +41,12 @@
<van-datetime-picker v-if="adversePickerVisable" v-model="currentAdverseDate" :formatter="formatter"
@cancel="adversePickerVisable = false" @confirm="onAdverseConfirm" />
</div>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" style="margin-right: 20px;" type="primary"
size="large" block @click="onAdverseSubmit" v-if="source !== 'first'">保存</a-button>
<a-button :disabled="writeAble" class="common-button" style="margin-right: 20px;" type="primary"
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" type="primary"
size="large" block @click="onAdverseSubmit" v-if="source !== 'first'">下一步</a-button>
<a-button :disabled="writeAble" class="" type="primary"
size="large" block @click="handleNext" v-else>下一步</a-button>
<!-- <a-button class="common-button" disabled type="primary" size="large" shape="round"
<!-- <a-button class="" disabled type="primary" size="large" shape="round"
@click="onAdverseSubmit">下发医嘱</a-button> -->
</div>
</div>

41
src/views/thrombolysis/components/throm-ing-record.vue

@ -4,17 +4,19 @@
<div class="record-content" v-html="dataInfo"></div>
<a-result class="common-result" v-if="!dataInfo" title="暂无记录"></a-result>
</div>
<div class="btns">
<a-button class="common-button" size="large" block @click="handlePrint">打印</a-button>
<a-button class="common-button" type="primary" size="large" block @click="onSubmit">导出</a-button>
<a-button class="common-button" type="primary" size="large" block @click="handleNext">下一步</a-button>
<div class="throm-common-button">
<a ref="downloadRef" target="_blank" href="javascript:;" style="display: none;"></a>
<a-button class="" size="large" block @click="handlePrint">打印</a-button>
<a-button class="" type="primary" size="large" block @click="handlePrint">导出</a-button>
<a-button class="" type="primary" size="large" block @click="handleNext">下一步</a-button>
</div>
</div>
</template>
<script>
import {
queryLog
queryLog,
exportRsPdf
} from 'api'
import {
mapState
@ -48,8 +50,35 @@
}
},
methods: {
handlePrint() {},
async handlePrint() {
const {
firstAidId
} = this.patientData
const res = await exportRsPdf({
firstAidId
})
const {
code,
data,
msg
} = res
if (code === 200) {
this.toDownLoad(data)
} else {
this.$message.error(msg)
}
},
onSubmit() {},
toDownLoad(path) {
try {
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)
}
},
handleNext() {
this.$emit('next')
}

5
src/views/thrombolysis/components/throm-ing-selDrug.vue

@ -29,7 +29,7 @@
</a-form>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" type="primary" size="large" block
@click="onSubmit">保存</a-button>
@click="onSubmit">下一步</a-button>
</div>
</div>
@ -63,7 +63,7 @@
...mapState('patient', ['patientData', 'writeAble']),
},
mounted() {
console.log('RSYW_CODE', this.RSYW_CODE)
// console.log('RSYW_CODE', this.RSYW_CODE)
const {
recordValDict
} = this.patientData;
@ -95,7 +95,6 @@
if (j !== 'JMRS-RSYW') {
if (data[j]) {
let ans = data[j][0].answer;
console.log('ans', ans.toString())
this.RSYW_CODE[`${j}`].value = Number(
ans.toString()
);

28
src/views/thrombolysis/components/throm-ing.vue

@ -36,7 +36,8 @@
<script>
import {
mapState
mapState,
mapMutations
} from 'vuex';
import ThromIngDate from './throm-ing-date.vue'
import ThromIngDrug from './throm-ing-selDrug.vue';
@ -67,7 +68,7 @@
}
},
computed: {
...mapState('patient', ['patientData', 'book']),
...mapState('patient', ['patientData', 'timerData', 'book']),
stepDesc() {
return {
drugDesc: this.patientData?.recordValDict?.['JMRS-RSYW']?.[0]?.answer[0] || '',
@ -88,7 +89,19 @@
// console.log('book', this.book)
},
methods: {
...mapMutations('patient', ['setTimerData']),
handleClickStep(current) {
console.log(this.timerData)
let code = null
if (current == 1) code = 'JMRS-Q-NIHSS'
else if (current == 2) code = 'JMRS-15-NIHSS'
else if (current == 3) code = 'JMRS-30-NIHSS'
else if (current == 4) code = 'JMRS-45-NIHSS'
else if (current == 5) code = 'JMRS-60-NIHSS'
code && this.setTimerData({
...this.timerData,
code
})
this.currentIndex = current;
},
handleNext() {
@ -110,8 +123,15 @@
margin-right: .2rem;
background-color: #fff;
.ant-steps-vertical .ant-steps-item-content {
min-height: 4rem;
// .ant-steps-vertical .ant-steps-item-content {
// min-height: 4rem;
// }
.ant-steps {
height: 100%;
padding-bottom: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.ant-steps-item-title {

25
src/views/thrombolysis/components/throm-interfere-image-dcm.vue

@ -91,6 +91,12 @@
components: {
dcmview,
},
props: {
firstAidId: {
type: String,
default: '',
},
},
data() {
return {
load: false,
@ -194,11 +200,11 @@
computed: {
...mapState('storm', ['spinning', 'showNav']),
...mapState('patient', ['patientData', 'timerData', 'overviewType']),
// ...mapState('patient', ['patientData', 'timerData', 'overviewType']),
},
mounted() {
this.toolType = 'ScrollTool';
this.goCreate();
this.firstAidId && this.goCreate();
// console.log(11111111111);
},
methods: {
@ -207,12 +213,12 @@
console.log('firstAidId', 2222223333333)
try {
this.load = true;
const {
firstAidId
} = this.patientData;
console.log('firstAidId', firstAidId)
// const {
// firstAidId
// } = this.patientData;
console.log('firstAidId', this.firstAidId)
const res = await getCtInfoPath({
firstAidId
firstAidId: this.firstAidId
});
const {
data,
@ -234,7 +240,8 @@
item.patientSex = row.patientSex;
item.studyId = row.studyId;
// row.dcmPath = apiUrl + row.dcmPath;
row.dcmPath = 'http://116.204.114.73:9300/static/1884873965911019520/2025/1/30/CT.1.2.392.200036.9116.2.5.1.37.2420784501.1738221085.722823.dcm'
row.dcmPath =
'http://116.204.114.73:9300/static/1884873965911019520/2025/1/30/CT.1.2.392.200036.9116.2.5.1.37.2420784501.1738221085.722823.dcm'
});
});
//
@ -252,7 +259,7 @@
console.log('err: ', err);
}
},
//
// -
hanldeByValue(_index) {
this.currentIndex = _index + 1;

2
src/views/thrombolysis/components/throm-interfere-image.vue

@ -3,7 +3,7 @@
<a-card style="width:100%" :tab-list="tabList" :active-tab-key="activeTabKey"
@tabChange="key => onTabChange(key, 'key')">
<div class="image-container">
<throm-interfere-image-dcm></throm-interfere-image-dcm>
<throm-interfere-image-dcm :firstAidId="patientData?.firstAidId"></throm-interfere-image-dcm>
<!-- <div class="notImg">溶栓视频安全区</div> -->
<!-- <div v-if="tabList.length">
{{activeTabKey}}

12
src/views/thrombolysis/components/throm-interfere-informed.vue

@ -100,10 +100,6 @@
<van-datetime-picker v-if="picker" v-model="currentDate" type="date" @confirm="confirmPicker"
@cancel="picker = false" />
</div>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" type="primary" size="large" block
@click="onSubmitSign" v-if="!disabled">提交</a-button>
</div>
</div>
<div class="video-container" v-if="activeTabKey == 'tab2'">
<div class="upload-informed-container">
@ -162,9 +158,11 @@
<img :src="apiUrl + currentSign" alt="" style="width: 100%; height: 100%;" />
</div>
</a-modal>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
@click="onSubmit">下一步</a-button>
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" type="primary" size="large" block @click="onSubmitSign"
v-if="!disabled && activeTabKey == 'tab1'">提交</a-button>
<a-button :disabled="writeAble" class="" block type="primary" size="large" @click="onSubmit">下一步</a-button>
</div>
</div>
</template>

10
src/views/thrombolysis/components/throm-interfere-surgical.vue

@ -16,8 +16,8 @@
<a-result class="common-result" v-if="!dataInfo" title="暂无记录"></a-result>
</div>
</div>
<div class="btns">
<a-button class="common-button" block type="primary" size="large" @click="onSubmit">下一步</a-button>
<div class="throm-common-button">
<a-button class="" block type="primary" size="large" @click="onSubmit">下一步</a-button>
</div>
</div>
</template>
@ -113,12 +113,12 @@
<style lang="less" scoped>
.throm-interfere-surgical {
.opera-list {
min-height: 500px;
// min-height: 500px;
}
.Record-container {
height: 50vh;
// height: 50vh;
min-height: 500px;
color: #000;
background-color: #eee;
padding: 1rem;

11
src/views/thrombolysis/components/throm-interfere.vue

@ -54,8 +54,15 @@
margin-right: .2rem;
background-color: #fff;
.ant-steps-vertical .ant-steps-item-content {
min-height: 10rem;
// .ant-steps-vertical .ant-steps-item-content {
// min-height: 10rem;
// }
.ant-steps {
height: 100%;
padding-bottom: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.ant-steps-item-title {

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

@ -115,7 +115,7 @@
</a-col>
<a-col :span="24">
<a-card class="report-card" title="急诊溶栓记录">
<a slot="extra" id="exportFirst" href="JavaScript:;" @click="exportRecord">导出</a>
<a slot="extra" id="exportFirst" href="JavaScript:;" @click="handleExportRsPdf">导出</a>
<div class="report-card-content">
<div class="record-content" v-html="recordData"></div>
<div class="emtpy" v-if="!recordData">
@ -126,7 +126,7 @@
</a-col>
<a-col :span="24">
<a-card class="report-card" title="溶栓观察表">
<a slot="extra" href="#" @click="handleExport">导出</a>
<a slot="extra" href="javascript:;" @click="handleExportRsgcbPdf">导出</a>
<div class="doc-ct-content">
<div>
<table border class="report-rsgcb">
@ -233,7 +233,7 @@
</a-col>
<a-col :span="24">
<a-card class="report-card" title="DNT时间表">
<a slot="extra" href="#">导出</a>
<a slot="extra" href="javascript:;" @click="handleExportDntPdf">导出</a>
<div class="doc-ct-content">
<div class="record-content">
<table border class="report-rsgcb">
@ -401,7 +401,7 @@
</a-col>
<a-col :span="24">
<a-card class="report-card" title="介入手术记录">
<a slot="extra" href="#">导出</a>
<a slot="extra" href="javascript:;" @click="handleExportJrPdf">导出</a>
<div class="doc-ct-content">
<div class="record-content" v-html="operaData"></div>
<div class="emtpy" v-if="!operaData">
@ -412,10 +412,10 @@
</a-col>
</a-row>
</div>
<div class="btns">
<a-button :disabled="writeAble" class="common-button" type="primary" size="large" block
@click="onSubmit">打印</a-button>
<!-- <a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" type="primary" size="large" block
@click="handleExportAll">打印</a-button>
<!-- <a-button :disabled="writeAble" class="" block type="primary" size="large"
@click="onSubmit">导出</a-button> -->
</div>
<throm-report-dnt ref="dnt"></throm-report-dnt>
@ -442,7 +442,11 @@
operationLog,
getCtInfoPath,
operationLogEx,
exportRsPdf
exportRsPdf,
exportDntPdf,
exportRsgcbPdf,
exportJrPdf,
exportAll,
} from 'api';
import dayjs from 'dayjs';
import duration from 'dayjs/plugin/duration';
@ -769,14 +773,11 @@
this.$message.error('缺少急救id信息');
}
},
async exportRecord() {
async handleExportRsPdf() {
const {
firstAidId
} = this.patient
// const res = await queryLog({
// firstAidId
// })
const res = await exportRsPdf({
firstAidId
})
@ -791,6 +792,78 @@
this.$message.error(msg)
}
},
async handleExportDntPdf() {
const {
firstAidId
} = this.patient
const res = await exportDntPdf({
firstAidId
})
const {
code,
data,
msg
} = res
if (code === 200) {
this.toDownLoad(data)
} else {
this.$message.error(msg)
}
},
async handleExportRsgcbPdf() {
const {
firstAidId
} = this.patient
const res = await exportRsgcbPdf({
firstAidId
})
const {
code,
data,
msg
} = res
if (code === 200) {
this.toDownLoad(data)
} else {
this.$message.error(msg)
}
},
async handleExportJrPdf() {
const {
firstAidId
} = this.patient
const res = await exportJrPdf({
firstAidId
})
const {
code,
data,
msg
} = res
if (code === 200) {
this.toDownLoad(data)
} else {
this.$message.error(msg)
}
},
async handleExportAll() {
const {
firstAidId
} = this.patient
const res = await exportAll({
firstAidId
})
const {
code,
data,
msg
} = res
if (code === 200) {
this.toDownLoad(data)
} else {
this.$message.error(msg)
}
},
toDownLoad(path) {
try {
// document.getElementById('exportFirst').href = path;
@ -813,9 +886,9 @@
// padding-top: 1rem;
.report-container {
height: calc(100vh - 196px);
overflow-y: auto;
overflow-x: hidden;
// padding: 10px;
}
@ -961,9 +1034,16 @@
// height: 424px;
overflow-y: auto;
.ant-steps-vertical .ant-steps-item-content {
// min-height: 4.38rem;
width: 88%;
// .ant-steps-vertical .ant-steps-item-content {
// // min-height: 4.38rem;
// width: 88%;
// }
.ant-steps {
height: 100%;
padding-bottom: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.ant-steps-item-title {

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

@ -94,8 +94,8 @@
@cancel="pickerVisable = false" @confirm="onConfirm" />
</div>
</div>
<div class="basic-footer">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" block type="primary" size="large"
@click="onSubmit">{{patientId ? '保存' : '下一步'}}</a-button>
<!-- <a-button :disabled="writeAble" type="link" size="large" @click="onSubmit">
保存<a-icon type="check" />

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

@ -231,8 +231,8 @@
<!-- <Informed ref="informed" source="first" @on-success="successInformed" /> -->
</a-modal>
</div>
<div class="first-footer">
<a-button :disabled="writeAble" class="common-button" block type="primary" size="large"
<div class="throm-common-button">
<a-button :disabled="writeAble" class="" block type="primary" size="large"
@click="onSubmit($event, patientId)">{{patientId? '保存' : '完成'}}</a-button>
<!-- <a-button :disabled="writeAble" type="link" size="large" @click="onSubmit">
保存<a-icon type="check" />

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

@ -55,7 +55,7 @@
}
</script>
<style lang="less" scoped>
<style lang="less">
.throm-result {
display: flex;
@ -65,7 +65,7 @@
background-color: #fff;
.ant-steps-vertical .ant-steps-item-content {
min-height: 6rem;
min-height: 10rem;
}
.ant-steps-item-title {

Loading…
Cancel
Save