debug: 增加更详细的调试日志来排查审批按钮不显示问题
- 添加类型检查日志(userId、approvers类型) - 添加多种匹配方式尝试 - 显示操作按钮状态 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -179,13 +179,20 @@ export default function ApprovalDetail() {
|
|||||||
hasDetail: !!detail,
|
hasDetail: !!detail,
|
||||||
hasUser: !!user,
|
hasUser: !!user,
|
||||||
userId: user?.id,
|
userId: user?.id,
|
||||||
|
userIdType: typeof user?.id,
|
||||||
status: detail?.status,
|
status: detail?.status,
|
||||||
currentNodes: detail?.current_nodes,
|
currentNodes: detail?.current_nodes,
|
||||||
nodesCount: detail?.flow?.nodes?.length,
|
nodesCount: detail?.flow?.nodes?.length,
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!detail || !user) return false
|
if (!detail || !user) {
|
||||||
if (detail.status !== 'pending') return false
|
console.log('❌ 缺少 detail 或 user')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (detail.status !== 'pending') {
|
||||||
|
console.log('❌ 状态不是 pending')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// 检查当前用户是否在 current_nodes 对应的节点审批人列表中
|
// 检查当前用户是否在 current_nodes 对应的节点审批人列表中
|
||||||
const currentNodeIds = detail.current_nodes || []
|
const currentNodeIds = detail.current_nodes || []
|
||||||
@@ -193,7 +200,13 @@ export default function ApprovalDetail() {
|
|||||||
|
|
||||||
console.log('🔍 节点信息:', {
|
console.log('🔍 节点信息:', {
|
||||||
currentNodeIds,
|
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) {
|
for (const nodeId of currentNodeIds) {
|
||||||
@@ -202,20 +215,31 @@ export default function ApprovalDetail() {
|
|||||||
node,
|
node,
|
||||||
approvers: node?.approvers,
|
approvers: node?.approvers,
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
|
userIdType: typeof user.id,
|
||||||
isInApprovers: node?.approvers?.includes(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
|
if (node && node.approvers) {
|
||||||
const hasApproved = detail.records.some(
|
// 尝试多种方式匹配
|
||||||
(r) => r.node_id === nodeId && r.approver_id === user.id
|
const matches = node.approvers.some(a => a === user.id || a === String(user.id) || Number(a) === user.id)
|
||||||
)
|
console.log(`🔍 节点 ${nodeId} 匹配结果:`, { matches })
|
||||||
console.log(`🔍 节点 ${nodeId} 审批状态:`, {
|
|
||||||
hasApproved,
|
if (matches) {
|
||||||
records: detail.records.filter(r => r.node_id === nodeId),
|
// 检查是否已审批 - 使用 approver_id 而不是 approver.id
|
||||||
})
|
const hasApproved = detail.records.some(
|
||||||
if (!hasApproved) {
|
(r) => r.node_id === nodeId && r.approver_id === user.id
|
||||||
console.log('✅ 是当前审批人!')
|
)
|
||||||
return true
|
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 canCancel = detail.status === 'pending' && isOwner
|
||||||
const canApprove = isCurrentApprover()
|
const canApprove = isCurrentApprover()
|
||||||
|
|
||||||
|
// 显示审批按钮状态
|
||||||
|
console.log('🎯 操作按钮状态:', {
|
||||||
|
canCancel,
|
||||||
|
canApprove,
|
||||||
|
isOwner,
|
||||||
|
applicantName: detail.applicant?.name,
|
||||||
|
userName: user?.name,
|
||||||
|
})
|
||||||
|
|
||||||
// 格式化时间
|
// 格式化时间
|
||||||
const formatTime = (timeStr: string) => {
|
const formatTime = (timeStr: string) => {
|
||||||
return dayjs(timeStr).format('YYYY-MM-DD HH:mm')
|
return dayjs(timeStr).format('YYYY-MM-DD HH:mm')
|
||||||
|
|||||||
Reference in New Issue
Block a user