From 8beff2ee145bf22b3a288b3b22056737bed64976 Mon Sep 17 00:00:00 2001 From: qk123 <18211963828.@163.cpm> Date: Fri, 28 Nov 2025 17:03:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=96=B9=E6=B3=95=E3=80=81?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E9=83=A8=E4=BD=8D=E5=89=8D=E7=AB=AF=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E3=80=81=E5=AE=8C=E5=96=84=E5=90=8E=E7=AB=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CheckMethodAppServiceImpl.java | 8 + .../impl/CheckPartAppServiceImpl.java | 41 +- .../openhis/web/check/dto/CheckMethodDto.java | 3 - .../openhis/web/check/dto/CheckPartDto.java | 31 + .../checkprojectSettings/index.vue | 810 ++++++++++++++---- 5 files changed, 733 insertions(+), 160 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckMethodAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckMethodAppServiceImpl.java index fe128bbf..de97ffbf 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckMethodAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckMethodAppServiceImpl.java @@ -2,6 +2,7 @@ package com.openhis.web.check.appservice.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.openhis.check.domain.CheckMethod; import com.openhis.check.service.ICheckMethodService; @@ -46,9 +47,16 @@ public class CheckMethodAppServiceImpl implements ICheckMethodAppService { if (checkMethodService.getOne(wrapper) != null){ return R.fail("检查方法已存在"); } + //3.封装实体检查方法 CheckMethod checkMethod = new CheckMethod(); checkMethod.setName(checkMethodDto.getName()); + checkMethod.setCheckType(checkMethodDto.getCheckType()); + checkMethod.setCode(checkMethodDto.getCode()); + checkMethod.setPackageName(checkMethodDto.getPackageName()); + checkMethod.setExposureNum(checkMethodDto.getExposureNum()); + checkMethod.setOrderNum(checkMethodDto.getOrderNum()); + checkMethod.setRemark(checkMethodDto.getRemark()); //4.保存添加 boolean save = checkMethodService.save(checkMethod); return R.ok(); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckPartAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckPartAppServiceImpl.java index e3f131c8..0c2a3972 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckPartAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckPartAppServiceImpl.java @@ -1,5 +1,7 @@ package com.openhis.web.check.appservice.impl; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.core.common.core.domain.R; import com.openhis.check.domain.CheckPart; import com.openhis.check.service.ICheckPartService; @@ -23,12 +25,49 @@ public class CheckPartAppServiceImpl implements ICheckPartAppService { @Override public R addCheckPart(CheckPartDto checkPartDto) { + //数据检验 + if(ObjectUtil.isEmpty(checkPartDto.getName())){ + return R.fail("检查项目名称不能为空"); + } + if(ObjectUtil.isEmpty(checkPartDto.getCode())){ + return R.fail("检查项目代码不能为空"); + } + if(ObjectUtil.isEmpty(checkPartDto.getCheckType())){ + return R.fail("检查项目类型不能为空"); + } + //唯一性检验 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(CheckPart::getName, checkPartDto.getName()) + .eq(CheckPart::getCode, checkPartDto.getCode()) + .eq(CheckPart::getCheckType, checkPartDto.getCheckType()); + if (checkPartService.getOne(wrapper) != null){ + return R.fail("检查部位已存在"); + } + //封装数据 + CheckPart checkPart = new CheckPart(); + checkPart.setName(checkPartDto.getName()); + checkPart.setCode(checkPartDto.getCode()); + checkPart.setCheckType(checkPartDto.getCheckType()); + checkPart.setExposureNum(checkPartDto.getExposureNum()); + checkPart.setPackageName(checkPartDto.getPackageName()); + checkPart.setPrice(checkPartDto.getPrice()); + checkPart.setNumber(checkPartDto.getNumber()); + checkPart.setServiceScope(checkPartDto.getServiceScope()); + checkPart.setSubType(checkPartDto.getSubType()); + checkPart.setRemark(checkPartDto.getRemark()); + //保存 + checkPartService.save(checkPart); return R.ok(); } @Override public R removeCheckPart(Long code) { - return R.ok(); + if (ObjectUtil.isEmpty(code)){ + return R.fail("检查项目代码不能为空"); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(CheckPart::getCode, code); + boolean remove = checkPartService.remove(wrapper); + return R.ok(remove); } @Override diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/CheckMethodDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/CheckMethodDto.java index 68447d90..8bf60d9a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/CheckMethodDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/CheckMethodDto.java @@ -2,10 +2,7 @@ package com.openhis.web.check.dto; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.AllArgsConstructor; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.time.LocalDateTime; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/CheckPartDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/CheckPartDto.java index 46f53e97..75b8ed82 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/CheckPartDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/CheckPartDto.java @@ -6,5 +6,36 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) public class CheckPartDto { + /** 检查部位id */ + private Long id; + /** 检查部位名称 */ + private String name; + + /** 检查部位编码 */ + private String code; + + /** 检查部位检查类型 */ + private String checkType; + + /** 曝光次数 */ + private Integer exposureNum; + + /** 费用套餐 */ + private String packageName; + + /** 金额 */ + private Double price; + + /** 序号 */ + private Integer number; + + /** 服务范围 */ + private String serviceScope; + + /** 下级医技类型 */ + private String subType; + + /** 备注 */ + private String remark; } diff --git a/openhis-ui-vue3/src/views/maintainSystem/checkprojectSettings/index.vue b/openhis-ui-vue3/src/views/maintainSystem/checkprojectSettings/index.vue index b40b9f56..e0ab7e5a 100644 --- a/openhis-ui-vue3/src/views/maintainSystem/checkprojectSettings/index.vue +++ b/openhis-ui-vue3/src/views/maintainSystem/checkprojectSettings/index.vue @@ -52,157 +52,444 @@ @switch-to-settings="handleSwitchToSettings" /> - - - @@ -236,6 +523,19 @@ const departments = ref([]); // 表格数据 const tableData = reactive([]); +// 搜索条件 +const searchParams = reactive({ + checkMethod: '', + name: '', + packageId: '', + checkPartCode: '', + checkPartName: '', + visible: '' +}); + +// 按钮悬停状态 +const hoverAddButton = ref(false); + // 从数据库获取所有检查相关数据 onMounted(async () => { try { @@ -362,6 +662,7 @@ async function loadMenuData(menu) { typeResponse.data.forEach((item, index) => { // 直接使用数据库中的department值,不进行转换 tableData.push({ + id: item.id, // 保存id字段,用于判断是新增还是修改 row: (index + 1).toString(), code: item.code, name: item.name, @@ -379,27 +680,57 @@ async function loadMenuData(menu) { case '检查方法': const methodResponse = await listCheckMethod(); if (methodResponse && methodResponse.data) { - + methodResponse.data.forEach((item, index) => { + tableData.push({ + id: item.id, // 保存id字段,用于判断是新增还是修改 + row: (index + 1).toString(), + code: item.code, + name: item.name, + type: item.type || '', + department: item.department || '', + amount: item.amount || '0.00', + number: item.number || '999999', + remark: item.remark || '', + actions: true + }); + }); } break; case '检查部位': - const partResponse = await listCheckPart(); + // 构建检查部位的搜索参数 + const partSearchParams = { + code: searchParams.checkPartCode, + name: searchParams.checkPartName, + visible: searchParams.visible + }; + const partResponse = await listCheckPart(partSearchParams); if (partResponse && partResponse.data) { - + partResponse.data.forEach((item, index) => { + tableData.push({ + id: item.id, // 保存id字段,用于判断是新增还是修改 + row: (index + 1).toString(), + code: item.code, + name: item.name, + priority: item.priority || '1', + visible: item.visible !== undefined ? String(item.visible) : '1', + number: item.number || '999999', + remark: item.remark || '', + actions: true + }); + }); } break; case '套餐设置': const packageResponse = await listCheckPackage(); if (packageResponse && packageResponse.data) { - } break; } } catch (error) { console.error('加载菜单数据失败:', error); - alert(`加载${menu}数据失败,请检查网络或服务状态`); + ElMessage.error(`加载${menu}数据失败,请检查网络或服务状态`); } } @@ -455,23 +786,78 @@ async function handleDelete(index) { // 处理添加新行按钮点击 function handleAddNewRow() { - // 生成新行的行号 - const newRowNumber = tableData.length + 1; + // 获取当前最大行号,为新建行生成行号 + const maxRowNum = Math.max( + 0, + ...tableData.map(item => { + // 处理子行编号,如"1.1"只取主行号"1" + const rowParts = item.row.split('.'); + return parseInt(rowParts[0]) || 0; + }) + ); - // 添加新行数据 - tableData.push({ - row: newRowNumber.toString(), - code: '', - name: '', - type: '', - selected: true, - department: '', - number: '999999', - remark: '', - actions: true, - editing: true, // 新行默认进入编辑状态 - isNew: true // 标记为新增行 - }); + let newRow; + + // 根据当前激活的菜单生成不同的初始数据结构 + if (activeMenu.value === '检查类型') { + newRow = { + row: String(maxRowNum + 1), + code: '', + name: '', + type: '', + selected: true, + department: '', + number: '999999', + remark: '', + editing: true, // 新行默认进入编辑状态 + isNew: true, // 标记为新增行 + actions: true + }; + } else if (activeMenu.value === '检查方法') { + newRow = { + row: String(maxRowNum + 1), + code: '', + name: '', + type: '', + department: '', + amount: '0.00', + number: '999999', + remark: '', + editing: true, // 新行默认进入编辑状态 + isNew: true, // 标记为新增行 + actions: true + }; + } else if (activeMenu.value === '检查部位') { + newRow = { + row: String(maxRowNum + 1), + code: '', + name: '', + priority: '1', + visible: '1', + number: '999999', + remark: '', + editing: true, // 新行默认进入编辑状态 + isNew: true, // 标记为新增行 + actions: true + }; + } else { + // 默认数据结构 + newRow = { + row: String(maxRowNum + 1), + code: '', + name: '', + type: '', + selected: true, + department: '', + number: '999999', + remark: '', + editing: true, // 新行默认进入编辑状态 + isNew: true, // 标记为新增行 + actions: true + }; + } + + tableData.push(newRow); } // 处理添加按钮点击 @@ -495,6 +881,41 @@ function handleAdd(index) { // 在父行后插入子行 tableData.splice(index + 1, 0, childRow); } + +// 处理搜索功能 +function handleSearch() { + console.log('搜索条件:', searchParams); + // 这里可以根据activeMenu和searchParams实现不同的搜索逻辑 + ElMessage.info(`正在搜索${activeMenu.value}数据...`); + + // 模拟搜索延迟 + setTimeout(() => { + // 根据activeMenu执行相应的搜索逻辑 + loadMenuData(activeMenu.value); + }, 300); +} + +// 处理重置功能 +function handleReset() { + // 重置所有搜索条件 + searchParams.checkMethod = ''; + searchParams.name = ''; + searchParams.packageId = ''; + searchParams.checkPartCode = ''; + searchParams.checkPartName = ''; + searchParams.visible = ''; + + ElMessage.info('搜索条件已重置'); +} + +// 处理导出表格功能 +function handleExport() { + console.log('导出表格:', activeMenu.value); + ElMessage.success(`正在导出${activeMenu.value}数据,请稍候...`); + + // 这里可以实现实际的导出逻辑 + // 例如调用API或使用前端库生成Excel文件 +}