import request from './request' import type { PageData } from './types' /** 审批单状态:1待财务复核 2待领导审核 3已通过 4已驳回 5已撤回 */ export const APPROVAL_STATUS = { PENDING_FINANCE: 1, PENDING_LEADER: 2, APPROVED: 3, REJECTED: 4, WITHDRAWN: 5, } as const export function approvalStatusLabel(status: number): string { return ( { 1: '待财务复核', 2: '待领导审核', 3: '已通过', 4: '已驳回', 5: '已撤回', }[status] ?? String(status) ) } export function approvalStatusTagType(status: number): 'primary' | 'success' | 'danger' | 'info' { return ( ({ 1: 'primary', 2: 'warning', 3: 'success', 4: 'danger', 5: 'info' } as const)[status] ?? 'info' ) as 'primary' | 'success' | 'danger' | 'info' } /** 节点动作:1通过 2驳回 3自动通过(系统) 4撤回 */ export function stepActionLabel(action: number): string { return ({ 1: '通过', 2: '驳回', 3: '自动通过', 4: '撤回' } as const)[action] ?? String(action) } /** 节点名:0 仅用于撤回留痕 */ export function stepNodeLabel(node: number): string { return ({ 0: '撤回', 1: '财务复核', 2: '领导审核' } as const)[node] ?? `节点${node}` } export interface ApprovalStep { id: number node: number action: number opinion: string | null operator_id: number | null operator_name: string create_time: string } export interface ApprovalOrder { id: number order_no: string /** 1二次分配方案 2月度结算(预留) */ order_type: number ref_id: number refer_no: string status: number submitter_id: number | null submitter_name: string create_time: string } export interface ApprovalOrderDetail extends ApprovalOrder { steps: ApprovalStep[] } export interface ApprovalQueryParams { pageNum?: number pageSize?: number /** 审批单号/引用单号,模糊 */ keyword?: string status?: number order_type?: number } export function listApprovals(params: ApprovalQueryParams): Promise> { return request({ url: '/v1/system/approvals', method: 'get', params }) } export function getApproval(orderId: number): Promise { return request({ url: `/v1/system/approvals/${orderId}`, method: 'get' }) } export function actApproval( orderId: number, data: { action: 1 | 2; opinion?: string | null }, ): Promise { return request({ url: `/v1/system/approvals/${orderId}/action`, method: 'post', data }) }