检验项目设置-套餐设置前后端及数据库基本完成

This commit is contained in:
2025-12-25 14:25:35 +08:00
parent 3bab56a19b
commit b1f74161f8
2 changed files with 73 additions and 119 deletions

View File

@@ -1,87 +0,0 @@
import request from '@/utils/request'
// 查询检验类型列表
export function listInspectionType(query) {
return request({
url: '/system/inspection-type/list',
method: 'get',
params: query
})
}
// 查询检验类型详细
export function getInspectionType(inspectionTypeId) {
return request({
url: `/system/inspection-type/${inspectionTypeId}`,
method: 'get'
})
}
// 新增检验类型
export function addInspectionType(data) {
return request({
url: '/system/inspection-type',
method: 'post',
data: data
})
}
// 修改检验类型
export function updateInspectionType(data) {
return request({
url: '/system/inspection-type',
method: 'put',
data: data
})
}
// 删除检验类型
export function delInspectionType(inspectionTypeId) {
return request({
url: `/system/inspection-type/${inspectionTypeId}`,
method: 'delete'
})
}
// 查询检验套餐列表
export function listInspectionPackage(query) {
return request({
url: '/system/inspection-package/list',
method: 'get',
params: query
})
}
// 查询检验套餐详细
export function getInspectionPackage(packageId) {
return request({
url: `/system/inspection-package/${packageId}`,
method: 'get'
})
}
// 新增检验套餐
export function addInspectionPackage(data) {
return request({
url: '/system/inspection-package',
method: 'post',
data: data
})
}
// 修改检验套餐
export function updateInspectionPackage(data) {
return request({
url: '/system/inspection-package',
method: 'put',
data: data
})
}
// 删除检验套餐
export function delInspectionPackage(packageId) {
return request({
url: `/system/inspection-package/${packageId}`,
method: 'delete'
})
}

View File

