修改报告打印以及病例管理

This commit is contained in:
lxd 2024-08-06 13:35:42 +08:00
parent ecdaf11003
commit 2c1636858f
6 changed files with 407 additions and 82 deletions

View File

@ -461,8 +461,13 @@ function initData() {
var idx = GetQueryString("idx");
var localStorage = window.localStorage;
var localData = JSON.parse(localStorage.data);
var data= JSON.parse(localData.do);
console.log("网页接受到数据"+data)
stateData.dicomInfo = data;
initImgList(stateData.dicomInfo);
initConerstoneAndData();
/* alert(localData.regid) */
$.getJSON("http://127.0.0.1:5000/get-data", {
/* $.getJSON("http://127.0.0.1:5000/get-data", {
},
function (data) {
@ -470,13 +475,19 @@ function initData() {
alert("获取数据失败")
}
else {
console.log(data)
stateData.dicomInfo = data;
initImgList(stateData.dicomInfo);
initConerstoneAndData();
}
});
}); */
}
//初始化滚动条
function initSlider(element) {
var idx = stateData.showMapping.get(element.id);

View File

@ -28,4 +28,9 @@ export const ultrasoniccomApi = {
upreporttemplatetime: async (pid:string) => {
return await request.get({ url: `/ultrasoniccom/ultrasonic/upreporttemplatetime?pid=${pid}`})
},
//获取dicom数据
getdcmlist: async () => {
return await request.get({ url: `/ultrasoniccom/ultrasonic/getdcm`})
},
}

View File

@ -148,7 +148,9 @@
:offset="4"
style="text-align: left; padding-left: 8px; margin-bottom: 6px"
>
<el-button> <Icon icon="ep:search" class="mr-5px" /> 搜索 </el-button>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
</el-col>
</el-row>
</el-form>
@ -164,17 +166,30 @@
border
:stripe="true"
:show-overflow-tooltip="true"
:data="list_patExamitems"
:data="list"
height="max(45vh,330px)"
@row-click="handleRowClick"
>
aaaa
<el-table-column label="主键" align="center" prop="id" v-if="false" />
<el-table-column label="检查ID" align="center" prop="examId" />
<el-table-column label="患者姓名" align="center" prop="pname" />
<el-table-column label="性别" align="center" prop="gender" />
<el-table-column
label="出生日期"
align="center"
prop="birthday"
:formatter="dateFormatter2"
width="180px"
/>
<el-table-column label="机构ID" align="center" prop="orgId" v-if="false" />
<el-table-column label="登记单号" align="center" prop="regId" />
<!-- 数据列 -->
</el-table>
<div style="display: flex; justify-content: center">
<Pagination
small
size="small"
:total="total_patExamitems"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
/>
@ -221,10 +236,10 @@
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
import download from '@/utils/download'
import { IllnessCaseApi } from '@/api/applyregistration/illnessCase'
import { PatientexamlistApi, PatientexamlistVO } from '@/api/tblist/patientexamlist'
defineOptions({ name: 'IllnessCase' })
/*
* 李传洋
@ -249,9 +264,34 @@ const queryParams0 = ref({
doctorName: undefined,
departmentName: undefined
})
const queryParams = ref({
pageNo: 1,
pageSize: 10,
examId: undefined,
pname: undefined,
gender: undefined,
birthday: undefined,
examDate: [],
deviceType: '',
seDc: undefined,
examItemName: undefined,
reportstatus: undefined,
applicationDate: [],
uploadDate: [],
orgName: undefined,
orgId: '',
highLevelOrgId: '',
createDate: [],
examDescription: undefined,
diagResults: undefined,
diagDate: [],
diagDoctor: undefined,
reviewDoctor: undefined,
reviewDate: [],
thumbnailImgUrl: undefined,
createTime: [],
regId: '',
/** 测试数据 **/
it_1: '',
it_2: '',
@ -263,10 +303,47 @@ const queryParams = ref({
it_8: '',
it_9: ''
})
//
const list_patExamitems = ref<any[]>([])
const total_patExamitems = ref(5)
//
const total = ref(0)
const loading_patExamitems = ref(false)
//
const list = ref<PatientexamlistVO[]>([])
/** 查询列表 */
const getList = async () => {
resetForm()
loading_patExamitems.value = true
try {
const data = await PatientexamlistApi.getPatientexamlistPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading_patExamitems.value = false
}
}
//
const handleRowClick = (row) => {
//
examitemsDesc .value= row.examDescription
//
diagnosisDesc.value = row.diagResults
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNo = 1
//
queryParams.value.orgId = ''
queryParams.value.highLevelOrgId = ''
getList()
}
/** 重置表单 */
const resetForm = () => {
list.value = []
examitemsDesc.value=''
diagnosisDesc.value=''
}
/****** 自定义内容 ******/
/****** 可参考内容 ******/
@ -275,7 +352,7 @@ const loading_patExamitems = ref(false)
/** 钩子方法 **/
onMounted(() => {
//ceshi
getList()
})
/** 防空作用域 **/

View File

@ -105,10 +105,12 @@
<el-row>
<el-col :span="24">
<div style="text-align: right" class="item-style">
<el-button> <Icon icon="ep:search" class="mr-2px" /> 搜索 </el-button>
<el-button type="primary" plain>
<Icon icon="ep:printer" class="mr-2px" /> 打印
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-2px" /> 搜索
</el-button>
<!-- <el-button type="primary" plain>
<Icon icon="ep:printer" class="mr-2px" /> 打印
</el-button> -->
</div>
</el-col>
</el-row>
@ -119,10 +121,23 @@
border
:stripe="true"
:show-overflow-tooltip="true"
:data="list_infos"
:data="list"
height="max(43vh,294px)"
@row-click="handleRowClick"
>
aaaa
<el-table-column label="主键" align="center" prop="id" v-if="false" />
<el-table-column label="检查ID" align="center" prop="examId" />
<el-table-column label="患者姓名" align="center" prop="pname" />
<el-table-column label="性别" align="center" prop="gender" />
<el-table-column
label="出生日期"
align="center"
prop="birthday"
:formatter="dateFormatter2"
width="180px"
/>
<el-table-column label="机构ID" align="center" prop="orgId" v-if="false" />
<el-table-column label="登记单号" align="center" prop="regId" />
<!-- 数据列 -->
</el-table>
<div style="display: flex; justify-content: center">
@ -132,6 +147,7 @@
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</div>
</el-card>
@ -171,7 +187,7 @@
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<!-- <el-col :span="6">
<el-form-item label="类别" prop="it_3" class="item-style">
<el-select
v-model="infoParams.it_3"
@ -185,8 +201,8 @@
<el-option label="xxxxx" value="xxxxx" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
</el-col> -->
<!-- <el-col :span="7">
<el-form-item label="床号" prop="it_4" class="item-style">
<el-input
v-model="infoParams.it_4"
@ -195,8 +211,8 @@
class="item-width"
/>
</el-form-item>
</el-col>
<el-col :span="2">
</el-col> -->
<!-- <el-col :span="2">
<el-form-item label="" label-width="4px" prop="it_5" class="item-style">
<el-checkbox v-model="infoParams.it_5" label="初诊" :disabled="true" />
</el-form-item>
@ -210,7 +226,7 @@
class="item-width"
/>
</el-form-item>
</el-col>
</el-col> -->
</el-row>
<el-row>
<el-col :span="13">
@ -238,7 +254,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<!-- <el-col :span="6">
<el-form-item label="婚否" prop="it_9" class="item-style">
<el-select
v-model="infoParams.it_9"
@ -252,7 +268,7 @@
<el-option label="xxxxx" value="xxxxx" />
</el-select>
</el-form-item>
</el-col>
</el-col> -->
</el-row>
<el-row>
<el-col :span="7">
@ -260,7 +276,6 @@
<el-date-picker
v-model="infoParams.it_10"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
:readonly="true"
class="item-width"
/>
@ -269,12 +284,12 @@
<el-col :span="8">
<el-form-item label="年龄" prop="it_11" class="item-style">
<el-input
v-model="infoParams.it_11"
v-model="age"
clearable
:readonly="true"
class="item-width"
>
<template #append>
<!-- <template #append>
<el-select
v-model="infoParams.it_11a"
placeholder=""
@ -286,11 +301,11 @@
<el-option label="xxxxx" value="xxxxx" />
<el-option label="xxxxx" value="xxxxx" />
</el-select>
</template>
</template> -->
</el-input>
</el-form-item>
</el-col>
<el-col :span="9">
<!-- <el-col :span="9">
<el-form-item label="临床诊断" label-width="64px" prop="it_12" class="item-style">
<el-input
v-model="infoParams.it_12"
@ -299,13 +314,13 @@
class="item-width"
/>
</el-form-item>
</el-col>
</el-col> -->
</el-row>
<el-row>
<el-col :span="13">
<el-form-item label="科室" prop="it_13" class="item-style">
<el-input
v-model="infoParams.it_13"
v-model="infoParams.billDoctorDepartment"
clearable
:readonly="true"
class="item-width"
@ -328,14 +343,13 @@
<el-form-item label="申请日期" prop="it_15" class="item-style date-picker">
<el-date-picker
v-model="infoParams.it_15"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetime"
:readonly="true"
class="item-width"
/>
</el-form-item>
</el-col>
<el-col :span="17">
<!-- <el-col :span="17">
<el-form-item label="末次月经" prop="it_16" class="item-style">
<el-input
v-model="infoParams.it_16"
@ -344,10 +358,10 @@
class="item-width"
/>
</el-form-item>
</el-col>
</el-col> -->
</el-row>
<el-row>
<el-col :span="7">
<!-- <el-col :span="7">
<el-form-item label="孕次" prop="it_17" class="item-style">
<el-input
v-model="infoParams.it_17"
@ -356,8 +370,8 @@
class="item-width"
/>
</el-form-item>
</el-col>
<el-col :span="6">
</el-col> -->
<!-- <el-col :span="6">
<el-form-item label="产次" prop="it_18" class="item-style">
<el-input
v-model="infoParams.it_18"
@ -366,8 +380,8 @@
class="item-width"
/>
</el-form-item>
</el-col>
<el-col :span="11">
</el-col> -->
<!-- <el-col :span="11">
<el-form-item label="避孕方式" prop="it_19" class="item-style">
<el-select
v-model="infoParams.it_19"
@ -381,10 +395,10 @@
<el-option label="xxxxx" value="xxxxx" />
</el-select>
</el-form-item>
</el-col>
</el-col> -->
</el-row>
<el-row>
<el-col :span="13">
<!-- <el-col :span="13">
<el-form-item label="活检部位" prop="it_20" class="item-style">
<el-input
v-model="infoParams.it_20"
@ -393,8 +407,8 @@
class="item-width"
/>
</el-form-item>
</el-col>
<el-col :span="11">
</el-col> -->
<!-- <el-col :span="11">
<el-form-item label="HP" prop="it_21" class="item-style">
<el-input
v-model="infoParams.it_21"
@ -403,7 +417,7 @@
class="item-width"
/>
</el-form-item>
</el-col>
</el-col> -->
</el-row>
<el-row>
<el-col :span="13">
@ -445,7 +459,57 @@
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="报告单" name="reportInfo">报告单</el-tab-pane>
<el-tab-pane label="报告单" name="reportInfo">
<!--报告区域-->
<div class="flex-center" id="printMe" style="height: calc(100% - 15px)">
<div class="ultrasound-report" id="PDF">
<h2>超声检查报告单</h2>
<hr />
<div class="patient-info">
<p class="info-item">姓名{{infoParams.it_7}}</p>
<p class="info-item">送检科室{{infoParams.billDoctorDepartment}}</p>
<p class="info-item">门诊号{{infoParams.it_2}}</p>
<p class="info-item">性别{{infoParams.it_8}}</p>
<p class="info-item">年龄{{age}}</p>
<p class="info-item">设备{{ infoParams.deviceName}}</p>
<p class="info-item">检查号{{infoParams.it_1 }}</p>
<p class="info-item">检查类型{{infoParams.examItemName }}</p>
</div>
<hr />
<!-- 图片展示区域 -->
<h3>超声图像</h3>
<div class="image-gallery">
<div class="image-item-container" v-for="image in reportimages" :key="image.id">
<img :src="image.imgUrl" alt="" style="width: 180px; height: 180px" />
</div>
</div>
<div class="ultrasound-findings">
<h3>超声所见</h3>
<p>{{infoParams.it_23}}</p>
</div>
<div class="ultrasound-recommendation">
<h3>超声提示</h3>
<p>{{infoParams.it_24}}</p>
</div>
<div style="position: absolute; bottom: 20px; right: 20px">
<p>医生签名{{}}</p>
<!-- <p>时间xxx</p> -->
</div>
</div>
<el-divider />
<!--功能区-->
<div>
<el-button
type="primary"
style="width: 100px; float: right"
class="ignore-print"
v-print="'printMe'"
>打印</el-button
>
</div>
<div> </div>
</div>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
@ -454,10 +518,11 @@
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
import download from '@/utils/download'
import { ReportPrintStatisticsApi } from '@/api/applyregistration/reportPrintStatistics'
import { PatientexamlistApi, PatientexamlistVO } from '@/api/tblist/patientexamlist'
import { ultrasoniccomApi, updateexamineimageVO } from '@/api/ultrasoniccom'
defineOptions({ name: 'ReportPrintStatistics' })
/*
* 李传洋
@ -474,6 +539,8 @@ const message = useMessage()
const { t } = useI18n()
const activeTabName = ref('diagnosisInfo')
const deviceList = ref<any[]>([])
//
const total = ref(0)
//
const queryParams0 = ref({
pageNo: 1,
@ -484,14 +551,119 @@ const queryParams0 = ref({
const queryParams = ref({
pageNo: 1,
pageSize: 10,
/** 测试数据 **/
it_1: '',
it_1a: '',
it_2: '',
it_3: '',
it_4: '',
it_5: ''
examId: undefined,
pname: undefined,
gender: undefined,
birthday: undefined,
examDate: [],
deviceType: '',
seDc: undefined,
examItemName: undefined,
reportstatus: undefined,
applicationDate: [],
uploadDate: [],
orgName: undefined,
orgId: '',
highLevelOrgId: '',
createDate: [],
examDescription: undefined,
diagResults: undefined,
diagDate: [],
diagDoctor: undefined,
reviewDoctor: undefined,
reviewDate: [],
thumbnailImgUrl: undefined,
createTime: [],
regId: ''
})
//
const age = ref()
const calculateAge = (birthdate) => {
if (!birthdate) {
age.value = null
return
}
const today = new Date()
const birth = new Date(birthdate)
let yearsDiff = today.getFullYear() - birth.getFullYear()
// Check if the birthday hasn't occurred yet this year
const hasBirthdayPassed =
today.getMonth() > birth.getMonth() ||
(today.getMonth() === birth.getMonth() && today.getDate() >= birth.getDate())
if (!hasBirthdayPassed) {
yearsDiff--
}
age.value = yearsDiff
}
//
const list = ref<PatientexamlistVO[]>([])
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
queryParams.deviceType = 'US'
const data = await PatientexamlistApi.getPatientexamlistPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNo = 1
queryParams.value.deviceType = 'US'
//
queryParams.value.orgId = ''
queryParams.value.highLevelOrgId = ''
getList()
}
//
//
const reportimages = ref<any[]>([])
//
const loadimage = async (orgId:string,regId:string) => {
const imageslist = await ultrasoniccomApi.getimageslist(orgId, regId, '1')
console.log(imageslist)
reportimages.value = imageslist
}
//
const handleRowClick = (row) => {
//
infoParams.value.it_23 = row.examDescription
//
infoParams.value.it_24 = row.diagResults
//
infoParams.value.it_7 = row.pname
//
infoParams.value.it_8 = row.gender
//
infoParams.value.it_10 = row.birthday
//
infoParams.value.it_2 = row.examId
//
infoParams.value.it_1 = row.regId
//
infoParams.value.it_15 = row.applicationDate
//
infoParams.value.billDoctorDepartment= row.billDoctorDepartment
//
infoParams.value.deviceName= row.deviceName
//
calculateAge(row.birthday)
//
infoParams.value.examItemName=row.examItemName
loadimage(row.orgId,row.regId)
}
const infoParams0 = ref({
doctorName: undefined,
@ -523,11 +695,14 @@ const infoParams = ref({
it_21: '',
it_22: '',
it_23: '',
it_24: ''
it_24: '',
billDoctorDepartment:'',
deviceName:'',
examItemName:'',
})
//
const list_infos = ref<any[]>([])
const total = ref(5)
const loading = ref(false)
/****** 自定义内容 ******/
@ -538,6 +713,7 @@ const loading = ref(false)
/** 钩子方法 **/
onMounted(() => {
//ceshi
getList()
})
/** 防空作用域 **/
@ -577,4 +753,43 @@ console.log(infoParams0)
.radio-group {
border: 1px solid #ececec;
}
/* 报告样式 */
.ultrasound-report {
font-family: Arial, sans-serif;
width: 90%;
margin: 20px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 8px;
position: relative;
height: 800px;
}
.ultrasound-report h1,
.ultrasound-report h2 {
text-align: center;
}
.patient-info p,
.ultrasound-findings p,
.ultrasound-recommendation p {
margin: 5px 0;
}
/* 报告的P标签 */
.patient-info {
display: flex;
flex-wrap: wrap;
}
.ultrasound-findings h3,
.ultrasound-recommendation h3 {
margin-top: 20px;
}
.image-gallery {
display: flex;
justify-content: space-around;
margin: 20px 0;
}
</style>

View File

@ -5,9 +5,10 @@
class="my-custom-close-icon"
:fullscreen="true"
>
<el-tabs v-model="activeName" type="card" >
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="影像" name="first">
<iframe
v-if="dataLoaded"
frameborder="0"
scrolling="no"
:src="newSrc"
@ -18,7 +19,7 @@
<!-- 外层 Flex 容器 -->
<div style="display: flex; height: 100%">
<!-- 模版区域 -->
<div style="flex: 1; min-width: 0" >
<div style="flex: 1; min-width: 0">
<el-select
v-model="fordevicemValue"
placeholder="请选择模版类别"
@ -73,7 +74,7 @@
</el-tabs>
</div>
<!-- 用户信息区域 -->
<div style="flex: 3; min-width: 0" >
<div style="flex: 3; min-width: 0">
<label style="font-size: 18px; font-weight: bold; margin-left: 50px">患者信息</label>
<el-divider />
<el-form
@ -201,6 +202,7 @@
>
<el-radio-button label="阴性" value="0" />
<el-radio-button label="阳性" value="1" />
<el-radio-button label="重大阳性" value="2" />
</el-radio-group>
<el-divider />
<div class="form-row-yx">
@ -268,7 +270,7 @@
<script setup lang="ts">
import { ApplyformApi, ApplyformVO, UPFJApplyformVO } from '@/api/applyregistration/applyform'
import { ultrasoniccomApi, updateexamineimageVO } from '@/api/ultrasoniccom'
import axios from 'axios'
import { PatientexamlistApi, PatientexamlistVO } from '@/api/tblist/patientexamlist'
import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
@ -285,9 +287,7 @@ const formLoading = ref(false) // 表单的加载中1修改时的数据加
const examineFormVO = ref<PatientexamlistVO>({} as PatientexamlistVO)
const savedisabled = ref(true) //
const examinedisabled = ref(false) //
const isImageLoaded = ref(false) //
const isImageLoaded2 = ref(false) //
const isImageLoaded3 = ref(false) //
const dataLoaded = ref(false) //
//使
const clickuptime = async (pid: string) => {
@ -348,10 +348,6 @@ const save = async () => {
console.log('data:', response.data)
// ID
getPatientexamlist(ID)
//
isImageLoaded.value = false
isImageLoaded2.value = false
isImageLoaded3.value = false
emit('success')
} else {
//
@ -487,13 +483,13 @@ const orgId = ref('')
//regid
const regId = ref('')
//
const newSrc=ref('');
const newSrc = ref('')
/** 打开弹窗 */
const open = async (id: number, orgid: string, regid: string) => {
resetForm()
const Src = `/public/dicom/dicomViewPc1.html?t=${new Date().getTime()}`;
newSrc.value=Src
const Src = `/public/dicom/dicomViewPc1.html?t=${new Date().getTime()}`
newSrc.value = Src
console.log('orgid' + orgid)
console.log('regid' + regid)
@ -520,20 +516,40 @@ const open = async (id: number, orgid: string, regid: string) => {
privateData.value = pridate
// ID
getPatientexamlist(id)
//html
var localData = {
regid: regid, // 'someNumber'
orgId: orgid // 'someOrgId' ID
}
// JSON
var localStorageData = JSON.stringify(localData);
localStorage.setItem('data', localStorageData)
//
getlogininfo()
iframeData()
} finally {
formLoading.value = false
}
}
//
const iframeData = async () => {
try {
const response = await ultrasoniccomApi.getdcmlist()
if (response) {
//html
var localData = {
regid: '', // 'someNumber'
orgId: '' ,// 'someOrgId' ID
do:response
}
// JSON
var localStorageData = JSON.stringify(localData)
localStorage.setItem('data', localStorageData)
} else {
// statussuccess
console.error('Request did not succeed:', response.data)
}
dataLoaded.value = true // dataLoadedtrue
} catch (error) {
console.error('Error fetching data:', error)
dataLoaded.value = true // 使dataLoadedtrue便
}
}
// ID
const getPatientexamlist = async (id: number) => {
const data = await PatientexamlistApi.getPatientexamlist(id)
@ -597,7 +613,7 @@ const resetForm = () => {
height: 100vh;
width: 100vw;
}
*//* */
*/ /* 报告区域 左侧模版选择字体大小 */
.treeStyle {
font-size: 20px;
}

View File

@ -280,6 +280,7 @@
>
<el-radio-button label="阴性" value="0" />
<el-radio-button label="阳性" value="1" />
<el-radio-button label="重大阳性" value="2" />
</el-radio-group>
<div class="form-row">
<el-form-item label="诊断医生" class="form-item">