批量修改

This commit is contained in:
旺仔 2024-08-26 23:52:54 +08:00
parent 683b43789a
commit 9dc798ea39
17 changed files with 623 additions and 378 deletions

View File

@ -13,18 +13,18 @@ export const DeviceManageApi = {
return await request.get({ url: `/system/department/getlist` })
},
getPage: async (params: any) => {
return await request.get({ url: `/test/device/page`, params })
return await request.get({ url: `/system/device/page`, params })
},
get: async (id: any) => {
return await request.get({ url: `/test/device/get?id=`+ id })
return await request.get({ url: `/system/device/get?id=`+ id })
},
create: async (data: any) => {
return await request.post({ url: `/test/device/create`, data })
return await request.post({ url: `/system/device/create`, data })
},
update: async (data: any) => {
return await request.put({ url: `/test/device/update`, data })
return await request.put({ url: `/system/device/update`, data })
},
delete: async (id: any) => {
return await request.delete({ url: `/test/device/delete?id=` + id })
return await request.delete({ url: `/system/device/delete?id=` + id })
},
}

View File

@ -13,18 +13,18 @@ export const DiagnosisTemplateApi = {
return await request.get({ url: `/doctor/getAlllist` })
},
getPage: async (params: any) => {
return await request.get({ url: `/test/reporttemplate/page`, params })
return await request.get({ url: `/system/reporttemplate/page`, params })
},
get: async (id: any) => {
return await request.get({ url: `/test/reporttemplate/get?id=`+ id })
return await request.get({ url: `/system/reporttemplate/get?id=`+ id })
},
create: async (data: any) => {
return await request.post({ url: `/test/reporttemplate/create`, data })
return await request.post({ url: `/system/reporttemplate/create`, data })
},
update: async (data: any) => {
return await request.put({ url: `/test/reporttemplate/update`, data })
return await request.put({ url: `/system/reporttemplate/update`, data })
},
delete: async (id: any) => {
return await request.delete({ url: `/test/reporttemplate/delete?id=` + id })
return await request.delete({ url: `/system/reporttemplate/delete?id=` + id })
},
}

View File

@ -10,22 +10,22 @@ export const ExampartManageApi = {
return await request.get({ url: `/org/org/getlist` })
},
getPage: async (params: any) => {
return await request.get({ url: `/test/exampart/page`, params })
return await request.get({ url: `/system/exampart/page`, params })
},
get: async (id: any) => {
return await request.get({ url: `/test/exampart/get?id=`+ id })
return await request.get({ url: `/system/exampart/get?id=`+ id })
},
create: async (data: any) => {
return await request.post({ url: `/test/exampart/create`, data })
return await request.post({ url: `/system/exampart/create`, data })
},
update: async (data: any) => {
return await request.put({ url: `/test/exampart/update`, data })
return await request.put({ url: `/system/exampart/update`, data })
},
delete: async (id: any) => {
return await request.delete({ url: `/test/exampart/delete?id=` + id })
return await request.delete({ url: `/system/exampart/delete?id=` + id })
},
getexampartlist: async () => {
return await request.get({ url: `/test/exampart/getlist` })
return await request.get({ url: `/system/exampart/getlist` })
},
}

View File

