<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">
|
<!-- page start -->
|
<scan-input-form-item
|
label="小车编号"
|
v-model="form.containter"
|
:msg="msg.containter"
|
:msg-type="msgType.containter"
|
@search="onSearch"
|
@clear="onClearContainer"
|
/>
|
<scan-input-form-item
|
label="零件号"
|
v-model="form.pCPartCode"
|
:msg="msg.containter"
|
:msg-type="msgType.containter"
|
@search="onSearch"
|
@clear="resetPartCode"
|
/>
|
<view class="materials-block" v-if="list.length>0">
|
<view class="materials-box">
|
<view class="box-top">
|
<view class="line"></view>
|
<view class="title">
|
<text class="text">存货详情</text>
|
</view>
|
</view>
|
<view class="material-item-group">
|
<view class="material-list-item" v-for="(item,index) in list" :key="'material-list-item-'+index"
|
@tap="pitch(item)" :class="item.edit ? 'clickactive' : ''">
|
<view class="badge-box"><u-badge :value="index+1" bg-color="#F18201" /></view>
|
<view class="item-row">
|
<view class="label">小车编号:</view>
|
<view class="content auto-wrap">{{item.wareContainerCode}}</view>
|
</view>
|
<view class="item-row">
|
<view class="label">零件编号:</view>
|
<view class="content auto-wrap">{{item.partCode}}</view>
|
</view>
|
<view class="item-row">
|
<view class="label">零件名称:</view>
|
<view class="content auto-wrap">{{item.partName}}</view>
|
</view>
|
<view class="item-row">
|
<view class="label">库位:</view>
|
<view class="content auto-wrap">{{item.wareLocationCode}}</view>
|
</view>
|
<view class="item-row">
|
<view class="label">库存状态:</view>
|
<view class="content auto-wrap">{{item.stockStatus}}</view>
|
</view>
|
</view>
|
</view>
|
</view>
|
</view>
|
<!-- page end -->
|
</view>
|
</view>
|
<template v-slot:footer>
|
<view class="bottom-btns-row">
|
<div class="btn-frame left-btn-frame"><u-button text="重 置" @click="onReset"></u-button></div>
|
<!-- <div class="btn-frame right-btn-frame"><u-button type="primary" text="确 定" @click="onConfirm"></u-button></div> -->
|
<div class="btn-frame right-btn-frame"><u-button type="primary" text="下一步" :disabled="(Array.isArray(arr) && arr.length == 0)" @click="showDrawer"></u-button></div>
|
</view>
|
<uni-drawer ref="showRight" mode="right" :mask-click="true">
|
<template>
|
<uni-section title="选择线别" type="line">
|
<uni-data-select
|
placeholder="请选择线别"
|
v-model="lineType"
|
:localdata="linelist"
|
@change="change"
|
></uni-data-select>
|
</uni-section>
|
</template>
|
|
<u-button style="width: 100%;position: fixed;bottom: 3px;" type="primary" text="确 定" :disabled="lineType == ''" @click="onConfirm"></u-button>
|
</uni-drawer>
|
</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 { parseDic, $successInfo } from '@/static/js/utils/index.js'
|
let initInterVal = null;
|
const defaultForm = {
|
containter:''
|
}
|
export default {
|
name:'baseOutPage',
|
components:{DefaultHeaderPageLayout,ActionUserRow,ScanInputFormItem},
|
data(){
|
return {
|
pageBodyHeight:0,
|
form:{...defaultForm},
|
msg:{
|
containter:''
|
},
|
msgType:{
|
containter:'error'
|
},
|
containter:null,
|
list:[],
|
arr:[],
|
linelist:[{value:1,text:"A线"},
|
{value:2,text:"B线"},
|
{value:3,text:"C线"},],
|
lineType:""
|
}
|
},
|
mounted() {
|
this.getData()
|
},
|
onPullDownRefresh() {
|
let _self = this;
|
this.$nextTick(function () {
|
_self.currentPage = 1;
|
_self.Status(this.e);
|
uni.stopPullDownRefresh(); //停止当前页面下拉刷新
|
});
|
},
|
// 上拉加载
|
onReachBottom() {
|
debugger
|
let _self = this;
|
uni.showNavigationBarLoading();
|
this.$nextTick(function () {
|
_self.currentPage++;
|
_self.pullGet(this.e);
|
uni.hideNavigationBarLoading();
|
});
|
},
|
methods:{
|
open(){
|
// 通过组件定义的ref调用uni-popup方法 ,如果传入参数 ,type 属性将失效 ,仅支持 ['top','left','bottom','right','center']
|
this.$refs.popup.open('top')
|
},
|
showDrawer() {
|
this.lineType = "";
|
this.$refs.showRight.open();
|
},
|
closeDrawer() {
|
this.$refs.showRight.close();
|
},
|
//选中
|
pitch(e) {
|
// if (!(e.stockStatus=="在库")) {
|
// uni.showToast({
|
// title: `${e.wareContainerCode}-库存状态不是在库不可出库`,
|
// icon: "none"
|
// });
|
// return
|
// }
|
|
this.list.forEach(item => {
|
item.edit = false
|
})
|
e.edit = !e.edit
|
this.arr = this.list.filter(item => item.edit)
|
this.arr = [e]
|
this.$forceUpdate()
|
|
},
|
pullGet(params){
|
this.$api.get('page',params,{block:'exwarehouse',fullRes:true}).then((d)=>{
|
//上拉加载数据开始
|
if (res.data.rows.length == 0) {
|
// this.contentText = '没有更多了'
|
uni.showToast({
|
title: "没有更多数据了",
|
icon: "none",
|
});
|
}
|
if (this.currentPage != 1) {
|
this.list = this.list.concat(res.data.rows);
|
} else {
|
this.list = res.data.rows;
|
//上拉加载数据结束
|
}
|
}).catch(()=>{
|
this.containter = null;
|
})
|
},
|
/* 托盘编码搜索 */
|
onSearch(){
|
if (!this.form.containter && !this.form.pCPartCode) {
|
this.msgType.containter = 'error'
|
this.msg.containter = '请输入查询条件!';
|
return false;
|
}
|
this.msg.containter = '';
|
this.getData()
|
},
|
/* 清除托盘编码 */
|
onClearContainer(){
|
this.resetContainer()
|
},
|
/* 重置托盘编码 */
|
resetContainer(){
|
this.form.containter = ''
|
this.msg.containter = ''
|
this.containter = null
|
this.arr = []
|
//this.list = []
|
this.getData()
|
},
|
resetPartCode(){
|
this.form.PCPartCode = ''
|
this.msg.containter = ''
|
this.containter = null
|
this.arr = []
|
//this.list = []
|
this.getData()
|
},
|
/* 获取托盘信息 */
|
getData(){
|
let params = {ContainerCode:this.form.containter,
|
PCPartCode:this.form.pCPartCode,
|
PageNo:1,
|
PageSize:130,}
|
this.$api.get('page',params,{block:'exwarehouse',fullRes:true}).then((d)=>{
|
this.list=d.data.rows
|
}).catch(()=>{
|
this.containter = null;
|
})
|
},
|
/* 响应重置按钮 */
|
onReset(){
|
this.resetContainer()
|
},
|
/* 响应确认按钮 */
|
onConfirm(record){
|
uni.showModal({
|
title: '提示',
|
content: '是否确认出库?',
|
confirmText:'取消',
|
cancelText:'确认',
|
showCancel: true,
|
cancelColor: '#333333',
|
success: (res => {
|
if (res.confirm) {
|
// app 确认按钮放右边
|
} else if (res.cancel) {
|
let params = {
|
placecode: this.arr[0].wareLocationCode,
|
containercode: this.arr[0].wareContainerCode,
|
toPlace: this.lineType,
|
}
|
this.dealSubmit(params);
|
// ((f)=>{
|
// if (f) {
|
// this.resetContainer()
|
// $successInfo('出库成功!');
|
// }
|
// })
|
}
|
})
|
});
|
},
|
/* 出库接口调用 */
|
dealSubmit(params){
|
this.$api.post('ManualWare',params,{block:'exwarehouse'}).then(()=>{
|
callback && callback(true)
|
}).catch(()=>{
|
callback && callback(false)
|
})
|
},
|
/* 页面初始化获取页面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
|
}
|
}
|
},
|
onReady(){
|
this.startInitInterval(()=>{
|
/* 页面初始化后需要执行的代码在这边调用 */
|
})
|
},
|
onUnload(){
|
this.clearInitInterval()
|
}
|
}
|
</script>
|
|
<style scoped lang="scss">
|
.bottom-btns-row{
|
display: flex;
|
padding: 10rpx 0;
|
background-color: #fff;
|
.btn-frame{
|
width: 50%;
|
box-sizing: border-box;
|
}
|
.left-btn-frame{
|
padding-left: 20rpx;
|
padding-right: 8rpx;
|
}
|
.right-btn-frame{
|
padding-right: 20rpx;
|
padding-left: 8rpx;
|
}
|
}
|
.materials-block{
|
padding: 12rpx 16rpx 0 16rpx;
|
.materials-box{
|
background-color: $uni-bg-color;
|
border-radius: 6rpx;
|
box-sizing: border-box;
|
position: relative;
|
$topHeight:50rpx;
|
padding-top: $topHeight;
|
.box-top{
|
position: absolute;
|
top:0;
|
left: 0;
|
width: 100%;
|
height: $topHeight;
|
display: flex;
|
align-items: center;
|
&>.line{
|
width: 100%;
|
height: 2rpx;
|
background-color: $uni-border-color;
|
}
|
&>.title{
|
position: absolute;
|
top:0;
|
left: 0;
|
width: 100%;
|
height: 100%;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
z-index: 1;
|
&>.text{
|
font-size: 30rpx;
|
background-color: $uni-bg-color;
|
color: $uni-border-color;
|
padding: 4rpx 12rpx;
|
}
|
}
|
}
|
}
|
}
|
.material-item-group{
|
padding: 0 4rpx;
|
.material-list-item{
|
//border-bottom: 2rpx solid $uni-border-color;
|
padding-bottom: 10rpx;
|
padding-left: 60rpx;
|
margin-bottom: 10rpx;
|
position: relative;
|
font-size: 40rpx;
|
line-height: 2.3rem;
|
border: 1px solid #dddddd ;
|
|
&:last-child{
|
//border-bottom: none;
|
}
|
.item-row{
|
display: flex;
|
&>.label{
|
flex-shrink: 0;
|
color: $u-tips-color;
|
width: 300rpx;
|
}
|
&>.content{
|
flex-grow: 1;
|
color: $u-content-color;
|
}
|
}
|
.badge-box{
|
position: absolute;
|
top:8rpx;
|
left: 8rpx;
|
z-index: 1;
|
}
|
}
|
}
|
|
.material-list-item.clickactive {
|
// position: fixed;
|
// border: 1px solid #f18202;
|
// border-radius: 5rpx;
|
// background: white !important;
|
border: 1px solid #f18202;
|
|
&::after {
|
content: '';
|
background-image: url("@/static/img/iconCk.png");
|
background-size: cover;
|
width: 24px;
|
height: 24px;
|
display: block;
|
position: absolute;
|
right: 0;
|
bottom: 0;
|
}
|
}
|
|
|
</style>
|