@@ -49,6 +49,15 @@
< el-option label = "已作废" value = "7" / >
< / el-select >
< / el-form-item >
< el-form-item label = "关键字" >
< el-input
v-model = "filterForm.keyword"
placeholder = "申请单号 / 检查项目名称"
clearable
style = "width: 220px"
@keyup.enter ="handleSearch"
/ >
< / el-form-item >
< el-form-item >
< el-button type = "primary" @click ="handleSearch" :loading = "loading" >
< el-icon > < Search / > < / el-icon >
@@ -86,9 +95,43 @@
< span > { { parseStatus ( scope . row . status ) } } < / span >
< / template >
< / el-table-column >
< el-table-column label = "操作" align = "center" fixed = "right" >
< el-table-column label = "操作" width = "280" align = "center" fixed = "right" >
< 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 ="handleViewDetail(scope.row)" > 详情 < / el -button >
< el-button link type = "primary" @click ="handleModify(scope.row)" > 修改 < / el -button >
< el-button link type = "danger" @click ="handleDelete(scope.row)" > 删除 < / el -button >
< / template >
<!-- 已签发 : 详情 、 撤回 -- >
< template v-else-if = "scope.row.status === '1' || scope.row.status === 1" >
< el -button link type = "primary" @click ="handleViewDetail(scope.row)" > 详情 < / el -button >
< el-button link type = "warning" @click ="handleWithdraw(scope.row)" > 撤回 < / el -button >
< / 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 ="handleViewDetail(scope.row)" > 详情 < / el -button >
< 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 ="handleViewDetail(scope.row)" > 详情 < / el -button >
< el-button link type = "success" @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 ="handleViewDetail(scope.row)" > 详情 < / el -button >
< el-button link type = "primary" @click ="handlePrint(scope.row)" > 打印 < / el -button >
< el-button link type = "success" @click ="handleViewReport(scope.row)" > 看报告 < / el -button >
< / template >
<!-- 已作废 : 详情 -- >
< template v-else-if = "scope.row.status === '7' || scope.row.status === 7" >
< el -button link type = "info" @click ="handleViewDetail(scope.row)" > 详情 < / el -button >
< / template >
<!-- 其他 / 未知状态 : 仅详情 -- >
< template v-else >
< el -button link type = "primary" @click ="handleViewDetail(scope.row)" > 详情 < / el -button >
< / template >
< / template >
< / el-table-column >
< / el-table >
@@ -167,7 +210,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 { getDepartmentList } from '@/api/public.js' ;
const { proxy } = getCurrentInstance ( ) ;
@@ -179,10 +222,19 @@ const currentDetail = ref(null);
const descJsonData = ref ( null ) ;
const orgOptions = ref ( [ ] ) ;
// 获取近7天的日期范围作为默认值
const getDefaultDateRange = ( ) => {
const now = new Date ( ) ;
const endDate = now . toISOString ( ) . split ( 'T' ) [ 0 ] ;
const startDate = new Date ( now . getTime ( ) - 7 * 24 * 60 * 60 * 1000 ) . toISOString ( ) . split ( 'T' ) [ 0 ] ;
return [ startDate , endDate ] ;
} ;
// 筛选表单数据
const filterForm = ref ( {
dateRange : [ ] , // [startDate, endDate]
dateRange : getDefaultDateRange ( ) , // 默认近一周
status : '' , // 申请单状态
keyword : '' , // 关键字搜索
} ) ;
const fetchData = async ( ) => {
@@ -207,6 +259,11 @@ const fetchData = async () => {
params . status = filterForm . value . status ;
}
// 添加关键字搜索
if ( filterForm . value . keyword && filterForm . value . keyword . trim ( ) ) {
params . keyword = filterForm . value . keyword . trim ( ) ;
}
const res = await getCheck ( params ) ;
if ( res . code === 200 && res . data ) {
const raw = res . data ? . records || res . data ;
@@ -243,8 +300,9 @@ const handleSearch = async () => {
* 重置按钮处理
*/
const handleReset = ( ) => {
filterForm . value . dateRange = [ ] ;
filterForm . value . dateRange = getDefaultDateRange ( ) ;
filterForm . value . status = '' ;
filterForm . value . keyword = '' ;
fetchData ( ) ;
} ;
@@ -359,6 +417,91 @@ const handleViewDetail = async (row) => {
detailDialogVisible . value = true ;
} ;
/**
* 修改申请单(仅待签发状态)
*/
const handleModify = ( row ) => {
proxy . $modal ? . msgWarning ? . ( '修改功能需后端支持,请联系管理员' ) ;
} ;
/**
* 删除申请单(仅待签发状态)
*/
const handleDelete = ( row ) => {
proxy . $confirm ? . ( '确认删除该检查申请单吗?删除后不可恢复。' , '警告' , {
confirmButtonText : '确定' ,
cancelButtonText : '取消' ,
type : 'warning' ,
} ) . then ( async ( ) => {
try {
const res = await deleteRequestForm ( { requestFormId : row . requestFormId || row . id } ) ;
if ( res ? . code === 200 ) {
proxy . $modal ? . msgSuccess ? . ( '删除成功' ) ;
await fetchData ( ) ;
} else {
proxy . $modal ? . msgError ? . ( res ? . msg || '删除失败' ) ;
}
} catch ( e ) {
console . warn ( '删除申请单失败(可能后端未实现):' , e . message ) ;
proxy . $modal ? . msgError ? . ( '删除失败,后端服务可能未支持此功能' ) ;
}
} ) . catch ( ( ) => { } ) ;
} ;
/**
* 撤回申请单(已签发状态撤回至待签发)
*/
const handleWithdraw = ( row ) => {
proxy . $confirm ? . ( '确认撤回该检查申请单吗?撤回后状态将变为待签发。' , '撤回确认' , {
confirmButtonText : '确定' ,
cancelButtonText : '取消' ,
type : 'warning' ,
} ) . then ( async ( ) => {
try {
const res = await withdrawRequestForm ( { requestFormId : row . requestFormId || row . id } ) ;
if ( res ? . code === 200 ) {
proxy . $modal ? . msgSuccess ? . ( '撤回成功' ) ;
await fetchData ( ) ;
} else {
proxy . $modal ? . msgError ? . ( res ? . msg || '撤回失败' ) ;
}
} catch ( e ) {
console . warn ( '撤回申请单失败(可能后端未实现):' , e . message ) ;
proxy . $modal ? . msgError ? . ( '撤回失败,后端服务可能未支持此功能' ) ;
}
} ) . catch ( ( ) => { } ) ;
} ;
/**
* 打印申请单
*/
const handlePrint = ( row ) => {
// 使用浏览器原生打印功能
window . print ( ) ;
} ;
/**
* 查看检查报告
*/
const handleViewReport = async ( row ) => {
try {
const res = await getTestResult ( { encounterId : row . encounterId || patientInfo . value ? . encounterId } ) ;
if ( res ? . code === 200 && res . data ) {
const reportUrl = Array . isArray ( res . data ) ? res . data [ 0 ] ? . reportUrl : res . data ? . reportUrl ;
if ( reportUrl ) {
window . open ( reportUrl , '_blank' ) ;
} else {
proxy . $modal ? . msgWarning ? . ( '暂无检查报告' ) ;
}
} else {
proxy . $modal ? . msgWarning ? . ( '暂无检查报告' ) ;
}
} catch ( e ) {
console . warn ( '查看检查报告失败:' , e . message ) ;
proxy . $modal ? . msgError ? . ( '获取检查报告失败' ) ;
}
} ;
watch (
( ) => patientInfo . value ? . encounterId ,
( val ) => {
@@ -367,8 +510,9 @@ watch(
getLocationInfo ( ) ;
} else {
tableData . value = [ ] ;
filterForm . value . dateRange = [ ] ;
filterForm . value . dateRange = getDefaultDateRange ( ) ;
filterForm . value . status = '' ;
filterForm . value . keyword = '' ;
}
} ,
{ immediate : true }