import { ApprovalLevelDirectionEnum, ApprovalOperationEnum, ApprovalTypeEnum, ApproverTypeEnum, ProcessStatusEnum, type ApprovalResourceTypeEnum, } from '@lib/shared/enums/process'; import { RequestEnum } from '@lib/shared/enums/httpEnum'; import type { SelectedUsersItem } from './module'; import type { OptionDTO } from './business'; import type { FilterForm } from '@cordys/web/src/components/pure/crm-advance-filter/type'; import type { UserInfo } from '@lib/shared/models/user'; import { ApprovalFieldPermissionModeEnum, ApprovalNodeTypeEnum, EmptyApproverActionEnum, MultiApproverModeEnum, SameSubmitterActionEnum, } from '@lib/shared/enums/process'; import type { ActionNode, ConditionBranch } from '@cordys/web/src/components/business/crm-flow/types'; import type { TableQueryParams } from '../common'; import type { AttachmentInfo } from '@cordys/web/src/components/business/crm-form-create/types'; export interface BaseItem { id: string; name: string; } // 权限项 export interface PermissionItem { id: string; name: string; enabled: boolean; } // 审批流程基本信息接口 export interface ApprovalProcessItem extends BaseItem { number: string; formType: string; createExecute: boolean; updateExecute: boolean; deleteExecute: boolean; enable: boolean; submitterCanRevoke: boolean; allowBatchProcess: boolean; allowWithdraw: boolean; allowAddSign: boolean; duplicateApproverRule: string; requireComment: boolean; organizationId: string; createUserName: string; createUser: string; updateUser: string; updateUserName: string; createTime: number; updateTime: number; } // 审批权限详情 export interface ApprovalPermissionsDetail { permissions: PermissionItem[]; statusPermissions: StatusPermissions[]; } export interface ApprovalFieldPermission { fieldId: string; permissionType: ApprovalFieldPermissionModeEnum; } export interface ApprovalFieldUpdateConfig { fieldId: string | null; fieldValue: any; enable: boolean; } export interface ApprovalWebhookConfig { webHookDescribe: string; webHookEnable: boolean; webHookUrl: string; webHookMethod: RequestEnum; webHookHeader: string; webHookBody: string; } export interface ApprovalPostConfig { fieldUpdateConfigs: ApprovalFieldUpdateConfig[]; webHookConfig?: ApprovalWebhookConfig; } // 后端审批流节点的基础结构 export interface ApprovalProcessNodeBase extends BaseItem { nodeType: TNodeType; number?: string; sort: number; } // 审批节点里前后端共用的业务配置 export interface ApprovalNodeParticipantConfig { approvalType: ApprovalTypeEnum; // 审批类型:人工审批/自动通过/自动拒绝 approverType: ApproverTypeEnum | null; approverDirection?: ApprovalLevelDirectionEnum; approverList: string[]; // 审批人配置列表:成员 ID / 角色 ID / 层级等 approverSelectOptions?: OptionDTO[]; // 审批人选择项(用于前端回显) multiApproverMode: MultiApproverModeEnum; // 多人审批方式 emptyApproverAction: EmptyApproverActionEnum; // 异常处理-审批人为空时动作 fallbackApprover: string | null; // 异常处理-兜底审批人 fallbackApproverName?: string; sameSubmitterAction: SameSubmitterActionEnum; // 异常处理-审批人与提交人相同时动作 ccType: ApproverTypeEnum | null; // 抄送人 ccDirection?: ApprovalLevelDirectionEnum; ccList: string[]; // 抄送人配置列表:成员 ID / 角色 ID / 层级等 ccSelectOptions?: OptionDTO[]; // 抄送人选择项(用于前端回显) passPostConfig?: ApprovalPostConfig; // 审批通过后配置 rejectPostConfig?: ApprovalPostConfig; // 审批驳回后配置 fieldPermissions?: ApprovalFieldPermission[]; // 字段权限配置列表 } export type ApprovalProcessStartNode = ApprovalProcessNodeBase; export type ApprovalProcessEndNode = ApprovalProcessNodeBase; export interface ApprovalProcessApproverNode extends ApprovalProcessNodeBase, ApprovalNodeParticipantConfig {} export interface ApprovalProcessConditionNode extends ApprovalProcessNodeBase { nodeType: ApprovalNodeTypeEnum.CONDITION; conditionConfig?: FilterForm; } export type ApprovalProcessDefaultNode = ApprovalProcessNodeBase; export type ApprovalProcessNode = | ApprovalProcessStartNode | ApprovalProcessEndNode | ApprovalProcessApproverNode | ApprovalProcessConditionNode | ApprovalProcessDefaultNode; // 审批动作节点(前端审批流图使用) export interface ApprovalActionNode extends ActionNode, ApprovalNodeParticipantConfig { approverSelectedList?: SelectedUsersItem[]; // 前端展示用的审批人选中列表 emptyApproverSelectedList?: SelectedUsersItem[]; // 异常处理-前端展示用的 ccSelectedList?: SelectedUsersItem[]; // 前端展示用的抄送选中列表 } // 审批条件分支(前端审批流图使用) export interface ApprovalConditionBranch extends ConditionBranch { conditionConfig?: FilterForm; } // 状态权限 export interface StatusPermissions { approvalStatus: ProcessStatusEnum; permission: string; enabled: boolean; } // 基本表单参数 export interface BasicFormParams { name: string; formType: string; description: string; createExecute: boolean; // 创建执行 updateExecute: boolean; // 更新执行 deleteExecute: boolean; // 删除执行 } // 更多设置参数 export interface MoreSettingsParams { submitterCanRevoke: boolean; allowBatchProcess: boolean; allowWithdraw: boolean; allowAddSign: boolean; duplicateApproverRule: string; requireComment: boolean; permissions: BaseItem[]; statusPermissions: StatusPermissions[]; } export interface ApprovalNodeLinkResponse { id: string; fromNodeId: string; toNodeId: string; } export interface ApprovalFlowNodeConfig { nodes: ApprovalProcessNode[]; links: ApprovalNodeLinkResponse[]; } export interface AddApprovalProcessParams extends BasicFormParams, MoreSettingsParams { enable: boolean; createNodeConfig?: ApprovalFlowNodeConfig; updateNodeConfig?: ApprovalFlowNodeConfig; deleteNodeConfig?: ApprovalFlowNodeConfig; } export interface UpdateApprovalProcessParams extends AddApprovalProcessParams { id: string; } export interface ApprovalProcessDetail extends UpdateApprovalProcessParams { permissions: PermissionItem[]; id: string; number: string; optionMap?: Record; } export interface ApprovalProcessForm { id: string; enable: boolean; createNodeConfig?: ApprovalFlowNodeConfig; updateNodeConfig?: ApprovalFlowNodeConfig; deleteNodeConfig?: ApprovalFlowNodeConfig; basicConfig: BasicFormParams; moreConfig: MoreSettingsParams; } export interface ApproverItem extends Pick { approveResult: ProcessStatusEnum; approveReason: string; } export interface ApprovalPopoverDetail { resourceId: string; approveStatus: ProcessStatusEnum; approveUserList: ApproverItem[]; } export interface CommonApprovalActionParams { resourceId: string; formKey: string; } export interface ApprovalTodoTableParams extends TableQueryParams { resourceName?: string; resourceType: ApprovalResourceTypeEnum; } export interface ApprovalTodoItem { approvalTaskId: string; approvalNodeId: string; approvalInstanceId: string; approvalId: string; approvalFlowId: string; approvalFlowVersionId: string; resourceId: string; resourceName: string; resourceType: ApprovalResourceTypeEnum; applicant: string; submitTime: number; approvalOperation: ApprovalOperationEnum; dataResult: ProcessStatusEnum; } export interface ApprovalOperationParams { id: string; nodeId: string; instanceId: string; approverId: string; comment?: string; attachmentIds: string[]; module: string; } export interface ApprovalBackParams extends ApprovalOperationParams { returnToNodeId: string; } export interface ApprovalAddSignParams extends ApprovalOperationParams { type: string; signApprover: string; } export interface BatchRejectApprovalParams { ids: string[]; comment: string; attachmentIds: string[]; } export interface BatchApprovalParams { ids: string[]; comment?: string; attachmentIds: string[]; } export interface TodoStatistic { total: number; quotation: number; contract: number; order: number; invoice: number; } export interface ApprovalDetail { id: string; submitterId: string; submitAvatar: string; submitter: string; submitTime: number; comment: string; result: string; approvalStatus: ProcessStatusEnum; currentNodeId: string; currentNodeFieldPermissions: string; nodes: ApprovalNode[]; } export interface ApprovalNode { taskId: string; recordId: string; nodeId: string; nodeName: string; endNode: boolean; approverId: string; approver: string; approvalStatus: ProcessStatusEnum; approvalTime: number; comment: string; attachments: AttachmentInfo[]; ccNodes: CcNode[]; nodeRound: number; // 节点轮次 taskNodes: ApprovalNodeTaskNode[]; multiApproverMode: MultiApproverModeEnum; // 多人审批方式 backNode: boolean; // 是否回退节点 backReason: string; // 回退原因 backAttachments: AttachmentInfo[]; // 回退附件 } export interface ApprovalNodeTaskNode { taskId: string; approverId: string; approver: string; approverAvatar: string; approvalStatus: ProcessStatusEnum; recordId: string; comment: string; attachments: AttachmentInfo[]; approvalTime: number; sign: boolean; // 是否加签任务 signAction: boolean; // 是否操作加签 signComment: string; // 加签备注 signAttachments: AttachmentInfo[]; // 加签附件 } export interface CcNode { ccUserId: string; ccUserName: string; ccUserAvatar: string; }