Browse Source

绑定托标签,退料扫描卡顿

master_hella
李俊城 22 hours ago
parent
commit
e8e2d5efe7
  1. 46
      src/api/request2.js
  2. 311
      src/mycomponents/list/selectList.vue
  3. 248
      src/mycomponents/scan/winComScanBalanceBind.vue
  4. 341
      src/mycomponents/scan/winComScanPalletLabel.vue
  5. 5
      src/mycomponents/status/balanceStatus.vue
  6. 12
      src/pages.json
  7. 406
      src/pages/palletLabel/bindPalletLabel.vue
  8. 275
      src/pages/palletLabel/coms/comPallLabelCard.vue
  9. 361
      src/pages/palletLabel/coms/comPalletLabel.vue
  10. 2
      src/pages/productionReturn/job/okToReturnDetail.vue

46
src/api/request2.js

@ -4874,6 +4874,52 @@ export function getRecommendLocationEmpty(params) {
/**
* 绑定查询托标签
* @param {*}
*/
export function getBalanceByPalletLabel(data) {
return request({
url: baseApi + "/wms/packagetuomerge-main/queryScanPackageInfo",
method: "post",
data: data
});
}
/**
* 绑定托标签 提交
* @param {*} 任务id
*
*/
export function palletLabelBindSubmit(params) {
return request({
url: baseApi + "/wms/packagetuomerge-main/create",
method: "post",
data: params,
});
}
/**
* 通过物料查询包装规格
* @param {*} itemCode
*
*/
export function getBindPackUnitByItemCode(itemCode) {
var params = {
itemCode: itemCode,
pageNo: 1,
pageSize: 1000
}
return request({
url: baseApi + "/wms/itempackage/page",
method: "get",
data: params,
});
}

311
src/mycomponents/list/selectList.vue

@ -0,0 +1,311 @@
<template>
<view class="uni-combox" :class="border ? '' : 'uni-combox__no-border'">
<view v-if="label" class="uni-combox__label" :style="labelStyle">
<text>{{label}}</text>
</view>
<view class="uni-combox__input-box" :style="inputStyle">
<input class="uni-combox__input " type="text" :placeholder="placeholder"
:disabled="inputDisabled"
placeholder-class="uni-combox__input-plac" v-model="inputVal" @input="onInput" @focus="onFocus"
@blur="onBlur" @confirm ="confirm"/>
<uni-icons :type="showSelector? 'top' : 'bottom'" size="14" color="#999" @click="toggleSelector">
</uni-icons>
</view>
<view class="uni-combox__selector" v-if="showSelector">
<view class="uni-popper__arrow"></view>
<scroll-view scroll-y="true" class="uni-combox__selector-scroll">
<view class="uni-combox__selector-empty" v-if="filterCandidatesLength === 0">
<text>{{emptyTips}}</text>
</view>
<view class="uni-combox__selector-item" v-for="(item,index) in filterCandidates" :key="index"
@click="onSelectorClick(index)">
<view class="">
<text>{{item}}</text>
</view>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
/**
* Combox 组合输入框
* @description 组合输入框一般用于既可以输入也可以选择的场景
* @tutorial https://ext.dcloud.net.cn/plugin?id=1261
* @property {String} label 左侧文字
* @property {String} labelWidth 左侧内容宽度
* @property {String} placeholder 输入框占位符
* @property {Array} candidates 候选项列表
* @property {String} emptyTips 筛选结果为空时显示的文字
* @property {String} value 组合框的值
*/
export default {
name: 'uniCombox',
emits: ['input', 'update:modelValue','confirm'],
props: {
border: {
type: Boolean,
default: true
},
label: {
type: String,
default: ''
},
labelWidth: {
type: String,
default: 'auto'
},
inputWidth:{
type: String,
default: 'auto'
},
placeholder: {
type: String,
default: ''
},
candidates: {
type: Array,
default () {
return []
}
},
emptyTips: {
type: String,
default: '无匹配项'
},
//true false
inputDisabled: {
type: Boolean,
default: false
},
// #ifndef VUE3
value: {
type: [String, Number],
default: ''
},
// #endif
// #ifdef VUE3
modelValue: {
type: [String, Number],
default: ''
},
// #endif
},
data() {
return {
showSelector: false,
inputVal: ''
}
},
computed: {
labelStyle() {
if (this.labelWidth === 'auto') {
return ""
}
return `width: ${this.labelWidth}`
},
inputStyle(){
if (this.inputWidth === 'auto') {
return ""
}
return `width: ${this.inputWidth}`
},
filterCandidates() {
// return this.candidates.filter((item) => {
// return item.toString().indexOf(this.inputVal) > -1
// })
return this.candidates;
},
filterCandidatesLength() {
return this.filterCandidates.length
}
},
watch: {
// #ifndef VUE3
value: {
handler(newVal) {
this.inputVal = newVal
},
immediate: true
},
// #endif
// #ifdef VUE3
modelValue: {
handler(newVal) {
this.inputVal = newVal
},
immediate: true
},
// #endif
},
methods: {
toggleSelector() {
this.showSelector = !this.showSelector
},
onFocus() {
this.showSelector = true
},
onBlur() {
setTimeout(() => {
this.showSelector = false
}, 153)
},
onSelectorClick(index) {
this.inputVal = this.filterCandidates[index]
this.showSelector = false
this.$emit('input', this.inputVal)
this.$emit('update:modelValue', this.inputVal)
},
onInput() {
setTimeout(() => {
this.$emit('input', this.inputVal)
this.$emit('update:modelValue', this.inputVal)
})
},
confirm(){
setTimeout(() => {
this.$emit('confirm', this.inputVal)
this.$emit('update:modelValue', this.inputVal)
})
}
}
}
</script>
<style lang="less">
.uni-combox {
font-size: 14px;
border: 1px solid #DCDFE6;
border-radius: 4px;
padding: 6px 10px;
position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
// height: 40px;
flex-direction: row;
align-items: center;
// border-bottom: solid 1px #DDDDDD;
}
.uni-combox__label {
font-size: 16px;
line-height: 22px;
padding-right: 10px;
color: #999999;
}
.uni-combox__input-box {
position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex: 1;
flex-direction: row;
align-items: center;
}
.uni-combox__input {
flex: 1;
font-size: 35rpx;
height: 26px;
line-height: 26px;
}
.uni-combox__input-plac {
font-size: 14px;
color: #999;
}
.uni-combox__selector {
/* #ifndef APP-NVUE */
box-sizing: border-box;
/* #endif */
position: absolute;
top: calc(100% + 12px);
left: 0;
width: 100%;
background-color: #FFFFFF;
border: 1px solid #EBEEF5;
border-radius: 6px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
z-index: 2;
padding: 4px 0;
}
.uni-combox__selector-scroll {
/* #ifndef APP-NVUE */
max-height: 500rpx;
height: 500rpx;
box-sizing: border-box;
/* #endif */
height: 500rpx;
}
.uni-combox__selector-empty,
.uni-combox__selector-item {
/* #ifndef APP-NVUE */
display: flex;
cursor: pointer;
/* #endif */
line-height: 36px;
font-size: 36rpx;
text-align: center;
// border-bottom: solid 1px #DDDDDD;
padding: 0px 10px;
}
.uni-combox__selector-item:hover {
background-color: #f9f9f9;
}
.uni-combox__selector-empty:last-child,
.uni-combox__selector-item:last-child {
/* #ifndef APP-NVUE */
border-bottom: none;
/* #endif */
}
// picker
.uni-popper__arrow,
.uni-popper__arrow::after {
position: absolute;
display: block;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
border-width: 6px;
}
.uni-popper__arrow {
filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
top: -6px;
left: 10%;
margin-right: 3px;
border-top-width: 0;
border-bottom-color: #EBEEF5;
}
.uni-popper__arrow::after {
content: " ";
top: 1px;
margin-left: -6px;
border-top-width: 0;
border-bottom-color: #fff;
}
.uni-combox__no-border {
border: none;
}
.uni-input-input {
font-size: 40rpx;
}
</style>

248
src/mycomponents/scan/winComScanBalanceBind.vue

@ -0,0 +1,248 @@
<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 {
getBalanceByPalletLabel,
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
},
isTargetScan: {
type: Boolean,
default: false
},
},
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 => {
this.queryBalance(this.resultData)
})
},
queryBalance(result) {
var params = {
packingNumber:result.label.packingNumber,
isTargetScan:this.isTargetScan//true false
}
uni.showLoading({
title: '查询中',
mask: true
})
getBalanceByPalletLabel(params).then(res => {
uni.hideLoading()
if(res.data.packageList){
if (res.data.packageList.length == 0) {
this.showErrorMessage("按包装号【"+params.packingNumber+"】未查找到库存余额")
} else if (res.data.packageList.length>0) {
result.balance = res.data
this.$emit("getBalance", result)
}
}
}).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>

341
src/mycomponents/scan/winComScanPalletLabel.vue

@ -0,0 +1,341 @@
<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() {
this.$refs.popup.open('bottom')
setTimeout(res=>{
this.getfocus()
},500)
},
openScanPopupss(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 => {
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) {
if(this.bussinessCode=="Repleinment"){
this.showErrorMessage("此物料已补料");
}else {
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()
if(this.bussinessCode=="Repleinment"){
if(error.includes("库存余额不足")){
this.showErrorMessage("没有此物料库存,请核对库存余额与标签是否一致")
}else {
this.showErrorMessage(error)
}
}else {
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>

5
src/mycomponents/status/balanceStatus.vue

@ -1,6 +1,7 @@
<template>
<view class="uni-flex u-col-center" style="background-color: #fff;">
<!-- <status :status='status' style='font-size: 70rpx;'></status> -->
<text v-if="isShowStatusPoint" :class="statusStyle(status)" ></text>
<text :class="statusStyle(status)" style='font-size: 38rpx;margin-right: 15rpx;'>
{{statusDesc(status) }}</text>
<!-- v-show="allowEdit" -->
@ -35,6 +36,10 @@
type: String,
default: ""
},
isShowStatusPoint: {
type: Boolean,
default: false
},
allowEdit: {
type: Boolean,
default: false

12
src/pages.json

@ -999,7 +999,8 @@
"path": "pages/productionReturn/job/okToReturnDetail",
"style": {
"navigationBarTitleText": "生产合格退料详细",
"enablePullDownRefresh": false
"enablePullDownRefresh": false,
"softinputMode": "adjustResize"
}
},
@ -2688,7 +2689,16 @@
"navigationBarTitleText": "物料隔离接收确认详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/palletLabel/bindPalletLabel",
"style": {
"navigationBarTitleText": "绑定托标签",
"enablePullDownRefresh": false
}
}
],
"globalStyle": {
"navigationBarTextStyle": "white",

406
src/pages/palletLabel/bindPalletLabel.vue

@ -0,0 +1,406 @@
<template>
<view class="page-wraper">
<view class="">
<com-blank-view @goScan='openScanPopup' v-if="detailSource.length==0"></com-blank-view>
</view>
<view class="page-wraper" v-if="detailSource.length>0">
<view class="page-main" style="background-color: #EEEEEE;">
<scroll-view scroll-y="true" class="page-main-scroll">
<view class="detail-list" v-for="(item, index) in detailSource" :key="item.id">
<view class="">
<comPallLabelCard :dataContent="item" :index="index" @removeData="removeData"
:isShowStatus="isShowStatus" @updateData="updateData" @removePack='removePack'
:allowEditStatus="allowEditStatus">
</comPallLabelCard>
</view>
</view>
</scroll-view>
</view>
<view class="page-footer">
<view class="uni-flex uni-column">
<comPalletLabel v-if="!isEmpty(showItemInfo)" ref="palletLabelRef" style="z-index: 10;"
:businessType="businessType" :bussinessCode="businessTypeCode" :showItemInfo="showItemInfo">
</comPalletLabel>
<view class="uni-flex u-col-center space-between padding_10"
style="background-color:ghostwhite; width: 100%; ">
<view class="">
</view>
<view class=" uni-flex uni-row">
<button class="btn_single_commit" hover-class="btn_commit_after" @click="commit">提交</button>
</view>
</view>
</view>
</view>
<win-scan-button style="z-index: 9;" @goScan='openScanPopup'></win-scan-button>
</view>
<view class=" " style="z-index: 11;">
<winComScanBalanceBind ref="scanPopup" :isTargetScan="false" @getBalance='getScanResult'
:bussinessCode="businessTypeCode">
</winComScanBalanceBind>
</view>
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import comEmptyView from '@/mycomponents/common/comEmptyView.vue'
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import comPallLabelCard from '@/pages/palletLabel/coms/comPallLabelCard.vue'
import comBlankView from '@/mycomponents/common/comBlankView.vue'
import winComScanBalanceBind from "@/mycomponents/scan/winComScanBalanceBind.vue"
import comPalletLabel from '@/pages/palletLabel/coms/comPalletLabel.vue'
import {
getInventoryStatusName
} from '@/common/directory.js';
import {
palletLabelBindSubmit,
getBasicLocationByCode,
getPackUnitByItemCode
} from '@/api/request2.js';
import {
getPackingNumberAndBatchByList,
deepCopyData
} from '@/common/basic.js';
import {
Decimal
} from 'decimal.js'; //
import {
calc
} from '@/common/calc'
import {
getBusinessType,
calcHandleQty
} from '@/common/record.js';
export default {
components: {
comEmptyView,
winScanButton,
comPallLabelCard,
comBlankView,
winComScanBalanceBind,
comPalletLabel
},
data() {
return {
fromLocationCode: "",
fromLocationInfo: {},
toLocationTypeArray: [],
toInventoryStatus: "",
businessType: {}, //
detailSource: [], //
title: "",
dataContent: {},
isShowEditLocation: false,
isShowStatus: true,
allowEditStatus: true,
businessTypeCode: "MergeTuoPackage",
itemCode: "",
showItemInfo: {}
}
},
onLoad(option) {
getBusinessType(this.businessTypeCode, res => {
if (res.success) {
this.businessType = res.businessType;
this.openScanPopup();
} else {
this.showErrorMessage(res.message)
}
});
uni.setNavigationBarTitle({
title: option.title
})
this.title =option.title
},
methods: {
isEmpty(item) {
return Object.keys(item).length === 0
},
openScanPopup() {
if (this.businessType) {
this.$refs.scanPopup.openScanPopup(this.businessType);
} else {
this.getBusinessType()
}
},
createItemInfo(data) {
var itemInfo = {
itemCode: data.itemCode,
itemName: data.itemName,
itemDesc1: data.itemDesc1,
itemDesc2: data.itemDesc2,
qty: 0,
subList: []
}
return itemInfo
},
createDetailInfo(item) {
var itemDetail = {
itemCode: item.itemCode,
parentPackingNumber: item.parentPackingNumber,
packingNumber: item.packingNumber,
batch: item.batch,
fromLocationCode: item.locationCode,
packQty: item.packQty,
packUnit: item.packUnit,
uom: item.uom,
qty: item.qty,
inventoryStatus: item.inventoryStatus,
scaned: true
}
return itemDetail;
},
getScanResult(result) {
let data = result.balance
let label = result.label
var item = this.detailSource.find(res => {
if (res.itemCode == data.itemCode) {
return res
}
})
if (!data.packageList) {
this.showErrorMessage("扫描的数据无效")
return;
}
if (item == undefined) {
//
if (this.itemCode && this.itemCode != data.itemCode) {
this.showErrorMessage("扫描物料不是[" + this.itemCode + "]不可以添加")
return
}
var itemp = this.createItemInfo(data);
this.itemCode = itemp.itemCode
//
data.packageList.forEach(item => {
var itemDetail = this.createDetailInfo(item)
itemp.subList.push(itemDetail)
})
let firstItem = data.packageList[0]
this.detailSource.push(itemp)
this.showItemInfo = deepCopyData(firstItem)
this.calacQty()
this.scanPopupGetFocus()
} else {
var resultArray = data.packageList.map(itemPage => itemPage.packingNumber)
var commonArray = item.subList.filter(item => resultArray.includes(item.packingNumber));
if (commonArray && commonArray.length > 0) {
//
if (data.packageList.length == 1) {
this.showErrorMessage("箱码[" + label.packingNumber + "]批次[" + label.batch + "]已经扫描\n")
} else {
if (commonArray.length ==resultArray.length) {
this.showErrorMessage("箱码[" + label.packingNumber + "]批次[" + label.batch + "]已经扫描\n")
return;
}
//
data.packageList.forEach(itemPage => {
var itemDetail = this.createDetailInfo(itemPage)
var isHave = item.subList.find(r => r.packingNumber == itemDetail.packingNumber)
if (!isHave) {
item.subList.push(itemDetail)
}
})
this.calacQty()
this.scanPopupGetFocus()
}
} else {
data.packageList.forEach(itemPage => {
var itemDetail = this.createDetailInfo(itemPage)
var isHave = item.subList.find(r => r.packingNumber == itemDetail.packingNumber)
if (!isHave) {
item.subList.push(itemDetail)
}
})
this.calacQty()
this.scanPopupGetFocus()
}
}
},
calacQty() {
this.detailSource.forEach(item => {
item.qty = 0;
item.subList.forEach(detail => {
item.qty = calc.add(item.qty, detail.qty);
})
})
},
showErrorMessage(message) {
this.scanPopupLoseFocus()
this.$refs.comMessage.showErrorMessage(message, res => {
if (res) {
this.scanPopupGetFocus()
}
});
},
updateData() {
calcHandleQty(this.detailSource);
for (var i = 0; i < this.detailSource.length; i++) {
let item = this.detailSource[i];
if (item.qty == 0) {
this.detailSource.splice(i, 1)
}
}
},
removePack() {
for (var i = 0; i < this.detailSource.length; i++) {
var item = this.detailSource[i];
if (item.subList.length == 0) {
this.detailSource.splice(i, 1)
}
}
this.updateData();
},
removeData(item) {
for (let i = 0; i < this.detailSource.length; i++) {
if (this.detailSource[i].itemCode == item.itemCode) {
this.detailSource.splice(i, 1)
}
}
},
showCommitSuccessMessage(hint) {
this.$refs.comMessage.showSuccessMessage(hint, res => {
this.clearData()
})
},
clearData() {
this.itemCode = ""
this.subList = [];
this.detailSource = [];
this.dataContent = {}
this.showItemInfo = {}
this.$refs.palletLabelRef.clearPalletCode()
},
commit() {
var palletLabelInfo = this.$refs.palletLabelRef.getData()
if (this.detailSource.length > 0 && this.detailSource[0].subList.length > 0) {
if (!palletLabelInfo.isCheck) {
this.$refs.palletLabelRef.isShowCollapse()
return;
}
//
uni.showLoading({
title: "提交中....",
mask: true
});
this.submit(palletLabelInfo)
} else {
this.showErrorMessage("没有要提交的数据,请先扫描")
}
},
scanPopupGetFocus() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.getfocus();
}
},
scanPopupLoseFocus() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.losefocus();
}
},
submit(palletLabelInfo) {
var params = this.setParams(palletLabelInfo)
//
if ( params.qty > params.packQty) {
this.showErrorMessage("合托的总数量[" + params.qty + "]不能大于托包装的标包数量[" + params.packQty + "]")
return;
}
return;
console.log("提交", JSON.stringify(params))
palletLabelBindSubmit(params).then(res => {
uni.hideLoading()
if (res.data) {
this.showCommitSuccessMessage("提交成功\n生成" + this.title + "\n" +
res.data)
} else {
this.showErrorMessage("提交失败[" + res.msg + "]")
}
}).catch(error => {
uni.hideLoading()
this.showErrorMessage(error)
})
},
setParams(palletLabelInfo) {
var subList = []
var creator = this.$store.state.user.id
var totalQty = 0
this.detailSource.forEach(item => {
totalQty = item.qty
item.subList.forEach(detail => {
if (detail.scaned) {
var submitItem = deepCopyData(detail)
submitItem.itemCode = detail.itemCode;
submitItem.fromPackingNumber = detail.packingNumber;
submitItem.fromParentPackingNumber = detail.parentPackingNumber;
submitItem.fromLocationCode = detail.fromLocationCode;
submitItem.fromBatch = detail.batch;
submitItem.fromInventoryStatus = detail.inventoryStatus
submitItem.uom == detail.uom
submitItem.package = null;
submitItem.Records = null;
submitItem.fromQty = detail.qty;
subList.push(submitItem)
}
})
})
this.dataContent.subList = subList;
this.dataContent.itemCode = palletLabelInfo.itemCode;
this.dataContent.toPackingNumber = palletLabelInfo.toPackingNumber=="请扫描目标托码,非必填项"?"":palletLabelInfo.toPackingNumber;
this.dataContent.batch = palletLabelInfo.batch;
this.dataContent.packQty = palletLabelInfo.packQty;
this.dataContent.packUnit = palletLabelInfo.packUnit;
this.dataContent.toLocationCode = palletLabelInfo.toLocationCode;
this.dataContent.toInventoryStatus = palletLabelInfo.toInventoryStatus;
this.dataContent.qty = totalQty;
return this.dataContent;
}
}
}
</script>
<style>
</style>

