|
|
@@ -40,6 +40,14 @@
|
|
|
<tr @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
|
|
|
<td>
|
|
|
<label><input type="checkbox" :value="item.id"></label>
|
|
|
+
|
|
|
+ <span v-show="isNewProcessedWorkOrder(item)" class="badge text-white bg-primary">
|
|
|
+ 新
|
|
|
+ </span>
|
|
|
+
|
|
|
+ <span v-show="isLogisticHandler(item)" class="badge badge-success">
|
|
|
+ 承
|
|
|
+ </span>
|
|
|
</td>
|
|
|
<td>
|
|
|
<span v-text="item.id"></span>
|
|
|
@@ -47,10 +55,7 @@
|
|
|
target="order/issue/index?addtime=15">
|
|
|
<span v-show="item.is_issue_order" class="badge badge-primary">问题件</span>
|
|
|
</a>
|
|
|
- <span v-if="item.work_order_status === '1'" class="badge text-white bg-info">
|
|
|
- 新
|
|
|
- </span>
|
|
|
- <button class="btn btn-sm btn-outline-secondary"
|
|
|
+ <button class="btn btn-sm btn-outline-dark"
|
|
|
@click="showWorkOrderItem(item)">详情
|
|
|
</button>
|
|
|
</td>
|
|
|
@@ -75,6 +80,12 @@
|
|
|
>
|
|
|
重新编辑
|
|
|
</button>
|
|
|
+ <button class="btn btn-sm"
|
|
|
+ style="background-color: #13b6af;color: #FFFFFF;border-color: #079e74"
|
|
|
+ v-show="canOwnerEnd(item)"
|
|
|
+ @click="ownerEndWorkOrder(item,i)">
|
|
|
+ 商家完结
|
|
|
+ </button>
|
|
|
@endcan
|
|
|
@can('订单管理-工单处理-承运商编辑')
|
|
|
<button class="btn btn-sm"
|
|
|
@@ -89,6 +100,13 @@
|
|
|
@click="logisticShowEdit(item,i)">
|
|
|
重新编辑
|
|
|
</button>
|
|
|
+ <button
|
|
|
+ class="btn btn-sm"
|
|
|
+ style="background-color:#d96a46;color: #FFFFFF;border-color: #e55c2d"
|
|
|
+ v-show="canTagWorkOrder(item)"
|
|
|
+ @click="tagWorkOrderHandler(item,i)">
|
|
|
+ 标记处理
|
|
|
+ </button>
|
|
|
@endcan
|
|
|
@can('订单管理-工单处理-宝时编辑')
|
|
|
<button class="btn btn-sm"
|
|
|
@@ -112,19 +130,7 @@
|
|
|
@endcan
|
|
|
</td>
|
|
|
<td>
|
|
|
- @can('订单管理-工单处理-审核')
|
|
|
- <select class="form-control form-control-sm"
|
|
|
- :value="item.order_issue_type_id"
|
|
|
- @change="changeIssueType(item,$event)">
|
|
|
- <option value="0"></option>
|
|
|
- <option v-for="type in orderIssueTypes"
|
|
|
- :value="type.name"
|
|
|
- v-text="type.value">
|
|
|
- </option>
|
|
|
- </select>
|
|
|
- @else
|
|
|
- <span v-text="item.issue_type_name"></span>
|
|
|
- @endcan
|
|
|
+ <span v-text="item.issue_type_name"></span>
|
|
|
</td>
|
|
|
<td>
|
|
|
<span v-text="item['last_handler_name'] + ':' + item.process_progress"></span>
|
|
|
@@ -186,10 +192,10 @@
|
|
|
<div class="row">
|
|
|
@include('order.workOrder._work_order_show')
|
|
|
</div>
|
|
|
- @include('order.workOrder._bao_shi_review_modal')
|
|
|
- @include('order.workOrder._bao_shi_fill_work_order_modal')
|
|
|
- @include('order.workOrder._logistic_fill_work_order_modal')
|
|
|
- @include('order.workOrder._owner_fill_work_order_modal')
|
|
|
+ @include('order.workOrder._bao_shi_review_modal')
|
|
|
+ @include('order.workOrder._bao_shi_fill_work_order_modal')
|
|
|
+ @include('order.workOrder._logistic_fill_work_order_modal')
|
|
|
+ @include('order.workOrder._owner_fill_work_order_modal')
|
|
|
</div>
|
|
|
@endsection()
|
|
|
|
|
|
@@ -292,6 +298,9 @@
|
|
|
let vue = new Vue({
|
|
|
el: "#list",
|
|
|
data: {
|
|
|
+ isLogistic: false,
|
|
|
+ isOwner: false,
|
|
|
+ isBaoShi: false,
|
|
|
orderIssueVue: orderIssueVue,
|
|
|
workOrders: {!! $workOrders->toJson() !!}['data'],
|
|
|
form: null,
|
|
|
@@ -374,7 +383,7 @@
|
|
|
return_address: null,
|
|
|
return_phone: null,
|
|
|
process_progress: null,
|
|
|
- type:null,
|
|
|
+ type: null,
|
|
|
},
|
|
|
selectTr: null, // table 行
|
|
|
selectDetailId: null, // 详情
|
|
|
@@ -385,13 +394,13 @@
|
|
|
selectLog: null, // 工单日志
|
|
|
selectIndex: null, // 选中工单
|
|
|
filePrefix: "{{asset("/storage")}}",
|
|
|
- dialogShowBaoShiVisible:false,
|
|
|
- dialogEditBaoShiVisible:false,
|
|
|
- dialogShowOwnerVisible:false,
|
|
|
- dialogEditOwnerVisible:false,
|
|
|
- dialogShowLogisticVisible:false,
|
|
|
- dialogEditLogisticVisible:false,
|
|
|
- dialogShowOrderWorkVisible:false,
|
|
|
+ dialogShowBaoShiVisible: false,
|
|
|
+ dialogEditBaoShiVisible: false,
|
|
|
+ dialogShowOwnerVisible: false,
|
|
|
+ dialogEditOwnerVisible: false,
|
|
|
+ dialogShowLogisticVisible: false,
|
|
|
+ dialogEditLogisticVisible: false,
|
|
|
+ dialogShowOrderWorkVisible: false,
|
|
|
},
|
|
|
computed: {},
|
|
|
mounted() {
|
|
|
@@ -410,8 +419,8 @@
|
|
|
name: 'owner',
|
|
|
type: 'select_multiple_select',
|
|
|
data: this.owners,
|
|
|
- tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的货主'],
|
|
|
- placeholder: ['货主', '定位或多选货主']
|
|
|
+ tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的商家'],
|
|
|
+ placeholder: ['商家', '定位或多选商家']
|
|
|
},
|
|
|
@endcan
|
|
|
{
|
|
|
@@ -522,6 +531,17 @@
|
|
|
this.workOrders.forEach(item => {
|
|
|
this.sortOrder(item);
|
|
|
});
|
|
|
+ this.isLogistic = @can('订单管理-工单处理-承运商编辑') true
|
|
|
+ @else false @endcan;
|
|
|
+ this.isOwner = @can('订单管理-工单处理-货主编辑') true
|
|
|
+ @else false @endcan;
|
|
|
+ this.isBaoShi = @can('订单管理-工单处理-客服编辑') true
|
|
|
+ @else false @endcan;
|
|
|
+ if (this.isBaoShi) {
|
|
|
+ this.isLogistic = false;
|
|
|
+ this.isOwner = false;
|
|
|
+ }
|
|
|
+ this.sortOrderWorkOrders();
|
|
|
},
|
|
|
filters: {
|
|
|
dataTime: function (value) {
|
|
|
@@ -532,6 +552,64 @@
|
|
|
},
|
|
|
},
|
|
|
methods: {
|
|
|
+ sortOrderWorkOrders() {
|
|
|
+ this.workOrders.sort((prev, curr) => {
|
|
|
+ if (this.isLogistic) {
|
|
|
+ return this.logisticSortWorkOrders(prev, curr);
|
|
|
+ } else if (this.isOwner) {
|
|
|
+ return this.ownerSortWorkOrders(prev, curr);
|
|
|
+ } else if (this.isBaoShi) {
|
|
|
+ return this.baoShiSortWorkOrders(prev, curr);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ logisticSortWorkOrders(prev, curr) {
|
|
|
+ let prev_count = 0, curr_count = 0,
|
|
|
+ prev_work_order_status = prev['work_order_status'],
|
|
|
+ curr_work_order_status = curr['work_order_status'],
|
|
|
+ prev_pending_detail = prev.pending_detail,
|
|
|
+ curr_pending_detail = curr.pending_detail;
|
|
|
+ // let prev_issue_type_name = prev_pending_detail ? prev_pending_detail.issue_type_name : prev.issue_type_name,
|
|
|
+ // curr_issue_type_name = curr_pending_detail ? curr_pending_detail.issue_type_name : curr.issue_type_name;
|
|
|
+ // 是否是最新的工单
|
|
|
+ if (prev_work_order_status === '1') prev_count += 32;
|
|
|
+ if (curr_work_order_status === '1') curr_count += 32;
|
|
|
+ if (prev_pending_detail.logistic_handle_tag === '') prev_count += 16;
|
|
|
+ if (curr_pending_detail.logistic_handle_tag === '') curr_count += 16;
|
|
|
+ if (prev.status === '承运商处理') prev_count += 4
|
|
|
+ if (curr.status === '承运商处理') curr_count += 4;
|
|
|
+ if (prev.issue_type_name === '拦截') prev_count += 2;
|
|
|
+ if (curr.issue_type_name === '拦截') curr_count += 2;
|
|
|
+ if (prev.status === '完成'|| prev.status.indexOf("承运商") < 0) prev_count = 0;
|
|
|
+ if (curr.status === '完成'|| prev.status.indexOf("承运商") < 0) curr_count = 0;
|
|
|
+ return curr_count - prev_count;
|
|
|
+ },
|
|
|
+ ownerSortWorkOrders(prev, curr) {
|
|
|
+ let prev_count = 0, curr_count = 0,
|
|
|
+ prev_work_order_status = prev['work_order_status'],
|
|
|
+ curr_work_order_status = curr['work_order_status'];
|
|
|
+ if (prev_work_order_status === '1') prev_count += 32;
|
|
|
+ if (curr_work_order_status === '1') curr_count += 32;
|
|
|
+ if (prev.status.indexOf("货主") >= 0) prev_count += 4
|
|
|
+ if (curr.status.indexOf("货主") >= 0) curr_count += 4;
|
|
|
+ if (prev.issue_type_name === '拦截') prev_count += 2;
|
|
|
+ if (curr.issue_type_name === '拦截') curr_count += 2;
|
|
|
+ if (prev.status === '完成' || prev.status.indexOf("货主") < 0) prev_count = 0;
|
|
|
+ if (curr.status === '完成' || curr.status.indexOf("货主") < 0) curr_count = 0;
|
|
|
+ return curr_count - prev_count;
|
|
|
+ },
|
|
|
+ baoShiSortWorkOrders(prev, curr){
|
|
|
+ let prev_count = 0, curr_count = 0,
|
|
|
+ prev_work_order_status = prev['work_order_status'],
|
|
|
+ curr_work_order_status = curr['work_order_status'];
|
|
|
+ if (prev_work_order_status === '1') prev_count += 32;
|
|
|
+ if (curr_work_order_status === '1') curr_count += 32;
|
|
|
+ if (prev.status.indexOf("宝时") >= 0) prev_count += 32;
|
|
|
+ if (curr.status.indexOf("宝时") >= 0) curr_count += 32;
|
|
|
+ if (prev.status === '完成' || prev.status.indexOf("宝时") < 0) prev_count = 0;
|
|
|
+ if (curr.status === '完成' || curr.status.indexOf("宝时") < 0) curr_count = 0;
|
|
|
+ return curr_count - prev_count;
|
|
|
+ },
|
|
|
waitingTempTip(message) {
|
|
|
window.tempTip.setIndex(2005);
|
|
|
window.tempTip.waitingTip(message);
|
|
|
@@ -609,10 +687,14 @@
|
|
|
workOrder.logistic_numbers = this.groupLogisticNumber(workOrder);
|
|
|
},
|
|
|
groupPendingDetail(workOrder) {
|
|
|
- let detail = workOrder.details.find(item => {
|
|
|
+
|
|
|
+ let details = workOrder.details.filter(item => {
|
|
|
return !['完成', '标记'].includes(item.tag);
|
|
|
+ }).sort((prev, curr) => {
|
|
|
+ return new Date(prev.created_at) > new Date(curr.created_at);
|
|
|
});
|
|
|
- if (!detail) return null;
|
|
|
+ if (!details) return null;
|
|
|
+ let detail = details.find(e => true);
|
|
|
return {
|
|
|
id: workOrder.id,
|
|
|
detail_id: detail.id,
|
|
|
@@ -629,6 +711,7 @@
|
|
|
return_phone: detail.return_phone,
|
|
|
return_name: detail.return_name,
|
|
|
images: detail.images,
|
|
|
+ logistic_handle_tag: detail.logistic_handle_tag,
|
|
|
};
|
|
|
},
|
|
|
groupCommodities(workOrder, isCurrent = true) {
|
|
|
@@ -728,9 +811,9 @@
|
|
|
let {commodities} = detail;
|
|
|
let logistic_numbers = new Set();
|
|
|
commodities.forEach(e => logistic_numbers.add(e.logistic_number));
|
|
|
- if (logistic_numbers.size === 0){
|
|
|
- if (workOrder.order && workOrder.order.packages){
|
|
|
- workOrder.order.packages.forEach(e=>logistic_numbers.add(e.logistic_number));
|
|
|
+ if (logistic_numbers.size === 0) {
|
|
|
+ if (workOrder.order && workOrder.order.packages) {
|
|
|
+ workOrder.order.packages.forEach(e => logistic_numbers.add(e.logistic_number));
|
|
|
}
|
|
|
}
|
|
|
return new Array(...logistic_numbers);
|
|
|
@@ -877,28 +960,6 @@
|
|
|
tempTip.showSuccess('复制失败:' + e)
|
|
|
}
|
|
|
},
|
|
|
-
|
|
|
- changeIssueType(item, e) {
|
|
|
- let url = '{{route('workOrder.updateIssueTypeApi')}}';
|
|
|
- let data = {
|
|
|
- id: item.id,
|
|
|
- type_id: $(e.target).val()
|
|
|
- };
|
|
|
- window.tempTip.waitingTip('修改中.........');
|
|
|
- window.axios.post(url, data).then(res => {
|
|
|
- if (res.data.success) {
|
|
|
- window.tempTip.cancelWaitingTip();
|
|
|
- window.tempTip.showSuccess('修改成功');
|
|
|
- item.order_issue_type_id = data.type_id;
|
|
|
- } else {
|
|
|
- window.tempTip.cancelWaitingTip();
|
|
|
- window.tempTip.show(res.data.message ? res.data.message : '修改异常');
|
|
|
- }
|
|
|
- }).catch(err => {
|
|
|
- window.tempTip.cancelWaitingTip();
|
|
|
- window.tempTip.show(err);
|
|
|
- });
|
|
|
- },
|
|
|
copyLogisticNumber() {
|
|
|
let items = this.getMessageWorkOrder();
|
|
|
let logistic_numbers = '';
|
|
|
@@ -909,26 +970,6 @@
|
|
|
})
|
|
|
this.copyText(logistic_numbers);
|
|
|
},
|
|
|
- showEditIssueType() {
|
|
|
- this.selectIssueType = 0;
|
|
|
- $("edit-issue-type-modal").modal('show');
|
|
|
- },
|
|
|
- editOrderIssueType() {
|
|
|
- let url = '{{route('workOrder.batchUpdateIssueTypeApi')}}'
|
|
|
- let data = {ids: checkData, type: this.selectIssueType};
|
|
|
- window.tempTip.setIndex(1999);
|
|
|
- window.axios.post(url, data).then(res => {
|
|
|
- if (res.data.success) {
|
|
|
- window.tempTip.showSuccess('修改问题件类型成功');
|
|
|
- this.replaceWorkOrder(res.data.data);
|
|
|
- $("#edit-issue-type-type-modal").modal('hide');
|
|
|
- return;
|
|
|
- }
|
|
|
- window.tempTip.show(res.data.message ? res.data.message : '修改异常');
|
|
|
- }).catch(err => {
|
|
|
- window.tempTip.show(err)
|
|
|
- })
|
|
|
- },
|
|
|
destroy(item, i) {
|
|
|
window.tempTip.confirm('是否删除当前工单', () => {
|
|
|
let url = '{{url('apiLocal/workOrder/')}}' + '/' + item.id;
|
|
|
@@ -1001,7 +1042,7 @@
|
|
|
}
|
|
|
event.preventDefault();
|
|
|
},
|
|
|
- editOwnerReissueLogisticNumber(){
|
|
|
+ editOwnerReissueLogisticNumber() {
|
|
|
let reissue_logistic_number = this.$refs['refund-image-edit-reissue_logistic_number'].innerHTML;
|
|
|
if (this.ownerEditWorkOrder.refundImages.length === 0) this.ownerEditWorkOrder.reissue_logistic_number = reissue_logistic_number;
|
|
|
else {
|
|
|
@@ -1174,6 +1215,8 @@
|
|
|
if ('宝时处理' === status) this.baoShiEditWorkOrder.process_progress = '核实未错漏发';
|
|
|
this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
|
|
|
this.dialogShowBaoShiVisible = true
|
|
|
+ } else if ('取消拦截'=== issue_type_name){
|
|
|
+ this.dialogShowBaoShiVisible = true
|
|
|
}
|
|
|
},
|
|
|
baoShiEdit() {
|
|
|
@@ -1281,6 +1324,15 @@
|
|
|
this.baoShiEditProcess(url, formData);
|
|
|
}
|
|
|
}
|
|
|
+ } else if ('取消拦截' === issue_type_name){
|
|
|
+ let res = this.checkBaoShiEditWorkOrder();
|
|
|
+ if (!res.success) {
|
|
|
+ this.errorTempTip(res.message);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let url = "{{route('workOrder.cancelIntercept.baoShi.reviewApi')}}";
|
|
|
+ let formData = {detail_id: detail_id, process_progress: process_progress}
|
|
|
+ this.baoShiEditProcess(url, formData);
|
|
|
}
|
|
|
},
|
|
|
checkBaoShiEditWorkOrder() {
|
|
|
@@ -1361,7 +1413,8 @@
|
|
|
getBaoShiProcessProgress() {
|
|
|
let {issue_type_name} = this.baoShiEditWorkOrder;
|
|
|
let items = [
|
|
|
- {issue_type_name: '拦截', option: ['拦截成功', '拦截失败']},
|
|
|
+ {issue_type_name: '拦截', option: ['拦截成功,不赔偿', '拦截失败,赔偿']},
|
|
|
+ {issue_type_name: '取消拦截', option: ['已签收', '已退回']},
|
|
|
{issue_type_name: '信息更改', option: ['更改成功', '更改失败'],},
|
|
|
{issue_type_name: '快递异常', option: ['丢件赔偿', '签收成功']},
|
|
|
{issue_type_name: '错漏发', option: ['已补发', '已入库'],},
|
|
|
@@ -1378,12 +1431,12 @@
|
|
|
{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);
|
|
|
return item ? item.option : [];
|
|
|
},
|
|
|
- getBaoShiProcessResultByItem(item){
|
|
|
+ getBaoShiProcessResultByItem(item) {
|
|
|
|
|
|
},
|
|
|
getBaoShiEndHandleResult(commodity) {
|
|
|
@@ -1476,8 +1529,8 @@
|
|
|
let {end_handle_result} = e;
|
|
|
if (end_handle_result.indexOf('补发') >= 0 || end_handle_result.indexOf('出库') >= 0) reissue++;
|
|
|
else if (end_handle_result.indexOf('退回') >= 0 || end_handle_result.indexOf('完成') >= 0) store++;
|
|
|
- else if (end_handle_result.indexOf('已完成入库') >= 0 ) store++;
|
|
|
- else if (end_handle_result.indexOf('完成出库') >= 0 ) reissue++;
|
|
|
+ else if (end_handle_result.indexOf('已完成入库') >= 0) store++;
|
|
|
+ else if (end_handle_result.indexOf('完成出库') >= 0) reissue++;
|
|
|
else if (end_handle_result.indexOf('确认未错漏发') >= 0) all++;
|
|
|
});
|
|
|
if (reissue > 0) process_progress = '已补发';
|
|
|
@@ -1491,10 +1544,10 @@
|
|
|
let index = 0;
|
|
|
let logistic_number = items[0]['logistic_number'];
|
|
|
let count = 0;
|
|
|
- items.forEach(e=>e.count=0);
|
|
|
+ items.forEach(e => e.count = 0);
|
|
|
items.forEach((e, i) => {
|
|
|
let cur_logistic_number = e.logistic_number,
|
|
|
- {process_result_info,end_handle_result} = e,
|
|
|
+ {process_result_info, end_handle_result} = e,
|
|
|
isAdd = false, isAddRow = false;
|
|
|
if (process_result_info) {
|
|
|
if (process_result_info.indexOf('补发') >= 0 ||
|
|
|
@@ -1525,12 +1578,12 @@
|
|
|
// 承运商
|
|
|
isLogisticDispose(item) {
|
|
|
let {issue_type_name, status} = item;
|
|
|
- return ['拦截', '信息更改', '快递异常', '破损', '快递丢件'].includes(issue_type_name) && status === '承运商处理';
|
|
|
+ return ['拦截', '信息更改', '快递异常', '破损', '快递丢件','取消拦截'].includes(issue_type_name) && status === '承运商处理';
|
|
|
},
|
|
|
canLogisticEdit(item) {
|
|
|
let {issue_type_name, last_status, status} = item;
|
|
|
if (status === '完成') return false;
|
|
|
- else return ['拦截', '信息更改', '快递异常', '破损', '快递丢件'].includes(issue_type_name) && last_status === '承运商处理';
|
|
|
+ else return ['拦截', '信息更改', '快递异常', '破损', '快递丢件','取消拦截'].includes(issue_type_name) && last_status === '承运商处理';
|
|
|
},
|
|
|
logisticShowEdit(item, index) {
|
|
|
let {issue_type_name, detail_id, commodities} = item.pending_detail;
|
|
|
@@ -1550,6 +1603,8 @@
|
|
|
this.countByCommodities(commodities);
|
|
|
this.logisticEditWorkOrder.commodities = commodities;
|
|
|
this.dialogEditLogisticVisible = true;
|
|
|
+ }else if ('取消拦截' === issue_type_name){
|
|
|
+ this.dialogEditLogisticVisible = true;
|
|
|
}
|
|
|
},
|
|
|
logisticShowDispose(item, index) {
|
|
|
@@ -1604,6 +1659,13 @@
|
|
|
});
|
|
|
this.logisticEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
|
|
|
this.dialogShowLogisticVisible = true;
|
|
|
+ } else if('取消拦截'){
|
|
|
+ this.selectIndex = index;
|
|
|
+ this.logisticEditWorkOrder.detail_id = detail_id;
|
|
|
+ this.logisticEditWorkOrder.issue_type_name = issue_type_name;
|
|
|
+ this.logisticEditWorkOrder.status = status;
|
|
|
+ this.logisticEditWorkOrder.process_progress = null;
|
|
|
+ this.dialogShowLogisticVisible = true;
|
|
|
}
|
|
|
},
|
|
|
logisticEdit() {
|
|
|
@@ -1654,6 +1716,17 @@
|
|
|
formData.append('commodities[]', JSON.stringify(e));
|
|
|
});
|
|
|
this.logisticEditProcess(formData, url);
|
|
|
+ } else if ('取消拦截' === issue_type_name){
|
|
|
+ let res = this.checkLogisticEditWorkOrder();
|
|
|
+ if (!res.success) {
|
|
|
+ this.errorTempTip(res.message);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let url = '{{route('workOrder.cancelIntercept.logistic.handlerApi')}}';
|
|
|
+ let formData = new FormData();
|
|
|
+ formData.append('detail_id', detail_id);
|
|
|
+ formData.append('process_progress', process_progress);
|
|
|
+ this.logisticEditProcess(formData, url);
|
|
|
}
|
|
|
},
|
|
|
logisticEditProcess(data, url) {
|
|
|
@@ -1666,7 +1739,7 @@
|
|
|
this.successTempTip('处理完成');
|
|
|
if (this.logisticEditWorkOrder.is_edit) this.dialogEditLogisticVisible = false;
|
|
|
else this.dialogShowLogisticVisible = false;
|
|
|
- } else {
|
|
|
+ } else {
|
|
|
this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新当前页面重试');
|
|
|
}
|
|
|
}).catch(err => {
|
|
|
@@ -1699,10 +1772,11 @@
|
|
|
getLogisticProcessProgress() {
|
|
|
let {issue_type_name} = this.logisticEditWorkOrder;
|
|
|
let items = [
|
|
|
- {issue_type_name: '拦截', option: ['已处理', '已签收']},
|
|
|
+ {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);
|
|
|
return item ? item.option : [];
|
|
|
@@ -1735,6 +1809,37 @@
|
|
|
else if (data.partiallyDamage > 0 || (data.partiallyDamage > 0 || data.notDamage > 0)) this.logisticEditWorkOrder.process_progress = '核实部分破损';
|
|
|
else if (data.allDamage > 0 && data.partiallyDamage === 0 && data.notDamage === 0) this.logisticEditWorkOrder.process_progress = '核实全部破损'
|
|
|
},
|
|
|
+ canTagWorkOrder(item) {
|
|
|
+ let {pending_detail, status, issue_type_name} = item;
|
|
|
+ if (status !== '承运商处理')return false;
|
|
|
+ if (!['拦截','取消拦截','信息更改'].includes(issue_type_name)) return false;
|
|
|
+ let {logistic_handle_tag} = pending_detail;
|
|
|
+ return logistic_handle_tag !== '承运商处理中';
|
|
|
+ },
|
|
|
+ isLogisticHandler(item) {
|
|
|
+ if (item.status !== '承运商处理' && item.issue_type_name !== '拦截') return false;
|
|
|
+ let logistic_handle_tag = item.pending_detail ? item.pending_detail.logistic_handle_tag : '';
|
|
|
+ return logistic_handle_tag === '承运商处理中';
|
|
|
+ },
|
|
|
+ tagWorkOrderHandler(item, index) {
|
|
|
+ let url = '{{route('workOrder.logistic.handlerTagApi')}}';
|
|
|
+ let data = {detail_id: item.pending_detail.detail_id};
|
|
|
+ this.waitingTempTip('处理中');
|
|
|
+ window.axios.post(url, data).then(res => {
|
|
|
+ window.tempTip.cancelWaitingTip();
|
|
|
+ if (res.data.success) {
|
|
|
+ this.successTempTip('标记处理中');
|
|
|
+ this.sortOrder(res.data.data);
|
|
|
+ this.$set(this.workOrders, index, res.data.data);
|
|
|
+ } else {
|
|
|
+ this.errorTempTip(res.data.message ? res.data.message : '处理工单出现异常');
|
|
|
+ }
|
|
|
+ }).catch(err => {
|
|
|
+ window.tempTip.cancelWaitingTip();
|
|
|
+ this.errorTempTip(err.message)
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
// 商家
|
|
|
isOwnerDispose(item) {
|
|
|
let {issue_type_name, status} = item;
|
|
|
@@ -1752,6 +1857,9 @@
|
|
|
else if (issue_type_name === '错漏发' && status === '宝时处理') return true;
|
|
|
return false;
|
|
|
},
|
|
|
+ canOwnerEnd(item) {
|
|
|
+ return item.status === '待货主完结';
|
|
|
+ },
|
|
|
ownerShowDispose(item, index) {
|
|
|
let issue_type_name = item.issue_type_name;
|
|
|
this.selectIndex = index;
|
|
|
@@ -1781,7 +1889,7 @@
|
|
|
this.ownerEditWorkOrder.logistic_number = null; //
|
|
|
this.ownerEditWorkOrder.refundImages = []; // 退款截图
|
|
|
this.ownerEditWorkOrder.dealImages = []; // 交易截图
|
|
|
- this.dialogShowOwnerVisible = true;
|
|
|
+ this.dialogShowOwnerVisible = true;
|
|
|
}).catch(err => {
|
|
|
window.tempTip.cancelWaitingTip();
|
|
|
this.errorTempTip('获取数据异常')
|
|
|
@@ -1804,7 +1912,7 @@
|
|
|
ownerShowEdit(item, index) {
|
|
|
this.selectIndex = index;
|
|
|
let {issue_type_name, logistic_number, pending_detail, type, remark, status} = item;
|
|
|
- let {price, remake, images,reissue_logistic_number} = pending_detail;
|
|
|
+ let {price, remake, images, reissue_logistic_number} = pending_detail;
|
|
|
this.ownerEditWorkOrder.is_edit = true;
|
|
|
this.ownerEditWorkOrder.status = status;
|
|
|
this.ownerEditWorkOrder.price = price;
|
|
|
@@ -1882,7 +1990,7 @@
|
|
|
this.ownerEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(work_order_commodities);
|
|
|
this.dialogEditOwnerVisible = true;
|
|
|
}
|
|
|
- }else if ('破损' === issue_type_name){
|
|
|
+ } else if ('破损' === issue_type_name) {
|
|
|
work_order_commodities.forEach(e => {
|
|
|
e.created = false;
|
|
|
e.tag = false;
|
|
|
@@ -1911,9 +2019,9 @@
|
|
|
window.tempTip.cancelWaitingTip();
|
|
|
this.errorTempTip(err)
|
|
|
});
|
|
|
- } else if(['拦截','信息更改'].includes(issue_type_name)){
|
|
|
+ } else if (['拦截', '信息更改'].includes(issue_type_name)) {
|
|
|
this.dialogEditOwnerVisible = true;
|
|
|
- } else if ('快递丢件'.includes(issue_type_name)){
|
|
|
+ } else if ('快递丢件'.includes(issue_type_name)) {
|
|
|
work_order_commodities.forEach(e => {
|
|
|
e.created = false;
|
|
|
e.tag = false;
|
|
|
@@ -2076,6 +2184,7 @@
|
|
|
let url = '{{route('workOrder.expressAbnormal.owner.editApi')}}';
|
|
|
formData.append('detail_id', detail_id);
|
|
|
formData.append('is_edit', true);
|
|
|
+ delete_image_ids.forEach(e => formData.append("delete_image_ids[]", JSON.stringify(e)))
|
|
|
commodities.filter(e => e.selected && e.is_created).forEach(e => formData.append("commodities[]", JSON.stringify(e)));
|
|
|
commodities.filter(e => e.is_created === false && !e.selected).forEach(e => formData.append("delete_commodity_ids[]", e.id));
|
|
|
dealImages = this.getImages(dealImages.filter(e => e.file));
|
|
|
@@ -2104,13 +2213,13 @@
|
|
|
this.setFormDataImagePrefix(formData, 'dealImages', this.getImages(dealImages.filter(e => e.file)));
|
|
|
this.ownerEditProcess(formData, url);
|
|
|
}
|
|
|
- } else if ('信息更改' === issue_type_name){
|
|
|
- let formData = new FormData();
|
|
|
- let {detail_id,remark} = this.ownerEditWorkOrder;
|
|
|
- formData.append('detail_id',detail_id);
|
|
|
- formData.append('remark',remark);
|
|
|
- let url = "{{route('workOrder.informationChange.owner.editApi')}}";
|
|
|
- this.ownerEditProcess(formData,url);
|
|
|
+ } else if ('信息更改' === issue_type_name) {
|
|
|
+ let formData = new FormData();
|
|
|
+ let {detail_id, remark} = this.ownerEditWorkOrder;
|
|
|
+ formData.append('detail_id', detail_id);
|
|
|
+ formData.append('remark', remark);
|
|
|
+ let url = "{{route('workOrder.informationChange.owner.editApi')}}";
|
|
|
+ this.ownerEditProcess(formData, url);
|
|
|
}
|
|
|
},
|
|
|
ownerEditProcess(data, url) {
|
|
|
@@ -2168,9 +2277,9 @@
|
|
|
}
|
|
|
}
|
|
|
let message = null
|
|
|
- this.ownerEditWorkOrder.commodities.forEach(e=>{
|
|
|
- if (!message){
|
|
|
- if(this.hasStoreNumber(e) && !e.store_in_number){
|
|
|
+ this.ownerEditWorkOrder.commodities.forEach(e => {
|
|
|
+ if (!message) {
|
|
|
+ if (this.hasStoreNumber(e) && !e.store_in_number) {
|
|
|
message = '入库单号不能未空';
|
|
|
}
|
|
|
}
|
|
|
@@ -2198,9 +2307,9 @@
|
|
|
}
|
|
|
}
|
|
|
let message = null
|
|
|
- this.ownerEditWorkOrder.commodities.forEach(e=>{
|
|
|
- if (!message){
|
|
|
- if(this.hasStoreNumber(e) && !e.store_in_number){
|
|
|
+ this.ownerEditWorkOrder.commodities.forEach(e => {
|
|
|
+ if (!message) {
|
|
|
+ if (this.hasStoreNumber(e) && !e.store_in_number) {
|
|
|
message = '入库单号不能未空';
|
|
|
}
|
|
|
}
|
|
|
@@ -2260,29 +2369,29 @@
|
|
|
return {success: true};
|
|
|
},
|
|
|
ownerAutoComputeMistake() {
|
|
|
- let store_in = 0, out_in = 0,noMistake = 0; // store_in 不补发 out_in 补发
|
|
|
+ let store_in = 0, out_in = 0, noMistake = 0; // store_in 不补发 out_in 补发
|
|
|
this.ownerEditWorkOrder.commodities.forEach(e => {
|
|
|
let {process_result} = e;
|
|
|
- if (process_result.indexOf('少发,宝时补发')>=0) out_in++;
|
|
|
- else if (e.process_result.indexOf('多发,客户买下') >=0 ) out_in++;
|
|
|
- else if (e.process_result.indexOf('多发,客户退回')>=0 ) store_in++;
|
|
|
- else if (e.process_result.indexOf('少发,不补发') >=0) store_in++;
|
|
|
- else if (e.process_result.indexOf('核实未错漏发') >= 0 ) noMistake++;
|
|
|
+ if (process_result.indexOf('少发,宝时补发') >= 0) out_in++;
|
|
|
+ else if (e.process_result.indexOf('多发,客户买下') >= 0) out_in++;
|
|
|
+ else if (e.process_result.indexOf('多发,客户退回') >= 0) store_in++;
|
|
|
+ else if (e.process_result.indexOf('少发,不补发') >= 0) store_in++;
|
|
|
+ else if (e.process_result.indexOf('核实未错漏发') >= 0) noMistake++;
|
|
|
});
|
|
|
// 补发 不补发
|
|
|
let process_progress = null;
|
|
|
if (out_in > store_in) process_progress = '补发';
|
|
|
else if (out_in < store_in) process_progress = '不补发';
|
|
|
else if (out_in > store_in > 0 && store_in > 0 && store_in === out_in) process_progress = '补发';
|
|
|
- else if (noMistake > 0)process_progress = '核实未错漏发';
|
|
|
+ else if (noMistake > 0) process_progress = '核实未错漏发';
|
|
|
this.ownerEditWorkOrder.process_progress = process_progress;
|
|
|
},
|
|
|
autoComputeOwnerMistake() {
|
|
|
let store_in = 0, out_in = 0; // store_in 不补发 out_in 补发
|
|
|
this.ownerEditWorkOrder.commodities.forEach(e => {
|
|
|
let {process_result} = e;
|
|
|
- if (process_result.indexOf('少发,宝时补发')>=0) out_in++;
|
|
|
- else if (e.process_result.indexOf() ) out_in++;
|
|
|
+ if (process_result.indexOf('少发,宝时补发') >= 0) out_in++;
|
|
|
+ else if (e.process_result.indexOf()) out_in++;
|
|
|
else if (e.process_result === '多发,客户退回') store_in++;
|
|
|
else if (e.process_result === '少发,不补发') out_in++;
|
|
|
else if (e.process_result === '核实未错漏发') store_in++;
|
|
|
@@ -2294,10 +2403,10 @@
|
|
|
},
|
|
|
ownerEditWorkOrderSpliceImage(index, images = []) {
|
|
|
if (!confirm('是否删除当前图片')) return;
|
|
|
- let imageitem = images.find((e, i) => Number(index) === Number(i));
|
|
|
- if (!imageitem) return;
|
|
|
- if (imageitem.upload_file) {
|
|
|
- this.ownerEditWorkOrder.delete_image_ids.push(imageitem.id);
|
|
|
+ let imageItem = images.find((e, i) => Number(index) === Number(i));
|
|
|
+ if (!imageItem) return;
|
|
|
+ if (imageItem.upload_file) {
|
|
|
+ this.ownerEditWorkOrder.delete_image_ids.push(imageItem.id);
|
|
|
}
|
|
|
images.splice(index, 1);
|
|
|
},
|
|
|
@@ -2374,6 +2483,27 @@
|
|
|
ownerDamageWorkOrderTag(item) {
|
|
|
item.tag = true;
|
|
|
},
|
|
|
+ ownerEndWorkOrder(item, index) {
|
|
|
+ let url = "{{route('workOrder.owner.endApi')}}";
|
|
|
+ let data = {
|
|
|
+ detail_id: item.pending_detail.detail_id,
|
|
|
+ }
|
|
|
+ this.waitingTempTip('处理中');
|
|
|
+ window.axios.post(url, data).then(res => {
|
|
|
+ window.tempTip.cancelWaitingTip();
|
|
|
+ if (res.data.success) {
|
|
|
+ this.successTempTip('完结成功');
|
|
|
+ item.status = "完成";
|
|
|
+ item.owner_tag = "";
|
|
|
+ } else {
|
|
|
+ this.errorTempTip(res.data.message ? res.data.message : '完结工单异常');
|
|
|
+ }
|
|
|
+ }).catch(err => {
|
|
|
+ window.tempTip.cancelWaitingTip();
|
|
|
+ this.errorTempTip(err.getMessage());
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
getProcessResult(check_result, item) {
|
|
|
let results = null;
|
|
|
if (check_result === '核实少发') {
|
|
|
@@ -2386,16 +2516,15 @@
|
|
|
}
|
|
|
return results;
|
|
|
},
|
|
|
-
|
|
|
- checkWorkOrderCommodityMistake(item){
|
|
|
- if (this.hasStoreNumber(item)){
|
|
|
+ checkWorkOrderCommodityMistake(item) {
|
|
|
+ if (this.hasStoreNumber(item)) {
|
|
|
item.reissue_logistic_number = null;
|
|
|
item.out_order_numbere = null;
|
|
|
- } else if (this.hasOutInNumber(item)){
|
|
|
+ } else if (this.hasOutInNumber(item)) {
|
|
|
item.reissue_logistic_number = null;
|
|
|
item.store_in_number = null;
|
|
|
item.store_in_amount = null;
|
|
|
- } else if (this.hasReissueLogisticNumber(item)){
|
|
|
+ } else if (this.hasReissueLogisticNumber(item)) {
|
|
|
item.store_in_number = null;
|
|
|
item.store_in_amount = null;
|
|
|
item.out_order_numbere = null;
|
|
|
@@ -2431,8 +2560,22 @@
|
|
|
if (!detail) {
|
|
|
return;
|
|
|
}
|
|
|
- let {images, commodities, issue_type, price, status,reissue_logistic_number
|
|
|
- ,return_logistic_number,return_address,return_phone,return_name,type,process_progress,remark} = detail;
|
|
|
+ let {
|
|
|
+ images,
|
|
|
+ commodities,
|
|
|
+ issue_type,
|
|
|
+ price,
|
|
|
+ status,
|
|
|
+ reissue_logistic_number
|
|
|
+ ,
|
|
|
+ return_logistic_number,
|
|
|
+ return_address,
|
|
|
+ return_phone,
|
|
|
+ return_name,
|
|
|
+ type,
|
|
|
+ process_progress,
|
|
|
+ remark
|
|
|
+ } = detail;
|
|
|
this.showWorkOrder.issue_type_name = issue_type.name ? issue_type.name : '';
|
|
|
this.showWorkOrder.process_progress = process_progress;
|
|
|
this.showWorkOrder.price = price;
|
|
|
@@ -2440,7 +2583,8 @@
|
|
|
this.showWorkOrder.remark = remark;
|
|
|
this.showWorkOrder.status = status;
|
|
|
this.showWorkOrder.reissue_logistic_number = reissue_logistic_number;
|
|
|
- if (reissue_logistic_number){
|
|
|
+ this.showWorkOrder.return_logistic_number = return_logistic_number;
|
|
|
+ if (reissue_logistic_number) {
|
|
|
|
|
|
}
|
|
|
this.showWorkOrder.return_address = return_address;
|
|
|
@@ -2469,7 +2613,7 @@
|
|
|
let commodities = JSON.parse(JSON.stringify(items));
|
|
|
commodities.sort((prev, curr) => prev.logistic_number > curr.logistic_number ? 1 : -1);
|
|
|
let index = 0, count = 0, logistic_number = commodities[0] ? commodities[0]['logistic_number'] : '';
|
|
|
- commodities.forEach(e=>e.count = 0);
|
|
|
+ commodities.forEach(e => e.count = 0);
|
|
|
commodities.forEach((e, i, array) => {
|
|
|
e.commodity_name = e.commodity ? e.commodity.name : '';
|
|
|
let current_logistic_number = e.logistic_number;
|
|
|
@@ -2500,7 +2644,7 @@
|
|
|
let item = copy_items.find(e => e);
|
|
|
if (!item) return [];
|
|
|
let {logistic_number} = item, index = 0, count = 0;
|
|
|
- copy_items.forEach(e=>e.count = 0);
|
|
|
+ copy_items.forEach(e => e.count = 0);
|
|
|
copy_items.forEach((e, i) => {
|
|
|
let current_logistic_number = e.logistic_number;
|
|
|
let add_flag = false;
|
|
|
@@ -2523,6 +2667,24 @@
|
|
|
autoComputeStoreInAmount(item) {
|
|
|
item.store_in_amount = Number(item.amount) - Number(item.bao_shi_check_amount);
|
|
|
},
|
|
|
+ isNewWorkOrder(item) {
|
|
|
+ let {work_order_status} = item;
|
|
|
+ return work_order_status === '1';
|
|
|
+ },
|
|
|
+ isNewProcessedWorkOrder(item) {
|
|
|
+ let logistic = @can('订单管理-工单处理-承运商编辑') true
|
|
|
+ @else false @endcan;
|
|
|
+ let owner = @can('订单管理-工单处理-货主编辑') true
|
|
|
+ @else false @endcan;
|
|
|
+ let baoShi = @can('订单管理-工单处理-客服编辑') true
|
|
|
+ @else false @endcan;
|
|
|
+ let {logistic_tag, bao_shi_tag, owner_tag} = item;
|
|
|
+ if (logistic && logistic_tag === '1') return true;
|
|
|
+ if (owner && owner_tag === '1') return true;
|
|
|
+ if (baoShi && bao_shi_tag === '1') return true;
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+
|
|
|
},
|
|
|
});
|
|
|
</script>
|