Compare commits
7 Commits
bug463-fix
...
7caac9e9a1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7caac9e9a1 | ||
|
|
e43ca4254b | ||
|
|
c954596625 | ||
|
|
3e5db107fb | ||
|
|
26cf16067b | ||
|
|
6648cd2e50 | ||
|
|
f1a5b17a83 |
@@ -13,16 +13,7 @@
|
||||
drf.requester_id,
|
||||
drf.create_time,
|
||||
ap.NAME AS patient_name,
|
||||
CASE MIN(wsr.status_enum)
|
||||
WHEN 1 THEN 0
|
||||
WHEN 2 THEN 1
|
||||
WHEN 3 THEN 4
|
||||
WHEN 4 THEN 4
|
||||
WHEN 5 THEN 5
|
||||
WHEN 6 THEN 5
|
||||
WHEN 7 THEN 5
|
||||
ELSE NULL
|
||||
END AS status
|
||||
drf.status
|
||||
FROM doc_request_form AS drf
|
||||
LEFT JOIN adm_encounter AS ae ON ae.ID = drf.encounter_id
|
||||
AND ae.delete_flag = '0'
|
||||
@@ -40,16 +31,7 @@
|
||||
AND drf.create_time <= (#{endDate}::date + INTERVAL '1 day' - INTERVAL '1 second')
|
||||
</if>
|
||||
<if test="status != null and status != ''">
|
||||
AND CASE MIN(wsr.status_enum)
|
||||
WHEN 1 THEN 0
|
||||
WHEN 2 THEN 1
|
||||
WHEN 3 THEN 4
|
||||
WHEN 4 THEN 4
|
||||
WHEN 5 THEN 5
|
||||
WHEN 6 THEN 5
|
||||
WHEN 7 THEN 5
|
||||
ELSE NULL
|
||||
END = #{status}::integer
|
||||
AND drf.status = #{status}::integer
|
||||
</if>
|
||||
<if test="keyword != null and keyword != ''">
|
||||
AND (drf.prescription_no ILIKE '%' || #{keyword} || '%'
|
||||
|
||||
@@ -626,14 +626,19 @@ function getList() {
|
||||
loading.value = false
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
loading.value = true
|
||||
getSurgeryPage({
|
||||
pageNo: 1,
|
||||
pageSize: 100,
|
||||
encounterId: props.patientInfo.encounterId
|
||||
}).then((res) => {
|
||||
surgeryList.value = res.data.records || []
|
||||
if (res.code === 200) {
|
||||
surgeryList.value = res.data?.records || []
|
||||
} else {
|
||||
proxy.$modal.msgError(res.msg || '数据加载失败,请稍后重试')
|
||||
surgeryList.value = []
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('获取手术列表失败:', error)
|
||||
proxy.$modal.msgError('数据加载失败,请稍后重试')
|
||||
|
||||
@@ -151,8 +151,8 @@
|
||||
@saved="() => prescriptionRef?.getListInfo()" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="手术申请" name="surgery">
|
||||
<surgeryApplication :patientInfo="patientInfo" :activeTab="activeTab" ref="surgeryRef"
|
||||
@saved="() => prescriptionRef?.getListInfo()" />
|
||||
<surgeryApplication :patientInfo="patientInfo" :activeTab="activeTab" ref="surgeryRef"
|
||||
@saved="() => { prescriptionRef?.getListInfo(); surgeryRef?.getList() }" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="电子处方" name="eprescription">
|
||||
<eprescriptionlist :patientInfo="patientInfo" ref="eprescriptionRef" />
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -296,6 +296,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-if="!groupSetLoading && groupSetList.length === 0" description="暂无划价组套数据" :image-size="80" />
|
||||
<div style="margin-top: 15px; text-align: right">
|
||||
<el-button @click="groupSetDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="applyGroupSet" :disabled="!selectedGroupSet">应用</el-button>
|
||||
@@ -798,6 +799,7 @@ function resetData() {
|
||||
|
||||
// 划价组套相关功能
|
||||
function openGroupSetDialog() {
|
||||
console.log('openGroupSetDialog called');
|
||||
groupSetDialogVisible.value = true;
|
||||
groupSetSearchText.value = '';
|
||||
selectedGroupSet.value = null;
|
||||
@@ -834,8 +836,9 @@ function loadGroupSets() {
|
||||
groupSetList.value = rawList;
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
console.warn('组套列表加载失败(可能无权限)');
|
||||
.catch((err) => {
|
||||
console.warn('组套列表加载失败(可能无权限):', err);
|
||||
ElMessage.warning('组套列表加载失败,当前暂无可用组套');
|
||||
groupSetList.value = [];
|
||||
})
|
||||
.finally(() => {
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
:deadline="deadline"
|
||||
:therapyEnum="therapyEnum"
|
||||
/>
|
||||
<SummaryMedicineList v-else :therapyEnum="therapyEnum" />
|
||||
<SummaryMedicineList v-else ref="summaryMedicineRefs" :therapyEnum="therapyEnum" />
|
||||
<!-- <el-tabs v-model="activeName" class="demo-tabs centered-tabs" @tab-change="handleClick">
|
||||
<el-tab-pane
|
||||
v-for="tab in prescriptionTabs"
|
||||
@@ -129,6 +129,7 @@ const therapyEnum = ref(undefined);
|
||||
|
||||
// 存储子组件引用的对象
|
||||
const prescriptionRefs = ref();
|
||||
const summaryMedicineRefs = ref();
|
||||
|
||||
const navigationButtons = inpatientNurseNavs;
|
||||
|
||||
@@ -165,7 +166,11 @@ function handleClick(tabName) {
|
||||
|
||||
function handleGetPrescription() {
|
||||
chooseAll.value = false;
|
||||
prescriptionRefs.value?.handleGetPrescription();
|
||||
if (isDetails.value == '1') {
|
||||
prescriptionRefs.value?.handleGetPrescription();
|
||||
} else {
|
||||
summaryMedicineRefs.value?.handleGetPrescription();
|
||||
}
|
||||
}
|
||||
|
||||
function handelSwicthChange(value) {
|
||||
|
||||
@@ -803,7 +803,7 @@
|
||||
</el-dialog>
|
||||
|
||||
<!-- 手术计费弹窗 -->
|
||||
<el-dialog :title="chargeDialogTitle" v-model="showChargeDialog" width="1400px" @close="closeChargeDialog" append-to-body>
|
||||
<el-dialog :title="chargeDialogTitle" v-model="showChargeDialog" width="1400px" @close="closeChargeDialog" append-to-body destroy-on-close>
|
||||
<div style="display: flex; justify-content: space-between; height: 80vh">
|
||||
<div style="width: 100%; border: 1px solid #eee; position: relative">
|
||||
<div style="padding: 10px; border: 1px solid #eee; height: 50px; border-left: 0">
|
||||
@@ -1456,11 +1456,14 @@ async function handleChargeCharge(row) {
|
||||
}
|
||||
|
||||
// 关闭计费弹窗
|
||||
function closeChargeDialog() {
|
||||
async function closeChargeDialog() {
|
||||
// 先关闭 prescriptionlist 内所有已打开的项目字典 popover
|
||||
if (prescriptionRef.value && prescriptionRef.value.closeAllPopovers) {
|
||||
prescriptionRef.value.closeAllPopovers()
|
||||
}
|
||||
// 等待 Vue 完成 popover 可见性更新的 DOM 操作,
|
||||
// 因为 el-popover 通过 teleport 渲染在 body 上,需要在 dialog 卸载前完成清理
|
||||
await nextTick()
|
||||
// 清空数据,避免下次打开时使用缓存
|
||||
showChargeDialog.value = false
|
||||
chargePatientInfo.value = {}
|
||||
|
||||
Reference in New Issue
Block a user