<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">
|
<scan-input-form-item
|
class="forma-item"
|
label="托盘编码"
|
v-model="form.containterCode"
|
:msg="msg.containter"
|
:msg-type="msgType.containter"
|
@search="onSearchContainter"
|
@clear="onClearContainter"
|
/>
|
<scan-input-form-item
|
class="forma-item"
|
label="管段编码"
|
v-model="form.pipeSpecCode"
|
:msg="msg.material"
|
:msg-type="msgType.material"
|
@search="onSearchMaterial"
|
@clear="onClearMaterial"
|
/>
|
<EasyPicker :visible.sync="visible" :list="placeList.filter(item=>item.placeNo!='ZDCR')" labelField="placeNo" valueField="placeNo" @select="getSiteVal"/>
|
<!-- <EasyPicker :visible.sync="visible" :list="placeList" labelField="placeNo" valueField="placeNo" @select="getSiteVal" /> -->
|
<materialList :contaninerData="contaninerData" @delContainer="delContainer" />
|
</view>
|
</view>
|
<template v-slot:footer>
|
<view class="bottom-btns-row">
|
<template>
|
<div class="btn-frame"><u-button type="primary" text="确 认 分 拣" @click="onSubmit"></u-button></div>
|
<!-- <div class="btn-frame"><u-button type="primary" text="分拣入库" @click="addInBound"></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 } from '@/static/js/utils/index.js';
|
import { palceList } from '@/service/mixins/mixins.js';
|
import { getContainerInfo } from '@/api/common.js';
|
import { getForEmptyContainerNo, getForMaterialNo, bindMaterialContainer, addInBound,pickPipeSpecCode } from '@/api/bind.js';
|
import {NFCInit,NFCReadUID } from '@/service/util/RfidMethod.js'
|
let initInterVal = null;
|
export default {
|
name: 'receiveInPage',
|
components: {
|
DefaultHeaderPageLayout,
|
ActionUserRow,
|
ScanInputFormItem,
|
EasySelectFormItem,
|
materialList,
|
EasyPicker
|
},
|
data() {
|
return {
|
pageBodyHeight: 0,
|
form: {
|
containterCode: '',
|
pipeSpecCode: '',
|
site: ''
|
},
|
msg: {
|
containter: '',
|
material: '',
|
site: ''
|
},
|
msgType: {
|
containter: 'info',
|
material: 'error',
|
site: 'error'
|
},
|
containerStatus: null,
|
contaninerData: [],
|
visible: false
|
};
|
},
|
computed: {
|
// disabledBind() {
|
// return !Boolean(this.containerStatus) || this.contaninerData.length < 1;
|
// },
|
// disabledBound() {
|
// return !Boolean(this.containerStatus);
|
// }
|
},
|
watch: {
|
'form.containterCode': {
|
handler(val, oldVal) {
|
this.resetContainerNo();
|
}
|
}
|
},
|
onShow() {
|
console.log('onShow');
|
var nfc = NFCInit();
|
console.log(nfc);
|
},
|
onHide() {
|
console.log('onHide');
|
var rfid = NFCReadUID();
|
if(rfid!=null){
|
if(this.form.containterCode ==''){
|
this.form.containterCode = rfid.UID
|
} else{
|
this.form.pipeSpecCode = rfid.UID
|
}
|
}
|
console.log(rfid);
|
},
|
methods: {
|
// 选择站点返回值
|
getSiteVal(val, valObj, index) {
|
this.form.site = val;
|
},
|
/* 托盘编码搜索 */
|
async onSearchContainter() {
|
if (!this.form.containterCode) {
|
this.msgType.containter = 'error';
|
this.msg.containter = '请输入托盘号!';
|
return false;
|
}
|
return;//暂不搜索
|
// 获取代码
|
try {
|
let { result } = await getForEmptyContainerNo({ code: this.form.containterCode });
|
this.containerStatus = result?.containerStatus;
|
// var notKT=result?.materialContainers.some(item=>item.pipeSpecCode!='KONGTUO')
|
// if(notKT) {
|
// this.$modal('当前托盘存在非空托物料')
|
// this.onClearContainter()
|
// }
|
// 托盘详情
|
let containerStatusName = parseDic(this.$store, 'container_status', result?.containerStatus);
|
containerStatusName = containerStatusName == '无此字典' ? '' : containerStatusName;
|
this.msg.containter = `状态:${containerStatusName}, 尺寸:${result?.specLength}*${result?.specWidth}*${result?.specHeight}`;
|
|
result?.containerList.forEach((item) => {
|
let isExist = this.contaninerData.some((item1) => item1.containerNo == item.containerNo);
|
if (!isExist) {
|
this.contaninerData.push(item);
|
}
|
});
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
/* 清除托盘编码 */
|
onClearContainter() {
|
this.form = {
|
containterCode: '',
|
pipeSpecCode: '',
|
site: ''
|
};
|
this.resetContainerNo();
|
},
|
// 重写托盘编码
|
resetContainerNo() {
|
this.msg = {
|
containter: '',
|
material: '',
|
site: ''
|
};
|
this.msgType = {
|
containter: 'info',
|
material: 'error',
|
site: 'error'
|
};
|
this.containerStatus = null;
|
this.contaninerData = [];
|
this.form.pipeSpecCode = '';
|
this.form.site = '';
|
},
|
/* 空托编码搜索 */
|
async onSearchMaterial() {
|
if (!this.form.pipeSpecCode) {
|
this.msg.material = '请输入空托编号!';
|
return false;
|
}
|
this.msg.material = '';
|
debugger
|
// 解析管段编码、管段名称和船号
|
const parts = this.form.pipeSpecCode.split(',');
|
if (parts.length < 2) {
|
this.msg.material = '码格式不正确,请检查输入';
|
return false;
|
}
|
const pipeCode = parts[0];
|
const pipeName = parts.length > 1? parts[1] : '';
|
const shipNo = parts.length > 2? parts[2] : '';
|
|
try {
|
// let { result } = await getContainerInfo({ ContainerNo: this.form.pipeSpecCode });
|
// if (result.containerNo == this.form.containterCode) {
|
// return this.$modal('当前空托与托盘重复');
|
// }
|
// var isExit = this.materialList.some((item) => item.materialNo == pipeCode);
|
// if(isExit){
|
// return this.$modal('当前管段编码'+pipeCode+'已经在托盘'+this.form.containerNo+'中');
|
// }
|
// 更新提示信息
|
this.msg.material = `管段编码:${pipeCode},管段名称:${pipeName},船号:${shipNo}`;
|
this.form.pipeSpecCode=pipeCode;
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
/* 物料编码清除 */
|
onClearMaterial() {
|
this.form.pipeSpecCode = '';
|
},
|
|
//删除空托
|
delContainer(containerNo) {
|
this.contaninerData = this.contaninerData.filter((item) => item.containerNo != containerNo);
|
},
|
// 分拣
|
async onSubmit() {
|
let { contaninerData, form } = this;
|
// if(contaninerData.length>3) {
|
// return $alert("分拣数量不能超过4个!")
|
// }
|
const data = {
|
type: 2,
|
containerNo: form.containterCode,
|
pipeSpecCode:form.pipeSpecCode,
|
materialContainerList: []
|
};
|
|
data.materialContainerList = contaninerData.map((item) => {
|
return {
|
materialNo: 'KONGTUO',
|
materialName: '空托',
|
materialId: item.containerNo
|
};
|
});
|
try {
|
await pickPipeSpecCode(data);
|
this.$modal('分拣成功');
|
this.onClearContainter();
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
// 入库
|
async addInBound() {
|
// if(this.contaninerData.length>3) {
|
// return $alert("分拣数量不能超过4个!")
|
// }
|
const data = {
|
stationNo: this.form.site,
|
type: 2,
|
containerNo: this.form.containterCode,
|
materialContainerList: this.contaninerData.map((item) => {
|
return {
|
materialId: item.containerNo,
|
materialNo: 'KONGTUO',
|
materialName: '空托',
|
materialType: 4
|
};
|
})
|
};
|
|
try {
|
await addInBound(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
|
}
|
}
|
},
|
mixins: [palceList],
|
onReady() {
|
this.startInitInterval(async () => {
|
/* 页面初始化后需要执行的代码在这边调用 */
|
// 注释
|
// this.getPalceList({
|
// areaCode: 'WXJSXL'
|
// });
|
});
|
},
|
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>
|