diff --git a/app/Http/Controllers/Admin/HostController.php b/app/Http/Controllers/Admin/HostController.php index 85be8e7..a4ae7e2 100644 --- a/app/Http/Controllers/Admin/HostController.php +++ b/app/Http/Controllers/Admin/HostController.php @@ -5,6 +5,7 @@ use App\Http\Controllers\Controller; use App\Models\Host; use Illuminate\Http\Request; +use Illuminate\View\View; class HostController extends Controller { @@ -58,9 +59,11 @@ public function show(Host $host) * @param \App\Models\Host $host * @return \Illuminate\Http\Response */ - public function edit(Host $host) + public function edit(Host $host): View { // + + return view('admin.hosts.edit', compact('host')); } /** @@ -73,6 +76,15 @@ public function edit(Host $host) public function update(Request $request, Host $host) { // + + $request->validate([ + 'name' => 'required|string|max:255', + 'managed_price' => 'nullable|numeric', + ]); + + $host->update($request->all()); + + return back()->with('success', '此主机已更新。'); } /** diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 57ec0ce..014409b 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -101,6 +101,11 @@ public function edit(User $user) public function update(Request $request, User $user) { // + $request->validate([ + + 'balance' => 'nullable|numeric|min:0.01|max:1000', + 'drops' => 'nullable|numeric|min:1|max:10000', + ]); $transaction = new Transaction(); diff --git a/app/Http/Controllers/Admin/WorkOrderController.php b/app/Http/Controllers/Admin/WorkOrderController.php index a48680e..10503cd 100644 --- a/app/Http/Controllers/Admin/WorkOrderController.php +++ b/app/Http/Controllers/Admin/WorkOrderController.php @@ -4,24 +4,27 @@ use App\Http\Controllers\Controller; use App\Models\WorkOrder\WorkOrder; +use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\Http\Response; +use Illuminate\View\View; class WorkOrderController extends Controller { /** * Display a listing of the resource. * - * @return \Illuminate\Http\Response + * @return View */ - public function index() + public function index(WorkOrder $workOrder): View { - // + $workOrders = $workOrder->with('user')->paginate(100); + return view('admin.work-orders.index', compact('workOrders')); } - /** * Show the form for creating a new resource. * - * @return \Illuminate\Http\Response + * @return Response */ public function create() { @@ -32,7 +35,7 @@ public function create() * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response + * @return Response */ public function store(Request $request) { @@ -43,41 +46,54 @@ public function store(Request $request) * Display the specified resource. * * @param \App\Models\WorkOrder\WorkOrder $workOrder - * @return \Illuminate\Http\Response + * @return Response */ public function show(WorkOrder $workOrder) { // + } /** * Show the form for editing the specified resource. * - * @param \App\Models\WorkOrder\WorkOrder $workOrder - * @return \Illuminate\Http\Response + * @param \App\Models\WorkOrder\WorkOrder $workOrder + * + * @return View */ - public function edit(WorkOrder $workOrder) + public function edit(WorkOrder $workOrder): View { // + + return view('admin.work-orders.edit', compact('workOrder')); } /** * Update the specified resource in storage. * - * @param \Illuminate\Http\Request $request - * @param \App\Models\WorkOrder\WorkOrder $workOrder - * @return \Illuminate\Http\Response + * @param \Illuminate\Http\Request $request + * @param \App\Models\WorkOrder\WorkOrder $workOrder + * + * @return RedirectResponse */ - public function update(Request $request, WorkOrder $workOrder) + public function update(Request $request, WorkOrder $workOrder): RedirectResponse { // + + $request->validate([ + 'title' => 'required|string|max:255', + ]); + + $workOrder->update($request->all()); + + return back()->with('success', '工单更新成功'); } /** * Remove the specified resource from storage. * * @param \App\Models\WorkOrder\WorkOrder $workOrder - * @return \Illuminate\Http\Response + * @return Response */ public function destroy(WorkOrder $workOrder) { diff --git a/app/Models/Host.php b/app/Models/Host.php index 8160ffa..b0d46a1 100644 --- a/app/Models/Host.php +++ b/app/Models/Host.php @@ -38,57 +38,6 @@ class Host extends Model ]; - // get user hosts - - protected static function boot() - { - parent::boot(); - - static::created(function ($model) { - broadcast(new UserEvent($model->user_id, 'hosts.created', $model)); - }); - - static::updating(function ($model) { - - if ($model->isDirty('status')) { - if ($model->status == 'suspended') { - $model->suspended_at = now(); - } else { - $model->suspended_at = null; - } - } - - broadcast(new UserEvent($model->user_id, 'hosts.updating', $model)); - }); - - // when Updated - static::updated(function ($model) { - dispatch(new \App\Jobs\Module\Host($model, 'patch')); - - Cache::forget('user_hosts_' . $model->user_id); - Cache::forget('user_tasks_' . $model->user_id); - - - broadcast(new UserEvent($model->user_id, 'hosts.updated', $model)); - }); - - // - // static::deleting(function ($model) { - // broadcast(new UserEvent($model->user_id, 'hosts.deleting', $model)); - // }); - - static::deleting(function ($model) { - Cache::forget('user_tasks_' . $model->user_id); - }); - - static::deleted(function ($model) { - broadcast(new UserEvent($model->user_id, 'hosts.deleted', $model)); - Cache::forget('user_tasks_' . $model->user_id); - Cache::forget('user_hosts_' . $model->user_id); - }); - } - - // user public function getUserHosts($user_id = null) @@ -121,7 +70,7 @@ public function workOrders(): HasManyAlias public function scopeActive($query) { - return $query->where('status', 'running')->where('price', '!=', 0); + return $query->whereIn('status', ['running', 'stopped'])->where('price', '!=', 0)->where('managed_price', '!=', 0); } @@ -147,7 +96,12 @@ public function cost($price = null, $auto = true): bool if ($price !== null) { $real_price = $price; } else { - $real_price = $this->price; + if ($this->managed_price === null) { + $real_price = $this->price; + } else { + $real_price = $this->managed_price; + + } } if ($real_price == 0) { @@ -239,4 +193,52 @@ public function costBalance($amount = 1): bool return true; } + + protected static function boot() + { + parent::boot(); + + static::created(function ($model) { + broadcast(new UserEvent($model->user_id, 'hosts.created', $model)); + }); + + static::updating(function ($model) { + + if ($model->isDirty('status')) { + if ($model->status == 'suspended') { + $model->suspended_at = now(); + } else { + $model->suspended_at = null; + } + } + + broadcast(new UserEvent($model->user_id, 'hosts.updating', $model)); + }); + + // when Updated + static::updated(function ($model) { + dispatch(new \App\Jobs\Module\Host($model, 'patch')); + + Cache::forget('user_hosts_' . $model->user_id); + Cache::forget('user_tasks_' . $model->user_id); + + + broadcast(new UserEvent($model->user_id, 'hosts.updated', $model)); + }); + + // + // static::deleting(function ($model) { + // broadcast(new UserEvent($model->user_id, 'hosts.deleting', $model)); + // }); + + static::deleting(function ($model) { + Cache::forget('user_tasks_' . $model->user_id); + }); + + static::deleted(function ($model) { + broadcast(new UserEvent($model->user_id, 'hosts.deleted', $model)); + Cache::forget('user_tasks_' . $model->user_id); + Cache::forget('user_hosts_' . $model->user_id); + }); + } } diff --git a/resources/views/admin/hosts/edit.blade.php b/resources/views/admin/hosts/edit.blade.php new file mode 100644 index 0000000..aabc96a --- /dev/null +++ b/resources/views/admin/hosts/edit.blade.php @@ -0,0 +1,33 @@ +@extends('layouts.admin') + +@section('title', '主机:' . $host->name) + +@section('content') + +

{{ $host->name }}

+ + {{-- 修改主机 --}} +
+ @csrf + @method('PUT') + +
+ + +
+ +
+ + + 留空以使用默认价格 +
+ + + +
+ + + + +@endsection diff --git a/resources/views/admin/hosts/index.blade.php b/resources/views/admin/hosts/index.blade.php index 4f2460c..b2db24e 100644 --- a/resources/views/admin/hosts/index.blade.php +++ b/resources/views/admin/hosts/index.blade.php @@ -19,12 +19,12 @@ @foreach ($hosts as $host) - + {{ $host->id }} - {{ $host->module_id }} + {{ $host->module_id }} {{ $host->name }} diff --git a/resources/views/admin/users/edit.blade.php b/resources/views/admin/users/edit.blade.php index 0d500de..1fd790e 100644 --- a/resources/views/admin/users/edit.blade.php +++ b/resources/views/admin/users/edit.blade.php @@ -4,7 +4,7 @@ @section('content')

{{ $user->name }}

- 切换到 {{ $user->name }} + 作为 {{ $user->name }} 登录 @if ($user->banned_at)

已被封禁,原因: {{ $user->banned_reason }}

@@ -44,13 +44,13 @@ {{ $host->name }} - {{ $host->price }} Drops + {{ $host->managed_price ?? $host->price }} Drops ≈ - {{ round($host->price / $drops_rage * (30 * 24 * 60 / 5), 2) }} 元 / 月 + {{ round($host->managed_price ?? $host->price / $drops_rage * (30 * 24 * 60 / 5), 2) }} 元 / 月 - 查看 + 查看 @@ -79,7 +79,7 @@ - 查看 + 编辑 @endforeach @@ -136,12 +136,12 @@
- +
- +
{{-- 封禁 --}} diff --git a/resources/views/admin/users/index.blade.php b/resources/views/admin/users/index.blade.php index fd7a167..07cff8d 100644 --- a/resources/views/admin/users/index.blade.php +++ b/resources/views/admin/users/index.blade.php @@ -11,7 +11,7 @@ ID 用户名 邮箱 - 金额 + 余额 注册时间 操作 diff --git a/resources/views/admin/work-orders/edit.blade.php b/resources/views/admin/work-orders/edit.blade.php new file mode 100644 index 0000000..e3758bd --- /dev/null +++ b/resources/views/admin/work-orders/edit.blade.php @@ -0,0 +1,28 @@ +@extends('layouts.admin') + +@section('title', '工单: ' . $workOrder->title) + +@section('content') + +
+ @csrf + @method('PUT') + +
+ + +
+ +{{--
--}} +{{-- --}} +{{-- {{ $workOrder->title }}--}} +{{-- --}} +{{--
--}} + + + + + +
+ +@endsection diff --git a/resources/views/admin/work-orders/index.blade.php b/resources/views/admin/work-orders/index.blade.php new file mode 100644 index 0000000..0193b21 --- /dev/null +++ b/resources/views/admin/work-orders/index.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.admin') + +@section('title', '工单') + +@section('content') + +
+ + + + + + + + + + + @foreach ($workOrders as $workOrder) + + + + + + + + + @endforeach + +
ID标题模块发起者操作
+ + {{ $workOrder->id }} + + + + {{ $workOrder->title }} + + + {{ $workOrder->module_id }} + + + {{ $workOrder->user->name }} + + 编辑 +
+
+ + {{-- 分页 --}} + {{ $workOrders->links() }} + + + + + +@endsection