| | |
| | | isDynamicOptionSource, |
| | | resolveSelectDisplayLabel, |
| | | } from "../approve-template/selectOptionSource.js"; |
| | | import { |
| | | appendDotNotationQuery, |
| | | buildApprovalInstanceSearchDto, |
| | | } from "../approve-shared/approvalInstanceListSearch.js"; |
| | | |
| | | /** 审批类型(与后端字段 approvalType 对齐,后期可同步) */ |
| | | export const APPROVAL_TYPE_OPTIONS = [ |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 从模板字段中找到申请人字段 */ |
| | | function findApplicantField(fields) { |
| | | if (!Array.isArray(fields)) return null; |
| | | return ( |
| | | fields.find((f) => String(f?.label || "").includes("申请人")) || |
| | | fields.find((f) => f?.type === "select" && f?.optionSource === "user") || |
| | | null |
| | | ); |
| | | } |
| | | |
| | | /** 从 formPayload 的申请人字段解析 applicantId / applicantName */ |
| | | function resolveApplicantFromFormPayload(payload, fields) { |
| | | const field = findApplicantField(fields); |
| | | if (!field) return {}; |
| | | const val = payload?.[field.key]; |
| | | if (val == null || val === "") return {}; |
| | | const result = { applicantId: val }; |
| | | const opts = field.options; |
| | | if (Array.isArray(opts) && opts.length) { |
| | | const hit = opts.find((o) => String(o.value) === String(val)); |
| | | if (hit?.label) result.applicantName = hit.label; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** 组装保存/更新审批 DTO */ |
| | | export function buildInstanceDto({ submitForm, activeTemplate, userStore, flowNodes, existingRow }) { |
| | | const payload = submitForm?.formPayload || {}; |
| | | const tpl = activeTemplate || {}; |
| | | const fields = tpl.fields || submitForm?.formFieldDefs || []; |
| | | const title = |
| | | String(payload.summary || payload.title || "").trim() || |
| | | tpl.label || |
| | |
| | | templateId, |
| | | }); |
| | | const isUpdate = Boolean(instanceId); |
| | | const fromPayload = resolveApplicantFromFormPayload(payload, fields); |
| | | |
| | | const dto = { |
| | | templateId, |
| | |
| | | } else { |
| | | dto.status = submitForm?.saveStatusApi || "PENDING"; |
| | | dto.currentLevel = 1; |
| | | dto.applicantId = userStore?.id; |
| | | dto.applicantName = userStore?.nickName || userStore?.name || ""; |
| | | dto.applicantId = fromPayload.applicantId || submitForm?.applicantId || userStore?.id; |
| | | dto.applicantName = fromPayload.applicantName || submitForm?.applicantName |
| | | || (fromPayload.applicantId ? "" : (userStore?.nickName || userStore?.name || "")); |
| | | } |
| | | return dto; |
| | | } |
| | |
| | | approvalRecords, |
| | | rejectReason: |
| | | approvalRecords.find((r) => r.result === "rejected")?.opinion || "", |
| | | storageBlobVOList: row.storageBlobVOList || row.storageBlobDTOs || row.attachmentList || [], |
| | | }; |
| | | } |
| | | |
| | |
| | | }; |
| | | } |
| | | |
| | | export function buildApprovalInstanceListParams({ page, searchForm, businessType, extraParams }) { |
| | | const extra = { ...(extraParams && typeof extraParams === "object" ? extraParams : {}) }; |
| | | if (extra.createTime != null && extra.createTimeStart == null) { |
| | | extra.createTimeStart = extra.createTime; |
| | | export function buildApprovalInstanceListParams({ |
| | | page, |
| | | searchForm, |
| | | businessType, |
| | | extraParams, |
| | | }) { |
| | | const dto = buildApprovalInstanceSearchDto(searchForm, extraParams); |
| | | 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 = range[0]; |
| | | } |
| | | if (Array.isArray(range) && range[1]) { |
| | | params.createTimeEnd = range[1]; |
| | | } |
| | | appendDotNotationQuery(params, "approvalInstanceDto", dto); |
| | | return params; |
| | | } |
| | | |