Ticket.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Models;
  3. use App\Observers\TicketObserver;
  4. use Auth;
  5. use Illuminate\Database\Eloquent\Attributes\ObservedBy;
  6. use Illuminate\Database\Eloquent\Builder;
  7. use Illuminate\Database\Eloquent\Model;
  8. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  9. use Illuminate\Database\Eloquent\Relations\HasMany;
  10. /**
  11. * 工单.
  12. */
  13. #[ObservedBy([TicketObserver::class])]
  14. class Ticket extends Model
  15. {
  16. protected $table = 'ticket';
  17. protected $guarded = [];
  18. public function scopeUid(Builder $query): Builder
  19. {
  20. return $query->whereUserId(Auth::id());
  21. }
  22. public function user(): BelongsTo
  23. {
  24. return $this->belongsTo(User::class);
  25. }
  26. public function admin(): BelongsTo
  27. {
  28. return $this->belongsTo(User::class);
  29. }
  30. public function reply(): HasMany
  31. {
  32. return $this->hasMany(TicketReply::class);
  33. }
  34. public function close(): bool
  35. {
  36. $this->status = 2;
  37. return $this->save();
  38. }
  39. public function getStatusLabelAttribute(): string
  40. {
  41. return match ($this->status) {
  42. 0 => '<span class="badge badge-lg badge-success">'.trans('common.status.pending').'</span>',
  43. 1 => '<span class="badge badge-lg badge-danger">'.trans('common.status.reply').'</span>',
  44. 2 => '<span class="badge badge-lg badge-default">'.trans('common.status.closed').'</span>',
  45. default => '<span class="badge badge-lg badge-default">'.trans('common.status.unknown').'</span>',
  46. };
  47. }
  48. }