gaoluyang
2026-09-18 c9cfcbda7fb7c8b62b27d623feb0418790396740
src/pages/oa/_utils/approveListUtils.js
@@ -6,6 +6,8 @@
  mergeFormConfigForEdit,
} from "./approvalFormField.js";
import {
  appendDotNotationQuery,
  buildApprovalInstanceSearchDto,
  formatKnownSelectLabel,
  resolveInstanceFormPayload,
  resolveListFieldRawValue,
@@ -178,6 +180,35 @@
    .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();
@@ -188,22 +219,9 @@
  };
}
/** 是否本人发起的审批 */
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";
}
/** 待当前用户审批 */
@@ -272,8 +290,7 @@
}
/**
 * 与 Web buildApprovalInstanceListParams 一致:扁平 query(current/size/businessType/...)
 * 审批列表不传 businessType 即查全部
 * 与 Web buildApprovalInstanceListParams 一致
 */
export function buildInstanceListParams({
  page,
@@ -281,37 +298,20 @@
  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;
}