| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- @extends("layouts.app")
- @section('title','处理工单')
- @section("content")
- <div class="container-fluid d-none" id="list">
- <div>
- <div class="">
- <div id="form_div" style="min-width: 1220px;"></div>
- <div class="form-inline mt-1" id="btn">
- @can('订单管理-订单问题件生成')
- <span class="ml-1">
- <button type="button" class="btn btn-outline-dark btn-sm form-control-sm tooltipTarget"
- @click="createOrderIssue(null,false)" style="background: #dad7e8;">生成问题件</button>
- </span>
- @endcan
- @can('订单管理-订单问题件生成')
- <span class="ml-1">
- <button type="button" class="btn btn-outline-primary btn-sm form-control-sm tooltipTarget"
- @click="interceptMessage()">拦截导出</button>
- </span>
- @endcan
- @can('订单管理-订单问题件生成')
- <span class="ml-1">
- <button type="button" class="btn btn-outline-primary btn-sm form-control-sm tooltipTarget"
- @click="modificationMessage()">信息修改导出</button>
- </span>
- @endcan
- </div>
- <div>
- <table class="table table-sm table-striped table-hover table-bordered td-min-width-80" id="table">
- <tbody class="">
- <template v-for="(item,i) in workOrders">
- <tr @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
- <td>
- <label><input type="checkbox" :value="item.id"></label>
- </td>
- <td class="text-center">
- <span>@{{ i+1 }}</span>
- <span v-if="item.order && item.order.issue" class="badge badge-primary">问题件</span>
- </td>
- <td class="text-center">
- <template v-if="item.status === '已处理'">
- <h5><span class="badge badge-secondary"
- style="opacity: 0.7">@{{ item.grad }}</span></h5>
- </template>
- <template v-else>
- <h5><span class="badge badge-light" style="opacity: 0.7"
- v-if="item.grad === '一般'">@{{ item.grad }}</span></h5>
- <h5><span class="badge badge-primary" style="opacity: 0.7"
- v-if="item.grad === '重要'">@{{ item.grad }}</span></h5>
- <h5><span class="badge badge-warning" style="opacity: 0.7"
- v-if="item.grad === '紧急'">@{{ item.grad }}</span></h5>
- <h5><span class="badge badge-danger" style="opacity: 0.7"
- v-if="item.grad === '重要且紧急'">@{{ item.grad }}</span></h5>
- </template>
- </td>
- <td>@{{item.type ? item.type.name : '' }}</td>
- <td>@{{item.order ? (item.order.logistic ? item.order.logistic.name : '') : '' }}</td>
- <td class="text-center">
- <template v-if="item.order">
- <template v-if="item.order.packages && item.order.packages.length === 1">
- <p>@{{ item.order.packages[0].logistic_number }}</p>
- </template>
- <template v-else-if="item.order.packages && item.order.packages.length > 0">
- <template v-if="selectOrder === item.order.id">
- <template v-for="(package,index) in item.order.packages">
- @{{ package.logistic_number }}
- </template>
- </template>
- <template v-else>
- <p>@{{ item.order.packages[0].logistic_number }}</p>
- </template>
- <button class="btn btn-sm btn-outline-primary"
- @click="selectOrder = item.order.id">
- 展开
- </button>
- <button class="btn btn-sm btn-outline-primary" @click="selectOrder = null">
- 收起
- </button>
- </template>
- </template>
- </td>
- <td class="text-center">@{{ item.remark }}</td>
- <td class="text-center">@{{ item.status }}</td>
- <td class="text-center">
- <template v-if="item.review_at">
- <div v-if="item.order && item.order.packages">
- <template v-for="package in item.order.packages">
- <template
- v-if="package.transfer_status && package.transfer_status.length > 0">
- <div v-if="selectOrderPackage === package.id">
- <template v-for="transfer in package.transfer_status">
- <p>@{{
- transfer['accept_time']+':'+transfer['accept_address']
- }}</p>
- </template>
- </div>
- <div v-else>
- @{{
- package.transfer_status[0]['accept_time']+':'+package.transfer_status[0]['accept_address']
- }}
- </div>
- <button class="btn btn-sm btn-outline-primary"
- v-if="selectOrderPackage !== package.id"
- @click="selectOrderPackage = package.id">展开
- </button>
- <button class="btn btn-sm btn-outline-primary" v-else
- @click="selectOrderPackage = null">收起
- </button>
- </template>
- </template>
- </div>
- </template>
- </td>
- <td class="text-center">@{{ item.creator.name }}</td>
- <td class="text-center">@{{ item.created_at }}</td>
- <td>@{{ item.reviewer ? item.reviewer.name : ''}}</td>
- <td>@{{ item.review_at }}</td>
- <td class="text-center">
- @can('订单管理-订单问题件生成')
- <template
- v-if="item.type && item.type.name === '订单拦截' && item.status !== '已处理' ">
- <button class="btn btn-sm btn-outline-primary"
- @click="createOrderIssue(item,true)"
- v-if="item.order && item.order.issue === null">
- 生成问题件
- </button>
- </template>
- @endcan
- @can('订单管理-工单处理-审核')
- <button class="btn btn-sm btn-outline-success" v-if="item.status !== '已处理'"
- @click="review(item,i)">
- 审核
- </button>
- @endcan
- </td>
- </tr>
- </template>
- </tbody>
- </table>
- {{ $workOrders->withQueryString()->links() }}
- </div>
- </div>
- </div>
- </div>
- @endsection()
- @section("lastScript")
- <script type="text/javascript" src="{{asset('js/queryForm/queryForm.js')}}"></script>
- <script type="text/javascript" src="{{asset('js/queryForm/header.js')}}"></script>
- <script>
- let list = new Vue({
- el: "#list",
- data: {
- workOrders: {!! $workOrders->toJson() !!}['data'],
- selectTr: null,
- form: null,
- logistics: [
- @foreach($logistics as $logistic)
- {
- name: {{$logistic->id}}, value: '{{$logistic->name}}'
- },
- @endforeach
- ],
- selectOrderPackage: null,
- selectOrder: null,
- },
- mounted() {
- console.log();
- let data = [[
- {name: 'created_at_start', type: 'time', tip: ['工单创建开始日期', '时间']},
- {name: 'created_at_end', type: 'time', tip: ['工单创建结束日期', '时间']},
- {
- name: 'logistic',
- type: 'select_multiple_select',
- data: this.logistics,
- tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的承运商'],
- placeholder: ['承运商', '定位或多选承运商']
- },
- ], [{name: 'review_at_start', type: 'time', tip: ['工单审核开始日期', '时间']},
- {name: 'review_at_end', type: 'time', tip: ['工单审核结束日期', '时间']},
- ]];
- this.form = new query({
- el: '#form_div',
- condition: data,
- });
- this.form.init();
- let column = [
- {name: 'no', value: '序号', neglect: true},
- {name: 'grad', value: '工单等级'},
- {name: 'type', value: '相关类型'},
- {name: 'logisticName', value: '承运商'},
- {name: 'logisticNumber', value: '快递单号'},
- {name: 'workOrderInfo', value: '问题描述'},
- {name: 'status', value: '状态', neglect: true},
- {name: 'Info', value: '物流跟踪信息', neglect: true},
- {name: 'creator', value: '创建人'},
- {name: 'submit_at', value: '提交时间'},
- {name: 'reviewer', value: '审核人'},
- {name: 'review_at', value: '审核时间'},
- {name: 'operation', value: '操作', neglect: true},
- ];
- new Header({
- el: "table",
- name: "area",
- column: column,
- data: this.workOrders,
- fixedTop: ($('#form_div').height()) + 2,
- }).init();
- $("#list").removeClass("d-none");
- },
- created() {
- let self = this;
- $.each(this.workOrders, function (index, workOrder) {
- if (!workOrder.order) return;
- if (!workOrder.order.packages) return;
- self.sortOrder(workOrder);
- });
- },
- methods: {
- sortOrder(workOrder) {
- let self = this;
- if (!workOrder.order) return;
- if (!workOrder.order.packages) return;
- $.each(workOrder.order.packages, function (i, item) {
- self.sortTransfer(item);
- })
- },
- sortTransfer(item) {
- if (!("transfer_status" in item)) return;
- if (item.transfer_status == null || !(item.transfer_status instanceof Array)) return;
- item.transfer_status.sort(function (item1, item2) {
- let date1 = new Date(item1['accept_time']);
- let date2 = new Date(item2['accept_time']);
- if (date1 - date2 > 0) return -1;
- if (date1 - date2 < 0) return 1;
- return 0;
- });
- },
- review(item, i) {
- let url = '{{url('apiLocal/workOrder/review')}}';
- let data = {id: item.id};
- window.axios.post(url, data).then(res => {
- if (res.data.success) {
- this.$set(this.workOrders, i, res.data.data);
- this.sortOrder(res.data.data);
- window.tempTip.showSuccess("审核完成");
- } else {
- window.tempTip.show(res.data.message ? res.data.message : '审核异常');
- }
- }).catch(err => {
- window.tempTip.show(err)
- })
- },
- createOrderIssue(item, tag) { // 生成问题件
- let url = '{{url('apiLocal/workOrder/createOrderIssue')}}';
- let data = {};
- let _this = this;
- if (tag) data.ids = [item.id];
- else data.ids = checkData;
- if (!confirm('是否生成对应的问题件')) return;
- window.axios.post(url, data).then(res => {
- if (res.data.success) {
- if (res.data.data) {
- $.each(res.data.data, (i, data) => {
- $.each(_this.workOrders, (index, item) => {
- if (item.id === data.id) {
- _this.$set(this.workOrders, index, data);
- }
- });
- });
- }
- this.$forceUpdate();
- window.tempTip.showSuccess('已生成对应的问题件');
- } else {
- window.tempTip.show(res.data.message ? res.data.message : '生成问题件异常');
- }
- }).catch(err => {
- window.tempTip.show(err)
- });
- },
- getMessageWorkOrder(){
- let selected = checkData;
- if (!selected){
- window.tempTip.show('未选中任何信息');
- return null;
- }
- return this.workOrders.filter((item) =>{
- return selected.includes(item.id+'');
- });
- },
- interceptMessage() {
- let selectItems = this.getMessageWorkOrder();
- if (selectItems === null )return ;
- let zto_and_sf = '';
- let rest_logistic = '';
- selectItems.forEach(item=>{
- // 中通、顺丰
- if (item.order.logistic.code.includes('SF') ||item.order.logistic.code.includes('ZTO') ){
- item.order.packages.forEach(node=>{
- zto_and_sf += node.logistic_number + '\n';
- });
- } else{
- let item_order_logistic_name = item.order.logistic.name;
- let item_order_adder = item.order.consignee_name + ' '
- + item.order.consignee_phone + ' '
- + item.order.province + ' ' + item.order.city + ' ' + item.order.district + ' ' + item.order.address;
- item.order.packages.forEach(node=>{
- rest_logistic += item_order_logistic_name +' ' + node.logistic_number + ' '+item_order_adder + '——拦截\n';
- });
- }
- });
- let text = zto_and_sf.trim('\n') + '——拦截' + '\n';
- text += rest_logistic;
- this.copyText(text);
- },
- modificationMessage(){
- let selectItems = this.getMessageWorkOrder();
- if (selectItems === null) return ;
- let zto = '';
- let sf = '';
- let rest_logistic = '';
- selectItems.forEach(item=>{
- let logistic_code = item.order.logistic.code;
- item.order.packages.forEach(node=> {
- if (logistic_code.includes('SF')) { // 顺丰订单
- sf += node.logistic_number +' 改信息: ' + item.remark + ',运费到付或月结'+'\n';
- } else if (logistic_code.includes('ZTO')){
- zto += node.logistic_number + ' 改信息' +item.remark+'\n';
- } else {
- }
- });
- });
- },
- copyText(text){
- let ele = document.querySelector('#copy_text');
- if (ele == null ){
- ele = document.createElement("textarea");
- ele.setAttribute('id','copy_text')
- ele.style.opacity=0;
- document.querySelector('body').append(ele);
- }
- try {
- $("#copy_text").text(text).select().focus();
- document.execCommand("Copy");
- tempTip.showSuccess('复制成功')
- } catch (e) {
- tempTip.showSuccess('复制失败:' + e)
- }
- }
- },
- });
- </script>
- @endsection
|