275 276 284 285 286 287 检查项目设置-》套餐管理:卫生机构下拉选项取值错误
检查项目设置-》检查部位:下拉医技类型未做成下拉选项 检查项目设置-》检查方法:费用套餐筛选字段不可以模糊查找选项内容。 检查项目设置-》检查方法:点【导出表格】报错。 检查项目设置-》检查部位:点击【导出表格】报错 检查项目设置-》套餐设置:【套餐设置】改成【套餐管理】好区分
This commit is contained in:
@@ -58,11 +58,14 @@ const service = axios.create({
|
||||
// 新增:重写响应解析逻辑,大数字自动转字符串(移到这里!)
|
||||
transformResponse: [
|
||||
function (data) {
|
||||
if (!data) return {} // 空数据直接返回,避免解析报错
|
||||
if (!data) return {}
|
||||
// 如果是 Blob 或 ArrayBuffer,直接返回,不进行 JSON 解析
|
||||
if (data instanceof Blob || data instanceof ArrayBuffer) {
|
||||
return data
|
||||
}
|
||||
try {
|
||||
return jsonBig.parse(data)
|
||||
} catch (err) {
|
||||
// 解析失败时用默认方式,兼容特殊情况
|
||||
return JSON.parse(data)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="package-settings">
|
||||
<!-- 顶部操作按钮区 -->
|
||||
<div class="header-actions">
|
||||
<el-button type="primary" @click="handlePackageManagement">套餐设置</el-button>
|
||||
<el-button type="primary" @click="handlePackageManagement">套餐管理</el-button>
|
||||
<el-button type="primary" v-if="!isReadOnly" @click="handleRefresh" :loading="loading">刷新</el-button>
|
||||
<el-button v-if="!isReadOnly" type="success" @click="handleSave">保存</el-button>
|
||||
</div>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
<!-- 主内容区域 -->
|
||||
<div class="content">
|
||||
<!-- 套餐管理和套餐设置 -->
|
||||
<!-- 套餐设置 -->
|
||||
<template v-if="activeMenu === '套餐设置'">
|
||||
<!-- 套餐设置界面(默认显示) -->
|
||||
<PackageSettings
|
||||
@@ -553,7 +553,7 @@
|
||||
<template v-if="item.editing">
|
||||
<el-select v-model="item.subType" placeholder="选择下级医技类型" style="width: 100%" clearable filterable>
|
||||
<el-option
|
||||
v-for="opt in checkTypeOptionsForMethodPart"
|
||||
v-for="opt in getSubTypeOptions(item.checkType)"
|
||||
:key="opt.value"
|
||||
:label="opt.label"
|
||||
:value="opt.value"
|
||||
@@ -660,7 +660,7 @@ const menus = ['检查类型', '检查方法', '检查部位', '套餐设置'];
|
||||
const activeMenu = ref('检查类型');
|
||||
|
||||
// 套餐视图状态: management-套餐管理列表, settings-套餐设置
|
||||
const packageView = ref('management')
|
||||
const packageView = ref('settings')
|
||||
// 套餐设置模式: add-新增, edit-编辑, view-查看
|
||||
const packageMode = ref('add')
|
||||
// 当前编辑的套餐数据
|
||||
@@ -719,11 +719,58 @@ const checkTypeOptions = ref([]);
|
||||
return option ? option.label : value;
|
||||
};
|
||||
|
||||
|
||||
// 根据字典值获取服务范围标签
|
||||
const getServiceScopeLabel = (value) => {
|
||||
const dictItem = serviceScopeDicts.value.find(item => item.dictValue === value);
|
||||
return dictItem ? dictItem.dictLabel : value;
|
||||
};
|
||||
|
||||
// 根据检查类型获取下级医技类型的选项
|
||||
const getSubTypeOptions = (checkTypeValue) => {
|
||||
// 根据需求:
|
||||
// 1. 拿着检查部位页面中的检查类型字段的值去检查类型页面
|
||||
// 2. 找到其对应真正的检查类型字段的值
|
||||
// 3. 再看有哪几行检查类型是一样的
|
||||
// 4. 再把这几行的名称返回给下级医技选项
|
||||
// 5. 只有选择部位打勾的才返回
|
||||
|
||||
if (!checkTypeValue) {
|
||||
// 如果没有选择检查类型,返回空数组
|
||||
return [];
|
||||
}
|
||||
|
||||
// 从检查类型数据中查找匹配的记录
|
||||
// 首先找到当前选中的检查类型对应的完整记录
|
||||
const currentCheckTypeRecord = checkTypeData.find(record => record.name === checkTypeValue);
|
||||
|
||||
if (!currentCheckTypeRecord) {
|
||||
// 如果找不到对应的记录,返回空数组
|
||||
return [];
|
||||
}
|
||||
|
||||
// 获取当前记录的"检查类型"字段值
|
||||
const targetTypeValue = currentCheckTypeRecord.type;
|
||||
|
||||
if (!targetTypeValue) {
|
||||
// 如果没有检查类型值,返回空数组
|
||||
return [];
|
||||
}
|
||||
|
||||
// 在检查类型数据中查找所有检查类型字段值相同且选择部位打勾的记录
|
||||
const matchedRecords = checkTypeData.filter(record =>
|
||||
record.type === targetTypeValue && record.selected
|
||||
);
|
||||
|
||||
// 将匹配记录的名称作为选项返回
|
||||
return matchedRecords.map(record => ({
|
||||
value: record.name,
|
||||
label: record.name,
|
||||
id: record.id,
|
||||
code: record.code
|
||||
}));
|
||||
};
|
||||
|
||||
const checkParts = ref([]);
|
||||
const checkPackages = ref([]);
|
||||
// 套餐下拉选项的过滤结果
|
||||
@@ -1815,44 +1862,64 @@ function handleExport() {
|
||||
console.log('导出表格:', activeMenu.value);
|
||||
|
||||
if (activeMenu.value === '检查方法') {
|
||||
// 调用检查方法导出API
|
||||
exportCheckMethod(searchParamsMethod).then(blobData => {
|
||||
// 直接使用blobData创建下载链接,因为response拦截器已经返回了res.data
|
||||
const blob = new Blob([blobData], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
// 设置文件名
|
||||
link.setAttribute('download', `检查方法数据_${new Date().toISOString().slice(0, 10)}.xlsx`);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
// 清理
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url);
|
||||
ElMessage.success('检查方法数据导出成功');
|
||||
}).catch(error => {
|
||||
console.error('导出检查方法数据失败:', error);
|
||||
ElMessage.error('导出检查方法数据失败');
|
||||
// 使用封装好的API方法
|
||||
import('@/api/system/checkType').then(apiModule => {
|
||||
apiModule.exportCheckMethod(searchParamsMethod)
|
||||
.then(data => {
|
||||
const isBlob = data && data.type && data.type.indexOf('application/json') === -1;
|
||||
if (isBlob) {
|
||||
const url = window.URL.createObjectURL(data);
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
link.setAttribute('download', `检查方法数据_${new Date().toISOString().slice(0, 10)}.xlsx`);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url);
|
||||
ElMessage.success('检查方法数据导出成功');
|
||||
} else {
|
||||
data.text().then(text => {
|
||||
const errorObj = JSON.parse(text);
|
||||
ElMessage.error(errorObj.msg || errorObj.message || '导出检查方法数据失败');
|
||||
}).catch(() => {
|
||||
ElMessage.error('导出检查方法数据失败');
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('导出检查方法数据失败:', error);
|
||||
ElMessage.error('导出检查方法数据失败');
|
||||
});
|
||||
});
|
||||
} else if (activeMenu.value === '检查部位') {
|
||||
// 调用检查部位导出API
|
||||
exportCheckPart(searchParamsPart).then(blobData => {
|
||||
// 直接使用blobData创建下载链接,因为response拦截器已经返回了res.data
|
||||
const blob = new Blob([blobData], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
// 设置文件名
|
||||
link.setAttribute('download', `检查部位数据_${new Date().toISOString().slice(0, 10)}.xlsx`);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
// 清理
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url);
|
||||
ElMessage.success('检查部位数据导出成功');
|
||||
}).catch(error => {
|
||||
console.error('导出检查部位数据失败:', error);
|
||||
ElMessage.error('导出检查部位数据失败');
|
||||
// 使用封装好的API方法
|
||||
import('@/api/system/checkType').then(apiModule => {
|
||||
apiModule.exportCheckPart(searchParamsPart)
|
||||
.then(data => {
|
||||
const isBlob = data && data.type && data.type.indexOf('application/json') === -1;
|
||||
if (isBlob) {
|
||||
const url = window.URL.createObjectURL(data);
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
link.setAttribute('download', `检查部位数据_${new Date().toISOString().slice(0, 10)}.xlsx`);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url);
|
||||
ElMessage.success('检查部位数据导出成功');
|
||||
} else {
|
||||
data.text().then(text => {
|
||||
const errorObj = JSON.parse(text);
|
||||
ElMessage.error(errorObj.msg || errorObj.message || '导出检查部位数据失败');
|
||||
}).catch(() => {
|
||||
ElMessage.error('导出检查部位数据失败');
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('导出检查部位数据失败:', error);
|
||||
ElMessage.error('导出检查部位数据失败');
|
||||
});
|
||||
});
|
||||
} else {
|
||||
// 其他菜单的导出逻辑可以在这里扩展
|
||||
|
||||
Reference in New Issue
Block a user