|
|
@@ -26,13 +26,13 @@
|
|
|
class="ml-1 btn btn-outline-dark btn-sm"
|
|
|
@click="copyLogisticNumber()" style="background: #dad7e8;">批量复制单号
|
|
|
</button>
|
|
|
- @can('订单管理-工单处理-宝时编辑')
|
|
|
- <button type="button"
|
|
|
- class="ml-1 btn btn-outline-info btn-sm"
|
|
|
- @click="batchEdit()">批量编辑工单
|
|
|
- </button>
|
|
|
- @endcan
|
|
|
|
|
|
+ @can('订单管理-工单处理-宝时编辑')
|
|
|
+ <button type="button"
|
|
|
+ class="ml-1 btn btn-outline-dark btn-sm"
|
|
|
+ @click="baoShiBatchHandler">宝时批量处理
|
|
|
+ </button>
|
|
|
+ @endcan
|
|
|
@can('订单管理-问题件-编辑')
|
|
|
<button type="button"
|
|
|
class="ml-1 btn btn-outline-dark btn-sm"
|
|
|
@@ -43,7 +43,7 @@
|
|
|
@can('订单管理-工单处理-货主编辑')
|
|
|
<button type="button"
|
|
|
class="ml-1 btn btn-outline-dark btn-sm"
|
|
|
- @click="batchEndWorkOrder">批量完结
|
|
|
+ @click="batchEndWorkOrder">商家批量完结
|
|
|
</button>
|
|
|
@endcan
|
|
|
@can('订单管理-工单处理-承运商编辑')
|
|
|
@@ -52,6 +52,7 @@
|
|
|
@click="logisticBatchHandler">承运商批量处理
|
|
|
</button>
|
|
|
@endcan
|
|
|
+
|
|
|
</div>
|
|
|
<div>
|
|
|
<table class="table table-sm table-striped table-hover table-bordered td-min-width-80 " id="table">
|
|
|
@@ -59,7 +60,7 @@
|
|
|
<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>
|
|
|
+ <label><input name="checkData" type="checkbox" :value="item.id"></label>
|
|
|
|
|
|
<span v-show="isNewProcessedWorkOrder(item)" class="badge text-white bg-primary">
|
|
|
新
|
|
|
@@ -442,21 +443,22 @@
|
|
|
filePrefix: "{{asset("/storage")}}",
|
|
|
dialogShowBaoShiVisible: false, // 宝时编辑
|
|
|
dialogEditBaoShiVisible: false, // 宝时编辑
|
|
|
+ dialogBaoShiBatchHandlerVisible: false, // 宝时批量处理
|
|
|
dialogShowOwnerVisible: false, // 货主编辑
|
|
|
dialogEditOwnerVisible: false, // 货主编辑
|
|
|
dialogShowLogisticVisible: false, // 承运商编辑
|
|
|
dialogEditLogisticVisible: false, // 承运商编辑
|
|
|
dialogLogisticBatchHandlerVisible: false, // 承运商批量处理
|
|
|
dialogShowOrderWorkVisible: false, // 工单详情
|
|
|
- dialogBatchEditBaoShiVisible: false, // 宝时批量处理
|
|
|
- dialogBatchEditOrderIssueLogVisible: false, // 问题件日志
|
|
|
+ dialogBatchEditOrderIssueLogVisible: false, // 问题件日志
|
|
|
batchEditWorkOrder: {
|
|
|
TypeName: '',
|
|
|
process_progress: '',
|
|
|
},
|
|
|
- batchHandlerWorkOrder:{
|
|
|
- issue_type_name:'',
|
|
|
- process_progress:'',
|
|
|
+ batchHandlerWorkOrder: {
|
|
|
+ issue_type_name: '',
|
|
|
+ process_progress: '',
|
|
|
+ prev_process_progress: '',
|
|
|
},
|
|
|
},
|
|
|
computed: {},
|
|
|
@@ -2585,6 +2587,7 @@
|
|
|
this.successTempTip('完结成功');
|
|
|
item.status = "完成";
|
|
|
item.owner_tag = "";
|
|
|
+ $("input:checkbox[name='checkData']").attr("checked",false);
|
|
|
} else {
|
|
|
this.errorTempTip(res.data.message ? res.data.message : '完结工单异常');
|
|
|
}
|
|
|
@@ -2777,84 +2780,6 @@
|
|
|
if (baoShi && bao_shi_tag === '1') return true;
|
|
|
return false;
|
|
|
},
|
|
|
-
|
|
|
- // 批量处理工单
|
|
|
- batchEdit() {
|
|
|
- let editWorkOrders = this.workOrders.filter(e => {
|
|
|
- return checkData.includes(`${e.id}`);
|
|
|
- });
|
|
|
- let editWorkOrder = editWorkOrders.find(e => e);
|
|
|
- let count = editWorkOrders.filter(e => e.status !== editWorkOrder.status || e.current_issue_type !== editWorkOrder.current_issue_type).length;
|
|
|
- if (count > 0) {
|
|
|
- this.errorTempTip('当前勾选工单部分状态,类型不符合');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!['拦截', '信息更改'].includes(editWorkOrder.issue_type_name)) {
|
|
|
- this.errorTempTip('批量处理仅适合拦截、信息更改的工单');
|
|
|
- return;
|
|
|
- }
|
|
|
- this.batchEditWorkOrder = {
|
|
|
- TypeName: editWorkOrder.issue_type_name,
|
|
|
- p_process_progress: editWorkOrder.process_progress,
|
|
|
- process_progress: '',
|
|
|
- };
|
|
|
- this.dialogBatchEditBaoShiVisible = true;
|
|
|
- },
|
|
|
- getEditWorkOrderProcessProgress(batchEditWorkOrder) {
|
|
|
- let {p_process_progress, TypeName} = batchEditWorkOrder;
|
|
|
- let editWorkOrderProcessProgressObj = [{
|
|
|
- name: '拦截', options: {
|
|
|
- success: ['成功已退回,不赔偿', '拦截在途丢件,赔偿'],
|
|
|
- filed: ['无法拦截'],
|
|
|
- },
|
|
|
- }, {
|
|
|
- name: '信息更改', options: {
|
|
|
- success: ['更改成功'],
|
|
|
- filed: ['更改失败'],
|
|
|
- },
|
|
|
- }];
|
|
|
- let processProgressObj = editWorkOrderProcessProgressObj.find(e => TypeName === e.name);
|
|
|
- let {options, name} = processProgressObj;
|
|
|
- let option = [];
|
|
|
- if (name === '拦截') {
|
|
|
- if (p_process_progress === '拦截退回中') option = options.success;
|
|
|
- if (p_process_progress === '拦截失败') option = options.filed;
|
|
|
- } else if (name === '信息更改') {
|
|
|
- if (p_process_progress === '已处理') option = options.success;
|
|
|
- if (p_process_progress === '无法更改') option = options.filed;
|
|
|
- }
|
|
|
- return option;
|
|
|
- },
|
|
|
- batchEditWorkOrderFunc() {
|
|
|
- let {TypeName, process_progress} = this.batchEditWorkOrder;
|
|
|
- if (!process_progress) {
|
|
|
- this.errorTempTip('选择处理结果');
|
|
|
- return;
|
|
|
- }
|
|
|
- let url = null;
|
|
|
- if ("拦截" === TypeName) {
|
|
|
- url = '{{route('workOrder.intercept.baoShi.batchReviewApi')}}';
|
|
|
- } else if ('信息更改' === TypeName) {
|
|
|
- url = '{{route('workOrder.informationChange.baoShi.batchReviewApi')}}'
|
|
|
- }
|
|
|
- let data = {ids: checkData, process_progress: process_progress};
|
|
|
- this.waitingTempTip('处理中');
|
|
|
- window.axios.post(url, data).then(res => {
|
|
|
- window.tempTip.cancelWaitingTip();
|
|
|
- if (res.data.success) {
|
|
|
- this.successTempTip('处理完成,刷新页面展示');
|
|
|
- this.dialogBatchEditBaoShiVisible = false;
|
|
|
- this.workOrders.forEach(e => {
|
|
|
- if (checkData.includes(`${e.id}`)) e.process_progress = process_progress;
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- this.waitingTempTip(res.data.message ? res.data.message : '处理异常');
|
|
|
- }).catch(err => {
|
|
|
- window.tempTip.cancelWaitingTip();
|
|
|
- this.errorTempTip(err);
|
|
|
- });
|
|
|
- },
|
|
|
// 问题件批处理日志
|
|
|
showBatchEditOrderIssueLog() {
|
|
|
if (checkData.length === 0) {
|
|
|
@@ -2949,9 +2874,11 @@
|
|
|
return this.workOrders.filter(e => checkData.includes(`${e.id}`));
|
|
|
},
|
|
|
getItemsStatus(items) {
|
|
|
- let item = items.find(e=>e);
|
|
|
+ let item = items.find(e => e);
|
|
|
return item.status;
|
|
|
},
|
|
|
+
|
|
|
+ // 承运商批量处理
|
|
|
checkDataIsSingleStatus(items) { //校验items内的status是否相同
|
|
|
let status = this.getItemsStatus(items)
|
|
|
if (items.filter(e => e.status !== status).length > 0) {
|
|
|
@@ -2961,7 +2888,7 @@
|
|
|
return true;
|
|
|
},
|
|
|
getItemsIssueTypeName(items) {
|
|
|
- let item = items.find(e=>e);
|
|
|
+ let item = items.find(e => e);
|
|
|
return item.issue_type_name;
|
|
|
},
|
|
|
checkDataIsSingleIssueType(items) {
|
|
|
@@ -2984,6 +2911,10 @@
|
|
|
if (!this.checkDataHasSize()) return;
|
|
|
let selected_items = this.getSelectedWorkOrders();
|
|
|
let issue_type_name = this.getItemsIssueTypeName(selected_items);
|
|
|
+ if (!['拦截','取消拦截','信息更改'].includes(issue_type_name)){
|
|
|
+ this.errorTempTip('批量处理只支持`拦截`,`取消拦截`,`信息更改`');
|
|
|
+ return ;
|
|
|
+ }
|
|
|
if (!this.checkDataIsSingleIssueType(selected_items)) return;
|
|
|
if (!this.checkDataIsSingleStatus(selected_items)) return;
|
|
|
if (!this.checkDataIsLogisticHandler(selected_items)) return;
|
|
|
@@ -3002,57 +2933,174 @@
|
|
|
let item = items.find(e => e.issue_type_name === issue_type_name);
|
|
|
return item ? item.option : [];
|
|
|
},
|
|
|
- logisticBatchHandlerProcess(){
|
|
|
- let {issue_type_name,process_progress} = this.batchHandlerWorkOrder;
|
|
|
+ logisticBatchHandlerProcess() {
|
|
|
+ let {issue_type_name, process_progress} = this.batchHandlerWorkOrder;
|
|
|
if ('拦截' === issue_type_name) {
|
|
|
let url = "{{route("workOrder.intercept.logistic.batchHandlerApi")}}";
|
|
|
let data = {
|
|
|
detail_ids: this.getCheckDetailsIds(),
|
|
|
process_progress: process_progress,
|
|
|
};
|
|
|
- this.logisticBatchHandlerAction(url,data);
|
|
|
+ this.logisticBatchHandlerAction(url, data);
|
|
|
} else if ('取消拦截' === issue_type_name) {
|
|
|
let url = "{{route("workOrder.cancelIntercept.logistic.batchHandlerApi")}}";
|
|
|
let data = {
|
|
|
detail_ids: this.getCheckDetailsIds(),
|
|
|
process_progress: process_progress,
|
|
|
};
|
|
|
- this.logisticBatchHandlerAction(url,data);
|
|
|
+ this.logisticBatchHandlerAction(url, data);
|
|
|
} else if ('信息更改' === issue_type_name) {
|
|
|
- let url ="{{route('workOrder.informationChange.logistic.batchHandlerApi')}}";
|
|
|
+ let url = "{{route('workOrder.informationChange.logistic.batchHandlerApi')}}";
|
|
|
let data = {
|
|
|
detail_ids: this.getCheckDetailsIds(),
|
|
|
process_progress: process_progress,
|
|
|
}
|
|
|
- this.logisticBatchHandlerAction(url,data);
|
|
|
+ this.logisticBatchHandlerAction(url, data);
|
|
|
}
|
|
|
},
|
|
|
logisticBatchHandlerAction(url, data) {
|
|
|
this.waitingTempTip("处理中");
|
|
|
- window.axios.post(url,data).then(res=>{
|
|
|
+ window.axios.post(url, data).then(res => {
|
|
|
window.tempTip.cancelWaitingTip();
|
|
|
- if (res.data.success){
|
|
|
+ if (res.data.success) {
|
|
|
this.successTempTip('修改成功');
|
|
|
this.replaceWorkOrder(res.data.data);
|
|
|
this.dialogLogisticBatchHandlerVisible = false;
|
|
|
return;
|
|
|
}
|
|
|
this.errorTempTip(res.data.message ? res.data.message : '处理异常刷新后重试');
|
|
|
- }).catch(err=>{
|
|
|
+ }).catch(err => {
|
|
|
window.tempTip.cancelWaitingTip();
|
|
|
this.errorTempTip(err);
|
|
|
});
|
|
|
},
|
|
|
- batchUpdateWorkOrderVueData(data){
|
|
|
- this.sortOrder(data);
|
|
|
- data.forEach(e=>{
|
|
|
- let index = this.workOrder.findIndex(workOrder=>`${workOrder.id}` === `${e.id}`);
|
|
|
- if (index){
|
|
|
- this.$set(this.workOrders,index,data);
|
|
|
+
|
|
|
+ // 宝时批量处理
|
|
|
+ checkDataIsBaoShiHandler(items) {
|
|
|
+ let status = this.getItemsStatus(items);
|
|
|
+ if (status !== '宝时终审') {
|
|
|
+ this.errorTempTip('工单的状态不可批量处理')
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ checkDataPrevProcessProgress(items) {
|
|
|
+ let prev_process_progress = this.getPrevProcessProgress(items);
|
|
|
+ let count = items.filter(e => e.process_progress !== prev_process_progress).length;
|
|
|
+ if (count > 0) {
|
|
|
+ this.errorTempTip('工单的状态不一致');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ getPrevProcessProgress(items) {
|
|
|
+ let item = items.find(e => e);
|
|
|
+ return item.process_progress;
|
|
|
+ },
|
|
|
+ baoShiBatchHandler() {
|
|
|
+ if (!this.checkDataHasSize()) return;
|
|
|
+ let selected_items = this.getSelectedWorkOrders();
|
|
|
+ let issue_type_name = this.getItemsIssueTypeName(selected_items);
|
|
|
+ if (!['拦截','取消拦截','信息更改'].includes(issue_type_name)){
|
|
|
+ this.errorTempTip('批量处理只支持`拦截`,`取消拦截`,`信息更改`');
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+ let prev_process_progress = this.getPrevProcessProgress(selected_items);
|
|
|
+ if (!this.checkDataIsBaoShiHandler(selected_items)) return;
|
|
|
+ if (!this.checkDataIsSingleIssueType(selected_items)) return;
|
|
|
+ if (!this.checkDataIsSingleStatus(selected_items)) return;
|
|
|
+ let hasInterceptWorkOrder = selected_items.filter(e => e.issue_type_name === '拦截').length > 0;
|
|
|
+ if (hasInterceptWorkOrder && !this.checkDataPrevProcessProgress(selected_items)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.batchHandlerWorkOrder.issue_type_name = issue_type_name;
|
|
|
+ this.batchHandlerWorkOrder.prev_process_progress = prev_process_progress;
|
|
|
+ this.dialogBaoShiBatchHandlerVisible = true;
|
|
|
+ },
|
|
|
+ getBaoShiBatchHandlerProcessProgress() {
|
|
|
+ let {issue_type_name, prev_process_progress} = this.batchHandlerWorkOrder;
|
|
|
+ let items = [
|
|
|
+ {issue_type_name: '拦截', option: {success: ['成功已退回,不赔偿', '拦截在途丢件,赔偿'], failed: ['无法拦截']}},
|
|
|
+ {issue_type_name: '取消拦截', option: ['已签收', '已退回']},
|
|
|
+ {issue_type_name: '信息更改', option: ['更改成功', '更改失败'],},
|
|
|
+ {issue_type_name: '快递异常', option: ['丢件赔偿', '签收成功']},
|
|
|
+ {issue_type_name: '错漏发', option: ['已补发', '已入库'],},
|
|
|
+ {issue_type_name: '破损', option: ['全部赔偿', '部分赔偿', '不赔偿'],},
|
|
|
+ ];
|
|
|
+ let item = items.find(e => e.issue_type_name === issue_type_name);
|
|
|
+ if (issue_type_name === '拦截') {
|
|
|
+ if (['拦截成功', '已处理', '拦截退回中'].includes(prev_process_progress)) return item.option.success;
|
|
|
+ else if (['拦截失败', '已签收'].includes(prev_process_progress)) return item.option.failed;
|
|
|
+ }
|
|
|
+ return item ? item.option : [];
|
|
|
+ },
|
|
|
+ baoShiBatchHandlerProcess() {
|
|
|
+ let {issue_type_name, process_progress} = this.batchHandlerWorkOrder;
|
|
|
+ if ('拦截' === issue_type_name) {
|
|
|
+ let url = "{{route("workOrder.intercept.baoShi.batchReviewApi")}}";
|
|
|
+ let data = {
|
|
|
+ detail_ids: this.getCheckDetailsIds(),
|
|
|
+ process_progress: process_progress,
|
|
|
+ };
|
|
|
+ this.baoShiBatchHandlerActions(url, data);
|
|
|
+ } else if ('取消拦截' === issue_type_name) {
|
|
|
+ let url = "{{route("workOrder.cancelIntercept.baoShi.BatchReviewApi")}}";
|
|
|
+ let data = {
|
|
|
+ detail_ids: this.getCheckDetailsIds(),
|
|
|
+ process_progress: process_progress,
|
|
|
+ };
|
|
|
+ this.baoShiBatchHandlerActions(url, data);
|
|
|
+ } else if ('信息更改' === issue_type_name) {
|
|
|
+ let url = "{{route('workOrder.informationChange.baoShi.batchReviewApi')}}";
|
|
|
+ let data = {
|
|
|
+ detail_ids: this.getCheckDetailsIds(),
|
|
|
+ process_progress: process_progress,
|
|
|
}
|
|
|
+ this.baoShiBatchHandlerActions(url, data);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ baoShiBatchHandlerActions(url, data) {
|
|
|
+ this.waitingTempTip("处理中");
|
|
|
+ window.axios.post(url, data).then(res => {
|
|
|
+ window.tempTip.cancelWaitingTip();
|
|
|
+ if (res.data.success) {
|
|
|
+ this.successTempTip('修改成功');
|
|
|
+ this.replaceWorkOrder(res.data.data);
|
|
|
+ this.dialogBaoShiBatchHandlerVisible = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.errorTempTip(res.data.message ? res.data.message : '处理异常刷新后重试');
|
|
|
+ }).catch(err => {
|
|
|
+ window.tempTip.cancelWaitingTip();
|
|
|
+ this.errorTempTip(err);
|
|
|
});
|
|
|
},
|
|
|
-
|
|
|
+ getEditWorkOrderProcessProgress(batchHandlerWorkOrder) {
|
|
|
+ let {prev_process_progress, issue_type_name} = batchHandlerWorkOrder;
|
|
|
+ let editWorkOrderProcessProgressObj = [{
|
|
|
+ name: '拦截', options: {
|
|
|
+ success: ['成功已退回,不赔偿', '拦截在途丢件,赔偿'],
|
|
|
+ filed: ['无法拦截'],
|
|
|
+ },
|
|
|
+ }, {
|
|
|
+ name: '信息更改', options: {success: ['更改成功'],filed: ['更改失败'],},
|
|
|
+ }, {
|
|
|
+ name:'取消拦截' ,options:['已签收','已退回'],
|
|
|
+ }];
|
|
|
+ let processProgressObj = editWorkOrderProcessProgressObj.find(e => issue_type_name === e.name);
|
|
|
+ let {options, name} = processProgressObj;
|
|
|
+ let option = [];
|
|
|
+ if (name === '拦截') {
|
|
|
+ if (prev_process_progress === '拦截退回中') option = options.success;
|
|
|
+ if (prev_process_progress === '拦截失败') option = options.filed;
|
|
|
+ } else if (name === '信息更改') {
|
|
|
+ if (prev_process_progress === '已签收') option = options.success;
|
|
|
+ if (prev_process_progress === '无法更改') option = options.filed;
|
|
|
+ } else if (name === '取消拦截') {
|
|
|
+ option = options;
|
|
|
+ }
|
|
|
+ return option;
|
|
|
+ },
|
|
|
},
|
|
|
|
|
|
});
|