ECG/src/views/ECG/ECGWaring/ECGReport.vue

327 lines
11 KiB
Vue

<template>
<el-dialog v-model="dialogVisible" title="危急值上报详情" width="1000px" style="height: 720px">
<div class="modal">
<div class="modal-content">
<div class="left-side">
<!-- 左边的内容 -->
<el-timeline style="max-width: 600px">
<el-timeline-item
:timestamp="formattedDate(warintinfo?.reportDate)"
placement="top"
type="primary"
:hollow="true"
>
<span style="font-size: 18px;">危急值上报</span>
</el-timeline-item>
<el-timeline-item
:timestamp="new Date(conreadDateTime).toLocaleString().replace(/\//g, '-')"
placement="top"
type="primary"
:hollow="true"
>
<span style="font-size: 18px;">检查端收到提醒</span>
</el-timeline-item>
<el-timeline-item
:timestamp="formData.checkDateTime"
placement="top"
type="primary"
:hollow="true"
v-if="isshowwjztime"
>
<span style="font-size: 18px;">检查端确认危急值</span>
</el-timeline-item>
<el-timeline-item
:timestamp="formData.checkDateTime"
placement="top"
type="primary"
:hollow="true"
v-if="isshowwjztime"
>
<span style="font-size: 18px;">检查端发送确认回执</span>
</el-timeline-item>
</el-timeline>
</div>
<div class="right-side">
<!-- 基础信息 -->
<div class="info-section">
<div class="section-title"><span style="margin-left: 5px;" >基础信息</span></div>
<el-form label-width="80px">
<el-row :gutter="24">
<el-col :span="9">
<el-form-item label="检查日期:" label-width="80">
<el-input
style="width: 160px"
:value="formatDate(rowinfo.examDate, 'YYYY-MM-DD HH:mm:ss')"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="姓名:" label-width="60">
<el-input :value="rowinfo.pname" style="width: 100px" disabled />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="性别:" label-width="50">
<el-input :value="rowinfo.gender" style="width: 100px" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="9">
<el-form-item label="检查编号:">
<el-input :value="rowinfo.examId" style="width: 160px" disabled />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="检查机构:" label-width="80">
<el-input :value="rowinfo.orgName" style="width: 200px" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 上报信息 -->
<div class="info-section">
<div class="section-title"><span style="margin-left: 5px;" >上报信息</span></div>
<el-form label-width="80px">
<el-row :gutter="24">
<el-col :span="9">
<el-form-item label="上报机构:" label-width="100">
<el-input :value="warintinfo.reportorgName" style="width: 160px" disabled />
</el-form-item>
</el-col>
<el-col :span="6" style="padding: 0px">
<el-form-item label="上报医生:">
<el-input :value="warintinfo.reportDoctor" style="width: 100px" disabled />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="上报时间:" label-width="80">
<el-input
style="width: 160px"
:value="formatDate(warintinfo.reportDate, 'YYYY-MM-DD HH:mm:ss')"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="危急值内容:" label-width="100px">
<el-input v-model="warintinfo.warningContent" type="textarea" rows="3" :readonly="isreadonly"/>
</el-form-item>
<el-form-item label="备注:" label-width="100px">
<el-input v-model="warintinfo.remark" type="textarea" rows="2" :readonly="isreadonly"/>
</el-form-item>
</el-form>
</div>
<!-- 处理信息 -->
<div class="info-section">
<div class="section-title"><span style="margin-left: 5px;" >处理信息</span></div>
<el-form label-width="80px">
<el-row :gutter="24">
<el-col :span="7">
<el-form-item label="接报医生:">
<el-input v-model="receivename" :readonly="isreadonly" />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="处理医生:">
<el-input v-model="dealname" :readonly="isreadonly"/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="确认时间:">
<el-date-picker
v-model="formData.checkDateTime"
type="datetime"
placeholder="检查时间"
style="width: 190px"
:readonly="isreadonly"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注:">
<el-input v-model="warintinfo.readremark" type="textarea" rows="2" disabledz :readonly="isreadonly"/>
</el-form-item>
</el-form>
</div>
<el-form-item>
<el-button type="primary" @click="save" :disabled="issaveshow">确认</el-button>
<el-button @click="() => (dialogVisible = false)">取消</el-button>
</el-form-item>
</div>
</div>
</div>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
import { WarningApi, WarningVO } from '@/api/system/warning'
import { formatDate, getNowDateTime } from '@/utils/formatTime'
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // 弹窗的标题
const warintinfo = ref()
const rowinfo = ref() //外面传递的患者信息
const conreadDateTime = ref() //检查段收到时间
const Profilevo = ref<ProfileVO>({} as ProfileVO) //当前登录人信息
const issaveshow = ref(false) //是否显示保存按钮
const receivename = ref() //接受医生
const dealname = ref() //处理医生
const isshowwjztime = ref(false) //是否显示确认危急值时间
const isreadonly=ref<any>(false)//
const opendiag = async (row) => {
//赋值传递过来的患者数据
rowinfo.value = row
resetForm()
await getlogininfo() // 使用 ISO 格式的时间字符串
//查询当前患者的危急值相关信息
const data = await WarningApi.getexmidororgiddata(rowinfo.value.examId, rowinfo.value.orgId)
warintinfo.value = data
//处理时间轴相关
if (!data.readDateTime) {
await updatereadDateTime(data.id)
} else {
conreadDateTime.value = data.readDateTime
}
//确认时间 读取库 没有就当前时间
if (data.checkDateTime) {
formData.value.checkDateTime = formattedDate(data.checkDateTime)
isshowwjztime.value = true
issaveshow.value = true
} else {
formData.value.checkDateTime = new Date().toLocaleString().replace(/\//g, '-')
isshowwjztime.value = false
issaveshow.value = false
}
receivename.value = Profilevo.value.nickname
dealname.value = Profilevo.value.nickname
dialogVisible.value = true
isreadonly.value= issaveshow.value?true:false
}
//确认
async function save() {
formData.value.id = warintinfo.value.id
formData.value.receiveDoctor = receivename.value
formData.value.dealDoctor = dealname.value
formData.value.readremark = warintinfo.value.readremark
const savedata = formData.value as unknown as WarningVO
const data = await WarningApi.SaveupdateWarning(savedata)
if (data) {
isshowwjztime.value = true
issaveshow.value = true
await WarningApi.sendMessage('144',rowinfo.value.pname)
message.alertSuccess('确认成功')
isreadonly.value=true
}
}
//更新检查段收到危急值时间
async function updatereadDateTime(id) {
conreadDateTime.value = new Date().toLocaleString().replace(/\//g, '-')
await WarningApi.updateWarningdate(id, conreadDateTime.value, '',rowinfo.value.orgId)
}
//获取当前登录人信息
const getlogininfo = async () => {
Profilevo.value = await getUserProfile()
}
nextTick(async () => {})
// 创建一个计算属性来转换时间戳
function formattedDate(timestamp) {
const date = new Date(timestamp)
const strdata = formatDate(date, 'YYYY-MM-DD HH:mm:ss')
return strdata // 转换为本地日期时间字符串
}
const formData = ref({
id: undefined,
orgId: undefined,
examId: undefined,
regId: undefined,
reportOrgId: '',
reportorgName: undefined,
reportDoctor: '',
reportDate: undefined,
warningContent: undefined,
receiveDoctor: undefined,
dealDoctor: undefined,
checkDateTime: '',
remark: undefined,
warningProcess: undefined,
readremark: undefined
})
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
orgId: undefined,
examId: undefined,
regId: undefined,
reportOrgId: '',
reportorgName: undefined,
reportDoctor: '',
reportDate: undefined,
warningContent: undefined,
receiveDoctor: undefined,
dealDoctor: undefined,
checkDateTime: '',
remark: undefined,
warningProcess: undefined,
readremark: undefined
}
//重置一下数据
warintinfo.value = ''
}
defineExpose({ opendiag }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
/** */
defineOptions({ name: 'ECGReport' })
</script>
<style lang="css" scoped>
.modal {
width: 950px;
height: 650px;
display: flex;
justify-content: center;
}
.modal-content {
display: flex;
width: 100%; /* 可以根据需要调整宽度 */
}
.left-side {
flex: 1; /* 左边div占据剩余空间的比例 */
}
.right-side {
flex: 3;
background-color: #fff;
}
.info-section {
margin-bottom: 10px;
padding: 2px;
border: 1px solid #d7d7d7;
}
.section-title {
font-size: 16px;
font-weight: bold;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #d7d7d7;
}
</style>