/** 从列表项解析流程任务 ID */ export function resolveItemTaskId(item) { if (!item) return ''; const id = item.taskId ?? item.flowTaskId ?? item.currentTaskId ?? ''; return id === '' || id == null ? '' : String(id); } /** 从列表项解析被指派人身份 ID */ export function resolveAssigneeIdentityId(item) { if (!item) return ''; return item.assigneeIdentityId ?? item.identityId ?? ''; } /** 追加被指派人相关查询参数 */ export function appendAssigneeQuery(url, item) { if (!item) return url; let result = url; if (item.assigneeId) { result += `&assigneeId=${item.assigneeId}`; } const assigneeIdentityId = resolveAssigneeIdentityId(item); if (assigneeIdentityId) { result += `&assigneeIdentityId=${assigneeIdentityId}`; } if (item.assigneeName) { result += `&assigneeName=${encodeURIComponent(item.assigneeName)}`; } return result; } /** 构建立即整改页 URL */ export function buildRectificationUrl(item) { let url = `/pages/hiddendanger/rectification?hazardId=${item.hazardId}&assignId=${item.assignId || ''}`; if (item.taskId) { url += `&taskId=${encodeURIComponent(item.taskId)}`; } if (item.deadline) { url += `&deadline=${encodeURIComponent(item.deadline)}`; } return appendAssigneeQuery(url, item); } /** 构建编辑整改页 URL */ export function buildEditRectificationUrl(item) { let url = `/pages/hiddendanger/rectification?rectifyId=${item.rectifyId}&isEdit=1`; if (item.hazardId) { url += `&hazardId=${item.hazardId}`; } if (item.assignId) { url += `&assignId=${item.assignId}`; } if (item.taskId) { url += `&taskId=${encodeURIComponent(item.taskId)}`; } return url; } /** 构建验收页 URL */ export function buildAcceptanceUrl(item) { let url = `/pages/hiddendanger/acceptance?hazardId=${item.hazardId}&assignId=${item.assignId || ''}&rectifyId=${item.rectifyId || ''}`; if (item.taskId) { url += `&taskId=${encodeURIComponent(item.taskId)}`; } return url; } /** 构建验收审批页 URL(approval 角色) */ export function buildAcceptanceApprovalUrl(item) { let url = `/pages/hiddendanger/acceptance-approval?hazardId=${item.hazardId}&assignId=${item.assignId || ''}&rectifyId=${item.rectifyId || ''}`; if (item.taskId) { url += `&taskId=${encodeURIComponent(item.taskId)}`; } if (item.taskKey) { url += `&taskKey=${encodeURIComponent(item.taskKey)}`; } return url; } /** 构建隐患交办页 URL */ export function buildAssignmentUrl(item) { let url = `/pages/hiddendanger/assignment?hazardId=${item.hazardId}&assignId=${item.assignId || ''}`; const taskId = resolveItemTaskId(item); if (taskId) { url += `&taskId=${encodeURIComponent(taskId)}`; } return url; } /** 构建销号申请页 URL(从列表卡片进入时锁定对应隐患) */ export function buildWriteoffApplyUrl(item) { let url = `/pages/closeout/apply?hazardId=${item.hazardId}&locked=1`; if (item.assignId) { url += `&assignId=${item.assignId}`; } if (item.taskId) { url += `&taskId=${encodeURIComponent(item.taskId)}`; } return appendWriteoffHazardQuery(url, item); } /** 构建销号审批页 URL */ export function buildWriteoffApprovalUrl(item) { let url = `/pages/closeout/approval?hazardId=${item.hazardId}&locked=1`; if (item.assignId) { url += `&assignId=${item.assignId}`; } if (item.taskId) { url += `&taskId=${encodeURIComponent(item.taskId)}`; } return appendWriteoffHazardQuery(url, item); } /** 构建销号领导审批页 URL(approval 角色) */ export function buildLeaderWriteoffApprovalUrl(item) { let url = `/pages/closeout/leader-approval?hazardId=${item.hazardId}&locked=1`; if (item.assignId) { url += `&assignId=${item.assignId}`; } if (item.taskId) { url += `&taskId=${encodeURIComponent(item.taskId)}`; } if (item.taskKey) { url += `&taskKey=${encodeURIComponent(item.taskKey)}`; } return appendWriteoffHazardQuery(url, item); } const decodeQueryValue = (value) => { if (value == null || value === '') return ''; try { return decodeURIComponent(String(value)); } catch (error) { return String(value); } }; /** 销号相关页 URL 追加列表项展示字段(title、deadline、deptName、rectifierName、deptId) */ export function appendWriteoffHazardQuery(url, item) { if (!item) return url; let result = url; const title = item.title || item.hazardTitle; if (title) { result += `&title=${encodeURIComponent(title)}`; } if (item.deadline) { result += `&deadline=${encodeURIComponent(item.deadline)}`; } if (item.deptName) { result += `&deptName=${encodeURIComponent(item.deptName)}`; } if (item.deptId != null && item.deptId !== '') { result += `&deptId=${item.deptId}`; } if (item.rectifierName) { result += `&rectifierName=${encodeURIComponent(item.rectifierName)}`; } return result; } /** 从页面 onLoad options 解析列表传入的隐患信息(不再依赖 verified/list 对比) */ export function buildWriteoffHazardFromOptions(options) { if (!options?.hazardId) return null; return { hazardId: options.hazardId, assignId: options.assignId || '', taskId: options.taskId || '', title: decodeQueryValue(options.title), hazardTitle: decodeQueryValue(options.title), deadline: decodeQueryValue(options.deadline), deptName: decodeQueryValue(options.deptName), deptId: options.deptId || '', rectifierName: decodeQueryValue(options.rectifierName) }; } const isTruthyFlag = (value) => value === true || value === 1 || value === '1'; /** * 立即验收按钮展示逻辑(首页、隐患排查列表等共用) * * 【当前展示条件】 * 接口返回 item.verifyFlag 为 true 时展示,false 时不展示。 * 权限、角色、流程节点等由后端统一计算并写入 verifyFlag,前端不再单独判断。 * * 【历史变更】 * - 最初:item.quickApprove != 0 时展示 * * - 中间:改为 item.result 控制 * 仅当 result 为 null 或 3(驳回)时展示 * * - 其后:改为 item.nodeType 控制(需同时满足 statusName === '待验收' 且角色为 admin/manage) * 展示条件(需同时满足): * 1. statusName === '待验收' * 2. 当前角色为 admin 或 manage * 3. 流程节点类型 nodeType 允许验收 * 仅当 nodeType 为 null、1(重新整改)、2(驳回)、3(重新验收)时展示 * 其他 nodeType 值不展示 * * - 2026-08-05:改为 item.verifyFlag 控制(true 展示,false 不展示) * 列表接口(首页 getHiddenDangerList、隐患排查 getMyHiddenDangerList)新增 verifyFlag 字段 */ export function canShowAcceptanceButton(item) { return isTruthyFlag(item?.verifyFlag); } /** 销号申请按钮:待销号且 applyFlag 为 true */ export function canShowWriteoffApplyButton(item) { return item?.statusName === '待销号' && isTruthyFlag(item?.applyFlag); } /** 销号审批按钮:待销号、manage 角色且 writeOffFlag 为 true */ export function canShowWriteoffApprovalButton(item, roleKey) { return item?.statusName === '待销号' && roleKey === 'manage' && isTruthyFlag(item?.writeOffFlag); }