From 7efc03570d990d2f805092b6ad2b93836551ef08 Mon Sep 17 00:00:00 2001 From: wangyu <823267011@qq.com> Date: Tue, 16 Jun 2026 16:07:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hrm/controller/HrmMyApplyController.java | 38 +++++++++++++++---- .../com/ruoyi/hrm/domain/vo/HrmMyApplyVo.java | 2 + ruoyi-ui/src/views/hrm/myApply.vue | 23 ++++++++++- 3 files changed, 55 insertions(+), 8 deletions(-) diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmMyApplyController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmMyApplyController.java index 0be10c2..1ed156c 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmMyApplyController.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmMyApplyController.java @@ -1,6 +1,7 @@ package com.ruoyi.hrm.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.page.TableDataInfo; @@ -53,6 +54,7 @@ public class HrmMyApplyController extends BaseController { private final HrmReimburseReqMapper reimburseReqMapper; private final HrmAppropriationReqMapper appropriationReqMapper; private final HrmFlowInstanceMapper flowInstanceMapper; + private final ObjectMapper objectMapper; @GetMapping("/list") public TableDataInfo list(String bizType, String status, String keyword, PageQuery pageQuery) { @@ -119,8 +121,10 @@ public class HrmMyApplyController extends BaseController { ); for (HrmFlowInstance inst : insts) { if (inst.getStatus() == null) continue; + // 合并多个流程实例:优先终态 (approved/rejected/withdrawn) > 进行中 (running/pending), + // 否则前面遗留的"running"会盖掉新的"approved",导致前端永远显示审批中 statusByKey.merge(bizType + "_" + inst.getBizId(), inst.getStatus(), - (oldS, newS) -> oldS); + (oldS, newS) -> _statusPriority(newS) > _statusPriority(oldS) ? newS : oldS); } }); for (HrmMyApplyVo v : all) { @@ -129,6 +133,22 @@ public class HrmMyApplyController extends BaseController { } } + private int _statusPriority(String s) { + if (s == null) return 0; + switch (s) { + case "approved": + case "done": + return 3; + case "rejected": + case "withdrawn": + return 2; + case "running": + case "pending": + default: + return 1; + } + } + private boolean contains(HrmMyApplyVo v, String lower) { return Objects.toString(v.getTitle(), "").toLowerCase().contains(lower) || Objects.toString(v.getRemark(), "").toLowerCase().contains(lower) @@ -143,13 +163,14 @@ public class HrmMyApplyController extends BaseController { private HrmReimburseReqBo buildReimburseBo(Long empId, String status) { HrmReimburseReqBo bo = new HrmReimburseReqBo(); bo.setEmpId(empId); bo.setStatus(status); return bo; } private HrmAppropriationReqBo buildAppropriationBo(Long empId, String status) { HrmAppropriationReqBo bo = new HrmAppropriationReqBo(); bo.setEmpId(empId); bo.setStatus(status); return bo; } - private List mapLeave(List list, String nickName) { return list.stream().map(v -> toVo("leave", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } - private List mapTravel(List list, String nickName) { return list.stream().map(v -> toVo("travel", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } - private List mapSeal(List list, String nickName) { return list.stream().map(v -> toVo("seal", v.getBizId(), v.getEmpId(), nickName, v.getPurpose() != null ? v.getPurpose() : v.getRemark(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } - private List mapReimburse(List list, String nickName) { return list.stream().map(v -> toVo("reimburse", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } - private List mapAppropriation(List list, String nickName) { return list.stream().map(v -> toVo("appropriation", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } + private List mapLeave(List list, String nickName) { return list.stream().map(v -> toVo("leave", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime(), v)).collect(Collectors.toList()); } + private List mapTravel(List list, String nickName) { return list.stream().map(v -> toVo("travel", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime(), v)).collect(Collectors.toList()); } + private List mapSeal(List list, String nickName) { return list.stream().map(v -> toVo("seal", v.getBizId(), v.getEmpId(), nickName, v.getPurpose() != null ? v.getPurpose() : v.getRemark(), v.getStatus(), v.getCreateTime(), v)).collect(Collectors.toList()); } + private List mapReimburse(List list, String nickName) { return list.stream().map(v -> toVo("reimburse", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime(), v)).collect(Collectors.toList()); } + private List mapAppropriation(List list, String nickName) { return list.stream().map(v -> toVo("appropriation", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime(), v)).collect(Collectors.toList()); } - private HrmMyApplyVo toVo(String bizType, Long bizId, Long empId, String nickName, String title, String status, java.util.Date createTime) { + @SuppressWarnings("unchecked") + private HrmMyApplyVo toVo(String bizType, Long bizId, Long empId, String nickName, String title, String status, java.util.Date createTime, Object source) { HrmMyApplyVo vo = new HrmMyApplyVo(); vo.setBizType(bizType); vo.setBizId(bizId); @@ -158,6 +179,9 @@ public class HrmMyApplyController extends BaseController { vo.setTitle(title); vo.setStatus(status); vo.setCreateTime(createTime); + if (source != null) { + vo.setBizData(objectMapper.convertValue(source, Map.class)); + } return vo; } } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmMyApplyVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmMyApplyVo.java index 099daa1..ec3241b 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmMyApplyVo.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmMyApplyVo.java @@ -4,6 +4,7 @@ import lombok.Data; import java.io.Serializable; import java.util.Date; +import java.util.Map; @Data public class HrmMyApplyVo implements Serializable { @@ -21,4 +22,5 @@ public class HrmMyApplyVo implements Serializable { private Date endTime; private Date actualEndTime; private String remark; + private Map bizData; } diff --git a/ruoyi-ui/src/views/hrm/myApply.vue b/ruoyi-ui/src/views/hrm/myApply.vue index 219ad7e..940a878 100644 --- a/ruoyi-ui/src/views/hrm/myApply.vue +++ b/ruoyi-ui/src/views/hrm/myApply.vue @@ -138,7 +138,28 @@ export default { }, methods: { getRowTitle (row) { - return row.title || row.remark || '-' + const t = (row.title || row.remark || '').trim() + if (t) return t + return this.summarizeBiz(row) || '-' + }, + summarizeBiz (row) { + const b = row.bizData || {} + switch (row.bizType) { + case 'leave': { + const dur = b.hours ? `${b.hours}h` : '' + return [b.leaveType || '请假', dur, b.reason].filter(Boolean).join(' · ') + } + case 'travel': + return [b.travelType || '出差', b.destination, b.reason].filter(Boolean).join(' · ') + case 'seal': + return [b.sealType || '用印', b.purpose].filter(Boolean).join(' · ') + case 'reimburse': + return [b.reimburseType || '报销', b.totalAmount != null ? '¥' + b.totalAmount : null, b.reason].filter(Boolean).join(' · ') + case 'appropriation': + return [b.appropriationType || '拨款', b.amount != null ? '¥' + b.amount : null, b.reason].filter(Boolean).join(' · ') + default: + return '' + } }, isTravelCompleted (row) { if (!row || row.bizType !== 'travel') return false