A2 收口统一审批中心入口与状态

这个提交包含在:
2026-05-09 21:39:47 +08:00
父节点 644852f333
当前提交 d871a40d95
共修改 6 个文件,包含 337 行新增和 39 行删除
+142
查看文件
@@ -282,6 +282,7 @@ function isoOrNull(value) {
}
function mapTaskSummary(task, allowedActions = []) {
const businessSummary = buildTaskBusinessSummary(task);
const workflowInstance = task.workflow_instance
? {
entity_type: task.workflow_instance.entity_type,
@@ -318,9 +319,89 @@ function mapTaskSummary(task, allowedActions = []) {
currentStatus: workflowInstance.current_status,
}
: null,
businessSummary,
};
}
function fallbackBusinessTitle(entityType) {
if (entityType === "reimbursement") return "报销单";
if (entityType === "leave") return "请假申请";
if (entityType === "purchase_request") return "采购申请";
if (entityType === "travel_request") return "差旅申请";
return "业务单据";
}
function buildTaskBusinessSummary(task) {
const workflowInstance = task.workflow_instance;
if (!workflowInstance) {
return null;
}
const fallback = {
reference: workflowInstance.entity_id,
title: fallbackBusinessTitle(workflowInstance.entity_type),
applicantName: null,
amount: null,
duration: null,
businessStatus: workflowInstance.current_status ?? null,
};
if (workflowInstance.entity_type === "reimbursement" && workflowInstance.reimbursement_form) {
const form = workflowInstance.reimbursement_form;
return {
...fallback,
reference: form.form_number ?? workflowInstance.entity_id,
title: form.description ? `报销:${form.description}` : "报销单",
applicantName: form.submitter?.name ?? form.owner?.name ?? null,
amount: toMoneyString(form.total_amount),
businessStatus: form.status ?? fallback.businessStatus,
};
}
if (workflowInstance.entity_type === "leave" && workflowInstance.leave_request) {
const leaveRequest = workflowInstance.leave_request;
return {
...fallback,
title: leaveRequest.leave_type?.name
? `请假:${leaveRequest.leave_type.name}`
: "请假申请",
applicantName: leaveRequest.owner?.name ?? null,
duration:
leaveRequest.requested_days == null
? null
: `${Number(leaveRequest.requested_days)}天`,
businessStatus: leaveRequest.status ?? fallback.businessStatus,
};
}
if (workflowInstance.entity_type === "purchase_request" && workflowInstance.purchase_request) {
const purchaseRequest = workflowInstance.purchase_request;
const amount = toMoneyString(purchaseRequest.total_amount);
return {
...fallback,
reference: purchaseRequest.request_no ?? workflowInstance.entity_id,
title: purchaseRequest.title || "采购申请",
applicantName: purchaseRequest.applicant?.name ?? null,
amount: amount ? `${amount} ${purchaseRequest.currency_code}` : null,
businessStatus: purchaseRequest.status ?? fallback.businessStatus,
};
}
if (workflowInstance.entity_type === "travel_request" && workflowInstance.travel_request) {
const travelRequest = workflowInstance.travel_request;
return {
...fallback,
reference: travelRequest.request_no ?? workflowInstance.entity_id,
title: travelRequest.purpose ? `差旅:${travelRequest.purpose}` : "差旅申请",
applicantName: travelRequest.applicant?.name ?? null,
amount: toMoneyString(travelRequest.estimated_amount),
businessStatus: travelRequest.status ?? fallback.businessStatus,
};
}
return fallback;
}
async function buildTaskVisibilityFilters(tx, request) {
const roleFilters = request.employee.roleCodes.length
? [{ assignee_role: { in: request.employee.roleCodes } }]
@@ -1380,6 +1461,67 @@ async function workflowRoutes(fastify) {
entity_type: true,
entity_id: true,
current_status: true,
reimbursement_form: {
select: {
form_number: true,
status: true,
total_amount: true,
description: true,
owner: {
select: {
name: true,
},
},
submitter: {
select: {
name: true,
},
},
},
},
leave_request: {
select: {
status: true,
requested_days: true,
leave_type: {
select: {
name: true,
},
},
owner: {
select: {
name: true,
},
},
},
},
purchase_request: {
select: {
request_no: true,
status: true,
title: true,
total_amount: true,
currency_code: true,
applicant: {
select: {
name: true,
},
},
},
},
travel_request: {
select: {
request_no: true,
status: true,
purpose: true,
estimated_amount: true,
applicant: {
select: {
name: true,
},
},
},
},
},
},
},