1
0

reply.blade.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. @extends('admin.layouts')
  2. @section('content')
  3. <div class="page-content">
  4. <x-ui.panel type="bordered" title-class="cyan-600" icon="wb-help-circle" :title="$ticket->title">
  5. <x-slot:actions>
  6. <div class="btn-group">
  7. <button class="btn icon-1x btn-info btn-icon wb-user-circle" data-target="#userInfo" data-toggle="modal" type="button">
  8. {{ trans('admin.ticket.user_info') }}</button>
  9. <a class="btn btn-default" href="{{ route('admin.ticket.index') }}">{{ trans('common.back') }}</a>
  10. @if ($ticket->status !== 2)
  11. @can('admin.ticket.destroy')
  12. <button class="btn btn-danger" onclick="closeTicket()"> {{ trans('common.close') }} </button>
  13. @endcan
  14. @endif
  15. </div>
  16. </x-slot:actions>
  17. <div class="chat-box">
  18. <div class="chats">
  19. @php
  20. $currentUser = Auth::user();
  21. @endphp
  22. <x-chat-unit :user="$currentUser" :ticket="$ticket" />
  23. @foreach ($replyList as $reply)
  24. <x-chat-unit :user="$currentUser" :ticket="$reply" />
  25. @endforeach
  26. </div>
  27. </div>
  28. @can('admin.ticket.update')
  29. <x-slot:footer>
  30. <div class="pb-30">
  31. <form>
  32. <div class="input-group">
  33. <input class="form-control" id="editor" type="text" placeholder="{{ trans('user.ticket.reply_placeholder') }}" />
  34. <span class="input-group-btn">
  35. <button class="btn btn-primary" type="button" onclick="replyTicket()"> {{ trans('common.send') }}</button>
  36. </span>
  37. </div>
  38. </form>
  39. </div>
  40. </x-slot:footer>
  41. @endcan
  42. </x-ui.panel>
  43. </div>
  44. <x-ui.modal id="userInfo" position="sidebar" :title="trans('admin.ticket.user_info')">
  45. <x-slot:header>
  46. <h4 class="modal-title">
  47. <i class="wb-user" aria-hidden="true"></i> {{ trans('admin.ticket.user_info') }}
  48. </h4>
  49. </x-slot:header>
  50. <ul class="list-group list-group-dividered list-group-full">
  51. <h5>{{ trans('admin.node.info.basic') }}</h5>
  52. <dl class="dl-horizontal row">
  53. <dt class="col-sm-3">{{ trans('model.user.nickname') }}</dt>
  54. <dd class="col-sm-9">{{ $user->nickname }}</dd>
  55. <dt class="col-sm-3">{{ trans('model.user.username') }}</dt>
  56. <dd class="col-sm-9">{{ $user->username }}</dd>
  57. <dt class="col-sm-3">{{ trans('model.user.account_status') }}</dt>
  58. <dd class="col-sm-9">
  59. @if ($user->status > 0)
  60. <span class="badge badge-lg badge-primary">
  61. <i class="wb-check" aria-hidden="true"></i>
  62. </span>
  63. @elseif ($user->status < 0)
  64. <span class="badge badge-lg badge-danger">
  65. <i class="wb-close" aria-hidden="true"></i>
  66. </span>
  67. @else
  68. <span class="badge badge-lg badge-default">
  69. <i class="wb-minus" aria-hidden="true"></i>
  70. </span>
  71. @endif
  72. </dd>
  73. <dt class="col-sm-3">{{ trans('model.common.level') }}</dt>
  74. <dd class="col-sm-9">{{ $user->level }}</dd>
  75. <dt class="col-sm-3">{{ trans('model.user_group.attribute') }}</dt>
  76. <dd class="col-sm-9">{{ $user->userGroup->name ?? trans('common.none') }}</dd>
  77. <dt class="col-sm-3">{{ trans('model.user.credit') }}</dt>
  78. <dd class="col-sm-9">{{ $user->credit }}</dd>
  79. <dt class="col-sm-3">{{ trans('model.user.traffic_used') }}</dt>
  80. <dd class="col-sm-9">{{ formatBytes($user->used_traffic) }}
  81. / {{ $user->transfer_enable_formatted }}</dd>
  82. <dt class="col-sm-3">{{ trans('model.user.reset_date') }}</dt>
  83. <dd class="col-sm-9">{{ $user->reset_date ?? trans('common.none') }}</dd>
  84. <dt class="col-sm-3">{{ trans('common.latest_at') }}</dt>
  85. <dd class="col-sm-9">
  86. {{ $user->t ? date('Y-m-d H:i', $user->t) : trans('common.status.unused') }}
  87. </dd>
  88. <dt class="col-sm-3">{{ trans('model.user.expired_date') }}</dt>
  89. <dd class="col-sm-9">
  90. @if ($user->expiration_status !== 3)
  91. <span class="badge badge-lg badge-{{ ['danger', 'warning', 'default'][$user->expiration_status] }}">
  92. {{ $user->expiration_date }} </span>
  93. @else
  94. {{ $user->expiration_date }}
  95. @endif
  96. </dd>
  97. <dt class="col-sm-3">{{ trans('model.user.remark') }}</dt>
  98. <dt class="col-sm-3">{!! $user->remark !!}</dt>
  99. </dl>
  100. <h5>{{ trans('admin.user.info.proxy') }}</h5>
  101. <dl class="dl-horizontal row">
  102. <dt class="col-sm-3">{{ trans('common.status.attribute') }}</dt>
  103. <dd class="col-sm-9">
  104. <span class="badge badge-lg badge-{{ $user->enable ? 'info' : 'danger' }}">
  105. <i class="wb-{{ $user->enable ? 'check' : 'close' }}" aria-hidden="true"></i>
  106. </span>
  107. </dd>
  108. <dt class="col-sm-3">{{ trans('model.user.port') }}</dt>
  109. <dd class="col-sm-9">{!! $user->port ?: '<span class="badge badge-lg badge-danger"> ' . trans('common.none') . ' </span>' !!}</dd>
  110. </dl>
  111. <h5>{{ trans('common.more') }}</h5>
  112. <dl class="dl-horizontal row">
  113. <dt class="col-sm-3">{{ trans('admin.ticket.inviter_info') }}</dt>
  114. <dd class="col-sm-9">
  115. {{ $user->inviter->nickname ?? trans('common.none') }}
  116. </dd>
  117. @isset($user->inviter)
  118. <dt class="col-sm-3 offset-md-1">{{ trans('model.user.username') }}</dt>
  119. <dd class="col-sm-8">{{ $user->inviter->username }}</dd>
  120. <dt class="col-sm-3 offset-md-1">{{ trans('model.common.level') }}</dt>
  121. <dd class="col-sm-8">{{ $user->inviter->level }}</dd>
  122. <dt class="col-sm-3 offset-md-1">{{ trans('common.latest_at') }}</dt>
  123. <dd class="col-sm-8">
  124. {{ $user->inviter->t ? date('Y-m-d H:i', $user->inviter->t) : trans('common.status.unused') }}
  125. </dd>
  126. @endisset
  127. </dl>
  128. </ul>
  129. <x-slot:footer>
  130. <button class="btn btn-default" data-dismiss="modal" type="button">{{ trans('common.close') }}</button>
  131. </x-slot:footer>
  132. </x-ui.modal>
  133. @endsection
  134. @section('javascript')
  135. <script>
  136. @can('admin.ticket.destroy')
  137. // 关闭工单
  138. function closeTicket() {
  139. showConfirm({
  140. title: '{{ trans('admin.ticket.close_confirm') }}',
  141. onConfirm: function() {
  142. ajaxDelete('{{ route('admin.ticket.destroy', $ticket->id) }}', {}, {
  143. success: function(ret) {
  144. handleResponse(ret, {
  145. redirectUrl: '{{ route('admin.ticket.index') }}'
  146. });
  147. }
  148. });
  149. }
  150. });
  151. }
  152. @endcan
  153. @can('admin.ticket.update')
  154. //回车检测
  155. $(document).on('keypress', 'input', function(e) {
  156. if (e.which === 13) {
  157. replyTicket();
  158. return false;
  159. }
  160. });
  161. // 回复工单
  162. function replyTicket() {
  163. const content = document.getElementById('editor').value;
  164. if (content.trim() === '') {
  165. showMessage({
  166. title: '{{ ucfirst(trans('validation.required', ['attribute' => trans('validation.attributes.content')])) }}!',
  167. icon: 'warning',
  168. timer: 1500,
  169. });
  170. return false;
  171. }
  172. showConfirm({
  173. title: '{{ trans('user.ticket.reply_confirm') }}',
  174. onConfirm: function() {
  175. ajaxPut('{{ route('admin.ticket.update', $ticket) }}', {
  176. content: content
  177. });
  178. }
  179. });
  180. }
  181. @endcan
  182. </script>
  183. @endsection