补齐审批退回结果通知 [09-04-approval-return-notification-gap]

这个提交包含在:
2026-09-04 16:22:27 +08:00
父节点 a6ffb7fc3c
当前提交 2e69fe4edb
共修改 19 个文件,包含 857 行新增和 14 行删除
+10
查看文件
@@ -21,12 +21,15 @@ const NOTIFICATION_TYPES = Object.freeze({
paymentBatchExecutionRequested: 'payment_batch.execution_requested',
leaveApproved: 'leave.approved',
leaveRejected: 'leave.rejected',
leaveReturned: 'leave.returned',
attendanceCorrectionApproved: 'attendance_correction.approved',
attendanceCorrectionRejected: 'attendance_correction.rejected',
purchaseRequestApproved: 'purchase_request.approved',
purchaseRequestRejected: 'purchase_request.rejected',
purchaseRequestReturned: 'purchase_request.returned',
travelRequestApproved: 'travel_request.approved',
travelRequestRejected: 'travel_request.rejected',
travelRequestReturned: 'travel_request.returned',
assetAssigned: 'asset.assigned',
assetReturned: 'asset.returned',
assetTransferred: 'asset.transferred',
@@ -45,12 +48,15 @@ const IM_SUPPORTED_NOTIFICATION_TYPES = Object.freeze([
NOTIFICATION_TYPES.paymentBatchExecutionRequested,
NOTIFICATION_TYPES.leaveApproved,
NOTIFICATION_TYPES.leaveRejected,
NOTIFICATION_TYPES.leaveReturned,
NOTIFICATION_TYPES.attendanceCorrectionApproved,
NOTIFICATION_TYPES.attendanceCorrectionRejected,
NOTIFICATION_TYPES.purchaseRequestApproved,
NOTIFICATION_TYPES.purchaseRequestRejected,
NOTIFICATION_TYPES.purchaseRequestReturned,
NOTIFICATION_TYPES.travelRequestApproved,
NOTIFICATION_TYPES.travelRequestRejected,
NOTIFICATION_TYPES.travelRequestReturned,
NOTIFICATION_TYPES.assetAssigned,
NOTIFICATION_TYPES.assetReturned,
NOTIFICATION_TYPES.assetTransferred,
@@ -69,12 +75,15 @@ const NOTIFICATION_TYPE_TO_DOMAIN_SCOPE = Object.freeze({
[NOTIFICATION_TYPES.paymentBatchExecutionRequested]: NOTIFICATION_DOMAIN_SCOPES.reimbursement,
[NOTIFICATION_TYPES.leaveApproved]: NOTIFICATION_DOMAIN_SCOPES.leave,
[NOTIFICATION_TYPES.leaveRejected]: NOTIFICATION_DOMAIN_SCOPES.leave,
[NOTIFICATION_TYPES.leaveReturned]: NOTIFICATION_DOMAIN_SCOPES.leave,
[NOTIFICATION_TYPES.attendanceCorrectionApproved]: NOTIFICATION_DOMAIN_SCOPES.attendance,
[NOTIFICATION_TYPES.attendanceCorrectionRejected]: NOTIFICATION_DOMAIN_SCOPES.attendance,
[NOTIFICATION_TYPES.purchaseRequestApproved]: NOTIFICATION_DOMAIN_SCOPES.procurement,
[NOTIFICATION_TYPES.purchaseRequestRejected]: NOTIFICATION_DOMAIN_SCOPES.procurement,
[NOTIFICATION_TYPES.purchaseRequestReturned]: NOTIFICATION_DOMAIN_SCOPES.procurement,
[NOTIFICATION_TYPES.travelRequestApproved]: NOTIFICATION_DOMAIN_SCOPES.travel,
[NOTIFICATION_TYPES.travelRequestRejected]: NOTIFICATION_DOMAIN_SCOPES.travel,
[NOTIFICATION_TYPES.travelRequestReturned]: NOTIFICATION_DOMAIN_SCOPES.travel,
[NOTIFICATION_TYPES.assetAssigned]: NOTIFICATION_DOMAIN_SCOPES.asset,
[NOTIFICATION_TYPES.assetReturned]: NOTIFICATION_DOMAIN_SCOPES.asset,
[NOTIFICATION_TYPES.assetTransferred]: NOTIFICATION_DOMAIN_SCOPES.asset,
@@ -110,5 +119,6 @@ module.exports = {
NOTIFICATION_TYPES,
IM_SUPPORTED_NOTIFICATION_TYPES,
NOTIFICATION_DOMAIN_SCOPES,
NOTIFICATION_TYPE_TO_DOMAIN_SCOPE,
resolveNotificationDomainScope,
};
+4
查看文件
@@ -1094,6 +1094,9 @@ function resolveWorkflowOutcomeNotificationType(entityType, outcome) {
if (outcome === 'returned') {
if (normalizedEntityType === 'reimbursement') return NOTIFICATION_TYPES.reimbursementReturned;
if (normalizedEntityType === 'leave') return NOTIFICATION_TYPES.leaveReturned;
if (normalizedEntityType === 'purchase_request') return NOTIFICATION_TYPES.purchaseRequestReturned;
if (normalizedEntityType === 'travel_request') return NOTIFICATION_TYPES.travelRequestReturned;
}
return null;
@@ -3334,5 +3337,6 @@ module.exports.__testables = {
isWorkflowTaskOverdue,
listAllowedActionsForTask,
parseTaskListQuery,
queueWorkflowOutcomeNotifications,
resolveWorkflowOutcomeNotificationType,
};
@@ -247,7 +247,7 @@ function buildReturnedCopy(entityMeta, comment) {
const safeComment = String(comment ?? "").trim() || "无";
return {
title: `【已退回】${buildSubject(entityMeta)}`,
body: buildBody(entityMeta, `结果:已退回:${safeComment}`),
body: buildBody(entityMeta, `结果:已退回,可修改后重新提交:${safeComment}`),
};
}