Files
X-Financial/web/src/utils/approvalInbox.js
caoxiaozhu d4d5d40569 feat: 新增预算费控模型与报销审批流引擎
后端新增预算费控服务和报销单审批流模块,引入申请人费用画像
算法,优化知识库 RAG 运行时和同步逻辑,完善报销单工作流常
量和明细同步,更新差旅报销规则电子表格,前端新增预算分析
组件和数字员工模型,完善审批对话框和洞察面板交互,优化侧
边栏和顶栏样式,补充单元测试。
2026-05-27 17:31:27 +08:00

55 lines
1.5 KiB
JavaScript

import { mapExpenseClaimToRequest } from '../composables/useRequests.js'
import {
canApproveBudgetExpenseApplications,
canApproveLeaderExpenseClaims,
isCurrentDirectManagerForRequest,
isCurrentRequestApplicant,
isFinanceUser
} from './accessControl.js'
export function canProcessApprovalRequest(request, currentUser) {
const node = String(request?.workflowNode || '').trim()
if (isCurrentRequestApplicant(request, currentUser)) {
return false
}
if (isFinanceUser(currentUser) && node.includes('财务')) {
return true
}
if (node.includes('预算')) {
return canApproveBudgetExpenseApplications(currentUser, request)
}
const isLeaderApprovalNode = (
node.includes('直属领导')
|| node.includes('领导审批')
|| node.includes('部门负责人')
|| node.includes('负责人审批')
)
return (
canApproveLeaderExpenseClaims(currentUser)
&& isLeaderApprovalNode
&& isCurrentDirectManagerForRequest(request, currentUser)
)
}
export function listPendingApprovalRequests(claimsPayload, currentUser) {
if (!Array.isArray(claimsPayload)) {
return []
}
return claimsPayload
.map((item) => mapExpenseClaimToRequest(item))
.filter((item) => item.approvalKey === 'in_progress')
.filter((item) => canProcessApprovalRequest(item, currentUser))
}
export function resolvePendingClaimIds(claimsPayload, currentUser) {
return listPendingApprovalRequests(claimsPayload, currentUser)
.map((item) => String(item.claimId || '').trim())
.filter(Boolean)
}