You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
325 lines
8.3 KiB
325 lines
8.3 KiB
<template>
|
|
<uni-popup ref="popup">
|
|
<view class="popup_box">
|
|
<view class="pop_title">
|
|
扫描信息
|
|
<text class="fr" @click="closeScanPopup()">关闭</text>
|
|
</view>
|
|
<view class="pop_tab">
|
|
<view class="uni-steps">
|
|
<com-steps-custom :options="list" :active="active"></com-steps-custom>
|
|
</view>
|
|
<view class="tab_info tab_notitle">
|
|
<win-com-scan ref="scanLocation" v-if="active==0" @getScanResult="getLocationResult"
|
|
:placeholder="scanPlaceholder" :boxFocus="true" :clearResult="true"></win-com-scan>
|
|
<win-com-scan-product v-else="active==1" ref="scanProduct" @getScanResult="getProductResult"
|
|
:placeholder="scanPlaceholder" :boxFocus="true" :clearResult="true"></win-com-scan-product>
|
|
</view>
|
|
<scroll-view scroll-y="true" class="scroll-Y scan_scroll">
|
|
<!-- 回显库位 -->
|
|
<view class="top_wrap" style="padding: 20rpx 0;" v-if="locationCode!=''">
|
|
<view class="top_card">
|
|
<view class="uni-flex space-between top_lines_info">
|
|
<view class="font_sm">
|
|
库位:
|
|
<text class="text_bold">{{locationCode}}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="detail-list count_shadow" v-for="(item, index) in itemList" :key="item.id"
|
|
style="margin:0 0 20rpx 0;">
|
|
<view class="detail-content">
|
|
<uni-swipe-action>
|
|
<uni-swipe-action-item :right-options="options" :auto-close="false"
|
|
@click="swipeClick($event,index)">
|
|
<com-deliver-tf :dataContent="item" :editQty="true" @qtyInput='qtyInput'>
|
|
</com-deliver-tf>
|
|
</uni-swipe-action-item>
|
|
</uni-swipe-action>
|
|
</view>
|
|
</view>
|
|
</scroll-view>
|
|
</view>
|
|
<view class="pop_btn uni-flex uni-row space-between">
|
|
<button class="cancel" @click="cancel">取消</button>
|
|
<button class="save" @click="save">确定</button>
|
|
</view>
|
|
</view>
|
|
<com-balance ref="balanceItems" @selectedItem='getSelectedBalance'></com-balance>
|
|
<comMessage ref="comMessage"></comMessage>
|
|
</uni-popup>
|
|
</template>
|
|
|
|
<script>
|
|
import comStepsCustom from '@/mycomponents/common/comStepsCustom.vue'
|
|
import winComScan from '@/mycomponents/wincom/winComScan.vue'
|
|
import winComScanProduct from '@/mycomponents/wincom/winComScanProduct.vue'
|
|
import comScanDeliverTf from '@/mycomponents/scan/comScanDeliverTf.vue'
|
|
import comDeliverTf from '@/mycomponents/coms/store/comDeliverTf.vue'
|
|
import comBalance from '@/mycomponents/common/comBalance.vue'
|
|
import comMessage from '@/mycomponents/common/comMessage.vue'
|
|
import {
|
|
locations,
|
|
getBalancesByFilter,
|
|
} from '@/api/index.js';
|
|
|
|
import {
|
|
showConfirmMsg,
|
|
getRemoveOption
|
|
} from '@/common/basic.js';
|
|
|
|
export default {
|
|
name: 'comScanReplen',
|
|
components: {
|
|
comStepsCustom,
|
|
winComScan,
|
|
winComScanProduct,
|
|
comScanDeliverTf,
|
|
comDeliverTf,
|
|
comBalance,
|
|
comMessage
|
|
},
|
|
data() {
|
|
return {
|
|
active: 0,
|
|
list: [{
|
|
title: '扫描目标库位',
|
|
num: "1"
|
|
}, {
|
|
title: '扫描产品标签',
|
|
num: "2"
|
|
}],
|
|
//滑动移除
|
|
options: [],
|
|
itemList: [],
|
|
prodLine: {},
|
|
locationCode: '',
|
|
scanPlaceholder: '扫描目标库位'
|
|
};
|
|
},
|
|
props: {
|
|
|
|
},
|
|
mounted() {
|
|
this.options = getRemoveOption();
|
|
},
|
|
onPullDownRefresh() {
|
|
|
|
},
|
|
methods: {
|
|
openScanPopup(locationCode, itemList) {
|
|
if (itemList.length > 0) {
|
|
this.locationCode = locationCode;
|
|
this.itemList = itemList;
|
|
this.active = 1
|
|
}
|
|
this.$refs.popup.open('bottom')
|
|
},
|
|
closeScanPopup() {
|
|
this.$refs.popup.close()
|
|
},
|
|
|
|
//获取地址
|
|
getLocationResult(result) {
|
|
uni.showLoading({
|
|
title: '正在扫描',
|
|
mask: true
|
|
})
|
|
locations(result.data.code).then(res => {
|
|
if (res == null) {
|
|
this.showMessage('目标库位不存在')
|
|
} else {
|
|
this.locationCode = result.data.code;
|
|
this.active += 1;
|
|
this.scanPlaceholder = '扫描产品标签';
|
|
}
|
|
uni.hideLoading();
|
|
}).catch(err => {
|
|
this.showMessage(err.message)
|
|
uni.hideLoading();
|
|
})
|
|
},
|
|
|
|
//获取产品信息
|
|
getProductResult(result) {
|
|
let that = this;
|
|
if (result.data != null) {
|
|
that.scanData = result.data;
|
|
//按照零件号+箱码+批次去重
|
|
let datas = that.itemList.filter(r => {
|
|
return r.itemCode === result.data.itemCode &&
|
|
r.lot === result.data.lot &&
|
|
r.packingCode === result.data.packingCode
|
|
});
|
|
|
|
if (datas.length > 0) {
|
|
//列表中已经存在
|
|
showConfirmMsg('零件已经存在,是否要重新扫描?', confirm => {
|
|
if (confirm) {
|
|
that.itemList.forEach((r, i) => {
|
|
if (r.itemCode === result.data.itemCode &&
|
|
r.lot === result.data.lot &&
|
|
r.packingCode === result.data.packingCode) {
|
|
that.itemList.splice(i, 1);
|
|
return;
|
|
}
|
|
});
|
|
that.getDeliverItem(result.data);
|
|
}
|
|
});
|
|
} else {
|
|
that.getDeliverItem(result.data);
|
|
}
|
|
} else {
|
|
this.showMessage('标签格式不正确,请重新扫描');
|
|
}
|
|
},
|
|
|
|
getDeliverItem(data) {
|
|
let that = this;
|
|
that.getBalance(data, item => {
|
|
if (item != null) {
|
|
if (item.items.length == 0) {
|
|
this.showMessage('在成品库未查找到该零件的库存');
|
|
} else if (item.items.length == 1) {
|
|
let deliverItem = that.createDeliverItem(data, item.items[0]);
|
|
that.itemList.unshift(deliverItem);
|
|
} else {
|
|
this.$refs.balanceItems.openPopup(item.items);
|
|
}
|
|
} else {
|
|
this.showMessage('在成品库未查找到该零件的库存');
|
|
}
|
|
});
|
|
},
|
|
|
|
//创建收货item
|
|
createDeliverItem(data, balanceItem) {
|
|
let deliveritem = {
|
|
itemCode: balanceItem.itemCode,
|
|
item: {
|
|
id: balanceItem.id,
|
|
name: balanceItem.itemName,
|
|
desc1: balanceItem.item.desc1,
|
|
desc2: balanceItem.item.desc2
|
|
},
|
|
lot: balanceItem.lot,
|
|
batch: balanceItem.batch,
|
|
packingCode: balanceItem.packingCode,
|
|
qty: {
|
|
uom: balanceItem.qty.uom,
|
|
qty: balanceItem.qty.qty
|
|
},
|
|
locationCode: balanceItem.locationCode,
|
|
warehouseCode: localStorage.warehouseCode,
|
|
balanceQty: balanceItem.qty.qty,
|
|
status: balanceItem.status
|
|
};
|
|
return deliveritem;
|
|
},
|
|
|
|
//获取零件库存
|
|
getBalance(data, callback) {
|
|
uni.showLoading({
|
|
title: "加载中....",
|
|
mask: true
|
|
});
|
|
let params = {
|
|
pageSize: 100,
|
|
pageIndex: 1,
|
|
itemCode: data.itemCode,
|
|
// locationTypes: [4], //成品库 4 deliverToCustomer
|
|
// locationTypes: [2, 3, 4], //成品库 4
|
|
inventoryStatus: [2], //库存状态为合格
|
|
packingCode: data.packingCode
|
|
};
|
|
getBalancesByFilter(params)
|
|
.then(res => {
|
|
if (res === null) {
|
|
this.showMessage('未查找到零件库存,不可以发货');
|
|
} else {
|
|
callback(res);
|
|
}
|
|
uni.hideLoading();
|
|
})
|
|
.catch(err => {
|
|
this.showMessage(err.message);
|
|
uni.hideLoading();
|
|
});
|
|
},
|
|
|
|
getSelectedBalance(balanceItem) {
|
|
let that = this;
|
|
let deliverItem = that.createDeliverItem(that.scanData, balanceItem);
|
|
that.itemList.unshift(deliverItem);
|
|
},
|
|
|
|
qtyInput(value, item) {
|
|
let qty = Number(value);
|
|
if (qty > item.balanceQty) {
|
|
this.showMessage('发货数量不能大于[' + item.balanceQty + ']')
|
|
setTimeout(() => {
|
|
item.qty.qty = item.balanceQty
|
|
},
|
|
100)
|
|
}
|
|
},
|
|
|
|
//提示是否移除选择的行?
|
|
swipeClick(e, index) {
|
|
let {
|
|
content
|
|
} = e;
|
|
if (content.text === '移除') {
|
|
uni.showModal({
|
|
title: '提示',
|
|
content: '是否移除选择的行?',
|
|
success: res => {
|
|
if (res.confirm) {
|
|
this.itemList.splice(index, 1);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
save() {
|
|
let that = this;
|
|
if (this.locationCode == '') {
|
|
return;
|
|
} else if (this.itemList.length == 0) {
|
|
return;
|
|
} else {
|
|
this.closeScanPopup();
|
|
this.$emit('confirm', this.locationCode, this.itemList)
|
|
this.cancel();
|
|
}
|
|
},
|
|
|
|
showMessage(message) {
|
|
this.$refs.comMessage.showMessage(message);
|
|
},
|
|
//取消
|
|
cancel() {
|
|
this.active = 0;
|
|
this.prodLine = {};
|
|
this.locationCode = ''
|
|
this.itemList = [];
|
|
this.scanPlaceholder = '扫描目标库位';
|
|
},
|
|
|
|
//关闭
|
|
close() {
|
|
this.$emit("close");
|
|
},
|
|
|
|
showMessage(message) {
|
|
this.$refs.comMessage.showMessage(message);
|
|
},
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style>
|
|
</style>
|
|
|