From 00604b2d0185a39da161fa4e5aedbd4e66ce638d Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 14:02:42 +0800 Subject: [PATCH 01/23] =?UTF-8?q?feat(mrhomepage):=20=E7=97=85=E6=A1=88?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E8=B4=A8=E9=87=8F=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 IMrHomepageQualityAppService + impl,实现 checkQuality/getQualityResults - 新增 MrHomepageQualityController (POST /quality/check, GET /quality/results/{id}) - 增强 MrHomepageQualityCheckServiceImpl:必填项+逻辑校验+ICD编码+费用一致性 - 新增 MrHomepageQualityCheck.vue 校验结果展示页面 - 更新前端 API 文件添加 checkQuality/getQualityResults 接口 --- .../IMrHomepageQualityAppService.java | 13 ++ .../impl/MrHomepageQualityAppServiceImpl.java | 54 ++++++ .../MrHomepageQualityController.java | 36 ++++ .../IMrHomepageQualityCheckService.java | 2 + .../MrHomepageQualityCheckServiceImpl.java | 176 ++++++++++++++---- healthlink-his-ui/src/api/mrhomepage.js | 2 + healthlink-his-ui/src/api/mrhomepage/index.js | 2 + .../src/views/mrhomepage/quality/index.vue | 171 +++++++++++++++++ 8 files changed, 420 insertions(+), 36 deletions(-) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/IMrHomepageQualityAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/impl/MrHomepageQualityAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHomepageQualityController.java create mode 100644 healthlink-his-ui/src/views/mrhomepage/quality/index.vue diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/IMrHomepageQualityAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/IMrHomepageQualityAppService.java new file mode 100644 index 000000000..30ce9d76b --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/IMrHomepageQualityAppService.java @@ -0,0 +1,13 @@ +package com.healthlink.his.web.mrhomepage.appservice; + +import com.healthlink.his.mrhomepage.domain.MrHomepageQualityCheck; + +import java.util.List; +import java.util.Map; + +public interface IMrHomepageQualityAppService { + + List checkQuality(Long homepageId); + + Map getQualityResults(Long homepageId); +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/impl/MrHomepageQualityAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/impl/MrHomepageQualityAppServiceImpl.java new file mode 100644 index 000000000..3fb01d193 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/impl/MrHomepageQualityAppServiceImpl.java @@ -0,0 +1,54 @@ +package com.healthlink.his.web.mrhomepage.appservice.impl; + +import com.healthlink.his.mrhomepage.domain.MrHomepage; +import com.healthlink.his.mrhomepage.domain.MrHomepageQualityCheck; +import com.healthlink.his.mrhomepage.service.IMrHomepageQualityCheckService; +import com.healthlink.his.mrhomepage.service.IMrHomepageService; +import com.healthlink.his.web.mrhomepage.appservice.IMrHomepageQualityAppService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class MrHomepageQualityAppServiceImpl implements IMrHomepageQualityAppService { + + @Resource + private IMrHomepageService mrHomepageService; + + @Resource + private IMrHomepageQualityCheckService mrHomepageQualityCheckService; + + @Override + @Transactional + public List checkQuality(Long homepageId) { + mrHomepageQualityCheckService.clearByHomepageId(homepageId); + return mrHomepageQualityCheckService.executeAutoCheck(homepageId); + } + + @Override + public Map getQualityResults(Long homepageId) { + MrHomepage homepage = mrHomepageService.getById(homepageId); + List checks = mrHomepageQualityCheckService.selectByHomepageId(homepageId); + + long totalChecks = checks.size(); + long passedChecks = checks.stream() + .filter(c -> "PASS".equals(c.getCheckResult())) + .count(); + long failedChecks = totalChecks - passedChecks; + double score = totalChecks > 0 ? (double) passedChecks / totalChecks * 100 : 0; + + Map results = new HashMap<>(); + results.put("homepageId", homepageId); + results.put("qualityStatus", homepage != null ? homepage.getQualityStatus() : null); + results.put("totalChecks", totalChecks); + results.put("passedChecks", passedChecks); + results.put("failedChecks", failedChecks); + results.put("score", Math.round(score * 10.0) / 10.0); + results.put("checks", checks); + return results; + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHomepageQualityController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHomepageQualityController.java new file mode 100644 index 000000000..9ed08bed0 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHomepageQualityController.java @@ -0,0 +1,36 @@ +package com.healthlink.his.web.mrhomepage.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.mrhomepage.domain.MrHomepageQualityCheck; +import com.healthlink.his.web.mrhomepage.appservice.IMrHomepageQualityAppService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/v1/mr-homepage/quality") +@Tag(name = "病案首页质量校验") +public class MrHomepageQualityController { + + @Resource + private IMrHomepageQualityAppService mrHomepageQualityAppService; + + @PostMapping("/check") + @PreAuthorize("hasAuthority('inpatient:mrhomepage:edit')") + @Operation(summary = "执行质量校验") + public R> checkQuality(@RequestParam Long homepageId) { + return R.ok(mrHomepageQualityAppService.checkQuality(homepageId)); + } + + @GetMapping("/results/{homepageId}") + @PreAuthorize("hasAuthority('inpatient:mrhomepage:list')") + @Operation(summary = "获取质量校验结果") + public R> getQualityResults(@PathVariable Long homepageId) { + return R.ok(mrHomepageQualityAppService.getQualityResults(homepageId)); + } +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/IMrHomepageQualityCheckService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/IMrHomepageQualityCheckService.java index cb4095060..9e16d260b 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/IMrHomepageQualityCheckService.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/IMrHomepageQualityCheckService.java @@ -10,4 +10,6 @@ public interface IMrHomepageQualityCheckService extends IService selectByHomepageId(Long homepageId); List executeAutoCheck(Long homepageId); + + void clearByHomepageId(Long homepageId); } diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/impl/MrHomepageQualityCheckServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/impl/MrHomepageQualityCheckServiceImpl.java index 9bc4d3b95..8e710e8da 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/impl/MrHomepageQualityCheckServiceImpl.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/impl/MrHomepageQualityCheckServiceImpl.java @@ -1,5 +1,6 @@ package com.healthlink.his.mrhomepage.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.healthlink.his.mrhomepage.domain.MrHomepage; import com.healthlink.his.mrhomepage.domain.MrHomepageQualityCheck; @@ -10,15 +11,19 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.regex.Pattern; @Service public class MrHomepageQualityCheckServiceImpl extends ServiceImpl implements IMrHomepageQualityCheckService { + private static final Pattern ICD10_PATTERN = Pattern.compile("^[A-Z]\\d{2}(\\.\\d{1,4})?$"); + @Resource private IMrHomepageService mrHomepageService; @@ -27,51 +32,150 @@ public class MrHomepageQualityCheckServiceImpl return baseMapper.selectByHomepageId(homepageId); } + @Override + @Transactional + public void clearByHomepageId(Long homepageId) { + remove(new LambdaQueryWrapper() + .eq(MrHomepageQualityCheck::getHomepageId, homepageId)); + } + @Override @Transactional public List executeAutoCheck(Long homepageId) { MrHomepage homepage = mrHomepageService.getById(homepageId); + if (homepage == null) { + return List.of(); + } List checks = new ArrayList<>(); + Date now = new Date(); - // 主诊断编码检查 - MrHomepageQualityCheck diagnosisCheck = new MrHomepageQualityCheck() - .setHomepageId(homepageId) - .setCheckItem("主诊断编码完整性") - .setCheckCategory("基础信息") - .setCheckResult(homepage.getPrimaryDiagnosisCode() != null ? "PASS" : "FAIL") - .setCheckDetail("主诊断编码: " + homepage.getPrimaryDiagnosisCode()) - .setSuggestion(homepage.getPrimaryDiagnosisCode() == null ? "请填写主诊断编码" : null) - .setChecker("AUTO") - .setCheckTime(new Date()); - save(diagnosisCheck); - checks.add(diagnosisCheck); + checkRequiredField(checks, homepageId, "患者ID", "基础信息", + homepage.getPatientId() != null, "患者ID", now); + checkRequiredField(checks, homepageId, "就诊ID", "基础信息", + homepage.getEncounterId() != null, "就诊ID", now); + checkRequiredField(checks, homepageId, "入院日期", "日期信息", + homepage.getAdmissionDate() != null, "入院日期", now); + checkRequiredField(checks, homepageId, "出院日期", "日期信息", + homepage.getDischargeDate() != null, "出院日期", now); + checkRequiredField(checks, homepageId, "主诊断编码", "诊断信息", + homepage.getPrimaryDiagnosisCode() != null, "主诊断编码", now); + checkRequiredField(checks, homepageId, "主诊断名称", "诊断信息", + homepage.getPrimaryDiagnosisName() != null, "主诊断名称", now); + checkRequiredField(checks, homepageId, "出院情况", "出院信息", + homepage.getDischargeCondition() != null, "出院情况", now); + checkRequiredField(checks, homepageId, "出院去向", "出院信息", + homepage.getDischargeDestination() != null, "出院去向", now); - // 主手术编码检查 - MrHomepageQualityCheck procedureCheck = new MrHomepageQualityCheck() - .setHomepageId(homepageId) - .setCheckItem("主手术编码完整性") - .setCheckCategory("基础信息") - .setCheckResult(homepage.getPrimaryProcedureCode() != null ? "PASS" : "FAIL") - .setCheckDetail("主手术编码: " + homepage.getPrimaryProcedureCode()) - .setSuggestion(homepage.getPrimaryProcedureCode() == null ? "请填写主手术编码" : null) - .setChecker("AUTO") - .setCheckTime(new Date()); - save(procedureCheck); - checks.add(procedureCheck); + if (homepage.getAdmissionDate() != null && homepage.getDischargeDate() != null) { + boolean dateValid = !homepage.getAdmissionDate().after(homepage.getDischargeDate()); + addCheck(checks, homepageId, "入院日期≤出院日期", "逻辑校验", + dateValid ? "PASS" : "FAIL", + "入院: " + homepage.getAdmissionDate() + ", 出院: " + homepage.getDischargeDate(), + dateValid ? null : "入院日期不能晚于出院日期", "AUTO", now); + } - // 入院日期检查 - MrHomepageQualityCheck admissionCheck = new MrHomepageQualityCheck() - .setHomepageId(homepageId) - .setCheckItem("入院日期完整性") - .setCheckCategory("日期信息") - .setCheckResult(homepage.getAdmissionDate() != null ? "PASS" : "FAIL") - .setCheckDetail("入院日期: " + homepage.getAdmissionDate()) - .setSuggestion(homepage.getAdmissionDate() == null ? "请填写入院日期" : null) - .setChecker("AUTO") - .setCheckTime(new Date()); - save(admissionCheck); - checks.add(admissionCheck); + if (homepage.getAdmissionDate() != null && homepage.getDischargeDate() != null + && homepage.getLosDays() != null) { + long diffMs = homepage.getDischargeDate().getTime() - homepage.getAdmissionDate().getTime(); + long expectedDays = Math.max(1, diffMs / (1000 * 60 * 60 * 24) + 1); + boolean losValid = homepage.getLosDays().intValue() == expectedDays; + addCheck(checks, homepageId, "住院天数一致性", "逻辑校验", + losValid ? "PASS" : "FAIL", + "记录天数: " + homepage.getLosDays() + ", 计算天数: " + expectedDays, + losValid ? null : "住院天数应为" + expectedDays + "天", "AUTO", now); + } + + if (homepage.getPrimaryDiagnosisCode() != null) { + boolean icdValid = ICD10_PATTERN.matcher(homepage.getPrimaryDiagnosisCode()).matches(); + addCheck(checks, homepageId, "主诊断ICD编码格式", "ICD编码", + icdValid ? "PASS" : "FAIL", + "编码: " + homepage.getPrimaryDiagnosisCode(), + icdValid ? null : "ICD-10编码格式应为: 字母+2位数字(.可选小数)", "AUTO", now); + } + + if (homepage.getPrimaryProcedureCode() != null) { + boolean icdValid = ICD10_PATTERN.matcher(homepage.getPrimaryProcedureCode()).matches(); + addCheck(checks, homepageId, "主手术ICD编码格式", "ICD编码", + icdValid ? "PASS" : "FAIL", + "编码: " + homepage.getPrimaryProcedureCode(), + icdValid ? null : "ICD-9-CM-3编码格式应为: 字母+2位数字(.可选小数)", "AUTO", now); + } + + checkCostNonNegative(checks, homepageId, "总费用", homepage.getTotalCost(), now); + checkCostNonNegative(checks, homepageId, "自费费用", homepage.getSelfPayCost(), now); + checkCostNonNegative(checks, homepageId, "医保费用", homepage.getInsuranceCost(), now); + checkCostNonNegative(checks, homepageId, "药品费", homepage.getDrugCost(), now); + checkCostNonNegative(checks, homepageId, "检查费", homepage.getExaminationCost(), now); + checkCostNonNegative(checks, homepageId, "化验费", homepage.getLabCost(), now); + checkCostNonNegative(checks, homepageId, "治疗费", homepage.getTreatmentCost(), now); + checkCostNonNegative(checks, homepageId, "材料费", homepage.getMaterialCost(), now); + + if (homepage.getTotalCost() != null && homepage.getTotalCost().compareTo(BigDecimal.ZERO) > 0) { + BigDecimal sum = BigDecimal.ZERO; + sum = safeAdd(sum, homepage.getDrugCost()); + sum = safeAdd(sum, homepage.getExaminationCost()); + sum = safeAdd(sum, homepage.getLabCost()); + sum = safeAdd(sum, homepage.getTreatmentCost()); + sum = safeAdd(sum, homepage.getMaterialCost()); + boolean costValid = homepage.getTotalCost().compareTo(sum) == 0; + addCheck(checks, homepageId, "费用构成一致性", "逻辑校验", + costValid ? "PASS" : "FAIL", + "总费用: " + homepage.getTotalCost() + ", 分项合计: " + sum, + costValid ? null : "总费用应等于药品费+检查费+化验费+治疗费+材料费", "AUTO", now); + } + + if (homepage.getSelfPayCost() != null && homepage.getInsuranceCost() != null + && homepage.getTotalCost() != null && homepage.getTotalCost().compareTo(BigDecimal.ZERO) > 0) { + BigDecimal paySum = safeAdd(homepage.getSelfPayCost(), homepage.getInsuranceCost()); + boolean payValid = homepage.getTotalCost().compareTo(paySum) == 0; + addCheck(checks, homepageId, "费用分担一致性", "逻辑校验", + payValid ? "PASS" : "FAIL", + "总费用: " + homepage.getTotalCost() + ", 自费+医保: " + paySum, + payValid ? null : "总费用应等于自费费用+医保费用", "AUTO", now); + } return checks; } + + private void checkRequiredField(List checks, Long homepageId, + String itemName, String category, boolean isValid, + String fieldName, Date now) { + addCheck(checks, homepageId, itemName + "完整性", category, + isValid ? "PASS" : "FAIL", + fieldName + ": " + (isValid ? "已填写" : "未填写"), + isValid ? null : "请填写" + fieldName, "AUTO", now); + } + + private void checkCostNonNegative(List checks, Long homepageId, + String costName, BigDecimal value, Date now) { + if (value != null) { + boolean valid = value.compareTo(BigDecimal.ZERO) >= 0; + addCheck(checks, homepageId, costName + "非负", "费用信息", + valid ? "PASS" : "FAIL", + costName + ": " + value, + valid ? null : costName + "不能为负数", "AUTO", now); + } + } + + private void addCheck(List checks, Long homepageId, + String checkItem, String category, String result, + String detail, String suggestion, String checker, Date now) { + MrHomepageQualityCheck check = new MrHomepageQualityCheck() + .setHomepageId(homepageId) + .setCheckItem(checkItem) + .setCheckCategory(category) + .setCheckResult(result) + .setCheckDetail(detail) + .setSuggestion(suggestion) + .setChecker(checker) + .setCheckTime(now); + save(check); + checks.add(check); + } + + private BigDecimal safeAdd(BigDecimal a, BigDecimal b) { + if (a == null) return b != null ? b : BigDecimal.ZERO; + if (b == null) return a; + return a.add(b); + } } diff --git a/healthlink-his-ui/src/api/mrhomepage.js b/healthlink-his-ui/src/api/mrhomepage.js index 67526624e..057592e52 100644 --- a/healthlink-his-ui/src/api/mrhomepage.js +++ b/healthlink-his-ui/src/api/mrhomepage.js @@ -1,3 +1,5 @@ import request from "@/utils/request" export function executeQualityCheck(id) { return request({ url: "/api/v1/mr-homepage/quality-check/" + id, method: "post" }) } export function submitHomepage(id) { return request({ url: "/api/v1/mr-homepage/submit/" + id, method: "put" }) } +export function checkQuality(homepageId) { return request({ url: "/api/v1/mr-homepage/quality/check", method: "post", params: { homepageId } }) } +export function getQualityResults(homepageId) { return request({ url: "/api/v1/mr-homepage/quality/results/" + homepageId, method: "get" }) } diff --git a/healthlink-his-ui/src/api/mrhomepage/index.js b/healthlink-his-ui/src/api/mrhomepage/index.js index 370befdd6..f66ceb4b0 100644 --- a/healthlink-his-ui/src/api/mrhomepage/index.js +++ b/healthlink-his-ui/src/api/mrhomepage/index.js @@ -6,3 +6,5 @@ export function executeQualityCheck(id) { return request({ url: '/api/v1/mr-home export function getQualityCheck(homepageId) { return request({ url: '/api/v1/mr-homepage/quality-check/' + homepageId, method: 'get' }) } export function getStatistics(params) { return request({ url: '/api/v1/mr-homepage/statistics', method: 'get', params }) } export function submitHomepage(id) { return request({ url: '/api/v1/mr-homepage/submit/' + id, method: 'put' }) } +export function checkQuality(homepageId) { return request({ url: '/api/v1/mr-homepage/quality/check', method: 'post', params: { homepageId } }) } +export function getQualityResults(homepageId) { return request({ url: '/api/v1/mr-homepage/quality/results/' + homepageId, method: 'get' }) } diff --git a/healthlink-his-ui/src/views/mrhomepage/quality/index.vue b/healthlink-his-ui/src/views/mrhomepage/quality/index.vue new file mode 100644 index 000000000..4f8306dba --- /dev/null +++ b/healthlink-his-ui/src/views/mrhomepage/quality/index.vue @@ -0,0 +1,171 @@ + + + + + From 1df1f0d1ad13501f159b7353e8d677c34dfedeef Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 14:14:45 +0800 Subject: [PATCH 02/23] =?UTF-8?q?feat(mrhomepage):=20HQMS=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appservice/IMrHqmsReportAppService.java | 15 ++ .../impl/MrHqmsReportAppServiceImpl.java | 105 ++++++++++ .../controller/MrHqmsReportController.java | 45 +++++ .../db/migration/V65__mr_hqms_report.sql | 27 +++ .../his/mrhomepage/domain/MrHqmsReport.java | 43 +++++ .../mrhomepage/mapper/MrHqmsReportMapper.java | 16 ++ .../service/IMrHqmsReportService.java | 13 ++ .../service/impl/MrHqmsReportServiceImpl.java | 25 +++ healthlink-his-ui/src/api/mrhomepage.js | 3 + healthlink-his-ui/src/api/mrhomepage/index.js | 3 + .../src/views/mrhomepage/hqms/index.vue | 182 ++++++++++++++++++ 11 files changed, 477 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/IMrHqmsReportAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/impl/MrHqmsReportAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHqmsReportController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V65__mr_hqms_report.sql create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/domain/MrHqmsReport.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/mapper/MrHqmsReportMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/IMrHqmsReportService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/impl/MrHqmsReportServiceImpl.java create mode 100644 healthlink-his-ui/src/views/mrhomepage/hqms/index.vue diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/IMrHqmsReportAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/IMrHqmsReportAppService.java new file mode 100644 index 000000000..2b7bc83dc --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/IMrHqmsReportAppService.java @@ -0,0 +1,15 @@ +package com.healthlink.his.web.mrhomepage.appservice; + +import com.healthlink.his.mrhomepage.domain.MrHqmsReport; + +import java.util.List; +import java.util.Map; + +public interface IMrHqmsReportAppService { + + MrHqmsReport submitReport(Long homepageId, String reportType); + + Map getReportStatus(Long homepageId); + + List listReports(Long homepageId); +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/impl/MrHqmsReportAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/impl/MrHqmsReportAppServiceImpl.java new file mode 100644 index 000000000..6342427f9 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/appservice/impl/MrHqmsReportAppServiceImpl.java @@ -0,0 +1,105 @@ +package com.healthlink.his.web.mrhomepage.appservice.impl; + +import com.healthlink.his.mrhomepage.domain.MrHomepage; +import com.healthlink.his.mrhomepage.domain.MrHqmsReport; +import com.healthlink.his.mrhomepage.service.IMrHomepageService; +import com.healthlink.his.mrhomepage.service.IMrHqmsReportService; +import com.healthlink.his.web.mrhomepage.appservice.IMrHqmsReportAppService; +import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class MrHqmsReportAppServiceImpl implements IMrHqmsReportAppService { + + private static final Logger log = LoggerFactory.getLogger(MrHqmsReportAppServiceImpl.class); + + @Resource + private IMrHomepageService mrHomepageService; + + @Resource + private IMrHqmsReportService mrHqmsReportService; + + @Override + @Transactional + public MrHqmsReport submitReport(Long homepageId, String reportType) { + MrHomepage homepage = mrHomepageService.getById(homepageId); + if (homepage == null) { + throw new RuntimeException("病案首页不存在: " + homepageId); + } + + MrHqmsReport report = new MrHqmsReport() + .setHomepageId(homepageId) + .setEncounterId(homepage.getEncounterId()) + .setPatientId(homepage.getPatientId()) + .setReportType(reportType != null ? reportType : "HQMS") + .setReportStatus("SUBMITTED") + .setReportTime(new Date()) + .setRetryCount(0); + + String reportData = buildReportData(homepage); + report.setReportData(reportData); + + mrHqmsReportService.save(report); + + log.info("HQMS上报已提交: homepageId={}, reportId={}", homepageId, report.getId()); + return report; + } + + @Override + public Map getReportStatus(Long homepageId) { + List reports = mrHqmsReportService.selectByHomepageId(homepageId); + + Map status = new HashMap<>(); + status.put("homepageId", homepageId); + status.put("totalReports", reports.size()); + + long successCount = reports.stream() + .filter(r -> "SUCCESS".equals(r.getReportStatus())) + .count(); + long pendingCount = reports.stream() + .filter(r -> "PENDING".equals(r.getReportStatus()) || "SUBMITTED".equals(r.getReportStatus())) + .count(); + long failedCount = reports.stream() + .filter(r -> "FAILED".equals(r.getReportStatus())) + .count(); + + status.put("successCount", successCount); + status.put("pendingCount", pendingCount); + status.put("failedCount", failedCount); + status.put("reports", reports); + + return status; + } + + @Override + public List listReports(Long homepageId) { + return mrHqmsReportService.selectByHomepageId(homepageId); + } + + private String buildReportData(MrHomepage homepage) { + StringBuilder sb = new StringBuilder(); + sb.append("{"); + sb.append("\"homepageId\":").append(homepage.getId()); + sb.append(",\"encounterId\":").append(homepage.getEncounterId()); + sb.append(",\"patientId\":").append(homepage.getPatientId()); + sb.append(",\"admissionDate\":\"").append(homepage.getAdmissionDate() != null ? homepage.getAdmissionDate() : "").append("\""); + sb.append(",\"dischargeDate\":\"").append(homepage.getDischargeDate() != null ? homepage.getDischargeDate() : "").append("\""); + sb.append(",\"primaryDiagnosisCode\":\"").append(homepage.getPrimaryDiagnosisCode() != null ? homepage.getPrimaryDiagnosisCode() : "").append("\""); + sb.append(",\"primaryDiagnosisName\":\"").append(homepage.getPrimaryDiagnosisName() != null ? homepage.getPrimaryDiagnosisName() : "").append("\""); + sb.append(",\"primaryProcedureCode\":\"").append(homepage.getPrimaryProcedureCode() != null ? homepage.getPrimaryProcedureCode() : "").append("\""); + sb.append(",\"primaryProcedureName\":\"").append(homepage.getPrimaryProcedureName() != null ? homepage.getPrimaryProcedureName() : "").append("\""); + sb.append(",\"drgGroup\":\"").append(homepage.getDrgGroup() != null ? homepage.getDrgGroup() : "").append("\""); + sb.append(",\"totalCost\":").append(homepage.getTotalCost() != null ? homepage.getTotalCost() : 0); + sb.append(",\"losDays\":").append(homepage.getLosDays() != null ? homepage.getLosDays() : 0); + sb.append("}"); + return sb.toString(); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHqmsReportController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHqmsReportController.java new file mode 100644 index 000000000..5b511adbf --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHqmsReportController.java @@ -0,0 +1,45 @@ +package com.healthlink.his.web.mrhomepage.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.mrhomepage.domain.MrHqmsReport; +import com.healthlink.his.web.mrhomepage.appservice.IMrHqmsReportAppService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/v1/mr-homepage/hqms") +@Tag(name = "HQMS首页上报") +public class MrHqmsReportController { + + @Resource + private IMrHqmsReportAppService mrHqmsReportAppService; + + @PostMapping("/report") + @PreAuthorize("hasAuthority('inpatient:mrhomepage:edit')") + @Operation(summary = "提交HQMS上报") + public R submitReport( + @RequestParam Long homepageId, + @RequestParam(required = false, defaultValue = "HQMS") String reportType) { + return R.ok(mrHqmsReportAppService.submitReport(homepageId, reportType)); + } + + @GetMapping("/status/{homepageId}") + @PreAuthorize("hasAuthority('inpatient:mrhomepage:list')") + @Operation(summary = "查询上报状态") + public R> getReportStatus(@PathVariable Long homepageId) { + return R.ok(mrHqmsReportAppService.getReportStatus(homepageId)); + } + + @GetMapping("/list/{homepageId}") + @PreAuthorize("hasAuthority('inpatient:mrhomepage:list')") + @Operation(summary = "查询上报记录列表") + public R> listReports(@PathVariable Long homepageId) { + return R.ok(mrHqmsReportAppService.listReports(homepageId)); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V65__mr_hqms_report.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V65__mr_hqms_report.sql new file mode 100644 index 000000000..0561fadc4 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V65__mr_hqms_report.sql @@ -0,0 +1,27 @@ +-- ============================================================ +-- V65: HQMS首页上报表 +-- ============================================================ + +CREATE TABLE mr_hqms_report ( + id BIGSERIAL PRIMARY KEY, + homepage_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + report_type VARCHAR(20) NOT NULL, + report_status VARCHAR(20) DEFAULT 'PENDING', + report_time TIMESTAMP, + report_data TEXT, + response_data TEXT, + error_message TEXT, + retry_count INTEGER DEFAULT 0, + tenant_id BIGINT DEFAULT 0, + delete_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); +COMMENT ON TABLE mr_hqms_report IS 'HQMS首页上报记录'; +CREATE INDEX idx_mr_hqms_report_homepage ON mr_hqms_report(homepage_id); +CREATE INDEX idx_mr_hqms_report_encounter ON mr_hqms_report(encounter_id); +CREATE INDEX idx_mr_hqms_report_status ON mr_hqms_report(report_status); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/domain/MrHqmsReport.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/domain/MrHqmsReport.java new file mode 100644 index 000000000..229008c38 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/domain/MrHqmsReport.java @@ -0,0 +1,43 @@ +package com.healthlink.his.mrhomepage.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.Date; + +@Data +@TableName("mr_hqms_report") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class MrHqmsReport extends HisBaseEntity { + + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + private Long homepageId; + + private Long encounterId; + + private Long patientId; + + private String reportType; + + private String reportStatus; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date reportTime; + + private String reportData; + + private String responseData; + + private String errorMessage; + + private Integer retryCount; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/mapper/MrHqmsReportMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/mapper/MrHqmsReportMapper.java new file mode 100644 index 000000000..1825fa327 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/mapper/MrHqmsReportMapper.java @@ -0,0 +1,16 @@ +package com.healthlink.his.mrhomepage.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.mrhomepage.domain.MrHqmsReport; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface MrHqmsReportMapper extends BaseMapper { + + List selectByHomepageId(@Param("homepageId") Long homepageId); + + List selectByEncounterId(@Param("encounterId") Long encounterId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/IMrHqmsReportService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/IMrHqmsReportService.java new file mode 100644 index 000000000..833faeca5 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/IMrHqmsReportService.java @@ -0,0 +1,13 @@ +package com.healthlink.his.mrhomepage.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.mrhomepage.domain.MrHqmsReport; + +import java.util.List; + +public interface IMrHqmsReportService extends IService { + + List selectByHomepageId(Long homepageId); + + List selectByEncounterId(Long encounterId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/impl/MrHqmsReportServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/impl/MrHqmsReportServiceImpl.java new file mode 100644 index 000000000..8147e7a40 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/mrhomepage/service/impl/MrHqmsReportServiceImpl.java @@ -0,0 +1,25 @@ +package com.healthlink.his.mrhomepage.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.mrhomepage.domain.MrHqmsReport; +import com.healthlink.his.mrhomepage.mapper.MrHqmsReportMapper; +import com.healthlink.his.mrhomepage.service.IMrHqmsReportService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class MrHqmsReportServiceImpl + extends ServiceImpl + implements IMrHqmsReportService { + + @Override + public List selectByHomepageId(Long homepageId) { + return baseMapper.selectByHomepageId(homepageId); + } + + @Override + public List selectByEncounterId(Long encounterId) { + return baseMapper.selectByEncounterId(encounterId); + } +} diff --git a/healthlink-his-ui/src/api/mrhomepage.js b/healthlink-his-ui/src/api/mrhomepage.js index 057592e52..c7e750a91 100644 --- a/healthlink-his-ui/src/api/mrhomepage.js +++ b/healthlink-his-ui/src/api/mrhomepage.js @@ -3,3 +3,6 @@ export function executeQualityCheck(id) { return request({ url: "/api/v1/mr-home export function submitHomepage(id) { return request({ url: "/api/v1/mr-homepage/submit/" + id, method: "put" }) } export function checkQuality(homepageId) { return request({ url: "/api/v1/mr-homepage/quality/check", method: "post", params: { homepageId } }) } export function getQualityResults(homepageId) { return request({ url: "/api/v1/mr-homepage/quality/results/" + homepageId, method: "get" }) } +export function submitHqmsReport(homepageId, reportType) { return request({ url: "/api/v1/mr-homepage/hqms/report", method: "post", params: { homepageId, reportType } }) } +export function getHqmsReportStatus(homepageId) { return request({ url: "/api/v1/mr-homepage/hqms/status/" + homepageId, method: "get" }) } +export function listHqmsReports(homepageId) { return request({ url: "/api/v1/mr-homepage/hqms/list/" + homepageId, method: "get" }) } diff --git a/healthlink-his-ui/src/api/mrhomepage/index.js b/healthlink-his-ui/src/api/mrhomepage/index.js index f66ceb4b0..7ed3eab61 100644 --- a/healthlink-his-ui/src/api/mrhomepage/index.js +++ b/healthlink-his-ui/src/api/mrhomepage/index.js @@ -8,3 +8,6 @@ export function getStatistics(params) { return request({ url: '/api/v1/mr-homepa export function submitHomepage(id) { return request({ url: '/api/v1/mr-homepage/submit/' + id, method: 'put' }) } export function checkQuality(homepageId) { return request({ url: '/api/v1/mr-homepage/quality/check', method: 'post', params: { homepageId } }) } export function getQualityResults(homepageId) { return request({ url: '/api/v1/mr-homepage/quality/results/' + homepageId, method: 'get' }) } +export function submitHqmsReport(homepageId, reportType) { return request({ url: '/api/v1/mr-homepage/hqms/report', method: 'post', params: { homepageId, reportType } }) } +export function getHqmsReportStatus(homepageId) { return request({ url: '/api/v1/mr-homepage/hqms/status/' + homepageId, method: 'get' }) } +export function listHqmsReports(homepageId) { return request({ url: '/api/v1/mr-homepage/hqms/list/' + homepageId, method: 'get' }) } diff --git a/healthlink-his-ui/src/views/mrhomepage/hqms/index.vue b/healthlink-his-ui/src/views/mrhomepage/hqms/index.vue new file mode 100644 index 000000000..d00cf3a10 --- /dev/null +++ b/healthlink-his-ui/src/views/mrhomepage/hqms/index.vue @@ -0,0 +1,182 @@ + + + + + From de6d6a2b5141fcf50ea3aaa46e008b4306250e47 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 14:19:47 +0800 Subject: [PATCH 03/23] =?UTF-8?q?fix(mrhomepage):=20=E4=BF=AE=E5=A4=8DHQMS?= =?UTF-8?q?=20Mapper=20XML=E7=BC=BA=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/mrhomepage/MrHqmsReportMapper.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/mrhomepage/MrHqmsReportMapper.xml diff --git a/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/mrhomepage/MrHqmsReportMapper.xml b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/mrhomepage/MrHqmsReportMapper.xml new file mode 100644 index 000000000..c04c5a4a4 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/mrhomepage/MrHqmsReportMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + From 73aa8125445bd805c889a220d98207838e98dbb0 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 14:25:32 +0800 Subject: [PATCH 04/23] =?UTF-8?q?fix(database):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=AD=97=E5=85=B8=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=92=8C=E8=A1=A8=E7=BB=93=E6=9E=84=E7=BC=BA=E5=A4=B1=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除手术状态下拉框的重复字典数据,保留每组中dict_code最小的记录 - 修复HisBaseEntity列缺失问题,为多个表添加create_by、update_by、update_time等基础字段 - 为adm_patient表添加邮政编码、户籍地址、监护人信息、患者来源等缺失字段 - 添加文化程度字典类型和相关字典数据,补充3919到3914等10个学历级别选项 - 为adm_patient_identifier表创建tenant_id和patient_id的联合索引以提升查询性能 - 修复prescription_intercept_log和clinical_pathway_execution表的基础实体字段缺失 - 为wor_device_request表增加医嘱退回相关的back_reason、performer_check_id等字段 - 创建EMPI核心表empi_person和empi_person_id_mapping用于全局患者主 --- AGENTS.md | 4 +- RULES.md | 2 +- healthlink-his-server/AGENTS.md | 2 +- healthlink-his-ui/src/api/quality.js | 6 + .../src/assets/icons/svg/appointment.svg | 8 +- .../src/assets/icons/svg/billing.svg | 9 +- .../src/assets/icons/svg/diagnosis.svg | 9 +- .../src/assets/icons/svg/email.svg | 8 +- .../src/assets/icons/svg/emergency.svg | 9 +- .../src/assets/icons/svg/insurance.svg | 9 +- .../src/assets/icons/svg/inventory.svg | 9 +- .../src/assets/icons/svg/laboratory.svg | 7 +- .../src/assets/icons/svg/lock.svg | 8 +- .../src/assets/icons/svg/log.svg | 10 +- .../src/assets/icons/svg/message.svg | 7 +- .../src/assets/icons/svg/password.svg | 9 +- .../src/assets/icons/svg/pharmacy.svg | 9 +- .../src/assets/icons/svg/phone.svg | 10 +- .../src/assets/icons/svg/prescription.svg | 10 +- .../src/assets/icons/svg/receipt.svg | 8 +- .../src/assets/icons/svg/server.svg | 10 +- .../src/assets/icons/svg/star.svg | 7 +- .../src/assets/icons/svg/surgery.svg | 8 +- .../src/assets/icons/svg/ward.svg | 9 +- .../src/components/Crontab/day.vue | 25 +- .../src/components/Crontab/hour.vue | 16 +- .../src/components/Crontab/min.vue | 16 +- .../src/components/Crontab/month.vue | 16 +- .../src/components/Crontab/second.vue | 16 +- .../src/components/Crontab/week.vue | 24 +- .../src/components/Crontab/year.vue | 21 +- .../components/ExcelImportDialog/index.vue | 55 +- .../src/components/FileUpload/index.vue | 2 +- .../src/components/PatientList/index.vue | 132 ++- .../components/PendingPatientList/index.vue | 36 +- .../components/TableLayout/EditableTable.vue | 60 +- .../src/components/TableLayout/Filter.vue | 58 +- .../src/components/TableLayout/Form.vue | 16 +- .../src/components/TableLayout/FormItem.vue | 10 +- .../src/components/TableLayout/FormLayout.vue | 27 +- .../components/TableLayout/QuickDateRange.vue | 36 +- .../src/components/TableLayout/Table.vue | 45 +- .../src/components/TableLayout/index.vue | 49 +- .../src/components/TreePanel/index.vue | 86 +- .../patientBar/inPatientBarDoctorFold.vue | 64 +- .../src/layout/components/Copyright/index.vue | 5 +- .../components/HeaderNotice/DetailView.vue | 63 +- .../layout/components/HeaderNotice/index.vue | 152 +++- .../src/layout/components/Navbar.vue | 2 - .../src/layout/components/Settings/index.vue | 192 ++++- .../src/template/ProgressNoteform.vue | 136 ++- .../src/template/surgicalPatientHandover.vue | 3 +- healthlink-his-ui/src/template/template3.vue | 108 ++- .../src/views/anesthesia/record/index.vue | 319 +++++-- .../src/views/anesthesiaenhanced/index.vue | 267 +++++- .../src/views/antibiotic/rules/index.vue | 361 ++++++-- healthlink-his-ui/src/views/apiauth/index.vue | 294 +++++-- .../src/views/assessmenttrend/index.vue | 214 ++++- .../src/views/auditlog/index.vue | 218 ++++- .../basicmanage/automaticBilling/index.vue | 88 +- .../views/basicmanage/bargainSets/index.vue | 88 +- .../src/views/basicmanage/bedspace/index.vue | 271 +++++- .../caseTemplates/components/editTemplate.vue | 3 +- .../caseTemplatesStatistics/index.vue | 3 +- .../basicmanage/commonlyDiagnosis/index.vue | 191 ++++- .../basicmanage/consumablesBinding/index.vue | 3 +- .../src/views/basicmanage/contract/index.vue | 88 +- .../src/views/basicmanage/customer/index.vue | 88 +- .../src/views/basicmanage/fee/index.vue | 182 +++- .../src/views/basicmanage/lisMerge/index.vue | 88 +- .../basicmanage/locationManagement/index.vue | 93 ++- .../components/adviceBaseList.vue | 2 +- .../components/adviceBaseList.vue | 2 +- .../basicmanage/ordersCombination/index.vue | 3 +- .../basicmanage/tcmPrescription/index.vue | 156 +++- .../src/views/basicmanage/ward/index.vue | 3 +- .../src/views/businessanalytics/index.vue | 159 +++- .../casignature/components/SignDialog.vue | 65 +- .../views/casignature/signature-log/index.vue | 151 +++- .../views/casignature/statistics/index.vue | 64 +- .../device/components/deviceYbDialog.vue | 3 +- .../components/diagTreYbDialog.vue | 3 +- .../medicine/components/medicineYbDialog.vue | 3 +- .../src/views/catalog/service/index.vue | 103 ++- .../src/views/charge/cliniccharge/index.vue | 2 +- .../clinicrefund/components/refundDialog.vue | 4 +- .../components/chargeDialog.vue | 4 +- .../components/refundDialog.vue | 2 +- .../components/reprintDialog.vue | 3 +- .../charge/outpatientregistration/index.vue | 9 +- .../views/charge/patientCardRenewal/index.vue | 3 +- .../views/charge/registerRecords/index.vue | 72 +- .../src/views/charge/schedule/index.vue | 72 +- .../src/views/charge/surgerycharge/index.vue | 2 +- .../views/clinicalmanage/pathway/index.vue | 219 ++++- .../bargain/component/adviceBaseList.vue | 2 +- .../clinicmanagement/chargeDetail/index.vue | 373 +++++++-- .../consultationCharge/index.vue | 88 +- .../consultationRefund/index.vue | 256 +++++- .../components/performRecordDialog.vue | 3 +- .../views/clinicmanagement/disposal/index.vue | 3 +- .../component/adviceListDialog.vue | 2 +- .../clinicmanagement/infusionrecord/index.vue | 3 +- .../clinicmanagement/lisPascResult/index.vue | 461 +++++++++-- .../clinicmanagement/orderViewPrint/index.vue | 354 ++++++-- .../clinicmanagement/refundNumber/index.vue | 189 ++++- .../clinicmanagement/requisition/index.vue | 331 ++++++-- .../clinicmanagement/techExecute/index.vue | 205 ++++- .../techfundApprove/index.vue | 216 ++++- .../clinicmanagement/withdrawal/index.vue | 131 ++- .../consultationapplication/index.vue | 3 +- .../consultationconfirmation/index.vue | 3 +- .../src/views/criticalvalue/pending/index.vue | 193 ++++- .../crossmodule/consult-feedback/index.vue | 278 ++++++- .../crossmodule/consulttimeout/index.vue | 163 +++- .../src/views/crossmodule/drgperf/index.vue | 121 ++- .../views/crossmodule/drugexpiry/index.vue | 182 +++- .../crossmodule/enhanced-ambulance/index.vue | 146 +++- .../crossmodule/enhanced-antibiotic/index.vue | 132 ++- .../crossmodule/enhanced-consent/index.vue | 161 +++- .../crossmodule/enhanced-drg-alert/index.vue | 152 +++- .../crossmodule/enhanced-nursing/index.vue | 184 ++++- .../views/crossmodule/handoffstat/index.vue | 163 +++- .../src/views/crossmodule/labalert/index.vue | 264 +++++- .../src/views/crossmodule/mrquality/index.vue | 160 +++- .../views/crossmodule/nurse-exec/index.vue | 131 ++- .../crossmodule/report-feedback/index.vue | 125 ++- .../views/crossmodule/reviewstat/index.vue | 147 +++- .../crossmodule/stock-intercept/index.vue | 119 ++- .../views/crossmodule/surgery-chain/index.vue | 208 ++++- .../views/crossmodule/surgerylink/index.vue | 217 ++++- .../src/views/crossmodule/transfer/index.vue | 244 +++++- .../src/views/cssd/trace/index.vue | 661 +++++++++++---- .../src/views/dashboard/index.vue | 165 +++- .../doctorstation/components/consultation.vue | 3 +- .../diagnosis/addDiagnosisDialog.vue | 3 +- .../examination/examinationApplication.vue | 258 +++--- .../components/pendingEmr/index.vue | 3 +- .../prescription/orderGroupDrawer.vue | 3 +- .../prescription/prescriptionInfo.vue | 2 +- .../prescription/prescriptionlist.vue | 409 ++++----- .../prescription/refundListDialog.vue | 2 +- .../components/surgery/surgeryApplication.vue | 5 +- .../components/tcm/tcmAdvice.vue | 79 +- .../components/tcm/tcmMedicineList.vue | 2 +- .../src/views/doctorstation/pendingEmr.vue | 3 +- .../components/MedicationDetails.vue | 4 +- .../components/MedicationSummary.vue | 166 ++-- .../src/views/drugtrace/alert/index.vue | 196 ++++- .../src/views/drugtrace/batch/index.vue | 240 +++++- .../src/views/drugtrace/code/index.vue | 249 +++++- .../src/views/drugtrace/scan/index.vue | 222 ++++- .../src/views/emergency/greentrack/index.vue | 273 +++++- .../src/views/emergency/observation/index.vue | 260 +++++- .../src/views/emergency/rescue/index.vue | 289 ++++++- .../src/views/emergency/triage/index.vue | 384 +++++++-- .../src/views/empienhanced/index.vue | 158 +++- .../src/views/empienhanced/merge/index.vue | 275 +++++-- .../src/views/empienhanced/patient/index.vue | 410 +++++++-- .../views/empienhanced/statistics/index.vue | 61 +- .../src/views/emr/archive/index.vue | 236 +++++- .../src/views/emr/revision-history/index.vue | 137 +++- .../src/views/emr/timeliness/index.vue | 137 +++- .../src/views/emrsearch/index.vue | 130 ++- .../src/views/esbmanage/message/index.vue | 277 ++++++- .../src/views/esbmanage/monitor/index.vue | 153 +++- .../src/views/esbmanage/registry/index.vue | 259 +++++- .../src/views/esbmanage/reliability/index.vue | 254 +++++- healthlink-his-ui/src/views/fhircda/index.vue | 242 +++++- .../src/views/flowable/definition/index.vue | 86 +- .../src/views/flowable/expression/index.vue | 86 +- .../src/views/flowable/listener/index.vue | 86 +- .../views/flowable/task/finished/index.vue | 86 +- .../src/views/flowable/task/form/index.vue | 86 +- .../src/views/flowable/task/todo/index.vue | 86 +- .../src/views/followup/complaint/index.vue | 276 ++++++- .../src/views/followup/plan/index.vue | 332 ++++++-- .../src/views/followup/record/index.vue | 170 +++- .../src/views/followup/survey/index.vue | 249 +++++- .../src/views/followup/task/index.vue | 336 ++++++-- .../views/gf/ratioApplicationRecord/index.vue | 6 +- .../src/views/gf/studentList/index.vue | 3 +- .../src/views/idverification/index.vue | 224 ++++- .../charge/feeSettlement/index.vue | 2 +- .../components/PatientList.vue | 3 +- .../register/components/accomplishList.vue | 37 +- .../charge/register/components/awaitList.vue | 7 +- .../register/components/patientInfoForm.vue | 3 +- .../components/home/components/derate.vue | 54 +- .../home/components/patientList.vue | 85 +- .../home/components/patientListDialog.vue | 98 ++- .../components/home/components/receipt.vue | 158 +++- .../components/home/components/refund.vue | 159 +++- .../settlement/components/midway/index.vue | 294 +++++-- .../inpatientDiagnosis/index.vue | 215 ++++- .../inHospitalManagement/listFee/index.vue | 149 +++- .../medicalRecord/index.vue | 246 +++++- .../orderManage/index.vue | 195 ++++- .../inHospitalManagement/portal/index.vue | 88 +- .../surgeryManage/index.vue | 384 +++++++-- healthlink-his-ui/src/views/index.vue | 4 +- .../infection/antibiotic-usage/index.vue | 73 +- .../src/views/infection/case/index.vue | 138 +++- .../src/views/infection/environment/index.vue | 342 ++++++-- .../src/views/infection/exposure/index.vue | 303 +++++-- .../src/views/infection/hygiene/index.vue | 280 +++++-- .../src/views/infection/resistant/index.vue | 331 ++++++-- .../views/infection/surveillance/index.vue | 336 ++++++-- .../src/views/infection/warning/index.vue | 341 ++++++-- .../src/views/infectionenhanced/index.vue | 643 ++++++++++++--- .../src/views/informedconsent/index.vue | 417 ++++++++-- .../inpatientDoctor/AnesthesiaAssessment.vue | 476 +++++++++-- .../inpatientDoctor/AnesthesiaSummary.vue | 395 +++++++-- .../inpatientDoctor/BloodTransfusion.vue | 776 +++++++++++++++--- .../views/inpatientDoctor/ClinicalPathway.vue | 560 +++++++++++-- .../inpatientDoctor/CriticalValueHandle.vue | 342 ++++++-- .../inpatientDoctor/EmrRevisionTrack.vue | 148 +++- .../inpatientDoctor/IntraopVitalSign.vue | 257 +++++- .../inpatientDoctor/OrderExecuteTrace.vue | 167 +++- .../views/inpatientDoctor/PostopFollowup.vue | 314 +++++-- .../home/components/adviceBaseList.vue | 7 +- .../applicationShow/surgeryApplication.vue | 4 +- .../diagnosis/addDiagnosisDialog.vue | 3 +- .../diagnosis/chineseMedicineDialog.vue | 2 +- .../home/components/diagnosis/diagnosis.vue | 4 +- .../home/components/diagnosis/index.vue | 2 +- .../home/components/order/OrderForm.vue | 444 +++++++--- .../home/components/order/index.vue | 508 +++++++++--- .../src/views/inpatientDoctor/home/index.vue | 5 +- .../InpatientBilling/components/FeeDialog.vue | 4 +- .../src/views/inpatientNurse/home/index.vue | 3 +- .../inOut/components/bedAllocation.vue | 38 +- .../inOut/components/signEntryDialog.vue | 133 ++- .../inOut/components/transferInDialog.vue | 168 ++-- .../inOut/components/transferOut.vue | 365 ++++++-- .../check/MedicalOrderManagement.vue | 128 ++- .../components/check/patientList.vue | 73 +- .../components/execute/patientList.vue | 73 +- .../medicalOrderManagement/index.vue | 9 +- .../components/prescriptionList.vue | 432 +++++----- .../inpatientNurse/nursingRecord/index.vue | 20 +- .../src/views/knowledgebase/index.vue | 331 ++++++-- .../views/labenhanced/appointment/index.vue | 267 ++++-- .../src/views/labenhanced/icd10/index.vue | 148 +++- .../src/views/labenhanced/index.vue | 184 ++++- .../src/views/labenhanced/pathway/index.vue | 226 ++++- .../labenhanced/radiologyreport/index.vue | 242 ++++-- .../src/views/labenhanced/refrange/index.vue | 246 +++++- .../src/views/labhistory/index.vue | 201 ++++- healthlink-his-ui/src/views/lock.vue | 69 +- healthlink-his-ui/src/views/login.vue | 87 +- .../dayEndSettlement/index.vue | 3 +- .../reconciliationDetails.vue | 2 +- .../components/orderDialog.vue | 3 +- .../returnOrder/components/orderDialog.vue | 3 +- .../components/orderDialog.vue | 3 +- .../stockInOrder/components/orderDialog.vue | 3 +- .../stockOutOrder/components/orderDialog.vue | 3 +- .../components/orderDialog.vue | 3 +- .../src/views/monitor/cache/list.vue | 3 +- .../src/views/monitor/job/index.vue | 3 +- .../src/views/mrhomepage/drg/index.vue | 339 ++++++-- .../src/views/mrhomepage/management/index.vue | 148 +++- .../src/views/mrhomepage/statistics/index.vue | 101 ++- .../src/views/mrmanagement/index.vue | 461 +++++++++-- .../src/views/nursing/assessment/index.vue | 68 +- .../src/views/nursingenhanced/assessment.vue | 635 +++++++++++--- .../src/views/nursingenhanced/index.vue | 250 +++++- .../src/views/nursingexecution/index.vue | 245 +++++- .../src/views/nursingquality/index.vue | 328 ++++++-- .../orderclosedloop/execution-track/index.vue | 248 +++++- .../orderclosedloop/statistics/index.vue | 223 ++++- .../dayEndSettlement/index.vue | 108 ++- .../src/views/outpatientenhanced/index.vue | 371 +++++++-- .../src/views/pathology/order/index.vue | 298 +++++-- .../src/views/pathology/report/index.vue | 304 +++++-- .../src/views/pathology/specimen/index.vue | 340 ++++++-- .../outpatienrecords/index.vue | 30 +- .../components/orderDialog.vue | 3 +- .../components/orderDialog.vue | 3 +- .../westernmedicine/index.vue | 4 +- .../src/views/pharmacystockalert/index.vue | 307 +++++-- .../views/preopmanage/discussion/index.vue | 634 ++++++++++++-- .../src/views/progressnotes/index.vue | 333 ++++++-- .../src/views/quality/statistics/index.vue | 255 +++++- .../src/views/qualityenhanced/index.vue | 163 +++- .../src/views/radiologycomparison/index.vue | 323 ++++++-- .../src/views/radiologyenhanced/index.vue | 164 +++- .../views/rationaldrug/audit-log/index.vue | 267 +++++- .../rationaldrug/interaction-rule/index.vue | 329 ++++++-- .../views/rationaldrug/statistics/index.vue | 152 +++- .../src/views/reconstruction/3d/index.vue | 575 ++++++++++--- .../src/views/reconstruction/3d/viewer.vue | 96 ++- .../src/views/review/plan/index.vue | 275 ++++++- .../src/views/review/ranking/index.vue | 108 ++- .../src/views/review/records/index.vue | 115 ++- .../src/views/review/statistics/index.vue | 134 ++- .../src/views/review/workbench/index.vue | 155 +++- .../src/views/specimenbarcode/index.vue | 250 +++++- .../src/views/surgerysafetycheck/index.vue | 248 +++++- .../src/views/surgicalschedule/index.vue | 2 +- .../surgicalschedule/temporaryMedical.vue | 3 +- .../src/views/system/config/index.vue | 3 +- .../src/views/system/dept/index.vue | 3 +- .../src/views/system/dict/data.vue | 3 +- .../src/views/system/dict/index.vue | 3 +- .../src/views/system/menu/index.vue | 30 +- .../src/views/system/notice/index.vue | 3 +- .../src/views/system/post/index.vue | 3 +- .../src/views/system/role/index.vue | 3 +- .../src/views/system/tenant/index.vue | 3 +- .../src/views/system/user/authRole.vue | 3 +- .../src/views/system/user/index.vue | 3 +- .../src/views/tcm/constitution/index.vue | 161 +++- .../src/views/tcm/traditional/index.vue | 279 ++++++- .../src/views/vitalsignschart/index.vue | 288 ++++++- .../ybmanagement/catalogManagement/index.vue | 133 ++- .../index.vue | 3 +- .../register/components/patientInfoForm.vue | 3 +- .../ybmanagement/medicalInsurance/index.vue | 177 +++- .../views/ybmanagement/settlement/index.vue | 152 +++- 321 files changed, 36390 insertions(+), 7997 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e629574b2..15e4040d3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -47,7 +47,7 @@ **铁律2: Flyway 数据库迁移** - 凡是新建表、新增字段,必须创建 Flyway 迁移脚本 -- 路径:`healthlink-his-domain/src/main/resources/db/migration/` +- 路径:`healthlink-his-application/src/main/resources/db/migration/` - 命名:`V{版本号}__{描述}.sql`(双下划线) **铁律3: 测试通过后才提交** @@ -184,7 +184,7 @@ **铁律2: Flyway 数据库迁移** - 凡是新建表、新增字段,必须创建 Flyway 迁移脚本 -- 路径:`healthlink-his-domain/src/main/resources/db/migration/` +- 路径:`healthlink-his-application/src/main/resources/db/migration/` - 命名:`V{版本号}__{描述}.sql`(双下划线) **铁律3: 测试通过后才提交** diff --git a/RULES.md b/RULES.md index 002e403e9..e77c56314 100644 --- a/RULES.md +++ b/RULES.md @@ -40,7 +40,7 @@ **铁律2: Flyway 数据库迁移** - 凡是新建表、新增字段,必须创建 Flyway 迁移脚本 -- 路径:`healthlink-his-domain/src/main/resources/db/migration/` +- 路径:`healthlink-his-application/src/main/resources/db/migration/` - 命名:`V{版本号}__{描述}.sql`(双下划线) **铁律3: 测试通过后才提交** diff --git a/healthlink-his-server/AGENTS.md b/healthlink-his-server/AGENTS.md index d320b4a8a..f9b2d11c5 100644 --- a/healthlink-his-server/AGENTS.md +++ b/healthlink-his-server/AGENTS.md @@ -40,7 +40,7 @@ **铁律2: Flyway 数据库迁移** - 凡是新建表、新增字段,必须创建 Flyway 迁移脚本 -- 路径:`healthlink-his-domain/src/main/resources/db/migration/` +- 路径:`healthlink-his-application/src/main/resources/db/migration/` - 命名:`V{版本号}__{描述}.sql`(双下划线) **铁律3: 测试通过后才提交** diff --git a/healthlink-his-ui/src/api/quality.js b/healthlink-his-ui/src/api/quality.js index 7525e93cc..a399171b3 100644 --- a/healthlink-his-ui/src/api/quality.js +++ b/healthlink-his-ui/src/api/quality.js @@ -6,3 +6,9 @@ export function getDefects(encounterId) { return request({ url: "/api/v1/emr-qua export function getDefectStatistics() { return request({ url: "/api/v1/emr-quality/defect-statistics", method: "get" }) } export function getCompletionRate() { return request({ url: "/api/v1/emr-quality/completion-rate", method: "get" }) } export function getQualityStatistics(params) { return request({ url: "/api/v1/emr-quality/defect-statistics", method: "get", params }) } + +// 终末质控 +export function runTerminalCheck(encounterId) { return request({ url: "/api/v1/quality/terminal/check/" + encounterId, method: "post" }) } +export function getTerminalResults(encounterId) { return request({ url: "/api/v1/quality/terminal/results/" + encounterId, method: "get" }) } +export function startDefectRectify(defectId) { return request({ url: "/api/v1/emr-quality/defect/rectify/" + defectId, method: "post" }) } +export function completeDefectRectify(defectId) { return request({ url: "/api/v1/emr-quality/defect/complete/" + defectId, method: "post" }) } diff --git a/healthlink-his-ui/src/assets/icons/svg/appointment.svg b/healthlink-his-ui/src/assets/icons/svg/appointment.svg index caed84fb7..eb1d5894a 100755 --- a/healthlink-his-ui/src/assets/icons/svg/appointment.svg +++ b/healthlink-his-ui/src/assets/icons/svg/appointment.svg @@ -1,4 +1,6 @@ - - - + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/billing.svg b/healthlink-his-ui/src/assets/icons/svg/billing.svg index 5d751de85..d8a9db0e1 100755 --- a/healthlink-his-ui/src/assets/icons/svg/billing.svg +++ b/healthlink-his-ui/src/assets/icons/svg/billing.svg @@ -1,4 +1,7 @@ - - - + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/diagnosis.svg b/healthlink-his-ui/src/assets/icons/svg/diagnosis.svg index 537892d9d..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/diagnosis.svg +++ b/healthlink-his-ui/src/assets/icons/svg/diagnosis.svg @@ -1,4 +1,7 @@ - - - + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/email.svg b/healthlink-his-ui/src/assets/icons/svg/email.svg index 74d25e21a..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/email.svg +++ b/healthlink-his-ui/src/assets/icons/svg/email.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/emergency.svg b/healthlink-his-ui/src/assets/icons/svg/emergency.svg index bc060d6a9..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/emergency.svg +++ b/healthlink-his-ui/src/assets/icons/svg/emergency.svg @@ -1,4 +1,7 @@ - - - + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/insurance.svg b/healthlink-his-ui/src/assets/icons/svg/insurance.svg index 13c146614..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/insurance.svg +++ b/healthlink-his-ui/src/assets/icons/svg/insurance.svg @@ -1,4 +1,7 @@ - - - + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/inventory.svg b/healthlink-his-ui/src/assets/icons/svg/inventory.svg index 245f7b182..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/inventory.svg +++ b/healthlink-his-ui/src/assets/icons/svg/inventory.svg @@ -1,4 +1,7 @@ - - - + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/laboratory.svg b/healthlink-his-ui/src/assets/icons/svg/laboratory.svg index d62f03e4d..5781e85f8 100755 --- a/healthlink-his-ui/src/assets/icons/svg/laboratory.svg +++ b/healthlink-his-ui/src/assets/icons/svg/laboratory.svg @@ -1,4 +1,5 @@ - - - + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/lock.svg b/healthlink-his-ui/src/assets/icons/svg/lock.svg index 74fee543d..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/lock.svg +++ b/healthlink-his-ui/src/assets/icons/svg/lock.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/log.svg b/healthlink-his-ui/src/assets/icons/svg/log.svg index fdf39ce86..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/log.svg +++ b/healthlink-his-ui/src/assets/icons/svg/log.svg @@ -1,3 +1,7 @@ - - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/message.svg b/healthlink-his-ui/src/assets/icons/svg/message.svg index 14ca81728..815bc8555 100755 --- a/healthlink-his-ui/src/assets/icons/svg/message.svg +++ b/healthlink-his-ui/src/assets/icons/svg/message.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/password.svg b/healthlink-his-ui/src/assets/icons/svg/password.svg index b0c2cc343..815bc8555 100755 --- a/healthlink-his-ui/src/assets/icons/svg/password.svg +++ b/healthlink-his-ui/src/assets/icons/svg/password.svg @@ -1,3 +1,6 @@ - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/pharmacy.svg b/healthlink-his-ui/src/assets/icons/svg/pharmacy.svg index d46c0058a..815bc8555 100755 --- a/healthlink-his-ui/src/assets/icons/svg/pharmacy.svg +++ b/healthlink-his-ui/src/assets/icons/svg/pharmacy.svg @@ -1,5 +1,6 @@ - - - - + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/phone.svg b/healthlink-his-ui/src/assets/icons/svg/phone.svg index 70b05711d..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/phone.svg +++ b/healthlink-his-ui/src/assets/icons/svg/phone.svg @@ -1,3 +1,7 @@ - - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/prescription.svg b/healthlink-his-ui/src/assets/icons/svg/prescription.svg index 16bd8ed97..2af87e76a 100755 --- a/healthlink-his-ui/src/assets/icons/svg/prescription.svg +++ b/healthlink-his-ui/src/assets/icons/svg/prescription.svg @@ -1,4 +1,8 @@ - - - + + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/receipt.svg b/healthlink-his-ui/src/assets/icons/svg/receipt.svg index 2b4a6fc8f..815bc8555 100755 --- a/healthlink-his-ui/src/assets/icons/svg/receipt.svg +++ b/healthlink-his-ui/src/assets/icons/svg/receipt.svg @@ -1,4 +1,6 @@ - - - + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/server.svg b/healthlink-his-ui/src/assets/icons/svg/server.svg index f568d5f8d..815bc8555 100755 --- a/healthlink-his-ui/src/assets/icons/svg/server.svg +++ b/healthlink-his-ui/src/assets/icons/svg/server.svg @@ -1,4 +1,6 @@ - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/star.svg b/healthlink-his-ui/src/assets/icons/svg/star.svg index 6cf86e66a..815bc8555 100755 --- a/healthlink-his-ui/src/assets/icons/svg/star.svg +++ b/healthlink-his-ui/src/assets/icons/svg/star.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/surgery.svg b/healthlink-his-ui/src/assets/icons/svg/surgery.svg index f229b3ae0..063172cd7 100755 --- a/healthlink-his-ui/src/assets/icons/svg/surgery.svg +++ b/healthlink-his-ui/src/assets/icons/svg/surgery.svg @@ -1,4 +1,6 @@ - - - + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/assets/icons/svg/ward.svg b/healthlink-his-ui/src/assets/icons/svg/ward.svg index bd3814ced..1c59a15b2 100755 --- a/healthlink-his-ui/src/assets/icons/svg/ward.svg +++ b/healthlink-his-ui/src/assets/icons/svg/ward.svg @@ -1,4 +1,7 @@ - - - + + + + + + \ No newline at end of file diff --git a/healthlink-his-ui/src/components/Crontab/day.vue b/healthlink-his-ui/src/components/Crontab/day.vue index 7b9605dbd..8f5d05198 100755 --- a/healthlink-his-ui/src/components/Crontab/day.vue +++ b/healthlink-his-ui/src/components/Crontab/day.vue @@ -2,7 +2,8 @@ 日,允许的通配符[, - * ? / L W] @@ -10,7 +11,8 @@ 不指定 @@ -18,7 +20,8 @@ 周期从 每月 本月最后一天 @@ -75,7 +81,8 @@ 指定 ({ second: "*", min: "*", hour: "*", @@ -109,7 +116,7 @@ const props = defineProps({ month: "*", week: "?", year: "", - } + }) }, check: { type: Function, diff --git a/healthlink-his-ui/src/components/Crontab/hour.vue b/healthlink-his-ui/src/components/Crontab/hour.vue index 2cec5d540..036baf127 100755 --- a/healthlink-his-ui/src/components/Crontab/hour.vue +++ b/healthlink-his-ui/src/components/Crontab/hour.vue @@ -2,7 +2,8 @@ 小时,允许的通配符[, - * /] @@ -10,7 +11,8 @@ 周期从 指定 ({ second: "*", min: "*", hour: "*", @@ -81,7 +85,7 @@ const props = defineProps({ month: "*", week: "?", year: "", - } + }) }, check: { type: Function, diff --git a/healthlink-his-ui/src/components/Crontab/min.vue b/healthlink-his-ui/src/components/Crontab/min.vue index 7e649a60d..2a815641f 100755 --- a/healthlink-his-ui/src/components/Crontab/min.vue +++ b/healthlink-his-ui/src/components/Crontab/min.vue @@ -2,7 +2,8 @@ 分钟,允许的通配符[, - * /] @@ -10,7 +11,8 @@ 周期从 指定 ({ second: "*", min: "*", hour: "*", @@ -80,7 +84,7 @@ const props = defineProps({ month: "*", week: "?", year: "", - } + }) }, check: { type: Function, diff --git a/healthlink-his-ui/src/components/Crontab/month.vue b/healthlink-his-ui/src/components/Crontab/month.vue index 888d4d1c1..48c19dc06 100755 --- a/healthlink-his-ui/src/components/Crontab/month.vue +++ b/healthlink-his-ui/src/components/Crontab/month.vue @@ -2,7 +2,8 @@ 月,允许的通配符[, - * /] @@ -10,7 +11,8 @@ 周期从 指定 ({ second: "*", min: "*", hour: "*", @@ -81,7 +85,7 @@ const props = defineProps({ month: "*", week: "?", year: "", - } + }) }, check: { type: Function, diff --git a/healthlink-his-ui/src/components/Crontab/second.vue b/healthlink-his-ui/src/components/Crontab/second.vue index 2986dd3da..9cc2e416b 100755 --- a/healthlink-his-ui/src/components/Crontab/second.vue +++ b/healthlink-his-ui/src/components/Crontab/second.vue @@ -2,7 +2,8 @@ 秒,允许的通配符[, - * /] @@ -10,7 +11,8 @@ 周期从 指定 ({ second: "*", min: "*", hour: "*", @@ -81,7 +85,7 @@ const props = defineProps({ month: "*", week: "?", year: "", - } + }) }, check: { type: Function, diff --git a/healthlink-his-ui/src/components/Crontab/week.vue b/healthlink-his-ui/src/components/Crontab/week.vue index 4af6ac82b..d8b088ef5 100755 --- a/healthlink-his-ui/src/components/Crontab/week.vue +++ b/healthlink-his-ui/src/components/Crontab/week.vue @@ -2,7 +2,8 @@ 周,允许的通配符[, - * ? / L #] @@ -10,7 +11,8 @@ 不指定 @@ -18,7 +20,8 @@ 周期从 本月最后一个 指定 ({ second: "*", min: "*", hour: "*", day: "*", month: "*", week: "?", - year: "" - } + year: "", + }) }, check: { type: Function, diff --git a/healthlink-his-ui/src/components/Crontab/year.vue b/healthlink-his-ui/src/components/Crontab/year.vue index bda545f62..5e870acd5 100755 --- a/healthlink-his-ui/src/components/Crontab/year.vue +++ b/healthlink-his-ui/src/components/Crontab/year.vue @@ -2,7 +2,8 @@ 不填,允许的通配符[, - * /] @@ -10,7 +11,8 @@ 每年 @@ -18,7 +20,8 @@ 周期从 指定 ({ second: "*", min: "*", hour: "*", day: "*", month: "*", week: "?", - year: "" - } + year: "", + }) }, check: { type: Function, diff --git a/healthlink-his-ui/src/components/ExcelImportDialog/index.vue b/healthlink-his-ui/src/components/ExcelImportDialog/index.vue index 36da43e1f..386d114dd 100644 --- a/healthlink-his-ui/src/components/ExcelImportDialog/index.vue +++ b/healthlink-his-ui/src/components/ExcelImportDialog/index.vue @@ -1,22 +1,61 @@ @@ -223,8 +253,14 @@ -