@@ -517,7 +517,7 @@
</div>
<div class="form-item">
<span class="form-label">lis分组</span>
<select class="form-control form-select">
<select class="form-control form-select" v-model="selectedLisGroup">
<option value="">请选择lis分组</option>
<option v-for="group in lisGroupList" :key="group.id" :value="group.id">
{{ group.groupName || group.lisGroupName }}
@@ -701,7 +701,7 @@ import { formatDate } from '@/utils/index';
import request from '@/utils/request';
import { listInspectionType, getInspectionType, addInspectionType, updateInspectionType, delInspectionType } from '@/api/system/inspectionType';
import { listLisGroup } from '@/api/system/checkType';
import { addInspectionPackage, saveInspectionPackageDetails, batchSaveInspectionPackageDetails, listInspectionPackage, getInspectionPackage, listInspectionPackageDetails } from '@/api/system/inspectionPackage';
import { addInspectionPackage, saveInspectionPackageDetails, getInspectionPackage, listInspectionPackageDetails } from '@/api/system/inspectionPackage';
import { getDiagnosisTreatmentList } from '@/views/catalog/diagnosistreatment/components/diagnosistreatment';
import { getLocationTree } from '@/views/charge/outpatientregistration/components/outpatientregistration';
@@ -714,6 +714,8 @@ const route = useRoute();
// 存储LIS分组数据
const lisGroupList = ref([]);
// 选中的LIS分组
const selectedLisGroup = ref('');
// 获取就诊科室数据 - 与门诊挂号页面保持一致,在组件初始化时直接调用
getLocationInfo();
@@ -1694,7 +1696,6 @@ const handleSave = () => {
packageLevel: packageLevel.value,
packageName: packageName.value.trim(),
department: department.value,
userId: userStore.nickName, // 制单人
discount: discount.value || 0,
isDisabled: isDisabled.value,
showPackageName: showPackageName.value,
@@ -1702,22 +1703,24 @@ const handleSave = () => {
enablePackagePrice: enablePackagePrice.value,
packageAmount: packageAmount.value,
serviceFee: serviceFee.value,
lisGroup: '', // 从下拉框获取
lisGroup: selectedLisGroup.value, // 从下拉框获取
bloodVolume: bloodVolume.value,
remarks: remarks.value,
orgName: userStore.orgName || '测试机构', // 卫生机构
createBy: userStore.nickName, // 制单人
createTime: new Date().toISOString(),
updateTime: new Date().toISOString()
};
// 如果是科室套餐,添加科室信息
// 根据套餐级别设置用户信息
if (packageLevel.value === '科室套餐' && department.value) {
// 科室套餐:设置科室信息
basicInfo.departmentId = department.value;
}
// 如果是个人套餐,添加用户信息
if (packageLevel.value === '个人套餐') {
} else if (packageLevel.value === '个人套餐') {
// 个人套餐设置用户ID套餐所有者
basicInfo.userId = userStore.userId || userStore.nickName;
}
// 全院套餐:不需要额外设置用户信息
// 准备明细数据
const detailData = packageItems.value.map(item => ({
@@ -1747,38 +1750,71 @@ const handleSave = () => {
// 保存套餐数据到数据库
const savePackageData = async (basicInfo, detailData) => {
// 显示保存进度
const loading = ElLoading.service({
lock: true,
text: '正在保存...',
background: 'rgba(0, 0, 0, 0.7)',
});
try {
// 显示保存进度
const loading = ElLoading.service({
lock: true,
text: '正在保存...',
background: 'rgba(0, 0, 0, 0.7)',
});
// 1. 先保存基本信息
console.log('准备发送的基本信息数据:', basicInfo);
const basicResponse = await addInspectionPackage(basicInfo);
console.log('后端返回的完整响应:', basicResponse);
console.log('响应类型:', typeof basicResponse);
console.log('响应数据结构:', JSON.stringify(basicResponse, null, 2));
// 检查响应码
if (basicResponse.code !== 200) {
loading.close();
throw new Error(basicResponse.msg || '保存基本信息失败');
}
const packageId = basicResponse.data.packageId || basicResponse.data.id;
// 2. 批量保存明细数据关联套餐ID
const detailDataWithPackageId = detailData.map(item => ({
...item,
packageId: packageId
}));
const detailResponse = await batchSaveInspectionPackageDetails({
packageId: packageId,
details: detailDataWithPackageId
});
if (detailResponse.code !== 200) {
throw new Error(detailResponse.msg || '保存明细数据失败');
// 检查响应数据结构 - 兼容多种可能的响应格式
let packageId = null;
if (basicResponse.data) {
// 标准格式:{code: 200, data: {packageId: xxx}}
packageId = basicResponse.data.packageId || basicResponse.data.id;
} else if (basicResponse.packageId) {
// 如果data不存在尝试直接从响应根级别获取
packageId = basicResponse.packageId;
} else if (basicResponse.id) {
// 如果data不存在尝试直接从响应根级别获取id
packageId = basicResponse.id;
}
// 验证套餐ID是否存在
if (!packageId) {
loading.close();
console.error('无法从响应中获取套餐ID完整响应:', basicResponse);
throw new Error('保存成功但未返回套餐ID。请检查后端接口是否正确返回了packageId或id字段');
}
console.log('成功获取到套餐ID:', packageId);
// 2. 分别保存每个明细数据到明细表
for (let i = 0; i < detailData.length; i++) {
const detailItem = {
...detailData[i],
packageId: packageId
};
console.log(`保存第 ${i + 1} 个明细项:`, detailItem);
const detailResponse = await saveInspectionPackageDetails(detailItem);
if (detailResponse.code !== 200) {
loading.close();
throw new Error(`保存第 ${i + 1} 个明细项失败: ${detailResponse.msg || '未知错误'}`);
}
console.log(`${i + 1} 个明细项保存成功:`, detailResponse.data);
}
console.log('所有明细项保存完成');
// 关闭加载提示
loading.close();
@@ -1788,6 +1824,9 @@ const savePackageData = async (basicInfo, detailData) => {
doResetForm();
} catch (error) {
// 确保在错误时也关闭loading
loading.close();
console.error('保存失败:', error);
// 处理不同类型的错误
@@ -1813,7 +1852,7 @@ const savePackageData = async (basicInfo, detailData) => {
// 网络错误
errorMessage = '网络连接失败,请检查网络设置';
} else {
// 其他错误
// 其他错误包括我们throw的Error
errorMessage = error.message || '保存失败,请重试';
}
@@ -1848,6 +1887,7 @@ const doResetForm = () => {
enablePackagePrice.value = true;
packageAmount.value = 0.00;
serviceFee.value = 0.00;
selectedLisGroup.value = '';
bloodVolume.value = '';
remarks.value = '';
@@ -1893,6 +1933,7 @@ const loadInspectionPackage = async (packageId) => {
enablePackagePrice.value = basicData.enablePackagePrice !== false;
packageAmount.value = basicData.packageAmount || 0.00;
serviceFee.value = basicData.serviceFee || 0.00;
selectedLisGroup.value = basicData.lisGroup || '';
bloodVolume.value = basicData.bloodVolume || '';
remarks.value = basicData.remarks || '';