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.
 
 
 
 
 
 

311 lines
8.7 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="scanContainerCode" v-if="active==0" @getScanResult="getScanContainerResult"
:placeholder="scanPlaceholder" :clearResult='true'>
</win-com-scan>
<win-scan-tj-mes v-else @getScanResult="getScanItems" :placeholder="scanPlaceholder"></win-scan-tj-mes>
</view>
</view>
</view>
<comMessage ref="comMessage"></comMessage>
</uni-popup>
</template>
<script>
import comStepsCustom from '@/mycomponents/common/comStepsCustom.vue'
import winComScan from '@/mycomponents/wincom/winComScan.vue'
import WinScanTjMes from '@/mycomponents/wincom/WinScanTjMes.vue'
import comMessage from '@/mycomponents/common/comMessage.vue'
import moment from 'moment'
import {
getprodlineitemAsync,
getContainerAsync,
checkContainerOrderAsync,
} from '@/api/index.js';
export default {
name: 'comScanTjReceipt',
components: {
comStepsCustom,
winComScan,
WinScanTjMes,
comMessage,
},
data() {
return {
active: 0,
list: [{
title: '器具编码',
num: "1"
}, {
title: '上层门板二维码',
num: "2"
}, {
title: '下层门板二维码',
num: "3"
}],
scanPlaceholder: '请扫描器具编码',
containerCode: '',
produceDate: '',
prodLine: {},
scanPosition: 'F' //F前 R后
};
},
props: {
},
mounted() {
},
onPullDownRefresh() {
},
methods: {
openScanPopup(containerCode, containerItem, postion) {
this.containerCode = containerCode;
this.containerItem = containerItem;
if (postion == 'F') {
this.active = 2;
this.scanPosition = 'R'
this.scanPlaceholder = '请扫描下层门板二维码';
} else if (containerCode != '' ) {
this.active = 1;
this.scanPosition = 'F'
this.scanPlaceholder = '请扫描上层门板二维码';
} else if (containerCode == '') {
this.active = 0;
this.scanPlaceholder = '请扫描器具编码';
}
this.$refs.popup.open('bottom')
},
closeScanPopup() {
this.$refs.popup.close()
},
//扫描器具号
async getScanContainerResult(result) {
if (result.data.code === undefined) {
this.showMessage('未扫描到器具号');
} else {
let code = result.data.code;
await this.getContainerCode(code);
this.$emit('getContainerResult', code, this.containerItem, this.prodLine)
this.active = 1;
this.scanPosition = 'F'; //上层门板
this.scanPlaceholder = '请扫描上层门板二维码';
return;
}
},
async getContainerCode(code) {
let that = this;
that.containerCode = code;
uni.showLoading({
title: '正在解析中...'
})
//按序收货
if (that.isOrderReceipt) {
try {
let orderRes = await checkContainerOrderAsync(code);
if (orderRes.error != null && orderRes.error.validationErrors != null) {
let error = '';
for (var i = 1; i <= orderRes.error.validationErrors.length; i++) {
let item = orderRes.error.validationErrors[i - 1];
error += i + '.' + item.message;
}
that.showMessage(error);
that.clearContainerCode();
uni.hideLoading();
return;
}
} catch (ex) {
that.showMessage('获取排序异常' + ex.message);
uni.hideLoading();
return;
}
} else {
//1.检查器具号是否存在
let container = await getContainerAsync(code);
if (container != "") {
that.showMessage('器具编号为[' + code + ']的器具已收货,无法重复收货');
that.clearContainerCode();
uni.hideLoading();
return;
}
}
//2.检查器具格式是否正确
let containerItem = that.checkContainerFormat(code)
if (containerItem == null) {
uni.hideLoading();
return;
that.clearContainerCode();
} else {
that.containerItem = containerItem;
}
//3.获取生产线是否存在
console.log('prodLineCode', that.containerItem.prodLineCode)
let prodItem = await getprodlineitemAsync(that.containerItem.prodLineCode);
if (prodItem.error != null) {
that.showMessage(prodItem.error.message);
uni.hideLoading();
uni.hideLoading();
return;
} else {
that.prodLine = {
prodLineCode: prodItem.code,
productLocation: prodItem.productLocation,
rawLocation: prodItem.rawLocation,
workShop: prodItem.workshopCode
};
uni.hideLoading();
}
uni.hideLoading();
},
//检验器具格式
checkContainerFormat(code) {
console.log('code', code);
//P-20220703-254L-0004
let containerItem = {
prefix: '', //前缀
produceDate: '', //日期
prodLineCode: '', //生产线
projectNo: '', //项目号
postion: '', //位置
order: '' //流水
};
//校验器具格式
let arrayItems = code.split('-');
//1.前缀
let str0 = arrayItems[0];
if (!/^([a-zA-Z])$/.test(str0)) {
this.showMessage('器具前缀[' + str0 + ']格式错误');
return null;
} else {
containerItem.prefix = str0; //前缀
}
//2.日期
let str1 = arrayItems[1];
let producedate = moment(str1).format("YYYY-MM-DD");
if (producedate == 'Invalid date') {
this.showMessage('器具日期格式[' + str1 + ']错误');
return null;
} else {
this.produceDate = producedate;
containerItem.produceDate = producedate; //前缀
}
let prodLineCode = arrayItems[2]; //生产线
if (prodLineCode == null || prodLineCode == '') {
this.showMessage('器具中未解析到生产线');
return null;
} else {
containerItem.prodLineCode = prodLineCode; //前缀
}
let projectno = prodLineCode.substring(0, prodLineCode.length - 1) //项目号
let postion = prodLineCode.substring(prodLineCode.length - 1, prodLineCode.length);
if (postion != 'L' && postion != 'R') {
this.showMessage('[' + prodLineCode + ']中未体现出左右(LR)位置');
return null;
} else {
containerItem.projectNo = projectno;
containerItem.postion = postion;
}
//流水
let str3 = arrayItems[3];
if (!/^[0-9]{7}$/.test(str3)) {
this.showMessage('器具流水[' + str3 + ']格式错误');
return null;
} else {
containerItem.order = str3;
}
return containerItem;
},
async getProdlineItem(prodLineCode) {
try {
let res = await getprodlineitemAsync(prodLineCode);
if (res === null) {
this.showMessage('未查找到生产线:' + prodLineCode);
} else {
return res;
}
} catch (err) {
this.showMessage('查询生产线失败' + err.message);
uni.hideLoading();
}
},
//扫描完工二维码
getScanItems(result) {
let that = this;
let items = result.items;
let availItems = items.filter(r => r.itemCode != 'N' && r.projectNo != 'N' && r.produceNo != 'N' && r
.lot != 'N');
if (availItems.length > 0) {
let item = availItems[0];
let firstPosition = item.position;
let count = availItems.filter(r => r.position != firstPosition).length;
if (count > 0) {
this.showMessage('门板位置信息不一致,请重新扫描');
return;
}
let p = firstPosition.substring(1, 2) //左右位置
if (p != this.containerItem.postion) {
this.showMessage('门板位置信息与托盘左右位置信息不一致,请重新扫描');
return;
}
let p1 = firstPosition.substring(0, 1) //前后位置
if (this.scanPosition != p1) {
if (this.scanPosition == 'F') //上层
{
this.showMessage('请扫描上层门板二维码');
} else {
this.showMessage('请扫描下层门板二维码');
}
return;
}
if (firstPosition === 'FL' || firstPosition === 'FR') { //上层门板
this.$emit('getDoorResult', this.scanPosition, items)
this.active = 2;
this.scanPosition = 'R'; //上层门板
this.scanPlaceholder = '请扫描下层门板二维码';
} else if (firstPosition === 'RL' || firstPosition === 'RR') { //后门板
this.$emit('getDoorResult', this.scanPosition, items)
this.closeScanPopup();
} else {
this.showMessage('门板位置信息错误,请重新扫描');
}
} else {
this.showMessage('未解析到有效的门板信息,请重新扫描');
return;
}
},
showMessage(message) {
this.$refs.comMessage.showMessage(message);
},
}
};
</script>
<style>
</style>