<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=""> <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, getBalanceByFilter } from '@/api/request2.js'; import { getListLocationAreaTypeDesc, checkDirectoryItemExist, getDirectoryItemArray, getLocationAreaTypeName, getInventoryStatusDesc, getListItemTypeDesc, getItemTypeInfo } from '@/common/directory.js'; export default { name: 'winScanPack', emits: ["getBalance"], 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: '' }, verifyCategory: { type: Boolean, default: false }, isCheckLocationBalance: { type: Boolean, default: true } }, data() { return { scanResult: {}, show: false, scanList: [], expand: false, showScanResult: {}, expendIcon: 'arrow-down', fromLocationCode: '', fromLocation: '', fromLocationList: [], fromLocationAreaTypeList: [], toLocationAreaTypeList: [], 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.toLocationAreaTypeList = getDirectoryItemArray(businessType.inAreaTypes) this.itemTypesList = getDirectoryItemArray(businessType.itemTypes) this.$refs.popup.open('bottom') setTimeout(res=>{ this.getfocus() },500) }, getScanResult(result) { this.resultData = result; if (!result.package) { this.showErrorMessage(result.label.code + "包装信息为空") return; } this.getItemCodeType(result.package.itemCode, callBack => { if(this.isCheckLocationBalance){ this.queryBalance(this.resultData); }else { this.queryBalance(this.resultData) } //this.queryBalance(this.resultData) }) }, //查询到目标库位的库存余额 getToLocationBalance(result) { uni.showLoading({ title: '查询中', mask: true }) var filters = [] if (result.package.parentNumber) { var packingNumber = result.package.parentNumber + "," + result.package.number; filters.push({ column: "packingNumber", action: "in", value: packingNumber }) } else { filters.push({ column: "packingNumber", action: "==", value: result.package.number }) } filters.push({ column: "itemCode", action: "==", value: result.package.itemCode }) filters.push({ column: "batch", action: "==", value: result.package.batch }) filters.push({ column: "areaType", action: "in", value: this.toLocationAreaTypeList.join(',') }) var params = { filters: filters, pageNo: 1, pageSize: 100, } getBalanceByFilter(params).then(res => { uni.hideLoading() if (res.data.list.length > 0) { this.showErrorMessage("包装在库位【" + res.data.list[0].locationCode + "】已有库存余额"); } else { this.queryBalance(this.resultData); } // callback(res.data) }).catch(err => { this.showErrorMessage(err.message); }) }, queryBalance(result) { var params = { 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 } uni.showLoading({ title: '查询中', mask: true }) 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 + "] \n" + "包装号 [" + params.packingNumber + "] \n" + "批次 [" + params.batch + "] \n" + "状态 [" + status + "] \n" + "库区 [" + areaType + "] \n" + "未查找到库存余额" 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)) { if (this.verifyCategory) { if (result.category == 'LCJ' || result.category == 'BJ') { callBack() } else { this.showErrorMessage("扫描物料的种类不是【量产件】或者【备件】") } } else { 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.losefocus() 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.losefocus(); this.$refs.popup.close() }, getfocus() { if (this.$refs.comscan) { this.$refs.comscan.getfocus() } }, losefocus() { if (this.$refs.comscan) { this.$refs.comscan.losefocus() } } } } </script> <style lang="scss"> .scroll-view { overflow-y: scroll; height: auto; max-height: 300rpx; } </style>