Compare commits

..

4 Commits

Author SHA1 Message Date
荀彧
c004c145f4 Fix Bug #476: 检查申请单详情界面缺失紧急程度、过敏史、检查目的等核心字段
在 examineApplication.vue 的 labelMap 中补充 urgencyLevel、allergyHistory、
examinationPurpose、expectedExaminationTime、medicalHistorySummary、allergyConfirmed
共6个缺失字段的中文标签映射,并新增 transformField 函数将 urgencyLevel 的
emergency/routine 转换为"急诊"/"普通"显示。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 18:17:52 +08:00
关羽
88b1debfe5 Fix Bug #471: 手术管理-门诊手术安排:手术申请查询结果中混入住院检验申请单数据(脏数据)
根因:getSurgeryRequestFormPage 接口构建 RequestFormDto 时 typeCode 传了 null,
导致 SQL 中 type_code 过滤条件被跳过,查出所有申请单(包括 typeCode=22 的住院检验申请单)。
修复:传入 ActivityDefCategory.PROCEDURE.getCode()(值为"24")作为 typeCode,
确保只查询手术类型的申请单。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 18:13:43 +08:00
43d4d18a09 bug515 [住院医生站-临床医嘱] 点击“签发”检验医嘱后系统陷入死循环,Loading无法消失 后端advice_type映射错误 2026-05-13 18:13:41 +08:00
a483f5a7f2 bug512 [住院护士站-汇总发药申请] “全选”开关功能失效,点击后下方医嘱明细未能联动勾选 2026-05-13 18:13:41 +08:00
6 changed files with 85 additions and 24 deletions

View File

@@ -163,7 +163,7 @@ public class RequestFormManageController {
@RequestParam(required = false) Long applyDeptId, @RequestParam(required = false) Long applyDeptId,
@RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) { @RequestParam(defaultValue = "10") Integer pageSize) {
RequestFormDto dto = new RequestFormDto(surgeryNo, null, applyTimeStart, applyTimeEnd, RequestFormDto dto = new RequestFormDto(surgeryNo, ActivityDefCategory.PROCEDURE.getCode(), applyTimeStart, applyTimeEnd,
mainDoctorId, applyDeptId, pageNo, pageSize); mainDoctorId, applyDeptId, pageNo, pageSize);
return R.ok(iRequestFormManageAppService.getRequestFormPage(dto)); return R.ok(iRequestFormManageAppService.getRequestFormPage(dto));
} }

View File

