liding
2026-06-05 ac5dac41df2b75de998a79701d846b33a47ce64c
src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
@@ -12,6 +12,10 @@
  isDynamicOptionSource,
  resolveSelectDisplayLabel,
} from "../approve-template/selectOptionSource.js";
import {
  appendDotNotationQuery,
  buildApprovalInstanceSearchDto,
} from "../approve-shared/approvalInstanceListSearch.js";
/** 审批类型(与后端字段 approvalType 对齐,后期可同步) */
export const APPROVAL_TYPE_OPTIONS = [
@@ -358,10 +362,36 @@
  });
}
/** 从模板字段中找到申请人字段 */
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 ||
@@ -374,6 +404,7 @@
    templateId,
  });
  const isUpdate = Boolean(instanceId);
  const fromPayload = resolveApplicantFromFormPayload(payload, fields);
  const dto = {
    templateId,
@@ -404,8 +435,9 @@
  } 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;
}
@@ -498,6 +530,7 @@
    approvalRecords,
    rejectReason:
      approvalRecords.find((r) => r.result === "rejected")?.opinion || "",
    storageBlobVOList: row.storageBlobVOList || row.storageBlobDTOs || row.attachmentList || [],
  };
}
@@ -520,35 +553,26 @@
  };
}
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;
}