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.
 
 
 
 
 
 

518 lines
13 KiB

<template>
<page-meta root-font-size="18px"></page-meta>
<view class="">
<scroll-view scroll-y="true" class="scrollView">
<win-blank-view @goScan='openScanPopup' v-if="putawayjobList.length==0"></win-blank-view>
<view hover-class="uni-list-cell-hover" v-for="(item, index) in putawayjobList" :key="item.id">
<uni-swipe-action>
<uni-swipe-action-item :right-options="options" :auto-close="false"
@click="swipeClick($event,index)">
<com-putawayjob :datacontent="item">
</com-putawayjob>
</uni-swipe-action-item>
</uni-swipe-action>
</view>
</scroll-view>
<view class="new_btn_bot" v-if="putawayjobList.length>0">
<button class="new_save_btn" type="primary" @click="take()" v-if="putawayjobList.length>0">提交</button>
</view>
<comMessage ref="comMessage"></comMessage>
<com-balance ref="balanceItems" @selectedItem='getSelectedBalance'></com-balance>
<win-scan-button @goScan='openScanPopup' v-if="putawayjobList.length>0"></win-scan-button>
<win-scan-by-pack ref="scanPopup" @getScanResult='getScanResult'></win-scan-by-pack>
</view>
</template>
<script>
import {
getBalancesByFilter,
byContainercode,
byPackingcode,
checkjobbypacking,
checkjobbycontainer
} from '@/api/index.js';
import {
maxPageSize,
showConfirmMsg,
getInventoryStatusDesc,
getLocationTypeDesc,
goHome,
getRemoveOption
} from '@/common/basic.js';
import {
printPutawayLabel
} from '@/common/print.js'
import winBlankView from '@/mycomponents/wincom/winBlankView.vue'
import comBalance from '@/mycomponents/common/comBalance.vue'
import winScanButton from '@/mycomponents/wincom/winScanButton.vue'
import winScanByPack from '@/mycomponents/wincom/winScanByPack.vue'
import comPutawayjob from '@/mycomponents/coms/task/comPutawayjob.vue';
import comMessage from '@/mycomponents/common/comMessage.vue'
export default {
name: 'putawayjob',
components: {
winBlankView,
comPutawayjob,
comMessage,
comBalance,
winScanButton,
winScanByPack
},
data() {
return {
options: [],
putawayjobList: [],
status: '',
pageSize: 1000,
pageIndex: 1,
scanType: null, //null未扫描,箱,托
stype: null,
submitting: false,
enableLocationType: '无',
enableStatus: '无',
paramLocationType: [],
paramInventoryStatus: []
};
},
props: {
datacontent: {
type: Object,
value: null
}
},
filters: {
getInventoryStatus(val) {
return getInventoryStatusDesc(val);
}
},
//返回首页
onNavigationBarButtonTap(e) {
if (e.index === 0) {
goHome();
}else if(e.index === 1){
window.location.reload();
}
},
onLoad() {
//this.chekConfig();
},
mounted() {
this.options = getRemoveOption();
this.chekConfig();
},
methods: {
openScanPopup() {
this.$refs.scanPopup.openScanPopup();
},
chekConfig() {
this.paramLocationType = [];
this.paramInventoryStatus = [];
if (this.$putawayLocationTypes === undefined || this.$putawayLocationTypes === '') {
this.enableLocationType = '无';
this.showMessage('请在配置文件中配置允许上架的库位类型');
return false;
} else {
let types = this.$putawayLocationTypes.split(',');
this.enableLocationType = '';
for (var i = 0; i < types.length; i++) {
let itype = Number(types[i]);
this.paramLocationType.push(itype);
let stype = getLocationTypeDesc(itype);
if (i < types.length - 1) {
this.enableLocationType += stype + ','
} else {
this.enableLocationType += stype
}
}
let status = this.$putawayInventoryStatus.split(',');
this.enableStatus = '';
for (var i = 0; i < status.length; i++) {
let istatu = Number(status[i]);
this.paramInventoryStatus.push(istatu);
let sstatu = getInventoryStatusDesc(istatu);
if (i < status.length - 1) {
this.enableStatus += sstatu + ','
} else {
this.enableStatus += sstatu
}
}
}
return true;
},
getScanResult(result) {
let that = this;
let configed = this.chekConfig();
if (!configed) {
return
}
if (result.data.isPack) {
if (result.data.itemCode === undefined || result.data.itemCode === '') {
this.showMessage('扫描的标签中不包含零件号,请重新扫描');
return;
}
}
//第一次扫描
if (this.scanType === null || this.scanType === "") {
this.scanType = result.data.isPack === null ? '' : result.data.isPack ? '箱' : '托';
} else {
//与之前的扫描类型不一致
if ((result.data.isPack && this.scanType != '箱') || (!result.data.isPack && this
.scanType !=
'托')) {
this.showMessage('应该扫描' + this.scanType);
return;
}
}
let param = {
pageSize: this.pageSize,
pageInde: this.pageIndex
};
//1.检验是否有任务
if (that.scanType === '箱') {
param.packingCode = result.data.packingCode;
param.itemCode = result.data.itemCode;
checkjobbypacking(param)
.then(res => {
if (res.length === 0) {
that.handle(result);
} else {
this.showMessage(that.scanType + ':' + result.data.packingCode +
'\n已经有上架任务');
that.resetScanType();
return;
}
})
.catch(err => {
this.showMessage(err.message);
});
} else if (that.scanType === '托') {
param.containerCode = result.data.containerCode;
// param.itemCode = result.data.itemCode;
checkjobbycontainer(param)
.then(res => {
if (res.length === 0) {
that.handle(result);
} else {
this.showMessage(that.scanType + ':' + result.data.containerCode +
'\n已经有上架任务');
that.resetScanType();
return;
}
})
.catch(err => {
console.log('list err', err);
});
} else {
this.showMessage('请扫描箱标签');
}
},
swipeClick(e, index) {
let {
content
} = e;
if (content.text === '移除') {
uni.showModal({
title: '提示',
content: '是否移除选择的行?',
success: res => {
if (res.confirm) {
this.putawayjobList.splice(index, 1);
}
}
});
}
},
handle(result) {
//2.获取参数
let that = this;
let param = that.getParam(result);
if (param === null) return;
if (param.packingCode === null && param.containerCode === null) {
this.showMessage('未获取到正确的参数');
return;
}
//3.判断零件是已经扫描过
let items = that.checkScanResult(result);
if (items.length > 0) {
let code = param.packingCode != undefined ? param.packingCode : param
.containerCode;
let msg = this.scanType + '[' + code + ']已经扫描过,是否要重新扫描';
showConfirmMsg(msg, confirm => {
if (confirm) {
this.putawayjobList.forEach((r, i) => {
if (result.data.isPack) { //箱码
if (r.packingCode === result.data.packingCode && r
.itemCode === result.data.itemCode) {
this.putawayjobList.splice(i, 1);
return;
}
} else {
if (r.containerCode === result.data.containerCode) {
this.putawayjobList.splice(i, 1);
}
}
});
//删除后重新查询
that.getBalances(param, result);
}
});
} else {
that.getBalances(param, result);
}
},
//获取箱和托的参数
getParam(result) {
if (result.data.scanType === 'qrcode') {
let param = {
pageSize: this.pageSize,
pageIndex: this.pageIndex,
};
if (result.data.isPack) { //箱
if (result.data.packingCode != null) {
param.packingCode = result.data.packingCode;
param.itemCode = result.data.itemCode;
} else {
this.showMessage('未解析到箱码');
}
} else //托
{
if (result.data.containerCode != null) {
param.containerCode = result.data.containerCode;
} else {
this.showMessage('未解析到托码');
}
}
return param;
} else {
this.showMessage('未解析到条码');
}
},
//检验是否是第二次扫描
checkScanResult(result) {
let items = {};
if (result.data.isPack) { //箱码
items = this.putawayjobList.filter(r => {
return r.packingCode === result.data.packingCode && r.itemCode === result.data.itemCode
})
} else {
items = this.putawayjobList.filter(r => {
return r.containerCode === result.data.containerCode
})
}
return items;
},
//获取零件库存
getBalances(param, result) {
uni.showLoading({
title: "加载中....",
mask: true
});
if (this.$putawayLocationTypes === undefined || this.$putawayLocationTypes === '') {
this.showMessage('请在配置文件中配置允许上架的库位类型');
return;
}
//根据配置获取LocationType,
//天津是从待检库位,状态为待检或者合格,直接上架到原料库位
//杭州是待检库位,状态为合格,直接上架到原料库位
param.locationTypes = this.paramLocationType;
param.inventoryStatus = this.paramInventoryStatus;
getBalancesByFilter(param)
.then(res => {
if (res.totalCount === 0) {
this.showMessage('在' + this.enableLocationType + '中未找到可上架的库存余额');
} else {
if (result.data.isPack) {
if (res.totalCount > 1) {
this.$refs.balanceItems.openPopup(res.items);
} else {
this.putawayjobList.push(res.items[0])
}
} else {
this.putawayjobList = [...this.putawayjobList, ...res.items];
}
}
uni.hideLoading();
})
.catch(err => {
this.showMessage(err.message);
uni.hideLoading();
});
},
getSelectedBalance(balanceItem) {
if (balanceItem.qty.qty <= 0) {
this.showMessage('库存数量为' + balanceItem.qty.qty + ',不可以上架');
} else {
this.putawayjobList.push(balanceItem);
}
},
take() {
if (this.putawayjobList.length === 0) {
this.showMessage('请先扫描标签');
} else {
let strItemCode = '';
this.putawayjobList.forEach((item, i) => {
if (item.qty.qty <= 0) {
strItemCode += item.itemCode + ','
}
});
if (strItemCode != '') {
showConfirmMsg(strItemCode + '的库存数量为0,不能创建上架任务,是否要为其它零件创建上架任务?', confirm => {
if (confirm) {
this.submit();
}
});
} else {
this.submit();
}
}
},
submit() {
this.submitting = true;
uni.showLoading({
title: "提交中..."
});
let datas = [];
this.putawayjobList.forEach((item, i) => {
if (item.qty.qty > 0) {
let data = {
containerCode: item.containerCode,
packingCode: item.packingCode,
itemCode: item.itemCode,
locationCode: item.locationCode,
inventoryStatus: item.status
};
datas.push(data)
}
})
if (datas.length == 0) {
this.showMessage('没有符合条件的零件')
this.hideLoading();
return;
}
let params = {
inventories: datas
};
let jsonParams = JSON.stringify(params);
console.log('params', jsonParams)
if (this.scanType === '托') {
byContainercode(jsonParams)
.then(res => {
this.afterSubmit(res);
})
.catch(err => {
this.showMessage(err.message);
this.deleteItem();
this.hideLoading();
});
} else if (this.scanType === '箱') {
byPackingcode(jsonParams)
.then(res => {
this.afterSubmit(res);
})
.catch(err => {
this.showMessage(err.message);
this.deleteItem();
this.hideLoading();
});
}
},
afterSubmit(res) {
if (res != null && res.length > 0) {
this.showTakePutawayJob(res);
this.hideLoading();
} else {
this.showMessage('任务创建失败');
this.hideLoading();
}
},
//要增加异步方法
showPrintLabel() {
printPutawayLabel();
},
showTakePutawayJob(res) {
showConfirmMsg('任务创建成功,是否要执行任务?', confirm => {
//打开执行任务详情页面
if (confirm) {
let isPack = this.scanType === '箱' ? true : false;
uni.navigateTo({
url: './putaway_detail?id=' + res[0].id +
'&jobStatus=' + res[0].jobStatus + '&isPack=' +
isPack
})
} else {
this.deleteItem();
}
});
},
hideLoading() {
this.submitting = false;
uni.hideLoading();
},
//清空
clear() {
showConfirmMsg('是否要清空已经扫描的零件?', confirm => {
if (confirm) {
this.deleteItem();
}
});
},
deleteItem() {
this.scanType = null;
this.putawayjobList = [];
},
setScanType(result) {
if (this.scanType === null || this.scanType === "") {
this.scanType = result.data.isPack === null ? '' : result.data.isPack ? '箱' : '托';
}
},
resetScanType() {
if (this.putawayjobList.length === 0) {
this.scanType = null;
}
},
showMessage(message) {
this.$refs.comMessage.showMessage(message);
},
}
}
</script>
<style>
.scanType {
padding: 5rpx 30rpx;
font-size: 16px;
color: gray;
}
</style>