delivering.blade.php 96 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793
  1. @extends('layouts.app')
  2. @section('title')查询-订单管理@endsection
  3. @section('content')
  4. <div class="container-fluid">
  5. <div style="min-width: 4120px;">{{--4070--}}
  6. <div id="list" class="d-none">
  7. <div id="form_div"></div>
  8. <div class="ml-3 form-inline" id="btn">
  9. <div class="dropdown">
  10. <button type="button"
  11. class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget"
  12. data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">
  13. 导出Excel
  14. </button>
  15. <div class="dropdown-menu">
  16. <a class="dropdown-item" @click="orderExport(false)" href="javascript:">导出勾选内容</a>
  17. <a class="dropdown-item" @click="orderExport(true)" href="javascript:">导出所有页</a>
  18. </div>
  19. </div>
  20. <div class="custom-control custom-checkbox ml-1">
  21. <input type="checkbox" class="custom-control-input" id="customCheck" name="is_merge"
  22. v-model="is_merge">
  23. <label class="custom-control-label" for="customCheck">导出是否格式化</label>
  24. </div>
  25. @can('订单管理-批量备注')
  26. <button @click="modal()" type="button" class="btn btn-sm ml-2 btn-outline-primary">批量备注追加
  27. </button>@endcan
  28. @can('订单管理-编辑')
  29. <span class="btn btn-sm btn-outline-dark tooltipTarget ml-1" @click="freezeAll"
  30. style="cursor: pointer" title="订单的冻结条件要只局限在“创建订单”,“分配完成”,“拣货完成”,“播种完成”">冻结</span>
  31. <button type="button" @click="thaw(null,true)"
  32. class="btn btn-sm btn-outline-danger tooltipTarget ml-1" title="解除已冻结订单"
  33. style="opacity: 0.7">解冻
  34. </button>
  35. <span class="btn btn-sm btn-outline-dark tooltipTarget ml-1" @click="deAllocationAll"
  36. style="cursor: pointer" title="订单的取消分配条件要只局限在“分配完成”或“部分分配”">取消分配</span>
  37. <span class="btn btn-sm btn-outline-primary tooltipTarget ml-1" @click="allocation()"
  38. style="cursor: pointer" title="仅能分配未分配订单">订单分配</span>
  39. <button type="button" @click="resetLogisticsGetMark()"
  40. class="btn btn-sm ml-1 btn-outline-success">重置快递获取标记
  41. </button>
  42. <button type="button" @click="resetInterfaceReturnMark()"
  43. class="btn btn-sm ml-1 btn-outline-secondary">重置接口回传标记
  44. </button>
  45. @endcan
  46. @can('订单管理-订单-生成问题件')
  47. <button @click="orderIssueTag()" type="button" class="btn btn-sm ml-1 btn-outline-primary">
  48. 标记问题件
  49. </button>
  50. @endcan
  51. @can('订单管理-订单-生成退货单')
  52. <button class="btn btn-sm btn-outline-dark ml-1" @click="isRejectedBillExist()"
  53. style="opacity: 0.7">生成退货单
  54. </button>
  55. @endcan
  56. <button class="btn btn-sm ml-1 btn-primary" @click="copyLogisticNumber()">复制快递单号</button>
  57. @can('订单管理-订单-生成工单')
  58. <button class="btn btn-sm ml-1 btn-outline-success" @click="checkWorkOrderOrCreateWorkOrder">生成工单</button>
  59. @endcan
  60. @can('订单管理-订单-一键回传')
  61. <button class="btn btn-sm ml-1 btn-success tooltipTarget"
  62. title="订单一键回传必须满足条件:订单状态为“分配完成,部分拣货,拣货完成,播种完成”;订单未冻结;订单有快递单号"
  63. @click="manualBack()">一键回传
  64. </button>
  65. @endcan
  66. {{-- @can('订单管理-订单-一键揽收')--}}
  67. <button class="btn btn-sm ml-1 btn-success tooltipTarget" title="目前仅中通可用,默认重量0.01kg,默认揽收不需要任何条件"
  68. @click="collectUpload()">一键揽收</button>
  69. {{-- @endcan--}}
  70. </div>
  71. <div class="modal fade " style="top: 20%" id="myModal" tabindex="-1" role="dialog"
  72. aria-labelledby="myModalLabel" aria-hidden="true">
  73. <div class="modal-dialog">
  74. <div class="modal-content">
  75. <div class="modal-header">
  76. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;
  77. </button>
  78. </div>
  79. <div class="modal-body">
  80. <input class="form-control" v-model="content" placeholder="注释内容">
  81. </div>
  82. <div class="modal-footer">
  83. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
  84. <button type="button" @click="batchComments()" class="btn btn-primary">批量备注追加</button>
  85. </div>
  86. </div><!-- /.modal-content -->
  87. </div><!-- /.modal -->
  88. </div>
  89. <table class="table table-striped table-bordered table-hover card-body td-min-width-80" id="table">
  90. <tr v-for="(order,i) in orders" @click="selectedColor(order.orderno)"
  91. :style="{'background-color': order.orderno==selectedStyle?'#aac7ea':''}">
  92. <td>
  93. <input class="checkItem" type="checkbox" :value="order.orderno">
  94. </td>
  95. <td class="text-nowrap">
  96. <span >@{{ i+1 }}</span>
  97. @can('订单管理-问题件')
  98. <a :href="'{{url("order/issue/index")}}'+'?orderCode='+order.orderno"
  99. target="order/issue/index?addtime=15">
  100. <span v-show="order.is_order_issue" class="badge badge-pill badge-danger">问题件</span>
  101. </a>
  102. @else
  103. <span v-show="order.is_order_issue" class="badge badge-pill badge-danger">问题件</span>
  104. @endcan
  105. <br v-show="order.is_order_issue">
  106. @can('订单管理-工单处理')
  107. <a :href="'{{url("order/workOrder/index")}}'+'?client_code='+order.soreference1" target="order/workOrder/index">
  108. <span v-show="order['is_work_order']" class="badge badge-pill badge-primary">工单</span>
  109. </a>
  110. @else
  111. <span v-show="order['is_work_order']" class="badge badge-pill badge-primary">工单</span>
  112. @endcan
  113. </td>
  114. <td class="text-dark font-weight-bold text-nowrap"><span>@{{ order.orderno }}</span></td>
  115. <td class="text-muted text-nowrap"><span>@{{ order.ordercodename }}</span></td>
  116. <td class="text-nowrap"><span>@{{ order.addtime }}</span></td>
  117. <td class="text-nowrap"><span>@{{ order.issuepartyname }}</span></td>
  118. <td class="text-nowrap"><span>@{{ order.customer_descr_c }}</span></td>
  119. <td class="text-nowrap"><span>@{{ order.soreference1 }}</span></td>
  120. <td class="text-muted text-nowrap"><span>@{{ order.carriername }}</span></td>
  121. <td class="text-nowrap">
  122. <div v-if="picktotraceidMap[order.orderno] && picktotraceidMap[order.orderno].length>1"
  123. class="text-center">
  124. <span v-for="(picktotraceid,key) in picktotraceidMap[order.orderno]"
  125. v-if="order.is_unfold">
  126. @{{ isDB(order.carriername) ? (order.code5+'#'+(key+1)) : picktotraceid }}<br>
  127. </span>
  128. <button class="btn btn-sm btn-outline-info"
  129. :style="order.is_unfold ? 'opacity:0.7' : ''" @click="isUnfold(order)">
  130. <span v-if="order.is_unfold" class="mt-1">收起</span>
  131. <span v-else>分箱 @{{ picktotraceidMap[order.orderno].length }} 件,展开单号</span>
  132. </button>
  133. </div>
  134. <span v-else v-text="(order.carriername !==null && order.carriername.includes('唯品顺丰')) ? order.code5 : order.soreference5"></span>
  135. </td>
  136. <td class="text-muted text-wrap text-letter">
  137. <div class="text-overflow-warp-200 warp-min-200"
  138. :class="order.is_encryption ? 'text-danger' : ''"><span
  139. v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_contact }}</span>
  140. </div>
  141. </td>
  142. <td class="text-muted text-wrap text-letter">
  143. <div class="text-overflow-warp-200 warp-min-200"
  144. :class="order.is_encryption ? 'text-danger' : ''"><span
  145. v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_tel2?order.c_tel2:order.c_tel1 }}</span>
  146. </div>
  147. </td>
  148. <td class="text-nowrap"><span> @{{ order.c_province }}</span></td>
  149. <td class="text-nowrap"><span> @{{ order.c_city }}</span></td>
  150. <td class="text-nowrap">
  151. <div class="text-overflow-warp-200 warp-min-200">@{{ order.c_district }}</div>
  152. </td>
  153. <td class="text-muted text-wrap text-letter">
  154. <div class="text-overflow-warp-200 warp-min-200"
  155. :class="order.is_encryption ? 'text-danger' : ''"><span
  156. v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_address1 }}</span>
  157. </div>
  158. </td>
  159. <td class="text-nowrap"><span>@{{ order.waveno }}</span></td>
  160. <td class="text-nowrap"><span> @{{ order.warehouseid }}</span></td>
  161. <td class="text-nowrap"><span v-if="order.edisendflag2=='Y'">是</span><span
  162. v-if="order.edisendflag2=='N'">否</span><span v-if="order.edisendflag2=='W'">错误</span>
  163. </td>
  164. <td class="text-nowrap"><span>@{{ order.edisendtime2 }}</span></td>
  165. <td class="text-center" style="min-width: 900px">
  166. <div :class="commodities[order.orderno]&&commodities[order.orderno].length==1 ? '' : 'up'"
  167. :id="'order-'+i">
  168. <div v-for="oracleDOCOrderDetail in commodities[order.orderno]" class="row">
  169. <div class="col-2 border border-1">@{{ oracleDOCOrderDetail.sku }}</div>
  170. <div class="col-2 border border-1">@{{ oracleDOCOrderDetail.alternate_sku1 }}</div>
  171. <div class="col-2 border border-1" @dblclick.stop="replaceText(i)">
  172. <div class="w-100"
  173. :class="order.replaceText ? 'text-overflow-warp-100' : 'text-overflow-replace-100 cursor-pointer'">
  174. @{{ oracleDOCOrderDetail.descr_c }}
  175. </div>
  176. </div>
  177. <div class="col-1 border border-1">@{{ oracleDOCOrderDetail.qtyordered }}</div>
  178. <div class="col-2 border border-1">@{{ oracleDOCOrderDetail.lotnum }}</div>
  179. <div class="col-1 m-0 p-0 border border-1">@{{
  180. oracleDOCOrderDetail.orderdetailcodename }}
  181. </div>
  182. <div class="col-2 border border-1">@{{ oracleDOCOrderDetail.checktime }}</div>
  183. </div>
  184. </div>
  185. <div class="row text-center cursor-pointer"
  186. v-if="commodities[order.orderno]&&commodities[order.orderno].length>1">
  187. <b @click="unfold(i)" class="col-12 cursor-pointer" v-if="!upList[i]">共有 @{{
  188. commodities[order.orderno].length }} 件商品,点击展开</b>
  189. <b class="col-12" @click="unfold(i)" v-else>点击收起明细</b>
  190. </div>
  191. </td>
  192. <td><span>@{{ order.notes }}</span></td>
  193. <td><span>@{{ order.manualflag}}</span></td>
  194. <td><span>@{{ order.erpcancelflag }}</span></td>
  195. <td><span>@{{ order.picking_print_flag }}</span></td>
  196. <td><span>@{{ order.edisendflag }}</span></td>
  197. <td><span>@{{ order.ediremarks2}}</span></td>
  198. <td>
  199. @can('订单管理-编辑')
  200. <button v-if="order.releasestatus!=='H'" @click="freeze(order.orderno,order.waveno)"
  201. class="btn btn-sm btn-outline-dark text-nowrap"
  202. :disabled="!(order.ordercodename==='创建订单'||order.ordercodename==='分配完成'||order.ordercodename==='拣货完成'||order.ordercodename==='播种完成')">
  203. 冻结
  204. </button>
  205. <button v-else @click="thaw(order.orderno,false,order)"
  206. class="btn btn-sm btn-outline-danger text-nowrap"
  207. :disabled="!(order.ordercodename==='创建订单'||order.ordercodename==='分配完成'||order.ordercodename==='拣货完成'||order.ordercodename==='播种完成')">
  208. 解冻
  209. </button>
  210. @else
  211. <span>@{{ order.releasestatus }}</span>
  212. @endcan
  213. </td>
  214. <td>
  215. @can('订单管理-编辑')
  216. <button v-if="order.sostatus=='40'||'30'"
  217. @click="deAllocation(order.orderno,order.waveno)"
  218. class="btn btn-sm btn-outline-dark text-nowrap"
  219. :disabled="!(order.sostatus==='40'|| order.sostatus==='30')">取消分配
  220. </button>
  221. @else
  222. <span>@{{ order.sostatus }}</span>
  223. @endcan
  224. </td>
  225. </tr>
  226. </table>
  227. <button type="button" @click="pageUp()" :readonly="page>1?false:true" class="btn btn-sm "
  228. :class="page>1?'btn-outline-info':''">上一页
  229. </button>
  230. <button type="button" @click="pageDown()" :readonly="maxPage == 0 ? false : (page<maxPage?false:true)"
  231. class="btn btn-sm m-3"
  232. :class="maxPage == 0 ? 'btn-outline-info' : (page<maxPage?'btn-outline-info':'')">下一页
  233. </button>
  234. <input @keyup.enter="pageSkip($event)" class="form-control-sm ml-3 tooltipTarget" placeholder="此处输入页数"
  235. title="去往指定页">
  236. <span class="text-muted m-1">@{{ pagePlaceholder }}</span>
  237. <span class="text-muted m-1" v-if="maxPage != 0">共 @{{ sum }} 条</span>
  238. <div class="modal fade " id="checkModal" tabindex="-1" role="dialog" aria-labelledby="checkModalLabel"
  239. aria-hidden="true">
  240. <div class="modal-dialog modal-dialog-centered">
  241. <div class="modal-content">
  242. <div class="modal-header">
  243. <h5 class="modal-title" id="checkModalLabel">标记问题件提示</h5>
  244. <button type="button" class="close" data-dismiss="modal" aria-label="Close"
  245. @click="changeRemark">
  246. <span aria-hidden="true">&times;</span>
  247. </button>
  248. </div>
  249. <div class="modal-body">
  250. <div class="alert" id="alert-message">
  251. @{{ message.checkOrderIssueMessage }}
  252. </div>
  253. </div>
  254. <div class="modal-footer">
  255. <button type="button" class="btn btn-secondary" data-dismiss="modal"
  256. @click="message.checkOrderIssueMessage=''">关闭
  257. </button>
  258. </div>
  259. </div>
  260. </div>
  261. </div>
  262. <div class="modal fade " id="exampleModal" tabindex="-1" role="dialog"
  263. aria-labelledby="exampleModalLabel"
  264. aria-hidden="true">
  265. <div class="modal-dialog modal-dialog-centered modal-xl">
  266. <div class="modal-content">
  267. <div class="modal-header">
  268. <h5 class="modal-title" id="exampleModalLabel">输入问题件信息</h5>
  269. <button type="button" class="close" data-dismiss="modal" aria-label="Close"
  270. @click="changeRemark">
  271. <span aria-hidden="true">&times;</span>
  272. </button>
  273. </div>
  274. <div class="modal-body">
  275. <div class="form-group row m-0 p-0">
  276. <label class="col-md-1 col-sm-2 text-right">问题类别</label>
  277. <select name="order_issues_type_id" v-model="typeId" class="form-control col-4"
  278. id="orderIssueType" @focus="focusOnModal($event)">
  279. <option value></option>
  280. <option v-for="type in orderIssueType" :value="type.id">@{{ type.name }}
  281. </option>
  282. </select>
  283. <label class="col-md-1 col-sm-2 text-right">
  284. 快递
  285. </label>
  286. <div class="col-4">
  287. <textarea class="form-control m-0">@{{ tagOrder.logisticInfo }}</textarea>
  288. <button type="button" class="btn btn-sm btn-outline-primary"
  289. @click="copyLogisticInfo">复制
  290. </button>
  291. </div>
  292. </div>
  293. <div class="form-group row m-0">
  294. <label class="col-md-1 col-sm-2 text-right">情况说明</label>
  295. <label for="result_explain"></label>
  296. <textarea name="result_explain" v-model="result_explain" class="form-control col-4"
  297. id="result_explain"></textarea>
  298. <label class="col-md-1 col-sm-2 text-right">
  299. 商家
  300. </label>
  301. <div class="col-4">
  302. <textarea class="form-control m-0 row">@{{ tagOrder.merchantInfo }}</textarea>
  303. <button type="button" class="btn btn-sm btn-outline-primary"
  304. @click="copyMerchantInfo">复制
  305. </button>
  306. </div>
  307. </div>
  308. </div>
  309. <div class="modal-footer">
  310. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal"
  311. @click="changeRemark">关闭
  312. </button>
  313. <button type="button" class="btn btn-sm btn-primary" @click="orderIssueTagSubmit">提交
  314. </button>
  315. </div>
  316. </div>
  317. </div>
  318. </div>
  319. @can('订单管理-订单-生成工单')
  320. @include('order.index._work_order_modal')
  321. @include('order.index._workOrkerInfoModal')
  322. @endcan
  323. <textarea id="clipboardDiv" style="opacity:0"></textarea>
  324. </div>
  325. </div>
  326. </div>
  327. @endsection
  328. @section('lastScript')
  329. <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
  330. <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
  331. <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
  332. <script>
  333. let vue = new Vue({
  334. el: "#list",
  335. data: {
  336. page: Number('{{$page}}'),
  337. paginate: Number('{{$request['paginate'] ?? 50}}'),
  338. maxPage: 1,
  339. sum: 0,
  340. owners: [
  341. @foreach($customers as $customer)
  342. {
  343. name: '{{$customer->customerid}}', value: '{{$customer->descr_c}}'
  344. },
  345. @endforeach
  346. ],
  347. logistics: [
  348. @foreach($logistics as $logistic)
  349. {
  350. name: '{{$logistic->name}}', value: '{{$logistic->name}}'
  351. },
  352. @endforeach
  353. ],
  354. orders: {!! $orders !!},
  355. commodities: {!! $commodities !!},
  356. content: '',
  357. codes: [
  358. @foreach($codes as $code)
  359. {
  360. name: '{{$code->code}}', value: '{{$code->codename_c}}'
  361. },
  362. @endforeach
  363. ],
  364. selectedStyle: '',
  365. picktotraceidMap: {!! $picktotraceids !!},
  366. pagePlaceholder: "",
  367. typeId: '',
  368. result_explain: '',
  369. orderIssueType: {!! $orderIssueType !!},
  370. is_merge: false,
  371. message: {
  372. checkOrderIssueMessage: '',
  373. },
  374. tagOrders: [],
  375. tagOrder: {
  376. logisticInfo: '',
  377. merchantInfo: '',
  378. },
  379. upList: {},
  380. workOrder: {
  381. types: ['拦截', '快递异常', '信息更改', '错漏发', '破损','快递丢件'],
  382. orderIssueType: 0,
  383. grad: 1,
  384. remark: {
  385. name: null, // 联系人
  386. phone: null, // 联系号码
  387. province: null, // 省
  388. city: null, // 市
  389. district: null, // 区
  390. adder: null, // 详细地址
  391. info: null,
  392. },
  393. packageImages: [], // 外包装图片
  394. commodityImages: [], // 内物破损图片
  395. dealImages: [], // 交易截图
  396. commodities: [],
  397. logistic_number: null, // 快递单号
  398. price: null,
  399. },
  400. grads: [
  401. {name: '一般', value: '1'},
  402. {name: '重要', value: '2'},
  403. {name: '紧急', value: '3'},
  404. {name: '重要且紧急', value: '4'},
  405. ],
  406. exeSign: {},
  407. workOrderInfos:[],
  408. workOrderIndex:null,
  409. workOrderInfo:{
  410. id:'',
  411. type:'',
  412. clientCode:'',
  413. logistic_numbers:[],
  414. details:[],
  415. commodities:[],
  416. packagesImages:[],
  417. commodityImages:[],
  418. dealImages:[],
  419. refundImages:[],
  420. remark:'',
  421. },
  422. },
  423. mounted: function () {
  424. this.initData();
  425. $(".up").slideUp();
  426. $(".tooltipTarget").tooltip({'trigger': 'hover'});
  427. $("#list").removeClass('d-none');
  428. if (this.orders.length > 0) {
  429. this.maxPage = Math.ceil(this.orders[0].counted / this.paginate);
  430. this.sum = this.orders[0].counted;
  431. }
  432. if (this.getQueryVariable('alternate_sku1')) {
  433. this.maxPage = 0;
  434. this.pagePlaceholder = '当前页数:' + this.page;
  435. } else {
  436. this.pagePlaceholder = '当前页数:' + this.page + '/' + this.maxPage;
  437. }
  438. let data = [
  439. [{name: 'codename_c', type: 'select', placeholder: '订单状态', data: this.codes},
  440. {
  441. name: 'orderdate_start', type: 'time', tip: ['选择显示日期的起始时间', '选择显示日期的起始时间'],
  442. rules: {
  443. date_relevance: {
  444. date: ['orderdate_start', 'orderdate_end'],
  445. relevance: 'addtime',
  446. killing: 'relevance',
  447. default: [31, 92, 183, 366]
  448. }
  449. }
  450. },
  451. {name: 'orderno', type: 'input', tip: '可支持多SO号,糊模查找需要在左边打上%符号', placeholder: 'SO号'},
  452. {
  453. name: 'carriername',
  454. type: 'select_multiple_select',
  455. tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的承运人'],
  456. placeholder: ['承运人', '定位或多选承运人'],
  457. data: this.logistics
  458. },
  459. {
  460. name: ['notes', 'addtime'],
  461. type: 'input_select',
  462. tip: ['右侧选择查询范围,默认为一月内', '查询范围,范围越短搜索越快'],
  463. placeholder: ['备注', ''],
  464. data: [{name: '31', value: '近一月'}, {name: '92', value: '近三月'}, {
  465. name: '183',
  466. value: '近半年'
  467. }, {name: '366', value: '近一年'}, {name: '0', value: '不限'},],
  468. rules: {
  469. son: {
  470. addtime: {
  471. default: '31',
  472. required_without_all_if: ['orderdate_start', 'orderdate_end']
  473. }
  474. },
  475. date_relevance: {
  476. date: ['orderdate_start', 'orderdate_end'],
  477. relevance: 'addtime',
  478. killing: 'date',
  479. default: [31, 92, 183, 366]
  480. }
  481. }
  482. },
  483. {name: 'issuepartyname', type: 'input', tip: '糊模查找需要在左边打上%符号', placeholder: '店铺名称'},
  484. {
  485. name: 'edisendflag2',
  486. type: 'select',
  487. tip: '快递获取标记',
  488. placeholder: '快递获取标记',
  489. data: [{name: 'Y', value: '是'}, {name: 'N', value: '否'}, {name: 'W', value: '错误'},]
  490. },
  491. {
  492. name: 'edisendflag',
  493. type: 'select',
  494. tip: '接口回传标记',
  495. placeholder: '接口回传标记',
  496. data: [{name: 'Y', value: 'Y'}, {name: 'N', value: 'N'}, {
  497. name: 'W',
  498. value: 'W'
  499. }, {name: 'R', value: 'R'},]
  500. }
  501. ],
  502. [
  503. {name: 'codename_c_end', type: 'select', placeholder: '订单状态范围', data: this.codes},
  504. {
  505. name: 'orderdate_end', type: 'time', tip: ['选择显示指定日期的结束时间', '选择显示指定日期的结束时间'],
  506. rules: {
  507. date_relevance: {
  508. date: ['orderdate_start', 'orderdate_end'],
  509. relevance: 'addtime',
  510. killing: 'relevance',
  511. default: [31, 92, 183, 366]
  512. }
  513. }
  514. },
  515. {
  516. name: 'customerid', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的客户'],
  517. placeholder: ['货主', '定位或多选货主'], data: this.owners
  518. },
  519. {name: 'soreference5', type: 'input', tip: '可支持多快递单号,糊模查找需要在左边打上%符号', placeholder: '多快递单号'},
  520. {
  521. name: 'soreference1',
  522. type: 'input',
  523. tip: '支持多客户订单号精确和模糊查找,糊模查找需要在右边打上%符号,多单号可用逗号或者空格分隔',
  524. placeholder: '客户订单号'
  525. },
  526. {name: 'waveno', type: 'input', tip: '可支持多波次编号,模糊查找需要在左边打上%的符号', placeholder: '波次编号'},
  527. {name: 'alternate_sku1', type: 'input', tip: '产品条码,模糊查找需要在左边打上%的符号', placeholder: '产品条码'},
  528. {name: 'c_contact', type: 'input', tip: '可支持多收货人名称:15天以内模糊搜索,15天以外精确搜索', placeholder: '收货人名称'},
  529. ],
  530. [
  531. {name: 'c_tel2', type: 'input', tip: '收货人电话:15天以内模糊搜索,15天以外精确搜索', placeholder: '收货人电话'},
  532. {name: 'c_province', type: 'input', tip: '省:15天以内模糊搜索,15天以外精确搜索', placeholder: '省'},
  533. {name: 'c_city', type: 'input', tip: '市:15天以内模糊搜索,15天以外精确搜索', placeholder: '市'},
  534. {name: 'c_district', type: 'input', tip: '区:15天以内模糊搜索,15天以外精确搜索', placeholder: '区'},
  535. {
  536. name: 'releasestatus',
  537. type: 'select',
  538. tip: '是否冻结冻结',
  539. placeholder: '是否冻结',
  540. data: [{name: 'H', value: '是'}, {name: '', value: '否'}]
  541. },
  542. {name: 'checktime_start', type: 'time', tip: ['选择显示复核时间的起始日期', "选择显示复核时间的起始时间"]},
  543. {name: 'checktime_end', type: 'time', tip: ['选择显示复核时间的结束日期', '选择显示复核时间的结束时间']},
  544. {
  545. name: 'is_display_all',
  546. type: 'checkbox',
  547. tip: '是否隐藏装箱完成以后的状态',
  548. data: [{name: 'ture', value: '隐藏完成状态'}]
  549. },
  550. ],
  551. [
  552. {
  553. name: 'restrict_time',
  554. type: 'select',
  555. tip: '查询限定时间范围',
  556. placeholder: '查询时间范围',
  557. data: [{name: '1', value: '一天内'}, {name: '7', value: '一周内'}, {
  558. name: "30",
  559. value: "一月内"
  560. }, {name: "90", value: "本季度"}]
  561. },
  562. {
  563. name: 'manualflag',
  564. type: 'select',
  565. tip: '是否人工回传',
  566. placeholder: '是否人工回传',
  567. data: [{name: 'Y', value: '是'}, {name: 'N', value: '否'}]
  568. },
  569. /*{name: 'delayedDeliver', type: 'input', tip: 'M:延时发货,填写整数,单位/时', placeholder: '历史延时发货'},*/
  570. {name: 'presentDelayed', type: 'input', tip: 'M:延时发货,填写整数,单位/时', placeholder: '延时发货'},
  571. ],
  572. ];
  573. this.form = new query({
  574. el: "#form_div",
  575. condition: data,
  576. appendDom: "btn",
  577. });
  578. this.form.init();
  579. let column = [
  580. {name: 'index', value: '序号', neglect: true},
  581. {name: 'orderno', value: '编号'},
  582. {name: 'ordercodename', value: '订单状态'},
  583. {name: 'addtime', value: '接口下发时间'},
  584. {name: 'issuepartyname', value: '店铺名称'},
  585. {name: 'customer_descr_c', value: '客户'},
  586. {name: 'soreference1', value: '客户订单号'},
  587. {name: 'carriername', value: '承运人'},
  588. {name: 'soreference5', value: '快递单号'},
  589. {name: 'c_contact', value: '收货人名称'},
  590. {name: 'c_tel2', value: '收货人电话'},
  591. {name: 'c_province', value: '省'},
  592. {name: 'c_city', value: '市'},
  593. {name: 'c_district', value: '区'},
  594. {name: 'c_address1', value: '收货人地址'},
  595. {name: 'waveno', value: '波次编号'},
  596. {name: 'warehouseid', value: '仓库'},
  597. {name: 'edisendflag2', value: '快递获取标记'},
  598. {name: 'edisendtime2', value: '快递获取时间'},
  599. {
  600. name: "commodity", type: "multi", title: "商品信息", rows: [
  601. {value: "商品编码", col: "2"},
  602. {value: "商品条码", col: "2"},
  603. {value: "商品名称", col: "2"},
  604. {value: "订单数量", col: "1"},
  605. {value: "批次号", col: "2"},
  606. {value: "明细状态", col: "1"},
  607. {value: "复核时间", col: "2"}
  608. ]
  609. },
  610. {name: 'notes', value: '备注'},
  611. {name: 'manualflag', value: '人工回传标记'},
  612. {name: 'erpcancelflag', value: '接口取消标记'},
  613. {name: 'picking_print_flag', value: '拣货单打印标记'},
  614. {name: 'edisendflag', value: '接口回传标记'},
  615. {name: 'ediremarks2', value: '接口回传异常备注'},
  616. {name: 'update', value: '订单冻结', neglect: true},
  617. {name: 'remove', value: '取消分配', neglect: true},
  618. ];
  619. new Header({
  620. el: "table",
  621. name: "order",
  622. column: column,
  623. data: this.orders,
  624. restorationColumn: 'addtime',
  625. fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
  626. }).init();
  627. },
  628. watch: {
  629. result_explain: function () {
  630. this.setLogisticInfo();
  631. this.setMerchantInfo();
  632. },
  633. 'workOrder.orderIssueType':function(newValue){
  634. if (newValue === null) return;
  635. if (['破损','错漏发','快递异常'].includes(newValue)){
  636. this.fillWorkOrderCommodity();
  637. }
  638. },
  639. },
  640. computed:{
  641. },
  642. methods: {
  643. initData() {
  644. this.orders.forEach((order) => {
  645. if (order.c_contact && order.c_contact.length > 50 && order.c_contact.substring(0, 3) === '~Ag') order.is_encryption = true;
  646. });
  647. let start = "{{$request["orderdate_start"] ?? ''}}";
  648. let end = "{{$request["orderdate_end"] ?? ''}}";
  649. let time = "{{$request["restrict_time"] ?? ''}}";
  650. if (time)this.changeURLParam("restrict_time", time);
  651. if (start)this.changeURLParam("orderdate_start", start);
  652. if (end)this.changeURLParam("orderdate_end", end);
  653. },
  654. changeURLParam(name, value) {
  655. let url = document.URL, resultUrl = ''
  656. let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
  657. let r = window.location.search.substr(1).match(reg);
  658. let replaceText = name + '=' + value;
  659. if (r != null) {
  660. let tmp = url.replace(name + '=' + r[2], replaceText);
  661. resultUrl = (tmp);
  662. } else {
  663. if (url.match('[\?]')) {
  664. resultUrl = url + '&' + replaceText;
  665. } else {
  666. resultUrl = url + '?' + replaceText;
  667. }
  668. }
  669. history.replaceState(null, null, resultUrl)
  670. },
  671. getQueryVariable(variable) {
  672. let query = window.location.search.substring(1);
  673. let vars = query.split("&");
  674. for (let i = 0; i < vars.length; i++) {
  675. let pair = vars[i].split("=");
  676. if (pair[0] == variable) {
  677. return pair[1];
  678. }
  679. }
  680. return (false);
  681. },
  682. pageUp() {
  683. if (this.page <= 1) return;
  684. this.href(this.page - 1);
  685. },
  686. pageDown() {
  687. if (this.page >= this.maxPage && this.maxPage !== 0) return;
  688. this.href(this.page + 1);
  689. },
  690. pageSkip(e) {
  691. if (Number(e.target.value) <= 0 || Number(e.target.value) > this.maxPage) {
  692. tempTip.setDuration(2000);
  693. tempTip.show('页数不存在! ');
  694. return
  695. }
  696. this.href(e.target.value);
  697. },
  698. href(page) {
  699. let url = document.URL;
  700. if (url.indexOf('page=' + this.page) !== -1) {
  701. url = url.replace("page=" + this.page, "page=" + page);
  702. } else {
  703. if (url.indexOf('?') === -1) url += "?page=" + page;
  704. else url += "&page=" + page;
  705. }
  706. window.location.href = url;
  707. },
  708. unfold(index) {
  709. this.$set(this.upList, index, this.upList[index] ? !this.upList[index] : true);
  710. $("#order-" + index).slideToggle();
  711. },
  712. orderExport(checkAllSign) {
  713. let url = '{{url('order/index/export')}}';
  714. let token = '{{ csrf_token() }}';
  715. excelExport(checkAllSign, checkData, url, this.sum, token, {is_merge: this.is_merge});
  716. },
  717. modal() {
  718. $("#myModal").modal('show');
  719. },
  720. //批量冻结
  721. freezeAll: function () {
  722. let _this = this;
  723. if (checkData.length === 0) {
  724. tempTip.show('没有勾选记录');
  725. return
  726. }
  727. if (!confirm("确定要标记所有勾选内容为'冻结'吗")) {
  728. return;
  729. }
  730. axios.post('{{url('order/freezeAll')}}', {checkData: checkData}).then(function (response) {
  731. if (response.data.success) {
  732. _this.orders.forEach(function (order) {
  733. checkData.forEach(function (checkedId) {
  734. if (order.orderno === checkedId) {
  735. order.releasestatus = 'H';
  736. order.waveno = '*';
  737. }
  738. });
  739. });
  740. tempTip.setDuration(1000);
  741. tempTip.showSuccess('标记勾选内容为冻结成功');
  742. } else {
  743. tempTip.setDuration(2500);
  744. tempTip.show('标记勾选内容冻结失败,错误:' + response.data.fail_info);
  745. }
  746. }).catch(function (e) {
  747. tempTip.setDuration(2500);
  748. tempTip.show('标记勾选内容冻结失败,网络连接错误:' + e);
  749. })
  750. },
  751. //订单分配
  752. allocation() {
  753. if (this.exeSign.allocation) return;
  754. if (checkData.length === 0) {
  755. tempTip.show('没有勾选记录');
  756. return;
  757. }
  758. let arr = [];
  759. checkData.forEach(no => {
  760. this.orders.some(order => {
  761. if (order.orderno === no) {
  762. let obj = {
  763. "status": order.sostatus,
  764. "number": order.soreference5,
  765. "warehouse": order.warehouseid,
  766. "code": order.orderno,
  767. };
  768. arr.push(obj);
  769. return true;
  770. }
  771. });
  772. });
  773. window.tempTip.confirm("确定要分配这些订单吗?", () => {
  774. this.exeSign.allocation = true;
  775. axios.post("{{url('order/allocation')}}", {list: arr}).then((res) => {
  776. tempTip.setDuration(3000);
  777. this.exeSign.allocation = false;
  778. switch (res.data.status) {
  779. case "success":
  780. tempTip.showSuccess('订单分配成功');
  781. setTimeout(function () {
  782. window.location.reload();
  783. }, 3000);
  784. break;
  785. case "fail":
  786. tempTip.show(res.data.msg);
  787. break;
  788. default:
  789. tempTip.confirm(res.data.msg, function () {
  790. window.location.reload();
  791. });
  792. }
  793. }).catch((e) => {
  794. this.exeSign.allocation = false;
  795. tempTip.setDuration(2500);
  796. tempTip.show('分配失败,预期之外的错误:' + e);
  797. })
  798. })
  799. },
  800. //批量取消分配
  801. deAllocationAll() {
  802. let _this = this;
  803. if (checkData.length === 0) {
  804. tempTip.show('没有勾选记录');
  805. return
  806. }
  807. if (!confirm("确定要所有勾选内容'取消分配'吗")) {
  808. return;
  809. }
  810. axios.post('{{url('order/deAllocationAll')}}', {checkData: checkData}).then(function (response) {
  811. if (response.data.success) {
  812. _this.orders.forEach(function (order) {
  813. checkData.forEach(function (checkedId) {
  814. if (order.orderno === checkedId) {
  815. order.sostatus = '00';
  816. order.waveno = '*';
  817. }
  818. });
  819. });
  820. tempTip.setDuration(1000);
  821. tempTip.showSuccess('标记勾选内容取消分配成功');
  822. window.location.reload();
  823. } else {
  824. tempTip.setDuration(2500);
  825. tempTip.show('标记勾选内容取消分配失败,错误:' + response.data.fail_info);
  826. }
  827. }).catch(function (e) {
  828. tempTip.setDuration(2500);
  829. tempTip.show('标记勾选内容取消分配失败,网络连接错误:' + e);
  830. })
  831. },
  832. batchComments() {
  833. let _this = this;
  834. if (checkData.length < 1 || !this.content) {
  835. $("#myModal").modal('hide');
  836. tempTip.setDuration(3000);
  837. if (checkData.length < 1) tempTip.showSuccess('没有勾选任何记录');
  838. else tempTip.showSuccess('没有输入任何内容');
  839. return;
  840. }
  841. axios.post('{{url('order/create/batchComments')}}', {checkData: checkData, content: this.content})
  842. .then(function (response) {
  843. let sign = [];
  844. _this.orders.every(function (order) {
  845. if (sign.length === response.data.length) return false;
  846. response.data.every(function (data) {
  847. if (order.orderno === data.orderno) {
  848. order.notes = data.notes;
  849. sign.push(order.orderno);
  850. return false;
  851. }
  852. return true;
  853. });
  854. return true;
  855. });
  856. tempTip.setDuration(3000);
  857. tempTip.showSuccess('注释完毕!')
  858. _this.content = '';
  859. }).catch(function (err) {
  860. tempTip.setDuration(4000);
  861. tempTip.show('网络错误:' + err)
  862. });
  863. $("#myModal").modal('hide');
  864. },
  865. selectedColor(orderno) {
  866. if (orderno == this.selectedStyle) return;
  867. this.selectedStyle = orderno;
  868. },
  869. freeze(orderno, waveno) {
  870. if (!confirm('确定要冻结“' + orderno + '”吗?')) return;
  871. let _this = this;
  872. axios.post('{{url('order/freeze')}}', {orderno: orderno, waveno: waveno})
  873. .then(function (response) {
  874. if (response.data.success) {
  875. _this.orders.some(function (order) {
  876. if (order.orderno === orderno) {
  877. order.releasestatus = 'H';
  878. order.waveno = '*';
  879. return true;
  880. }
  881. });
  882. tempTip.setDuration(3000);
  883. tempTip.showSuccess('订单已被冻结!');
  884. }
  885. }).catch(function (err) {
  886. tempTip.setDuration(3000);
  887. tempTip.show('网络异常:' + err);
  888. });
  889. },
  890. thaw(orderno = null, is_batch = false, order = null) {
  891. if (!orderno) orderno = checkData;
  892. if (!confirm('确定要解冻“' + orderno + '”吗?')) return;
  893. let _this = this;
  894. axios.post('{{url('order/thaw')}}', {orderno: orderno})
  895. .then(function (response) {
  896. if (response.data.success) {
  897. if (is_batch) {
  898. orderno.forEach(order_no => {
  899. _this.orders.some(function (order) {
  900. if (order.orderno === order_no) {
  901. order.releasestatus = 'N';
  902. return true;
  903. }
  904. });
  905. });
  906. } else {
  907. order.releasestatus = 'N';
  908. }
  909. tempTip.setDuration(3000);
  910. tempTip.showSuccess('订单已成功解冻!');
  911. }
  912. }).catch(function (err) {
  913. tempTip.setDuration(3000);
  914. tempTip.show('网络异常:' + err);
  915. });
  916. },
  917. deAllocation(orderno, waveno) {
  918. if (!confirm('确定要取消分配“' + orderno + '”吗?')) return;
  919. let _this = this;
  920. axios.post('{{url('order/deAllocation')}}', {orderno: orderno, waveno: waveno})
  921. .then(function (response) {
  922. if (response.data.success) {
  923. _this.orders.some(function (order) {
  924. if (order.orderno === orderno) {
  925. order.sostatus = '00';
  926. order.waveno = '*';
  927. return true;
  928. }
  929. });
  930. tempTip.setDuration(3000);
  931. tempTip.showSuccess('订单已被取消分配!');
  932. window.location.reload();
  933. }
  934. }).catch(function (err) {
  935. tempTip.setDuration(3000);
  936. tempTip.show('网络异常:' + err);
  937. });
  938. },
  939. isUnfold(order) {
  940. if (!order.is_unfold) {
  941. this.$set(order, 'is_unfold', true);
  942. return;
  943. }
  944. order.is_unfold = false;
  945. },
  946. orderIssueTag() {
  947. if (checkData.length === 0) {
  948. tempTip.setDuration(2000);
  949. tempTip.show('没有勾选记录');
  950. return;
  951. }
  952. this.isExistByOrderNos();
  953. },
  954. orderIssueTagSubmit() {
  955. if (this.typeId === '') {
  956. $("#orderIssueType").addClass('is-invalid');
  957. return;
  958. } else {
  959. $("#result_explain #result_explain").removeClass('is-invalid');
  960. $("#exampleModal").modal('hide');
  961. }
  962. let _this = this;
  963. tempTip.setDuration(1999);
  964. tempTip.waitingTip('处理中,请稍候');
  965. let data = {orderNos: checkData, typeId: this.typeId, result_explain: this.result_explain};
  966. axios.post("{{url('apiLocal/order/issue/orderIssueTag')}}", data).then(function (res) {
  967. tempTip.setDuration(5000);
  968. tempTip.cancelWaitingTip();
  969. if (res.data.success) {
  970. tempTip.setDuration(3000);
  971. tempTip.showSuccess('已标记为问题件');
  972. _this.orders.forEach(item => {
  973. if (checkData.includes(item.orderno)) item.is_order_issue = true;
  974. });
  975. } else {
  976. if (res.data.exitsOrderNos) {
  977. _this.message.checkOrderIssueMessage = res.data.fail_info + res.data.exitsOrderNos;
  978. $("#checkModal").modal('show');
  979. } else {
  980. tempTip.setDuration(3000);
  981. tempTip.show(res.data.fail_info);
  982. }
  983. }
  984. }).catch(function (err) {
  985. tempTip.setDuration(3000);
  986. tempTip.cancelWaitingTip();
  987. tempTip.show('网络链接异常' + err);
  988. })
  989. },
  990. //重置快递获取标记
  991. resetLogisticsGetMark() {
  992. if (checkData.length < 1) {
  993. tempTip.setDuration(3000);
  994. tempTip.showSuccess('未选择任何单号');
  995. return
  996. }
  997. if (!confirm('确定要重置这些单的快递获取标记吗?')) return;
  998. let url = '{{url('order/resetLogisticsGetMark')}}';
  999. let _this = this;
  1000. axios.post(url, {orderno: checkData})
  1001. .then(function (response) {
  1002. if (response.data.success) {
  1003. checkData.forEach(orderno => {
  1004. _this.orders.some(order => {
  1005. if (order.orderno === orderno && order.edisendflag2 === 'W') {
  1006. order.edisendflag2 = "N";
  1007. return true;
  1008. }
  1009. });
  1010. });
  1011. tempTip.setDuration(2000);
  1012. tempTip.showSuccess('重置快递获取标记成功!');
  1013. } else {
  1014. tempTip.setDuration(3000);
  1015. tempTip.show(response.data.data);
  1016. }
  1017. }).catch(function (err) {
  1018. tempTip.setDuration(3000);
  1019. tempTip.show("网络错误:" + err)
  1020. })
  1021. },
  1022. resetInterfaceReturnMark() {
  1023. if (checkData.length < 1) {
  1024. tempTip.setDuration(3000);
  1025. tempTip.showSuccess('未选择任何单号');
  1026. return
  1027. }
  1028. if (!confirm('确定要重置接口回传标记吗?')) return;
  1029. let url = '{{url('order/resetInterfaceReturnMark')}}';
  1030. let _this = this;
  1031. axios.post(url, {orderno: checkData}).then(function (response) {
  1032. if (response.data.success) {
  1033. checkData.forEach(orderno => {
  1034. _this.orders.some(order => {
  1035. if (order.orderno === orderno) {
  1036. order.edisendflag = "N";
  1037. return true;
  1038. }
  1039. });
  1040. });
  1041. tempTip.setDuration(2000);
  1042. tempTip.showSuccess('重置接口回传标记成功!');
  1043. } else {
  1044. tempTip.setDuration(5000);
  1045. tempTip.show(response.data.fail_info);
  1046. }
  1047. }).catch(function (err) {
  1048. tempTip.setDuration(3000);
  1049. tempTip.show("网络错误:" + err)
  1050. });
  1051. },
  1052. changeRemark() {
  1053. this.typeId = '';
  1054. this.result_explain = '';
  1055. },
  1056. focusOnModal(e) {
  1057. $(e.target).removeClass('is-invalid');
  1058. },
  1059. isRejectedBillExist() {
  1060. if (checkData.length === 0) {
  1061. tempTip.show('没有勾选记录');
  1062. return
  1063. }
  1064. tempTip.confirm("是否要生成“" + checkData + "”的退货单?", () => {
  1065. let _this = this;
  1066. let arr = [];
  1067. window.tempTip.setDuration(9999);
  1068. window.tempTip.waitingTip("生成中,请稍等......")
  1069. this.orders.forEach(order => {
  1070. if (checkData.includes(order.orderno)) arr.push(order.soreference1);
  1071. });
  1072. axios.post('{{url('order/isRejectedBillExist')}}', {data: arr})
  1073. .then(function (response) {
  1074. if (!response.data.success) {
  1075. tempTip.confirm(response.data.data + ',已存在,是否仍要生成退货单?', function () {
  1076. _this.createRejectedBill();
  1077. window.tempTip.cancelWaitingTip();
  1078. }, function () {
  1079. window.tempTip.cancelWaitingTip();
  1080. });
  1081. return;
  1082. }
  1083. _this.createRejectedBill();
  1084. }).catch(function (error) {
  1085. tempTip.setDuration(3000);
  1086. tempTip.cancelWaitingTip();
  1087. tempTip.show('网络错误:' + error);
  1088. });
  1089. });
  1090. },
  1091. createRejectedBill() {
  1092. let url = '{{url('order/createRejectedBill')}}';
  1093. axios.post(url, {data: checkData})
  1094. .then(res => {
  1095. if (res.data.success) {
  1096. tempTip.cancelWaitingTip();
  1097. tempTip.setDuration(2000);
  1098. tempTip.showSuccess("生成退货单成功!");
  1099. } else {
  1100. tempTip.cancelWaitingTip();
  1101. tempTip.setDuration(3000);
  1102. tempTip.show(res.data.data);
  1103. }
  1104. })
  1105. .catch(err => {
  1106. tempTip.cancelWaitingTip();
  1107. tempTip.setDuration(3000);
  1108. tempTip.show('网络错误:' + err);
  1109. });
  1110. },
  1111. isExistByOrderNos() {
  1112. let orderNos = checkData;
  1113. let data = {orderNos: orderNos};
  1114. let _this = this;
  1115. axios.post("{{url('apiLocal/order/issue/isExistByOrderNo')}}", data).then(function (res) {
  1116. if (res.data.success) {
  1117. _this.getTagOrder(orderNos);
  1118. $("#exampleModal").modal('show')
  1119. } else {
  1120. _this.message.checkOrderIssueMessage = res.data.fail_info
  1121. $("#checkModal").modal('show')
  1122. }
  1123. }).catch(function (error) {
  1124. tempTip.setDuration(3000)
  1125. tempTip.show('网络异常:' + error)
  1126. })
  1127. },
  1128. replaceText(index) {
  1129. this.$set(this.orders[index], "replaceText", true);
  1130. },
  1131. getTagOrder(orderNos) {
  1132. this.tagOrders = [];
  1133. if (orderNos.length === 0) {
  1134. this.tagOrders = [];
  1135. return;
  1136. }
  1137. if (this.orders.length === 0) {
  1138. this.tagOrders = [];
  1139. return;
  1140. }
  1141. for (let i = 0; i < this.orders.length; i++) {
  1142. let order = this.orders[i];
  1143. let orderno = order.orderno;
  1144. if (orderNos.includes(orderno)) {
  1145. this.tagOrders.push(this.orders[i])
  1146. }
  1147. }
  1148. this.setLogisticInfo();
  1149. this.setMerchantInfo();
  1150. },
  1151. setLogisticInfo() {
  1152. let content = ''
  1153. let _this = this
  1154. this.tagOrders.forEach(order => {
  1155. content += _this.getOrderLogisticNumbers(order);
  1156. let tel = order.c_tel2 ? order.c_tel2 : order.c_tel1;
  1157. content += ' ' + order.c_contact + tel + order.c_province + order.c_city + ' ' + order.c_district + order.c_address1 + '\n' + _this.result_explain + "\n"
  1158. })
  1159. this.tagOrder.logisticInfo = content
  1160. },
  1161. setMerchantInfo() {
  1162. let content = ''
  1163. let _this = this
  1164. this.tagOrders.forEach(order => {
  1165. content += order.issuepartyname + ' ' + order.customer_descr_c + ' ' + order.soreference1 + ' ' + _this.getOrderLogisticNumbers(order)
  1166. content += '\n' + _this.result_explain + "\n"
  1167. })
  1168. this.tagOrder.merchantInfo = content
  1169. },
  1170. copyLogisticInfo() {
  1171. this.copyText(this.tagOrder.logisticInfo)
  1172. },
  1173. copyLogisticNumber() {
  1174. let text = "";
  1175. checkData.forEach((code, i) => {
  1176. if (this.picktotraceidMap[code] && this.picktotraceidMap[code].length > 1) {
  1177. this.picktotraceidMap[code].forEach((number, j) => {
  1178. text += number + "\r\n";
  1179. });
  1180. } else {
  1181. this.orders.some(order => {
  1182. if (order.orderno == code) {
  1183. if (order.soreference5) {
  1184. text += order.soreference5 + "\r\n";
  1185. }
  1186. return true;
  1187. }
  1188. });
  1189. }
  1190. });
  1191. text.substring(0, text.lastIndexOf("\r\n", text));
  1192. if (!text) text = " ";
  1193. this.copyText(text)
  1194. },
  1195. copyMerchantInfo() {
  1196. this.copyText(this.tagOrder.merchantInfo)
  1197. },
  1198. copyText(text) {
  1199. try {
  1200. $('#clipboardDiv').text(text).select().focus();
  1201. document.execCommand("Copy");
  1202. tempTip.setIndex(1052)
  1203. tempTip.setDuration(2000)
  1204. tempTip.showSuccess('复制成功')
  1205. } catch (e) {
  1206. tempTip.setIndex(1052)
  1207. tempTip.setDuration(2000)
  1208. tempTip.showSuccess('复制失败:' + e)
  1209. }
  1210. },
  1211. getOrderLogisticNumbers(order) {
  1212. let char = '';
  1213. let picktotraceids = this.picktotraceidMap[order.orderno];
  1214. if ($.type(picktotraceids) === 'array') {
  1215. picktotraceids.forEach(function (picktotraceid, index, array) {
  1216. if (array.length === index + 1) char += picktotraceid;
  1217. else char += picktotraceid + ','
  1218. });
  1219. } else {
  1220. char += order.soreference5
  1221. }
  1222. return char;
  1223. },
  1224. checkWorkOrderOrCreateWorkOrder(){
  1225. window.tempTip.setIndex(1999);
  1226. window.tempTip.waitingTip('校验是否有对应工单');
  1227. this.checkWorkOrder().then(res=>{
  1228. window.tempTip.cancelWaitingTip();
  1229. if (res) {
  1230. window.tempTip.confirm('当前勾选订单已有工单是否查看',()=>{
  1231. this.workOrderInfo = this.workOrderInfos[0];
  1232. this.workOrderIndex = 0;
  1233. $('#work-order-info').modal('show');
  1234. },()=>{
  1235. this.showInterceptModel();
  1236. },'查看','跳过');
  1237. } else {
  1238. this.showInterceptModel();
  1239. }
  1240. }).catch(err=>{
  1241. window.tempTip.cancelWaitingTip();
  1242. })
  1243. },
  1244. showCreateWorkOrder(){
  1245. $("#work-order-info").modal('hide');
  1246. $("#intercept-modal").modal('show');
  1247. },
  1248. showInterceptModel() {
  1249. this.workOrder.grad = 1;
  1250. if (checkData.length < 1) {
  1251. window.tempTip.setDuration(1500);
  1252. window.tempTip.show('未选中任何订单');
  1253. return;
  1254. }
  1255. this.workOrder.orderIssueType = null;
  1256. this.workOrder.price = null;
  1257. this.workOrder.refundImages = [];
  1258. this.workOrder.packageImages = [];
  1259. this.workOrder.commodityImages = [];
  1260. this.workOrder.dealImages = [];
  1261. this.workOrder.remark.info = '';
  1262. this.workOrder.commodities = [];
  1263. this.workOrder.logistic_number = null;
  1264. $("#intercept-modal").modal('show');
  1265. },
  1266. checkOrderIssue(name) { //
  1267. let types = this.orderIssueType.filter(item => {
  1268. return item.name === name;
  1269. });
  1270. if (types.length === 0) return false;
  1271. return this.workOrder.orderIssueType === types[0].id
  1272. },
  1273. pushImagesAndShow(e, images) {
  1274. let map = [];
  1275. for (let i = 0; i < e.target.files.length; i++) {
  1276. let image = e.target.files[i];
  1277. if (this.imageExist(image,images)) {
  1278. map.push(image.name);
  1279. continue;
  1280. }
  1281. let src = window.URL.createObjectURL(image);
  1282. images.push({src: src, file: image});
  1283. }
  1284. e.target.value = '';
  1285. if (map.length === 0)return ;
  1286. window.tempTip.setIndex(1999);
  1287. window.tempTip.show(map.join('\n,')+'图片重复');
  1288. },
  1289. imageExist(image,images) {
  1290. let arr = images.filter(item => {
  1291. return item.file.name === image.name;
  1292. });
  1293. return arr.length > 0;
  1294. },
  1295. spliceImage(i, images) {
  1296. if (!confirm('是否取消选择该图片')) return;
  1297. images.splice(i, 1);
  1298. },
  1299. buildWorkOrder() { // 生成工单
  1300. if (['信息更改', '错漏发', '破损',].includes(this.workOrder.orderIssueType) && checkData.length !== 1) {
  1301. window.tempTip.show('该类型不能批量操作');
  1302. return;
  1303. }
  1304. if ('拦截' === this.workOrder.orderIssueType) {
  1305. this.createInterceptWorkOrder();
  1306. } else if ('信息更改' === this.workOrder.orderIssueType) {
  1307. this.createInformationChangeWorkOrder();
  1308. } else if ('快递丢件' === this.workOrder.orderIssueType) {
  1309. this.createLossWorkOrder();
  1310. } else if ('快递异常' === this.workOrder.orderIssueType) {
  1311. this.createExpressAbnormalWorkOrder();
  1312. } else if ('错漏发' === this.workOrder.orderIssueType) {
  1313. this.createMistakeWorkOrder();
  1314. } else if ('破损' === this.workOrder.orderIssueType) {
  1315. this.createDamagedWorkOrder();
  1316. } else {
  1317. this.createDefaultWorkOrder();
  1318. }
  1319. },
  1320. createInterceptWorkOrder() { // 拦截
  1321. let formData = new FormData();
  1322. checkData.forEach(e=>{
  1323. formData.append('orderNos[]',e);
  1324. });
  1325. formData.append('remark',this.workOrder ? (this.workOrder.remark ? this.workOrder.remark.info : '') : '');
  1326. let url = "{{route('workOrder.interceptApi')}}";
  1327. this.createWorkOrder(formData,url);
  1328. },
  1329. createInformationChangeWorkOrder() { // 信息修改
  1330. let data = this.getCreateWorkOrderData();
  1331. if (data.length > 1){
  1332. window.tempTip.setIndex(1999);
  1333. window.tempTip.show('信息修改仅支持单个订单修改');
  1334. }
  1335. let url = "{{route('workOrder.informationChangeApi')}}";
  1336. this.createWorkOrder(data[0],url);
  1337. },
  1338. createLossWorkOrder(){ // 快递丢件
  1339. let data = this.getCreateWorkOrderData();
  1340. let formData = new FormData();
  1341. formData.append('order_no', data[0]['order_no']);
  1342. formData.append('remark', this.workOrder.remark.info);
  1343. let url = "{{route('workOrder.lossApi')}}";
  1344. this.createWorkOrder(formData,url);
  1345. },
  1346. createExpressAbnormalWorkOrder(){ // 快递异常
  1347. let url = "{{route('workOrder.expressAbnormalApi')}}";
  1348. let data = this.getCreateWorkOrderData();
  1349. let formData = new FormData();
  1350. formData.append('order_no', data[0]['order_no']);
  1351. formData.append('remark', this.workOrder.remark.info);
  1352. let dealImages = this.getImages(this.workOrder.dealImages);
  1353. this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
  1354. this.setFormDataCommodities(formData);
  1355. this.createWorkOrder(formData, url);
  1356. },
  1357. createMistakeWorkOrder() { // 错漏发
  1358. let url = "{{route('workOrder.mistakeApi')}}";
  1359. let data = this.getCreateWorkOrderData();
  1360. let formData = new FormData();
  1361. formData.append('order_no', data[0]['order_no']);
  1362. formData.append('remark', data[0]['remark']);
  1363. formData.append('logistic_number', data[0]['logistic_number']);
  1364. let dealImages = this.getImages(this.workOrder.dealImages);
  1365. this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
  1366. this.setFormDataCommodities(formData);
  1367. this.createWorkOrder(formData, url);
  1368. },
  1369. createDefaultWorkOrder() { // 其他
  1370. let data = this.getCreateWorkOrderData();
  1371. this.createWorkOrder(data);
  1372. },
  1373. createDamagedWorkOrder() { //破损工单创建
  1374. let packageImages = this.getImages(this.workOrder.packageImages); // 外包装破损图片
  1375. let commodityImages = this.getImages(this.workOrder.commodityImages); // 内物破损图片
  1376. let dealImages = this.getImages(this.workOrder.dealImages); // 交易截图
  1377. if (!this.checkDamagedWorkOrder(packageImages,commodityImages,dealImages)) return;
  1378. let formData = this.getDamagedFormData(packageImages,commodityImages,dealImages);
  1379. let url = "{{route('workOrder.damagedApi')}}";
  1380. this.createWorkOrder(formData, url);
  1381. },
  1382. checkWorkOrderImage(packageImages,commodityImages,dealImages) {
  1383. let message = null;
  1384. if (0 === packageImages.length) {
  1385. message = '请选择外包图片';
  1386. } else if (0 === commodityImages.length) {
  1387. message = '请选择内物装破损图片';
  1388. } else if (0 === dealImages.length) {
  1389. message = '请选择交易截图'
  1390. }
  1391. return message;
  1392. },
  1393. getDamagedFormData(packageImages,commodityImages,dealImages){
  1394. let formData = new FormData();
  1395. let data = this.getCreateWorkOrderData();
  1396. formData.append('order_no', data[0]['order_no']);
  1397. formData.append('remark', data[0]['remark']);
  1398. formData.append('logistic_number', data[0]['logistic_number']);
  1399. formData.append('price', this.workOrder.price);
  1400. this.setFormDataImagePrefix(formData,'packageImages',packageImages);
  1401. this.setFormDataImagePrefix(formData,'commodityImages',commodityImages);
  1402. this.setFormDataImagePrefix(formData,'dealImages',dealImages);
  1403. this.setFormDataCommodities(formData);
  1404. return formData;
  1405. },
  1406. setFormDataCommodities(formData){
  1407. this.workOrder.commodities.map(commodity=>{
  1408. let item = {
  1409. sku:commodity.sku,
  1410. amount:commodity.amount,
  1411. commodity_id:commodity['commodity_id'],
  1412. abnormal_type:commodity['abnormal_type'],
  1413. logistic_number:commodity['logistic_number'],
  1414. abnormal_amount:commodity['abnormal_amount'],
  1415. };
  1416. formData.append('commodities[]',JSON.stringify(item)) ;
  1417. });
  1418. },
  1419. setFormDataImagePrefix(formData, prefix, images) {
  1420. images.forEach((item) => {
  1421. formData.append(`${prefix}[]`, item);
  1422. });
  1423. },
  1424. getImages(images) {
  1425. return images.map((item) => {
  1426. return item.file;
  1427. })
  1428. },
  1429. checkDamagedWorkOrder(packageImages,commodityImages,dealImages){
  1430. let message = null;
  1431. if (!this.checkPrice()){
  1432. message = '商品价值需大于0';
  1433. }
  1434. if (!message){
  1435. message = this.checkWorkOrderImage(packageImages,commodityImages,dealImages);
  1436. }
  1437. if (message){
  1438. window.tempTip.setIndex(1999);
  1439. window.tempTip.show(message);
  1440. return false;
  1441. }
  1442. return true;
  1443. },
  1444. checkPrice(){
  1445. return parseInt(this.workOrder.price) !== 0;
  1446. },
  1447. createWorkOrder(data, url) {
  1448. window.tempTip.setIndex(1999);
  1449. window.tempTip.waitingTip('生成工单中');
  1450. window.axios.post(url, data, {'Content-Type': 'multipart/form-data'}).then(res => {
  1451. window.tempTip.cancelWaitingTip();
  1452. if (res.data.success) {
  1453. window.tempTip.showSuccess('工单生成成功');
  1454. $('#intercept-modal').modal('hide');
  1455. this.tagWorkOrders(checkData);
  1456. } else {
  1457. if (res.data.errors){
  1458. for (const resKey in res.data.errors) {
  1459. window.tempTip.show(res.data.errors[resKey]);
  1460. return ;
  1461. }
  1462. }else{
  1463. window.tempTip.show(res.data.message ? res.data.message : '工单创建异常');
  1464. }
  1465. }
  1466. }).catch(err => {
  1467. window.tempTip.cancelWaitingTip();
  1468. window.tempTip.show(err)
  1469. });
  1470. },
  1471. tagWorkOrders(orderNos){
  1472. this.orders.forEach((item)=>{
  1473. if (orderNos.includes(item.orderno)){
  1474. item['is_work_order'] = true;
  1475. }
  1476. })
  1477. },
  1478. clearWorkOrder(){
  1479. this.workOrder.packageImages = [];
  1480. this.workOrder.dealImages = [];
  1481. this.workOrder.commodities = [];
  1482. this.workOrder.price = '';
  1483. this.workOrder.logisticNumber = '';
  1484. this.workOrder.orderIssueType = 0;
  1485. },
  1486. getCreateWorkOrderData() {
  1487. return checkData.map(item => {
  1488. return {
  1489. order_no: item,
  1490. order_issue_type: this.workOrder.orderIssueType,
  1491. remark: this.workOrder.remark.info,
  1492. };
  1493. });
  1494. },
  1495. changeReceiveInfo() {
  1496. let url = '{{url('apiLocal/workOrder/editOrderReceiveInfo')}}';
  1497. let data = {
  1498. order_nos: checkData[0],
  1499. grad: this.grad,
  1500. remake: `${this.remark.name} ${this.remark.phone} ${this.remark.province} ${this.remark.city} ${this.remark.city} ${this.remark.district} ${this.remark.adder}`,
  1501. };
  1502. window.tempTip.setIndex('1999');
  1503. window.axios.post(url, data).then(res => {
  1504. if (res.data.success) {
  1505. window.tempTip.showSuccess('生成修改工单成功');
  1506. $('#intercept-modal').modal('hide');
  1507. } else {
  1508. window.tempTip.show(res.data.message);
  1509. }
  1510. }).catch(err => {
  1511. window.tempTip.show(err);
  1512. });
  1513. },
  1514. manualBack() {
  1515. let _this = this;
  1516. let orders = [];
  1517. let fail = [];
  1518. let isGreater = false;
  1519. const start = new Date(new Date(new Date().toLocaleDateString()).getTime() + 16 * 60 * 60 * 1000 + 30 * 60 * 1000);
  1520. if (checkData.length === 0) {
  1521. tempTip.show('没有勾选记录');
  1522. return;
  1523. }
  1524. _this.orders.forEach(function (order) {
  1525. if (new Date(new Date(order.addtime).getTime()) > start) isGreater = true;
  1526. checkData.forEach(function (checkedId) {
  1527. if (order.orderno === checkedId) {
  1528. if (order.soreference5 //存在快递单号
  1529. && order.releasestatus != 'H' //订单未冻结
  1530. && order.manualflag == 'N' //订单未回传
  1531. && (order.sostatus == '00' ||
  1532. order.sostatus == '10' ||
  1533. order.sostatus == '20' ||
  1534. order.sostatus == '40' ||
  1535. order.sostatus == '50' ||
  1536. order.sostatus == '60' ||
  1537. order.sostatus == '61')//订单状态为 创建订单,部分预配,预配完成,分配完成,部分拣货,拣货完成,或播种完成
  1538. ) {
  1539. orders.push(order.orderno);
  1540. } else {
  1541. fail.push(order.orderno)
  1542. }
  1543. }
  1544. });
  1545. });
  1546. let failText = '';
  1547. fail.forEach(function (item) {
  1548. failText += item + ','
  1549. });
  1550. if (isGreater) {
  1551. if (!confirm('订单中包含16:30以后推送的订单,有超时揽收风险,是否确定操作?')) return;
  1552. } else {
  1553. if (!confirm('提前回传订单将无法取消,是否确定操作?')) return;
  1554. }
  1555. let url = '{{url('order/manualBack')}}';
  1556. window.axios.post(url, {ordernos: orders})
  1557. .then(res => {
  1558. if (res.data.success) {
  1559. _this.orders.forEach(function (order) {
  1560. res.data.successNo.forEach(function (success_item) {
  1561. if (order.orderno == success_item) {
  1562. if (order.sostatus == '00'
  1563. || order.sostatus == '10'
  1564. || order.sostatus == '20') {
  1565. order.ordercodename = '分配完成';
  1566. }
  1567. order.manualflag = 'Y';
  1568. }
  1569. })
  1570. })
  1571. res.data.failNo.forEach(function (item) {
  1572. failText += item + ','
  1573. });
  1574. if (failText.length > 0) {
  1575. failText = failText.substr(0, failText.length - 1);
  1576. }
  1577. window.tempTip.setDuration(4000);
  1578. window.tempTip.showSuccess('回传成功!' + ' 单号:' + failText + '不满足回传条件,系统已自动筛除');
  1579. this.$forceUpdate();
  1580. return;
  1581. }
  1582. window.tempTip.setDuration(3000);
  1583. window.tempTip.show('人工回传失败');
  1584. }).catch(err => {
  1585. window.tempTip.setDuration(3000);
  1586. window.tempTip.show("网络错误:" + err);
  1587. });
  1588. },
  1589. isDB(item) {
  1590. if (item.indexOf('德邦') == -1 || item.indexOf('京东') == -1) return false;
  1591. return true;
  1592. },
  1593. collectUpload(){
  1594. if(checkData.length===0){tempTip.show('没有勾选记录');return;}
  1595. const data = {
  1596. 'orderno': checkData,
  1597. 'strict': false,
  1598. };
  1599. window.axios.post("{{url('order/collectUpload')}}", data).then(res => {
  1600. if (res.data.success) {
  1601. tempTip.showSuccess(res.data.message)
  1602. }else {
  1603. tempTip.show(res.data.error_message);
  1604. }
  1605. });
  1606. },
  1607. fillWorkOrderCommodity(){
  1608. let url = "{{route('order.commodity.getCommoditiesApi')}}";
  1609. let data = {orderNo:checkData[0]};
  1610. window.axios.post(url,data).then(res=>{
  1611. if (res.data.success){
  1612. this.workOrder.commodities = res.data.data;
  1613. } else {
  1614. }
  1615. }).catch(err=>{
  1616. })
  1617. },
  1618. pasteImage(event,imageArray){
  1619. for (let i = 0; i < event.clipboardData.items.length; i++) {
  1620. let item = event.clipboardData.items[i];
  1621. if (item.kind === 'string') continue;
  1622. if (item.type.indexOf('image') === -1) continue;
  1623. if (item.kind === 'file'){
  1624. let blob = item.getAsFile();
  1625. let src = null;
  1626. this.blobToBase64(blob).then(res => {
  1627. src = res;
  1628. imageArray.push({src:src,file:blob});
  1629. });
  1630. }
  1631. }
  1632. event.preventDefault();
  1633. },
  1634. blobToBase64(blob) {
  1635. return new Promise((resolve, reject) => {
  1636. const fileReader = new FileReader();
  1637. fileReader.onload = (e) => {
  1638. resolve(e.target.result);
  1639. };
  1640. fileReader.readAsDataURL(blob);
  1641. fileReader.onerror = () => {
  1642. reject(new Error('blobToBase64 error'));
  1643. };
  1644. });
  1645. },
  1646. checkWorkOrder(){
  1647. return new Promise((resolve, reject)=>{
  1648. let no = checkData;
  1649. let url = '{{route('workOrder.checkApi')}}';
  1650. window.axios.post(url,{no:no}).then(res=>{
  1651. if (res.data.success){
  1652. if (res.data.data.length > 0){
  1653. res.data.data.forEach((e,i)=>{
  1654. this.workOrderInfos[i] = this.conversionWorkOrder(e);
  1655. });
  1656. resolve(true) ;
  1657. } else{
  1658. this.workOrderInfos = [];
  1659. resolve(false);
  1660. }
  1661. } else {
  1662. this.workOrderInfos = [];
  1663. }
  1664. }).catch(err=>{
  1665. reject(err);
  1666. });
  1667. });
  1668. },
  1669. conversionWorkOrder(workOrder){
  1670. return {
  1671. id:workOrder? workOrder.id : '',
  1672. type:workOrder ? (workOrder.issue_type ? workOrder.issue_type.name : '') : '',
  1673. clientCode:workOrder? ( workOrder.order? workOrder.order.client_code : '') : '',
  1674. logistic_numbers:this.getLogisticNumbers(workOrder),
  1675. details:this.getDetails(workOrder),
  1676. commodities:this.getCommodities(workOrder),
  1677. packagesImages:this.getImageList(workOrder.images,'1'),
  1678. commodityImages:this.getImageList(workOrder.images,'2'),
  1679. dealImages:this.getImageList(workOrder.images,'3'),
  1680. refundImages:this.getImageList(workOrder.images,'4'),
  1681. remark:workOrder.remark,
  1682. };
  1683. },
  1684. getLogisticNumbers(workOrder){
  1685. let packages = workOrder? (workOrder.order ? workOrder.order.packages : []) : [] ;
  1686. return packages.map(e=>{return e.logistic_number});
  1687. },
  1688. getDetails(workOrder){
  1689. let details = workOrder ? workOrder.details : [];
  1690. return details.map(e=>{return e;});
  1691. },
  1692. getCommodities(workOrder){
  1693. return (workOrder ? workOrder.commodities : []).map(item=>{
  1694. item.name = item ? ( item.commodity ? item.commodity.name :'') : '';
  1695. return item;
  1696. });
  1697. },
  1698. getImageList(images,type){
  1699. let filePrefix = "{{asset("/storage")}}";
  1700. let imageList = images.filter(e=>{
  1701. return parseInt(e.type) === parseInt(type);
  1702. });
  1703. return imageList.map(e=>{
  1704. return {
  1705. src:filePrefix+(e.upload_file ? e.upload_file.url : '')+'.'+(e.upload_file? e.upload_file.type : ''),
  1706. };
  1707. });
  1708. },
  1709. selectWorkOrderIndex(index){
  1710. if (index < 0)index = this.workOrderInfos.length-1;
  1711. if (index >= this.workOrderInfos.length) index = 0;
  1712. this.workOrderIndex = index;
  1713. this.workOrderInfo = this.workOrderInfos[index];
  1714. },
  1715. showParentWorkOrder(){
  1716. if (parseInt(this.workOrderIndex) === 0) return false;
  1717. return this.workOrderIndex < this.workOrderInfos -1;
  1718. },
  1719. showNextWorkOrder(){
  1720. if (parseInt(this.workOrderIndex) === (this.workOrderInfos.length -1)) return false;
  1721. return this.workOrderIndex < this.workOrderInfos.length -1;
  1722. },
  1723. addWorkOrderCommodity(){
  1724. window.tempTip.setIndex(1999);
  1725. window.tempTip.setDuration(1500);
  1726. let sku = this.$refs['add-commodity-sku'].value;
  1727. let logistic_number = this.$refs['add-commodity-logistic-number'].value;
  1728. let order = this.orders.find(item=>{
  1729. return item.orderno === checkData[0];
  1730. });
  1731. let owner_code = order.owner_code;
  1732. if (logistic_number.trim().length ===0){
  1733. window.tempTip.show('填写快递单号');
  1734. return ;
  1735. }
  1736. this.getCommodity(owner_code,sku).then(res => {
  1737. if (res===null){
  1738. window.tempTip.show('请检查商品条码');
  1739. } else {
  1740. this.workOrder.commodities.push({
  1741. logistic_number:logistic_number,
  1742. commodity_id:res.id,
  1743. name:res.name,
  1744. abnormal_type:"多发",
  1745. amount:0,
  1746. sku:this.$refs['add-commodity-sku'].value,
  1747. abnormal_amount:this.$refs['add-commodity-number'].value,
  1748. });
  1749. this.$refs['add-commodity-logistic-number'].value = "";
  1750. this.$refs['add-commodity-sku'].value = "";
  1751. this.$refs['add-commodity-number'].value = "";
  1752. window.tempTip.showSuccess("添加成功");
  1753. }
  1754. }).catch(err=>{
  1755. window.tempTip.showSuccess("获取商品信息异常");
  1756. });
  1757. },
  1758. getCommodity(owner,code){
  1759. return new Promise((resolve, reject) => {
  1760. let url = "{{route('commodity.getCommodityApi')}}";
  1761. let data = {owner_code:owner,sku:code};
  1762. console.log(data);
  1763. window.axios.post(url,data).then(res=>{
  1764. if (res.data.success){
  1765. resolve(res.data.data);
  1766. } else {
  1767. resolve(null);
  1768. }
  1769. }).catch(err=>{
  1770. reject(null);
  1771. });
  1772. });
  1773. }
  1774. },
  1775. });
  1776. </script>
  1777. @endsection