| <template> | 
|     <view class="has-foot"> | 
|         <view> | 
|          | 
|         <form> | 
|             <view class="cu-form-group margin-top"> | 
|                 <view class="title">容器号</view> | 
|                 <input placeholder="请扫描容器号" v-model="container" focus></input> | 
|                 <text class='cuIcon-search text-blue' @click="getList"></text> | 
|             </view>             | 
|             <view class="cu-form-group"> | 
|                 <view class="title">物料编码</view> | 
|                 <input placeholder="请扫描物料编码" v-model="matnrCode"></input> | 
|                 <text class='cuIcon-search text-blue' @click="search"></text> | 
|             </view> | 
|             <view class="cu-form-group"> | 
|                 <view class="title">ASN单号</view> | 
|                 <input placeholder="请输入ASN单号" v-model="asnCode"></input> | 
|             </view> | 
|         </form> | 
|   | 
|         <view class="flex solid-bottom padding-sm justify-between"> | 
|             <view class="text-blue">物料总类:{{list.length}}</view> | 
|             <view class="text-blue">组盘总数:{{allCount}}</view> | 
|         </view> | 
|          | 
|         </view> | 
|   | 
|         <view class="padding-lr margin-top-sm"> | 
|             <block v-for="(item, index) in list" :key="index"> | 
|                 <view class="cu-list det menu sm-border margin-bottom-sm " :class="[item.trackCode===barcode&&'act']" | 
|                     :ref="item.trackCode+'ref'"> | 
|                     <view class="cu-bar bg-white solid-bottom "> | 
|                         <view class="action"> | 
|                             <view class="index"> | 
|                                 {{index+1}} | 
|                             </view> | 
|                             <view class="text-blue"> | 
|                                 编码: | 
|                                 {{`${item.matnrCode}`}} | 
|                             </view> | 
|                         </view> | 
|                         <view class="action" v-if="!isconfirm"> | 
|                             <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text> | 
|                         </view> | 
|                     </view> | 
|                     <view class="cu-item"> | 
|                         <view class="content"> | 
|                             <text class="text-black">物料编码:</text> | 
|                             <text class="text-grey ">{{item.maktx}}</text> | 
|                         </view> | 
|                     </view> | 
|                     <view class="cu-item"> | 
|                         <view class="content"> | 
|                             <text class="text-black">ASN:</text> | 
|                         </view> | 
|                         <view class="action"> | 
|                             <text class="text-grey ">{{item.asnCode}}</text> | 
|                         </view> | 
|                     </view>                     | 
|                     <view class="cu-item"> | 
|                         <view class="content"> | 
|                             <text class="text-black">供应商批次:</text> | 
|                         </view> | 
|                         <view class="action"> | 
|                             <text class="text-grey ">{{item.splrBatch}}</text> | 
|                         </view> | 
|                     </view> | 
|                     <view class="cu-item">                         | 
|                         <view class="content"> | 
|                             <text class="text-black">质检结果: <text class="text-grey ">{{item.inspect}}</text></text> | 
|                         </view> | 
|                     </view> | 
|                     <!-- <view class="cu-item"> | 
|                         <view class="content"> | 
|                             <text class="text-black">平台行号: <text class="text-grey ">{{item.platformId}}</text></text> | 
|                         </view> | 
|                         <view class="content"> | 
|                             <text class="text-black">质检结果: <text class="text-grey ">{{item.inspect}}</text></text> | 
|                         </view> | 
|                     </view> --> | 
|   | 
|                     <view class="cu-item"> | 
|                         <view class="content"> | 
|                             <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text> | 
|                         </view> | 
|                         <view class="content"> | 
|                             <text class="text-black">收货数量: <text class="text-grey ">{{item.anfme}}</text></text> | 
|                         </view> | 
|                         <view class="content"> | 
|                             <text class="text-black">已上架数量: <text | 
|                                     class="text-grey ">{{item.workQty + item.qty}}</text></text> | 
|                         </view> | 
|                     </view> | 
|                     <view class="cu-item"> | 
|                         <view class="content"> | 
|                             <text class="text-black">可组盘数量: <text | 
|                                     class="text-grey ">{{item.anfme - item.workQty - item.qty}}</text></text> | 
|                         </view> | 
|                          | 
|                     </view> | 
|                     <view class="cu-item">                         | 
|                         <view class="content"> | 
|                             <view class="cu-form-group padding-lr-0"> | 
|                                 <view class="title text-blue"><text | 
|                                         class="text-red text-xl vertical-middle">*</text>组盘数量: | 
|                                 </view> | 
|                                 <uni-number-box style="width: 70%;" :min="0" :max="max" :decimal="2" :step="0.01" v-model="item.receiptQty" | 
|                                     ></uni-number-box> | 
|                             </view> | 
|                         </view> | 
|                     </view> | 
|                 </view> | 
|             </block> | 
|         </view> | 
|         <view class="cu-bar btn-group foot"> | 
|             <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> | 
|             <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">组盘</button> | 
|         </view> | 
|     </view> | 
| </template> | 
|   | 
| <script> | 
|     import { | 
|         request | 
|     } from '../../common/request.js' | 
|     import { | 
|         mapState, | 
|         mapMutations, | 
|         mapActions, | 
|         mapGetters | 
|     } from 'vuex'; | 
|     export default { | 
|         data() { | 
|             return { | 
|                 barcode: '', | 
|                 container: '', | 
|                 megreQty: '', | 
|                 list: [], | 
|                 range: [], | 
|                 asnCode: '', | 
|                 repeatClick: false, | 
|                 isconfirm: false,                 | 
|                 matnrCode:'', | 
|                 max: 99999999, | 
|             } | 
|         }, | 
|         computed: { | 
|             ...mapState('user', ['dynamicFields']), | 
|             allCount() { | 
|                 return this.list.reduce((acc, row) => +row.anfme + acc, 0) || 0 | 
|             } | 
|         }, | 
|         mounted() {}, | 
|         methods: {             | 
|             async search() { | 
|                 const find = this.list.find(el => el.trackCode === this.barcode); | 
|                 find ? this.scrollTo() : this.getDet(); | 
|   | 
|             }, | 
|             getDet() { | 
|                 let that = this; | 
|                 uni.navigateTo({ | 
|                     url: "../listing/itemSelect", | 
|                     success: function(res) { | 
|                         // 通过eventChannel向被打开页面传送数据   向另外一个页面传递值的 | 
|                         res.eventChannel.emit('data', { | 
|                             matnrCode: that.matnrCode, | 
|                             asnCode: that.asnCode | 
|                         }) | 
|                     }, | 
|                     events: { | 
|                         // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据  另外一个页面传过来的 | 
|                         backData: function(data) {                                     | 
|                             that.showBackData(data.data) | 
|                         }, | 
|                     }, | 
|                  | 
|                  | 
|                 }); | 
|             }, | 
|             // async getDet() { | 
|             //     let that = this; | 
|             //     const { | 
|             //         code, | 
|             //         data, | 
|             //         msg | 
|             //     } = await request('/asnOrderItem/trackCode', { | 
|             //         matnrCode: that.matnrCode, | 
|             //         asnCode: that.asnCode | 
|             //     }, "post") | 
|             //     if (code === 200) { | 
|             //         data.map(item => { | 
|             //             item.receiptQty = 0; | 
|             //             item.selected = false; | 
|             //         }) | 
|             //         // for (var i = 0; i < data.length; i++) { | 
|             //         //     data[i].receiptQty =1; | 
|             //         //     data[i].selected = false;                             | 
|             //         // } | 
|             //         if(data !== [] || data !== null){                     | 
|             //         uni.navigateTo({ | 
|             //                 url: "../listing/itemSelect", | 
|             //                 success: function(res) { | 
|             //                     // 通过eventChannel向被打开页面传送数据   向另外一个页面传递值的 | 
|             //                     res.eventChannel.emit('data', { | 
|             //                         item: data | 
|             //                     }) | 
|             //                 }, | 
|             //                 events: { | 
|             //                     // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据  另外一个页面传过来的 | 
|             //                     backData: function(data) {                                     | 
|             //                         that.showBackData(data.data) | 
|             //                     }, | 
|             //                 }, | 
|                          | 
|                          | 
|             //             }); | 
|                          | 
|             //         } | 
|                          | 
|             //         // this.list = data | 
|             //     } else { | 
|             //         uni.showToast({ | 
|             //             title: msg, | 
|             //             icon: "none", | 
|             //             position: 'top' | 
|             //         }) | 
|             //     } | 
|             // }, | 
|             async getList() { | 
|                 if(this.container === '' || this.container === null){ | 
|                     uni.showToast({ | 
|                         title: "容器码为空", | 
|                         icon: "none", | 
|                         position: 'top' | 
|                     }) | 
|                     return ; | 
|                 } | 
|                 const { | 
|                     code, | 
|                     data, | 
|                     msg | 
|                 } = await request('/asnOrderItem/container', { | 
|                     barcode: this.container | 
|                 }) | 
|                 if (code === 200) { | 
|                     uni.showToast({ | 
|                         title: msg, | 
|                         icon: "success", | 
|                         position: 'top' | 
|                     }) | 
|                 } else { | 
|                     uni.showToast({ | 
|                         title: msg, | 
|                         icon: "none", | 
|                         position: 'top' | 
|                     }) | 
|                 } | 
|             }, | 
|             showBackData(data){                 | 
|                 let status ; | 
|                 data.map(item => {                     | 
|                     this.list.push(item) | 
|                 })     | 
|                 let oldLength = this.list.length | 
|                 this.list = this.list.filter((item, index, self) => | 
|                     self.findIndex(i => ( | 
|                         i.id === item.id // 根据id去重 | 
|                     )) === index && item.isptResult === self[0].isptResult | 
|                 ); | 
|                 let newLength = this.list.length | 
|                  | 
|                 if(oldLength > newLength){     | 
|                     this.showMsg("新明细被过滤,请检查状态") | 
|                      | 
|                 } | 
|                                  | 
|             }, | 
|             showMsg(msg){                 | 
|                 setTimeout(function() { | 
|                  uni.showToast({ | 
|                      icon: "none", | 
|                      position: 'top', | 
|                      title: msg, | 
|                      duration:2000,                      | 
|                  }) | 
|                 }, 200); | 
|                  | 
|             }, | 
|             scrollTo() { | 
|                 const ref = this.$refs[`${this.barcode}ref`][0]; | 
|                 uni.pageScrollTo({ | 
|                     scrollTop: ref.$el.offsetTop, | 
|                     duration: 300 | 
|                 }) | 
|             }, | 
|             remove(index) { | 
|                 this.list.splice(index, 1); | 
|             }, | 
|             clear() { | 
|                 this.list = [] | 
|                 this.barcode = '' | 
|             }, | 
|             next() { | 
|                 if (this.list.length) { | 
|                     this.isconfirm = true | 
|                 } else { | 
|                     uni.showToast({ | 
|                         icon: "none", | 
|                         title: '未选物料标签' | 
|                     }) | 
|                 } | 
|             }, | 
|             prev() { | 
|                 this.isconfirm = false | 
|             }, | 
|             async confirm() { | 
|                 if(this.container === '' || this.container === null){ | 
|                     uni.showToast({ | 
|                         title: "容器码为空", | 
|                         icon: "none", | 
|                         position: 'top' | 
|                     }) | 
|                     return ; | 
|                 } | 
|                 if(this.list.length ===0 || this.list === null){ | 
|                     uni.showToast({ | 
|                         title: "未添加明细", | 
|                         icon: "none", | 
|                         position: 'top' | 
|                     }) | 
|                     return ; | 
|                 } | 
|                 this.repeatClick = true                 | 
|                 const newArr = this.list.map(item => { | 
|                      | 
|                     return { | 
|                         ...item, | 
|                         anfme: item.anfme === null ? 0 : +item.anfme,                         | 
|                     }; | 
|                 }); | 
|   | 
|                 const { | 
|                     code, | 
|                     data, | 
|                     msg | 
|                 } = await request('/waitPakin/merge', { | 
|                     items: newArr, | 
|                     barcode: this.container,                     | 
|                 }) | 
|                 if (code === 200) { | 
|                     uni.showToast({ | 
|                         title: '组盘成功' | 
|                     }) | 
|                     this.list = [] | 
|                     this.barcode = '' | 
|                     this.container = '' | 
|                     this.isconfirm = false | 
|                 } else { | 
|                     uni.showToast({ | 
|                         title: msg, | 
|                         icon: "none", | 
|                         position: 'top' | 
|                     }) | 
|                 } | 
|                 this.repeatClick = false | 
|             }, | 
|         } | 
|     } | 
| </script> | 
|   | 
| <style> | 
|     .index { | 
|         border: 1px solid #e54d42; | 
|         color: #e54d42; | 
|         border-radius: 50%; | 
|         display: block; | 
|         width: 50rpx; | 
|         height: 50rpx; | 
|         line-height: 48rpx; | 
|         text-align: center; | 
|         margin-right: 20rpx; | 
|         font-size: 30rpx; | 
|     } | 
|   | 
|     .text-blue { | 
|         color: #0081ff !important; | 
|   | 
|     } | 
|   | 
|     .act { | 
|         border: 1px solid #e54d42; | 
|     } | 
|   | 
|     .item { | 
|         position: relative; | 
|         display: flex; | 
|         min-height: 80upx; | 
|         align-items: center; | 
|     } | 
| </style> |