| | |
| | | mergeFormConfigForEdit, |
| | | } from "./approvalFormField.js"; |
| | | import { |
| | | appendDotNotationQuery, |
| | | buildApprovalInstanceSearchDto, |
| | | formatKnownSelectLabel, |
| | | resolveInstanceFormPayload, |
| | | resolveListFieldRawValue, |
| | |
| | | .map(([, node]) => node); |
| | | } |
| | | |
| | | /** 模板 nodes → 审批任务(与 Web mapFlowNodesToTasks 一致) */ |
| | | export function mapFlowNodesToTasks(nodes, { instanceId, templateId } = {}) { |
| | | const list = Array.isArray(nodes) ? nodes : []; |
| | | const tasks = []; |
| | | list.forEach((n, i) => { |
| | | const levelNo = n?.levelNo ?? i + 1; |
| | | const approveType = |
| | | String(n?.approveType || "AND").toUpperCase() === "OR" ? "OR" : "AND"; |
| | | (n?.approvers || []).forEach((a, idx) => { |
| | | if (a?.approverId == null || a.approverId === "") return; |
| | | const task = { |
| | | levelNo, |
| | | approveType, |
| | | approverId: a.approverId, |
| | | approverName: a.approverName || "", |
| | | sortNo: a.sortNo ?? idx + 1, |
| | | }; |
| | | if (a.id != null) task.id = a.id; |
| | | if (a.nodeId != null) task.nodeId = a.nodeId; |
| | | if (a.templateId != null) task.templateId = a.templateId; |
| | | else if (templateId) task.templateId = templateId; |
| | | if (instanceId) task.instanceId = instanceId; |
| | | if (a.status != null) task.status = a.status; |
| | | tasks.push(task); |
| | | }); |
| | | }); |
| | | return tasks; |
| | | } |
| | | |
| | | /** 组装审批提交 DTO(与 Web buildApproveInstanceDto 一致) */ |
| | | export function buildApproveInstanceDto(id, uiResult, comment) { |
| | | const opinion = (comment || "").trim(); |
| | |
| | | }; |
| | | } |
| | | |
| | | /** 是否本人发起的审批 */ |
| | | export function isOwnApplication(item, userStore) { |
| | | const uid = userStore?.id; |
| | | if (item?.applicantId != null && uid != null && uid !== "") { |
| | | return String(item.applicantId) === String(uid); |
| | | } |
| | | const loginName = userStore?.nickName || userStore?.name; |
| | | if (loginName && item?.applicantName) { |
| | | return String(item.applicantName).trim() === String(loginName).trim(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** 仅进行中且本人发起时可编辑 */ |
| | | export function canModifyInstance(item, userStore) { |
| | | return item?.status === "PENDING" && isOwnApplication(item, userStore); |
| | | /** 仅进行中可编辑(与 Web openEditDialog 判定一致) */ |
| | | export function canModifyInstance(item) { |
| | | return item?.status === "PENDING"; |
| | | } |
| | | |
| | | /** 待当前用户审批 */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 与 Web buildApprovalInstanceListParams 一致:扁平 query(current/size/businessType/...) |
| | | * 审批列表不传 businessType 即查全部 |
| | | * 与 Web buildApprovalInstanceListParams 一致 |
| | | */ |
| | | export function buildInstanceListParams({ |
| | | page, |
| | |
| | | extraDto = {}, |
| | | searchForm, |
| | | }) { |
| | | const extra = { ...(extraDto && typeof extraDto === "object" ? extraDto : {}) }; |
| | | if (extra.createTime != null && extra.createTimeStart == null) { |
| | | extra.createTimeStart = extra.createTime; |
| | | const dto = buildApprovalInstanceSearchDto(searchForm, extraDto); |
| | | const bizType = businessType ?? searchForm?.businessType; |
| | | if (bizType != null && bizType !== "") { |
| | | dto.businessType = bizType; |
| | | } |
| | | delete extra.createTime; |
| | | |
| | | const params = { |
| | | current: page.current, |
| | | size: page.size, |
| | | ...extra, |
| | | "page.current": page.current, |
| | | "page.size": page.size, |
| | | ...dto, |
| | | }; |
| | | |
| | | const bizType = businessType ?? searchForm?.businessType; |
| | | if (bizType != null && bizType !== "") { |
| | | params.businessType = bizType; |
| | | } |
| | | if (searchForm?.status) { |
| | | params.status = searchForm.status; |
| | | } |
| | | |
| | | const range = |
| | | searchForm?.createTimeRange ?? |
| | | searchForm?.applyDateRange ?? |
| | | searchForm?.transferDateRange; |
| | | if (Array.isArray(range) && range[0] && params.createTimeStart == null) { |
| | | params.createTimeStart = range[0]; |
| | | } |
| | | if (Array.isArray(range) && range[1] && params.createTimeEnd == null) { |
| | | params.createTimeEnd = range[1]; |
| | | } |
| | | |
| | | appendDotNotationQuery(params, "approvalInstanceDto", dto); |
| | | return params; |
| | | } |
| | | |