|
|
@@ -278,6 +278,8 @@
|
|
|
<th class="text-center">效期</th>
|
|
|
<th class="text-center">批次号</th>
|
|
|
<th class="text-center">备注</th>
|
|
|
+ <th class="text-center">外箱图</th>
|
|
|
+ <th class="text-center">产品图</th>
|
|
|
<th class="text-center">照片</th>
|
|
|
@can('退货管理-删除')
|
|
|
<th class="text-center">操作</th>@endcan
|
|
|
@@ -293,6 +295,30 @@
|
|
|
<td>@{{item.validity_at}}</td>
|
|
|
<td>@{{item.batch_number}}</td>
|
|
|
<td>@{{item.remark}}</td>
|
|
|
+ <td>
|
|
|
+ <div align="center" @mouseleave="removeCommonImg('common_img_package'+item.id)" @mouseenter="commonImg('img_package'+item.id,item.package_images)">
|
|
|
+ <div>
|
|
|
+ <input class="btn btn-sm btn-outline-secondary" type="button" @click="certiimg(item.id,'外箱')" value="上传图片 "/>
|
|
|
+ <input multiple type="file" @change="submitImages($event,i)" :id="item.id"
|
|
|
+ style="display: none" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg"/>
|
|
|
+ </div>
|
|
|
+ <div :id="'img_package'+item.id">
|
|
|
+ <img v-for="uploadFile in item.package_images" :src="imgPrefix+uploadFile.url+'-thumbnail.'+uploadFile.type">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <div align="center" @mouseleave="removeCommonImg('common_img_commodity'+item.id)" @mouseenter="commonImg('img_commodity'+item.id,item.commodity_images)">
|
|
|
+ <div>
|
|
|
+ <input class="btn btn-sm btn-outline-secondary" type="button" @click="certiimg(item.id,'产品')" value="上传图片 "/>
|
|
|
+ <input multiple type="file" @change="submitImages($event,i)" :id="item.id"
|
|
|
+ style="display: none" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg"/>
|
|
|
+ </div>
|
|
|
+ <div :id="'img_commodity'+item.id">
|
|
|
+ <img v-for="uploadFile in item.commodity_images" :src="imgPrefix+uploadFile.url+'-thumbnail.'+uploadFile.type">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </td>
|
|
|
<td>
|
|
|
<div align="center" @mouseleave="removeCommonImg('common_img_'+item.id)" @mouseenter="commonImg('img_'+item.id,item.upload_files)">
|
|
|
<button class="btn btn-outline-secondary btn-sm" @click="takePhoto(item.id,i)">拍照上传</button>
|
|
|
@@ -420,6 +446,48 @@
|
|
|
</div>
|
|
|
</td>
|
|
|
</tr>
|
|
|
+ <tr v-if="!status.itemEditing">
|
|
|
+ <td>
|
|
|
+ <div class="form-group mb-0">
|
|
|
+ <label for="package-image" class="col-form-label text-right">外箱图</label>
|
|
|
+ <div class="border border-secondary h-auto" id="package-image" style="min-height: 65px"
|
|
|
+ contenteditable="true"
|
|
|
+ @paste="pasteImage($event,itemInputting.packageImages)">
|
|
|
+ <div v-for="(image,i) in itemInputting.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,itemInputting.packageImages)">取消
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <div class="form-group mb-0">
|
|
|
+ <label for="commodity-image" class="col-form-label text-right">产品图</label>
|
|
|
+ <div class="border border-secondary h-auto" id="commodity-image" style="min-height: 65px"
|
|
|
+ contenteditable="true"
|
|
|
+ @paste="pasteImage($event,itemInputting.commodityImages)">
|
|
|
+ <div v-for="(image,i) in itemInputting.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,itemInputting.commodityImages)">取消
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<div class="form-group mb-0 align-items-center row">
|
|
|
@@ -578,6 +646,7 @@
|
|
|
itemInputting: {
|
|
|
barcode_goods: "", name_goods: "", amount: "1", id_quality_label: "",
|
|
|
batch_number: "", validity_at: "", remark: "", made_at: "",
|
|
|
+ packageImages: [], commodityImages: [],
|
|
|
},
|
|
|
billInputting: {
|
|
|
id_owner: "", mobile_sender: "", sender: "", order_number: "", remark: "",
|
|
|
@@ -593,6 +662,7 @@
|
|
|
batch_number: "", validity_at: "", remark: "", made_at: "",
|
|
|
},
|
|
|
rejectedBills: {!! $rejectedBills??[] !!},
|
|
|
+ submitImageType:'',
|
|
|
items: [],
|
|
|
owners: [
|
|
|
@foreach($owners as $owner)
|
|
|
@@ -661,6 +731,43 @@
|
|
|
});
|
|
|
|
|
|
},
|
|
|
+ spliceImage(i, images) {
|
|
|
+ if (!confirm('是否取消选择该图片')) return;
|
|
|
+ images.splice(i, 1);
|
|
|
+ },
|
|
|
+ getImages(images) {
|
|
|
+ return images.map((item) => {
|
|
|
+ return item.file;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ pasteImage(event,imageArray){
|
|
|
+ for (let i = 0; i < event.clipboardData.items.length; i++) {
|
|
|
+ let item = event.clipboardData.items[i];
|
|
|
+ if (item.kind === 'string') continue;
|
|
|
+ if (item.type.indexOf('image') === -1) continue;
|
|
|
+ if (item.kind === 'file'){
|
|
|
+ let blob = item.getAsFile();
|
|
|
+ let src = null;
|
|
|
+ this.blobToBase64(blob).then(res => {
|
|
|
+ src = res;
|
|
|
+ imageArray.push({src:res,file:blob});
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ event.preventDefault();
|
|
|
+ },
|
|
|
+ blobToBase64(blob) {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const fileReader = new FileReader();
|
|
|
+ fileReader.onload = (e) => {
|
|
|
+ resolve(e.target.result);
|
|
|
+ };
|
|
|
+ fileReader.readAsDataURL(blob);
|
|
|
+ fileReader.onerror = () => {
|
|
|
+ reject(new Error('blobToBase64 error'));
|
|
|
+ };
|
|
|
+ });
|
|
|
+ },
|
|
|
barcode_goodsChange: function (e) {
|
|
|
let _this = this;
|
|
|
let barcode = $(e.target).val();
|
|
|
@@ -875,8 +982,46 @@
|
|
|
alert('连接错误:' + response)
|
|
|
});
|
|
|
},
|
|
|
+ checkImageWhetherNeed(item){
|
|
|
+ if (item.id_quality_label!=1){
|
|
|
+ if (item.commodityImages.length===0){
|
|
|
+ tempTip.setDuration(3000);
|
|
|
+ tempTip.show('非正品,请上传外箱图及产品图!');
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ },
|
|
|
+ setFormDataImage(formData, prefix, images) {
|
|
|
+ images.forEach((item) => {
|
|
|
+ formData.append(`${prefix}[]`, item);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getDamagedFormData(item){
|
|
|
+ let _this=this;
|
|
|
+ let formData = new FormData();
|
|
|
+ if (item.packageImages.length>0){
|
|
|
+ let packageImages = _this.getImages(item.packageImages);
|
|
|
+ this.setFormDataImage(formData,'packageImages',packageImages);
|
|
|
+ }
|
|
|
+ if (item.commodityImages.length>0){
|
|
|
+ let commodityImages = _this.getImages(item.commodityImages);
|
|
|
+ this.setFormDataImage(formData,'commodityImages',commodityImages);
|
|
|
+ }
|
|
|
+ formData.append('barcode_goods',item.barcode_goods);
|
|
|
+ formData.append('amount',item.amount);
|
|
|
+ formData.append('name_goods',item.name_goods);
|
|
|
+ formData.append('id_quality_label',item.id_quality_label);
|
|
|
+ formData.append('batch_number',item.batch_number);
|
|
|
+ formData.append('validity_at',item.validity_at);
|
|
|
+ formData.append('made_at',item.made_at);
|
|
|
+ formData.append('remark',item.remark);
|
|
|
+ formData.append('id_rejected_bill',item.id_rejected_bill);
|
|
|
+ return formData;
|
|
|
+ },
|
|
|
commitItem: function () {
|
|
|
let _this = this;
|
|
|
+ if (_this.checkImageWhetherNeed(_this.itemInputting)===1)return;
|
|
|
let url = '{{url('apiLocal/rejectedBillItem/store')}}';
|
|
|
_this.itemInputting.id_rejected_bill = _this.status.editingBill.id;
|
|
|
if (_this.items.length < 1) {
|
|
|
@@ -888,7 +1033,9 @@
|
|
|
_this.isChangeOwner(_this.itemInputting.id_rejected_bill);
|
|
|
}
|
|
|
}
|
|
|
- axios.post(url, _this.itemInputting).then(function (response) {
|
|
|
+ let formData = _this.getDamagedFormData(_this.itemInputting);
|
|
|
+
|
|
|
+ axios.post(url, formData,{'Content-Type':'multipart/form-data'}).then(function (response) {
|
|
|
_this.cleanError();
|
|
|
if (response.data.success === 'true') {
|
|
|
tempTip.setDuration(1000);
|
|
|
@@ -1185,6 +1332,10 @@
|
|
|
return true;
|
|
|
});
|
|
|
if (itemTarget) {
|
|
|
+ // itemTarget.packageImages = itemTarget.package_images;//package_images
|
|
|
+ // itemTarget.commodityImages = itemTarget.commodity_images;//commodity_images
|
|
|
+ // delete itemTarget.package_images;
|
|
|
+ // delete itemTarget.commodity_images;
|
|
|
this.itemInputting = JSON.parse(JSON.stringify(itemTarget));
|
|
|
this.shiftToEditItem();
|
|
|
this.setEditingItem(itemTarget.id)
|
|
|
@@ -1325,6 +1476,34 @@
|
|
|
return "上传成功";
|
|
|
},false,true);
|
|
|
},
|
|
|
+ certiimg(id,type){
|
|
|
+ this.submitImageType=type;
|
|
|
+ $('#'+id).click();
|
|
|
+ },
|
|
|
+ submitImages(e,index){
|
|
|
+ let type=this.submitImageType;
|
|
|
+ let files=e.target.files;
|
|
|
+ window.tempTip.setDuration(3000);
|
|
|
+ if (files.length===0){window.tempTip.show("未选定图片!");return;}
|
|
|
+ let formData=new FormData();
|
|
|
+ for (let i=0;i<files.length;i++){
|
|
|
+ if (files[i].size >=5242880){window.tempTip.show("图片大小不能超过5MB!");return;}
|
|
|
+ formData.append("files[]",files[i]);
|
|
|
+ }
|
|
|
+ formData.append("id",this.items[index].id);
|
|
|
+ formData.append("type",type);
|
|
|
+ window.tempTip.postBasicRequest('{{url('apiLocal/rejectedBillItem/apiUpload')}}',formData,res=>{
|
|
|
+ if (type==='外箱'){
|
|
|
+ if (this.items[index].package_images.length===0) this.$set(this.items[index],'package_images',res);
|
|
|
+ else this.$set(this.items[index],'package_images',this.items[index].package_images.concat(res));
|
|
|
+ }
|
|
|
+ if (type==='产品'){
|
|
|
+ if (this.items[index].commodity_images.length===0) this.$set(this.items[index],'commodity_images',res);
|
|
|
+ else this.$set(this.items[index],'commodity_images',this.items[index].commodity_images.concat(res));
|
|
|
+ }
|
|
|
+ return "上传成功";
|
|
|
+ },false,true);
|
|
|
+ },
|
|
|
removeCommonImg(id){
|
|
|
$('#'+id).remove();
|
|
|
},
|
|
|
@@ -1350,6 +1529,7 @@
|
|
|
this.destroyImg(id,url);
|
|
|
},
|
|
|
destroyImg(id,url = null){
|
|
|
+ id= id.replace(/[^0-9]/ig,"");//抽取数字部分
|
|
|
window.tempTip.postBasicRequest('{{url('apiLocal/rejectedBillItem/apiDeleteImg')}}',{id:id,url:url},()=>{
|
|
|
if (url){
|
|
|
this.items.some((item,i)=>{
|
|
|
@@ -1357,12 +1537,20 @@
|
|
|
item.upload_files.some((file,j)=>{
|
|
|
if (file.url === url){this.$delete(this.items[i].upload_files,j);return true;}
|
|
|
});
|
|
|
+ item.package_images.some((file,j)=>{
|
|
|
+ if (file.url === url){this.$delete(this.items[i].package_images,j);return true;}
|
|
|
+ });
|
|
|
+ item.commodity_images.some((file,j)=>{
|
|
|
+ if (file.url === url){this.$delete(this.items[i].commodity_images,j);return true;}
|
|
|
+ });
|
|
|
return true;
|
|
|
}
|
|
|
});
|
|
|
}else{
|
|
|
this.items.forEach((item,i)=>{
|
|
|
if (id.includes(item.id))this.$set(this.items[i],'upload_files',[]);
|
|
|
+ if (id.includes(item.id))this.$set(this.items[i],'commodity_images',[]);
|
|
|
+ if (id.includes(item.id))this.$set(this.items[i],'package_images',[]);
|
|
|
});
|
|
|
}
|
|
|
return "删除成功";
|