@@ -95,9 +95,49 @@
< span > { { parseStatus ( scope . row . status ) } } < / span >
< / template >
< / el-table-column >
< el-table-column label = "操作" align = "center" fixed = "right" >
< el-table-column label = "操作" align = "center" fixed = "right" width = "240" >
< template # default = "scope" >
< el-button link type = "primary" @click ="handleViewDetail(scope.row)" > 详情 < / el -button >
<!-- 待签发 : 修改 、 删除 -- >
< template v-if = "scope.row.status === '0' || scope.row.status === 0" >
< el -button link type = "primary" @click ="handleEdit(scope.row)" > 修改 < / el -button >
< el-popconfirm
title = "确认删除该申请单?"
@confirm ="handleDelete(scope.row)"
width = "200"
>
< template # reference >
< el-button link type = "danger" > 删除 < / el-button >
< / template >
< / el-popconfirm >
< / template >
<!-- 已签发 ( 护士未校对 ) : 撤回 -- >
< template v-else-if = "scope.row.status === '1' || scope.row.status === 1" >
< el -popconfirm
title = "确认撤回该申请单?撤回后将回滚至待签发状态"
@confirm ="handleWithdraw(scope.row)"
width = "260"
>
< template # reference >
< el-button link type = "warning" > 撤回 < / el-button >
< / template >
< / el-popconfirm >
< / template >
<!-- 已校对 / 待接收 : 打印 -- >
< template v-else-if = "scope.row.status === '2' || scope.row.status === 2 || scope.row.status === '3' || scope.row.status === 3" >
< el -button link type = "primary" @click ="handlePrint(scope.row)" > 打印 < / el -button >
< / template >
<!-- 已接收 / 已检查 : 打印 、 看报告 -- >
< template v-else-if = "scope.row.status === '4' || scope.row.status === 4 || scope.row.status === '5' || scope.row.status === 5" >
< el -button link type = "primary" @click ="handlePrint(scope.row)" > 打印 < / el -button >
< el-button link type = "primary" @click ="handleViewReport(scope.row)" > 看报告 < / el -button >
< / template >
<!-- 已出报告 : 打印 、 看报告 -- >
< template v-else-if = "scope.row.status === '6' || scope.row.status === 6" >
< el -button link type = "primary" @click ="handlePrint(scope.row)" > 打印 < / el -button >
< el-button link type = "success" @click ="handleViewReport(scope.row)" > 看报告 < / el -button >
< / template >
<!-- 已作废 : 仅详情 -- >
< / template >
< / el-table-column >
< / el-table >
@@ -169,6 +209,60 @@
< el-button @click ="detailDialogVisible = false" > 关闭 < / el -button >
< / template >
< / el-dialog >
<!-- 修改申请单弹窗 -- >
< el-dialog
v-model = "editDialogVisible"
title = "修改检查申请"
width = "800px"
destroy -on -close
top = "5vh"
:close-on-click-modal = "false"
>
< div v-if = "editDetail" class="applicationShow-container" >
< el -form :model = "editForm" label -width = " 120px " >
< el-form-item label = "申请单名称" >
< el-input v-model = "editForm.name" / >
< / el-form-item >
< el-form-item label = "临床诊断" >
< el-input v-model = "editForm.clinicalDiagnosis" type="textarea" :rows="2" / >
< / el-form-item >
< el-form-item label = "注意事项" >
< el-input v-model = "editForm.attention" type="textarea" :rows="2" / >
< / el-form-item >
< div v-if = "editDetail.requestFormDetailList && editDetail.requestFormDetailList.length" >
< el -divider > 申请项目 < / el-divider >
< el-table :data = "editDetail.requestFormDetailList" border size = "small" >
< el-table-column type = "index" label = "序号" width = "60" align = "center" / >
< el-table-column prop = "adviceName" label = "医嘱名称" / >
< el-table-column prop = "quantity" label = "数量" width = "80" align = "center" / >
< el-table-column prop = "unitCode_dictText" label = "单位" width = "100" / >
< el-table-column prop = "totalPrice" label = "总价" width = "100" align = "right" / >
< / el-table >
< / div >
< / el-form >
< / div >
< template # footer >
< el-button @click ="editDialogVisible = false" > 取消 < / el -button >
< el-button type = "primary" @click ="handleSaveEdit" :loading = "saveLoading" > 保存 < / el-button >
< / template >
< / el-dialog >
<!-- 报告查看弹窗 -- >
< el-dialog
v-model = "reportDialogVisible"
title = "检查报告"
width = "900px"
destroy -on -close
top = "5vh"
:close-on-click-modal = "false"
>
< div v-if = "reportUrl" style="min-height: 500px;" >
< iframe :src = "reportUrl" style = "width: 100%; height: 500px; border: none;" / >
< / div >
< el-empty v-else description = "暂无报告数据" / >
< template # footer >
< el-button @click ="reportDialogVisible = false" > 关闭 < / el -button >
< / template >
< / el-dialog >
< / div >
< / template >
@@ -176,7 +270,7 @@
import { computed , getCurrentInstance , ref , watch } from 'vue' ;
import { Refresh , Search } from '@element-plus/icons-vue' ;
import { patientInfo } from '../../store/patient.js' ;
import { getCheck } from './api' ;
import { getCheck , deleteRequestForm , withdrawRequestForm , getTestResult } from './api' ;
import { getOrgList } from '@/views/doctorstation/components/api.js' ;
const { proxy } = getCurrentInstance ( ) ;
@@ -188,6 +282,16 @@ const currentDetail = ref(null);
const descJsonData = ref ( null ) ;
const orgOptions = ref ( [ ] ) ;
// 修改申请单相关
const editDialogVisible = ref ( false ) ;
const editDetail = ref ( null ) ;
const editForm = ref ( { } ) ;
const saveLoading = ref ( false ) ;
// 报告查看相关
const reportDialogVisible = ref ( false ) ;
const reportUrl = ref ( '' ) ;
// 筛选表单数据
const getDefaultDateRange = ( ) => {
const now = new Date ( ) ;
@@ -364,6 +468,217 @@ const handleViewDetail = (row) => {
detailDialogVisible . value = true ;
} ;
/**
* 修改申请单
*/
const handleEdit = ( row ) => {
editDetail . value = row ;
// 解析 descJson 为表单数据
const form = { name : row . name || '' } ;
if ( row . descJson ) {
try {
const desc = JSON . parse ( row . descJson ) ;
form . clinicalDiagnosis = desc . clinicalDiagnosis || '' ;
form . attention = desc . attention || '' ;
form . symptom = desc . symptom || '' ;
form . sign = desc . sign || '' ;
} catch ( e ) {
console . error ( '解析 descJson 失败:' , e ) ;
}
}
editForm . value = form ;
editDialogVisible . value = true ;
} ;
/**
* 保存修改
*/
const handleSaveEdit = async ( ) => {
if ( ! editDetail . value ? . requestFormId ) {
proxy . $modal ? . msgWarning ? . ( '申请单ID不存在' ) ;
return ;
}
saveLoading . value = true ;
try {
// 复用 save-check 接口进行更新(传入 requestFormId 即为编辑场景)
const res = await proxy . $http ? . post ? . ( '/reg-doctorstation/request-form/save-check' , {
requestFormId : editDetail . value . requestFormId ,
encounterId : editDetail . value . encounterId ,
patientId : editDetail . value . patientId ,
name : editForm . value . name ,
organizationId : editDetail . value . inHospitalOrgId || patientInfo . value ? . inHospitalOrgId ,
descJson : JSON . stringify ( {
clinicalDiagnosis : editForm . value . clinicalDiagnosis ,
attention : editForm . value . attention ,
symptom : editForm . value . symptom ,
sign : editForm . value . sign ,
} ) ,
activityList : [ ] , // 修改场景仅更新描述信息,不修改项目
} ) ;
if ( res ? . code === 200 ) {
proxy . $modal ? . msgSuccess ? . ( '修改成功' ) ;
editDialogVisible . value = false ;
await fetchData ( ) ;
} else {
proxy . $modal ? . msgError ? . ( res ? . msg || '修改失败' ) ;
}
} catch ( e ) {
console . warn ( '修改申请单失败:' , e . message ) ;
proxy . $modal ? . msgError ? . ( '修改失败: ' + ( e . message || '网络异常' ) ) ;
} finally {
saveLoading . value = false ;
}
} ;
/**
* 删除申请单(仅待签发状态可删除)
*/
const handleDelete = async ( row ) => {
if ( ! row . requestFormId ) {
proxy . $modal ? . msgWarning ? . ( '申请单ID不存在' ) ;
return ;
}
try {
const res = await deleteRequestForm ( { requestFormId : row . requestFormId } ) ;
if ( res ? . code === 200 ) {
proxy . $modal ? . msgSuccess ? . ( '删除成功' ) ;
await fetchData ( ) ;
} else {
proxy . $modal ? . msgError ? . ( res ? . msg || '删除失败' ) ;
}
} catch ( e ) {
console . warn ( '删除申请单失败:' , e . message ) ;
proxy . $modal ? . msgError ? . ( '删除失败: ' + ( e . message || '网络异常' ) ) ;
}
} ;
/**
* 撤回申请单(已签发状态撤回至待签发)
*/
const handleWithdraw = async ( row ) => {
if ( ! row . requestFormId ) {
proxy . $modal ? . msgWarning ? . ( '申请单ID不存在' ) ;
return ;
}
try {
const res = await withdrawRequestForm ( { requestFormId : row . requestFormId } ) ;
if ( res ? . code === 200 ) {
proxy . $modal ? . msgSuccess ? . ( '撤回成功' ) ;
await fetchData ( ) ;
} else {
proxy . $modal ? . msgError ? . ( res ? . msg || '撤回失败' ) ;
}
} catch ( e ) {
console . warn ( '撤回申请单失败:' , e . message ) ;
proxy . $modal ? . msgError ? . ( '撤回失败: ' + ( e . message || '网络异常' ) ) ;
}
} ;
/**
* 打印申请单
*/
const handlePrint = ( row ) => {
// 打开新窗口进行打印
const printWindow = window . open ( '' , '_blank' ) ;
if ( ! printWindow ) {
proxy . $modal ? . msgWarning ? . ( '请允许浏览器弹出窗口以进行打印' ) ;
return ;
}
const content = buildPrintContent ( row ) ;
printWindow . document . write ( `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>检查申请单打印</title>
<style>
body { font-family: "Microsoft YaHei", sans-serif; padding: 20px; font-size: 14px; }
h2 { text-align: center; margin-bottom: 20px; }
table { width: 100%; border-collapse: collapse; margin-top: 10px; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background: #f5f5f5; }
.info-row { margin: 8px 0; }
.label { font-weight: bold; display: inline-block; width: 100px; }
@media print { .no-print { display: none; } }
</style>
</head>
<body>
${ content }
<div class="no-print" style="text-align: center; margin-top: 20px;">
<button onclick="window.print()">打印</button>
<button onclick="window.close()">关闭</button>
</div>
</body>
</html>
` ) ;
printWindow . document . close ( ) ;
} ;
/**
* 构建打印内容
*/
const buildPrintContent = ( row ) => {
let descHtml = '' ;
if ( row . descJson ) {
try {
const desc = JSON . parse ( row . descJson ) ;
descHtml = Object . entries ( labelMap )
. filter ( ( [ key ] ) => desc [ key ] )
. map ( ( [ key , label ] ) => ` <div class="info-row"><span class="label"> ${ label } :</span> ${ desc [ key ] } </div> ` )
. join ( '' ) ;
} catch ( e ) {
console . error ( '解析 descJson 失败:' , e ) ;
}
}
let itemsHtml = '' ;
if ( row . requestFormDetailList && row . requestFormDetailList . length ) {
itemsHtml = `
<h3>申请项目</h3>
<table>
<tr><th>序号</th><th>医嘱名称</th><th>数量</th><th>单位</th><th>总价</th></tr>
${ row . requestFormDetailList . map ( ( item , i ) => `
<tr>
<td> ${ i + 1 } </td>
<td> ${ item . adviceName || '-' } </td>
<td> ${ item . quantity || '-' } </td>
<td> ${ item . unitCode _dictText || '-' } </td>
<td> ${ item . totalPrice || '-' } </td>
</tr>
` ) . join ( '' ) }
</table>
` ;
}
return `
<h2>检查申请单</h2>
<div class="info-row"><span class="label">患者姓名:</span> ${ row . patientName || '-' } </div>
<div class="info-row"><span class="label">申请单名称:</span> ${ row . name || '-' } </div>
<div class="info-row"><span class="label">创建时间:</span> ${ row . createTime || '-' } </div>
<div class="info-row"><span class="label">处方号:</span> ${ row . prescriptionNo || '-' } </div>
<div class="info-row"><span class="label">申请者:</span> ${ row . requesterId _dictText || '-' } </div>
<div class="info-row"><span class="label">申请单状态:</span> ${ parseStatus ( row . status ) } </div>
${ descHtml ? ` <h3>申请单描述</h3> ${ descHtml } ` : '' }
${ itemsHtml }
` ;
} ;
/**
* 查看报告
*/
const handleViewReport = async ( row ) => {
reportUrl . value = '' ;
reportDialogVisible . value = true ;
try {
const res = await getTestResult ( { encounterId : row . encounterId , requestFormId : row . requestFormId } ) ;
if ( res ? . code === 200 && res ? . data ) {
reportUrl . value = res . data ;
} else {
console . warn ( '获取检查报告失败:' , res ? . msg || '无数据' ) ;
}
} catch ( e ) {
console . warn ( '获取检查报告异常:' , e . message ) ;
}
} ;
watch (
( ) => patientInfo . value ? . encounterId ,
( val ) => {