<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.containerNo" :msg="msg.containter"
|
:msg-type="msgType.containter" @search="onSearchContainter" @clear="onClearContainter" />
|
|
<!-- 库区 -->
|
<!-- <selectItem :disabled="selectDisabled" v-show="Boolean(containerInfo.containerNo)"
|
:selectData="areaData" :value.sync="form.areaNo" label="库区编号" labelField="areaName"
|
valueField="areaNo" /> -->
|
<!-- 库位 -->
|
<!-- <selectItem :disabled="selectDisabled" v-show="Boolean(containerInfo.containerNo)&&Boolean(form.areaNo)"
|
:selectData="placeList" :value.sync="form.placeNo" label="库位编号" labelField="placeNo"
|
valueField="placeNo" /> -->
|
|
|
<div v-if="placeInfoShow">
|
<scan-input-form-item class="forma-item" label="库位已有托盘信息" :content="false" />
|
<containerInfo :containerInfo="containerInfo" />
|
</div>
|
|
<!-- <placeInfo v-show="selectDisabled" :placeInfo="containerInfo.placeInfo" /> -->
|
</view>
|
</view>
|
<template v-slot:footer>
|
<view class="bottom-btns-row">
|
<template>
|
<div class="btn-frame"><u-button type="primary" text="解绑" @click="onSubmit"
|
: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 selectItem from './modules/selectItem.vue'
|
import placeInfo from './modules/placeInfo.vue'
|
import containerInfo from './modules/containerInfo.vue'
|
import {
|
parseDic,
|
$alert,
|
$successInfo,
|
getDicList
|
} from '@/static/js/utils/index.js'
|
import {
|
palceList
|
} from '@/service/mixins/mixins.js'
|
import {
|
getContainerPlaceInfo,
|
containerHandle,
|
getContainerPlaceByPlace
|
} from '@/api/containerHandle.js'
|
import {
|
getAreaInfo
|
} from '@/api/common.js'
|
let initInterVal = null;
|
export default {
|
name: 'containerUnBind',
|
components: {
|
DefaultHeaderPageLayout,
|
ActionUserRow,
|
ScanInputFormItem,
|
placeInfo,
|
selectItem,
|
containerInfo
|
},
|
data() {
|
return {
|
pageBodyHeight: 0,
|
containter: null,
|
form: {
|
containerNo: '',
|
areaNo: '',
|
placeNo: ''
|
},
|
msg: {
|
containter: ''
|
},
|
msgType: {
|
containter: 'info'
|
},
|
containerInfo: {},
|
areaData: [],
|
containerPlaceInfo: {}
|
|
}
|
},
|
computed: {
|
selectDisabled() {
|
return Boolean(this.containerInfo?.placeInfos?.placeNo)
|
},
|
abled() {
|
return Boolean(this.containerInfo.containerNo) && Boolean(this.containerInfo?.placeInfos?.placeNo);
|
},
|
placeInfoShow() {
|
return Boolean(this.containerInfo.containerNo) && Boolean(this.containerInfo?.placeInfos?.placeNo);
|
}
|
},
|
watch: {
|
'form.containerNo': {
|
handler(val, oldVal) {
|
this.containerInfo = {}
|
}
|
}
|
},
|
methods: {
|
/* 托盘编码搜索 */
|
async onSearchContainter() {
|
const {
|
containerNo
|
} = this.form
|
if (!Boolean(containerNo)) {
|
this.msgType.containter = 'error'
|
this.msg.containter = '请输入托盘编号!';
|
return false;
|
}
|
// 获取代码
|
try {
|
let {
|
result
|
} = await getContainerPlaceInfo({
|
containerNo
|
})
|
this.containerInfo = result
|
if (Boolean(this.containerInfo?.placeInfos?.placeNo)) {
|
this.$nextTick(() => {
|
this.$set(this.form, 'areaNo', this.containerInfo?.placeInfos?.areaCode)
|
this.$set(this.form, 'placeNo', this.containerInfo?.placeInfos?.placeNo)
|
})
|
|
}
|
|
} catch (e) {
|
//TODO handle the exception
|
console.log(e);
|
}
|
},
|
/* 清除托盘编码 */
|
onClearContainter() {
|
this.form = {
|
containterNo: ''
|
}
|
},
|
|
// 托盘处理
|
async onSubmit() {
|
this.form.type = 2
|
uni.showModal({
|
title: '解绑',
|
content : '是否确认解绑?',
|
showCancel: true,
|
confirmText: '确定',
|
cancelText: '取消',
|
success: async ({
|
confirm,
|
cancel
|
}) => {
|
if (confirm) {
|
try {
|
await containerHandle(this.form)
|
$alert("库位解绑成功!");
|
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.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;
|
}
|
}
|
}
|
}
|
|
.label {
|
margin-left: 25rpx;
|
font-size: 30rpx;
|
}
|
</style>
|