diff --git a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue index 5ede68657..3881938f1 100755 --- a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue +++ b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue @@ -183,6 +183,26 @@ 关闭 + + + + + + @@ -192,12 +212,17 @@ import {Refresh, Search} from '@element-plus/icons-vue'; import {patientInfo} from '../../store/patient.js'; import {getInspection, deleteRequestForm, withdrawRequestForm} from './api'; import {getDepartmentList} from '@/api/public.js'; +import LaboratoryTests from '../order/applicationForm/laboratoryTests.vue'; +import {saveInspection} from '../order/applicationForm/api.js'; const { proxy } = getCurrentInstance(); const tableData = ref([]); const loading = ref(false); const detailDialogVisible = ref(false); +const editDialogVisible = ref(false); +const editRowData = ref(null); +const editFormRef = ref(null); const currentDetail = ref(null); const descJsonData = ref(null); const orgOptions = ref([]); @@ -433,10 +458,32 @@ const handleViewDetail = async (row) => { /** * 修改检验申请单(待签发状态) */ -const handleEdit = (row) => { - // 复用详情查看逻辑,后续可扩展为打开编辑弹窗 - handleViewDetail(row); - proxy.$modal?.msgInfo?.('修改功能待接入,请通过详情弹窗查看后重新开立'); +const handleEdit = async (row) => { + // 确保科室数据已加载 + if (!orgOptions.value || orgOptions.value.length === 0) { + await getLocationInfo(); + } + editRowData.value = row; + editDialogVisible.value = true; +}; + +/** + * 编辑弹窗提交成功回调 + */ +const handleEditSubmitOk = async () => { + editDialogVisible.value = false; + editRowData.value = null; + proxy.$modal?.msgSuccess?.('修改成功'); + await fetchData(); +}; + +/** + * 编辑弹窗提交按钮 + */ +const submitEditForm = () => { + if (editFormRef.value?.submit) { + editFormRef.value.submit(); + } }; /** @@ -450,7 +497,7 @@ const handleDelete = async (row) => { } try { - const res = await deleteRequestForm({ prescriptionNo: row.prescriptionNo }); + const res = await deleteRequestForm({ requestFormId: row.requestFormId }); if (res?.code === 200) { proxy.$modal?.msgSuccess?.('删除成功'); await fetchData(); @@ -473,7 +520,7 @@ const handleWithdraw = async (row) => { } try { - const res = await withdrawRequestForm({ prescriptionNo: row.prescriptionNo }); + const res = await withdrawRequestForm({ requestFormId: row.requestFormId }); if (res?.code === 200) { proxy.$modal?.msgSuccess?.('撤回成功'); await fetchData(); diff --git a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue index 47e1b591e..617a0a905 100755 --- a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue +++ b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue @@ -155,7 +155,13 @@ const findTreeItem = (list, id) => { return null; }; const emits = defineEmits(['submitOk']); -const props = defineProps({}); +const props = defineProps({ + editData: { + type: Object, + default: null, + }, +}); +const isEditMode = computed(() => !!props.editData?.requestFormId); const state = reactive({}); const applicationListAll = ref([]); const loading = ref(false); @@ -331,6 +337,44 @@ watch( projectWithDepartment(newValue, 1); } ); + +// 编辑模式下,回显已有数据 +watch( + () => props.editData, + (newData) => { + if (!newData || !newData.requestFormId) return; + + // 解析 descJson 回填表单 + if (newData.descJson) { + try { + const obj = JSON.parse(newData.descJson); + Object.keys(form).forEach((key) => { + if (obj[key] !== undefined) { + form[key] = obj[key]; + } + }); + } catch (e) { + console.error('解析 descJson 失败:', e); + } + } + + // 回填已选项目 + if (newData.requestFormDetailList && newData.requestFormDetailList.length > 0) { + // 从全部数据中匹配已选项目 + const selectedIds = []; + newData.requestFormDetailList.forEach((detail) => { + const matched = applicationListAll.value.find( + (item) => item.adviceName === detail.adviceName + ); + if (matched) { + selectedIds.push(matched.adviceDefinitionId); + } + }); + transferValue.value = selectedIds; + } + }, + { immediate: true } +); const submit = () => { if (transferValue.value.length == 0) { return proxy.$message.error('请选择申请单'); @@ -363,14 +407,14 @@ const submit = () => { patientId: patientInfo.value.patientId, //患者ID encounterId: patientInfo.value.encounterId, // 就诊ID organizationId: patientInfo.value.inHospitalOrgId, // 医疗机构ID - requestFormId: '', // 申请单ID + requestFormId: isEditMode.value ? props.editData.requestFormId : '', // 申请单ID(编辑模式传入,新增为空) name: '检验申请单', descJson: JSON.stringify(form), categoryEnum: '21', // 21 检验 22 检查 23 输血 24 手术(避开 adviceType 1-6 碰撞) }; saveInspection(params).then((res) => { if (res.code === 200) { - proxy.$message.success(res.msg); + proxy.$message.success(isEditMode.value ? '修改成功' : res.msg); transferValue.value = []; emits('submitOk'); } else {