修改bbug

This commit is contained in:
2026-06-16 16:07:23 +08:00
parent c1a382c255
commit 7efc03570d
3 changed files with 55 additions and 8 deletions

View File

@@ -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<HrmMyApplyVo> 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<HrmMyApplyVo> mapLeave(List<HrmLeaveReqVo> 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<HrmMyApplyVo> mapTravel(List<HrmTravelReqVo> 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<HrmMyApplyVo> mapSeal(List<HrmSealReqVo> 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<HrmMyApplyVo> mapReimburse(List<HrmReimburseReqVo> 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<HrmMyApplyVo> mapAppropriation(List<HrmAppropriationReqVo> 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<HrmMyApplyVo> mapLeave(List<HrmLeaveReqVo> 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<HrmMyApplyVo> mapTravel(List<HrmTravelReqVo> 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<HrmMyApplyVo> mapSeal(List<HrmSealReqVo> 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<HrmMyApplyVo> mapReimburse(List<HrmReimburseReqVo> 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<HrmMyApplyVo> mapAppropriation(List<HrmAppropriationReqVo> 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;
}
}

View File

@@ -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<String, Object> bizData;
}

View File

@@ -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