centerStatus(self::STATUS_PENDING_PAYMENT) ->label('待支付') ->adminButtons([]) ->userButtons([ Button::primary('去支付', 'payOrder'), ]), // ───── 已完成(终态) ───── OrderFlowNode::make(self::EXT_STATUS_COMPLETED) ->centerStatus(self::STATUS_COMPLETED) ->label('已完成') ->adminButtons([]) ->userButtons([]), ]; } // ======================== 3. 状态推导 ======================== /** * 推导统一状态码 */ public function resolveStatusCode(array $sourceOrder): string { if (($sourceOrder['paid'] ?? 0) == 0) { return self::STATUS_PENDING_PAYMENT; } return self::STATUS_COMPLETED; } /** * 推导支付状态 */ public function resolvePayStatus(array $sourceOrder): int { return ($sourceOrder['paid'] ?? 0) ? self::PAY_PAID : self::PAY_UNPAID; } /** * 推导退款状态 */ public function resolveRefundStatus(array $sourceOrder): int { return self::REFUND_NONE; } /** * 推导业务状态 */ public function resolveBusinessStatus(array $sourceOrder): ?array { return null; } // ======================== 4. 按钮逻辑 ======================== public function getStatusButtons(string $statusCode, array $detail = []): array { $node = $this->centerStatusMap[$statusCode][0] ?? null; if ($node) { return $node['user_buttons'] ?? []; } return $this->extStatusMap[$statusCode]['user_buttons'] ?? []; } }