<template>
|
<default-header-page-layout ref="page" title="外协件组盘入库">
|
<view class="page-frame with-action-user-row" :style="{height:pageBodyHeight+'px'}" v-if="pageBodyHeight">
|
<action-user-row />
|
<view class="with-action-user-row-page-content">
|
<!-- step 1 start -->
|
<scan-input-form-item class="forma-item" label="托盘编码" v-model="form.containterCode"
|
:msg="msg.containter" :msg-type="msgType.containter" @search="onSearchContainter"
|
@clear="onClearContainter" />
|
|
<!-- v-if="containerInfo.isExist==2" -->
|
<scan-input-form-item placeholder="请选择" :clearable="false"
|
:hasScan="false" :hasSearch="false" @click.native="ctVisible=true" class="forma-item" label="托盘类型"
|
v-model="form.containerType" />
|
<EasyPicker :visible.sync="ctVisible" :list="ContainerType" labelField="value" valueField="code"
|
@select="getTypeVal" />
|
|
<scan-input-form-item placeholder="请选择" :clearable="false" :hasScan="false" :hasSearch="false"
|
@click.native="visibleSort1=true" class="forma-item" label="是否空托盘" v-model="form.sorting" />
|
<EasyPicker :visible.sync="visibleSort1" :list="isSorting" labelField="label" valueField="value"
|
@select="radioChange1" />
|
|
<scan-input-form-item v-show="Boolean(containerInfo.containerNo)" class="forma-item" label="物料二维码" v-model="form.materialNo" :msg="msg.material"
|
:msg-type="msgType.material" @search="onSearchMaterial" @clear="onClearMaterial" />
|
|
<scan-input-form-item v-show="Boolean(containerInfo.containerNo)" placeholder="请选择" :clearable="false" :hasScan="false" :hasSearch="false"
|
@click.native="visible=true" class="forma-item" label="选择库位" v-model="form.site" />
|
<EasyPicker :visible.sync="visible" :list="placeList"
|
labelField="placeNo" valueField="placeNo" @select="getSiteVal" />
|
<!-- .filter(item=>item.placeNo!='storageTypeNo') -->
|
<!-- 自制件入库测试 -->
|
<!-- <scan-input-form-item v-show="Boolean(containerInfo.containerNo)" class="forma-item" label="外协件下料点(测试)" v-model="form.placeNo" :hasScan="false"
|
:hasSearch="false" /> -->
|
<materialList :materialData="materialData" @delMaterialData="delMaterialData" />
|
</view>
|
</view>
|
<template v-slot:footer>
|
<view class="bottom-btns-row">
|
<template v-if="abled">
|
<div class="btn-frame"><u-button type="primary" text="组 盘" @click="onSubmit"
|
:disabled="!abled"></u-button></div>
|
<div class="btn-frame"><u-button type="primary" text="组盘入库" @click="addInBound"
|
:disabled="!abled"></u-button></div>
|
<div class="btn-frame" style="margin-left:10rpx"><u-button type="primary" text="外协件入库"
|
@click="addInVirtualWxjPlace" :disabled="!abled"></u-button></div>
|
<!-- <div class="btn-frame" style="margin-left:10rpx"><u-button type="primary" text="生成任务"
|
@click="addVirtualTask" :disabled="!abled"></u-button></div> -->
|
</template>
|
</view>
|
</template>
|
</default-header-page-layout>
|
</template>
|
|
<script>
|
import DefaultHeaderPageLayout from '@/components/DefaultHeaderPageLayout.vue'
|
import ActionUserRow from '@/components/ActionUserRow.vue'
|
import ScanInputFormItem from '@/components/ScanInputFormItem.vue'
|
import EasySelectFormItem from '@/components/EasySelectFormItem.vue'
|
import EasyPicker from '@/components/EasyPicker.vue'
|
import materialList from './modules/materialList.vue'
|
import {
|
parseDic,
|
$alert,
|
$successInfo,
|
getDicList
|
} from '@/static/js/utils/index.js'
|
import {
|
palceList
|
} from '@/service/mixins/mixins.js'
|
import {
|
getForContainerCode,
|
getForMaterialNo,
|
bindMaterialContainer,
|
addInBound,
|
addInVirtualWxjPlace,
|
addAGVTask
|
} from '@/api/bind.js'
|
let initInterVal = null;
|
export default {
|
name: 'receiveInPage',
|
components: {
|
DefaultHeaderPageLayout,
|
ActionUserRow,
|
ScanInputFormItem,
|
EasySelectFormItem,
|
materialList,
|
EasyPicker
|
},
|
data() {
|
return {
|
isSorting: [{
|
label: '是',
|
value: '1'
|
},
|
{
|
label: '否',
|
value: '0'
|
}
|
],
|
pageBodyHeight: 0,
|
containter: null,
|
form: {
|
containterCode: '',
|
materialNo: '',
|
site: '',
|
containerTypeCode: 0,
|
containerType: ''
|
},
|
msg: {
|
containter: '',
|
material: '',
|
site: '',
|
},
|
msgType: {
|
containter: 'info',
|
material: 'error',
|
site: 'error'
|
},
|
containerInfo: {},
|
materialData: [],
|
ContainerType: [],
|
visible: false,
|
ctVisible: false,
|
visibleSort1:false,
|
}
|
},
|
computed: {
|
/* && this.materialData.length > 0 */
|
abled() {
|
let {
|
containerStatus
|
} = this.containerInfo
|
return containerStatus != 0 && containerStatus != 3
|
}
|
},
|
watch: {
|
'form.containterCode': {
|
handler(val, oldVal) {
|
this.resetContainerNo()
|
}
|
}
|
},
|
methods: {
|
// 测试PLC触发生成入库任务
|
async addVirtualTask() {
|
try {
|
await addAGVTask({
|
containerNo: this.form.containterCode
|
})
|
$alert("生成任务成功");
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
// 选择站点返回值
|
getSiteVal(val, valObj, index) {
|
this.form.site = val
|
},
|
// 选择托盘类型返回值
|
getTypeVal(val, valObj, index) {
|
this.form.containerTypeCode = valObj.code
|
this.form.containerType = valObj.value
|
},
|
/* 托盘编码搜索 */
|
async onSearchContainter() {
|
if (!this.form.containterCode) {
|
this.msgType.containter = 'error'
|
this.msg.containter = '请输入托盘编号!';
|
return false;
|
}
|
// 获取代码
|
try {
|
let {
|
result
|
} = await getForContainerCode({
|
code: this.form.containterCode
|
})
|
this.containerInfo = result
|
// 托盘详情
|
let containerStatusName = parseDic(this.$store, 'container_status', result?.containerStatus)
|
containerStatusName = containerStatusName == '无此字典' ? '' : containerStatusName
|
this.msg.containter =
|
`状态:${containerStatusName}, 尺寸:${result?.specLength}*${result?.specWidth}*${result?.specHeight}`
|
result?.materialContainers.forEach(item => {
|
|
let isExist = this.materialData.some(item1 => item1.materialId == item.materialId)
|
if (!isExist) {
|
this.materialData.push(item)
|
}
|
})
|
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
/* 清除托盘编码 */
|
onClearContainter() {
|
this.form = {
|
containterCode: '',
|
materialNo: '',
|
site: '',
|
containerTypeCode: 0,
|
containerType: ''
|
}
|
this.$set(this.form, 'site', '')
|
this.resetContainerNo()
|
},
|
resetContainerNo() {
|
this.msg = {
|
containter: '',
|
material: '',
|
site: '',
|
}
|
this.msgType = {
|
containter: 'info',
|
material: 'error',
|
site: 'error'
|
}
|
this.containerStatus = null
|
this.materialData = []
|
this.form.materialNo = ''
|
this.form.site = ''
|
this.form.containerTypeCode = 0
|
this.form.containerType = ''
|
this.containerInfo = {}
|
},
|
/* 物料编码搜索 */
|
async onSearchMaterial() {
|
if (!this.form.materialNo) {
|
this.msg.material = '请输入物料编号!';
|
return false;
|
}
|
this.msg.material = ''
|
try {
|
let {
|
result
|
} = await getForMaterialNo({
|
code: this.form.materialNo
|
})
|
const isExist = this.materialData.some(item => item.materialId == result.materialId)
|
if (!isExist) {
|
this.materialData.push(result)
|
}else{
|
$alert(`物料唯一码已存在,请删除后再输入!`);
|
}
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
/* 物料编码清除 */
|
onClearMaterial() {
|
this.form.materialNo = ''
|
},
|
//删除物料
|
delMaterialData(materialId) {
|
this.materialData = this.materialData.filter(item => item.materialId != materialId)
|
},
|
// 组盘
|
async onSubmit() {
|
if (this.containerInfo.isExist == 2 && this.form.containerTypeCode == 0) {
|
return $alert("请选择托盘类型!")
|
}
|
const data = {
|
containerNo: this.form.containterCode,
|
containerType: this.form.containerTypeCode,
|
materialContainerList: this.materialData
|
}
|
try {
|
await bindMaterialContainer(data)
|
this.$modal('组盘成功')
|
this.onClearContainter()
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
// 入库
|
async addInBound() {
|
if (this.containerInfo.isExist == 2 && this.form.containerTypeCode == 0) {
|
return $alert("请选择托盘类型!")
|
}
|
if (this.form.orderType != "1" && this.form.orderType != "0")
|
{
|
return $alert("选择则是否空托盘!")
|
}
|
if(this.form.orderType == "1" && this.materialData.length > 0)
|
{
|
return $alert("当前选择的是空托盘,请删除物料信息!");
|
|
}
|
|
|
const data = {
|
type: 4,
|
stationNo: this.form.site,
|
containerNo: this.form.containterCode,
|
containerType: this.form.containerTypeCode,
|
materialContainerList: this.materialData,
|
isEmptyContainer: this.form.orderType == "1" ? 1 : 0
|
}
|
|
try {
|
await addInBound(data)
|
this.$modal('入库任务生成成功')
|
this.onClearContainter()
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
// 外协件入库
|
async addInVirtualWxjPlace() {
|
const data = {
|
containerNo: this.form.containterCode,
|
placeNo: this.form.placeNo,
|
containerType: this.form.containerTypeCode,
|
materialContainerList: this.materialData,
|
isEmptyContainer: this.form.orderType
|
}
|
try {
|
await addInVirtualWxjPlace(data)
|
this.$modal('外协件入库成功')
|
this.onClearContainter()
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
|
|
|
/* 页面初始化获取页面body高度的定时器 */
|
startInitInterval(callback) {
|
initInterVal = setInterval(() => {
|
if (this.pageBodyHeight) {
|
this.clearInitInterval()
|
callback && callback()
|
} else {
|
this.pageBodyHeight = this.$refs.page.getBodyHeight()
|
}
|
}, 200)
|
},
|
/* 清除定时器 */
|
clearInitInterval() {
|
try {
|
clearInterval(initInterVal)
|
initInterVal = null
|
} catch (e) {
|
//TODO handle the exception
|
}
|
},
|
radioChange1(val, b) {
|
this.form.orderType = val
|
this.form.sorting=b.label
|
},
|
},
|
mixins: [palceList],
|
onReady() {
|
this.startInitInterval(async () => {
|
/* 页面初始化后需要执行的代码在这边调用 */
|
this.getPalceList({
|
areaCode: 'LTK-SDCR'
|
})
|
|
this.ContainerType = getDicList(this.$store, 'container_type').sysDictDatas
|
})
|
},
|
onUnload() {
|
this.clearInitInterval()
|
},
|
}
|
</script>
|
|
<style scoped lang="scss">
|
.bottom-btns-row {
|
display: flex;
|
justify-content: center;
|
padding: 10rpx 10rpx;
|
background-color: #fff;
|
|
.btn-frame {
|
flex: 1;
|
box-sizing: border-box;
|
}
|
|
.btn-frame:nth-child(1) {
|
margin-right: 10rpx;
|
}
|
|
.left-btn-frame {
|
padding-left: 20rpx;
|
padding-right: 8rpx;
|
}
|
|
.right-btn-frame {
|
padding-right: 20rpx;
|
padding-left: 8rpx;
|
}
|
}
|
|
.forma-item {
|
margin-bottom: 24rpx;
|
}
|
|
.material-item-group {
|
background-color: $uni-bg-color;
|
padding-top: 10rpx;
|
|
.material-list-item {
|
border-bottom: 2rpx solid $uni-border-color;
|
padding-bottom: 10rpx;
|
padding-left: 60rpx;
|
margin-bottom: 10rpx;
|
position: relative;
|
|
&:last-child {
|
border-bottom: 0;
|
}
|
|
.item-row {
|
display: flex;
|
|
&>.label {
|
flex-shrink: 0;
|
color: $u-tips-color;
|
width: 144rpx;
|
}
|
|
&>.content {
|
flex-grow: 1;
|
color: $u-content-color;
|
|
uni-input {
|
font: inherit;
|
color: $u-primary;
|
text-decoration: underline;
|
}
|
}
|
}
|
|
.badge-box {
|
position: absolute;
|
top: 8rpx;
|
left: 8rpx;
|
z-index: 1;
|
}
|
|
.close-btn {
|
$closeBtnSize: 70rpx;
|
width: $closeBtnSize;
|
height: $closeBtnSize;
|
z-index: 1;
|
position: absolute;
|
top: 0rpx;
|
right: 8rpx;
|
background-color: $u-error;
|
opacity: 0.6;
|
border-radius: 25rpx;
|
|
.icon-layer {
|
position: absolute;
|
width: 100%;
|
height: 100%;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
z-index: 2;
|
}
|
}
|
}
|
}
|
</style>
|