diff --git a/app/Http/Controllers/Api/TicketController.php b/app/Http/Controllers/Api/TicketController.php new file mode 100644 index 0000000..d6eed24 --- /dev/null +++ b/app/Http/Controllers/Api/TicketController.php @@ -0,0 +1,30 @@ +validate([ + 'title' => 'required', + 'content' => 'required', + ]); + + try { + $whmcs = new WHMCS($provider); + } catch (\Exception $e) { + return $this->error('提供商不存在'); + } + + $user = $request->user(); + + $result = $whmcs->api_openTicket($user->email, $request->input('title'), $request->input('content')); + + return $this->success($result); + + } +} diff --git a/app/Support/WHMCS.php b/app/Support/WHMCS.php index d375790..22492ef 100644 --- a/app/Support/WHMCS.php +++ b/app/Support/WHMCS.php @@ -137,4 +137,14 @@ public function api_addTraffic(string $email, string $payment, int|float $traffi ]); } + public function api_openTicket(string $email, string $title, string $content) + { + return $this->api('openTicket', [ + 'email' => $email, + 'title' => $title, + 'content' => $content, + 'department_id' => $this->config['department_id'] ?? 1, + ]); + } + } diff --git a/config/whmcs.php b/config/whmcs.php index 47ff7a6..b17432a 100644 --- a/config/whmcs.php +++ b/config/whmcs.php @@ -4,6 +4,7 @@ 'test' => [ 'url' => 'http://whmcs.test', 'api_token' => 'abc123456', + 'department_id' => 1, 'payments' => [ 'laeFastPay' => '莱云 快捷支付', 'mailin' => '邮入', diff --git a/resources/js/components/Menu.vue b/resources/js/components/Menu.vue index 43e93ad..b9e71af 100644 --- a/resources/js/components/Menu.vue +++ b/resources/js/components/Menu.vue @@ -52,7 +52,10 @@ const items = ref([ name: "充值", route: "charge", }, - + { + name: "发工单", + route: "ticket", + }, { name: "客户端下载", route: "downloads", diff --git a/resources/js/plugins/router.js b/resources/js/plugins/router.js index d8c4268..26e4863 100644 --- a/resources/js/plugins/router.js +++ b/resources/js/plugins/router.js @@ -59,6 +59,14 @@ const routes = [ title: "流量充值", }, }, + { + path: "/ticket", + name: "ticket", + component: () => import("../views/Ticket.vue"), + meta: { + title: "发布工单", + }, + }, ]; diff --git a/resources/js/views/Ticket.vue b/resources/js/views/Ticket.vue new file mode 100644 index 0000000..51f09fb --- /dev/null +++ b/resources/js/views/Ticket.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/routes/api.php b/routes/api.php index c2f237b..7a2abce 100644 --- a/routes/api.php +++ b/routes/api.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Api\ServerController; use App\Http\Controllers\Api\TunnelController; use App\Http\Controllers\Api\PortManagerController; +use App\Http\Controllers\Api\TicketController; use App\Http\Controllers\Api\TrafficController; use App\Http\Controllers\Application\UserController as ApplicationUserController; @@ -27,6 +28,7 @@ Route::get('providers', [TrafficController::class, 'providers']); Route::get('providers/{provider}/payments', [TrafficController::class, 'payments']); Route::post('providers/{provider}/charge', [TrafficController::class, 'charge']); + Route::post('providers/{provider}/ticket', [TicketController::class, 'submit']); });