<template>
|
<view style="padding-bottom:150px" class="boxTip">
|
<cu-custom bgColor="bg-white" :isBack="true">
|
<block slot="backText">
|
</block>
|
<block slot="content">组盘</block>
|
</cu-custom>
|
<!-- <view class="flex justify-end align-center padding_right30rpx padding_top12rpx">
|
<text class="fontSize12rpx"> 操作人:{{operator}} </text>
|
</view> -->
|
<u-form labelPosition="left" label-width="180rpx" :model="warehouse" ref="warehouseRef">
|
|
<u-row class="border_bottom margin_top10rpx padding_left25rpx" style="background-color: #fff;">
|
<u-col span="12">
|
<u-form-item label="容器编号:" prop="containerCode" required class="uFormItem">
|
<u-input :focus="curFoucus" v-model.trim="warehouse.containerCode" @confirm="getMaterialDetails(1)"
|
placeholder="请扫码录入" :disabled="kwbhAllowed" style="font-weight: bolder;margin-left: 15rpx;"
|
class="width padding_left25rpx">
|
</u-input>
|
</u-form-item>
|
</u-col>
|
</u-row>
|
|
<u-row v-if="warehouse.containerCode" class="border_bottom margin_top10rpx padding_left25rpx"
|
style="background-color: #fff;">
|
<u-col span="12">
|
<u-form-item label="物料跟踪码:" class="uFormItem">
|
<u-input v-model="warehouse.snCode" ref="materialRef" placeholder="请扫码录入"
|
@focus="warehouse.snCode = ''" @confirm="getMaterialDetails"
|
style="font-weight: bolder;margin-left: 15rpx;" class="width padding_left25rpx">
|
</u-input>
|
</u-form-item>
|
</u-col>
|
</u-row>
|
<u-row class="border_bottom margin_top10rpx background_fff padding_left25rpx">
|
<u-col span="12">
|
<u-form-item label="目标库区:" prop="tray" class="uFormItem">
|
<input v-model="warehouse.areaCode" type="select" placeholder="请选择目标库区" @focus="containerFocus"
|
class="width"></input>
|
<u-action-sheet :list="wolist" v-model="modalshow" @click="confirmXl"></u-action-sheet>
|
<!-- <u-select v-model="modalshow" :list="wolist" @confirm="confirm" value-name="id" label-name="name"></u-select> -->
|
</u-form-item>
|
</u-col>
|
</u-row>
|
<u-row class="border_bottom margin_top10rpx padding_left25rpx" style="background-color: #fff;">
|
<u-col span="10">
|
<u-form-item label="目标库位:" class="uFormItem">
|
<u-input v-model="warehouse.placeCode" placeholder="请扫码录入"
|
style="font-weight: bolder;margin-left: 15rpx;" class="width padding_left25rpx">
|
</u-input>
|
</u-form-item>
|
</u-col>
|
<u-col span="2" @tap="containerFocus2">
|
<span class="fontSize15rpx">推荐</span>
|
<u-icon name="arrow-right" size="14" class="fontSize15rpx"></u-icon>
|
</u-col>
|
|
<view class="boxList" v-show="modalshow2" @click="modalshow2 = false" @touchmove.stop>
|
<view class="innerWrap">
|
<ul v-for="(item, eindex) in containerList" :key="eindex">
|
<li @click="confirm2(eindex)"> {{ item.text }}</li>
|
</ul>
|
</view>
|
</view>
|
|
</u-row>
|
</u-form>
|
<modal-code :rescode='rescode' :resmessage='resmessage' ref="resmodal" />
|
<view style="margin-bottom: 200rpx;" class="margin_top10rpx">
|
<view v-for="(item, eindex) in singlist" :key="eindex" class="margin_bottom10rpx">
|
<u-swipe-action :show="item.show" :index="eindex" @click="longpress" @open="open" @close='close'
|
:options="options" style="width: 100vw;">
|
<view class="fontSize32rpx background_fff padding10" :class="item.enAbled == 0 ? 'bg_item' : ''">
|
<u-row>
|
<u-col span="12" class="flex">
|
<text class="flex justify-center align-center circkle06">{{ eindex + 1 }}</text>
|
<text class="color_f18202 padding_left10rpx">
|
{{ item.materialCode }}-{{ item.materialName }}
|
</text>
|
<!-- <u-icon name="plus-circle" v-if="item.enAbled!=1"></u-icon> -->
|
</u-col>
|
</u-row>
|
<u-row>
|
<u-col span="12">
|
<text class="color_80 padding_left25rpx">
|
质检状态:{{ item.qcStatusName }}
|
</text>
|
</u-col>
|
</u-row>
|
<u-row>
|
<u-col span="12">
|
<view class="color_80 padding_left25rpx">
|
<text style="display: inline-block">批次:{{ item.batch }}</text>
|
</view>
|
</u-col>
|
</u-row>
|
<u-row>
|
<u-col span="12">
|
<text class="color_80 padding_left25rpx">
|
跟踪码:{{ item.snCode }}
|
</text>
|
</u-col>
|
</u-row>
|
<u-row>
|
<u-col span="8">
|
<text class="color_80 padding_left25rpx">
|
|
</text>
|
</u-col>
|
<u-col span="4">
|
<text class="color_f18202 ">
|
数量:{{ item.quantity }}
|
</text>
|
</u-col>
|
</u-row>
|
<!-- <u-row>
|
<u-col span="7">
|
</u-col>
|
<u-col span="5" class="flex">
|
<view class="color_80">
|
数量:
|
</view>
|
<input :class="item.enAbled ? '' : 'border_bottom_f18202 inputGray'"
|
class="text-left color_f18202 fontSize32rpx inputGray2" v-model="item.quantity"
|
type="number" :disabled="item.enAbled == 1" @blur="changeNum(item)" @click="clicki(item)"
|
placeholder="0" />
|
</u-col>
|
</u-row> -->
|
</view>
|
</u-swipe-action>
|
</view>
|
</view>
|
<button-modal :issueShow='true' issueTitle="重置" subTitle='组盘' restTiltle='组盘上架' @reset='goWarhouse' @submit='submit'
|
@issue="reset" />
|
|
</view>
|
</template>
|
<script>
|
import ButtonModal from '../../components/buttonModal.vue'
|
import ModalCode from '../../components/ModalCode.vue'
|
import {
|
getOrderNo,
|
addGroupDisk,
|
onlyUpdateDutyCycle,
|
getareaTypesList,
|
getContainDetail,
|
getContainerRecord,
|
getBhbMaterialList,
|
PdaBindListForSNCode,
|
getRecommendList
|
} from '../../api/putIn/artificial.js'
|
import {
|
getDate
|
} from '../../utils/dateTime.js'
|
import {
|
getAttrValue
|
} from '../../utils/tool.js'
|
import {
|
bindputawayConfirm
|
} from '../../api/putaway/putaway.js'
|
|
export default {
|
data() {
|
return {
|
containerList: [],
|
curFoucus: true,
|
rescode: 0,
|
resmessage: "",
|
putCode: '', //容器二维码
|
detailshow: false,
|
operator: '',
|
focu: false, //清空按钮隐显
|
focuM: false, //物料隐显按钮
|
Datetime: getDate(),
|
singlist: [], //物料详情
|
wolist: [],
|
options: [
|
// {
|
// text: '详情',
|
// style: {
|
// backgroundColor: '#fc9f35'
|
// }
|
// }
|
{
|
text: '删除',
|
style: {
|
backgroundColor: '#fc4b4b'
|
}
|
}
|
],
|
materlist: {},
|
warehouse: {
|
containerCode: '',
|
materialCode: '',
|
storehouseCode: "",
|
snCode: "",
|
// gridNumber: 1,
|
// useNumber: 0,
|
// exitNumber: 0,
|
// dutyCycle:1
|
},
|
modalshow: false,
|
modalshow2: false,
|
gridable: true,
|
gridFocus: false,
|
detailable: false,
|
detailableZb: false,
|
batchNo: '', //扫码到的当前物料的批次
|
warehouseRules: {
|
containerCode: [{
|
required: true,
|
message: '容器编号不能为空',
|
trigger: 'blur'
|
}],
|
materialCode: [{
|
required: true,
|
message: '物料编号不能为空',
|
trigger: 'blur'
|
}]
|
},
|
orderType: 1,
|
warhouseTph: '',
|
timerPrint: null,
|
kwbhAllowed: false, //是否禁用库位编号
|
arrD: [],
|
statusTp: {
|
'tpStatus': ''
|
}
|
};
|
},
|
components: {
|
ButtonModal,
|
ModalCode
|
},
|
onLoad(option) {
|
if (option.orderType) {
|
this.orderType = option.orderType
|
}
|
},
|
onReady() {
|
this.$refs.warehouseRef.setRules(this.warehouseRules)
|
},
|
mounted() {
|
this.operator = JSON.parse(uni.getStorageSync('userInfo')).name
|
this.getVehicleType()
|
},
|
computed: {
|
containerCode() {
|
return this.warehouse.containerCode
|
}
|
},
|
watch: {
|
containerCode(val) {
|
if (!val) {
|
this.detailable = false;
|
this.detailableZb = false;
|
this.warehouse.exitNumber = 0
|
}
|
},
|
singlist(val) {
|
this.warehouse.exitNumber = val.length
|
}
|
},
|
methods: {
|
//容器类型聚焦事件
|
containerFocus() {
|
uni.hideKeyboard()
|
this.modalshow = true
|
},
|
gridBtnClick() {
|
this.gridable = !this.gridable
|
if (!this.gridable) {
|
this.$nextTick(() => {
|
this.gridFocus = true;
|
})
|
} else {
|
this.$nextTick(() => {
|
this.gridFocus = false;
|
})
|
}
|
},
|
//容器编号点击
|
containerClick() {
|
uni.scanCode({
|
scanType: ['barCode', 'qrCode'],
|
autoDecodeCharset: true,
|
success: (res) => {
|
this.warehouse.containerCode = res.result
|
this.containerBlur()
|
},
|
fail: (err) => {
|
this.rescode = 400
|
this.resmessage = `扫描失败${err}`
|
this.$refs.resmodal.show = true
|
}
|
})
|
},
|
//容器失焦事件
|
containerBlur() {
|
Promise.all([this.getContainerRecord(), this.getContainerData()])
|
},
|
//获取当前容器下组盘记录
|
getContainerRecord() {
|
this.kwbhAllowed = false
|
//每次查询置空材料列表
|
this.singlist = [];
|
if (this.warehouse.containerCode == '') {
|
return
|
}
|
getContainerRecord({
|
containerCode: this.warehouse.containerCode
|
}).then(res => {
|
if (res.code == 200) {
|
this.kwbhAllowed = true
|
if (Array.isArray(res.data) && res.data.length > 0) {
|
if (res.data[0].orderNo) {
|
this.putCode = res.data[0].orderNo;
|
}
|
this.warehouse.dutyCycle = res.data[0].dutyCycle; //库存占比 【Editby shaocx,2023-05-22】
|
const recordArr = res.data.reduce((curr, item) => {
|
curr.push({
|
code: item.materialCode,
|
batchNo: item.batchNo,
|
quantityNow: item.quantity,
|
quantity: item.quantity,
|
materialName: item.materialName,
|
materialTypeName: item.materialTypeName,
|
specificationModel: item.specificationModel,
|
id: '',
|
unionCode: item.unionCode,
|
replaceMaterialCode: item.replaceMaterialCode,
|
stockFlagStatus: item.stockFlagStatus,
|
show: false,
|
enAbled: 1 //控制数量是否可以输入
|
})
|
return curr
|
}, [])
|
this.singlist.push(...recordArr)
|
}
|
} else {
|
this.kwbhAllowed = false
|
}
|
|
})
|
|
},
|
//获取容器的信息
|
getContainerData() {
|
getContainDetail(this.warehouse.containerCode).then(res => {
|
const result = res.data.rows;
|
if (Array.isArray(result) && result.length == 1) {
|
// 虚拟3个都不显示;料箱:显示栅格;钢托:不显示空间占比
|
if (res.data.rows[0].isVirtual == 0) { //实物
|
if (res.data.rows[0].wareContainerType == '299120688255045' || res.data.rows[0]
|
.wareContainerType == '293486279884869') { // 钢制容器 塑料容器 -显示占比
|
this.detailableZb = true;
|
this.detailable = false;
|
} else { //料箱 - 显示栅格数
|
this.detailableZb = false;
|
this.detailable = true;
|
}
|
} else {
|
this.detailable = false;
|
this.detailableZb = false;
|
}
|
this.warehouse.gridNumber = res.data.rows[0].gridNumber;
|
this.warehouse.useNumber = res.data.rows[0].useNumber;
|
} else {
|
uni.showToast({
|
title: '库位不存在',
|
icon: 'none',
|
duration: 2000
|
});
|
this.kwbhAllowed = false
|
}
|
|
})
|
},
|
|
|
//物料编码点击
|
materialClick() {
|
uni.scanCode({
|
scanType: ['barCode', 'qrCode'],
|
autoDecodeCharset: true,
|
success: (res) => {
|
this.warehouse.materialCode = getAttrValue(res.result, 'PARTSNUMBER')
|
this.batchNo = getAttrValue(res.result, 'LOTNO')
|
this.getMaterialDetails()
|
},
|
fail: (err) => {
|
this.rescode = 400
|
this.resmessage = `扫描失败${err}`
|
this.$refs.resmodal.show = true
|
}
|
})
|
},
|
//物料查询
|
getMaterialDetails(pram) {
|
if (!this.warehouse.containerCode) {
|
uni.showToast({
|
title: '容器编号不能为空',
|
icon: 'none',
|
duration: 2000
|
})
|
return
|
}
|
//扫容器编号 加载所有物料
|
if (pram == 1) {
|
this.singlist = [];
|
getBhbMaterialList({
|
'containerCode': this.warehouse.containerCode,
|
'SNCode': this.warehouse.snCode
|
}).then((res) => {
|
if (res.code == 200) {
|
if (res.result == null) {
|
this.rescode = 400
|
this.resmessage = '查无数据'
|
this.$refs.resmodal.show = true
|
return
|
} else {
|
if (res.result.length == 0) {
|
console.log("空托")
|
this.singlist = [];
|
return
|
} else {
|
console.log("有料")
|
res.result.forEach((item, index) => {
|
item.notDelete = 1 //已组盘的物料 不许删除 要去解绑页面解绑
|
})
|
this.singlist = res.result;
|
}
|
}
|
} else {
|
this.resmessage = res.message
|
this.rescode = res.code
|
this.$refs.resmodal.show = true
|
|
}
|
})
|
|
} else {
|
|
//物料查询
|
PdaBindListForSNCode({
|
'containerCode': this.warehouse.containerCode,
|
'SNCode': this.warehouse.snCode
|
}).then((res) => {
|
if (res.code == 200) {
|
if (res.result == null || !res.result.stockQuanOutput) {
|
this.rescode = 400
|
this.resmessage = '查无数据'
|
this.$refs.resmodal.show = true
|
return
|
} else {
|
// 根据id 判断物料是否存在
|
var item = res.result.stockQuanOutput;
|
//debugger
|
let index = this.singlist.findIndex(v => v.snCode == item.snCode);
|
if (index == -1) {
|
if (!res.result.validateResult && res.result.validateFailReason) {
|
uni.showModal({
|
title: '提示',
|
content: res.result.validateFailReason,
|
showCancel: true,
|
cancelColor: '#333333',
|
success: (res => {
|
if (res.confirm) {
|
this.singlist.unshift({
|
...item
|
})
|
} else if (res.cancel) {
|
|
}
|
})
|
});
|
} else {
|
this.singlist.unshift({
|
...item
|
})
|
}
|
}
|
}
|
} else {
|
this.resmessage = res.message
|
this.rescode = res.code
|
this.$refs.resmodal.show = true
|
}
|
})
|
|
}
|
|
},
|
//删除详情
|
longpress(index, eindex) {
|
uni.showModal({
|
title: '提示',
|
content: '是否确认删除?',
|
showCancel: true,
|
cancelColor: '#333333',
|
success: (res => {
|
if (res.confirm) {
|
this.singlist[index].cardNum = true
|
if (eindex == 0) { //删除
|
if(this.singlist[index].notDelete==1){
|
uni.showToast({
|
title: '已组盘的物料 不许删除 要去解绑页面解绑',
|
icon: 'none',
|
duration: 2000
|
});
|
return
|
}
|
this.singlist.splice(index, 1)
|
} else {
|
this.materlist = this.singlist[index]
|
this.detailshow = true
|
}
|
} else if (res.cancel) {
|
|
}
|
})
|
});
|
},
|
//编辑状态样式
|
dc(e) {
|
e.cardNum = true
|
this.$forceUpdate()
|
},
|
//卡片选中
|
clicki(e) {
|
e.cardNum = true
|
this.$forceUpdate()
|
},
|
// 如果打开一个的时候,不需要关闭其他,则无需实现本方法
|
open(index) {
|
// 先将正在被操作的swipeAction标记为打开状态,否则由于props的特性限制,
|
// 原本为'false',再次设置为'false'会无效
|
this.singlist[index].cardNum = true;
|
this.$forceUpdate()
|
this.singlist[index].show = true;
|
this.singlist.map((val, idx) => {
|
if (index != idx) this.singlist[idx].show = false;
|
})
|
},
|
close(index) {
|
this.singlist[index].show = false;
|
this.singlist[index].cardNum = false;
|
this.$forceUpdate()
|
},
|
//改变组盘数量
|
changeNum(val) {
|
val.cardNum = false
|
if (!val.quantity) {
|
uni.showModal({
|
title: '提示',
|
content: '组盘数量不能为空',
|
showCancel: false
|
})
|
}
|
if (val.quantity < 0) {
|
uni.showModal({
|
title: '提示',
|
content: '组盘数量必须大于0',
|
showCancel: false
|
})
|
}
|
|
},
|
//全部取消
|
reset() {
|
this.singlist = [];
|
this.warehouse.containerCode = ''
|
this.warehouse.snCode = ''
|
this.warehouse.areaCode = ''
|
this.warehouse.placeCode = ''
|
this.$refs.warehouseRef.resetFields();
|
this.$forceUpdate()
|
this.kwbhAllowed = false
|
},
|
//重置页面信息
|
rest() {
|
this.reset()
|
},
|
//确认
|
submit() {
|
this.$refs.warehouseRef.setRules(this.warehouseRules)
|
this.$refs.warehouseRef.validate(valid => {
|
if (valid) {
|
|
let arrN1 = this.singlist.findIndex((v) => v.quantity == '' || v.quantity <= 0)
|
if (arrN1 > -1) {
|
uni.showToast({
|
title: '物料数量需要大于0',
|
icon: 'none',
|
duration: 2000
|
});
|
return
|
}
|
|
//物料详情
|
let matatilDetails = this.singlist;
|
|
let arrSub = matatilDetails.filter((v) => v.enAbled != 1)
|
//请求参数
|
/// 标记
|
/// 1:物料组盘
|
/// 2:容器组盘
|
/// 3:物料解绑
|
/// 4:容器解绑
|
let params = {
|
Flag: 1,
|
ContainerCode: this.warehouse.containerCode,
|
orderDetails: arrSub
|
}
|
uni.showModal({
|
title: '提示',
|
content: '是否确认组盘?',
|
showCancel: true,
|
cancelColor: '#333333',
|
success: (res => {
|
if (res.confirm) {
|
addGroupDisk(params).then(res => {
|
this.warhouseTph = this.warehouse.containerCode;
|
this.rescode = res.code;
|
this.resmessage = res.message || '组盘成功!';
|
this.$refs.resmodal.show = true;
|
this.rest();
|
})
|
} else if (res.cancel) {
|
|
}
|
})
|
});
|
}
|
})
|
},
|
|
// 租盘上架
|
goWarhouse() {
|
//物料详情
|
let matatilDetails = this.singlist;
|
|
let arrSub = matatilDetails.filter((v) => v.enAbled != 1)
|
|
bindputawayConfirm({
|
flag:1, //
|
"ActionType": 3004, //组盘上架
|
"ContainerCode": this.warehouse.containerCode,
|
"StorehouseCode": this.warehouse.storehouseCode,
|
"areaCode": this.warehouse.areaCode || '',
|
"placeCode": this.warehouse.placeCode || '',
|
"orderDetails": arrSub
|
}).then(res => {
|
this.rescode = res.code;
|
this.resmessage = res.message || '组盘上架成功!';
|
this.$refs.resmodal.show = true;
|
this.reset();
|
})
|
// if(this.warehouse.areaCode==''&&this.warehouse.placeCode){
|
// uni.showToast({
|
// title: '请填写目标库区或目标库位!',
|
// icon: 'none',
|
// duration: 2000
|
// })
|
// return;
|
// }
|
// if (this.warhouseTph == '') {
|
// uni.showToast({
|
// title: '组盘成功后,可入库!',
|
// icon: 'none',
|
// duration: 2000
|
// })
|
// return
|
// }
|
// uni.navigateTo({
|
// url: '/pages/putIn/three/three?type=入库单&containerCode=' + this.warhouseTph
|
// })
|
},
|
getVehicleType() {
|
getareaTypesList().then((res) => {
|
// if (res.data.rows.length == 0) {
|
// this.rescode = 400
|
// this.resmessage = '暂无数据'
|
// this.$refs.resmodal.show = true
|
// return
|
// }
|
var arr = res.result.items;
|
arr.map(item => {
|
item.text = item.areaCode;
|
return item;
|
})
|
this.wolist = arr
|
})
|
},
|
confirmXl(index) {
|
this.warehouse.areaCode = this.wolist[index].areaCode;
|
// this.warehouse.ContainerTypeCode = this.wolist[index].id;
|
},
|
filterMark(stockFlagStatus) {
|
let str = ''
|
let arr4 = this.arrD.filter(v => v.value == stockFlagStatus)
|
if (arr4.length > 0) {
|
str = arr4[0].title
|
}
|
return str
|
},
|
//------获取推荐
|
containerFocus2() {
|
// //debugger
|
if (!this.warehouse.areaCode) {
|
uni.showToast({
|
title: '请选择目标库区!',
|
icon: 'none',
|
duration: 2000
|
});
|
return
|
}
|
getRecommendList({
|
'containerCode': this.warehouse.containerCode,
|
'areaCode': this.warehouse.areaCode
|
}).then(res => {
|
this.modalshow2 = true;
|
|
this.containerList = res.result.reduce((curr, item) => {
|
curr.push({
|
text: item.placeCode,
|
})
|
return curr;
|
}, [])
|
})
|
},
|
//------获取推荐类型选择
|
confirm2(index) {
|
this.warehouse.placeCode = this.containerList[index].text;
|
},
|
}
|
}
|
</script>
|
<style lang="scss" scoped>
|
.bg_item {
|
background: #FFEBCD !important;
|
}
|
|
.inputGray2 {
|
line-height: 30px;
|
border-top: 10rpx solid transparent;
|
}
|
|
.inputGray {
|
border-top: 0rpx solid transparent;
|
|
}
|
|
|
|
.boxList {
|
transition: all ease 2s;
|
position: fixed;
|
bottom: 0;
|
left: 0;
|
top: 0;
|
right: 0;
|
width: 100%;
|
height: 100%;
|
z-index: 999;
|
background: rgba(0, 0, 0, 0.6);
|
|
.innerWrap {
|
max-height: 50%;
|
overflow-y: auto;
|
background: white;
|
position: absolute;
|
bottom: 0;
|
left: 0;
|
width: 100%;
|
|
ul {
|
padding: 0;
|
margin: 0;
|
|
li {
|
padding: 0;
|
margin: 0;
|
border-bottom: 1px solid #e4e7ed;
|
list-style-type: none;
|
display: flex;
|
flex-direction: row;
|
line-height: 1;
|
justify-content: center;
|
align-items: center;
|
font-size: 13px;
|
padding: 14px 0;
|
flex-direction: column;
|
}
|
}
|
}
|
|
}
|
</style>
|