Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
2026-06-18 12:08:28 +08:00
6 changed files with 104 additions and 48 deletions

View File

@@ -1,7 +1,7 @@
# HealthLink-HIS 代码模块索引
> 供 LLM 快速定位代码。每个模块列出 Controller → Service → Mapper 关键文件。
> 最后更新: 2026-06-18 06:00 (309 个 Controller)
> 最后更新: 2026-06-18 12:00 (309 个 Controller)
## 关键词 → 模块速查

View File

@@ -67,6 +67,11 @@ public class ElepMedicationInfoDto {
/** 诊断id */
@JsonSerialize(using = ToStringSerializer.class)
private Long conditionId;
/** 诊断定义id */
@JsonSerialize(using = ToStringSerializer.class)
private Long conditionDefId;
/** 慢病诊断编码 */
private String opspDiseCode;
/** 药品版本号 */
private String version;
}

View File

@@ -400,6 +400,8 @@
T1.rx_type_code, --处方类别
T1.rx_item_type_code, --处方项目类别
T1.condition_id, --诊断id
T1.condition_def_id, --诊断定义id
T1.opsp_dise_code, --慢病诊断编码
T1.version --药品版本号
FROM elep_medication_request AS T1
LEFT JOIN yb_catalog_drug_info AS T2
@@ -427,6 +429,8 @@
T1.rx_type_code,
T1.rx_item_type_code,
T1.condition_id,
T1.condition_def_id,
T1.opsp_dise_code,
T1.version
</select>
<select id="selectSaveInfo" resultType="com.healthlink.his.web.doctorstation.dto.ElepPrescriptionInfoParam">

View File

