增加 后台回复工单

This commit is contained in:
iVampireSP.com 2022-12-09 16:14:37 +08:00
parent 0d9679aa69
commit d8f05f4d63
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
5 changed files with 37 additions and 7 deletions

View File

@ -6,6 +6,8 @@
use App\Models\Host; use App\Models\Host;
use App\Models\Module; use App\Models\Module;
use App\Models\ModuleAllow; use App\Models\ModuleAllow;
use App\Models\WorkOrder\Reply;
use App\Models\WorkOrder\WorkOrder;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
@ -88,7 +90,7 @@ public function show(Module $module): View
* *
* @param Module $module * @param Module $module
* *
* @return Response * @return View
*/ */
public function edit(Module $module): View public function edit(Module $module): View
{ {
@ -103,7 +105,7 @@ public function edit(Module $module): View
* @param Request $request * @param Request $request
* @param Module $module * @param Module $module
* *
* @return Response * @return RedirectResponse
*/ */
public function update(Request $request, Module $module): RedirectResponse public function update(Request $request, Module $module): RedirectResponse
{ {

View File

@ -99,4 +99,18 @@ public function destroy(WorkOrder $workOrder): RedirectResponse
return redirect()->route('admin.work-orders.index')->with('success', '正在排队删除工单。'); return redirect()->route('admin.work-orders.index')->with('success', '正在排队删除工单。');
} }
public function reply(Request $request, WorkOrder $workOrder): RedirectResponse
{
$request->validate([
'content' => 'required|string',
]);
Reply::create([
'content' => $request->input('content'),
'work_order_id' => $workOrder->id
]);
return back()->with('success', '回复成功,请等待同步。');
}
} }

View File

@ -8,6 +8,7 @@
use GeneaLabs\LaravelModelCaching\Traits\Cachable; use GeneaLabs\LaravelModelCaching\Traits\Cachable;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/** /**
* App\Models\WorkOrder\Reply * App\Models\WorkOrder\Reply
@ -55,7 +56,7 @@
*/ */
class Reply extends Model class Reply extends Model
{ {
use HasFactory, Cachable; use Cachable;
protected $table = 'work_order_replies'; protected $table = 'work_order_replies';
@ -86,7 +87,7 @@ protected static function boot()
$model->workOrder->status = 'user_replied'; $model->workOrder->status = 'user_replied';
} }
if (auth('module')->check()) { if (auth('module')->check() || auth('admin')->check()) {
$model->user_id = null; $model->user_id = null;
$model->workOrder->status = 'replied'; $model->workOrder->status = 'replied';
@ -107,12 +108,12 @@ protected static function boot()
}); });
} }
public function workOrder() public function workOrder(): BelongsTo
{ {
return $this->belongsTo(WorkOrder::class, 'work_order_id', 'id'); return $this->belongsTo(WorkOrder::class, 'work_order_id', 'id');
} }
public function user() public function user(): BelongsTo
{ {
return $this->belongsTo(User::class); return $this->belongsTo(User::class);
} }

View File

@ -10,7 +10,6 @@
<x-work-order-status :status="$workOrder->status"></x-work-order-status> <x-work-order-status :status="$workOrder->status"></x-work-order-status>
<div class="mt-3"> <div class="mt-3">
<!-- replies -->
<h4>对话记录</h4> <h4>对话记录</h4>
@foreach($replies as $reply) @foreach($replies as $reply)
@ -32,6 +31,18 @@
@endforeach @endforeach
</div> </div>
<h4 class="mt-3">您的回复</h4>
<form method="POST" action="{{ route('admin.work-orders.replies.store', $workOrder->id) }}">
@csrf
{{-- label --}}
<div class="form-group">
<label for="content">内容</label>
<textarea class="form-control" id="content" name="content" rows="10" placeholder="代替模块的回复。"></textarea>
</div>
<button type="submit" class="btn btn-primary mt-3 mb-3">提交</button>
</form>
<p>在这里,您无法回复工单,只能够查看。</p> <p>在这里,您无法回复工单,只能够查看。</p>

View File

@ -35,7 +35,9 @@
Route::resource('applications', ApplicationController::class); Route::resource('applications', ApplicationController::class);
Route::resource('hosts', HostController::class)->only(['index', 'edit', 'update', 'destroy']); Route::resource('hosts', HostController::class)->only(['index', 'edit', 'update', 'destroy']);
Route::resource('work-orders', WorkOrderController::class)->only(['index', 'show', 'edit', 'update', 'destroy']); Route::resource('work-orders', WorkOrderController::class)->only(['index', 'show', 'edit', 'update', 'destroy']);
Route::post('work-orders/{work_order}/replies', [WorkOrderController::class, 'reply'])->name('work-orders.replies.store');
Route::resource('user-groups', UserGroupController::class); Route::resource('user-groups', UserGroupController::class);