1
0

TicketController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Http\Controllers\User;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Ticket;
  5. use Illuminate\Contracts\View\View;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Http\Request;
  8. class TicketController extends Controller
  9. {
  10. public function index(Request $request): View
  11. { // 工单
  12. return view('user.tickets', [
  13. 'tickets' => auth()->user()->tickets()->latest()->paginate(10)->appends($request->except('page')),
  14. ]);
  15. }
  16. public function store(Request $request): JsonResponse
  17. { // 添加工单
  18. $title = $request->input('title');
  19. $content = substr(str_replace(['atob', 'eval'], '', clean($request->input('content'))), 0, 300);
  20. if (empty($title) || empty($content)) {
  21. return response()->json([
  22. 'status' => 'fail', 'message' => trans('validation.required', ['attribute' => ucfirst(trans('validation.attributes.title')).'&'.ucfirst(trans('validation.attributes.content'))]),
  23. ]);
  24. }
  25. if (auth()->user()->tickets()->create(compact('title', 'content'))) {
  26. // 通知相关管理员
  27. return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.submit')])]);
  28. }
  29. return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.create')])]);
  30. }
  31. public function edit(Ticket $ticket): View
  32. { // 回复工单
  33. return view('user.replyTicket', [
  34. 'ticket' => $ticket,
  35. 'replyList' => $ticket->reply()->with('ticket:id,status', 'admin:id,username,qq', 'user:id,username,qq')->oldest()->get(),
  36. ]);
  37. }
  38. public function reply(Request $request, Ticket $ticket): JsonResponse
  39. {
  40. $content = substr(str_replace(['atob', 'eval'], '', clean($request->input('content'))), 0, 300);
  41. if (empty($content)) {
  42. return response()->json([
  43. 'status' => 'fail', 'message' => trans('validation.required', ['attribute' => ucfirst(trans('validation.attributes.title')).'&'.ucfirst(trans('validation.attributes.content'))]),
  44. ]);
  45. }
  46. if ($ticket->reply()->create(['user_id' => auth()->id(), 'content' => $content])) {
  47. return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.ticket.reply')])]);
  48. }
  49. return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.ticket.reply')])]);
  50. }
  51. public function close(Ticket $ticket): JsonResponse
  52. { // 关闭工单
  53. if ($ticket->close()) {
  54. return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.close')])]);
  55. }
  56. return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.close')])]);
  57. }
  58. }