diff --git a/frontend/src/pages/approval/detail.tsx b/frontend/src/pages/approval/detail.tsx index 9a58cce..5d8d0f8 100644 --- a/frontend/src/pages/approval/detail.tsx +++ b/frontend/src/pages/approval/detail.tsx @@ -179,13 +179,20 @@ export default function ApprovalDetail() { hasDetail: !!detail, hasUser: !!user, userId: user?.id, + userIdType: typeof user?.id, status: detail?.status, currentNodes: detail?.current_nodes, nodesCount: detail?.flow?.nodes?.length, }) - if (!detail || !user) return false - if (detail.status !== 'pending') return false + if (!detail || !user) { + console.log('❌ 缺少 detail 或 user') + return false + } + if (detail.status !== 'pending') { + console.log('❌ 状态不是 pending') + return false + } // 检查当前用户是否在 current_nodes 对应的节点审批人列表中 const currentNodeIds = detail.current_nodes || [] @@ -193,7 +200,13 @@ export default function ApprovalDetail() { console.log('🔍 节点信息:', { currentNodeIds, - nodes: nodes.map(n => ({ id: n.id, name: n.name, approvers: n.approvers })), + nodes: nodes.map(n => ({ + id: n.id, + name: n.name, + approvers: n.approvers, + approversType: typeof n.approvers, + approversFirstType: n.approvers?.[0] !== undefined ? typeof n.approvers[0] : 'undefined' + })), }) for (const nodeId of currentNodeIds) { @@ -202,20 +215,31 @@ export default function ApprovalDetail() { node, approvers: node?.approvers, userId: user.id, + userIdType: typeof user.id, isInApprovers: node?.approvers?.includes(user.id), + // 尝试类型转换后的检查 + isInApproversAsString: node?.approvers?.includes(String(user.id)), + isInApproversAsNumber: node?.approvers?.includes(Number(user.id)), }) - if (node && node.approvers && node.approvers.includes(user.id)) { - // 检查是否已审批 - 使用 approver_id 而不是 approver.id - const hasApproved = detail.records.some( - (r) => r.node_id === nodeId && r.approver_id === user.id - ) - console.log(`🔍 节点 ${nodeId} 审批状态:`, { - hasApproved, - records: detail.records.filter(r => r.node_id === nodeId), - }) - if (!hasApproved) { - console.log('✅ 是当前审批人!') - return true + + if (node && node.approvers) { + // 尝试多种方式匹配 + const matches = node.approvers.some(a => a === user.id || a === String(user.id) || Number(a) === user.id) + console.log(`🔍 节点 ${nodeId} 匹配结果:`, { matches }) + + if (matches) { + // 检查是否已审批 - 使用 approver_id 而不是 approver.id + const hasApproved = detail.records.some( + (r) => r.node_id === nodeId && r.approver_id === user.id + ) + console.log(`🔍 节点 ${nodeId} 审批状态:`, { + hasApproved, + records: detail.records.filter(r => r.node_id === nodeId), + }) + if (!hasApproved) { + console.log('✅ 是当前审批人!') + return true + } } } } @@ -233,6 +257,15 @@ export default function ApprovalDetail() { const canCancel = detail.status === 'pending' && isOwner const canApprove = isCurrentApprover() + // 显示审批按钮状态 + console.log('🎯 操作按钮状态:', { + canCancel, + canApprove, + isOwner, + applicantName: detail.applicant?.name, + userName: user?.name, + }) + // 格式化时间 const formatTime = (timeStr: string) => { return dayjs(timeStr).format('YYYY-MM-DD HH:mm')