门诊医生站-》开立诊断 页面调整

This commit is contained in:
itcast
2026-01-16 16:32:36 +08:00
parent be0514bc08
commit 8fcfb481c9
83 changed files with 3808 additions and 2205 deletions

View File

@@ -79,6 +79,7 @@
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
no-data-text=""
>
<el-option
v-for="category in activity_category_code"
@@ -91,7 +92,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="业务类型" prop="typeEnum">
<el-select v-model="form.typeEnum" placeholder="" clearable filterable>
<el-select v-model="form.typeEnum" placeholder="" clearable filterable no-data-text="">
<el-option
v-for="item in typeEnumOptions"
:key="item.value"
@@ -115,7 +116,11 @@
</el-col>
<el-col :span="8">
<el-form-item label="医保编码" prop="conditionCode">
<el-input v-model="form.ybNo" placeholder="" />
<el-input
v-model="form.ybNo"
placeholder=""
clearable
/>
</el-form-item>
</el-col>
</el-row>
@@ -130,6 +135,7 @@
filterable
style="width: 240px"
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
no-data-text=""
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -161,7 +167,7 @@
<el-col :span="8">
<el-form-item label="所需标本" prop="specimenCode">
<el-select v-model="form.specimenCode" clearable filterable>
<el-select v-model="form.specimenCode" clearable filterable no-data-text="">
<el-option
v-for="category in specimen_code"
:key="category.value"
@@ -181,6 +187,7 @@
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
no-data-text=""
>
<el-option
v-for="item in chrgitm_lv"
@@ -194,9 +201,14 @@
<el-col :span="8">
<el-form-item label="使用单位" prop="permittedUnitCode">
<el-select v-model="form.permittedUnitCode" clearable filterable>
<el-select
v-model="form.permittedUnitCode"
clearable
filterable
:filter-method="filterUnitCode"
>
<el-option
v-for="category in unit_code"
v-for="category in isFilteringUnitCode ? filteredUnitCode : unit_code"
:key="category.value"
:label="category.label"
:value="category.value"
@@ -206,7 +218,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="财务类型" prop="itemTypeCode">
<el-select v-model="form.itemTypeCode" clearable filterable>
<el-select v-model="form.itemTypeCode" clearable filterable no-data-text="">
<!-- :disabled="form.isEditInfoDisable === 1" -->
<el-option
@@ -355,6 +367,7 @@ import {
deptTreeSelect,
editDiagnosisTreatment,
getDiagnosisTreatmentList,
getDiseaseTreatmentByYbNo,
locationTreeSelect,
} from './diagnosistreatment';
import PopoverList from '@/components/OpenHis/popoverList/index.vue';
@@ -384,6 +397,10 @@ const statusFlagOptions = ref(undefined);
const exeOrganizations = ref(undefined);
const typeEnumOptions = ref(undefined);
const diagnosisTreatmentList = ref([]);
// 使用单位过滤后的选项
const filteredUnitCode = ref([]);
// 标记是否正在进行过滤查询
const isFilteringUnitCode = ref(false);
const data = reactive({
form: {},
@@ -442,6 +459,7 @@ const treatmentItems = ref([
const medicineSearchKey = ref('');
const isFirstOpen = ref(true); // 标记是否首次打开弹窗
const totalPrice = ref('0.00'); // 总价
const isValidatingYbNo = ref(false); // 标记是否正在校验医保编码
// 计算总价
function calculateTotalPrice() {
@@ -489,6 +507,9 @@ function show() {
getBodyTree();
getDeptTree();
getItemList();
// 重置使用单位过滤
filteredUnitCode.value = [];
isFilteringUnitCode.value = false;
title.value = '';
title.value = props.title;
@@ -517,6 +538,9 @@ function edit() {
getBodyTree();
getDeptTree();
getItemList();
// 重置使用单位过滤
filteredUnitCode.value = [];
isFilteringUnitCode.value = false;
title.value = '';
title.value = props.title;
form.value = props.item;
@@ -579,8 +603,31 @@ function reset() {
proxy.resetForm('diagnosisTreatmentRef');
}
async function validateYbNoUnique(ybNo, currentId = null) {
if (!ybNo || ybNo.trim() === '') {
return true; // 空值不进行校验
}
try {
const response = await getDiseaseTreatmentByYbNo(ybNo);
const data = response.data;
if (data && data.length > 0) {
// 检查是否存在相同的医保编码,排除当前编辑的记录
const existingRecord = data.find(item => item.id !== currentId);
if (existingRecord) {
return false; // 医保编码已存在
}
}
return true; // 医保编码唯一
} catch (error) {
console.error('医保编码校验失败:', error);
return true; // 校验失败时允许提交,由后端处理
}
}
/** 提交按钮 */
function submitForm() {
async function submitForm() {
form.value.ybFlag ? (form.value.ybFlag = 1) : (form.value.ybFlag = 0);
form.value.ybMatchFlag ? (form.value.ybMatchFlag = 1) : (form.value.ybMatchFlag = 0);
form.value.ruleId ? (form.value.ruleId = 1) : (form.value.ruleId = 0);
@@ -588,8 +635,26 @@ function submitForm() {
treatmentItems.value.length > 0 && treatmentItems.value[0].adviceDefinitionId != ''
? JSON.stringify(treatmentItems.value)
: undefined;
proxy.$refs['diagnosisTreatmentRef'].validate((valid) => {
proxy.$refs['diagnosisTreatmentRef'].validate(async (valid) => {
if (valid) {
// 医保编码唯一性校验
if (form.value.ybNo) {
try {
isValidatingYbNo.value = true;
const isUnique = await validateYbNoUnique(form.value.ybNo, form.value.id);
if (!isUnique) {
proxy.$modal.msgWarning('医保编码已存在,请输入其他医保编码');
return;
}
} catch (error) {
console.error('医保编码校验失败:', error);
proxy.$modal.msgError('医保编码校验失败,请稍后重试');
return;
} finally {
isValidatingYbNo.value = false;
}
}
if (form.value.id != undefined) {
editDiagnosisTreatment(form.value).then((response) => {
// 触发自定义事件,并传递数据给父组件
@@ -682,6 +747,23 @@ function updatePrices(value) {
form.value.maximumRetailPrice = form.value.retailPrice;
}
// 使用单位过滤函数
function filterUnitCode(query) {
if (!query || query.trim() === '') {
// 查询为空时,重置过滤状态,显示所有选项
isFilteringUnitCode.value = false;
filteredUnitCode.value = [];
return;
}
// 有查询内容时,进行过滤
isFilteringUnitCode.value = true;
const queryLower = query.toLowerCase().trim();
filteredUnitCode.value = unit_code.value.filter((item) => {
const label = item.label || '';
return label.toLowerCase().includes(queryLower);
});
}
// 监听treatmentItems变化实时更新总价
watch(
() => treatmentItems.value,