*/ public static function filterOptions(): array { return [ '' => '全部状态', 'RUNNING' => '进行中', 'COMPLETED' => '已完成', 'REJECTED' => '已拒绝', 'WITHDRAWN' => '已撤回', 'FAILED' => '失败', 'EXPIRED' => '已过期', 'DELETED' => '已删除', ]; } /** @param array $workflow */ public static function key(array $workflow): string { $status = strtoupper(trim((string) ($workflow['status'] ?? ''))); $result = strtoupper(trim((string) ($workflow['result'] ?? ''))); // 审批结果优先于生命周期状态:流程完成但被拒绝时,钉钉显示“已拒绝”。 if (in_array($result, ['REFUSE', 'REJECT', 'REJECTED'], true)) { return 'REJECTED'; } return match ($status) { 'RUNNING', 'PENDING', 'WAITING' => 'RUNNING', 'COMPLETED' => 'COMPLETED', 'REJECTED' => 'REJECTED', 'TERMINATED', 'CANCELED', 'CANCELLED', 'REVOKED' => 'WITHDRAWN', 'FAILED' => 'FAILED', 'EXPIRED' => 'EXPIRED', 'DELETED' => 'DELETED', 'NEW' => 'NEW', 'DRAFT' => 'DRAFT', default => $status !== '' ? $status : 'UNKNOWN', }; } /** @param array $workflow */ public static function label(array $workflow): string { $key = self::key($workflow); return self::filterOptions()[$key] ?? match ($key) { 'NEW' => '待提交', 'DRAFT' => '草稿', 'UNKNOWN' => '-', default => $key, }; } /** @param array $workflow */ public static function matchesFilter(array $workflow, string $requested): bool { $requested = strtoupper(trim($requested)); if ($requested === '') { return true; } // 兼容旧链接中的原始钉钉状态值,同时让筛选结果与页面显示一致。 $requested = match ($requested) { 'PENDING', 'WAITING' => 'RUNNING', 'TERMINATED', 'CANCELED', 'CANCELLED', 'REVOKED' => 'WITHDRAWN', default => $requested, }; return self::key($workflow) === $requested; } }