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