fix(consultation): 解决会诊流程中的多个功能问题
- 在 deptappthoursManage.js 中添加 status 参数以仅获取已启动的机构 - 为 consultationapplication 组件添加已确认和已签名状态选项 - 扩展操作列宽度并添加打印功能按钮 - 优化 handlePrint 方法以支持行参数和性别枚举转换 - 为 consultationconfirmation 组件添加必填验证和编辑权限控制 - 修复会诊确认医师信息回显逻辑 - 在 inspectionApplication 组件中修复表格行点击事件和检验项目加载 - 禁用非紧急标记的编辑权限以解决Bug #268 - 为 surgeryApplication 组件添加响应码验证和错误处理 - 在 consultation 组件中添加表单验证清除功能 - 为 PackageManagement 组件实现动态机构选项加载 - 重构 PackageSettings 组件的套餐金额显示和只读模式 - 为检查项目设置组件添加套餐筛选和下级类型选择功能 - 实现检验套餐的编辑和查看模式切换功能
This commit is contained in:
@@ -424,7 +424,8 @@
|
||||
<el-button :icon="RefreshRight" @click="resetForm">重置</el-button>
|
||||
<el-button type="success" @click="handlePackageManagement">套餐管理</el-button>
|
||||
</div>
|
||||
<el-button type="success" size="large" @click="handleSave">保存</el-button>
|
||||
<el-button v-if="!isViewMode" type="success" size="large" @click="handleSave">{{ packageMode === 'edit' ? '更新' : '保存' }}</el-button>
|
||||
<el-button v-else type="primary" size="large" @click="handleBackToManagement">返回管理</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 表单区域 -->
|
||||
@@ -448,6 +449,7 @@
|
||||
default-first-option
|
||||
placeholder="请选择或输入套餐级别"
|
||||
style="width: 100%;"
|
||||
:disabled="isViewMode"
|
||||
@change="handlePackageLevelChange"
|
||||
>
|
||||
<el-option
|
||||
@@ -473,6 +475,7 @@
|
||||
check-strictly
|
||||
:expand-on-click-node="false"
|
||||
clearable
|
||||
:disabled="isViewMode"
|
||||
style="width: 100%;"
|
||||
@change="handlePackageDepartmentChange"
|
||||
/>
|
||||
@@ -483,7 +486,7 @@
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label"><span style="color:red"></span>套餐名称</span>
|
||||
<el-input v-model="packageName" placeholder="请输入套餐名称" />
|
||||
<el-input v-model="packageName" placeholder="请输入套餐名称" :disabled="isViewMode" />
|
||||
<div class="error-message" id="packageNameError" style="color: #ff4d4f; font-size: 12px; margin-top: 4px; display: none;">套餐名称不能为空</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
@@ -495,6 +498,7 @@
|
||||
@change="handleTenantChange"
|
||||
clearable
|
||||
filterable
|
||||
:disabled="isViewMode"
|
||||
:loading="loadingTenant"
|
||||
no-data-text="暂无数据,请稍后重试"
|
||||
@visible-change="handleTenantVisibleChange"
|
||||
@@ -513,7 +517,7 @@
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">折扣 %</span>
|
||||
<el-input v-model="discount" @input="calculateAmounts" />
|
||||
<el-input v-model="discount" @input="calculateAmounts" :disabled="isViewMode" />
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">制单人</span>
|
||||
@@ -521,32 +525,32 @@
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">备注</span>
|
||||
<el-input v-model="remarks" placeholder="请输入备注" />
|
||||
<el-input v-model="remarks" placeholder="请输入备注" :disabled="isViewMode" />
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">是否停用</span>
|
||||
<el-radio-group v-model="isDisabled">
|
||||
<el-radio-group v-model="isDisabled" :disabled="isViewMode">
|
||||
<el-radio :label="false">启用</el-radio>
|
||||
<el-radio :label="true">停用</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">显示套餐名</span>
|
||||
<el-radio-group v-model="showPackageName">
|
||||
<el-radio-group v-model="showPackageName" :disabled="isViewMode">
|
||||
<el-radio :label="true">是</el-radio>
|
||||
<el-radio :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">生成服务费</span>
|
||||
<el-radio-group v-model="generateServiceFee">
|
||||
<el-radio-group v-model="generateServiceFee" :disabled="isViewMode">
|
||||
<el-radio :label="true">是</el-radio>
|
||||
<el-radio :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">套餐价格</span>
|
||||
<el-radio-group v-model="enablePackagePrice">
|
||||
<el-radio-group v-model="enablePackagePrice" :disabled="isViewMode">
|
||||
<el-radio :label="true">启用</el-radio>
|
||||
<el-radio :label="false">不启用</el-radio>
|
||||
</el-radio-group>
|
||||
@@ -558,7 +562,7 @@
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">lis分组</span>
|
||||
<el-select v-model="selectedLisGroup" placeholder="请选择lis分组" style="width: 100%;">
|
||||
<el-select v-model="selectedLisGroup" placeholder="请选择lis分组" style="width: 100%;" :disabled="isViewMode">
|
||||
<el-option
|
||||
v-for="group in lisGroupList"
|
||||
:key="group.id"
|
||||
@@ -569,7 +573,7 @@
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="form-label">血量</span>
|
||||
<el-input v-model="bloodVolume" />
|
||||
<el-input v-model="bloodVolume" :disabled="isViewMode" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -578,7 +582,7 @@
|
||||
<div class="table-container" style="width: 100%; margin-top: 20px;">
|
||||
<div class="table-header" style="display: flex; justify-content: space-between; align-items: center; padding: 10px;">
|
||||
<div class="table-title" style="font-size: 16px; font-weight: bold;">检验套餐明细</div>
|
||||
<el-button type="primary" size="small" circle @click="addPackageItem" title="添加项目">
|
||||
<el-button v-if="!isViewMode" type="primary" size="small" circle @click="addPackageItem" title="添加项目">
|
||||
<el-icon><Plus /></el-icon>
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -890,6 +894,7 @@ import {
|
||||
import {listLisGroup} from '@/api/system/checkType';
|
||||
import {
|
||||
addInspectionPackage,
|
||||
updateInspectionPackage,
|
||||
getInspectionPackage,
|
||||
listInspectionPackageDetails,
|
||||
saveInspectionPackageDetails
|
||||
@@ -1545,6 +1550,12 @@ const bloodVolume = ref('');
|
||||
const remarks = ref('');
|
||||
// 检验套餐明细项目 - 从后端API获取
|
||||
const packageItems = ref([]);
|
||||
// 套餐当前模式: add-新增, edit-编辑, view-查看
|
||||
const packageMode = ref('add');
|
||||
// 当前编辑的套餐ID(用于编辑和查看模式)
|
||||
const currentPackageId = ref(null);
|
||||
// 是否为查看模式(只读)
|
||||
const isViewMode = computed(() => packageMode.value === 'view');
|
||||
|
||||
let addingItem = false;
|
||||
const addPackageItem = () => {
|
||||
@@ -2651,34 +2662,50 @@ const savePackageData = async (basicInfo, detailData) => {
|
||||
});
|
||||
|
||||
try {
|
||||
// 1. 先保存基本信息
|
||||
const basicResponse = await addInspectionPackage(basicInfo);
|
||||
|
||||
// 检查响应码
|
||||
if (basicResponse.code !== 200) {
|
||||
loading.close();
|
||||
throw new Error(basicResponse.msg || '保存基本信息失败');
|
||||
// 判断是新增还是编辑模式
|
||||
const isEditMode = packageMode.value === 'edit' && currentPackageId.value;
|
||||
|
||||
// 如果是编辑模式,设置packageId到basicInfo中
|
||||
if (isEditMode) {
|
||||
basicInfo.packageId = currentPackageId.value;
|
||||
}
|
||||
|
||||
// 检查响应数据结构 - 兼容多种可能的响应格式
|
||||
|
||||
// 1. 先保存或更新基本信息
|
||||
let packageId = null;
|
||||
let basicResponse;
|
||||
|
||||
if (isEditMode) {
|
||||
// 编辑模式:调用更新API
|
||||
basicResponse = await updateInspectionPackage(basicInfo);
|
||||
packageId = currentPackageId.value;
|
||||
} else {
|
||||
// 新增模式:调用新增API
|
||||
basicResponse = await addInspectionPackage(basicInfo);
|
||||
|
||||
// 检查响应码
|
||||
if (basicResponse.code !== 200) {
|
||||
loading.close();
|
||||
throw new Error(basicResponse.msg || '保存基本信息失败');
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
// 检查响应数据结构 - 兼容多种可能的响应格式
|
||||
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字段');
|
||||
// 验证套餐ID是否存在
|
||||
if (!packageId) {
|
||||
loading.close();
|
||||
console.error('无法从响应中获取套餐ID,完整响应:', basicResponse);
|
||||
throw new Error('保存成功但未返回套餐ID。请检查后端接口是否正确返回了packageId或id字段');
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 分别保存每个明细数据到明细表,并将后端返回的 id 回填到 packageItems
|
||||
@@ -2780,6 +2807,10 @@ const doResetForm = () => {
|
||||
|
||||
// 清空明细数据
|
||||
packageItems.value = [];
|
||||
|
||||
// 重置模式为新增
|
||||
packageMode.value = 'add';
|
||||
currentPackageId.value = null;
|
||||
|
||||
// 重新计算金额
|
||||
calculateAmounts();
|
||||
@@ -2857,6 +2888,13 @@ const handlePackageManagement = () => {
|
||||
});
|
||||
};
|
||||
|
||||
const handleBackToManagement = () => {
|
||||
// 返回套餐管理页面
|
||||
router.push({
|
||||
path: '/maintainSystem/Inspection/PackageManagement'
|
||||
});
|
||||
};
|
||||
|
||||
const refreshPage = () => {
|
||||
getInspectionTypeList();
|
||||
};
|
||||
@@ -2889,7 +2927,19 @@ watch(
|
||||
|
||||
const applyRouteForPackage = async (query) => {
|
||||
const packageId = query?.packageId;
|
||||
if (!packageId) return;
|
||||
const mode = query?.mode || 'add';
|
||||
|
||||
// 设置当前模式和套餐ID
|
||||
packageMode.value = mode;
|
||||
currentPackageId.value = packageId ? String(packageId) : null;
|
||||
|
||||
// 如果是新增模式,重置表单
|
||||
if (mode === 'add' || !packageId) {
|
||||
activeNav.value = 2;
|
||||
doResetForm();
|
||||
return;
|
||||
}
|
||||
|
||||
activeNav.value = 2;
|
||||
await nextTick();
|
||||
loadInspectionPackage(String(packageId));
|
||||
|
||||
Reference in New Issue
Block a user