|
|
@@ -150,11 +150,17 @@
|
|
|
<div class="form-group" id="damage-edit" v-if="'破损' === issueType">
|
|
|
<p class="text-dark">破损信息</p>
|
|
|
<div class="alert alert-info" v-for="(item,index) in damages">
|
|
|
- <div class="form-row">
|
|
|
- <label>订单:</label>
|
|
|
- <p class="text-dark" v-text="item.order_no"></p>
|
|
|
+ <div class="form-row ">
|
|
|
+ <label class="">订单:</label>
|
|
|
+ <label class="text-dark" v-text="item.order_no"></label>
|
|
|
+ </div>
|
|
|
+ <div class="form-row mb-2">
|
|
|
+ <label class="">破损商品价格:</label>
|
|
|
+ <div class="col-sm-4">
|
|
|
+ <input type="number" class="form-control form-control-sm" v-model="item.price">
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="damage-table">
|
|
|
+ <div class="damage-table form-row form-group">
|
|
|
<table class="table table-bordered bg-white">
|
|
|
<thead>
|
|
|
<tr>
|
|
|
@@ -171,60 +177,64 @@
|
|
|
<tr v-for="(commodity,i) in item.commodities">
|
|
|
<td v-text="commodity.logistic_number"></td>
|
|
|
<td v-text="commodity.sku"></td>
|
|
|
+ <th v-text="commodity.abnormal_type"></th>
|
|
|
<td v-text="commodity.sku_name"></td>
|
|
|
<td v-text="commodity.amount"></td>
|
|
|
- <td v-text="commodity.abnormal_amount"></td>
|
|
|
- <td v-text="commodity.price"></td>
|
|
|
+ <td>
|
|
|
+ <input type="number" class="form-control form-control-sm"
|
|
|
+ v-model="commodity.abnormal_amount" @change="computerPrice(item)">
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <input type="number" class="form-control form-control-sm"
|
|
|
+ v-model="commodity.price" @change="computerPrice(item)">
|
|
|
+ </td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
</div>
|
|
|
<div class="form-row">
|
|
|
- <div class="col-sm-2">
|
|
|
-
|
|
|
- </div>
|
|
|
- <div class="col-sm-3 ">
|
|
|
+ <div class="col-sm-4">
|
|
|
<label class="text-dark"><span class="text-danger">*</span>外包装图片</label>
|
|
|
- <div class="h-auto border border-secondary bg-white rounded" id="package-image"
|
|
|
- style="min-height: 75px"
|
|
|
+ <div class="h-auto border border-secondary bg-white rounded"
|
|
|
+ style="min-height: 100px"
|
|
|
contenteditable="true"
|
|
|
- @paste="pasteImage($event,item.dealImages)">
|
|
|
- <div v-for="(image,i) in item.dealImages"
|
|
|
+ @paste="pasteImage($event,item.packageImages)">
|
|
|
+ <div v-for="(image,i) in item.packageImages"
|
|
|
class="d-inline-block col-4 position-relative card">
|
|
|
<div class="card-body">
|
|
|
<img :src="image.src" class="card-img-top" :alt="image.file.name">
|
|
|
<div class="float-right position-relative">
|
|
|
<button type="button" class="btn btn-sm btn-outline-danger"
|
|
|
- @click="spliceImage(i,item.dealImages)">取消
|
|
|
+ @click="spliceImage(i,item.packageImages)">取消
|
|
|
</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="col-sm-3 ">
|
|
|
+ <div class="col-sm-4">
|
|
|
<label class="text-dark"><span class="text-danger">*</span>内物破损图</label>
|
|
|
- <div class="h-auto border border-secondary bg-white rounded" id="package-image"
|
|
|
- style="min-height: 75px"
|
|
|
+ <div class="h-auto border border-secondary bg-white rounded"
|
|
|
+ style="min-height: 100px"
|
|
|
contenteditable="true"
|
|
|
- @paste="pasteImage($event,item.dealImages)">
|
|
|
- <div v-for="(image,i) in item.dealImages"
|
|
|
+ @paste="pasteImage($event,item.commodityImages)">
|
|
|
+ <div v-for="(image,i) in item.commodityImages"
|
|
|
class="d-inline-block col-4 position-relative card">
|
|
|
<div class="card-body">
|
|
|
<img :src="image.src" class="card-img-top" :alt="image.file.name">
|
|
|
<div class="float-right position-relative">
|
|
|
<button type="button" class="btn btn-sm btn-outline-danger"
|
|
|
- @click="spliceImage(i,item.dealImages)">取消
|
|
|
+ @click="spliceImage(i,item.commodityImages)">取消
|
|
|
</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="col-sm-3 ">
|
|
|
+ <div class="col-sm-4">
|
|
|
<label class="text-dark"><span class="text-danger">*</span>交易截图</label>
|
|
|
- <div class="h-auto border border-secondary bg-white rounded" id="package-image"
|
|
|
- style="min-height: 75px"
|
|
|
+ <div class="h-auto border border-secondary bg-white rounded"
|
|
|
+ style="min-height: 100px"
|
|
|
contenteditable="true"
|
|
|
@paste="pasteImage($event,item.dealImages)">
|
|
|
<div v-for="(image,i) in item.dealImages"
|
|
|
@@ -246,7 +256,7 @@
|
|
|
</div>
|
|
|
|
|
|
<div class="form-group" id="submit-div">
|
|
|
- <button class="btn btn-primary" @click="submit">提交</button>
|
|
|
+ <button class="btn btn-primary" @click="submit" >提交</button>
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
@@ -265,7 +275,7 @@
|
|
|
infoChange: [],
|
|
|
mistakes: [],
|
|
|
expressAbnormalData: [],
|
|
|
- damages:[],
|
|
|
+ damages: [],
|
|
|
},
|
|
|
computed: {
|
|
|
showRemarkDiv() {
|
|
|
@@ -280,8 +290,10 @@
|
|
|
this.getMistakeData();
|
|
|
} else if (val === "快递异常") {
|
|
|
this.getExpressAbnormalData();
|
|
|
- } else if(val === "破损"){
|
|
|
+ } else if (val === "破损") {
|
|
|
this.getDamages();
|
|
|
+ } else if(val==="拦截"){
|
|
|
+ this.getIntercept();
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
@@ -301,7 +313,6 @@
|
|
|
}
|
|
|
} else if (issueType === "信息更改") {
|
|
|
if (!this.checkInfoChange()) {
|
|
|
- this.errorTempTip("信息更改项不能为空,且列不能为空")
|
|
|
return false;
|
|
|
}
|
|
|
} else if (issueType === "错漏发") {
|
|
|
@@ -312,6 +323,10 @@
|
|
|
if (!this.checkExpressAbnormal()) {
|
|
|
return false;
|
|
|
}
|
|
|
+ } else if (issueType === "破损") {
|
|
|
+ if (!this.checkDamage()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
return true;
|
|
|
},
|
|
|
@@ -329,6 +344,8 @@
|
|
|
this.mistake()
|
|
|
} else if (issueType === "快递异常") {
|
|
|
this.expressAbnormal()
|
|
|
+ } else if (issueType === "破损") {
|
|
|
+ this.damage();
|
|
|
}
|
|
|
},
|
|
|
loss() {
|
|
|
@@ -396,12 +413,12 @@
|
|
|
},
|
|
|
informationChange() {
|
|
|
let url = '{{route('workOrder.informationChange.createBatchApi')}}';
|
|
|
- let {logisticNumbers, infoChange, remark} = this;
|
|
|
+ let {logisticNumbers, infoChange} = this;
|
|
|
let data = {
|
|
|
logistic_numbers: logisticNumbers,
|
|
|
- remark: remark,
|
|
|
data: infoChange,
|
|
|
};
|
|
|
+ this.waitingTempTip("处理中");
|
|
|
axios.post(url, data).then(res => {
|
|
|
this.cancelWaitingTempTip();
|
|
|
if (res.data.success === true) {
|
|
|
@@ -460,13 +477,13 @@
|
|
|
data.append('type', expressAbnormal.abnormal_type);
|
|
|
data.append('process_progress', expressAbnormal.abnormal_type);
|
|
|
packages = packages.filter(item => item.select);
|
|
|
- packages.forEach(e=>{
|
|
|
- data.append('commodities[]',JSON.stringify({logistic_number:e.logistic_number}));
|
|
|
+ packages.forEach(e => {
|
|
|
+ data.append('commodities[]', JSON.stringify({logistic_number: e.logistic_number}));
|
|
|
})
|
|
|
let dealImages = this.getImages(expressAbnormal.dealImages);
|
|
|
this.setFormDataImagePrefix(data, 'dealImages', dealImages);
|
|
|
- this.syncExpressAbnormal(data).then(res=>{
|
|
|
- if(i === (expressAbnormalData.length -1)){
|
|
|
+ this.syncExpressAbnormal(data).then(res => {
|
|
|
+ if (i === (expressAbnormalData.length - 1)) {
|
|
|
this.cancelWaitingTempTip();
|
|
|
this.cancelSubData();
|
|
|
}
|
|
|
@@ -490,6 +507,73 @@
|
|
|
})
|
|
|
});
|
|
|
},
|
|
|
+ damage() {
|
|
|
+ let {damages, remark} = this;
|
|
|
+ let message = '';
|
|
|
+ this.waitingTempTip("处理中");
|
|
|
+ for (let i = 0; i < damages.length; i++) {
|
|
|
+ let fromData = new FormData();
|
|
|
+ let damage = damages[i];
|
|
|
+ let price = damage.price;
|
|
|
+ let commodities = damage.commodities ? damage.commodities : [];
|
|
|
+ fromData.append('order_no', damage.order_no);
|
|
|
+ fromData.append('price', price);
|
|
|
+ fromData.append('remark', remark);
|
|
|
+ let packageImages = this.getImages(damage.packageImages ? damage.packageImages : []);
|
|
|
+ this.setFormDataImagePrefix(fromData, 'packageImages', packageImages);
|
|
|
+ let dealImages = this.getImages(damage.dealImages ? damage.dealImages : []);
|
|
|
+ this.setFormDataImagePrefix(fromData, 'dealImages', dealImages);
|
|
|
+ let commodityImages = this.getImages(damage.commodityImages ? damage.commodityImages : []);
|
|
|
+ this.setFormDataImagePrefix(fromData, 'commodityImages', commodityImages);
|
|
|
+ commodities.filter(item=>{
|
|
|
+ return Number(item.abnormal_amount) !== 0;
|
|
|
+ }).forEach(e => {
|
|
|
+ fromData.append('commodities[]', JSON.stringify(e));
|
|
|
+ });
|
|
|
+ this.syncDamage(fromData).then(res => {
|
|
|
+ if (i === (damages.length - 1)) {
|
|
|
+ this.cancelWaitingTempTip();
|
|
|
+ this.cancelSubData();
|
|
|
+ }
|
|
|
+ this.successTempTip(`${damage.order_no}创建完成`);
|
|
|
+ }).catch(err => {
|
|
|
+ message += err + '\\n';
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ syncDamage(data) {
|
|
|
+ let url = "{{route('workOrder.damage.storeApi')}}";
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ axios.post(url, data).then(res => {
|
|
|
+ if (res.data.success) {
|
|
|
+ resolve(true)
|
|
|
+ } else {
|
|
|
+ reject(res.data.message ? res.data.message : '创建工单异常');
|
|
|
+ }
|
|
|
+ }).catch(err => {
|
|
|
+ reject(err);
|
|
|
+ })
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getIntercept(){
|
|
|
+ let url = '{{route('workOrder.intercept.checkLogisticNumberApi')}}';
|
|
|
+ let data = {
|
|
|
+ 'logistic_numbers': this.logisticNumbers,
|
|
|
+ };
|
|
|
+ axios.post(url, data).then(res => {
|
|
|
+ if (res.data.success) {
|
|
|
+ this.infoChange = res.data.data.map(item => {
|
|
|
+ item.remark = '';
|
|
|
+ return item;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.errorTempTip(res.data.message ? res.data.message : "获取订单号异常");
|
|
|
+ }
|
|
|
+ }).catch(err => {
|
|
|
+ this.errorTempTip(err);
|
|
|
+ });
|
|
|
+
|
|
|
+ },
|
|
|
getInfoChangeData() {
|
|
|
let url = '{{route('workOrder.informationChange.checkLogisticNumberApi')}}';
|
|
|
let data = {
|
|
|
@@ -557,21 +641,41 @@
|
|
|
this.errorTempTip(err);
|
|
|
});
|
|
|
},
|
|
|
- getDamages(){
|
|
|
+ getDamages() {
|
|
|
let url = '{{route('workOrder.damage.checkLogisticNumberApi')}}';
|
|
|
let data = {
|
|
|
'logistic_numbers': this.logisticNumbers
|
|
|
};
|
|
|
- axios.post(url,data).then(res=>{
|
|
|
- if(res.data.data){
|
|
|
+ axios.post(url, data).then(res => {
|
|
|
+ if (res.data.data) {
|
|
|
+ res.data.data.forEach(item => {
|
|
|
+ item.commodities.forEach(i => {
|
|
|
+ i.abnormal_type = "破损";
|
|
|
+ i.abnormal_amount = i.amount;
|
|
|
+ i.price = 0;
|
|
|
+ });
|
|
|
+ item.commodityImages = [];
|
|
|
+ item.dealImages = [];
|
|
|
+ item.packageImages = [];
|
|
|
+ item.price = 0;
|
|
|
+ })
|
|
|
this.damages = res.data.data;
|
|
|
} else {
|
|
|
this.errorTempTip(res.data.message ? res.data.message : "获取订单号异常");
|
|
|
}
|
|
|
- }).catch(err=>{
|
|
|
+ }).catch(err => {
|
|
|
this.errorTempTip(err);
|
|
|
});
|
|
|
},
|
|
|
+ computerPrice(item) {
|
|
|
+ let {commodities} = item;
|
|
|
+ item.price = commodities.map(item => {
|
|
|
+ let {price, abnormal_amount} = item;
|
|
|
+ return price * abnormal_amount;
|
|
|
+ }).reduce((perv, next) => {
|
|
|
+ return perv + next
|
|
|
+ });
|
|
|
+ },
|
|
|
waitingTempTip(message) {
|
|
|
window.tempTip.setIndex(2005);
|
|
|
window.tempTip.setDuration(9999);
|
|
|
@@ -655,11 +759,22 @@
|
|
|
this.infoChange = [];
|
|
|
this.mistakes = [];
|
|
|
this.expressAbnormalData = [];
|
|
|
+ this.damages = [];
|
|
|
},
|
|
|
checkInfoChange() {
|
|
|
let {infoChange} = this;
|
|
|
- if (infoChange.length === 0) return false;
|
|
|
- return infoChange.filter(item => item.remark == null || item.remark === "" || item.remark.trim().length === 0).length !== 0;
|
|
|
+ if(infoChange.length === 0){
|
|
|
+ this.errorTempTip("请检查信息");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ for (let i = 0; i < infoChange.length; i++) {
|
|
|
+ let info = infoChange[i];
|
|
|
+ let {remark} = info;
|
|
|
+ if(remark == null || remark === "" || remark.trim().length === 0){
|
|
|
+ this.errorTempTip("收方信息未必填项");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
},
|
|
|
checkMistakes() {
|
|
|
let {mistakes} = this;
|
|
|
@@ -697,6 +812,25 @@
|
|
|
}
|
|
|
return true;
|
|
|
},
|
|
|
+ checkDamage() {
|
|
|
+ let {damages} = this;
|
|
|
+ for (let i = 0; i < damages.length; i++) {
|
|
|
+ let damage = damages[i];
|
|
|
+ let {commodities,order_no} = damage;
|
|
|
+ if(commodities.length === 0){
|
|
|
+ this.errorTempTip(`订单${order_no}无商品详情`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ let count = commodities.filter(item=>{
|
|
|
+ return Number(item.abnormal_amount) === 0;
|
|
|
+ }).length;
|
|
|
+ if(count === commodities.length){
|
|
|
+ this.errorTempTip(`${order_no}未填写破损数量`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ },
|
|
|
pasteImage(event, imageArray) {
|
|
|
for (let i = 0; i < event.clipboardData.items.length; i++) {
|
|
|
let item = event.clipboardData.items[i];
|