275
src/pages/palletLabel/coms/comPallLabelCard.vue

@ -0,0 +1,275 @@
<template>
<view class="" style="background-color: #fff;">
<uni-collapse ref="collapse1">
<uni-collapse-item :open="true">
<template v-slot:title>
<uni-swipe-action ref="swipeAction">
<uni-swipe-action-item @click="removeData($event,dataContent)" :right-options="removeOptions">
<view class="uni-flex uni-row space-between center"
style="background-color:#fff; margin-left: 15px;">
<view>
<item :dataContent="dataContent"></item>
</view>
<view>
<view class="center">
<view class="uni-flex uni-row text_balance">
<text>
{{Number(dataContent.qty)}}
</text>
</view>
<!-- v-if="dataContent.packQty==undefined" -->
</view>
<!-- <view class="" style="font-size: 25rpx;color: gray ">
{{dataContent.packQty}} {{dataContent.uom}}
</view> -->
</view>
</view>
</uni-swipe-action-item>
</uni-swipe-action>
</template>
<view class="split_line"></view>
<view class="" v-for="(item,index) in dataContent.subList">
<uni-swipe-action ref="swipeAction">
<uni-swipe-action-item @click="swipeClick($event,item,index)"
:right-options="removeOptions">
<view class="">
<view :class="item.scaned?'scan_view':''">
<view class="uni-flex uni-column ">
<view class="uni-flex uni-row space-between " style="align-items: center">
<view>
<view class="card_view">
<text class="card_packing_code " style="color: #BA5A59;">托码</text>
<text class="card_content ">{{item.parentPackingNumber}}</text>
</view>
<pack :packingCode="item.packingNumber">
</pack>
<batch :batch="item.batch"></batch>
<location title="来源库位" :locationCode="item.fromLocationCode"></location>
</view>
<view>
<view class="uni-flex uni-row">
<view class="uni-flex uni-row " style=" align-items: center;">
<view :class="statusStyle(item.inventoryStatus)" style="font-size: 40rpx;">
</view>
<view style="font-size: 35rpx;">
{{Number(item.qty)}}
</view>
<view style=" margin-left: 5rpx; font-size: 15rpx;color: gray; display: flex; align-items: center ">{{dataContent.uom}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</uni-swipe-action-item>
</uni-swipe-action>
<view class='split_line'></view>
</view>
</uni-collapse-item>
</uni-collapse>
<balanceQtyEdit ref="balanceQtyEdit" @confirm="confirm" :isShowStatus="isShowStatus"
:allowEditStatus="allowEditStatus" :allowEditQty="allowEditQty">
</balanceQtyEdit>
<job-detail-popup ref="winHint" :dataContent="showItem"></job-detail-popup>
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import itemQty from '@/mycomponents/item/itemQty.vue'
import recommend from '@/mycomponents/recommend/recommend.vue'
import jobDetailPopup from '@/mycomponents/job/jobDetailPopup.vue'
import balance from '@/mycomponents/balance/balance.vue'
import balanceMove from '@/mycomponents/balance/balanceMove.vue'
import comMovebalance from '@/pages/inventoryMove/coms/comMovebalance.vue'
import balanceQtyEdit from '@/mycomponents/qty/balanceQtyEdit.vue'
import pack from '@/mycomponents/balance/pack.vue'
import item from '@/mycomponents/item/item.vue'
import balanceQty from '@/mycomponents/qty/balanceQty.vue'
import uom from '@/mycomponents/qty/uom.vue'
import location from '@/mycomponents/balance/location.vue'
import batch from '@/mycomponents/balance/batch.vue'
import {
getDetailOption,
getDetailEditRemoveOption,
getRemoveOption
} from '@/common/array.js';
import {
getInventoryStatusStyle,
} from '@/common/directory.js';
export default {
components: {
itemQty,
recommend,
jobDetailPopup,
balance,
balanceQtyEdit,
balanceMove,
comMovebalance,
pack,
balanceQty,
item,
uom,
location,
batch
},
props: {
dataContent: {
type: Object,
default: {}
},
settingParam: {
type: Object,
default: {}
},
fromInventoryStatus: {
type: String,
default: ""
},
toInventoryStatus: {
type: String,
default: ""
},
isShowStatus: {
type: Boolean,
default: true
},
allowEditStatus: {
type: Boolean,
default: false
},
allowEditQty: {
type: Boolean,
default: false
},
},
watch: {
dataContent: {
handler(newName, oldName) {
if (this.dataContent.subList.length > 0) {
this.$nextTick(res => {
setTimeout(() => {
if (this.$refs.collapse1) {
this.$refs.collapse1.resize();
}
}, 500)
})
}
},
immediate: true,
deep: true
}
},
data() {
return {
option: [],
title: "推荐详情",
showItem: {},
editItem: {},
detailOptions: [],
scanOptions: [],
removeOptions: [],
dataList: [],
currentHandleQty: 0
}
},
mounted() {
// this.detailOptions = getDetailOption();
// this.scanOptions = getDetailEditRemoveOption();
this.removeOptions = getRemoveOption();
},
methods: {
statusStyle: function(val) {
return getInventoryStatusStyle(val);
},
removeData(e, dataContent) {
if (e.content.text == "移除") {
this.$refs.comMessage.showQuestionMessage("确定移除扫描信息?",
res => {
if (res) {
this.$emit('removeData', dataContent)
}
});
}
},
swipeClick(e, item, index) {
if (e.content.text == "详情") {
this.detail(item)
} else if (e.content.text == "编辑") {
this.edit(item)
} else if (e.content.text == "移除") {
this.remove(item, index)
}
},
edit(item) {
this.editItem = item;
this.currentHandleQty = item.handleQty;
this.$refs.balanceQtyEdit.openEditPopup(item, item.qty);
},
detail(item) {
this.showItem = item;
this.dataList = [
{
title: "箱码",
content: item.packingNumber
},
{
title: "批次",
content: item.batch
},
{
title: "库位",
content: item.formLocationCode
},
{
title: "数量",
content: item.qty
},
{
title: "单位",
content: item.uom
}
]
this.$refs.winHint.openScanPopup(this.showItem)
},
remove(item, index) {
this.$refs.comMessage.showQuestionMessage("确定移除扫描信息?",
res => {
if (res) {
this.dataContent.subList.splice(index, 1)
this.$emit('removePack', item)
}
});
},
confirm(qty) {
this.editItem.handleQty = this.currentHandleQty;
this.$emit('updateData')
}
}
}
</script>
<style>
</style>

361
src/pages/palletLabel/coms/comPalletLabel.vue

@ -0,0 +1,361 @@
<template>
<view class="">
<uni-collapse @change="handleChange" ref="collapse1" style="background-color: #fff; border-radius: 20rpx;">
<uni-collapse-item :open="isShow">
<template v-slot:title>
<view class="" style="font-size: 35rpx; font-weight: bold; margin: 20rpx;">
目标托标签信息
</view>
</template>
<view class='split_line'></view>
<view class="" style="width: 100%; margin-bottom: 20rpx;">
<view class="uni-flex uni-row" style=" align-items: center;margin-left: 30rpx; margin-top: 10rpx;">
<view style="font-size: 32rpx; width: 25%; margin-top: 15rpx; margin-bottom: 15rpx;" >目标托码 : </view>
<view class="uni-flex uni-row" style="margin-left: 10rpx; width: 80%;">
<view class="" style="width: 85%; height: 60rpx; font-size: 30rpx; padding: 10rpx; border: 1rpx solid darkgray; border-radius: 10rpx; font-size: 30rpx;">
{{toPackingNumber}}
</view>
<!-- <uni-easyinput v-model="toPackingNumber" :disabled="true" placeholder="请扫描目标托码,非必填项" > </uni-easyinput> -->
<u-icon v-if="isShowToPackingNumber" style="margin-left: -50rpx;color: darkgray;" name="close-circle-fill" size="45" @click="clearPalletCode"></u-icon>
<u-icon name="scan" style="margin-left: 10rpx;color: darkgray; " @click="showPalletLabel" size="50"></u-icon>
</view>
</view>
<view class='split_line'></view>
</view>
<view class="" style="margin-bottom: 20rpx;">
<view class="uni-flex uni-row" style="align-items: center;margin-left: 30rpx; justify-content: space-between; margin-top: 10rpx;">
<view style="font-size: 32rpx;" >托包装规格 : </view>
<view class="" style="margin-left: 10rpx; width: 70%;">
<view class="" v-if="isShowToPackingNumber" style="margin: 10rpx;font-size: 35rpx;">
{{toPackUnitCode}}
</view>
<selectList v-if="!isShowToPackingNumber"
:candidates="toPackList"
:inputDisabled="true"
placeholder="请选择目标包装规格"
v-model="toPackUnitCode"
@input="selectPack"
></selectList>
</view>
</view>
<view class='split_line'></view>
</view>
<view class="" style="margin-bottom: 20rpx;">
<view class="uni-flex uni-row" style="align-items: center;margin-left: 30rpx; justify-content: space-between; margin-top: 10rpx;">
<view style="font-size: 32rpx;" >托包装数量 : </view>
<view class="" style="margin-left: 10rpx; margin-bottom: 10rpx;">
<text style="font-size: 35rpx;color: darkgray;">{{packQty}}</text>
<text style="font-size: 25rpx; color: darkgray;">{{uom}}</text>
</view>
</view>
<view class='split_line'></view>
</view>
<view class="" style="margin-bottom: 20rpx;">
<view class="uni-flex uni-row" style="align-items: center;margin-left: 30rpx; margin-top: 10rpx;">
<view style="font-size: 32rpx;" >
<text>批次 :</text>
<text v-show="false">批次</text> </view>
<view class="uni-flex uni-row" style="margin-left: 10rpx;">
<view class="" v-if="isShowToPackingNumber" style="margin: 10rpx;font-size: 35rpx;">
{{batch}}
</view>
<uni-easyinput v-if="!isShowToPackingNumber" v-model="batch" :disabled="isBatchDisabled" placeholder="请输入批次" > </uni-easyinput>
</view>
</view>
<view class='split_line'></view>
</view>
<view class="" style="margin-bottom: 20rpx;">
<view class="uni-flex uni-row" style="align-items: center;margin-left: 30rpx; justify-content: space-between; margin-top: 10rpx;">
<view style="font-size: 32rpx;" >状态 : </view>
<view class="" v-if="toInventoryStatus" style="margin-left: 10rpx; ">
<balanceStatus ref="balanceStatus"
:isShowStatusPoint="true"
:status="toInventoryStatus" :allowEdit='isEdit'
@updateStatus="updateStatus" >
</balanceStatus>
</view>
</view>
<view class='split_line'></view>
</view>
<view class="" style="width: 100%; margin-bottom: 20rpx;">
<view class="uni-flex uni-row" style=" align-items: center;margin-left: 30rpx; margin-top: 10rpx;">
<view style="font-size: 32rpx; width: 25%; margin-top: 15rpx; margin-bottom: 15rpx;" >库位 : </view>
<view class="uni-flex uni-row" style="margin-left: 10rpx; width: 80%;">
<view class="" style="width: 85%; height: 60rpx; font-size: 30rpx; padding: 10rpx; border: 1rpx solid darkgray; border-radius: 10rpx; font-size: 30rpx;">
{{toLocationCode}}
</view>
<!-- <uni-easyinput v-model="toPackingNumber" :disabled="true" placeholder="请扫描目标托码,非必填项" > </uni-easyinput> -->
<u-icon v-if="isShowToPackingNumber&&toLocationCode" style="margin-left: -50rpx;color: darkgray;" name="close-circle-fill" size="45" @click="clearToLocationCode"></u-icon>
<u-icon name="scan" style="margin-left: 10rpx;color: darkgray; " @click="showLocation" size="50"></u-icon>
</view>
</view>
<view class='split_line'></view>
</view>
</uni-collapse-item>
</uni-collapse>
<winScanLocation ref="scanPopupLoc" title="库位代码" @getLocation='getScanCode'></winScanLocation>
<winComScanBalanceBind ref="scanPopupBind" title="托标签"
:bussinessCode="bussinessCode"
@getBalance="getScanResult"
:isTargetScan="true"></winComScanBalanceBind>
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import {
getPackUnitByItemCode
} from '@/api/request2.js';
import selectList from '@/mycomponents/list/selectList.vue'
import balanceStatus from '@/mycomponents/status/balanceStatus.vue'
import winScanLocation from '@/mycomponents/scan/winScanLocation.vue'
import winComScanBalanceBind from '@/mycomponents/scan/winComScanBalanceBind.vue'
export default {
components: {
selectList,
balanceStatus,
winScanLocation,
winComScanBalanceBind
},
data() {
return {
// toPackingNumber:"",//
toPackingNumber:"请扫描目标托码,非必填项",//
toPackUnitCode:"", //
packQty:"",
uom:"",
batch:"",
toInventoryStatus:"",
toLocationCode:"",
toPackList:[],
toPackInfoList:[],
isBatchDisabled:false,
isLocationDisabled:true,
isEdit:true,
isShow:false,
itemCode:""
};
},
props: {
dataContent: {
type: Object,
default: {}
},
businessType: {
type: Object,
default: {}
},
bussinessCode: {
type: String,
default: ""
},
showItemInfo:{
type: Object,
default: {}
}
},
computed:{
isShowToPackingNumber(){
return this.toPackingNumber!="请扫描目标托码,非必填项"
}
},
watch:{
},
methods: {
isShowCollapse(){
this.isShow=true
},
handleChange(e){
//
if(e.length>0){
uni.showLoading({
title:"加载中...",
mask:true
})
this.itemCode =this.showItemInfo.itemCode
getPackUnitByItemCode(this.itemCode).then(res=>{
uni.hideLoading()
if(res.data.list&&res.data.list.length>0){
this.toPackInfoList =res.data.list
res.data.list.forEach(item=>{
this.toPackList.push(item.packUnit)
})
}
}).catch(error=>{
uni.hideLoading()
this.showErrorMessage(error)
})
if(this.showItemInfo){
if(!this.toPackUnitCode){
this.toPackUnitCode=this.showItemInfo.packUnit
}
if(!this.packQty){
this.packQty=this.showItemInfo.packQty
}
if(!this.uom){
this.uom=this.showItemInfo.uom
}
if(!this.batch){
this.batch=this.showItemInfo.batch
}
if(!this.toInventoryStatus){
this.toInventoryStatus=this.showItemInfo.inventoryStatus
}
if(!this.toLocationCode){
this.toLocationCode=this.showItemInfo.locationCode
}
}
}
},
//
//true false
setDisable(isDisable){
this.isBatchDisabled=isDisable,
this.isLocationDisabled=!isDisable,
this.isEdit=!isDisable
},
updateStatus(value) {
this.toInventoryStatus = value
},
selectPack(value){
this.toPackUnitCode=value
var toPackInfo = this.toPackInfoList.find(r=>r.packUnit==this.toPackUnitCode)
this.packQty =toPackInfo?.packQty
this.uom=toPackInfo?.uom
},
getScanResult(result){
let balance = result.balance;
var data =result.balance.packageList[0];
if(this.itemCode!=balance.itemCode){
this.showErrorMessage("扫描物料["+balance.itemCode+"]与绑定物料["+this.itemCode+"]不一致")
}
this.toPackUnitCode =data.packUnit;
this.packQty =data.packQty
this.uom =data.uom;
this.batch =data.batch;
this.toPackingNumber =data.packingNumber
this.toInventoryStatus =data.inventoryStatus
this.toLocationCode =data.locationCode
this.setDisable(true)
},
getData() {
var data={
itemCode:this.itemCode,
toPackingNumber:this.toPackingNumber,
packQty:this.packQty,
packUnit:this.toPackUnitCode,
batch:this.batch,
toInventoryStatus:this.toInventoryStatus,
toLocationCode:this.toLocationCode,
isCheck:true
}
if(!data.packUnit){
this.showErrorMessage("请填写托包装规格")
data.isCheck=false;
return data;
}
if(!data.packQty){
this.showErrorMessage("请填写托包装数量")
data.isCheck=false;
return data;
}
if(!data.batch){
this.showErrorMessage("请填写批次")
data.isCheck=false;
return data;
}
if(!data.toInventoryStatus){
this.showErrorMessage("请填写状态")
data.isCheck=false;
return data;
}
if(!data.toLocationCode){
this.showErrorMessage("请填写库位")
data.isCheck=false;
return data;
}
return data;
},
showLocation(){
this.$refs.scanPopupLoc.openScanPopup();
},
showPalletLabel(){
this.$refs.scanPopupBind.openScanPopup(this.businessType);
},
getScanCode(location, code){
this.toLocationCode=code
},
clearPalletCode(){
this.toPackingNumber="请扫描目标托码,非必填项"
this.toPackUnitCode="", //
this.packQty="",
this.uom="",
this.batch="",
this.toInventoryStatus="",
this.toLocationCode=""
this.toPackInfoList=[]
this.toPackList=[]
this.itemCode=""
this.setDisable(false)
},
clearToLocationCode(){
this.toLocationCode=""
},
showErrorMessage(message){
this.$refs.comMessage.showErrorMessage(message, res => {
if (res) {
}
});
},
}
}
</script>
<style scoped>
>>>.uni-easyinput__content-input {
font-size: 50rpx;
}
</style>

2
src/pages/productionReturn/job/okToReturnDetail.vue

@ -41,7 +41,7 @@
<!-- <win-scan-pack-and-location ref="scanPopup" @getResult='getScanResult'></win-scan-pack-and-location> -->
<win-scan-pack ref="scanPopup" @getResult='getScanResult' headerType="HMQ,HPQ"></win-scan-pack>
<detail-info-popup ref="detailInfoPopup"></detail-info-popup>
<comMessage ref="comMessage"></comMessage>
<comMessage style="z-index: 100;" ref="comMessage"></comMessage>
</view>
</template>

Loading…
Cancel
Save