|
|
@@ -26,10 +26,21 @@
|
|
|
</button>
|
|
|
</span>
|
|
|
@endcan
|
|
|
+ <span class="ml-1">
|
|
|
+ <button type="button" class="btn btn-outline-dark btn-sm form-control-sm tooltipTarget"
|
|
|
+ @click="copyLogisticNumber()" style="background: #dad7e8;">批量复制单号</button>
|
|
|
+ </span>
|
|
|
+ @can('订单管理-工单处理-审核')
|
|
|
+ <span class="ml-1">
|
|
|
+ <button type="button" class="btn btn-outline-success btn-sm form-control-sm tooltipTarget"
|
|
|
+ @click="showEditIssueType">
|
|
|
+ 批量修改问题件类型
|
|
|
+ </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">
|
|
|
@@ -43,18 +54,21 @@
|
|
|
</td>
|
|
|
<td class="text-center">
|
|
|
@can('订单管理-订单问题件生成')
|
|
|
- <button class="btn btn-sm btn-outline-primary" @click="createOrderIssue(item,true)" v-show="!item.is_issue_order ">
|
|
|
+ <button class="btn btn-sm btn-outline-primary"
|
|
|
+ @click="createOrderIssue(item,true)" v-show="!item.is_issue_order ">
|
|
|
生成问题件
|
|
|
</button>
|
|
|
@endcan
|
|
|
@can('订单管理-工单处理-审核')
|
|
|
- <button class="btn btn-sm btn-outline-success" v-show="item.status !== '已处理'" @click="review(item,i)">
|
|
|
+ <button class="btn btn-sm btn-outline-success" v-show="item.status !== '已处理'"
|
|
|
+ @click="review(item,i)">
|
|
|
审核
|
|
|
</button>
|
|
|
@endcan
|
|
|
</td>
|
|
|
- <td>@{{item.type ? item.type.name : '' }}</td>
|
|
|
<td class="text-center">@{{ item.status }}</td>
|
|
|
+ <td class="text-center">@{{ item.owner ? item.owner.name : '' }}</td>
|
|
|
+ <td class="text-center">@{{ item.order ? item.order.client_code : ''}}</td>
|
|
|
<td>@{{item.order ? (item.order.logistic ? item.order.logistic.name : '') : '' }}</td>
|
|
|
<td class="text-center">
|
|
|
<template v-if="item.order">
|
|
|
@@ -88,9 +102,11 @@
|
|
|
<select class="form-control form-control-sm"
|
|
|
:disabled="item.review_at || item.is_issue_order"
|
|
|
:value="item.order_issue_type_id"
|
|
|
- @change="changeIssueType(item,$event)" >
|
|
|
+ @change="changeIssueType(item,$event)">
|
|
|
<option value="0"></option>
|
|
|
- <option v-for="type in orderIssueTypes" :value="type.name">@{{ type.value }}</option>
|
|
|
+ <option v-for="type in orderIssueTypes" :value="type.name">@{{ type.value
|
|
|
+ }}
|
|
|
+ </option>
|
|
|
</select>
|
|
|
@else
|
|
|
@{{ item.issue_type ? item.issue_type.name : '' }}
|
|
|
@@ -99,7 +115,7 @@
|
|
|
<td class="text-center">@{{ item.remark }}</td>
|
|
|
|
|
|
<td class="text-center">
|
|
|
- @{{ item.result_explain ?item.result_explain : '' }}
|
|
|
+ @{{ item.result_explain ?item.result_explain : '' }}
|
|
|
</td>
|
|
|
<td class="text-center">
|
|
|
@{{ item.issue_order_type ?item.issue_order_type : '' }}
|
|
|
@@ -117,29 +133,30 @@
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
<transition name="fade">
|
|
|
- <table class="table table-sm m-0" v-if="selectOrderIssue === item.id">
|
|
|
+ <table class="table table-sm m-0" v-if="selectOrderIssue === item.id">
|
|
|
|
|
|
<tr v-for="log in item.issue_logs">
|
|
|
<td>@{{ log.content }}</td>
|
|
|
<td>@{{ log.username }}</td>
|
|
|
<td>@{{ log.created_at }}</td>
|
|
|
</tr>
|
|
|
- </table>
|
|
|
+ </table>
|
|
|
</transition>
|
|
|
<transition name="fade">
|
|
|
- <table class="table table-sm m-0" v-if="electOrderIssue !== item.id">
|
|
|
- <tr>
|
|
|
- <td>@{{ item.issue_logs[0].content }}</td>
|
|
|
- <td>@{{ item.issue_logs[0].username }}</td>
|
|
|
- <td>@{{ item.issue_logs[0].created_at }}</td>
|
|
|
- </tr>
|
|
|
- </table>
|
|
|
+ <table class="table table-sm m-0" v-if="selectOrderIssue !== item.id">
|
|
|
+ <tr>
|
|
|
+ <td>@{{ item.issue_logs[0].content }}</td>
|
|
|
+ <td>@{{ item.issue_logs[0].username }}</td>
|
|
|
+ <td>@{{ item.issue_logs[0].created_at }}</td>
|
|
|
+ </tr>
|
|
|
+ </table>
|
|
|
</transition>
|
|
|
<button class="btn btn-sm btn-outline-primary"
|
|
|
v-show="selectOrderIssue !== item.id"
|
|
|
@click="selectOrderIssue = item.id">展开
|
|
|
</button>
|
|
|
- <button class="btn btn-sm btn-outline-primary" v-show="selectOrderIssue === item.id"
|
|
|
+ <button class="btn btn-sm btn-outline-primary"
|
|
|
+ v-show="selectOrderIssue === item.id"
|
|
|
@click="selectOrderIssue = null">收起
|
|
|
</button>
|
|
|
</template>
|
|
|
@@ -187,18 +204,22 @@
|
|
|
{{ $workOrders->withQueryString()->links() }}
|
|
|
</div>
|
|
|
</div>
|
|
|
+ @can('订单管理-工单处理-审核')
|
|
|
+ @include('order.workOrder._edit_issue_type')
|
|
|
+ @endcan
|
|
|
</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 type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
|
|
|
<style>
|
|
|
.fade-enter-active, .fade-leave-active {
|
|
|
transition: opacity .5s;
|
|
|
}
|
|
|
- .fade-enter, .fade-leave-to {
|
|
|
+
|
|
|
+ .fade-enter, .fade-leave-to {
|
|
|
opacity: 0;
|
|
|
}
|
|
|
</style>
|
|
|
@@ -216,17 +237,24 @@
|
|
|
},
|
|
|
@endforeach
|
|
|
],
|
|
|
- orderIssueTypes:[
|
|
|
- @foreach($orderIssueTypes as $type)
|
|
|
- {name:'{{$type->id}}',value:"{{$type->name}}"},
|
|
|
+ orderIssueTypes: [
|
|
|
+ @foreach($orderIssueTypes as $type)
|
|
|
+ {
|
|
|
+ name: '{{$type->id}}', value: "{{$type->name}}"
|
|
|
+ },
|
|
|
+ @endforeach
|
|
|
+ ],
|
|
|
+ owners:[
|
|
|
+ @foreach($owners as $owner)
|
|
|
+ {name:'{{$owner->id}}',value:'{{$owner->name}}'},
|
|
|
@endforeach
|
|
|
],
|
|
|
selectOrderPackage: null,
|
|
|
selectOrder: null,
|
|
|
- selectOrderIssue:null,
|
|
|
+ selectOrderIssue: null,
|
|
|
+ selectIssueType: '',
|
|
|
},
|
|
|
mounted() {
|
|
|
- console.log();
|
|
|
let data = [[
|
|
|
{name: 'created_at_start', type: 'time', tip: ['工单创建开始日期', '时间']},
|
|
|
{name: 'created_at_end', type: 'time', tip: ['工单创建结束日期', '时间']},
|
|
|
@@ -237,24 +265,26 @@
|
|
|
tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的承运商'],
|
|
|
placeholder: ['承运商', '定位或多选承运商']
|
|
|
},
|
|
|
- {name: 'logistic_number', type: 'input', placeholder: '快递单号'},
|
|
|
+ @can('订单管理-订单问题件生成')
|
|
|
{
|
|
|
- name: 'grad',
|
|
|
- type: 'select',
|
|
|
- placeholder: '工单等级',
|
|
|
- data: [{name: 1, value: '一般'}, {name: 2, value: '重要'}, {name: 3, value: '紧急'}, {
|
|
|
- name: 4,
|
|
|
- value: '重要且紧急'
|
|
|
- },]
|
|
|
+ name: 'owner',
|
|
|
+ type: 'select_multiple_select',
|
|
|
+ data: this.owners,
|
|
|
+ tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的货主'],
|
|
|
+ placeholder: ['货主', '定位或多选货主']
|
|
|
},
|
|
|
+ @endcan
|
|
|
+ {name: 'logistic_number', type: 'input', placeholder: '快递单号'},
|
|
|
{
|
|
|
name: 'is_issue_order',
|
|
|
type: 'select',
|
|
|
placeholder: '问题件',
|
|
|
data: [{name: 'true', value: '有'}, {name: 'false', value: '无'}]
|
|
|
},
|
|
|
+ {name: 'creator', type: 'input', placeholder: '创建人'},
|
|
|
], [{name: 'review_at_start', type: 'time', tip: ['工单审核开始日期', '时间']},
|
|
|
{name: 'review_at_end', type: 'time', tip: ['工单审核结束日期', '时间']},
|
|
|
+ {name: 'order_issue_type', type: 'select', placeholder: '问题件类型', data: this.orderIssueTypes},
|
|
|
{name: 'is_review', type: 'checkbox', tip: '是否审核', data: [{name: 'true', value: '已审核'}]},
|
|
|
]];
|
|
|
this.form = new query({
|
|
|
@@ -265,33 +295,37 @@
|
|
|
let column = [
|
|
|
{name: 'no', value: '序号', neglect: true},
|
|
|
{name: 'operation', value: '操作', neglect: true},
|
|
|
- {name: 'type', value: '相关类型'},
|
|
|
- {name: 'status', value: '状态'},
|
|
|
- {name: 'logisticName', value: '承运商'},
|
|
|
+ {name: 'status', value: '状态',neglect: true},
|
|
|
+ {name: 'owner', value: '货主',neglect: true},
|
|
|
+ {name: 'client_code', value: '订单号',neglect: true},
|
|
|
+ {name: 'logisticName', value: '承运商',neglect: true},
|
|
|
{name: 'logisticNumber', value: '快递单号'},
|
|
|
{name: 'issueType', value: '问题件类型'},
|
|
|
- {name: 'workOrderInfo', value: '问题描述'},
|
|
|
- {name:'result_explain',value:'情况说明'},
|
|
|
- {name:'orderIssueType',value:'问题件类别'},
|
|
|
- {name:'orderIssueProcessLogs',type:'multi',title:"处理结果",rows:[
|
|
|
- {value:"内容",col:"4"},
|
|
|
- {value:"操作人",col:"4"},
|
|
|
- {value:"时间",col:"4"},
|
|
|
- ]},
|
|
|
+ {name: 'workOrderInfo', value: '问题描述',neglect: true},
|
|
|
+ {name: 'result_explain', value: '情况说明',neglect: true},
|
|
|
+ {name: 'orderIssueType', value: '问题件类别'},
|
|
|
+ {
|
|
|
+ name: 'orderIssueProcessLogs', type: 'multi', title: "处理结果", rows: [
|
|
|
+ {value: "内容", col: "4"},
|
|
|
+ {value: "操作人", col: "4"},
|
|
|
+ {value: "时间", col: "4"},
|
|
|
+ ],neglect: true
|
|
|
+ },
|
|
|
{name: 'Info', value: '物流跟踪信息', neglect: true},
|
|
|
- {name: 'creator', value: '创建人'},
|
|
|
- {name: 'submit_at', value: '提交时间'},
|
|
|
- {name: 'reviewer', value: '审核人'},
|
|
|
- {name: 'review_at', value: '审核时间'},
|
|
|
+ {name: 'creator', value: '创建人',neglect: true},
|
|
|
+ {name: 'submit_at', value: '提交时间',neglect: true},
|
|
|
+ {name: 'reviewer', value: '审核人',neglect: true},
|
|
|
+ {name: 'review_at', value: '审核时间',neglect: true},
|
|
|
];
|
|
|
|
|
|
new Header({
|
|
|
el: "table",
|
|
|
- name: "area",
|
|
|
+ name: "workOrders",
|
|
|
column: column,
|
|
|
data: this.workOrders,
|
|
|
fixedTop: ($('#form_div').height()) + 2,
|
|
|
}).init();
|
|
|
+
|
|
|
$("#list").removeClass("d-none");
|
|
|
},
|
|
|
created() {
|
|
|
@@ -306,17 +340,17 @@
|
|
|
sortOrder(workOrder) {
|
|
|
let self = this;
|
|
|
if (!workOrder.order) return;
|
|
|
- if (workOrder.order_issue){
|
|
|
+ if (workOrder.order_issue) {
|
|
|
workOrder.result_explain = workOrder.order_issue.result_explain;
|
|
|
- if (workOrder.order_issue.issue_type){
|
|
|
+ if (workOrder.order_issue.issue_type) {
|
|
|
workOrder.issue_order_type = workOrder.order_issue.issue_type.name;
|
|
|
}
|
|
|
- if (workOrder.order_issue.logs){
|
|
|
- workOrder.issue_logs = workOrder.order_issue.logs.map(item=>{
|
|
|
+ if (workOrder.order_issue.logs) {
|
|
|
+ workOrder.issue_logs = workOrder.order_issue.logs.map(item => {
|
|
|
return {
|
|
|
- username : item.user ? item.user.name : '',
|
|
|
+ username: item.user ? item.user.name : '',
|
|
|
content: item.content,
|
|
|
- created_at : item.created_at
|
|
|
+ created_at: item.created_at
|
|
|
};
|
|
|
});
|
|
|
}
|
|
|
@@ -359,14 +393,14 @@
|
|
|
if (tag) data.ids = [item.id];
|
|
|
else data.ids = checkData;
|
|
|
if (!confirm('是否生成对应的问题件')) return;
|
|
|
- let _this =this;
|
|
|
+ let _this = this;
|
|
|
window.axios.post(url, data).then(res => {
|
|
|
if (res.data.success) {
|
|
|
- res.data.data.forEach(item=>{
|
|
|
- this.workOrders.forEach((workOrder,i)=>{
|
|
|
- if (item.id === workOrder.id){
|
|
|
+ res.data.data.forEach(item => {
|
|
|
+ this.workOrders.forEach((workOrder, i) => {
|
|
|
+ if (item.id === workOrder.id) {
|
|
|
_this.sortOrder(item);
|
|
|
- _this.$set(_this.workOrders,i,item);
|
|
|
+ _this.$set(_this.workOrders, i, item);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
@@ -391,35 +425,40 @@
|
|
|
return selected.includes(item.id + '');
|
|
|
});
|
|
|
},
|
|
|
- exportText(){
|
|
|
+ exportText() {
|
|
|
let items = this.getMessageWorkOrder();
|
|
|
- if (items == null) return ;
|
|
|
+ if (items == null) return;
|
|
|
let text = '';
|
|
|
- items.forEach(item=>{
|
|
|
+ items.forEach(item => {
|
|
|
if (item.order) text += this.getExportText(item);
|
|
|
});
|
|
|
- console.log(text);
|
|
|
this.copyText(text);
|
|
|
},
|
|
|
- getExportText(item){
|
|
|
+ getExportText(item) {
|
|
|
if (!item.order) return '';
|
|
|
if (!item.order.packages) return '';
|
|
|
- switch (item.issue_order_type){
|
|
|
+ let message = '';
|
|
|
+ let issue_type = item.issue_type? item.issue_type.name : '';
|
|
|
+ switch (issue_type) {
|
|
|
case '拦截':
|
|
|
- return this.interceptMessage(item);
|
|
|
- case '信息修改':
|
|
|
- return this.modificationMessage(item);
|
|
|
- default :
|
|
|
- return this.getMessage(item);
|
|
|
+ message = this.interceptMessage(item);
|
|
|
+ break;
|
|
|
+ case '信息更改':
|
|
|
+ message = this.modificationMessage(item);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ message = this.getMessage(item);
|
|
|
+ break;
|
|
|
}
|
|
|
+ return message;
|
|
|
},
|
|
|
interceptMessage(item) {
|
|
|
- let message = '';
|
|
|
+ let message = '';
|
|
|
if (item.order.logistic.code.includes('SF') || item.order.logistic.code.includes('ZTO')) {
|
|
|
item.order.packages.forEach(node => {
|
|
|
message += node.logistic_number + '\n';
|
|
|
});
|
|
|
- message += message.trim('\n') + ' ——拦截\n';
|
|
|
+ message = message.trim('\n') + ' ——拦截\n';
|
|
|
} else {
|
|
|
let item_order_logistic_name = item.order.logistic.name;
|
|
|
let item_order_adder = item.order.consignee_name + ' '
|
|
|
@@ -428,7 +467,7 @@
|
|
|
item.order.packages.forEach(p => {
|
|
|
if (p) message += item_order_logistic_name + ' ' + p.logistic_number + ' ' + item_order_adder + '\n';
|
|
|
});
|
|
|
- message += message.trim('\n') + ' ——拦截\n';
|
|
|
+ message = message.trim('\n') + ' ——拦截\n';
|
|
|
}
|
|
|
return message;
|
|
|
},
|
|
|
@@ -437,6 +476,7 @@
|
|
|
let logistic_code = item.order.logistic.code;
|
|
|
let 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 => {
|
|
|
if (logistic_code.includes('SF')) { // 顺丰订单
|
|
|
message += node.logistic_number + ' ——改信息: ' + item.remark + ',运费到付或月结' + '\n';
|
|
|
@@ -448,13 +488,13 @@
|
|
|
});
|
|
|
return message;
|
|
|
},
|
|
|
- getMessage(item){
|
|
|
+ getMessage(item) {
|
|
|
let message = '';
|
|
|
if (!item.order.packages) return message;
|
|
|
let 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(p=>{
|
|
|
- message+= p.logistic_number + ' '+ adder + ' ——描述 '+item.remark+'\n';
|
|
|
+ item.order.packages.forEach(p => {
|
|
|
+ message += p.logistic_number + ' ' + adder + ' ——描述 ' + item.remark + '\n';
|
|
|
});
|
|
|
return message;
|
|
|
},
|
|
|
@@ -498,23 +538,64 @@
|
|
|
window.tempTip.show(err);
|
|
|
})
|
|
|
},
|
|
|
- changeIssueType(item,e){
|
|
|
+ changeIssueType(item, e) {
|
|
|
let url = '{{route('workOrder.updateIssueTypeApi')}}';
|
|
|
let data = {
|
|
|
- id:item.id,
|
|
|
+ id: item.id,
|
|
|
type_id: $(e.target).val()
|
|
|
};
|
|
|
- window.axios.post(url,data).then(res=>{
|
|
|
- if (res.data.success){
|
|
|
+ window.axios.post(url, data).then(res => {
|
|
|
+ if (res.data.success) {
|
|
|
window.tempTip.showSuccess('修改成功');
|
|
|
item.order_issue_type_id = data.type_id;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
window.tempTip.show(res.data.message ? res.data.message : '修改异常');
|
|
|
}
|
|
|
- }).catch(err=>{
|
|
|
+ }).catch(err => {
|
|
|
window.tempTip.show(err);
|
|
|
});
|
|
|
- }
|
|
|
+ },
|
|
|
+ copyLogisticNumber() {
|
|
|
+ let items = this.getMessageWorkOrder();
|
|
|
+ let logistic_numbers = '';
|
|
|
+ items.forEach(item => {
|
|
|
+ item.order.packages.forEach(node => {
|
|
|
+ logistic_numbers += node.logistic_number + '\n';
|
|
|
+ });
|
|
|
+ })
|
|
|
+ this.copyText(logistic_numbers);
|
|
|
+ },
|
|
|
+ showEditIssueType() {
|
|
|
+ this.selectIssueType = 0;
|
|
|
+ $("#edit-issue-type-type-modal").modal('show');
|
|
|
+ },
|
|
|
+ editOrderIssueType() {
|
|
|
+ let url = '{{route('workOrder.batchUpdateIssueTypeApi')}}'
|
|
|
+ let data = {ids: checkData, type: this.selectIssueType};
|
|
|
+ let _this = this;
|
|
|
+ window.tempTip.setIndex(1999);
|
|
|
+ window.axios.post(url, data).then(res => {
|
|
|
+ if (res.data.success) {
|
|
|
+ window.tempTip.showSuccess('修改问题件类型成功');
|
|
|
+
|
|
|
+ res.data.data.forEach(item => {
|
|
|
+ _this.sortOrder(item);
|
|
|
+ _this.workOrders.forEach((workOrder, i, array) => {
|
|
|
+ if (workOrder.id === item.id) {
|
|
|
+ array[i] = item;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ });
|
|
|
+ this.$forceUpdate();
|
|
|
+ $("#edit-issue-type-type-modal").modal('hide');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ window.tempTip.show(res.data.message ? res.data.message : '修改异常');
|
|
|
+ }).catch(err => {
|
|
|
+ window.tempTip.show(err)
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
},
|
|
|
});
|
|
|
</script>
|