index.blade.php 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855
  1. @extends('layouts.app')
  2. @section('title')问题件-查询@endsection
  3. @section('content')
  4. @component("order.issue.menu")@endcomponent
  5. <div class="container-fluid" id="issue_div">
  6. <div style="min-width: 2000px;">
  7. <div id="list" class="d-none" style="min-width: 5500px">
  8. <div id="form_div" style="min-width: 2250px;" class=""></div>
  9. <div class="form-inline mt-1">
  10. <span class="dropdown">
  11. <button type="button" class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark text-light':'']"
  12. data-toggle="dropdown" title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">导出Excel
  13. </button>
  14. <div class="dropdown-menu">
  15. <a class="dropdown-item" @click="orderIssueExport(false)" href="javascript:">导出勾选内容</a>
  16. <a class="dropdown-item" @click="orderIssueExport(true)" href="javascript:">导出所有页</a>
  17. </div>
  18. </span>
  19. <span class="ml-1">
  20. <button type="button" class="btn btn-outline-dark btn-sm form-control-sm tooltipTarget" @click="endOrderIssue()" :class="[checkData.length>0?'btn-dark text-light':'']">完结</button>
  21. </span>
  22. <span class="ml-1">
  23. <button type="button" class="btn btn-outline-dark btn-sm form-control-sm tooltipTarget" @click="copyOrderNo()" >复制快递单号</button>
  24. </span>
  25. </div>
  26. <table class="table table-sm table-bordered table-hover card-body "
  27. style="background: #fff;">
  28. <tr class="tr-yellow">
  29. <th class=" font-weight-bolder " colspan="6"></th>
  30. <th class="td-yellow text-center font-weight-bolder original-class table-head-warning " colspan="16" >原始运单号</th>
  31. {{-- <th class=" text-center font-weight-bolder" colspan="3">原始商品明细</th><th class=" text-center font-weight-bolder" colspan="5">返回商品明细</th>--}}
  32. <th class=" text-center font-weight-bolder" @cannot('客户不可见')colspan="23"@else colspan="24" @endcannot>情况说明</th>
  33. <th></th>
  34. </tr>
  35. <tr class="tr-yellow">
  36. <th rowspan="2" class="align-middle">
  37. <label for="all">
  38. <input id="all" type="checkbox" @click="checkAll($event)"/>
  39. </label>
  40. </th>
  41. <th class="text-center align-middle" rowspan="2">序号</th>
  42. <th class="text-center align-middle" rowspan="2">ID</th>
  43. <th class="text-center align-middle" rowspan="2">退件</th>
  44. @can("订单管理-问题件-置顶")
  45. <th class="text-center align-middle" style="width: 60px" rowspan="2">置顶</th>
  46. @endcan
  47. <th class="text-center align-middle" rowspan="2">处理状态</th>
  48. <th class="text-center align-middle td-yellow" rowspan="2">登记日期</th>
  49. <th class="text-center align-middle td-yellow" rowspan="2">订单日期</th>
  50. <th class="text-center align-middle td-yellow" rowspan="2">客户</th>
  51. <th class="text-center align-middle td-yellow" rowspan="2">店铺</th>
  52. <th class="text-center align-middle td-yellow" rowspan="2">原始订单号</th>
  53. <th class="text-center align-middle td-yellow" rowspan="2">原始承运商</th>
  54. <th class="text-center align-middle td-yellow" rowspan="2">原始运单号</th>
  55. <th class="text-center align-middle td-yellow" rowspan="2" style="min-width: 90px">收货人名称</th>
  56. <th class="text-center align-middle td-yellow" rowspan="2">收货人电话</th>
  57. <th class="text-center align-middle td-yellow" rowspan="2" style="min-width: 70px">省</th>
  58. <th class="text-center align-middle td-yellow" rowspan="2" style="min-width: 70px">市</th>
  59. <th class="text-center align-middle td-yellow" rowspan="2" style="min-width: 70px">区</th>
  60. <th class="text-center align-middle td-yellow" rowspan="2">收货人地址</th>
  61. <th class="text-center align-middle text-center td-yellow" colspan="3">原始商品明细</th>
  62. {{-- <th class="">条码</th><th class="">商品名</th><th class="">数量</th>--}}
  63. <th class=" text-center align-middle" colspan="5">返回商品明细</th>
  64. {{-- <th class="">条码</th><th class="">商品名</th><th class="">数量</th><th class="">是否正品</th><th class="">备注</th>--}}
  65. <th class=" text-center align-middle" rowspan="2">退单状态</th>
  66. <th class="bg-whit text-center align-middle" colspan="3">情况说明</th>
  67. <th class=" text-center align-middle" rowspan="2">问题类别</th>
  68. <th class=" text-center align-middle" rowspan="2">处理结果说明</th>
  69. <th class=" text-center align-middle" rowspan="2">二次订单号</th>
  70. <th class=" text-center align-middle" rowspan="2">二次承运商</th>
  71. <th class=" text-center align-middle" rowspan="2">二次运单号</th>
  72. <th class=" text-center" colspan="3" style="min-width: 300px">二次商品明细</th>
  73. <th class=" text-center align-middle" rowspan="2">最终转态</th>
  74. @cannot('客户不可见')
  75. <th class=" text-center align-middle" rowspan="2">承运商赔偿金额</th>
  76. @endcannot
  77. <th class=" text-center align-middle" rowspan="2">承运商快递减免</th>
  78. <th class=" text-center align-middle" rowspan="2">宝时赔偿金额</th>
  79. <th class=" text-center align-middle" rowspan="2">宝时快递减免</th>
  80. <th class=" text-center align-middle" rowspan="2">事故责任方</th>
  81. <th class="text-center align-middle" rowspan="2">操作</th>
  82. </tr>
  83. <tr class="tr-yellow">
  84. <th class="td-yellow">条码</th><th class="td-yellow">商品名</th><th class="td-yellow">数量</th>
  85. <th class="text-center" style="min-width: 75px">条码</th><th class="text-center" style="min-width: 100px">商品名</th><th class="text-center" style="min-width: 50px">数量</th><th class="text-center" style="min-width: 50px">是否正品</th><th class="text-center" style="min-width: 100px">备注</th>
  86. <th class="text-center">操作类型</th><th class="text-center">说明</th><th class="text-center">操作者</th>
  87. <th class="text-center">条码</th><th class="text-center">商品名</th><th class="text-center">数量</th>
  88. </tr>
  89. <tr class="tr-yellow"
  90. v-for="(orderIssue,index) in orderIssues"
  91. @click="selectedColor(orderIssue.id)"
  92. v-if="orderIssues"
  93. :class="orderIssue.remark ? 'tr_top':''"
  94. @click="selectedColor(waybill.id)"
  95. v-on:mouseover="hidetop($event)" v-on:mouseleave="showtop($event)"
  96. :style="[{'font-weight': orderIssue.id==selectedStyle?'bold':''}]">
  97. <td >
  98. <div class="m-0 p-0 " :style="[{'min-height':orderIssue.remark ?'72px':'45px'}]"><input class="checkItem" type="checkbox" :value="orderIssue.id" v-model="checkData"></div>
  99. </td>
  100. <td class="text-center">@{{index+1}}</td>
  101. <td class="text-center ">@{{ orderIssue.id }}</td>
  102. <td class=" text-center">
  103. @can('订单管理-问题件-编辑')
  104. <button type="button" class="btn btn-sm btn-outline-secondary" @click="disposeOrderIssue($event)" :data-value="orderIssue.id" v-if="orderIssue.is_new_rejecting == '有'">有</button>
  105. <span v-else>@{{ orderIssue.is_new_rejecting }}</span>
  106. @else
  107. <span v-if="orderIssue.is_new_rejecting">@{{ orderIssue.is_new_rejecting }}</span>
  108. @endcan
  109. </td>
  110. @can("订单管理-问题件-置顶")
  111. <td class=" text-muted text-center" >
  112. <button type="button" class="btn btn-sm btn-outline-danger "
  113. @click="cancelOnTop($event)" :data-value="orderIssue.top.id" style="opacity: 0.75" v-if="orderIssue.top">取消
  114. </button>
  115. <button type="button" class="btn btn-sm btn-outline-secondary"
  116. @click="OrderIssueOnTop($event)" :data-value="orderIssue.id" style="opacity: 0.75" v-else>置顶
  117. </button>
  118. </td>
  119. @endcan
  120. </td>
  121. <td class=" text-center">@{{ orderIssue.handle_status }}</td>
  122. <td class="toptd td-yellow text-center" >
  123. <div v-if="orderIssue.remark" class="bg-light-yellow text-danger top text-left" data-toggle="tooltip" style="opacity: 0.1;position: absolute;z-index: 1">置顶备注:@{{ orderIssue.remark }}</div>
  124. @{{ orderIssue.created_at }}</td>
  125. <td class="td-yellow text-center" >
  126. @{{ orderIssue.order.created_at }}</td>
  127. <td class="td-yellow text-center">
  128. <span v-if='orderIssue.order.owner'>@{{ orderIssue.order.owner.name }}</span>
  129. </td>
  130. <td class="td-yellow text-center"><template v-if="orderIssue.order.shop">@{{ orderIssue.order.shop.name }}</template> </td>
  131. <td class="td-yellow text-center">@{{ orderIssue.order.code }} </td>
  132. <td class="td-yellow text-center">
  133. <span v-if='orderIssue.order.logistic'>@{{ orderIssue.order.logistic.name }}</span>
  134. </td>
  135. <td class=" hide-content p-0 td-yellow text-center" :id="orderIssue.id+'logisticNumbers'" valign="middle" align="center">
  136. <div class="collapse hide" :id="'logisticNumbers'+orderIssue.id">
  137. <p v-for="logisticNumber in orderIssue.order.logisticNumbers" class="m-0 p-0 text-center text-muted ">@{{ logisticNumber }}</p>
  138. </div>
  139. <button v-if="orderIssue.order.logisticNumbers.length > 1" type="button"
  140. class="btn btn-sm btn-outline-primary text-center align-middle mt-1"
  141. :id="'logisticNumbersBtn'+orderIssue.id"
  142. data-toggle="collapse"
  143. :data-target="'#logisticNumbers'+orderIssue.id"
  144. aria-expanded="false"
  145. :aria-controls="'logisticNumbers'+orderIssue.id"
  146. @click="toggleLogisticNumbers(orderIssue.id,orderIssue.order.logisticNumbers.length)">
  147. 分箱@{{ orderIssue.order.logisticNumbers.length }}件,点击展开
  148. </button>
  149. </td>
  150. <td class="td-yellow text-center">@{{ orderIssue.order.consignee_name }}</td>
  151. <td class="td-yellow text-center">@{{ orderIssue.order.consignee_phone }}</td>
  152. <td class="td-yellow text-center">@{{ orderIssue.order.province }}</td>
  153. <td class="td-yellow text-center">@{{ orderIssue.order.city }}</td>
  154. <td class="td-yellow text-center">@{{ orderIssue.order.district }}</td>
  155. <td class="td-yellow" style="width: 400px"><span class="text-wrap m-0 p-0 text-center" style="width: 400px">@{{ orderIssue.order.address }}</span></td>
  156. <td class="td-yellow p-0" :id="orderIssue.id+'items'" valign="middle" align="center" colspan="3">
  157. <div v-if="orderIssue.order">
  158. <table v-if="orderIssue.order.packages" class="table table-sm m-0" :class="orderIssue.order.packages.length > 1?'collapse':''" :id="'order'+orderIssue.id" >
  159. <template v-for="packages in orderIssue.order.packages" >
  160. <tr v-for="item in packages.commodities">
  161. <td class="text-center">@{{ item.commodity.sku }}</td>
  162. <td class="text-center">@{{ item.commodity.name }}</td>
  163. <td class="text-center">@{{ item.amount }}</td>
  164. </tr>
  165. </template>
  166. </table>
  167. <button v-if="orderIssue.order.packages.length > 1" type="button"
  168. class="btn btn-sm btn-outline-primary text-center align-middle mt-1"
  169. :id="'orderBtn'+orderIssue.id"
  170. data-toggle="collapse"
  171. :data-target="'#order'+orderIssue.id"
  172. aria-expanded="false"
  173. :aria-controls="'order'+orderIssue.id"
  174. @click="toggleOrder(orderIssue.id,orderIssue.order.amount)" >商品@{{ orderIssue.order.amount }}件,点击展开
  175. </button>
  176. </div>
  177. </td>
  178. <td class="p-0" :id="orderIssue.id+'rejectedBill'" valign="middle" align="center" colspan="5">
  179. <div v-if="orderIssue.rejected_bill" class="m-0 p-0">
  180. <table v-if="orderIssue.rejected_bill.items" class="table table-sm m-0" :class="orderIssue.rejected_bill.items.length > 1?'collapse':''" :id="'rejectedBill'+orderIssue.id">
  181. <tr v-for="item in orderIssue.rejected_bill.items" :data-value="orderIssue.rejected_bill.sum += item.amount">
  182. <td style="min-width: 75px" class="text-center">@{{ item.barcode_goods }}</td>
  183. <td style="min-width: 100px" class="text-center">@{{ item.name_goods }}</td>
  184. <td style="min-width: 50px" class="text-center">@{{ item.amount }}</td>
  185. <td style="min-width: 50px" class="text-center">@{{ item.validity_at }}</td>
  186. <td style="min-width: 100px" class="text-center">@{{ item.remark }}</td>
  187. </tr>
  188. </table>
  189. <button v-if="orderIssue.rejected_bill.items > 1" type="button"
  190. class="btn btn-sm btn-outline-primary text-center align-middle mt-1"
  191. :id="'rejectedBillBtn'+orderIssue.id"
  192. data-toggle="collapse"
  193. :data-target="'#rejectedBill'+orderIssue.id"
  194. aria-expanded="false"
  195. :aria-controls="'rejectedBill'+orderIssue.id"
  196. @click="toggleRejectedBill(orderIssue.id,orderIssue.logs.length)">
  197. 商品@{{ orderIssue.logs.length }}件,点击展开</button>
  198. </div>
  199. </td>
  200. <td class=" text-center">@{{ orderIssue.rejecting_status }}</td>
  201. <td class=" m-0 p-0 log-td text-center" valign="middle" align="center" v-on:mouseover="showAddBtn($event)" v-on:mouseleave="hideAddBtn($event)" colspan="3">
  202. <div class="addLogDiv row m-0 p-0" :id="'AddLog_'+orderIssue.id" style="display: none">
  203. <input type="hidden" name="id" :value="orderIssue.id" >
  204. <div class="form-group m-2">
  205. <input type="text" name="content" class="form-control" required>
  206. </div>
  207. <button type="btn" class="btn btn-primary m-2 " @click="addOrderIssueLog('AddLog_'+orderIssue.id)">添加</button>
  208. </div>
  209. <div style="position: absolute;display: none;margin-top: -40px" class="add-btn">
  210. <button type="button" class="btn btn-outline-primary " @click="showAddDiv('AddLog_'+orderIssue.id)">新</button>
  211. </div>
  212. <template v-if="orderIssue.logs" class="p-0 m-0 ">
  213. <table class="table table-sm p-0 m-0 " :id="'logs'+orderIssue.id" :class="orderIssue.logs.length > 1?'collapse':''">
  214. <tr v-for="log in orderIssue.logs" v-on:mouseover="showDelBtn($event)" v-on:mouseleave="hideDelBtn($event)" class="del-tr" style="position:static">
  215. <td>@{{ log.type }}</td>
  216. <td><p class="text-wrap mb-0" style="max-width: 200px">@{{ log.content }}</p> </td>
  217. <td>@{{ log.user.name }}</td>
  218. <td style="position: relative;display: none;border: 0;" class="m-0 p-0 del-btn border-0" >
  219. <button type="button" class="btn btn-sm btn-outline-danger m-0 " @click="deleteOrderIssueLog(log.id,orderIssue.id)" style="position: absolute;left: -30px">删</button>
  220. </td>
  221. </tr>
  222. </table>
  223. <button v-if="orderIssue.logs.length > 1" type="button"
  224. class="btn btn-sm btn-outline-primary text-center align-middle mt-1"
  225. :id="'logsBtn'+orderIssue.id"
  226. data-toggle="collapse"
  227. :data-target="'#logs'+orderIssue.id"
  228. aria-expanded="false"
  229. :aria-controls="'logs'+orderIssue.id"
  230. @click="toggleLogs(orderIssue.id,orderIssue.logs.length)">
  231. 记录共@{{ orderIssue.logs.length }}条,点击展开
  232. </button>
  233. </template>
  234. </template>
  235. </td>
  236. <td class=" text-center">
  237. <span v-if="orderIssue.issue_type">@{{ orderIssue.issue_type.name}}</span>
  238. </td>
  239. <td class=" text-center p-0 m-0">
  240. @{{ orderIssue.result_explain}}
  241. </td>
  242. <td class=" text-center"><span v-if="orderIssue.second_order" class="p-0"> @{{ orderIssue.second_order.code }}</span></td>
  243. <td class=" text-center"><span v-if="orderIssue.second_order" class="p-0"> @{{ orderIssue.second_order.logistic.name }}</span></td>
  244. <td class=" p-0" valign="middle" align="center">
  245. <template v-if="orderIssue.second_order">
  246. <div class="collapse hide m-0" :id="'secondOrderNumbers'+orderIssue.id">
  247. <p v-for="logisticNumber in orderIssue.second_order.logisticNumbers" class="m-0 p-0 text-center text-muted ">@{{ logisticNumber }}</p>
  248. </div>
  249. <button v-if="orderIssue.second_order.logisticNumbers.length > 1" type="button"
  250. class="btn btn-sm btn-outline-primary text-center align-middle mt-1"
  251. :id="'secondOrderNumbersBtn'+orderIssue.id"
  252. data-toggle="collapse"
  253. :data-target="'#secondOrderNumbers'+orderIssue.id"
  254. aria-expanded="false"
  255. :aria-controls="'secondOrderNumbers'+orderIssue.id"
  256. @click="toggleseCondOrderNumbers(orderIssue.id,orderIssue.second_order.logisticNumbers.length)">
  257. 分箱@{{ orderIssue.second_order.logisticNumbers.length }}件,点击展开
  258. </button>
  259. </template>
  260. {{-- <p v-if="orderIssue.second_order">@{{ orderIssue.second_order.logisticNumbers}}</p>--}}
  261. </td>
  262. <td class=" p-0" colspan="3" valign="middle" align="center">
  263. <template v-if="orderIssue.second_order" class="text-center p-0">
  264. <table class="table table-sm m-0 "
  265. v-if="orderIssue.second_order"
  266. :class="orderIssue.second_order.amount>1?'collapse':''"
  267. :id="'secondOrder'+orderIssue.id">
  268. <template v-for="packages in orderIssue.second_order.packages">
  269. <tr v-for="item in packages.commodities">
  270. <td class="text-center">@{{ item.commodity.sku }}</td>
  271. <td class="text-center">@{{ item.commodity.name }}</td>
  272. <td class="text-center">@{{ item.amount }}</td>
  273. </tr>
  274. </template>
  275. </table>
  276. <button class="btn btn-sm btn-outline-primary text-center align-middle mt-1"
  277. v-if="orderIssue.second_order.amount > 1" type="button"
  278. :id="'secondOrderBtn'+orderIssue.id"
  279. data-toggle="collapse"
  280. :data-target="'#secondOrder'+orderIssue.id"
  281. aria-expanded="false"
  282. :aria-controls="'secondOrder'+orderIssue.id"
  283. @click="toggleSecond(orderIssue.id,orderIssue.second_order.amount)">商品共@{{ orderIssue.second_order.amount }}件,点击展开
  284. </button>
  285. </template>
  286. </td>
  287. <td class=" text-center">@{{ orderIssue.final_status }}</td>
  288. <td class=" text-center">@{{ orderIssue.logistic_indemnity_money }}</td>
  289. <td class=" text-center">@{{ orderIssue.logistic_express_remission }}</td>
  290. @cannot('客户不可见')
  291. <td class=" text-center">@{{ orderIssue.baoshi_indemnity_money }}</td>
  292. @endcannot
  293. <td class=" text-center">@{{ orderIssue.baoshi_express_remission }}</td>
  294. <td class=" text-center"><span v-if="orderIssue.user_work_group">@{{ orderIssue.user_work_group.name }}</span></td>
  295. <td>
  296. <button type="button" class="btn btn-sm btn-outline-primary" @click="editOrderIssue($event)" :data-value="orderIssue.id">改</button>
  297. <button type="button" class="btn btn-sm btn-outline-danger" @click="deleteOrderIssue($event)" :data-value="orderIssue.id">删</button>
  298. </td>
  299. </tr>
  300. </table>
  301. <a :href="page.prevPageUrl" class="btn btn-sm" :class="page.curPage === 1 ?'':'btn-outline-primary'" :disabled="page.curPage === 1">上一页</a>
  302. <a :href="page.nextPageUrl" class="btn btn-sm" :class="page.curPage === page.lastPage ?'':'btn-outline-primary'" :disabled="page.curPage === page.lastPage" >下一页</a>
  303. <input @keyup.enter="pageTurning($event)" class="form-control-sm ml-3 tooltipTarget" :placeholder="'当前页数:'+page.curPage+'/'+page.lastPage" title="去往指定页">
  304. <span class="text-muted m-1">共 @{{page.total}} 条 </span>
  305. </div>
  306. </div>
  307. {{--deleteOrderIssue--}}
  308. <div class="modal fade" id="alertModal" tabindex="-1" role="dialog" aria-labelledby="alertModalLabel" aria-hidden="true">
  309. <div class="modal-dialog modal-dialog-centered">
  310. <div class="modal-content">
  311. <div class="modal-header">
  312. <h5 class="modal-title" id="exampleModalLabel">提示</h5>
  313. <button type="button" class="close" data-dismiss="modal" aria-label="Close" @click="changeDeleteId">
  314. <span aria-hidden="true">&times;</span>
  315. </button>
  316. </div>
  317. <div class="modal-body">
  318. <p>是否删除当前订单问题件?</p>
  319. <input type="hidden" id = "deleteId" class="form-control" />
  320. </div>
  321. <div class="modal-footer">
  322. <button type="button" class="btn btn-secondary" data-dismiss="modal" @click="changeDeleteId">取消</button>
  323. <button type="button" class="btn btn-primary" data-dismiss="modal" @click="deleteOrderIssueById">确认</button>
  324. </div>
  325. </div>
  326. </div>
  327. </div>
  328. {{--OrderIssue On Top--}}
  329. <div class="modal fade " id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  330. <div class="modal-dialog modal-dialog-centered">
  331. <div class="modal-content">
  332. <div class="modal-header">
  333. <h5 class="modal-title" id="exampleModalLabel">请输入置顶备注</h5>
  334. <button type="button" class="close" data-dismiss="modal" aria-label="Close" @click="changeRemark">
  335. <span aria-hidden="true">&times;</span>
  336. </button>
  337. </div>
  338. <div class="modal-body">
  339. <input type="hidden" class="form-control" id="onTopId">
  340. <textarea type="text" class="form-control" required id="remark" @change="changeRemark" ></textarea>
  341. <div class="invalid-feedback">
  342. 备注信息不能为空
  343. </div>
  344. </div>
  345. <div class="modal-footer">
  346. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal" @click="changeRemark" >关闭</button>
  347. <button type="button" class="btn btn-sm btn-primary" @click="submitOnTop">提交</button>
  348. </div>
  349. </div>
  350. </div>
  351. </div>
  352. </div>
  353. @endsection
  354. @section('lastScript')
  355. <style type="text/css">
  356. @keyframes anima
  357. {
  358. from {
  359. opacity:0.1;
  360. }
  361. to{
  362. opacity:1;
  363. }
  364. }
  365. @-webkit-keyframes anima
  366. {
  367. from {
  368. opacity:0.75;
  369. }
  370. to{
  371. opacity:0.1;
  372. }
  373. }
  374. .tr_top{
  375. min-height: 75px;
  376. }
  377. .bg-light-yellow{
  378. background: #fffff8;
  379. }
  380. .top{
  381. padding-top: 0px;
  382. padding-left: 10px;
  383. margin-top: -4px;
  384. margin-left: -5px;
  385. line-height: 75px;
  386. position: absolute;
  387. animation: anima;
  388. animation-duration: 3s;
  389. animation-timing-function: cubic-bezier(0,0,1,1);
  390. animation-direction: alternate;
  391. animation-play-state: running;
  392. -webkit-animation-name: anima;
  393. -webkit-animation-duration: 3s;
  394. -webkit-animation-timing-function: cubic-bezier(0,0,1,1);
  395. -webkit-animation-iteration-count: infinite;
  396. -webkit-animation-direction: alternate;
  397. -webkit-animation-play-state: running;
  398. }
  399. </style>
  400. <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818a.js')}}"></script>
  401. <script type="text/javascript" src="{{asset('js/queryForm/export200818a.js')}}"></script>
  402. <script>
  403. let listVue = new Vue({
  404. el: '#issue_div ',
  405. data: {
  406. orderIssues: {!! $orderIssues->toJson() !!}['data'],
  407. owners: [
  408. @foreach($owners as $owner)
  409. {name: '{{ $owner->id }}', value: '{{ $owner->name}}'},
  410. @endforeach
  411. ],
  412. checkData: [],
  413. from: '',
  414. finalStatus: [{name: '0', value: '已解决'}, {name: '1', value: '待退回'}, {name: '2', value: '退回中'}],
  415. selectedStyle: '',
  416. deleteId:'',
  417. page:{
  418. lastPage:{!! $orderIssues->toJson() !!}['last_page'],
  419. curPage:{!! $orderIssues->toJson() !!}['current_page'],
  420. total:{!! $orderIssues->toJson() !!}['total'],
  421. nextPageUrl:{!! $orderIssues->toJson() !!}['next_page_url'],
  422. prevPageUrl:{!! $orderIssues->toJson() !!}['prev_page_url'],
  423. lastPageUrl:{!! $orderIssues->toJson() !!}['last_page_url'],
  424. },
  425. },
  426. mounted: function () {
  427. console.log(this.orderIssues);
  428. $('.tooltipTarget').tooltip({'trigger': 'hover'});
  429. $('#list').removeClass("d-none");
  430. let _this = this;
  431. let final_status = [{name:'0',value:'已解决'},{name:'1',value:'待退回'},{name:'2',value:'退回中'}];
  432. let data = [[
  433. {name: 'created_at_start', type: 'dateTime', tip: '订单开始日期'},
  434. {name: 'owner_id',type: 'select_multiple_select',tip: ['输入关键词快速定位下拉列表,回车确定','选择要显示的客户'], placeholder:['货主','定位或多选货主'],data: _this.owners},
  435. {name: 'final_status', type: 'select', tip: '问题件的最终状态', placeholder: '最终状态', data: final_status},
  436. {name: 'handle_status', type: 'checkbox', tip: '是否已完结', data: [{name: '2', value: '已完结'}]},
  437. ], [
  438. {name: 'created_at_end', type: 'dateTime', tip: '订单结束日期'},
  439. {name: 'logistic_indemnity_money', type: 'input', tip: '承运商赔偿金额', placeholder: '承运商赔偿金额'},
  440. @cannot('客户不可见')
  441. {name: 'baoshi_express_remission', type: 'input', tip: '宝时赔偿金额', placeholder: '宝时赔偿金额'},
  442. @endcannot
  443. ]];
  444. this.form = new query({
  445. el: '#form_div',
  446. condition: data,
  447. })
  448. this.form.init();
  449. let order = $('.table-head-warning')[0];
  450. $('.top').css('min-width', $(order).outerWidth(true));
  451. },
  452. watch:{
  453. checkData:{
  454. handler(){
  455. if (this.checkData.length === this.orderIssues.length){
  456. document.querySelector('#all').checked = true;
  457. }else {
  458. document.querySelector('#all').checked = false;
  459. }
  460. },
  461. deep:true
  462. },
  463. },
  464. methods: {
  465. selectedColor(orderno) {
  466. if (orderno === this.selectedStyle) {
  467. this.selectedStyle = '';
  468. return;
  469. }
  470. this.selectedStyle = orderno;
  471. },
  472. editOrderIssue($event){
  473. let id = $($event.target).attr('data-value');
  474. window.location.href = "{{url('order/issue/edit')}}"+'/'+id;
  475. },
  476. deleteOrderIssue($event){
  477. let id = $($event.target).attr('data-value');
  478. $('#deleteId').val(id);
  479. $('#alertModal').modal('show');
  480. },
  481. deleteOrderIssueById(){
  482. let _this = this;
  483. tempTip.setDuration(99999)
  484. tempTip.waitingTip('删除中,请稍候')
  485. let id = $('#deleteId').val();
  486. let data = {id:id};
  487. axios.post('{{url('apiLocal/order/issue/destroy')}}',data).then(function(res){
  488. tempTip.setDuration(5000)
  489. tempTip.cancelWaitingTip();
  490. if(res.data.success){
  491. for(let i = 0;i< _this.orderIssues.length;i++){
  492. let data = _this.orderIssues[i];
  493. if(data.id == id){
  494. _this.orderIssues.splice(i,1);
  495. _this.deleteId = 0;
  496. break;
  497. }
  498. }
  499. tempTip.setDuration(2000);
  500. tempTip.showSuccess('问题件删除成功');
  501. }else{
  502. tempTip.setDuration(2500);
  503. tempTip.show('标记勾选内容删除失败,错误:' + res.data.fail_info);
  504. }
  505. }).catch(function(err){
  506. tempTip.setDuration(4000);
  507. tempTip.cancelWaitingTip();
  508. tempTip.show('网络错误:' + err);
  509. });
  510. },
  511. changeDeleteId(){
  512. $('#deleteId').val('');
  513. },
  514. cancelOnTop(event){
  515. let id =$(event.target).attr('data-value')
  516. let data = {id:id};
  517. if(data === '' || data === null){
  518. return ;
  519. }
  520. axios.post('{{url('apiLocal/order/issue/onTop/cancelTop')}}',data).then(function(res){
  521. if(res.data.success){
  522. tempTip.setDuration(2000);
  523. tempTip.showSuccess('订单问题件取消置顶成功!');
  524. window.location.reload();
  525. }else{
  526. tempTip.setDuration(2500);
  527. tempTip.show(res.data.fail_info);
  528. }
  529. }).catch(function(err){
  530. tempTip.setDuration(4000);
  531. tempTip.show('网络错误:' + err);
  532. });
  533. },
  534. changeRemark(){
  535. $('#remark').removeClass('is-invalid');
  536. },
  537. OrderIssueOnTop(event){
  538. let id = $(event.target).attr('data-value');
  539. $("#onTopId").val(id);
  540. $("#exampleModal").modal('show');
  541. },
  542. submitOnTop(){
  543. let _this = this;
  544. let remark = $("#remark").val();
  545. let id = $("#onTopId").val();
  546. if(remark === '' || remark == null) {
  547. $("#remark").focus();
  548. $('#remark').addClass('is-invalid');
  549. }else{
  550. let data = {id:id,remark:remark};
  551. axios.post('{{url('apiLocal/order/issue/onTop/store')}}',data).then(function(res){
  552. $("#exampleModal").modal('hide');
  553. if(res.data.success){
  554. _this.orderIssues.forEach(function(orderIssue){
  555. if(orderIssue.id == id){
  556. if(orderIssue.top == null){
  557. orderIssue.top = {};
  558. }
  559. orderIssue.top.remark = 'remark';
  560. }
  561. })
  562. tempTip.setDuration(2500);
  563. tempTip.showSuccess('置顶成功');
  564. window.location.href=window.location.href;
  565. } else {
  566. tempTip.setDuration(2500);
  567. tempTip.show( res.data.fail_info);
  568. }
  569. }).catch(function(err){
  570. $("#exampleModal").modal('hide');
  571. tempTip.setDuration(4000);
  572. tempTip.show('网络错误:' + err);
  573. });
  574. }
  575. },
  576. pageTurning(event){
  577. let page = $(event.target).val();
  578. if (page>this.page.lastPage) {
  579. return;
  580. }
  581. window.location = this.form.goPage(page);
  582. },
  583. orderIssueExport(sign){
  584. // 导出
  585. let url = '{{url('order/issue/export')}}';
  586. let token='{{ csrf_token() }}';
  587. if(sign){
  588. // 所有页
  589. excelExport(true,this.checkData,url,this.page.total,token);
  590. }else{
  591. // 选中
  592. excelExport(false,this.checkData,url,null,token);
  593. }
  594. },
  595. copyOrderNo(){
  596. // 复制快递单号
  597. let _this =this;
  598. if(this.checkData.length === 0){
  599. tempTip.show('没有勾选订单');
  600. }else{
  601. let orderNos = [];
  602. this.orderIssues.forEach(function(item){
  603. if(_this.checkData.includes(item.id)){
  604. let logisticNumbers = item.order.logisticNumbers;
  605. if(logisticNumbers.length>0){
  606. orderNos.push(logisticNumbers);
  607. }
  608. }
  609. })
  610. let p =$('<input id="coty" value="'+orderNos.join(',')+'"/>');
  611. p.attr('opacity',0);
  612. $('body').append(p);
  613. let p_ele = document.getElementById('coty');
  614. p_ele.select();
  615. document.execCommand("Copy");
  616. p.remove();
  617. }
  618. },
  619. checkAll(e){
  620. if (e.target.checked){
  621. this.orderIssues.forEach((el,i)=>{
  622. if (this.checkData.indexOf(el.id) == '-1'){
  623. this.checkData.push(el.id);
  624. }
  625. });
  626. }else {
  627. this.checkData = [];
  628. }
  629. },
  630. endOrderIssue(){
  631. // 完结
  632. if(this.checkData.length === 0){
  633. tempTip.show('没有勾选订单');
  634. return ;
  635. }
  636. let _this = this;
  637. let data = {ids:this.checkData};
  638. axios.post('{{url('apiLocal/order/issue/endOrderIssue')}}',data).then(function(res){
  639. if(res.data.success){
  640. _this.orderIssues.forEach(function(item){
  641. if(_this.checkData.includes(item.id)){
  642. item.handle_status = '已完结';
  643. }
  644. })
  645. tempTip.setDuration(2000);
  646. tempTip.showSuccess('勾选订单已变为已完结');
  647. }else{
  648. tempTip.setDuration(3000);
  649. tempTip.show(res.data.fail_info);
  650. }
  651. }).catch(function(err){
  652. tempTip.setDuration(4000);
  653. tempTip.show('网络异常:'+err);
  654. })
  655. },
  656. disposeOrderIssue(e){
  657. // 处理订单
  658. let _this = this;
  659. let id = $(e.target).attr('data-value');
  660. let data = {id:id};
  661. axios.post('{{url('apiLocal/order/issue/disposeOrderIssue')}}',data).then(function(res){
  662. if(res.data.success){
  663. _this.orderIssues.forEach(function (orderIssue) {
  664. if(orderIssue.id == data.id){
  665. orderIssue.is_new_rejecting = '已处理';
  666. }
  667. })
  668. tempTip.setDuration(3000);
  669. tempTip.showSuccess('订单已处理');
  670. }else{
  671. tempTip.setDuration(3000);
  672. tempTip.show(res.data.fail_info);
  673. }
  674. }).catch(function(err){
  675. tempTip.setDuration(4000);
  676. tempTip.show('网路链接异常'+err);
  677. });
  678. },
  679. addOrderIssueLog(id){
  680. // 添加日志
  681. let idInput = $('#'+id+' :input[name="id"]');
  682. let contentInput = $('#'+id+' :input[name="content"]');
  683. if(!contentInput.val()){
  684. contentInput.addClass('is-invalid').focus();
  685. return ;
  686. }
  687. contentInput.removeClass('is-invalid')
  688. let _this = this;
  689. let data= {id:idInput.val(),content:contentInput.val()};
  690. axios.post('{{url('apiLocal/order/issue/log/store')}}',data).then(function(res){
  691. if(res.data.success){
  692. _this.orderIssues.forEach( function(orderIssue){
  693. if(orderIssue.id == data.id){
  694. orderIssue.logs.unshift(res.data.data);
  695. contentInput.val('');
  696. $('#'+id).hide();
  697. }
  698. })
  699. tempTip.setDuration(2000);
  700. tempTip.showSuccess('添加成功');
  701. } else {
  702. tempTip.setDuration(3000);
  703. tempTip.show(res.data.fail_info);
  704. }
  705. }).catch(function(err){
  706. tempTip.setDuration(4000);
  707. tempTip.show('网络异常:'+err);
  708. });
  709. },
  710. deleteOrderIssueLog(id,OrderIssueId){
  711. // 删除orderIssueLog
  712. let _this = this;
  713. axios.post("{{url('apiLoacl/order/issue/log/destroy')}}",{id:id}).then(function(res){
  714. if(res.data.success){
  715. _this.orderIssues.forEach(function (orderIssue) {
  716. if(orderIssue.id == OrderIssueId){
  717. let logs = orderIssue.logs;
  718. logs.forEach(function(item,index){
  719. if(item.id == id){
  720. logs.splice(index,1);
  721. }
  722. });
  723. }
  724. })
  725. tempTip.setDuration(2000);
  726. tempTip.showSuccess('删除成功');
  727. }else{
  728. tempTip.setDuration(2000);
  729. tempTip.show('删除失败:'+res.data.fail_info);
  730. }
  731. }).catch(function(err){
  732. tempTip.setDuration(4000);
  733. tempTip.show('网络异常:'+err);
  734. });
  735. },
  736. hidetop:function(e) {
  737. let target = $(e.target);
  738. let top = target.parent().find('.top');
  739. let tip = target.parent().find('.toptd');
  740. top.hide();
  741. tip.tooltip('show');
  742. },
  743. showtop:function(e){
  744. let target = $(e.target);
  745. let top = target.parent().find('.top');
  746. let tip = target.parent().find('.toptd');
  747. top.show();
  748. tip.tooltip('hide');
  749. },
  750. showDelBtn(e){
  751. let domObj = $(e.target).parent();
  752. if(domObj.hasClass('del-tr')){
  753. domObj.find('.del-btn').show();
  754. }
  755. },
  756. hideDelBtn(e){
  757. let domObj = $(e.target);
  758. if(domObj.hasClass('del-tr')){
  759. domObj.find('.del-btn').hide();
  760. }
  761. },
  762. showAddBtn(e){
  763. let domObj = $(e.target).parents('.log-td');
  764. if(domObj.hasClass('log-td')){
  765. domObj.find('.add-btn').show();
  766. }
  767. },
  768. hideAddBtn(e){
  769. let domObj = $(e.target);
  770. if(domObj.hasClass('log-td')){
  771. domObj.find('.add-btn').hide();
  772. }
  773. },
  774. showAddDiv(id){
  775. let div = $('#'+id);
  776. if(div.is(":hidden")){
  777. div.show();
  778. }else{
  779. div.hide();
  780. }
  781. },
  782. toggleLogisticNumbers(id,length){
  783. let collapse = $('#logisticNumbers'+id);
  784. let button = $("#logisticNumbersBtn"+id);
  785. let isShow = button.attr('aria-expanded');
  786. if(isShow==='false'){button.text('点击收起');}else{button.text("分箱"+length+"件,点击展开");}
  787. },
  788. toggleLogs(id,length){
  789. let button = $("#logsBtn"+id);
  790. let isShow = button.attr('aria-expanded');
  791. if(isShow==='false'){button.text('点击收起');}else{button.text("记录共"+length+"条,点击展开");}
  792. },
  793. toggleOrder(id,length){
  794. let button = $("#orderBtn"+id);
  795. let isShow = button.attr('aria-expanded');
  796. if(isShow==='false'){
  797. button.text('点击收起');
  798. }else{
  799. button.text("分箱"+length+"件,点击展开");
  800. }
  801. },
  802. toggleSecond(id,length){
  803. let button = $("#secondOrderBtn"+id);
  804. let isShow = button.attr('aria-expanded');
  805. if(isShow==='false'){
  806. button.text('点击收起');
  807. }else{
  808. button.text("商品共"+length+"件,点击展开");
  809. }
  810. },
  811. toggleRejectedBill(id,length){
  812. let button = $("#rejectedBillBtn"+id);
  813. let isShow = button.attr('aria-expanded');
  814. if(isShow ==='false'){
  815. button.text('点击收起');
  816. }else{
  817. button.text("商品"+length+"件,点击展开");
  818. }
  819. },
  820. toggleseCondOrderNumbers(id,length){
  821. let button = $("#secondOrderNumbersBtn"+id);
  822. let isShow = button.attr('aria-expanded');
  823. if(isShow ==='false'){
  824. button.text('点击收起');
  825. }else{
  826. button.text("分箱"+length+"件,点击展开");
  827. }
  828. },
  829. }
  830. })
  831. // modal 隐藏时修改 input 为空
  832. $("#exampleModal").on('hide.bs.modal',function(e){
  833. $('#remark').val('');
  834. });
  835. </script>
  836. @endsection