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:
@@ -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,10 +481,15 @@ watch(
|
|||||||
|
|
||||||
// 加载科室选项
|
// 加载科室选项
|
||||||
function loadDepartmentOptions() {
|
function loadDepartmentOptions() {
|
||||||
getOrgList().then((res) => {
|
getOrgList()
|
||||||
|
.then((res) => {
|
||||||
if (res.data && res.data.records && res.data.records.length > 0) {
|
if (res.data && res.data.records && res.data.records.length > 0) {
|
||||||
departmentOptions.value = res.data.records[0].children || [];
|
departmentOptions.value = res.data.records[0].children || [];
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
console.warn('科室列表加载失败(可能无权限)');
|
||||||
|
departmentOptions.value = [];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -504,9 +509,14 @@ function getAdviceBaseInfos() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
function getDiseaseInitLoc() {
|
function getDiseaseInitLoc() {
|
||||||
getDiseaseTreatmentInitLoc(16).then((response) => {
|
getDiseaseTreatmentInitLoc(16)
|
||||||
|
.then((response) => {
|
||||||
console.log('Disease Treatment Init Loc:', response);
|
console.log('Disease Treatment Init Loc:', response);
|
||||||
locationOptions.value = response.data.locationOptions;
|
locationOptions.value = response.data.locationOptions;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
console.warn('位置列表加载失败(可能无权限)');
|
||||||
|
locationOptions.value = [];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// 下拉框模糊搜索过滤
|
// 下拉框模糊搜索过滤
|
||||||
@@ -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, // 默认选择小单位
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user