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.
316 lines
8.4 KiB
316 lines
8.4 KiB
<template>
|
|
<view>
|
|
<uni-popup ref="popup" :mask-click="false">
|
|
<view class="popup_box">
|
|
<view class="pop_title uni-flex space-between">
|
|
<view class="" style="font-size: 35rpx;">
|
|
扫描{{title}}
|
|
</view>
|
|
|
|
<view class="">
|
|
<image class="fr icons_scan_close" src="/static/icons/icons_scan_close.svg"
|
|
@click="closeScanPopup()"></image>
|
|
</view>
|
|
</view>
|
|
<view class="uni-flex uni-row" style="align-items: center;
|
|
background-color: #fff;
|
|
margin-left: 20rpx;
|
|
margin-right: 20rpx;
|
|
border-radius: 8rpx;
|
|
height: 30px;">
|
|
<view class="uni-center" style="width: 25%; font-size: 35rpx;">
|
|
来源库位
|
|
</view>
|
|
<!-- style="width: 75%;padding: 8rpx" -->
|
|
<view class="">
|
|
<!-- <input v-model="fromLocationCode" placeholder="请扫描来源库位" :focus="locationOnFocus"
|
|
placeholder-style="font-size:12px" style="padding: 5px;" @confirm="scanLocation" /> -->
|
|
|
|
<view v-if='allowModifyLocation'>
|
|
<uni-combox :candidates="fromLocationList" v-model="fromLocationCode" placeholder="请扫描来源库位"
|
|
@confirm="handleConfirm" style='height: 30rpx;border:1px solid #fff ;'></uni-combox>
|
|
</view>
|
|
<view v-else>
|
|
<text style="padding: 5px;font-size: 40rpx;">
|
|
{{fromLocationCode}}
|
|
</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="">
|
|
<view class="">
|
|
<win-com-scan ref="comscan" :placeholder="title" @getResult="getScanResult"
|
|
:isShowHistory="isShowHistory" :clearResult="true" :headerType="headerType"></win-com-scan>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</uni-popup>
|
|
<balance-select ref="balanceSelect" @onSelectItem='selectBalanceItem'></balance-select>
|
|
<!-- 模拟扫描功能 -->
|
|
|
|
</view>
|
|
<comMessage ref="comMessage"></comMessage>
|
|
</template>
|
|
|
|
<script>
|
|
import winComScan from '@/mycomponents/scan/winComScan.vue'
|
|
import balanceSelect from '@/mycomponents/balance/balanceSelect.vue'
|
|
import {
|
|
getBalanceByManagementPrecisionByPacking,
|
|
} from '@/common/balance.js';
|
|
|
|
import {
|
|
getBalanceByParams,
|
|
getBasicItemByCode
|
|
} from '@/api/request2.js';
|
|
|
|
import {
|
|
getListLocationAreaTypeDesc,
|
|
checkDirectoryItemExist,
|
|
getDirectoryItemArray,
|
|
getLocationAreaTypeName,
|
|
getInventoryStatusDesc,
|
|
getListItemTypeDesc,
|
|
getItemTypeInfo
|
|
} from '@/common/directory.js';
|
|
export default {
|
|
name: 'winScanPack',
|
|
emits: ["getBalance","onCloseScanPopup"],
|
|
components: {
|
|
winComScan,
|
|
balanceSelect
|
|
},
|
|
props: {
|
|
title: {
|
|
type: String,
|
|
default: '箱标签'
|
|
},
|
|
isShowHistory: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
headerType: {
|
|
type: String,
|
|
default: "HPQ,HMQ"
|
|
},
|
|
balanceFromInventoryStatuses: { //是否传fromInventoryStatuses
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
bussinessCode:{
|
|
type: String,
|
|
default: ''
|
|
},
|
|
//是否允许修改库位
|
|
allowModifyLocation: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
|
|
|
|
},
|
|
data() {
|
|
return {
|
|
scanResult: {},
|
|
show: false,
|
|
scanList: [],
|
|
expand: false,
|
|
showScanResult: {},
|
|
expendIcon: 'arrow-down',
|
|
fromLocationCode: '',
|
|
fromLocation: '',
|
|
fromLocationList: [],
|
|
fromLocationAreaTypeList: [],
|
|
locationOnFocus: false,
|
|
businessType: {},
|
|
inventoryStatus: [],
|
|
managementPrecision: '',
|
|
fromInventoryStatuses: [],
|
|
itemTypesList: [],
|
|
isCheck: false,
|
|
resultData: {}
|
|
}
|
|
},
|
|
created() {
|
|
|
|
},
|
|
methods: {
|
|
openScanPopup(businessType) {
|
|
this.businessType = businessType
|
|
this.fromInventoryStatuses = getDirectoryItemArray(businessType.outInventoryStatuses)
|
|
this.fromLocationAreaTypeList = getDirectoryItemArray(businessType.outAreaTypes)
|
|
this.itemTypesList = getDirectoryItemArray(businessType.itemTypes)
|
|
this.$refs.popup.open('bottom')
|
|
|
|
},
|
|
|
|
openScanPopupForJob(fromLocationCode, fromLocationList, jobContent){
|
|
this.fromLocationCode = fromLocationCode;
|
|
this.fromLocationList = fromLocationList;
|
|
if (fromLocationCode != '') {
|
|
this.packGetFocus();
|
|
} else {
|
|
if (this.fromLocationList.length == 0) {
|
|
this.locationGetFocus();
|
|
} else {
|
|
this.fromLocationCode = this.fromLocationList[0];
|
|
}
|
|
}
|
|
|
|
setTimeout(res => {
|
|
this.$refs.popup.open('bottom')
|
|
}, 500)
|
|
this.fromInventoryStatuses = getDirectoryItemArray(jobContent.outInventoryStatuses)
|
|
this.inventoryStatus = getDirectoryItemArray(jobContent.outInventoryStatuses); //出库库存状态; //出库库存状态
|
|
this.fromLocationAreaTypeList = getDirectoryItemArray(jobContent.fromAreaTypes); //出库库存状态
|
|
},
|
|
|
|
handleConfirm() {
|
|
this.$emit('confirm', this.fromLocationCode)
|
|
},
|
|
|
|
getScanResult(result) {
|
|
|
|
if (this.fromLocationCode == '') {
|
|
this.showErrorMessage('请选择来源库位', res => {
|
|
});
|
|
return;
|
|
}
|
|
|
|
this.resultData = result;
|
|
if(!result.package){
|
|
this.showErrorMessage(result.label.code+"包装信息为空")
|
|
return;
|
|
}
|
|
//查询物料信息,然后查询库存
|
|
this.getItemCodeType(result.package.itemCode,callBack=>{
|
|
this.queryBalance(this.resultData)
|
|
})
|
|
},
|
|
|
|
queryBalance(result) {
|
|
var params = {
|
|
locationCode:this.fromLocationCode,
|
|
itemCode: result.package.itemCode,
|
|
batch: result.label.batch,
|
|
packingNumber: result.label.packingNumber,
|
|
parentPackingNumber:result.package.parentNumber,
|
|
inventoryStatus: this.fromInventoryStatuses,
|
|
areaType: this.fromLocationAreaTypeList,
|
|
bussinessCode:this.bussinessCode
|
|
}
|
|
getBalanceByParams(params).then(res => {
|
|
uni.hideLoading()
|
|
if (res.data.length == 0) {
|
|
var status = getInventoryStatusDesc(params.inventoryStatus)
|
|
var areaType = getListLocationAreaTypeDesc(params.areaType)
|
|
var hint =
|
|
"按物料号 [" + params.itemCode + "] <br>" +
|
|
"包装号 [" + params.packingNumber + "] <br>" +
|
|
"批次 [" + params.batch + "] <br>" +
|
|
"状态 [" + status + "] <br>" +
|
|
"库区 [" + areaType + "] <br>" +
|
|
"未查找到库存余额"
|
|
this.showErrorMessage(hint)
|
|
} else if (res.data.length == 1) {
|
|
|
|
result.balance = res.data[0]
|
|
if(result.label.packingNumber!=result.balance.packingNumber){
|
|
result.balance.lableQty=result.label.qty
|
|
}
|
|
this.$emit("getBalance", result)
|
|
// this.closeScanPopup()
|
|
} else {
|
|
//多条记录
|
|
this.$refs.balanceSelect.openPopup(res.data);
|
|
}
|
|
|
|
}).catch(error => {
|
|
uni.hideLoading()
|
|
this.showErrorMessage(error)
|
|
})
|
|
},
|
|
getItemCodeType(itemCode,callBack) {
|
|
uni.showLoading({
|
|
title: "加载中",
|
|
mask: true
|
|
})
|
|
getBasicItemByCode(itemCode).then(res => {
|
|
if (res.data != null && res.data.list.length > 0) {
|
|
var result = res.data.list[0];
|
|
var status = result.available;
|
|
var type = result.type;
|
|
if (status == "TRUE") {
|
|
if (checkDirectoryItemExist(this.itemTypesList, type)) {
|
|
callBack()
|
|
} else {
|
|
var hint = getListItemTypeDesc(this.itemTypesList);
|
|
uni.hideLoading()
|
|
this.showErrorMessage("扫描物料[" + itemCode + "]是[" +
|
|
getItemTypeInfo(type).label + "],需要的物料类型是[" + hint + "]")
|
|
}
|
|
} else {
|
|
uni.hideLoading()
|
|
this.showErrorMessage('物料【' + itemCode + '】不可用');
|
|
}
|
|
} else {
|
|
uni.hideLoading()
|
|
this.showErrorMessage('未查找到物料【' + itemCode + '】');
|
|
}
|
|
}).catch(error => {
|
|
uni.hideLoading();
|
|
this.showErrorMessage(error)
|
|
})
|
|
},
|
|
showErrorMessage(message) {
|
|
this.$refs.comMessage.showErrorMessage(message, res => {
|
|
if (res) {
|
|
if(this.$refs.comscan){
|
|
this.$refs.comscan.getfocus()
|
|
}
|
|
}
|
|
});
|
|
},
|
|
selectBalanceItem(item) {
|
|
this.resultData.balance = item
|
|
this.$emit("getBalance", this.resultData)
|
|
// this.closeScanPopup()
|
|
},
|
|
closeScanPopup() {
|
|
this.packLoseFocus()
|
|
this.$refs.popup.close()
|
|
this.$emit("onCloseScanPopup")
|
|
},
|
|
getfocus(){
|
|
if(this.$refs.comscan){
|
|
this.$refs.comscan.getfocus()
|
|
}
|
|
},
|
|
|
|
packGetFocus() {
|
|
if (this.$refs.comscan) {
|
|
this.$refs.comscan.getfocus();
|
|
}
|
|
},
|
|
|
|
packLoseFocus() {
|
|
if (this.$refs.comscan) {
|
|
this.$refs.comscan.losefocus();
|
|
}
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.scroll-view {
|
|
overflow-y: scroll;
|
|
height: auto;
|
|
max-height: 300rpx;
|
|
}
|
|
</style>
|