| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888 |
- @extends('layouts.app')
- @section('title')查询-订单管理@endsection
- @section('content')
- <div class="container-fluid">
- <div style="min-width: 4120px;">{{--4070--}}
- <div id="list" class="d-none">
- <div id="form_div"></div>
- <div class="ml-3 form-inline" id="btn">
- <div class="dropdown">
- <button type="button"
- class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget"
- data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">
- 导出Excel
- </button>
- <div class="dropdown-menu">
- <a class="dropdown-item" @click="orderExport(false)" href="javascript:">导出勾选内容</a>
- <a class="dropdown-item" @click="orderExport(true)" href="javascript:">导出所有页</a>
- </div>
- </div>
- <div class="custom-control custom-checkbox ml-1">
- <input type="checkbox" class="custom-control-input" id="customCheck" name="is_merge"
- v-model="is_merge">
- <label class="custom-control-label" for="customCheck">导出是否格式化</label>
- </div>
- @can('订单管理-批量备注')
- <button @click="modal()" type="button" class="btn btn-sm ml-2 btn-outline-primary">批量备注追加
- </button>@endcan
- @can('订单管理-编辑')
- <span class="btn btn-sm btn-outline-dark tooltipTarget ml-1" @click="freezeAll"
- style="cursor: pointer" title="订单的冻结条件要只局限在“创建订单”,“分配完成”,“拣货完成”,“播种完成”">冻结</span>
- <button type="button" @click="thaw(null,true)"
- class="btn btn-sm btn-outline-danger tooltipTarget ml-1" title="解除已冻结订单"
- style="opacity: 0.7">解冻
- </button>
- <span class="btn btn-sm btn-outline-dark tooltipTarget ml-1" @click="deAllocationAll"
- style="cursor: pointer" title="订单的取消分配条件要只局限在“分配完成”或“部分分配”">取消分配</span>
- <span class="btn btn-sm btn-outline-primary tooltipTarget ml-1" @click="allocation()"
- style="cursor: pointer" title="仅能分配未分配订单">订单分配</span>
- <button type="button" @click="resetLogisticsGetMark()"
- class="btn btn-sm ml-1 btn-outline-success">重置快递获取标记
- </button>
- <button type="button" @click="resetInterfaceReturnMark()"
- class="btn btn-sm ml-1 btn-outline-secondary">重置接口回传标记
- </button>
- @endcan
- @can('订单管理-订单-生成问题件')
- <button @click="orderIssueTag()" type="button" class="btn btn-sm ml-1 btn-outline-primary">
- 标记问题件
- </button>
- @endcan
- @can('订单管理-订单-生成退货单')
- <button class="btn btn-sm btn-outline-dark ml-1" @click="isRejectedBillExist()"
- style="opacity: 0.7">生成退货单
- </button>
- @endcan
- <button class="btn btn-sm ml-1 btn-primary" @click="copyLogisticNumber()">复制快递单号</button>
- @can('订单管理-订单-生成工单')
- <button class="btn btn-sm ml-1 btn-outline-success" @click="checkWorkOrderOrCreateWorkOrder">生成工单</button>
- @endcan
- @can('订单管理-订单-一键回传')
- <button class="btn btn-sm ml-1 btn-success tooltipTarget"
- title="订单一键回传必须满足条件:订单状态为“分配完成,部分拣货,拣货完成,播种完成”;订单未冻结;订单有快递单号"
- @click="manualBack()">一键回传
- </button>
- @endcan
- {{-- @can('订单管理-订单-一键揽收')--}}
- <button class="btn btn-sm ml-1 btn-success tooltipTarget" title="目前仅中通可用,默认重量0.01kg,默认揽收不需要任何条件"
- @click="collectUpload()">一键揽收</button>
- {{-- @endcan--}}
- </div>
- <div class="modal fade " style="top: 20%" id="myModal" tabindex="-1" role="dialog"
- aria-labelledby="myModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
- </button>
- </div>
- <div class="modal-body">
- <input class="form-control" v-model="content" placeholder="注释内容">
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
- <button type="button" @click="batchComments()" class="btn btn-primary">批量备注追加</button>
- </div>
- </div><!-- /.modal-content -->
- </div><!-- /.modal -->
- </div>
- <table class="table table-striped table-bordered table-hover card-body td-min-width-80" id="table">
- <tr v-for="(order,i) in orders" @click="selectedColor(order.orderno)"
- :style="{'background-color': order.orderno==selectedStyle?'#aac7ea':''}">
- <td>
- <input class="checkItem" type="checkbox" :value="order.orderno">
- </td>
- <td class="text-nowrap">
- <span >@{{ i+1 }}</span>
- @can('订单管理-问题件')
- <a :href="'{{url("order/issue/index")}}'+'?orderCode='+order.orderno"
- target="order/issue/index?addtime=15">
- <span v-show="order.is_order_issue" class="badge badge-pill badge-danger">问题件</span>
- </a>
- @else
- <span v-show="order.is_order_issue" class="badge badge-pill badge-danger">问题件</span>
- @endcan
- <br v-show="order.is_order_issue">
- @can('订单管理-工单处理')
- <a :href="'{{url("order/workOrder/index")}}'+'?client_code='+order.soreference1" target="order/workOrder/index">
- <span v-show="order['is_work_order']" class="badge badge-pill badge-primary">工单</span>
- </a>
- @else
- <span v-show="order['is_work_order']" class="badge badge-pill badge-primary">工单</span>
- @endcan
- </td>
- <td class="text-dark font-weight-bold text-nowrap"><span>@{{ order.orderno }}</span></td>
- <td class="text-muted text-nowrap"><span>@{{ order.ordercodename }}</span></td>
- <td class="text-nowrap"><span>@{{ order.addtime }}</span></td>
- <td class="text-nowrap"><span>@{{ order.issuepartyname }}</span></td>
- <td class="text-nowrap"><span>@{{ order.customer_descr_c }}</span></td>
- <td class="text-nowrap"><span>@{{ order.soreference1 }}</span></td>
- <td class="text-muted text-nowrap"><span>@{{ order.carriername }}</span></td>
- <td class="text-nowrap">
- <div v-if="picktotraceidMap[order.orderno] && picktotraceidMap[order.orderno].length>1"
- class="text-center">
- <span v-for="(picktotraceid,key) in picktotraceidMap[order.orderno]"
- v-if="order.is_unfold">
- @{{ isDB(order.carriername) ? (order.code5+'#'+(key+1)) : picktotraceid }}<br>
- </span>
- <button class="btn btn-sm btn-outline-info"
- :style="order.is_unfold ? 'opacity:0.7' : ''" @click="isUnfold(order)">
- <span v-if="order.is_unfold" class="mt-1">收起</span>
- <span v-else>分箱 @{{ picktotraceidMap[order.orderno].length }} 件,展开单号</span>
- </button>
- </div>
- <span v-else v-text="(order.carriername !==null && order.carriername.includes('唯品顺丰')) ? order.code5 : order.soreference5"></span>
- </td>
- <td class="text-muted text-wrap text-letter">
- <div class="text-overflow-warp-200 warp-min-200"
- :class="order.is_encryption ? 'text-danger' : ''"><span
- v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_contact }}</span>
- </div>
- </td>
- <td class="text-muted text-wrap text-letter">
- <div class="text-overflow-warp-200 warp-min-200"
- :class="order.is_encryption ? 'text-danger' : ''"><span
- v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_tel2?order.c_tel2:order.c_tel1 }}</span>
- </div>
- </td>
- <td class="text-nowrap"><span> @{{ order.c_province }}</span></td>
- <td class="text-nowrap"><span> @{{ order.c_city }}</span></td>
- <td class="text-nowrap">
- <div class="text-overflow-warp-200 warp-min-200">@{{ order.c_district }}</div>
- </td>
- <td class="text-muted text-wrap text-letter">
- <div class="text-overflow-warp-200 warp-min-200"
- :class="order.is_encryption ? 'text-danger' : ''"><span
- v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_address1 }}</span>
- </div>
- </td>
- <td class="text-nowrap"><span>@{{ order.waveno }}</span></td>
- <td class="text-nowrap"><span> @{{ order.warehouseid }}</span></td>
- <td class="text-nowrap"><span v-if="order.edisendflag2=='Y'">是</span><span
- v-if="order.edisendflag2=='N'">否</span><span v-if="order.edisendflag2=='W'">错误</span>
- </td>
- <td class="text-nowrap"><span>@{{ order.edisendtime2 }}</span></td>
- <td class="text-center" style="min-width: 900px">
- <div :class="commodities[order.orderno]&&commodities[order.orderno].length==1 ? '' : 'up'"
- :id="'order-'+i">
- <div v-for="oracleDOCOrderDetail in commodities[order.orderno]" class="row">
- <div class="col-2 border border-1">@{{ oracleDOCOrderDetail.sku }}</div>
- <div class="col-2 border border-1">@{{ oracleDOCOrderDetail.alternate_sku1 }}</div>
- <div class="col-2 border border-1" @dblclick.stop="replaceText(i)">
- <div class="w-100"
- :class="order.replaceText ? 'text-overflow-warp-100' : 'text-overflow-replace-100 cursor-pointer'">
- @{{ oracleDOCOrderDetail.descr_c }}
- </div>
- </div>
- <div class="col-1 border border-1">@{{ oracleDOCOrderDetail.qtyordered }}</div>
- <div class="col-2 border border-1">@{{ oracleDOCOrderDetail.lotnum }}</div>
- <div class="col-1 m-0 p-0 border border-1">@{{
- oracleDOCOrderDetail.orderdetailcodename }}
- </div>
- <div class="col-2 border border-1">@{{ oracleDOCOrderDetail.checktime }}</div>
- </div>
- </div>
- <div class="row text-center cursor-pointer"
- v-if="commodities[order.orderno]&&commodities[order.orderno].length>1">
- <b @click="unfold(i)" class="col-12 cursor-pointer" v-if="!upList[i]">共有 @{{
- commodities[order.orderno].length }} 件商品,点击展开</b>
- <b class="col-12" @click="unfold(i)" v-else>点击收起明细</b>
- </div>
- </td>
- <td><span>@{{ order.notes }}</span></td>
- <td><span>@{{ order.manualflag}}</span></td>
- <td><span>@{{ order.erpcancelflag }}</span></td>
- <td><span>@{{ order.picking_print_flag }}</span></td>
- <td><span>@{{ order.edisendflag }}</span></td>
- <td><span>@{{ order.ediremarks2}}</span></td>
- <td>
- @can('订单管理-编辑')
- <button v-if="order.releasestatus!=='H'" @click="freeze(order.orderno,order.waveno)"
- class="btn btn-sm btn-outline-dark text-nowrap"
- :disabled="!(order.ordercodename==='创建订单'||order.ordercodename==='分配完成'||order.ordercodename==='拣货完成'||order.ordercodename==='播种完成')">
- 冻结
- </button>
- <button v-else @click="thaw(order.orderno,false,order)"
- class="btn btn-sm btn-outline-danger text-nowrap"
- :disabled="!(order.ordercodename==='创建订单'||order.ordercodename==='分配完成'||order.ordercodename==='拣货完成'||order.ordercodename==='播种完成')">
- 解冻
- </button>
- @else
- <span>@{{ order.releasestatus }}</span>
- @endcan
- </td>
- <td>
- @can('订单管理-编辑')
- <button v-if="order.sostatus=='40'||'30'"
- @click="deAllocation(order.orderno,order.waveno)"
- class="btn btn-sm btn-outline-dark text-nowrap"
- :disabled="!(order.sostatus==='40'|| order.sostatus==='30')">取消分配
- </button>
- @else
- <span>@{{ order.sostatus }}</span>
- @endcan
- </td>
- </tr>
- </table>
- <button type="button" @click="pageUp()" :readonly="page>1?false:true" class="btn btn-sm "
- :class="page>1?'btn-outline-info':''">上一页
- </button>
- <button type="button" @click="pageDown()" :readonly="maxPage == 0 ? false : (page<maxPage?false:true)"
- class="btn btn-sm m-3"
- :class="maxPage == 0 ? 'btn-outline-info' : (page<maxPage?'btn-outline-info':'')">下一页
- </button>
- <input @keyup.enter="pageSkip($event)" class="form-control-sm ml-3 tooltipTarget" placeholder="此处输入页数"
- title="去往指定页">
- <span class="text-muted m-1">@{{ pagePlaceholder }}</span>
- <span class="text-muted m-1" v-if="maxPage != 0">共 @{{ sum }} 条</span>
- <div class="modal fade " id="checkModal" tabindex="-1" role="dialog" aria-labelledby="checkModalLabel"
- aria-hidden="true">
- <div class="modal-dialog modal-dialog-centered">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title" id="checkModalLabel">标记问题件提示</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"
- @click="changeRemark">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <div class="modal-body">
- <div class="alert" id="alert-message">
- @{{ message.checkOrderIssueMessage }}
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-dismiss="modal"
- @click="message.checkOrderIssueMessage=''">关闭
- </button>
- </div>
- </div>
- </div>
- </div>
- <div class="modal fade " id="exampleModal" tabindex="-1" role="dialog"
- aria-labelledby="exampleModalLabel"
- aria-hidden="true">
- <div class="modal-dialog modal-dialog-centered modal-xl">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title" id="exampleModalLabel">输入问题件信息</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"
- @click="changeRemark">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <div class="modal-body">
- <div class="form-group row m-0 p-0">
- <label class="col-md-1 col-sm-2 text-right">问题类别</label>
- <select name="order_issues_type_id" v-model="typeId" class="form-control col-4"
- id="orderIssueType" @focus="focusOnModal($event)">
- <option value></option>
- <option v-for="type in orderIssueType" :value="type.id">@{{ type.name }}
- </option>
- </select>
- <label class="col-md-1 col-sm-2 text-right">
- 快递
- </label>
- <div class="col-4">
- <textarea class="form-control m-0">@{{ tagOrder.logisticInfo }}</textarea>
- <button type="button" class="btn btn-sm btn-outline-primary"
- @click="copyLogisticInfo">复制
- </button>
- </div>
- </div>
- <div class="form-group row m-0">
- <label class="col-md-1 col-sm-2 text-right">情况说明</label>
- <label for="result_explain"></label>
- <textarea name="result_explain" v-model="result_explain" class="form-control col-4"
- id="result_explain"></textarea>
- <label class="col-md-1 col-sm-2 text-right">
- 商家
- </label>
- <div class="col-4">
- <textarea class="form-control m-0 row">@{{ tagOrder.merchantInfo }}</textarea>
- <button type="button" class="btn btn-sm btn-outline-primary"
- @click="copyMerchantInfo">复制
- </button>
- </div>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal"
- @click="changeRemark">关闭
- </button>
- <button type="button" class="btn btn-sm btn-primary" @click="orderIssueTagSubmit">提交
- </button>
- </div>
- </div>
- </div>
- </div>
- @can('订单管理-订单-生成工单')
- @include('order.index._work_order_modal')
- @include('order.index._work_order_info_modal')
- @endcan
- <textarea id="clipboardDiv" style="opacity:0"></textarea>
- </div>
- </div>
- </div>
- @endsection
- @section('lastScript')
- <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
- <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
- <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
- <script>
- let vue = new Vue({
- el: "#list",
- data: {
- page: Number('{{$page}}'),
- paginate: Number('{{$request['paginate'] ?? 50}}'),
- maxPage: 1,
- sum: 0,
- owners: [
- @foreach($customers as $customer)
- {
- name: '{{$customer->code}}', value: '{{$customer->name}}'
- },
- @endforeach
- ],
- logistics: [
- @foreach($logistics as $logistic)
- {
- name: '{{$logistic->name}}', value: '{{$logistic->name}}'
- },
- @endforeach
- ],
- orders: {!! $orders !!},
- commodities: {!! $commodities !!},
- content: '',
- codes: [
- @foreach($codes as $code)
- {
- name: '{{$code->code}}', value: '{{$code->codename_c}}'
- },
- @endforeach
- ],
- selectedStyle: '',
- picktotraceidMap: {!! $picktotraceids !!},
- pagePlaceholder: "",
- typeId: '',
- result_explain: '',
- orderIssueType: {!! $orderIssueType !!},
- is_merge: false,
- message: {
- checkOrderIssueMessage: '',
- },
- tagOrders: [],
- tagOrder: {
- logisticInfo: '',
- merchantInfo: '',
- },
- upList: {},
- workOrder: {
- types: ['拦截', '快递异常', '信息更改', '错漏发', '破损','快递丢件'],
- orderIssueType: 0,
- grad: 1,
- remark: {
- name: null, // 联系人
- phone: null, // 联系号码
- province: null, // 省
- city: null, // 市
- district: null, // 区
- adder: null, // 详细地址
- info: null,
- },
- packageImages: [], // 外包装图片
- commodityImages: [], // 内物破损图片
- dealImages: [], // 交易截图
- commodities: [],
- logistic_number: null, // 快递单号
- price: null,
- },
- grads: [
- {name: '一般', value: '1'},
- {name: '重要', value: '2'},
- {name: '紧急', value: '3'},
- {name: '重要且紧急', value: '4'},
- ],
- exeSign: {},
- workOrderInfos:[],
- workOrderIndex:null,
- workOrderInfo:{
- id:'',
- type:'',
- clientCode:'',
- logistic_numbers:[],
- detail:{
- price:'',
- return_logistic_number:'',
- reissue_logistic_number:'',
- },
- commodities:[],
- packagesImages:[],
- commodityImages:[],
- dealImages:[],
- refundImages:[],
- remark:'',
- issue_name:'',
- },
- },
- mounted: function () {
- this.initData();
- $(".up").slideUp();
- $(".tooltipTarget").tooltip({'trigger': 'hover'});
- $("#list").removeClass('d-none');
- if (this.orders.length > 0) {
- this.maxPage = Math.ceil(this.orders[0].counted / this.paginate);
- this.sum = this.orders[0].counted;
- }
- if (this.getQueryVariable('alternate_sku1')) {
- this.maxPage = 0;
- this.pagePlaceholder = '当前页数:' + this.page;
- } else {
- this.pagePlaceholder = '当前页数:' + this.page + '/' + this.maxPage;
- }
- let data = [
- [{name: 'codename_c', type: 'select', placeholder: '订单状态', data: this.codes},
- {
- name: 'orderdate_start', type: 'time', tip: ['选择显示日期的起始时间', '选择显示日期的起始时间'],
- rules: {
- date_relevance: {
- date: ['orderdate_start', 'orderdate_end'],
- relevance: 'addtime',
- killing: 'relevance',
- default: [31, 92, 183, 366]
- }
- }
- },
- {name: 'orderno', type: 'input', tip: '可支持多SO号,糊模查找需要在左边打上%符号', placeholder: 'SO号'},
- {
- name: 'carriername',
- type: 'select_multiple_select',
- tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的承运人'],
- placeholder: ['承运人', '定位或多选承运人'],
- data: this.logistics
- },
- {
- name: ['notes', 'addtime'],
- type: 'input_select',
- tip: ['右侧选择查询范围,默认为一月内', '查询范围,范围越短搜索越快'],
- placeholder: ['备注', ''],
- data: [{name: '31', value: '近一月'}, {name: '92', value: '近三月'}, {
- name: '183',
- value: '近半年'
- }, {name: '366', value: '近一年'}, {name: '0', value: '不限'},],
- rules: {
- son: {
- addtime: {
- default: '31',
- required_without_all_if: ['orderdate_start', 'orderdate_end']
- }
- },
- date_relevance: {
- date: ['orderdate_start', 'orderdate_end'],
- relevance: 'addtime',
- killing: 'date',
- default: [31, 92, 183, 366]
- }
- }
- },
- {name: 'issuepartyname', type: 'input', tip: '糊模查找需要在左边打上%符号', placeholder: '店铺名称'},
- {
- name: 'edisendflag2',
- type: 'select',
- tip: '快递获取标记',
- placeholder: '快递获取标记',
- data: [{name: 'Y', value: '是'}, {name: 'N', value: '否'}, {name: 'W', value: '错误'},]
- },
- {
- name: 'edisendflag',
- type: 'select',
- tip: '接口回传标记',
- placeholder: '接口回传标记',
- data: [{name: 'Y', value: 'Y'}, {name: 'N', value: 'N'}, {
- name: 'W',
- value: 'W'
- }, {name: 'R', value: 'R'},]
- }
- ],
- [
- {name: 'codename_c_end', type: 'select', placeholder: '订单状态范围', data: this.codes},
- {
- name: 'orderdate_end', type: 'time', tip: ['选择显示指定日期的结束时间', '选择显示指定日期的结束时间'],
- rules: {
- date_relevance: {
- date: ['orderdate_start', 'orderdate_end'],
- relevance: 'addtime',
- killing: 'relevance',
- default: [31, 92, 183, 366]
- }
- }
- },
- {
- name: 'customerid', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的客户'],
- placeholder: ['货主', '定位或多选货主'], data: this.owners
- },
- {name: 'soreference5', type: 'input', tip: '可支持多快递单号,糊模查找需要在左边打上%符号', placeholder: '多快递单号'},
- {
- name: 'soreference1',
- type: 'input',
- tip: '支持多客户订单号精确和模糊查找,糊模查找需要在右边打上%符号,多单号可用逗号或者空格分隔',
- placeholder: '客户订单号'
- },
- {name: 'waveno', type: 'input', tip: '可支持多波次编号,模糊查找需要在左边打上%的符号', placeholder: '波次编号'},
- {name: 'alternate_sku1', type: 'input', tip: '产品条码,模糊查找需要在左边打上%的符号', placeholder: '产品条码'},
- {name: 'c_contact', type: 'input', tip: '可支持多收货人名称:15天以内模糊搜索,15天以外精确搜索', placeholder: '收货人名称'},
- ],
- [
- {name: 'c_tel2', type: 'input', tip: '收货人电话:15天以内模糊搜索,15天以外精确搜索', placeholder: '收货人电话'},
- {name: 'c_province', type: 'input', tip: '省:15天以内模糊搜索,15天以外精确搜索', placeholder: '省'},
- {name: 'c_city', type: 'input', tip: '市:15天以内模糊搜索,15天以外精确搜索', placeholder: '市'},
- {name: 'c_district', type: 'input', tip: '区:15天以内模糊搜索,15天以外精确搜索', placeholder: '区'},
- {
- name: 'releasestatus',
- type: 'select',
- tip: '是否冻结冻结',
- placeholder: '是否冻结',
- data: [{name: 'H', value: '是'}, {name: '', value: '否'}]
- },
- {name: 'checktime_start', type: 'time', tip: ['选择显示复核时间的起始日期', "选择显示复核时间的起始时间"]},
- {name: 'checktime_end', type: 'time', tip: ['选择显示复核时间的结束日期', '选择显示复核时间的结束时间']},
- {
- name: 'is_display_all',
- type: 'checkbox',
- tip: '是否隐藏装箱完成以后的状态',
- data: [{name: 'ture', value: '隐藏完成状态'}]
- },
- ],
- [
- {
- name: 'restrict_time',
- type: 'select',
- tip: '查询限定时间范围',
- placeholder: '查询时间范围',
- data: [{name: '1', value: '一天内'}, {name: '7', value: '一周内'}, {
- name: "30",
- value: "一月内"
- }, {name: "90", value: "本季度"}]
- },
- {
- name: 'manualflag',
- type: 'select',
- tip: '是否人工回传',
- placeholder: '是否人工回传',
- data: [{name: 'Y', value: '是'}, {name: 'N', value: '否'}]
- },
- /*{name: 'delayedDeliver', type: 'input', tip: 'M:延时发货,填写整数,单位/时', placeholder: '历史延时发货'},*/
- {name: 'presentDelayed', type: 'input', tip: 'M:延时发货,填写整数,单位/时', placeholder: '延时发货'},
- ],
- ];
- this.form = new query({
- el: "#form_div",
- condition: data,
- appendDom: "btn",
- });
- this.form.init();
- let column = [
- {name: 'index', value: '序号', neglect: true},
- {name: 'orderno', value: '编号'},
- {name: 'ordercodename', value: '订单状态'},
- {name: 'addtime', value: '接口下发时间'},
- {name: 'issuepartyname', value: '店铺名称'},
- {name: 'customer_descr_c', value: '客户'},
- {name: 'soreference1', value: '客户订单号'},
- {name: 'carriername', value: '承运人'},
- {name: 'soreference5', value: '快递单号'},
- {name: 'c_contact', value: '收货人名称'},
- {name: 'c_tel2', value: '收货人电话'},
- {name: 'c_province', value: '省'},
- {name: 'c_city', value: '市'},
- {name: 'c_district', value: '区'},
- {name: 'c_address1', value: '收货人地址'},
- {name: 'waveno', value: '波次编号'},
- {name: 'warehouseid', value: '仓库'},
- {name: 'edisendflag2', value: '快递获取标记'},
- {name: 'edisendtime2', value: '快递获取时间'},
- {
- name: "commodity", type: "multi", title: "商品信息", rows: [
- {value: "商品编码", col: "2"},
- {value: "商品条码", col: "2"},
- {value: "商品名称", col: "2"},
- {value: "订单数量", col: "1"},
- {value: "批次号", col: "2"},
- {value: "明细状态", col: "1"},
- {value: "复核时间", col: "2"}
- ]
- },
- {name: 'notes', value: '备注'},
- {name: 'manualflag', value: '人工回传标记'},
- {name: 'erpcancelflag', value: '接口取消标记'},
- {name: 'picking_print_flag', value: '拣货单打印标记'},
- {name: 'edisendflag', value: '接口回传标记'},
- {name: 'ediremarks2', value: '接口回传异常备注'},
- {name: 'update', value: '订单冻结', neglect: true},
- {name: 'remove', value: '取消分配', neglect: true},
- ];
- new Header({
- el: "table",
- name: "order",
- column: column,
- data: this.orders,
- restorationColumn: 'addtime',
- fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
- }).init();
- },
- watch: {
- result_explain: function () {
- this.setLogisticInfo();
- this.setMerchantInfo();
- },
- 'workOrder.orderIssueType':function(newValue){
- if (newValue === null) return;
- if (['破损','错漏发','快递异常'].includes(newValue)){
- this.fillWorkOrderCommodity();
- }
- },
- },
- computed:{
- },
- methods: {
- initData() {
- this.orders.forEach((order) => {
- if (order.c_contact && order.c_contact.length > 50 && order.c_contact.substring(0, 3) === '~Ag') order.is_encryption = true;
- });
- let start = "{{$request["orderdate_start"] ?? ''}}";
- let end = "{{$request["orderdate_end"] ?? ''}}";
- let time = "{{$request["restrict_time"] ?? ''}}";
- if (time)this.changeURLParam("restrict_time", time);
- if (start)this.changeURLParam("orderdate_start", start);
- if (end)this.changeURLParam("orderdate_end", end);
- },
- changeURLParam(name, value) {
- let url = document.URL, resultUrl = ''
- let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
- let r = window.location.search.substr(1).match(reg);
- let replaceText = name + '=' + value;
- if (r != null) {
- let tmp = url.replace(name + '=' + r[2], replaceText);
- resultUrl = (tmp);
- } else {
- if (url.match('[\?]')) {
- resultUrl = url + '&' + replaceText;
- } else {
- resultUrl = url + '?' + replaceText;
- }
- }
- history.replaceState(null, null, resultUrl)
- },
- getQueryVariable(variable) {
- let query = window.location.search.substring(1);
- let vars = query.split("&");
- for (let i = 0; i < vars.length; i++) {
- let pair = vars[i].split("=");
- if (pair[0] == variable) {
- return pair[1];
- }
- }
- return (false);
- },
- pageUp() {
- if (this.page <= 1) return;
- this.href(this.page - 1);
- },
- pageDown() {
- if (this.page >= this.maxPage && this.maxPage !== 0) return;
- this.href(this.page + 1);
- },
- pageSkip(e) {
- if (Number(e.target.value) <= 0 || Number(e.target.value) > this.maxPage) {
- tempTip.setDuration(2000);
- tempTip.show('页数不存在! ');
- return
- }
- this.href(e.target.value);
- },
- href(page) {
- let url = document.URL;
- if (url.indexOf('page=' + this.page) !== -1) {
- url = url.replace("page=" + this.page, "page=" + page);
- } else {
- if (url.indexOf('?') === -1) url += "?page=" + page;
- else url += "&page=" + page;
- }
- window.location.href = url;
- },
- unfold(index) {
- this.$set(this.upList, index, this.upList[index] ? !this.upList[index] : true);
- $("#order-" + index).slideToggle();
- },
- orderExport(checkAllSign) {
- let url = '{{url('order/index/export')}}';
- let token = '{{ csrf_token() }}';
- excelExport(checkAllSign, checkData, url, this.sum, token, {is_merge: this.is_merge});
- },
- modal() {
- $("#myModal").modal('show');
- },
- //批量冻结
- freezeAll: function () {
- let _this = this;
- if (checkData.length === 0) {
- tempTip.show('没有勾选记录');
- return
- }
- if (!confirm("确定要标记所有勾选内容为'冻结'吗")) {
- return;
- }
- axios.post('{{url('order/freezeAll')}}', {checkData: checkData}).then(function (response) {
- if (response.data.success) {
- _this.orders.forEach(function (order) {
- checkData.forEach(function (checkedId) {
- if (order.orderno === checkedId) {
- order.releasestatus = 'H';
- order.waveno = '*';
- }
- });
- });
- tempTip.setDuration(1000);
- tempTip.showSuccess('标记勾选内容为冻结成功');
- } else {
- tempTip.setDuration(2500);
- tempTip.show('标记勾选内容冻结失败,错误:' + response.data.fail_info);
- }
- }).catch(function (e) {
- tempTip.setDuration(2500);
- tempTip.show('标记勾选内容冻结失败,网络连接错误:' + e);
- })
- },
- //订单分配
- allocation() {
- if (this.exeSign.allocation) return;
- if (checkData.length === 0) {
- tempTip.show('没有勾选记录');
- return;
- }
- let arr = [];
- checkData.forEach(no => {
- this.orders.some(order => {
- if (order.orderno === no) {
- let obj = {
- "status": order.sostatus,
- "number": order.soreference5,
- "warehouse": order.warehouseid,
- "code": order.orderno,
- };
- arr.push(obj);
- return true;
- }
- });
- });
- window.tempTip.confirm("确定要分配这些订单吗?", () => {
- this.exeSign.allocation = true;
- axios.post("{{url('order/allocation')}}", {list: arr}).then((res) => {
- tempTip.setDuration(3000);
- this.exeSign.allocation = false;
- switch (res.data.status) {
- case "success":
- tempTip.showSuccess('订单分配成功');
- setTimeout(function () {
- window.location.reload();
- }, 3000);
- break;
- case "fail":
- tempTip.show(res.data.msg);
- break;
- default:
- tempTip.confirm(res.data.msg, function () {
- window.location.reload();
- });
- }
- }).catch((e) => {
- this.exeSign.allocation = false;
- tempTip.setDuration(2500);
- tempTip.show('分配失败,预期之外的错误:' + e);
- })
- })
- },
- //批量取消分配
- deAllocationAll() {
- let _this = this;
- if (checkData.length === 0) {
- tempTip.show('没有勾选记录');
- return
- }
- if (!confirm("确定要所有勾选内容'取消分配'吗")) {
- return;
- }
- axios.post('{{url('order/deAllocationAll')}}', {checkData: checkData}).then(function (response) {
- if (response.data.success) {
- _this.orders.forEach(function (order) {
- checkData.forEach(function (checkedId) {
- if (order.orderno === checkedId) {
- order.sostatus = '00';
- order.waveno = '*';
- }
- });
- });
- tempTip.setDuration(1000);
- tempTip.showSuccess('标记勾选内容取消分配成功');
- window.location.reload();
- } else {
- tempTip.setDuration(2500);
- tempTip.show('标记勾选内容取消分配失败,错误:' + response.data.fail_info);
- }
- }).catch(function (e) {
- tempTip.setDuration(2500);
- tempTip.show('标记勾选内容取消分配失败,网络连接错误:' + e);
- })
- },
- batchComments() {
- let _this = this;
- if (checkData.length < 1 || !this.content) {
- $("#myModal").modal('hide');
- tempTip.setDuration(3000);
- if (checkData.length < 1) tempTip.showSuccess('没有勾选任何记录');
- else tempTip.showSuccess('没有输入任何内容');
- return;
- }
- axios.post('{{url('order/create/batchComments')}}', {checkData: checkData, content: this.content})
- .then(function (response) {
- let sign = [];
- _this.orders.every(function (order) {
- if (sign.length === response.data.length) return false;
- response.data.every(function (data) {
- if (order.orderno === data.orderno) {
- order.notes = data.notes;
- sign.push(order.orderno);
- return false;
- }
- return true;
- });
- return true;
- });
- tempTip.setDuration(3000);
- tempTip.showSuccess('注释完毕!')
- _this.content = '';
- }).catch(function (err) {
- tempTip.setDuration(4000);
- tempTip.show('网络错误:' + err)
- });
- $("#myModal").modal('hide');
- },
- selectedColor(orderno) {
- if (orderno == this.selectedStyle) return;
- this.selectedStyle = orderno;
- },
- freeze(orderno, waveno) {
- if (!confirm('确定要冻结“' + orderno + '”吗?')) return;
- let _this = this;
- axios.post('{{url('order/freeze')}}', {orderno: orderno, waveno: waveno})
- .then(function (response) {
- if (response.data.success) {
- _this.orders.some(function (order) {
- if (order.orderno === orderno) {
- order.releasestatus = 'H';
- order.waveno = '*';
- return true;
- }
- });
- tempTip.setDuration(3000);
- tempTip.showSuccess('订单已被冻结!');
- }
- }).catch(function (err) {
- tempTip.setDuration(3000);
- tempTip.show('网络异常:' + err);
- });
- },
- thaw(orderno = null, is_batch = false, order = null) {
- if (!orderno) orderno = checkData;
- if (!confirm('确定要解冻“' + orderno + '”吗?')) return;
- let _this = this;
- axios.post('{{url('order/thaw')}}', {orderno: orderno})
- .then(function (response) {
- if (response.data.success) {
- if (is_batch) {
- orderno.forEach(order_no => {
- _this.orders.some(function (order) {
- if (order.orderno === order_no) {
- order.releasestatus = 'N';
- return true;
- }
- });
- });
- } else {
- order.releasestatus = 'N';
- }
- tempTip.setDuration(3000);
- tempTip.showSuccess('订单已成功解冻!');
- }
- }).catch(function (err) {
- tempTip.setDuration(3000);
- tempTip.show('网络异常:' + err);
- });
- },
- deAllocation(orderno, waveno) {
- if (!confirm('确定要取消分配“' + orderno + '”吗?')) return;
- let _this = this;
- axios.post('{{url('order/deAllocation')}}', {orderno: orderno, waveno: waveno})
- .then(function (response) {
- if (response.data.success) {
- _this.orders.some(function (order) {
- if (order.orderno === orderno) {
- order.sostatus = '00';
- order.waveno = '*';
- return true;
- }
- });
- tempTip.setDuration(3000);
- tempTip.showSuccess('订单已被取消分配!');
- window.location.reload();
- }
- }).catch(function (err) {
- tempTip.setDuration(3000);
- tempTip.show('网络异常:' + err);
- });
- },
- isUnfold(order) {
- if (!order.is_unfold) {
- this.$set(order, 'is_unfold', true);
- return;
- }
- order.is_unfold = false;
- },
- orderIssueTag() {
- if (checkData.length === 0) {
- tempTip.setDuration(2000);
- tempTip.show('没有勾选记录');
- return;
- }
- this.isExistByOrderNos();
- },
- orderIssueTagSubmit() {
- if (this.typeId === '') {
- $("#orderIssueType").addClass('is-invalid');
- return;
- } else {
- $("#result_explain #result_explain").removeClass('is-invalid');
- $("#exampleModal").modal('hide');
- }
- let _this = this;
- tempTip.setDuration(1999);
- tempTip.waitingTip('处理中,请稍候');
- let data = {orderNos: checkData, typeId: this.typeId, result_explain: this.result_explain};
- axios.post("{{url('apiLocal/order/issue/orderIssueTag')}}", data).then(function (res) {
- tempTip.setDuration(5000);
- tempTip.cancelWaitingTip();
- if (res.data.success) {
- tempTip.setDuration(3000);
- tempTip.showSuccess('已标记为问题件');
- _this.orders.forEach(item => {
- if (checkData.includes(item.orderno)) item.is_order_issue = true;
- });
- } else {
- if (res.data.exitsOrderNos) {
- _this.message.checkOrderIssueMessage = res.data.fail_info + res.data.exitsOrderNos;
- $("#checkModal").modal('show');
- } else {
- tempTip.setDuration(3000);
- tempTip.show(res.data.fail_info);
- }
- }
- }).catch(function (err) {
- tempTip.setDuration(3000);
- tempTip.cancelWaitingTip();
- tempTip.show('网络链接异常' + err);
- })
- },
- //重置快递获取标记
- resetLogisticsGetMark() {
- if (checkData.length < 1) {
- tempTip.setDuration(3000);
- tempTip.showSuccess('未选择任何单号');
- return
- }
- if (!confirm('确定要重置这些单的快递获取标记吗?')) return;
- let url = '{{url('order/resetLogisticsGetMark')}}';
- let _this = this;
- axios.post(url, {orderno: checkData})
- .then(function (response) {
- if (response.data.success) {
- checkData.forEach(orderno => {
- _this.orders.some(order => {
- if (order.orderno === orderno && order.edisendflag2 === 'W') {
- order.edisendflag2 = "N";
- return true;
- }
- });
- });
- tempTip.setDuration(2000);
- tempTip.showSuccess('重置快递获取标记成功!');
- } else {
- tempTip.setDuration(3000);
- tempTip.show(response.data.data);
- }
- }).catch(function (err) {
- tempTip.setDuration(3000);
- tempTip.show("网络错误:" + err)
- })
- },
- resetInterfaceReturnMark() {
- if (checkData.length < 1) {
- tempTip.setDuration(3000);
- tempTip.showSuccess('未选择任何单号');
- return
- }
- if (!confirm('确定要重置接口回传标记吗?')) return;
- let url = '{{url('order/resetInterfaceReturnMark')}}';
- let _this = this;
- axios.post(url, {orderno: checkData}).then(function (response) {
- if (response.data.success) {
- checkData.forEach(orderno => {
- _this.orders.some(order => {
- if (order.orderno === orderno) {
- order.edisendflag = "N";
- return true;
- }
- });
- });
- tempTip.setDuration(2000);
- tempTip.showSuccess('重置接口回传标记成功!');
- } else {
- tempTip.setDuration(5000);
- tempTip.show(response.data.fail_info);
- }
- }).catch(function (err) {
- tempTip.setDuration(3000);
- tempTip.show("网络错误:" + err)
- });
- },
- changeRemark() {
- this.typeId = '';
- this.result_explain = '';
- },
- focusOnModal(e) {
- $(e.target).removeClass('is-invalid');
- },
- isRejectedBillExist() {
- if (checkData.length === 0) {
- tempTip.show('没有勾选记录');
- return
- }
- tempTip.confirm("是否要生成“" + checkData + "”的退货单?", () => {
- let _this = this;
- let arr = [];
- window.tempTip.setDuration(9999);
- window.tempTip.waitingTip("生成中,请稍等......")
- this.orders.forEach(order => {
- if (checkData.includes(order.orderno)) arr.push(order.soreference1);
- });
- axios.post('{{url('order/isRejectedBillExist')}}', {data: arr})
- .then(function (response) {
- if (!response.data.success) {
- tempTip.confirm(response.data.data + ',已存在,是否仍要生成退货单?', function () {
- _this.createRejectedBill();
- window.tempTip.cancelWaitingTip();
- }, function () {
- window.tempTip.cancelWaitingTip();
- });
- return;
- }
- _this.createRejectedBill();
- }).catch(function (error) {
- tempTip.setDuration(3000);
- tempTip.cancelWaitingTip();
- tempTip.show('网络错误:' + error);
- });
- });
- },
- createRejectedBill() {
- let url = '{{url('order/createRejectedBill')}}';
- axios.post(url, {data: checkData})
- .then(res => {
- if (res.data.success) {
- tempTip.cancelWaitingTip();
- tempTip.setDuration(2000);
- tempTip.showSuccess("生成退货单成功!");
- } else {
- tempTip.cancelWaitingTip();
- tempTip.setDuration(3000);
- tempTip.show(res.data.data);
- }
- })
- .catch(err => {
- tempTip.cancelWaitingTip();
- tempTip.setDuration(3000);
- tempTip.show('网络错误:' + err);
- });
- },
- isExistByOrderNos() {
- let orderNos = checkData;
- let data = {orderNos: orderNos};
- let _this = this;
- axios.post("{{url('apiLocal/order/issue/isExistByOrderNo')}}", data).then(function (res) {
- if (res.data.success) {
- _this.getTagOrder(orderNos);
- $("#exampleModal").modal('show')
- } else {
- _this.message.checkOrderIssueMessage = res.data.fail_info
- $("#checkModal").modal('show')
- }
- }).catch(function (error) {
- tempTip.setDuration(3000)
- tempTip.show('网络异常:' + error)
- })
- },
- replaceText(index) {
- this.$set(this.orders[index], "replaceText", true);
- },
- getTagOrder(orderNos) {
- this.tagOrders = [];
- if (orderNos.length === 0) {
- this.tagOrders = [];
- return;
- }
- if (this.orders.length === 0) {
- this.tagOrders = [];
- return;
- }
- for (let i = 0; i < this.orders.length; i++) {
- let order = this.orders[i];
- let orderno = order.orderno;
- if (orderNos.includes(orderno)) {
- this.tagOrders.push(this.orders[i])
- }
- }
- this.setLogisticInfo();
- this.setMerchantInfo();
- },
- setLogisticInfo() {
- let content = ''
- let _this = this
- this.tagOrders.forEach(order => {
- content += _this.getOrderLogisticNumbers(order);
- let tel = order.c_tel2 ? order.c_tel2 : order.c_tel1;
- content += ' ' + order.c_contact + tel + order.c_province + order.c_city + ' ' + order.c_district + order.c_address1 + '\n' + _this.result_explain + "\n"
- })
- this.tagOrder.logisticInfo = content
- },
- setMerchantInfo() {
- let content = ''
- let _this = this
- this.tagOrders.forEach(order => {
- content += order.issuepartyname + ' ' + order.customer_descr_c + ' ' + order.soreference1 + ' ' + _this.getOrderLogisticNumbers(order)
- content += '\n' + _this.result_explain + "\n"
- })
- this.tagOrder.merchantInfo = content
- },
- copyLogisticInfo() {
- this.copyText(this.tagOrder.logisticInfo)
- },
- copyLogisticNumber() {
- let text = "";
- checkData.forEach((code, i) => {
- if (this.picktotraceidMap[code] && this.picktotraceidMap[code].length > 1) {
- this.picktotraceidMap[code].forEach((number, j) => {
- text += number + "\r\n";
- });
- } else {
- this.orders.some(order => {
- if (order.orderno == code) {
- if (order.soreference5) {
- text += order.soreference5 + "\r\n";
- }
- return true;
- }
- });
- }
- });
- text.substring(0, text.lastIndexOf("\r\n", text));
- if (!text) text = " ";
- this.copyText(text)
- },
- copyMerchantInfo() {
- this.copyText(this.tagOrder.merchantInfo)
- },
- copyText(text) {
- try {
- $('#clipboardDiv').text(text).select().focus();
- document.execCommand("Copy");
- tempTip.setIndex(1052)
- tempTip.setDuration(2000)
- tempTip.showSuccess('复制成功')
- } catch (e) {
- tempTip.setIndex(1052)
- tempTip.setDuration(2000)
- tempTip.showSuccess('复制失败:' + e)
- }
- },
- getOrderLogisticNumbers(order) {
- let char = '';
- let picktotraceids = this.picktotraceidMap[order.orderno];
- if ($.type(picktotraceids) === 'array') {
- picktotraceids.forEach(function (picktotraceid, index, array) {
- if (array.length === index + 1) char += picktotraceid;
- else char += picktotraceid + ','
- });
- } else {
- char += order.soreference5
- }
- return char;
- },
- checkWorkOrderOrCreateWorkOrder(){
- window.tempTip.setIndex(1999);
- window.tempTip.waitingTip('校验是否有对应工单');
- this.checkWorkOrder().then(res=>{
- window.tempTip.cancelWaitingTip();
- if (res) {
- window.tempTip.confirm('当前勾选订单已有工单是否查看',()=>{
- this.workOrderInfo = this.workOrderInfos[0];
- this.workOrderIndex = 0;
- $('#work-order-info').modal('show');
- },()=>{
- this.showInterceptModel();
- },'查看','重新生成工单');
- } else {
- this.showInterceptModel();
- }
- }).catch(err=>{
- window.tempTip.cancelWaitingTip();
- })
- },
- showCreateWorkOrder(){
- $("#work-order-info").modal('hide');
- $("#intercept-modal").modal('show');
- },
- showInterceptModel() {
- this.workOrder.grad = 1;
- if (checkData.length < 1) {
- window.tempTip.setDuration(1500);
- window.tempTip.show('未选中任何订单');
- return;
- }
- this.workOrder.orderIssueType = null;
- this.workOrder.price = null;
- this.workOrder.refundImages = [];
- this.workOrder.packageImages = [];
- this.workOrder.commodityImages = [];
- this.workOrder.dealImages = [];
- this.workOrder.remark.info = '';
- this.workOrder.commodities = [];
- this.workOrder.logistic_number = null;
- $("#intercept-modal").modal('show');
- },
- checkOrderIssue(name) { //
- let types = this.orderIssueType.filter(item => {
- return item.name === name;
- });
- if (types.length === 0) return false;
- return this.workOrder.orderIssueType === types[0].id
- },
- pushImagesAndShow(e, images) {
- let map = [];
- for (let i = 0; i < e.target.files.length; i++) {
- let image = e.target.files[i];
- if (this.imageExist(image,images)) {
- map.push(image.name);
- continue;
- }
- let src = window.URL.createObjectURL(image);
- images.push({src: src, file: image});
- }
- e.target.value = '';
- if (map.length === 0)return ;
- window.tempTip.setIndex(1999);
- window.tempTip.show(map.join('\n,')+'图片重复');
- },
- imageExist(image,images) {
- let arr = images.filter(item => {
- return item.file.name === image.name;
- });
- return arr.length > 0;
- },
- spliceImage(i, images) {
- if (!confirm('是否取消选择该图片')) return;
- images.splice(i, 1);
- },
- buildWorkOrder() { // 生成工单
- if (['信息更改', '错漏发', '破损','拦截'].includes(this.workOrder.orderIssueType) && checkData.length !== 1) {
- window.tempTip.show('该类型不能批量操作');
- return;
- }
- if ('拦截' === this.workOrder.orderIssueType) {
- this.createInterceptWorkOrder();
- } else if ('信息更改' === this.workOrder.orderIssueType) {
- this.createInformationChangeWorkOrder();
- } else if ('快递丢件' === this.workOrder.orderIssueType) {
- this.createLossWorkOrder();
- } else if ('快递异常' === this.workOrder.orderIssueType) {
- this.createExpressAbnormalWorkOrder();
- } else if ('错漏发' === this.workOrder.orderIssueType) {
- this.createMistakeWorkOrder();
- } else if ('破损' === this.workOrder.orderIssueType) {
- this.createDamagedWorkOrder();
- } else {
- this.createDefaultWorkOrder();
- }
- },
- createInterceptWorkOrder() { // 拦截
- let formData = new FormData();
- formData.append('orderNos',checkData[0]);
- formData.append('remark',this.workOrder ? (this.workOrder.remark ? this.workOrder.remark.info : '') : '');
- let url = "{{route('workOrder.intercept.storeApi')}}";
- this.createWorkOrder(formData,url);
- },
- createInformationChangeWorkOrder() { // 信息修改
- let data = this.getCreateWorkOrderData();
- if (data.length > 1){
- window.tempTip.setIndex(1999);
- window.tempTip.show('信息修改仅支持单个订单修改');
- }
- let url = "{{route('workOrder.informationChange.storeApi')}}";
- this.createWorkOrder(data[0],url);
- },
- createLossWorkOrder(){ // 快递丢件
- let data = this.getCreateWorkOrderData();
- let formData = new FormData();
- formData.append('order_no', data[0]['order_no']);
- formData.append('remark', this.workOrder.remark.info);
- let url = "{{route('workOrder.loss.storeApi')}}";
- this.createWorkOrder(formData,url);
- },
- createExpressAbnormalWorkOrder(){ // 快递异常
- if (!this.checkExpressAbnormalWorkOrder()) return;
- let data = this.getCreateWorkOrderData();
- let formData = new FormData();
- formData.append('order_no', data[0]['order_no']);
- formData.append('remark', this.workOrder.remark ? this.workOrder.remark.info : '');
- let dealImages = this.getImages(this.workOrder.dealImages);
- this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
- this.setFormDataCommodities(formData);
- let url = "{{route('workOrder.expressAbnormal.storeApi')}}";
- this.createWorkOrder(formData, url);
- },
- createMistakeWorkOrder() { // 错漏发
- let data = this.getCreateWorkOrderData();
- let formData = new FormData();
- formData.append('order_no', data[0]['order_no']);
- formData.append('remark', data[0]['remark']);
- formData.append('logistic_number', data[0]['logistic_number']);
- let dealImages = this.getImages(this.workOrder.dealImages);
- this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
- this.setFormDataCommodities(formData);
- let url = "{{route('workOrder.mistake.storeApi')}}";
- this.createWorkOrder(formData, url);
- },
- createDefaultWorkOrder() { // 其他
- let data = this.getCreateWorkOrderData();
- this.createWorkOrder(data);
- },
- createDamagedWorkOrder() { //破损工单创建
- let packageImages = this.getImages(this.workOrder.packageImages); // 外包装破损图片
- let commodityImages = this.getImages(this.workOrder.commodityImages); // 内物破损图片
- let dealImages = this.getImages(this.workOrder.dealImages); // 交易截图
- if (!this.checkDamagedWorkOrder(packageImages,commodityImages,dealImages)) return;
- let formData = this.getDamagedFormData(packageImages,commodityImages,dealImages);
- let url = "{{route('workOrder.damage.storeApi')}}";
- this.createWorkOrder(formData, url);
- },
- checkWorkOrderImage(packageImages,commodityImages,dealImages) {
- let message = null;
- if (0 === packageImages.length) {
- message = '请选择外包图片';
- } else if (0 === commodityImages.length) {
- message = '请选择内物装破损图片';
- } else if (0 === dealImages.length) {
- message = '请选择交易截图'
- }
- return message;
- },
- getDamagedFormData(packageImages,commodityImages,dealImages){
- let formData = new FormData();
- let data = this.getCreateWorkOrderData();
- formData.append('order_no', data[0]['order_no']);
- formData.append('remark', data[0]['remark']);
- formData.append('logistic_number', data[0]['logistic_number']);
- formData.append('price', this.workOrder.price);
- this.setFormDataImagePrefix(formData,'packageImages',packageImages);
- this.setFormDataImagePrefix(formData,'commodityImages',commodityImages);
- this.setFormDataImagePrefix(formData,'dealImages',dealImages);
- this.setFormDataCommodities(formData);
- return formData;
- },
- setFormDataCommodities(formData){
- this.workOrder.commodities.map(commodity=>{
- let item = {
- sku:commodity.sku,
- amount:commodity.amount,
- commodity_id:commodity['commodity_id'],
- logistic_number:commodity['logistic_number'],
- abnormal_amount:commodity['abnormal_amount'],
- abnormal_type:commodity['abnormal_type'],
- price:commodity['price'],
- };
- formData.append('commodities[]',JSON.stringify(item)) ;
- });
- },
- setFormDataImagePrefix(formData, prefix, images) {
- images.forEach((item) => {
- formData.append(`${prefix}[]`, item);
- });
- },
- getImages(images) {
- return images.map((item) => {
- return item.file;
- })
- },
- checkDamagedWorkOrder(packageImages,commodityImages,dealImages){
- let message = null;
- if (!this.checkPrice()){
- message = '商品价值需大于0';
- }
- if (!message){
- message = this.checkWorkOrderImage(packageImages,commodityImages,dealImages);
- }
- let filter = this.workOrder.commodities.filter(e=>{
- return Number(e.price) <=0 || Number(e.abnormal_amount) <= 0;
- })
- if (filter.length > 0){
- message = '破损商品的数量和价格不能为0';
- }
- if (message){
- window.tempTip.setIndex(1999);
- window.tempTip.show(message);
- return false;
- }
- return true;
- },
- checkPrice(){
- return parseInt(this.workOrder.price) !== 0;
- },
- createWorkOrder(data, url) {
- window.tempTip.setIndex(1999);
- window.tempTip.waitingTip('生成工单中');
- window.axios.post(url, data, {'Content-Type': 'multipart/form-data'}).then(res => {
- window.tempTip.cancelWaitingTip();
- if (res.data.success) {
- window.tempTip.showSuccess('工单生成成功');
- $('#intercept-modal').modal('hide');
- this.tagWorkOrders(checkData);
- } else {
- if (res.data.errors){
- for (const resKey in res.data.errors) {
- window.tempTip.show(res.data.errors[resKey]);
- return ;
- }
- }else{
- window.tempTip.show(res.data.message ? res.data.message : '工单创建异常');
- }
- }
- }).catch(err => {
- window.tempTip.cancelWaitingTip();
- window.tempTip.show(err)
- });
- },
- tagWorkOrders(orderNos){
- this.orders.forEach((item)=>{
- if (orderNos.includes(item.orderno)){
- item['is_work_order'] = true;
- }
- })
- },
- clearWorkOrder(){
- this.workOrder.packageImages = [];
- this.workOrder.dealImages = [];
- this.workOrder.commodities = [];
- this.workOrder.price = '';
- this.workOrder.logisticNumber = '';
- this.workOrder.orderIssueType = 0;
- },
- getCreateWorkOrderData() {
- return checkData.map(item => {
- return {
- order_no: item,
- order_issue_type: this.workOrder.orderIssueType,
- remark: this.workOrder.remark.info,
- };
- });
- },
- changeReceiveInfo() {
- let url = '{{url('apiLocal/workOrder/editOrderReceiveInfo')}}';
- let data = {
- order_nos: checkData[0],
- grad: this.grad,
- remake: `${this.remark.name} ${this.remark.phone} ${this.remark.province} ${this.remark.city} ${this.remark.city} ${this.remark.district} ${this.remark.adder}`,
- };
- window.tempTip.setIndex('1999');
- window.axios.post(url, data).then(res => {
- if (res.data.success) {
- window.tempTip.showSuccess('生成修改工单成功');
- $('#intercept-modal').modal('hide');
- } else {
- window.tempTip.show(res.data.message);
- }
- }).catch(err => {
- window.tempTip.show(err);
- });
- },
- manualBack() {
- let _this = this;
- let orders = [];
- let fail = [];
- let isGreater = false;
- const start = new Date(new Date(new Date().toLocaleDateString()).getTime() + 16 * 60 * 60 * 1000 + 30 * 60 * 1000);
- if (checkData.length === 0) {
- tempTip.show('没有勾选记录');
- return;
- }
- _this.orders.forEach(function (order) {
- if (new Date(new Date(order.addtime).getTime()) > start) isGreater = true;
- checkData.forEach(function (checkedId) {
- if (order.orderno === checkedId) {
- if (order.soreference5 //存在快递单号
- && order.releasestatus != 'H' //订单未冻结
- && order.manualflag == 'N' //订单未回传
- && (order.sostatus == '00' ||
- order.sostatus == '10' ||
- order.sostatus == '20' ||
- order.sostatus == '40' ||
- order.sostatus == '50' ||
- order.sostatus == '60' ||
- order.sostatus == '61')//订单状态为 创建订单,部分预配,预配完成,分配完成,部分拣货,拣货完成,或播种完成
- ) {
- orders.push(order.orderno);
- } else {
- fail.push(order.orderno)
- }
- }
- });
- });
- let failText = '';
- fail.forEach(function (item) {
- failText += item + ','
- });
- if (isGreater) {
- if (!confirm('订单中包含16:30以后推送的订单,有超时揽收风险,是否确定操作?')) return;
- } else {
- if (!confirm('提前回传订单将无法取消,是否确定操作?')) return;
- }
- let url = '{{url('order/manualBack')}}';
- window.axios.post(url, {ordernos: orders})
- .then(res => {
- if (res.data.success) {
- _this.orders.forEach(function (order) {
- res.data.successNo.forEach(function (success_item) {
- if (order.orderno == success_item) {
- if (order.sostatus == '00'
- || order.sostatus == '10'
- || order.sostatus == '20') {
- order.ordercodename = '分配完成';
- }
- order.manualflag = 'Y';
- }
- })
- })
- res.data.failNo.forEach(function (item) {
- failText += item + ','
- });
- if (failText.length > 0) {
- failText = failText.substr(0, failText.length - 1);
- }
- window.tempTip.setDuration(4000);
- window.tempTip.showSuccess('回传成功!' + ' 单号:' + failText + '不满足回传条件,系统已自动筛除');
- this.$forceUpdate();
- return;
- }
- window.tempTip.setDuration(3000);
- window.tempTip.show('人工回传失败');
- }).catch(err => {
- window.tempTip.setDuration(3000);
- window.tempTip.show("网络错误:" + err);
- });
- },
- isDB(item) {
- if (item.indexOf('德邦') == -1 || item.indexOf('京东') == -1) return false;
- return true;
- },
- collectUpload(){
- if(checkData.length===0){tempTip.show('没有勾选记录');return;}
- const data = {
- 'orderno': checkData,
- 'strict': false,
- };
- window.axios.post("{{url('order/collectUpload')}}", data).then(res => {
- if (res.data.success) {
- tempTip.showSuccess(res.data.message)
- }else {
- tempTip.show(res.data.error_message);
- }
- });
- },
- fillWorkOrderCommodity(){
- let url = "{{route('order.commodity.getCommoditiesApi')}}";
- let data = {orderNo:checkData[0]};
- window.axios.post(url,data).then(res=>{
- if (res.data.success){
- let commodities = res.data.data.map(item=>{
- item.abnormal_amount = item.amount;
- item.abnormal_type = this.workOrder.orderIssueType === '错漏发' ? '未错漏发' : '';
- item.price = 0;
- return item;
- });
- let index = 0;
- let logistic_number = commodities[0]['logistic_number'];
- let count = 0;
- for(let i = 0; i < commodities.length;i++){
- let cur_logistic_number = commodities[i]['logistic_number'];
- if (i === commodities.length - 1 && cur_logistic_number === logistic_number){
- count ++;
- commodities[index]['count'] = count;
- break;
- }
- if (logistic_number === cur_logistic_number){
- count++;
- } else if (logistic_number !== cur_logistic_number){
- commodities[index]['count'] = count;
- index = i;
- count = 1;
- }
- if (i === commodities.length - 1){
- commodities[index]['count'] = count;
- }
- }
- this.workOrder.commodities = commodities;
- } else {
- }
- }).catch(err=>{
- })
- },
- pasteImage(event,imageArray){
- for (let i = 0; i < event.clipboardData.items.length; i++) {
- let item = event.clipboardData.items[i];
- if (item.kind === 'string') continue;
- if (item.type.indexOf('image') === -1) continue;
- if (item.kind === 'file'){
- let blob = item.getAsFile();
- let src = null;
- this.blobToBase64(blob).then(res => {
- src = res;
- imageArray.push({src:src,file:blob});
- });
- }
- }
- event.preventDefault();
- },
- blobToBase64(blob) {
- return new Promise((resolve, reject) => {
- const fileReader = new FileReader();
- fileReader.onload = (e) => {
- resolve(e.target.result);
- };
- fileReader.readAsDataURL(blob);
- fileReader.onerror = () => {
- reject(new Error('blobToBase64 error'));
- };
- });
- },
- checkWorkOrder(){
- return new Promise((resolve, reject)=>{
- let no = checkData;
- let url = '{{route('workOrder.checkApi')}}';
- window.axios.post(url,{no:no}).then(res=>{
- if (res.data.success){
- this.workOrderInfos = [];
- res.data.data.forEach(e=>{
- let array = this.conversionWorkOrder(e);
- this.workOrderInfos.push(...array);
- });
- if (this.workOrderInfos.length>0)resolve(true) ;
- else resolve(false);
- } else {
- this.workOrderInfos = [];
- resolve(false);
- }
- }).catch(err=>{
- reject(err);
- });
- });
- },
- conversionWorkOrder(workOrder){
- let items = [];
- workOrder.details.forEach(detail=>{
- let item = this.conversionDetail(detail);
- item.logistic_numbers = this.getLogisticNumbers(workOrder);
- item.clientCode = workOrder.order ? workOrder.order.client_code : '';
- items.push(item);
- });
- return items;
- },
- conversionDetail(detail){
- return {
- type: detail.issue_type ? detail.issue_type.name : '',
- detail:{
- price:detail.price,
- return_logistic_number:detail.return_logistic_number,
- reissue_logistic_number:detail.reissue_logistic_number,
- },
- commodities:this.getCommodities(detail),
- packagesImages:this.getImageList(detail.images,'外包装图片'),
- commodityImages:this.getImageList(detail.images,'内物破碎图片'),
- dealImages:this.getImageList(detail.images,'交易截图'),
- refundImages:this.getImageList(detail.images,'退款成功截图'),
- remark:detail.remark,
- issue_name : detail.issue_type ? detail.issue_type.name : '',
- };
- },
- getLogisticNumbers(workOrder){
- let packages = workOrder? (workOrder.order ? workOrder.order.packages : []) : [] ;
- return packages.map(e=>{return e.logistic_number});
- },
- getDetails(workOrder){
- let details = workOrder ? workOrder.details : [];
- return details.map(e=>{return e;});
- },
- getCommodities(detail){
- return (detail ? detail.commodities : []).map(item=>{
- item.name =item.commodity ? item.commodity.name :'';
- return item;
- });
- },
- getImageList(images,type){
- let filePrefix = "{{asset("/storage")}}";
- let imageList = images.filter(e=>{
- return parseInt(e.type) === parseInt(type);
- });
- return imageList.map(e=>{
- return {
- src:filePrefix+(e.upload_file ? e.upload_file.url : '')+'.'+(e.upload_file? e.upload_file.type : ''),
- };
- });
- },
- selectWorkOrderIndex(index){
- if (index < 0)index = this.workOrderInfos.length-1;
- if (index >= this.workOrderInfos.length) index = 0;
- this.workOrderIndex = index;
- this.workOrderInfo = this.workOrderInfos[index];
- },
- showParentWorkOrder(){
- if (parseInt(this.workOrderIndex) === 0) return false;
- return this.workOrderIndex < this.workOrderInfos -1;
- },
- showNextWorkOrder(){
- if (parseInt(this.workOrderIndex) === (this.workOrderInfos.length -1)) return false;
- return this.workOrderIndex < this.workOrderInfos.length -1;
- },
- addWorkOrderCommodity(){
- window.tempTip.setIndex(1999);
- window.tempTip.setDuration(1500);
- let sku = this.$refs['add-commodity-sku'].value;
- let logistic_number = this.$refs['add-commodity-logistic-number'].value;
- if (logistic_number.trim().length === 0){
- window.tempTip.show('填写快递单号');
- return ;
- }
- let {customerid} = this.orders.find((item)=>{
- return item.orderno === checkData[0];
- });
- this.getCommodity(customerid,sku).then(res => {
- if (res===null){
- window.tempTip.show('请检查商品条码');
- } else {
- this.workOrder.commodities.push({
- logistic_number:logistic_number,
- commodity_id:res.id,
- name:res.name,
- abnormal_type:"错发",
- amount:0,
- sku:this.$refs['add-commodity-sku'].value,
- abnormal_amount:this.$refs['add-commodity-number'].value,
- });
- this.countByCommodities(this.workOrder.commodities);
- this.$refs['add-commodity-logistic-number'].value = "";
- this.$refs['add-commodity-sku'].value = "";
- this.$refs['add-commodity-number'].value = "";
- window.tempTip.showSuccess("添加成功");
- }
- }).catch(err=>{
- window.tempTip.show("获取商品信息异常");
- });
- },
- getCommodity(owner,code){
- return new Promise((resolve, reject) => {
- let url = "{{route('commodity.getCommodityApi')}}";
- let data = {owner_code:owner,sku:code};
- console.log(data);
- window.axios.post(url,data).then(res=>{
- if (res.data.success){
- resolve(res.data.data);
- } else {
- resolve(null);
- }
- }).catch(err=>{
- reject(null);
- });
- });
- },
- computeAbnormalType(item){
- if (this.workOrder.orderIssueType !=='错漏发') return;
- let abnormal_amount = Number(item.abnormal_amount); // 客户实收数量
- let amount = Number(item.amount);
- item.abnormal_type = abnormal_amount === amount ? '未错漏发' : (amount < abnormal_amount ? '多发' : '少发')
- },
- sunPrice(){
- this.workOrder.price = this.workOrder.commodities.reduce((prev,cur)=>{
- return prev + Number(cur.price);
- },0);
- },
- checkExpressAbnormalWorkOrder(){ // 校验 快递异常问题
- window.tempTip.setIndex(1999);
- window.tempTip.setDuration(1500);
- let message = null
- let items = this.workOrder.commodities.filter(item=>{
- return Number(item.abnormal_amount) === 0;
- });
- if (items.length > 0)message = '请填写快递异常数量!';
- if (this.workOrder.dealImages.length === 0) message = '交易截图为必须项!';
- if (message){
- window.tempTip.show(message);
- return false;
- }
- return true;
- },
- countByCommodities(commodities){
- if (commodities.length === 0) return;
- let index = 0;
- let logistic_number = commodities[0]['logistic_number'];
- let count = 0;
- for(let i = 0; i < commodities.length;i++){
- let cur_logistic_number = commodities[i]['logistic_number'];
- if (i === commodities.length - 1 && cur_logistic_number === logistic_number){
- count ++;
- commodities[index]['count'] = count;
- break;
- }
- if (logistic_number === cur_logistic_number){
- count++;
- } else if (logistic_number !== cur_logistic_number){
- commodities[index]['count'] = count;
- index = i;
- count = 1;
- }
- if (i === commodities.length - 1){
- commodities[index]['count'] = count;
- }
- }
- },
- },
- });
- </script>
- @endsection
|