@ -7,7 +7,7 @@ import request from '@/config/axios'
export const IllnessCaseApi = {
/* 测试方法 */
getDeviceList: async () => {
return await request.get({ url: `/test/device/getlist` })
return await request.get({ url: `/system/device/getlist` })
},
getExamitemsList: async () => {
return await request.get({ url: `/examitems/examitems/getlist` })

View File

@ -7,7 +7,7 @@ import request from '@/config/axios'
export const ReportPrintStatisticsApi = {
/* 测试方法 */
getDeviceList: async () => {
return await request.get({ url: `/test/device/getlist` })
return await request.get({ url: `/system/device/getlist` })
},
getPage: async (params: any) => {
return await request.get({ url: `/tblist/patientexamlist/pageReportPrintStatistics`, params })

View File

@ -7,7 +7,7 @@ import request from '@/config/axios'
export const ReservationInfoApi = {
/* 测试方法 */
getDeviceList: async () => {
return await request.get({ url: `/test/device/getlist` })
return await request.get({ url: `/system/device/getlist` })
},
getDepartmentList: async () => {
return await request.get({ url: `/system/department/getlist` })

View File

@ -40,10 +40,14 @@
clearable
class="item-width"
>
<el-option label="DR" value="DR" />
<el-option label="CR" value="CR" />
<el-option label="CT" value="CT" />
<el-option label="DR" value="DR" />
<el-option label="MR" value="MR" />
<el-option label="超声" value="超声" />
<el-option label="NM" value="NM" />
<el-option label="PT" value="PT" />
<el-option label="US" value="US" />
<el-option label="XA" value="XA" />
</el-select>
</el-form-item>
</el-col>
@ -204,14 +208,7 @@ const formType = ref('')
const orgList = ref<any[]>([])
const departmentList = ref<any[]>([])
//
const formData0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const formData = ref({
/** 测试数据 **/
id: '',
deviceName: '',
deviceStatus: '',
@ -232,7 +229,6 @@ const deviceDepartmentInfo = ref<any>()
/****** 自定义内容 ******/
const resetForm = async () => {
formData.value = {
/** 测试数据 **/
id: '',
deviceName: '',
deviceStatus: '',
@ -325,7 +321,6 @@ onMounted(async () => {
/** 防空作用域 **/
console.log(dateFormatter)
console.log(formData0)
//console.log(null)
/** 导出内容 **/

View File

@ -63,10 +63,14 @@
clearable
class="item-width"
>
<el-option label="DR" value="DR" />
<el-option label="CR" value="CR" />
<el-option label="CT" value="CT" />
<el-option label="DR" value="DR" />
<el-option label="MR" value="MR" />
<el-option label="超声" value="超声" />
<el-option label="NM" value="NM" />
<el-option label="PT" value="PT" />
<el-option label="US" value="US" />
<el-option label="XA" value="XA" />
</el-select>
</el-form-item>
</el-col>
@ -89,6 +93,9 @@
>
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-col>
</el-row>
</el-form>
@ -179,17 +186,10 @@ const message = useMessage()
const { t } = useI18n()
const departmentList = ref<any[]>([])
//
const queryParams0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const queryParams = ref({
pageNo: 1,
pageSize: 10,
/** 测试数据 **/
deviceDesc: undefined,
deviceDesc: '',
departmentCode: '',
deviceDepartment: '',
deviceName: '',
@ -234,11 +234,27 @@ const getList = async () => {
}
}
const handleQuery = () => {
const handleQuery = async () => {
queryParams.value.pageNo = 1
getList()
}
const resetQuery = async () => {
queryParams.value = {
pageNo: 1,
pageSize: 10,
deviceDesc: '',
departmentCode: '',
deviceDepartment: '',
deviceName: '',
deviceType: '',
deviceModel: ''
}
deviceDepartmentInfo.value = undefined
queryFormRef.value?.clearValidate()
handleQuery()
}
/** 钩子方法 **/
onMounted(async () => {
departmentList.value = await DeviceManageApi.getDepartmentList()
@ -248,7 +264,6 @@ onMounted(async () => {
/** 防空作用域 **/
console.log(dateFormatter)
console.log(download)
console.log(queryParams0)
//console.log(null)
/** 导出内容 **/

View File

@ -123,14 +123,7 @@ const formType = ref('')
const orgList = ref<any[]>([])
const doctorList = ref<any[]>([])
//
const formData0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const formData = ref({
/** 测试数据 **/
templateName: '',
examDescription: '',
diagResults: '',
@ -159,11 +152,6 @@ const open = async (type: string, id?: number) => {
}
/****** 可参考内容 ******/
const openTest = () => {
dialogVisible.value = true
//
}
/** 组件事件 **/
const submitForm = async () => {
formLoading.value = true
@ -194,11 +182,10 @@ onMounted(async () => {
console.log(dateFormatter)
console.log(message)
console.log(t)
console.log(formData0)
//console.log(null)
/** 导出内容 **/
defineExpose({ open, openTest })
defineExpose({ open })
/**
* 备注
*

View File

@ -21,25 +21,25 @@
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="8">
<el-form-item label="模板类型" prop="templateLimitsType" class="item-style">
<el-radio-group
v-model="queryParams.templateLimitsType"
class="item-width radio-group"
>
<el-radio value="all" style="margin-left: 15px; margin-right: 25px">全部</el-radio>
<el-radio value="public" style="margin-right: 25px">公共</el-radio>
<el-radio value="private" style="margin-right: 4px">私有</el-radio>
<el-radio-group v-model="queryParams.templateLimitsType" class="radio-group">
<el-radio value="all" style="margin-left: 15px; margin-right: 15px">全部</el-radio>
<el-radio value="public" style="margin-right: 15px">公共</el-radio>
<el-radio value="private" style="margin-right: 15px">私有</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="9" style="text-align: right">
<el-col :span="7" style="text-align: right">
<el-button
@click="handleQuery"
style="background-color: rgba(56, 119, 246, 1); color: rgba(255, 255, 255, 1)"
>
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-col>
</el-row>
</el-form>
@ -47,7 +47,7 @@
<ContentWrap style="height: 64px">
<el-row>
<el-col :offset="15" :span="9" style="text-align: right">
<el-col :offset="17" :span="7" style="text-align: right">
<el-button
@click="openForm('create')"
style="background-color: rgb(28, 176, 117); color: rgb(255, 255, 255)"
@ -126,16 +126,9 @@ const formRef = ref()
const message = useMessage()
const { t } = useI18n()
//
const queryParams0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const queryParams = ref({
pageNo: 1,
pageSize: 10,
/** 测试数据 **/
templateName: '',
templateLimitsType: 'all'
})
@ -177,6 +170,12 @@ const handleQuery = () => {
getList()
}
const resetQuery = async () => {
/* aaaaa */
queryFormRef.value?.clearValidate()
handleQuery()
}
/** 钩子方法 **/
onMounted(() => {
getList()
@ -185,9 +184,6 @@ onMounted(() => {
/** 防空作用域 **/
console.log(dateFormatter)
console.log(download)
console.log(message)
console.log(t)
console.log(queryParams0)
//console.log(null)
/** 导出内容 **/

View File

@ -104,14 +104,7 @@ const formLoading = ref(false)
const formType = ref('')
const orgList = ref<any[]>([])
//
const formData0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const formData = ref({
/** 测试数据 **/
id: '',
examPartCode: '',
examPartName: '',
@ -122,7 +115,6 @@ const formData = ref({
/****** 自定义内容 ******/
const resetForm = async () => {
formData.value = {
/** 测试数据 **/
id: '',
examPartCode: '',
examPartName: '',
@ -188,7 +180,6 @@ onMounted(async () => {
/** 防空作用域 **/
console.log(dateFormatter)
console.log(formData0)
//console.log(null)
/** 导出内容 **/

View File

@ -38,6 +38,9 @@
>
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-col>
</el-row>
</el-form>
@ -124,16 +127,9 @@ const formRef = ref()
const message = useMessage()
const { t } = useI18n()
//
const queryParams0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const queryParams = ref({
pageNo: 1,
pageSize: 10,
/** 测试数据 **/
examPartName: '',
examPartCode: ''
})
@ -169,11 +165,22 @@ const getList = async () => {
}
}
const handleQuery = () => {
const handleQuery = async () => {
queryParams.value.pageNo = 1
getList()
}
const resetQuery = async () => {
queryParams.value = {
pageNo: 1,
pageSize: 10,
examPartName: '',
examPartCode: ''
}
queryFormRef.value?.clearValidate()
handleQuery()
}
/** 钩子方法 **/
onMounted(() => {
getList()
@ -182,7 +189,6 @@ onMounted(() => {
/** 防空作用域 **/
console.log(dateFormatter)
console.log(download)
console.log(queryParams0)
//console.log(null)
/** 导出内容 **/

View File

@ -95,10 +95,14 @@
clearable
class="item-width"
>
<el-option label="DR" value="DR" />
<el-option label="CR" value="CR" />
<el-option label="CT" value="CT" />
<el-option label="DR" value="DR" />
<el-option label="MR" value="MR" />
<el-option label="超声" value="超声" />
<el-option label="NM" value="NM" />
<el-option label="PT" value="PT" />
<el-option label="US" value="US" />
<el-option label="XA" value="XA" />
</el-select>
</el-form-item>
</el-col>
@ -107,8 +111,8 @@
<el-radio-group v-model="queryParams.diagFlag" class="item-width radio-group">
<el-radio value="" style="margin-left: 12px; margin-right: 18px">全部</el-radio>
<el-radio value="0" style="margin-right: 18px">阴性</el-radio>
<el-radio value="1" style="margin-right: 18px">阳性</el-radio>
<el-radio value="2" style="margin-right: 4px">重大阳性</el-radio>
<el-radio value="1" style="margin-right: 6px">阳性</el-radio>
<el-radio value="2" style="margin-left: 12px; margin-right: 4px">重大阳性</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -178,6 +182,9 @@
>
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-col>
</el-row>
</el-form>
@ -202,6 +209,13 @@
<el-table-column type="index" label="序号" align="center" width="54px" />
<el-table-column label="登记号" align="center" prop="regId" width="240px" />
<el-table-column label="检查号" align="center" prop="examId" width="240px" />
<el-table-column
label="检查日期"
align="center"
prop="examDate"
:formatter="dateFormatter2"
width="110px"
/>
<el-table-column label="患者姓名" align="center" prop="pname" width="130px" />
<el-table-column label="性别" align="center" prop="gender" width="54px" />
<el-table-column
@ -211,13 +225,6 @@
:formatter="dateFormatter2"
width="110px"
/>
<el-table-column
label="检查日期"
align="center"
prop="examDate"
:formatter="dateFormatter2"
width="110px"
/>
<el-table-column
label="检查部位"
header-align="center"
@ -351,16 +358,9 @@ const examitemsDesc = ref('')
const deviceList = ref<any[]>([])
const examitemsList = ref<any[]>([])
//
const queryParams0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const queryParams = ref({
pageNo: 1,
pageSize: 10,
/** 测试数据 **/
regId: '',
examId: '',
examDate_ge: '',
@ -403,6 +403,26 @@ const handleQuery = async () => {
getList()
}
const resetQuery = async () => {
queryParams.value = {
pageNo: 1,
pageSize: 10,
regId: '',
examId: '',
examDate_ge: '',
examDate_le: '',
deviceType: '',
deviceName: '',
diagFlag: '',
examItemName: '',
reportstatus: '',
pname: '',
gender: ''
}
queryFormRef.value?.clearValidate()
handleQuery()
}
const handleRowClick = async (row) => {
examitemsDesc.value = row ? row.examDescription : ''
diagnosisDesc.value = row ? row.diagResults : ''
@ -421,7 +441,6 @@ console.log(dateFormatter)
console.log(download)
console.log(message)
console.log(t)
console.log(queryParams0)
//console.log(null)
/** 导出内容 **/

View File

@ -0,0 +1,168 @@
<template>
<div class="ultrasound-report">
<el-row style="font-size: 14px">
<el-col :span="12">
<h2 class="ml-6px">科右前旗康立寿医院</h2>
</el-col>
<el-col :span="12">
<h2 style="text-align: right" class="mr-6px">CT检查报告单</h2>
</el-col>
</el-row>
<hr />
<el-row style="font-size: 14px">
<el-col :span="13">
<div class="ml-6px">患者编号</div>
<div class="ml-6px">{{ infoParams.regId }}</div>
</el-col>
<el-col :span="11">
<div class="ml-6px">检查编号</div>
<div class="ml-6px">{{ infoParams.examId }}</div>
</el-col>
</el-row>
<hr />
<div class="patient-info">
<p class="info-item" v-if="false">门诊号{{ infoParams.regId }}</p>
<p class="info-item">姓名{{ infoParams.pname }}</p>
<p class="info-item">性别{{ infoParams.gender }}</p>
<p class="info-item">年龄{{ age }}</p>
<p class="info-item" v-if="false">检查号{{ infoParams.examId }}</p>
<p class="info-item" v-if="false">检查项目{{ infoParams.examItemName }}</p>
<p class="info-item">设备{{ infoParams.deviceName }}</p>
<p class="info-item">送检科室{{ infoParams.billDoctorDepartment }}</p>
</div>
<hr />
<div class="ultrasound-findings">
<h3>检查项目</h3>
<p>{{ infoParams.examItemName }}</p>
</div>
<div class="ultrasound-findings">
<h3>影像学表现</h3>
<p>{{ infoParams.examDescription }}</p>
</div>
<div class="ultrasound-recommendation">
<h3>影像学诊断</h3>
<p>{{ infoParams.diagResults }}</p>
</div>
<div style="width: 94%; position: absolute; bottom: 20px; right: 20px">
<hr />
<el-row style="font-size: 14px">
<el-col :span="6" class="pl-6px">报告医师{{ infoParams.diagDoctor }}</el-col>
<el-col :span="6"
>报告日期{{ formatDate(infoParams.diagDate as unknown as Date, 'YYYY-MM-DD') }}</el-col
>
<el-col :span="6">审核医师{{ infoParams.reviewDoctor }}</el-col>
<el-col :span="6"
>审核日期{{
formatDate(infoParams.reviewDate as unknown as Date, 'YYYY-MM-DD')
}}</el-col
>
</el-row>
<div style="font-size: 11px; text-align: center; margin-top: 16px; margin-bottom: -14px">
本报告只作临床参考不作证明材料
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { formatDate } from '@/utils/formatTime'
defineOptions({ name: 'ReportInfoCT' })
/*
* 李传洋
* ReportInfoCT
**/
/** 导入内容 **/
const infoParams = defineProps({
id: String,
examId: String,
regId: String,
orgId: String,
pname: String,
gender: String,
birthday: String,
billDoctorDepartment: String,
applicationDate: String,
examDescription: String,
diagResults: String,
examItemName: String,
deviceName: String,
deviceType: String,
diagDoctor: String,
diagDate: String,
reviewDoctor: String,
reviewDate: String
})
/** 数据内容 **/
const age = computed(() => {
let birthdate = infoParams.birthday
if (!birthdate) {
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--
}
return yearsDiff
})
/** 钩子方法 **/
onMounted(async () => {})
/** 导出内容 **/
/**
* 备注
*
* **/
</script>
<style lang="scss" scoped>
/*** 报告单 ***/
.ultrasound-report {
font-family: Arial, sans-serif;
width: 94%;
margin: 3px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 8px;
position: relative;
min-height: 750px;
}
.ultrasound-report h1 {
text-align: center;
}
.patient-info {
display: flex;
flex-wrap: wrap;
}
.patient-info p {
font-size: 14px;
margin: 4px 6px;
min-width: calc(33.33% - 2 * 6px - 2px);
}
.ultrasound-recommendation {
margin-bottom: 90px;
}
.ultrasound-findings p,
.ultrasound-recommendation p {
font-size: 16px;
margin: 5px 2px 5px 30px;
}
.ultrasound-findings h3,
.ultrasound-recommendation h3 {
margin-top: 30px;
}
</style>

View File

@ -0,0 +1,170 @@
<template>
<div class="ultrasound-report">
<h2>超声检查报告单</h2>
<hr />
<div class="patient-info">
<p class="info-item">门诊号{{ infoParams.regId }}</p>
<p class="info-item">姓名{{ infoParams.pname }}</p>
<p class="info-item">性别{{ infoParams.gender }}</p>
<p class="info-item">年龄{{ age }}</p>
<p class="info-item">检查号{{ infoParams.examId }}</p>
<p class="info-item">检查项目{{ infoParams.examItemName }}</p>
<p class="info-item">设备{{ infoParams.deviceName }}</p>
<p class="info-item">送检科室{{ infoParams.billDoctorDepartment }}</p>
</div>
<hr />
<h3>超声图像</h3>
<div class="image-gallery">
<div v-for="image in reportimages" :key="image.id">
<img alt="" style="width: 140px; height: 140px" :src="image.imgUrl" v-if="false" />
<el-image
alt=""
fit="fill"
loading="eager"
style="width: 99%; height: 99%"
:src="image.imgUrl"
:preview-src-list="[image.imgUrl]"
v-if="true"
/>
</div>
</div>
<div class="ultrasound-findings">
<h3>超声所见</h3>
<p>{{ infoParams.examDescription }}</p>
</div>
<div class="ultrasound-recommendation">
<h3>超声提示</h3>
<p>{{ infoParams.diagResults }}</p>
</div>
<div style="position: absolute; bottom: 20px; right: 20px">
<p>医生签名{{ infoParams.reviewDoctor }}</p>
</div>
</div>
</template>
<script setup lang="ts">
import { ultrasoniccomApi } from '@/api/ultrasoniccom'
defineOptions({ name: 'ReportInfoUS' })
/*
* 李传洋
* ReportInfoUS
**/
/** 导入内容 **/
const infoParams = defineProps({
id: String,
examId: String,
regId: String,
orgId: String,
pname: String,
gender: String,
birthday: String,
billDoctorDepartment: String,
applicationDate: String,
examDescription: String,
diagResults: String,
examItemName: String,
deviceName: String,
deviceType: String,
diagDoctor: String,
diagDate: String,
reviewDoctor: String,
reviewDate: String
})
/** 数据内容 **/
const age = computed(() => {
let birthdate = infoParams.birthday
if (!birthdate) {
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--
}
return yearsDiff
})
const reportimages = ref<any[]>([])
const loadimage = async (orgId: string, regId: string) => {
reportimages.value = []
const imageslist = await ultrasoniccomApi.getimageslist(orgId, regId, '1')
reportimages.value = imageslist
}
watch(
[() => infoParams.orgId, () => infoParams.regId],
([orgIdNew, regIdNew], [orgIdOld, regIdOld]) => {
console.log(orgIdOld == null, regIdOld == null)
loadimage(orgIdNew ? orgIdNew : '', regIdNew ? regIdNew : '')
},
{ deep: true }
)
/** 钩子方法 **/
onMounted(async () => {
loadimage(infoParams.orgId ? infoParams.orgId : '', infoParams.regId ? infoParams.regId : '')
})
/** 导出内容 **/
/**
* 备注
*
* **/
</script>
<style lang="scss" scoped>
/*** 报告单 ***/
.ultrasound-report {
font-family: Arial, sans-serif;
width: 94%;
margin: 3px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 8px;
position: relative;
min-height: 750px;
}
.ultrasound-report h1,
.ultrasound-report h2 {
text-align: center;
}
.patient-info {
display: flex;
flex-wrap: wrap;
}
.patient-info p {
font-size: 14px;
margin: 4px 6px;
min-width: calc(25% - 2 * 6px - 2px);
}
.ultrasound-recommendation {
margin-bottom: 90px;
}
.ultrasound-findings p,
.ultrasound-recommendation p {
font-size: 16px;
margin: 5px 2px 5px 30px;
}
.ultrasound-findings h3,
.ultrasound-recommendation h3 {
margin-top: 30px;
}
.image-gallery {
display: flex;
justify-content: space-around;
margin: 10px 0;
}
</style>

View File

@ -94,12 +94,15 @@
>
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-col>
</el-row>
</el-form>
</ContentWrap>
<ContentWrap style="height: 64px" v-show="false">
<ContentWrap style="height: 64px">
<el-row>
<el-col :offset="16" :span="8" style="text-align: right">
<el-button
@ -125,12 +128,19 @@
:row-style="{ height: '40px' }"
height="max(calc(100vh - 465px),100px)"
>
<el-table-column type="selection" align="center" width="44px" />
<el-table-column type="selection" align="center" width="42px" />
<el-table-column label="序号" align="center" width="54px">
<template #default="scope"> {{ scope.$index + 1 }} </template>
</el-table-column>
<el-table-column label="登记号" align="center" prop="regId" width="240px" />
<el-table-column label="检查号" align="center" prop="examId" width="240px" />
<el-table-column
label="检查日期"
align="center"
prop="examDate"
:formatter="dateFormatter2"
width="110px"
/>
<el-table-column label="患者姓名" align="center" prop="pname" width="130px" />
<el-table-column label="性别" align="center" prop="gender" width="54px" />
<el-table-column
@ -140,13 +150,6 @@
:formatter="dateFormatter2"
width="110px"
/>
<el-table-column
label="检查日期"
align="center"
prop="examDate"
:formatter="dateFormatter2"
width="110px"
/>
<el-table-column
label="检查项目"
header-align="center"
@ -206,7 +209,21 @@
</div>
</ContentWrap>
<el-drawer v-model="activeDrawer" direction="rtl" :with-header="false" size="74%">
<el-drawer
v-model="activeDrawer"
direction="rtl"
:with-header="false"
:size="activeDrawerSize"
@opened="drawerOpened"
@closed="
() => {
reportsList = []
reportInfoType = ''
activeTabName = ''
activeDrawerSize = '74%'
}
"
>
<div style="position: relative; z-index: 100">
<el-button
link
@ -217,7 +234,11 @@
</el-button>
</div>
<el-tabs v-model="activeTabName" style="margin-top: -8px; height: 100%">
<el-tab-pane label="诊断信息" name="diagnosisInfo">
<el-tab-pane
label="诊断信息"
name="diagnosisInfo"
v-if="activeTabName != 'reportInfoBatch'"
>
<el-form
ref="infoFormRef"
:model="infoParams"
@ -376,153 +397,64 @@
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="报告单" name="reportInfo">
<div
class="flex-center"
id="printMe"
style="min-height: calc(100% - 15px)"
v-if="reportInfoType == 'us'"
>
<div class="ultrasound-report" id="PDF">
<h2>超声检查报告单</h2>
<hr />
<div class="patient-info">
<p class="info-item">门诊号{{ infoParams.regId }}</p>
<p class="info-item">姓名{{ infoParams.pname }}</p>
<p class="info-item">性别{{ infoParams.gender }}</p>
<p class="info-item">年龄{{ age }}</p>
<p class="info-item">检查号{{ infoParams.examId }}</p>
<p class="info-item">检查项目{{ infoParams.examItemName }}</p>
<p class="info-item">设备{{ infoParams.deviceName }}</p>
<p class="info-item">送检科室{{ infoParams.billDoctorDepartment }}</p>
</div>
<hr />
<h3>超声图像</h3>
<div class="image-gallery">
<div v-for="image in reportimages" :key="image.id">
<img
alt=""
style="width: 140px; height: 140px"
:src="image.imgUrl"
v-if="false"
/>
<el-image
alt=""
fit="fill"
style="width: 99%; height: 99%"
:src="image.imgUrl"
:preview-src-list="[image.imgUrl]"
v-if="true"
/>
</div>
</div>
<div class="ultrasound-findings">
<h3>超声所见</h3>
<p>{{ infoParams.examDescription }}</p>
</div>
<div class="ultrasound-recommendation">
<h3>超声提示</h3>
<p>{{ infoParams.diagResults }}</p>
</div>
<div style="position: absolute; bottom: 20px; right: 20px">
<p>医生签名{{ infoParams.reviewDoctor }}</p>
<el-tab-pane label="报告单" name="reportInfo" v-if="activeTabName != 'reportInfoBatch'">
<div v-if="reportInfoType">
<div>
<div style="text-align: right">
<el-button type="primary" style="width: 90px" v-print="{ id: 'printMe' }">
<span>打印</span>
</el-button>
<el-divider style="margin-top: 8px; margin-bottom: 10px" />
</div>
</div>
<el-divider class="ignore-print" />
<div style="text-align: center; margin-top: 10px; margin-bottom: 12px">
<el-button type="primary" style="width: 90px" class="ignore-print" v-print="'printMe'"
>打印</el-button
>
<div id="printMe">
<template v-if="reportInfoType == 'us'">
<ReportInfoUS v-bind="{ ...infoParams }" class="page-item" />
</template>
<template v-if="reportInfoType == 'ct'">
<ReportInfoCT v-bind="{ ...infoParams }" class="page-item" />
</template>
</div>
<div style="margin-bottom: 40px"></div>
</div>
<div
class="flex-center"
id="printMe2"
style="min-height: calc(100% - 15px)"
v-if="reportInfoType == 'ct'"
>
<div class="ultrasound-report2" id="PDF">
<el-row style="font-size: 14px">
<el-col :span="12">
<h2 class="ml-6px">科右前旗康立寿医院</h2>
</el-col>
<el-col :span="12">
<h2 style="text-align: right" class="mr-6px">CT检查报告单</h2>
</el-col>
</el-row>
<hr />
<el-row style="font-size: 14px">
<el-col :span="13">
<div class="ml-6px">患者编号</div>
<div class="ml-6px">{{ infoParams.regId }}</div>
</el-col>
<el-col :span="11">
<div class="ml-6px">检查编号</div>
<div class="ml-6px">{{ infoParams.examId }}</div>
</el-col>
</el-row>
<hr />
<div class="patient-info2">
<p class="info-item" v-if="false">门诊号{{ infoParams.regId }}</p>
<p class="info-item">姓名{{ infoParams.pname }}</p>
<p class="info-item">性别{{ infoParams.gender }}</p>
<p class="info-item">年龄{{ age }}</p>
<p class="info-item" v-if="false">检查号{{ infoParams.examId }}</p>
<p class="info-item" v-if="false">检查项目{{ infoParams.examItemName }}</p>
<p class="info-item">设备{{ infoParams.deviceName }}</p>
<p class="info-item">送检科室{{ infoParams.billDoctorDepartment }}</p>
</div>
<hr />
<div class="ultrasound-findings">
<h3>检查项目</h3>
<p>{{ infoParams.examItemName }}</p>
</div>
<div class="ultrasound-findings">
<h3>影像学表现</h3>
<p>{{ infoParams.examDescription }}</p>
</div>
<div class="ultrasound-recommendation">
<h3>影像学诊断</h3>
<p>{{ infoParams.diagResults }}</p>
</div>
<div style="width: 94%; position: absolute; bottom: 20px; right: 20px">
<hr />
<el-row style="font-size: 14px">
<el-col :span="6" class="pl-6px">报告医师{{ infoParams.diagDoctor }}</el-col>
<el-col :span="6"
>报告日期{{
formatDate(infoParams.diagDate as unknown as Date, 'YYYY-MM-DD')
}}</el-col
</el-tab-pane>
<el-tab-pane
label="报告单(批量打印)"
name="reportInfoBatch"
v-if="activeTabName == 'reportInfoBatch'"
>
<div>
<div>
<div style="text-align: right">
<el-affix :offset="35">
<el-button
ref="printBatch"
type="primary"
style="width: 90px"
v-print="{ id: 'printMeBatch' }"
>
<el-col :span="6">审核医师{{ infoParams.reviewDoctor }}</el-col>
<el-col :span="6"
>审核日期{{
formatDate(infoParams.reviewDate as unknown as Date, 'YYYY-MM-DD')
}}</el-col
>
</el-row>
<span>批量打印</span>
</el-button>
</el-affix>
<el-divider style="margin-top: 8px; margin-bottom: 10px" />
</div>
</div>
<div id="printMeBatch">
<template v-for="(item, index) in reportsList" :key="item.id + '_' + index">
<div
style="
font-size: 11px;
text-align: center;
margin-top: 12px;
margin-bottom: -14px;
"
>
本报告只作临床参考不作证明材料
</div>
</div>
</div>
<el-divider class="ignore-print" />
<div style="text-align: center; margin-top: 10px; margin-bottom: 12px">
<el-button
type="primary"
style="width: 90px"
class="ignore-print"
v-print="'printMe2'"
>打印</el-button
>
class="ignore-print"
style="margin-bottom: 50px"
v-if="index && index > 0"
></div>
<ReportInfoUS
v-bind="{ ...item }"
v-if="item.deviceType && item.deviceType.trim().toLowerCase() == 'us'"
class="page-item"
/>
<ReportInfoCT v-bind="{ ...item }" v-else class="page-item" />
</template>
</div>
<div style="margin-bottom: 40px"></div>
</div>
</el-tab-pane>
</el-tabs>
@ -532,10 +464,11 @@
</template>
<script setup lang="ts">
import { formatDate, dateFormatter, dateFormatter2 } from '@/utils/formatTime'
import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
import download from '@/utils/download'
import { ReportPrintStatisticsApi } from '@/api/applyregistration/reportPrintStatistics'
import { ultrasoniccomApi } from '@/api/ultrasoniccom'
import ReportInfoCT from './ReportInfoCT.vue'
import ReportInfoUS from './ReportInfoUS.vue'
defineOptions({ name: 'ReportPrintStatistics' })
/*
@ -548,30 +481,25 @@ defineOptions({ name: 'ReportPrintStatistics' })
const queryFormRef = ref()
const infoFormRef = ref()
const infoTableRef = ref()
const printBatch = ref()
/** 数据结构 **/
const message = useMessage()
const { t } = useI18n()
const activeDrawer = ref(false)
const activeDrawerSize = ref<any>('74%')
const activeTabName = ref('diagnosisInfo')
const reportInfoType = ref('') //usct
const diagnosisInfo_readonly = ref(true)
const deviceList = ref<any[]>([])
const reportimages = ref<any[]>([])
const age = ref<any>('')
const examItemNameEdit = ref('')
const examItemNameEditShow = ref(false)
const reportsList = ref<any[]>([])
const deviceList = ref<any[]>([])
//
const queryParams0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const queryParams = ref({
pageNo: 1,
pageSize: 10,
/** 测试数据 **/
regId: '',
examId: '',
examDate_ge: '',
@ -580,15 +508,11 @@ const queryParams = ref({
deviceType: '',
pname: ''
})
const infoParams0 = ref({
doctorName: undefined,
departmentName: undefined
})
const infoParams = ref({
/** 测试数据 **/
id: '',
examId: '',
regId: '',
orgId: '',
pname: '',
gender: '',
birthday: '',
@ -628,17 +552,12 @@ const calculateAge = async (birthdate) => {
age.value = yearsDiff
}
const loadimage = async (orgId: string, regId: string) => {
const imageslist = await ultrasoniccomApi.getimageslist(orgId, regId, '1')
reportimages.value = imageslist
}
const resetDiagnosisInfo = async () => {
infoParams.value = {
/** 测试数据 **/
id: '',
examId: '',
regId: '',
orgId: '',
pname: '',
gender: '',
birthday: '',
@ -657,13 +576,21 @@ const resetDiagnosisInfo = async () => {
age.value = ''
examItemNameEdit.value = ''
examItemNameEditShow.value = false
reportInfoType.value = ''
reportimages.value = []
infoFormRef.value?.clearValidate()
}
/****** 可参考内容 ******/
/** 组件事件 **/
const drawerOpened = async () => {
try {
if (true && activeTabName && activeTabName.value == 'reportInfoBatch') {
printBatch.value.$el.click()
activeDrawer.value = false
}
} finally {
}
}
const examItemNameEdit_save = async () => {
try {
ReportPrintStatisticsApi.updateExamItemName({
@ -684,6 +611,7 @@ const examItemNameEdit_reset = async () => {
}
const getList = async () => {
infoTableRef.value?.clearSelection()
resetDiagnosisInfo()
loading.value = true
try {
@ -700,6 +628,22 @@ const handleQuery = async () => {
getList()
}
const resetQuery = async () => {
queryParams.value = {
pageNo: 1,
pageSize: 10,
regId: '',
examId: '',
examDate_ge: '',
examDate_le: '',
deviceName: '',
deviceType: '',
pname: ''
}
queryFormRef.value?.clearValidate()
handleQuery()
}
const handleRowClick = async (row) => {
resetDiagnosisInfo()
if (row) {
@ -707,17 +651,34 @@ const handleRowClick = async (row) => {
calculateAge(row.birthday)
examItemNameEdit.value = row.examItemName
examItemNameEditShow.value = true
if (row.deviceType && row.deviceType.trim().toLowerCase() == 'us') {
reportInfoType.value = 'us'
loadimage(row.orgId, row.regId)
} else reportInfoType.value = 'ct'
if (row.deviceType && row.deviceType.trim().toLowerCase() == 'us') reportInfoType.value = 'us'
else reportInfoType.value = 'ct'
}
activeTabName.value = 'diagnosisInfo'
activeDrawer.value = true
}
const handlePrint = async () => {
console.log(infoTableRef.value.getSelectionRows())
const infoList = infoTableRef.value?.getSelectionRows()
if (!(infoList && Array.isArray(infoList) && infoList.length > 0)) {
await message.alertWarning('请选择要打印的数据')
return
} else {
infoList.sort((a, b) => {
let compare = 0
//a
let examDateA = a.examDate ? a.examDate.toString().trim() : ''
//b
let examDateB = b.examDate ? b.examDate.toString().trim() : ''
//compare
compare = examDateB.localeCompare(examDateA)
return compare
})
reportsList.value = infoList
activeTabName.value = 'reportInfoBatch'
activeDrawerSize.value = 0.01
activeDrawer.value = true
}
}
/** 钩子方法 **/
@ -729,10 +690,6 @@ onMounted(async () => {
/** 防空作用域 **/
console.log(dateFormatter)
console.log(download)
console.log(message)
console.log(t)
console.log(queryParams0)
console.log(infoParams0)
//console.log(null)
/** 导出内容 **/
@ -763,82 +720,32 @@ console.log(infoParams0)
border: 1px solid #ececec;
}
/**** 超声检查报告单 ****/
.ultrasound-report {
font-family: Arial, sans-serif;
width: 94%;
margin: 6px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 8px;
position: relative;
min-height: 750px;
}
.ultrasound-report h1,
.ultrasound-report h2 {
text-align: center;
}
.patient-info {
display: flex;
flex-wrap: wrap;
}
.patient-info p {
font-size: 14px;
margin: 4px 6px;
min-width: calc(25% - 2 * 6px - 2px);
}
.ultrasound-recommendation {
margin-bottom: 90px;
}
.ultrasound-findings p,
.ultrasound-recommendation p {
font-size: 16px;
margin: 5px 2px 5px 30px;
}
.ultrasound-findings h3,
.ultrasound-recommendation h3 {
margin-top: 30px;
}
.image-gallery {
display: flex;
justify-content: space-around;
margin: 10px 0;
}
/* 不打印区域 */
/* 打印(报告单) */
@media print {
.ignore-print {
display: none;
}
}
/**** CT报告单 ****/
.ultrasound-report2 {
font-family: Arial, sans-serif;
width: 94%;
margin: 6px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 8px;
position: relative;
min-height: 750px;
}
.patient-info2 {
display: flex;
flex-wrap: wrap;
}
.patient-info2 p {
font-size: 14px;
margin: 4px 6px;
min-width: calc(33.33% - 2 * 6px - 2px);
.page-item {
border-width: 0;
height: 260mm;
page-break-after: always;
}
}
</style>
<style lang="scss">
/* 打印(全局) */
@media print {
@page {
size: auto;
margin-top: 2mm;
margin-bottom: 2mm;
}
body,
html {
height: auto !important;
}
}
</style>

View File

@ -297,14 +297,7 @@ const infoFormRef_disabled = ref(true)
const btnAdd_show = ref(true)
const btnSubmit_show = ref(false)
const btnCancel_show = ref(false)
const infoParams0 = ref({
pageNo: 1,
pageSize: 10,
doctorName: undefined,
departmentName: undefined
})
const infoParams = ref({
/** 测试数据 **/
regId: '',
regSource: '',
examIdBase: '',
@ -326,7 +319,6 @@ const examIdFirst = ref('')
/****** 自定义内容 ******/
const resetInfoForm = async () => {
infoParams.value = {
/** 测试数据 **/
regId: '',
regSource: '',
examIdBase: '',
@ -449,7 +441,6 @@ onMounted(async () => {
/** 防空作用域 **/
console.log(dateFormatter)
console.log(t)
console.log(infoParams0)
//console.log(null)
/** 导出内容 **/