index.blade.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. @extends("layouts.app")
  2. @section('title','处理工单')
  3. @section("content")
  4. <div class="container-fluid d-none" id="list">
  5. <div id="form_div" style="min-width: 2250px;"></div>
  6. <table class="table table-striped table-md">
  7. <thead>
  8. <tr class="text-center">
  9. <th>序号</th>
  10. <th>工单编号</th>
  11. <th>工单等级</th>
  12. <th>相关类型</th>
  13. <th>状态</th>
  14. <th>创建人</th>
  15. <th>提交时间</th>
  16. <th>问题描述</th>
  17. <th>物流跟踪信息</th>
  18. <th>审核人</th>
  19. <th>审核时间</th>
  20. <th>操作</th>
  21. </tr>
  22. </thead>
  23. <tbody class="text-center">
  24. <template v-for="(item,i) in workOrders">
  25. <tr @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
  26. <td>@{{i+1}}</td>
  27. <td>@{{item.id}}</td>
  28. <td>
  29. <template v-if="item.status === '已处理'">
  30. @{{ item.grad }}
  31. </template>
  32. <template v-else>
  33. <span class="badge badge-light" style="opacity: 0.7" v-if="item.grad === '一般'">@{{ item.grad }}</span>
  34. <span class="badge badge-primary" style="opacity: 0.7" v-if="item.grad === '重要'">@{{ item.grad }}</span>
  35. <span class="badge badge-warning" style="opacity: 0.7" v-if="item.grad === '紧急'">@{{ item.grad }}</span>
  36. <span class="badge badge-danger" style="opacity: 0.7" v-if="item.grad === '重要且紧急'">@{{ item.grad }}</span>
  37. </template>
  38. </td>
  39. <td>@{{item.type ? item.type.name : '' }} - @{{ item.child_type ? item.child_type.name : '' }}</td>
  40. <td>
  41. @{{ item.status }}
  42. </td>
  43. <td>@{{ item.creator.name }}</td>
  44. <td>@{{ item.created_at }}</td>
  45. <td>@{{ item.remark }}</td>
  46. <td>
  47. <template v-if="item.review_at">
  48. <div v-if="item.order && item.order.packages">
  49. <template v-for="package in item.order.packages">
  50. <template v-if="package.transfer_status && package.transfer_status.length > 0">
  51. <div v-if="selectOrderPackage === package.id">
  52. <template v-for="transfer in package.transfer_status">
  53. <p>@{{ transfer['accept_time']+':'+transfer['accept_address'] }}</p>
  54. </template>
  55. </div>
  56. <div v-else>
  57. @{{ package.transfer_status[0]['accept_time']+':'+package.transfer_status[0]['accept_address'] }}
  58. </div>
  59. <button class="btn btn-sm btn-outline-primary" v-if="selectOrderPackage !== package.id" @click="selectOrderPackage = package.id">展开</button>
  60. <button class="btn btn-sm btn-outline-primary" v-else @click="selectOrderPackage = null">收起</button>
  61. </template>
  62. </template>
  63. </div>
  64. </template>
  65. </td>
  66. <td>@{{ item.reviewer ? item.reviewer.name : ''}}</td>
  67. <td>@{{ item.review_at }}</td>
  68. <td>
  69. @can('订单管理-工单处理-审核')
  70. <button class="btn btn-sm btn-outline-primary" v-if="item.status !== '已处理'"
  71. @click="reviewWorkOrder(item,i)">审核
  72. </button>
  73. @endcan()
  74. </td>
  75. </tr>
  76. </template>
  77. </tbody>
  78. {{ $workOrders->withQueryString()->links() }}
  79. </table>
  80. </div>
  81. @endsection()
  82. @section("lastScript")
  83. <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
  84. <script>
  85. let list = new Vue({
  86. el: "#list",
  87. data: {
  88. workOrders: {!! $workOrders->toJson() !!}['data'],
  89. selectTr: null,
  90. form:null,
  91. selectOrderPackage:null,
  92. },
  93. mounted() {
  94. let data = [[
  95. {name: 'created_at_start', type: 'time', tip:['工单创建开始日期','时间']},
  96. {name: 'created_at_end', type: 'time', tip:['工单创建结束日期','时间']},
  97. {name: 'review_at_start', type: 'time', tip:['工单审核开始日期','时间']},
  98. {name: 'review_at_end', type: 'time', tip:['工单审核结束日期','时间']},
  99. ]];
  100. this.form = new query({
  101. el: '#form_div',
  102. condition: data,
  103. appendDom: "btn",
  104. paginations: [50, 100, 200, 500, 1000, 20],
  105. })
  106. this.form.init();
  107. $("#list").removeClass("d-none");
  108. },
  109. created() {
  110. let self = this;
  111. $.each(this.workOrders, function (index, workOrder) {
  112. if (!workOrder.order) return ;
  113. if (!workOrder.order.packages) return ;
  114. self.sortOrder(workOrder);
  115. });
  116. },
  117. methods: {
  118. sortOrder(workOrder){
  119. let self = this;
  120. if (!workOrder.order) return ;
  121. if (!workOrder.order.packages) return ;
  122. $.each(workOrder.order.packages,function(i,item){
  123. self.sortTransfer(item);
  124. })
  125. },
  126. sortTransfer(item){
  127. if (!("transfer_status" in item))return ;
  128. if (item.transfer_status == null || !(item.transfer_status instanceof Array)) return ;
  129. item.transfer_status.sort(function (item1, item2) {
  130. let date1 = new Date(item1['accept_time']);
  131. let date2 = new Date(item2['accept_time']);
  132. if (date1 - date2 > 0) return -1;
  133. if (date1 - date2 < 0) return 1;
  134. return 0;
  135. });
  136. },
  137. // todo 审核工单
  138. reviewWorkOrder(item, i) {
  139. let url = '{{url('apiLocal/workOrder/review')}}';
  140. let data = {id: item.id};
  141. window.axios.post(url, data).then(res => {
  142. if (res.data.success) {
  143. this.$set(this.workOrders, i, res.data.data);
  144. this.sortOrder(res.data.data);
  145. window.tempTip.showSuccess("审核完成");
  146. } else {
  147. window.tempTip.show(res.data.message ? res.data.message : '审核异常');
  148. }
  149. }).catch(err => {
  150. window.tempTip.show(err)
  151. })
  152. },
  153. },
  154. });
  155. </script>
  156. @endsection