|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <view> | 
|---|
|  |  |  | <view class="station" :class="station.style" v-if="station"> | 
|---|
|  |  |  | <view style="font-size: 13px;"> | 
|---|
|  |  |  | <view class="station station-wrk" v-if="station"> | 
|---|
|  |  |  | <view class="mt-flex"> | 
|---|
|  |  |  | <view class="station-title" style="flex: 1;">{{station.devNo}}</view> | 
|---|
|  |  |  | <view class="station-title" style="flex: 4;">{{station.threeCode}}</view> | 
|---|
|  |  |  | <view class="station-title" style="flex: 1;"> | 
|---|
|  |  |  | <button size="mini" @click="allChecked()">{{allCheckBtnTitle}}</button> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view>站点类型:{{station.locType1$}}区</view> | 
|---|
|  |  |  | <view>货架前两位:{{station.locType2$}}</view> | 
|---|
|  |  |  | <view>站点状态:{{station.locSts$}}</view> | 
|---|
|  |  |  | <view class="mt-flex"> | 
|---|
|  |  |  | <view class="station-barcode" style="flex: 1">货架码:<text>{{station.barcode ? station.barcode : '--'}}</text></view> | 
|---|
|  |  |  | <view v-if="station.barcode && station.locSts == 'F'"><button size="mini" type="warn" @click="unbind()">解除绑定</button></view> | 
|---|
|  |  |  | <view>调拨单号:{{station.orderNo}}</view> | 
|---|
|  |  |  | <view>物料编号:{{station.matnr}}</view> | 
|---|
|  |  |  | <view style="width: 100%;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;">物料名称:{{station.maktx}}</view> | 
|---|
|  |  |  | <view style="display: flex;"> | 
|---|
|  |  |  | <view style="flex: 2;">调拨数量:{{station.anfme}}</view> | 
|---|
|  |  |  | <view style="flex: 3;">库存数量:{{station.stock}}</view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view style="display: flex;"> | 
|---|
|  |  |  | <view style="flex: 2;">已调拨数量:{{station.qty}}</view> | 
|---|
|  |  |  | <view style="flex: 3;">当前选择调拨数量:{{station.count ? station.count : 0}}</view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <!-- 垫高 --> | 
|---|
|  |  |  | <!-- <view style="height: 330rpx;text-align: center;color: #b9b9b9;"> | 
|---|
|  |  |  | </view> --> | 
|---|
|  |  |  | <view class="list list-font-color" :class="orderDetl.color" v-for="(orderDetl,index) in dataList" :key="index"> | 
|---|
|  |  |  | <view class="list-left" style="display: flex;flex-direction: column;"> | 
|---|
|  |  |  | <!-- 上 --> | 
|---|
|  |  |  | <view> | 
|---|
|  |  |  | <view class="detl-threeCode">{{orderDetl.threeCode}}</view> | 
|---|
|  |  |  | <view class="detl-locNo">{{orderDetl.locNo}}</view> | 
|---|
|  |  |  | <view class="detl-locNo">货架码:{{orderDetl.suppCode}}</view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <!-- 中 --> | 
|---|
|  |  |  | <view style="display: flex;"> | 
|---|
|  |  |  | <view style="flex: 1;"> | 
|---|
|  |  |  | <view>主单号:{{orderDetl.orderNo}}</view> | 
|---|
|  |  |  | <view>编号:{{orderDetl.matnr}}</view> | 
|---|
|  |  |  | <view>名称:{{orderDetl.maktx}}</view> | 
|---|
|  |  |  | <view>库位状态:{{orderDetl.locSts$}}</view> | 
|---|
|  |  |  | <view>库存数量:{{orderDetl.anfme}}</view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view class="out-btn" @click="pakoutPrive(orderDetl)"> | 
|---|
|  |  |  | <view>出库</view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <!-- 下 --> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <!-- <view class="list-right" @click="goToLocDetl(orderDetl)"> | 
|---|
|  |  |  | <uni-icons type="right" size="25"  color="#fff"></uni-icons> | 
|---|
|  |  |  | </view> --> | 
|---|
|  |  |  | <view class="list-right" @click="checkboxChange(orderDetl)"> | 
|---|
|  |  |  | <label > | 
|---|
|  |  |  | <checkbox :value="orderDetl.orderNo" :checked="orderDetl.checked" v-show="orderDetl.locSts == 'F'" style="transform:scale(0.7)" /><text></text> | 
|---|
|  |  |  | </label> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!-- 垫高 --> | 
|---|
|  |  |  | <view style="height: 340rpx;text-align: center;color: #b9b9b9;"> | 
|---|
|  |  |  | <view style="height: 160rpx;text-align: center;color: #b9b9b9;"> | 
|---|
|  |  |  | - 已经到底了 - | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <!-- 选择楼层弹窗 --> | 
|---|
|  |  |  | <view> | 
|---|
|  |  |  | <uni-popup ref="filter" type="dialog"> | 
|---|
|  |  |  | <view class="filter-popup"> | 
|---|
|  |  |  | <!-- 标题 --> | 
|---|
|  |  |  | <view class="title">调拨楼层</view> | 
|---|
|  |  |  | <view class="popup-item" style="width: 100%;display: flex;justify-content: center;"> | 
|---|
|  |  |  | <view style="margin-top: 50rpx;width: 60%;"> | 
|---|
|  |  |  | <uni-combox :candidates="floorList" placeholder="请选择目标楼层" v-model="floor"></uni-combox> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view class="btn filter-btn"> | 
|---|
|  |  |  | <view class="btn-right" @click="filterConfirm()">开始调拨</view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </uni-popup> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <!-- 底部操作按钮 --> | 
|---|
|  |  |  | <view class="buttom"> | 
|---|
|  |  |  | <button size="mini" @click="isAuto('unAuto')">手动</button> | 
|---|
|  |  |  | <button size="mini" type="primary" @click="isAuto('auto')">自动</button> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | 
|---|
|  |  |  | baseUrl: '', | 
|---|
|  |  |  | token: '', | 
|---|
|  |  |  | dataList: [], | 
|---|
|  |  |  | dbList: [], | 
|---|
|  |  |  | count: 0, | 
|---|
|  |  |  | containerType: '', | 
|---|
|  |  |  | isOpen: true, | 
|---|
|  |  |  | option: '', | 
|---|
|  |  |  | selects: [], | 
|---|
|  |  |  | orderId: '' | 
|---|
|  |  |  | orderId: '', | 
|---|
|  |  |  | station: '', | 
|---|
|  |  |  | allCheck: false, | 
|---|
|  |  |  | allCheckBtnTitle: '全选', | 
|---|
|  |  |  | floorList: ['2楼','3楼'], | 
|---|
|  |  |  | floor: '', | 
|---|
|  |  |  | moveType: '' | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | onShow() { | 
|---|
|  |  |  | 
|---|
|  |  |  | // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据 | 
|---|
|  |  |  | eventChannel.on('item', function(data) { | 
|---|
|  |  |  | console.log(data.item); | 
|---|
|  |  |  | data.item['count'] = 0 | 
|---|
|  |  |  | _this.station = data.item | 
|---|
|  |  |  | _this.orderId = data.item.id | 
|---|
|  |  |  | _this.getLocDetl(data.item.orderNo,data.item.threeCode,data.item.matnr,data.item.id) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | 
|---|
|  |  |  | data: { | 
|---|
|  |  |  | orderNo: orderNo, | 
|---|
|  |  |  | threeCode: threeCode , | 
|---|
|  |  |  | matnr: matnr | 
|---|
|  |  |  | matnr: matnr, | 
|---|
|  |  |  | floor: "F1" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | success(res) { | 
|---|
|  |  |  | 
|---|
|  |  |  | selected(option) { | 
|---|
|  |  |  | this.containerType = option | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | checkboxChange(e) { | 
|---|
|  |  |  | console.log(e); | 
|---|
|  |  |  | let items = this.dataList, | 
|---|
|  |  |  | values = e.orderNo; | 
|---|
|  |  |  | if (e.checked) { | 
|---|
|  |  |  | this.$set(e,'checked',false) | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (e.locSts != "F") { | 
|---|
|  |  |  | this.$set(e,'checked',false) | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.$set(e,'checked',true) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | let num = 0 | 
|---|
|  |  |  | for (let k of items) { | 
|---|
|  |  |  | if (k.checked) { | 
|---|
|  |  |  | num++ | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (num == items.length) { | 
|---|
|  |  |  | this.allCheck = true | 
|---|
|  |  |  | this.allCheckBtnTitle = '取消' | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.allCheck = false | 
|---|
|  |  |  | this.allCheckBtnTitle = '全选' | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.upDateCount() | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | upDateCount() { | 
|---|
|  |  |  | let num = 0 | 
|---|
|  |  |  | for (let k of this.dataList) { | 
|---|
|  |  |  | if (k.checked) { | 
|---|
|  |  |  | num = num + k.anfme | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.station.count = num | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | allChecked() { | 
|---|
|  |  |  | if (this.allCheck) { | 
|---|
|  |  |  | this.allCheck = false | 
|---|
|  |  |  | this.allCheckBtnTitle = '全选' | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.allCheck = true | 
|---|
|  |  |  | this.allCheckBtnTitle = '取消' | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (let item of this.dataList) { | 
|---|
|  |  |  | if (this.allCheck) { | 
|---|
|  |  |  | // if (item.locSts == "F") | 
|---|
|  |  |  | if (item.locSts != "F") { | 
|---|
|  |  |  | this.$set(item,'checked',false) | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.$set(item,'checked',true) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.$set(item,'checked',false) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.upDateCount() | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | isAuto(type) { | 
|---|
|  |  |  | this.dbList = [] | 
|---|
|  |  |  | for (let k of this.dataList) { | 
|---|
|  |  |  | if (k.checked) { | 
|---|
|  |  |  | this.dbList.push(k) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (this.dbList.length == 0) { | 
|---|
|  |  |  | uni.showToast({ title: '请选择调拨库位', icon: "error", position: 'top' }) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.moveType = type | 
|---|
|  |  |  | this.$refs.filter.open('bottom') | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | filterConfirm() { | 
|---|
|  |  |  | console.log(this.dbList); | 
|---|
|  |  |  | if (this.floor == '') { | 
|---|
|  |  |  | uni.showToast({ title: '请选择调拨楼层', icon: "error", position: 'top' }) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | let _this = this | 
|---|
|  |  |  | let param = {floor: this.floor,dbList: this.dbList,moveType: this.moveType} | 
|---|
|  |  |  | uni.request({ | 
|---|
|  |  |  | url: `${_this.baseUrl}/agvMobile/agv/v2/locMove`, | 
|---|
|  |  |  | header: {'token': uni.getStorageSync('token'),}, | 
|---|
|  |  |  | data: param, | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | success(res) { | 
|---|
|  |  |  | console.log(res); | 
|---|
|  |  |  | res = res.data | 
|---|
|  |  |  | if (res.code === 200) { | 
|---|
|  |  |  | uni.navigateBack({ | 
|---|
|  |  |  | delta: 1 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } else if (res.code == 403) { | 
|---|
|  |  |  | uni.showToast({ title: res.msg, icon: "error", position: 'top' }) | 
|---|
|  |  |  | setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | uni.showToast({ title: res.msg, icon: "error", position: 'top' }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | this.$refs.filter.close('bottom') | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style> | 
|---|
|  |  |  | @import url('../../../static/css/common/order.css'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .station { | 
|---|
|  |  |  | /* position: fixed; */ | 
|---|
|  |  |  | font-size: 18px; | 
|---|
|  |  |  | width: 96%; | 
|---|
|  |  |  | padding: 24rpx; | 
|---|
|  |  |  | z-index: 999; | 
|---|
|  |  |  | font-size: 14px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .station-title { | 
|---|
|  |  |  | font-size: 32px; | 
|---|
|  |  |  | font-weight: bold; | 
|---|
|  |  |  | /* padding: 2rpx 0; */ | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .station-barcode { | 
|---|
|  |  |  | font-size: 24px; | 
|---|
|  |  |  | font-weight: bold; | 
|---|
|  |  |  | padding: 24rpx 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .station-wrk { | 
|---|
|  |  |  | background-color: #ff7356; | 
|---|
|  |  |  | color: #fff; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .station-nowrk { | 
|---|
|  |  |  | background-color: #3eb689; | 
|---|
|  |  |  | color: #fff; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .list-font-color { | 
|---|
|  |  |  | color: #fff; | 
|---|
|  |  |  | /* background-color: #33bb44; */ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .popup-item { | 
|---|
|  |  |  | position: relative; | 
|---|
|  |  |  | height: 80rpx; | 
|---|
|  |  |  | line-height: 80rpx; | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | font-size: 14px; | 
|---|
|  |  |  | 
|---|
|  |  |  | font-size: 22px; | 
|---|
|  |  |  | color: #3a3a3a; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .filter-popup { | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | height: 40vh; | 
|---|
|  |  |  | background-color: #FFF; | 
|---|
|  |  |  | position: relative; | 
|---|
|  |  |  | border-radius: 30rpx 30rpx 0rpx 0rpx; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .filter-popup-item { | 
|---|
|  |  |  | height: 100%; | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | background-color: #c9cdd5; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .filter-popup-item-left { | 
|---|
|  |  |  | width: 30%; | 
|---|
|  |  |  | height: 100%; | 
|---|
|  |  |  | background-color: #DCDFE6; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .filter-btn { | 
|---|
|  |  |  | position: absolute; | 
|---|
|  |  |  | left: 0; | 
|---|
|  |  |  | bottom: 0; | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | background-color: #FFF; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </style> | 
|---|