feat(admin-frontend): 补齐活跃筛选与支付快照能力

新增用户管理“活跃状态”高级筛选,并在后端支持
activity_status 复合规则,支持按活跃与非活跃筛选用户。

补齐订单支付成功快照落库与后台展示,保存支付渠道、
支付方法、实付金额和支付 IP,并在订单详情中优先展示。

同时增强节点页在线/离线筛选与批量删除、仪表盘快捷入口,
并修复已关闭工单再次回复后自动重开的统一语义。

附带同步测试、迁移、CI 工作流命名及知识库记录
This commit is contained in:
yinjianm
2026-04-25 00:59:08 +08:00
parent 2218457237
commit c64badfc23
55 changed files with 2023 additions and 71 deletions
+19 -5
View File
@@ -22,11 +22,7 @@ class TicketService
'ticket_id' => $ticket->id,
'message' => $message
]);
$isAdmin = $userId !== $ticket->user_id;
$ticket->reply_status = $isAdmin
? Ticket::REPLY_STATUS_REPLIED
: Ticket::REPLY_STATUS_WAITING;
$ticket->last_reply_user_id = $userId;
$this->applyReplyState($ticket, (int) $userId);
if (!$ticketMessage || !$ticket->save()) {
throw new \Exception();
}
@@ -52,6 +48,24 @@ class TicketService
$this->sendEmailNotify($ticket, $ticketMessage);
}
/**
* Applies the unified reply state to a ticket.
*
* @param Ticket $ticket The target ticket.
* @param int $userId The replying user ID.
* @return void
*/
private function applyReplyState(Ticket $ticket, int $userId): void
{
$isAdmin = $userId !== $ticket->user_id;
$ticket->status = Ticket::STATUS_OPENING;
$ticket->reply_status = $isAdmin
? Ticket::REPLY_STATUS_REPLIED
: Ticket::REPLY_STATUS_WAITING;
$ticket->last_reply_user_id = $userId;
}
public function createTicket($userId, $subject, $level, $message)
{
try {