paginate(20); // 禁用创建按钮(如果需要) // $grid->disableCreateButton(); // 设置表格标题 $grid->header(function () { return view('transfer::admin.app.header'); }); }); return $grid; } /** * 配置数据详情 */ protected function detail($id): Show { $show = Show::make($id, new TransferApp(), function (Show $show) { // 使用辅助类配置详情 TransferAppHelper::show($show); // 添加自定义面板 $show->panel() ->title('划转应用详情') ->tools(function ($tools) { // 添加测试连接按钮 $tools->append('测试连接'); }); }); return $show; } /** * 配置创建和编辑表单 */ protected function form(): Form { $form = Form::make(new TransferApp(), function (Form $form) { // 使用辅助类配置表单 TransferAppHelper::form($form); // 设置表单标题 $form->title('划转应用配置'); // 表单工具栏 $form->tools(function (Form\Tools $tools) { // 添加测试按钮 $tools->append('测试配置'); }); }); return $form; } /** * 测试应用连接 */ public function testConnection($id) { try { $app = TransferApp::findOrFail($id); if ($app->isInternalMode()) { return response()->json([ 'status' => true, 'message' => '农场内部模式,无需测试连接' ]); } // 测试各个API端点 $results = []; $urls = [ 'callback' => $app->order_callback_url, 'in_info' => $app->order_in_info_url, 'out_create' => $app->order_out_create_url, 'out_info' => $app->order_out_info_url, ]; foreach ($urls as $type => $url) { if (empty($url)) { $results[$type] = ['status' => 'skip', 'message' => '未配置']; continue; } try { $response = Http::timeout(10)->get($url); $results[$type] = [ 'status' => $response->successful() ? 'success' : 'error', 'message' => $response->successful() ? '连接成功' : "HTTP {$response->status()}", 'response_time' => $response->transferStats->getTransferTime() ?? 0 ]; } catch (\Exception $e) { $results[$type] = [ 'status' => 'error', 'message' => $e->getMessage() ]; } } return response()->json([ 'status' => true, 'message' => '连接测试完成', 'data' => $results ]); } catch (\Exception $e) { return response()->json([ 'status' => false, 'message' => '测试失败: ' . $e->getMessage() ]); } } /** * 切换应用状态 */ public function toggleStatus($id) { try { $app = TransferApp::findOrFail($id); $app->is_enabled = !$app->is_enabled; $app->save(); $status = $app->is_enabled ? '启用' : '禁用'; return response()->json([ 'status' => true, 'message' => "应用已{$status}" ]); } catch (\Exception $e) { return response()->json([ 'status' => false, 'message' => '操作失败: ' . $e->getMessage() ]); } } /** * 获取应用统计信息 */ public function statistics($id = null) { try { $query = \App\Module\Transfer\Models\TransferOrder::query(); if ($id) { $query->where('transfer_app_id', $id); } $stats = [ 'total_orders' => $query->count(), 'completed_orders' => (clone $query)->where('status', \App\Module\Transfer\Enums\TransferStatus::COMPLETED)->count(), 'failed_orders' => (clone $query)->where('status', \App\Module\Transfer\Enums\TransferStatus::FAILED)->count(), 'total_amount' => $query->sum('amount'), 'today_orders' => (clone $query)->whereDate('created_at', today())->count(), 'today_amount' => (clone $query)->whereDate('created_at', today())->sum('amount'), ]; $stats['success_rate'] = $stats['total_orders'] > 0 ? round($stats['completed_orders'] / $stats['total_orders'] * 100, 2) : 0; return response()->json([ 'status' => true, 'data' => $stats ]); } catch (\Exception $e) { return response()->json([ 'status' => false, 'message' => '获取统计信息失败: ' . $e->getMessage() ]); } } }