@@ -131,7 +131,7 @@
<vxe-column
title="类型"
align="center"
width="120"
width="160"
>
<template #default="scope">
<template v-if="!scope.row.groupPackageId">
@@ -205,7 +205,6 @@
title="单次剂量"
align="center"
width="250"
field="sortNumber"
>
<template #default="scope">
<template v-if="!scope.row.groupPackageId">
@@ -214,11 +213,7 @@
<el-input
v-model="scope.row.doseQuantity"
style="width: 70px; margin-right: 10px"
@input="
(value) => {
scope.row.dose = value * scope.row.unitConversionRatio;
}
"
@input="(value) => handleDoseQuantityChange(value, scope.row)"
/>
<span>
{{
@@ -232,11 +227,7 @@
<el-input
v-model="scope.row.dose"
style="width: 70px; margin-right: 10px"
@input="
(value) => {
scope.row.doseQuantity = value / scope.row.unitConversionRatio;
}
"
@input="(value) => handleDoseChange(value, scope.row)"
/>
<span>
{{
@@ -260,7 +251,6 @@
title="给药途径"
align="center"
width="150"
field="sortNumber"
>
<template #default="scope">
<template v-if="!scope.row.groupPackageId">
@@ -292,7 +282,6 @@
title="用药频次"
align="center"
width="150"
field="sortNumber"
>
<template #default="scope">
<template v-if="!scope.row.groupPackageId">
@@ -324,7 +313,6 @@
title="用药天数"
align="center"
width="100"
field="sortNumber"
>
<template #default="scope">
<template v-if="!scope.row.groupPackageId">
@@ -547,8 +535,7 @@ function openAdd(tab) {
} else if (tab === 'department') {
formData.organizationId = userStore.orgId;
}
addEmptyRow();
// 不再默认新增空行,用户点击"新增"按钮时才添加
}
function handleRangeChange(tab) {
@@ -680,7 +667,7 @@ function openEdit(tab, row) {
};
});
nextId.value = prescriptionList.value.length + 1;
addEmptyRow();
// 不再默认新增空行,用户点击"新增"按钮时才添加
});
}
@@ -939,8 +926,9 @@ function selectAdviceBase(key, row) {
JSON.stringify(row)
).chargeItemDefinitionId;
prescriptionList.value[rowIndex.value].therapyEnum = preservedTherapyEnum;
addEmptyRow();
expandOrder.value = [key];
// 不再自动新增空行,用户点击"新增"按钮时才添加
// 强制触发 vxe-table v4 响应式更新v4 不响应数组元素直接索引赋值)
prescriptionList.value = [...prescriptionList.value];
}
function handleFocus(row, index) {
@@ -972,6 +960,38 @@ function handleQuantityChange(row) {
prescriptionList.value = [...prescriptionList.value];
}
// 单次剂量数量变化 → 自动计算剂量
function handleDoseQuantityChange(value, row) {
if (value === '' || value === null || value === undefined) {
row.dose = undefined;
} else {
const ratio = row.unitConversionRatio;
const numValue = Number(value) || 0;
if (ratio && Number(ratio) > 0) {
row.dose = numValue * Number(ratio);
} else {
row.dose = numValue;
}
}
prescriptionList.value = [...prescriptionList.value];
}
// 剂量变化 → 反算单次剂量数量
function handleDoseChange(value, row) {
if (value === '' || value === null || value === undefined) {
row.doseQuantity = undefined;
} else {
const ratio = row.unitConversionRatio;
const numValue = Number(value) || 0;
if (ratio && Number(ratio) > 0) {
row.doseQuantity = numValue / Number(ratio);
} else {
row.doseQuantity = numValue;
}
}
prescriptionList.value = [...prescriptionList.value];
}
function handleUnitChange(row) {
prescriptionList.value = [...prescriptionList.value];
}

View File

@@ -1,10 +1,11 @@
<template>
<el-dialog
v-model="props.openPrescription"
:title="title"
width="1840px"
:model-value="props.openPrescription"
:title="dialogTitle"
width="95%"
teleported
destroy-on-close
@update:model-value="$emit('update:openPrescription', $event)"
@open="open"
@close="close"
>
@@ -227,7 +228,7 @@
title="药品名称"
align="center"
field="medicationName"
width="150"
min-width="110"
>
<template #default="scope">
<template v-if="getRowDisabled(scope.row)">
@@ -237,7 +238,7 @@
placement="bottom-start"
:visible="scope.row.showPopover"
trigger="manual"
:width="1200"
:width="800"
>
<prescriptionMedicineList
:search-key="medicineSearchKey"
@@ -250,7 +251,6 @@
@input="handleChange"
@focus="handleFocus(scope.row, scope.rowIndex)"
/>
<!-- @blur="handleBlur(scope.row)" -->
</template>
</el-popover>
</el-form-item>
@@ -262,7 +262,7 @@
title="药品规格"
align="center"
field=""
width="100"
min-width="90"
>
<template #default="scope">
<el-form-item :prop="`medicationInfoList.${scope.rowIndex}.drugSpecification`">
@@ -282,7 +282,8 @@
title="生产厂家"
align="center"
field=""
width="220"
min-width="120"
:show-overflow="true"
>
<template #default="scope">
<el-form-item :prop="`medicationInfoList.${scope.rowIndex}.manufacturerName`">
@@ -308,7 +309,7 @@
title="药品剂量"
align="center"
field=""
width="80"
min-width="100"
>
<template #default="scope">
<el-form-item
@@ -331,7 +332,7 @@
title="剂量单位"
align="center"
field="medDosageUnitCode"
width="150"
min-width="90"
>
<template #default="scope">
<el-form-item
@@ -371,7 +372,7 @@
title="使用频次"
align="center"
field="medFrequency"
width="230"
min-width="130"
>
<template #default="scope">
<el-form-item
@@ -404,7 +405,7 @@
title="服药时间(开始)"
align="center"
field="effectiveDoseStart"
width="220"
min-width="140"
>
<template #default="scope">
<el-form-item
@@ -429,7 +430,7 @@
title="每次发药供应天数"
align="center"
field="dispensePerDuration"
width="130"
min-width="140"
>
<template #default="scope">
<el-form-item
@@ -450,7 +451,7 @@
title="服药时间(结束)"
align="center"
field="effectiveDoseEnd"
width="220"
min-width="140"
>
<template #default="scope">
<el-form-item :prop="`medicationInfoList.${scope.rowIndex}.effectiveDoseEnd`">
@@ -472,7 +473,7 @@
title="途径"
align="center"
field="medRoute"
width="140"
min-width="90"
>
<template #default="scope">
<el-form-item
@@ -502,6 +503,7 @@
title="数量"
align="center"
field="quantity"
min-width="90"
>
<template #default="scope">
<el-form-item
@@ -524,7 +526,7 @@
title="单位"
align="center"
field="medDosageUnitCode"
width="150"
min-width="90"
>
<template #default="scope">
<el-form-item
@@ -611,6 +613,7 @@ const props = defineProps({
title: {
type: String,
required: false,
default: '',
},
medicationInfo: {
type: Object,
@@ -633,7 +636,7 @@ const ids = ref([]); // 存储选择的药品信息行数据
const selectData = ref([]); // 存储选择的药品信息行数据
const single = ref(true);
const multiple = ref(true);
const emit = defineEmits(['close']);
const emit = defineEmits(['close', 'update:openPrescription']);
const total = ref(0);
const queryParams = ref({
pageNum: 1,
@@ -702,7 +705,7 @@ const queryMedicationParams = ref({
const dosageInputRefs = ref([]);
const title = ref('');
const dialogTitle = ref('');
const unitMap = ref({
dose: 'dose',
@@ -720,6 +723,17 @@ function getInit(searchKey) {
function open() {
conditionId.value = props.prescriptionData.conditionId;
// 编辑/查看时回显诊断和慢病诊断
if (dialogTitle.value !== '新增处方') {
conditionDefId.value = props.prescriptionData.conditionDefId || '';
speConditionId.value = props.prescriptionData.opspDiseCode || '';
// 远程搜索诊断下拉框:加载当前已选诊断的选项,确保 label 正常显示
if (conditionDefId.value) {
getDiagnosisListEle('', infoForm.encounterId).then(res => {
diagnosisListOption.value = res.data || [];
});
}
}
getDiagnosisInfo();
}
@@ -728,22 +742,22 @@ function open() {
*/
function getPrescriptionNoInit() {
reset();
title.value = '';
title.value = props.title;
console.log(props, 'props', title.value);
dialogTitle.value = '';
dialogTitle.value = props.title;
console.log(props, 'props', dialogTitle.value);
prescriptionTypeList.value = props.prescriptionType;
console.log(prescriptionTypeList.value, 'prescriptionTypeList');
infoForm.patientId = props.patient.patientId;
infoForm.encounterId = props.patient.encounterId;
infoForm.validityDays = props.prescriptionData.validityDays;
infoForm.extensionReason = props.prescriptionData.extensionReason;
if (title.value != '新增处方') {
if (dialogTitle.value != '新增处方') {
form.rxTypeCode = props.prescriptionData.rxTypeCode;
infoForm.prescriptionNo = props.prescriptionData.prescriptionNo;
}
console.log('infoForm.prescriptionNo (初始值):', infoForm.prescriptionNo, 'props.prescriptionData:', props.prescriptionData);
// prescriptionInfo.value = props.prescriptionData;
if (title.value === '新增处方') {
if (dialogTitle.value === '新增处方') {
prescriptionNoInit().then((res) => {
infoForm.prescriptionNo = res.data;
console.log('处方号初始化成功:', {
@@ -767,7 +781,7 @@ function getDiagnosisInfo() {
});
if (diagnosisInfo.length > 0) {
diagnosisInfo.value = diagnosisInfo[0];
if (title.value === '新增处方') {
if (dialogTitle.value === '新增处方') {
conditionId.value = diagnosisInfo[0].id;
}
}
@@ -973,7 +987,7 @@ function submit() {
* 双击药品行
*/
function clickMedicineRowDb(row) {
if (title.value == '查看处方') {
if (dialogTitle.value == '查看处方') {
row.isEdit = false;
} else {
row.isEdit = true;

View File

@@ -57,6 +57,7 @@
title="门诊号"
align="center"
field="iptOtpNo"
min-width="120"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">
@@ -68,6 +69,8 @@
title="病区"
align="center"
field="departmentWard"
min-width="90"
:show-overflow="true"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">
@@ -79,7 +82,7 @@
title="有效天数"
align="center"
field="validityDays"
width="80"
min-width="100"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">
@@ -138,7 +141,7 @@
title="取药状态"
align="center"
field="medStatus"
width="80"
min-width="100"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">
@@ -150,6 +153,8 @@
title="延长原因"
align="center"
field="extensionReason"
min-width="90"
:show-overflow="true"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">
@@ -166,6 +171,8 @@
title="撤销原因"
align="center"
field="quashReason"
min-width="90"
:show-overflow="true"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">
@@ -177,6 +184,8 @@
title="诊断"
align="center"
field="conditionName"
min-width="130"
:show-overflow="true"
>
<template #default="scope">
<span v-if="!scope.row.isEdit">
@@ -435,6 +444,8 @@ function handleView(row) {
});
prescriptionInfo.value.conditionId = response.data.records[0].conditionId;
prescriptionInfo.value.conditionDefId = response.data.records[0].conditionDefId;
prescriptionInfo.value.opspDiseCode = response.data.records[0].opspDiseCode;
openPrescriptionDialog();
});
@@ -458,6 +469,8 @@ function handleEdit(row) {
medicationInfo.isEdit = false;
});
prescriptionInfo.value.conditionId = response.data.records[0].conditionId;
prescriptionInfo.value.conditionDefId = response.data.records[0].conditionDefId;
prescriptionInfo.value.opspDiseCode = response.data.records[0].opspDiseCode;
openPrescriptionDialog();
});
}