Fix Bug #507: [住院护士站-住院记账-补费] 项目单位未获取、执行科室显示内码且缺乏默认/模糊搜索逻辑

1. 修复单位字段默认为空:selectChange中增加defaultUnitCode逻辑,优先取minUnitCode,回退到unitCode
2. 修复执行科室显示内码:统一positionId和el-option value为字符串类型,避免类型不匹配导致el-select无法匹配选项
3. 科室匹配增加String类型转换:find时用String(d.id)===String(patientOrgId)避免因类型不同找不到匹配科室
4. loadDepartmentOptions和getDiseaseInitLoc增加.catch优雅降级,避免API失败时页面阻断

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
赵云
2026-05-11 12:04:20 +08:00
parent 78a2dfa3fe
commit 861129c9d4

View File

@@ -181,7 +181,7 @@
v-for="dept in getFilteredOptions(scope.row, 'departmentOptions')" v-for="dept in getFilteredOptions(scope.row, 'departmentOptions')"
:key="dept.id" :key="dept.id"
:label="dept.name" :label="dept.name"
:value="dept.id" :value="String(dept.id)"
/> />
</el-select> </el-select>
<el-select <el-select
@@ -197,7 +197,7 @@
v-for="dept in getFilteredOptions(scope.row, 'locationOptions')" v-for="dept in getFilteredOptions(scope.row, 'locationOptions')"
:key="dept.value" :key="dept.value"
:label="dept.label" :label="dept.label"
:value="dept.value" :value="String(dept.value)"
/> />
</el-select> </el-select>
</template> </template>
@@ -481,11 +481,16 @@ watch(
// 加载科室选项 // 加载科室选项
function loadDepartmentOptions() { function loadDepartmentOptions() {
getOrgList().then((res) => { getOrgList()
if (res.data && res.data.records && res.data.records.length > 0) { .then((res) => {
departmentOptions.value = res.data.records[0].children || []; if (res.data && res.data.records && res.data.records.length > 0) {
} departmentOptions.value = res.data.records[0].children || [];
}); }
})
.catch(() => {
console.warn('科室列表加载失败(可能无权限)');
departmentOptions.value = [];
});
} }
// 加载收费组套数据 // 加载收费组套数据
@@ -504,10 +509,15 @@ function getAdviceBaseInfos() {
}); });
} }
function getDiseaseInitLoc() { function getDiseaseInitLoc() {
getDiseaseTreatmentInitLoc(16).then((response) => { getDiseaseTreatmentInitLoc(16)
console.log('Disease Treatment Init Loc:', response); .then((response) => {
locationOptions.value = response.data.locationOptions; console.log('Disease Treatment Init Loc:', response);
}); locationOptions.value = response.data.locationOptions;
})
.catch(() => {
console.warn('位置列表加载失败(可能无权限)');
locationOptions.value = [];
});
} }
// 下拉框模糊搜索过滤 // 下拉框模糊搜索过滤
function filterOptions(val, row, optionsKey) { function filterOptions(val, row, optionsKey) {
@@ -603,15 +613,23 @@ function selectChange(row) {
const price = row.priceList?.[0]?.price || 0; const price = row.priceList?.[0]?.price || 0;
//获取大小单位 //获取大小单位
const uniqueUnitCodes = getUnitCodeOptions(row); const uniqueUnitCodes = getUnitCodeOptions(row);
// 设置默认执行科室/位置 // 设置默认单位:优先使用 minUnitCode小单位回退到 unitCode大单位
let defaultUnitCode = '';
if (row.minUnitCode) {
defaultUnitCode = String(row.minUnitCode);
} else if (row.unitCode) {
defaultUnitCode = String(row.unitCode);
}
// 设置默认执行科室/位置(统一转为字符串,避免 el-select 类型不匹配)
let defaultPositionId = undefined; let defaultPositionId = undefined;
if (row.adviceType === 3 && departmentOptions.value.length > 0) { if (row.adviceType === 3 && departmentOptions.value.length > 0) {
// 诊疗:优先使用患者所在科室,否则取第一个科室 // 诊疗:优先使用患者所在科室,否则取第一个科室
defaultPositionId = departmentOptions.value.find(d => d.id === props.patientInfo.organizationId)?.id const patientOrgId = props.patientInfo.organizationId;
|| departmentOptions.value[0]?.id; const matched = departmentOptions.value.find(d => String(d.id) === String(patientOrgId));
defaultPositionId = matched ? String(matched.id) : String(departmentOptions.value[0].id);
} else if (row.adviceType === 2 && locationOptions.value.length > 0) { } else if (row.adviceType === 2 && locationOptions.value.length > 0) {
// 耗材:默认取第一个药房/耗材房 // 耗材:默认取第一个药房/耗材房
defaultPositionId = locationOptions.value[0]?.value; defaultPositionId = String(locationOptions.value[0].value);
} }
//插入费用列表 //插入费用列表
feeItemsList.value.push({ feeItemsList.value.push({
@@ -619,8 +637,8 @@ function selectChange(row) {
uniqueUnitCodes: uniqueUnitCodes, uniqueUnitCodes: uniqueUnitCodes,
unitPrice: (price / (row.partPercent || 1)).toFixed(6), // 根据拆零比计算单价 unitPrice: (price / (row.partPercent || 1)).toFixed(6), // 根据拆零比计算单价
quantity: 1, quantity: 1,
positionId: defaultPositionId, // 默认执行科室/位置 positionId: defaultPositionId, // 默认执行科室/位置(字符串类型)
selectUnitCode: String(row.minUnitCode || ''), // 默认选择小单位,确保字符串类型 selectUnitCode: defaultUnitCode, // 默认选择小单位
}); });
} }