@@ -288,7 +288,7 @@
AND T1.refund_device_id IS NULL AND T1.refund_device_id IS NULL
ORDER BY T1.status_enum) ORDER BY T1.status_enum)
UNION ALL UNION ALL
(SELECT CASE WHEN T1.category_enum = 4 THEN 6 ELSE COALESCE(T1.category_enum, 3) END AS advice_type, (SELECT CASE WHEN T1.category_enum = 4 THEN 6 ELSE 3 END AS advice_type,
T1.id AS request_id, T1.id AS request_id,
T1.id || '-3' AS unique_key, T1.id || '-3' AS unique_key,
T1.requester_id AS requester_id, T1.requester_id AS requester_id,
@@ -373,4 +373,4 @@
</if> </if>
</select> </select>
</mapper> </mapper>

View File

@@ -137,7 +137,7 @@
<el-descriptions title="申请单描述" :column="2"> <el-descriptions title="申请单描述" :column="2">
<template v-for="(value, key) in descJsonData" :key="key"> <template v-for="(value, key) in descJsonData" :key="key">
<el-descriptions-item v-if="isFieldMatched(key)" :label="getFieldLabel(key)"> <el-descriptions-item v-if="isFieldMatched(key)" :label="getFieldLabel(key)">
{{ value || '-' }} {{ transformField(key, value) || '-' }}
</el-descriptions-item> </el-descriptions-item>
</template> </template>
</el-descriptions> </el-descriptions>
@@ -270,6 +270,12 @@ const parseStatus = (status) => {
const labelMap = { const labelMap = {
categoryType: '项目类别', categoryType: '项目类别',
targetDepartment: '发往科室', targetDepartment: '发往科室',
urgencyLevel: '紧急程度',
allergyHistory: '过敏史',
examinationPurpose: '检查目的',
expectedExaminationTime: '期望检查时间',
medicalHistorySummary: '病史摘要',
allergyConfirmed: '过敏确认',
symptom: '症状', symptom: '症状',
sign: '体征', sign: '体征',
clinicalDiagnosis: '临床诊断', clinicalDiagnosis: '临床诊断',
@@ -278,6 +284,17 @@ const labelMap = {
attention: '注意事项', attention: '注意事项',
}; };
// Fields that need value transformation before display
const transformField = (key, value) => {
if (key === 'urgencyLevel') {
return value === 'emergency' ? '急诊' : '普通';
}
if (key === 'allergyConfirmed') {
return value === true || value === 'true' ? '已口头确认' : '未确认';
}
return value;
};
const isFieldMatched = (key) => { const isFieldMatched = (key) => {
return key in labelMap; return key in labelMap;
}; };

View File

@@ -1181,19 +1181,27 @@ function handleSave() {
}); });
// 此处签发处方和单行保存处方传参相同后台已经将传参存为JSON字符串此处直接转换为JSON即可 // 此处签发处方和单行保存处方传参相同后台已经将传参存为JSON字符串此处直接转换为JSON即可
loading.value = true; loading.value = true;
let list = saveList.map((item) => { let list = [];
const parsedContent = JSON.parse(item.contentJson); try {
return { list = saveList.map((item) => {
...parsedContent, const parsedContent = item.contentJson ? JSON.parse(item.contentJson) || {} : {};
adviceType: item.adviceType, return {
requestId: item.requestId, ...parsedContent,
dbOpType: '1', adviceType: item.adviceType,
groupId: item.groupId, requestId: item.requestId,
uniqueKey: undefined, dbOpType: '1',
// 确保 therapyEnum 被正确传递 groupId: item.groupId,
therapyEnum: parsedContent.therapyEnum || item.therapyEnum || '1', uniqueKey: undefined,
}; // 确保 therapyEnum 被正确传递
}); therapyEnum: parsedContent.therapyEnum || item.therapyEnum || '1',
};
});
} catch (error) {
loading.value = false;
isSaving.value = false;
proxy.$modal.msgError('医嘱内容解析失败,请检查待签发医嘱');
return;
}
// 保存签发按钮 // 保存签发按钮
isSaving.value = true; isSaving.value = true;
console.log('签发处方参数:', { console.log('签发处方参数:', {

View File

@@ -302,6 +302,29 @@ function getSelectRows() {
}); });
return list; return list;
} }
function getTableRef(index) {
return proxy.$refs['tableRef' + index]?.[0];
}
function selectAllRows() {
prescriptionList.value.forEach((item, index) => {
const tableRef = getTableRef(index);
if (!tableRef) {
return;
}
item.forEach((row) => {
tableRef.toggleRowSelection(row, true);
});
});
}
function clearSelection() {
prescriptionList.value.forEach((item, index) => {
getTableRef(index)?.clearSelection();
});
}
function handleRateChange(value, item, row) { function handleRateChange(value, item, row) {
// 拼接当前选中时间 // 拼接当前选中时间
if (value) { if (value) {
@@ -319,6 +342,8 @@ function handleRateChange(value, item, row) {
defineExpose({ defineExpose({
handleGetPrescription, handleGetPrescription,
handleMedicineSummary, handleMedicineSummary,
selectAllRows,
clearSelection,
}); });
</script> </script>

View File

@@ -69,7 +69,11 @@
</div> </div>
<div> <div>
<span class="descriptions-item-label">全选</span> <span class="descriptions-item-label">全选</span>
<el-switch v-model="chooseAll" @change="handelSwicthChange" /> <el-switch
v-model="chooseAll"
:disabled="isDetails != '1'"
@change="handelSwicthChange"
/>
<el-button class="ml20 mr20" type="primary" @click="handleExecute"> 汇总领药 </el-button> <el-button class="ml20 mr20" type="primary" @click="handleExecute"> 汇总领药 </el-button>
</div> </div>
</div> </div>
@@ -160,24 +164,31 @@ function handleClick(tabName) {
} }
function handleGetPrescription() { function handleGetPrescription() {
prescriptionRefs.value.handleGetPrescription(); chooseAll.value = false;
prescriptionRefs.value?.handleGetPrescription();
} }
function handelSwicthChange() { function handelSwicthChange(value) {
if (chooseAll.value) { if (!prescriptionRefs.value) {
proxy.$refs['prescriptionRefs'].selectAllRows(); chooseAll.value = false;
return;
}
if (value) {
prescriptionRefs.value.selectAllRows();
} else { } else {
proxy.$refs['prescriptionRefs'].clearSelection(); prescriptionRefs.value.clearSelection();
} }
} }
function handleRadioChange(value) { function handleRadioChange(value) {
chooseAll.value = false;
if (value == '1') { if (value == '1') {
handleGetPrescription(); handleGetPrescription();
} }
} }
function handleTherapyChange() { function handleTherapyChange() {
chooseAll.value = false;
handleGetPrescription(); handleGetPrescription();
} }
@@ -216,4 +227,4 @@ provide('handleGetPrescription', (value) => {
:deep(.el-tabs__header) { :deep(.el-tabs__header) {
margin: 0; margin: 0;
} }
</style> </style>