dengjunjie
2024-12-24 a70034659894cf2c3cd88584cd3e424f3203c8e5
´úÂë¹ÜÀí/»´°²PDA/pages/stash/pickingMat.vue
@@ -1,96 +1,162 @@
<template>
   <view>
      <view class="header">
         <uni-forms label-width="120">
            <uni-forms-item label="托盘条码">
               <uni-easyinput type="text" @input="inputChange()" v-model="value" placeholder="请扫码" ref='midInput'
                  :focus="true" />
            </uni-forms-item>
            <uni-forms-item>
               <button @click="submit" type="primary" size="default" style="margin-top: 2%;">拣选完成</button>
            </uni-forms-item>
         </uni-forms>
      <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
      </uni-segmented-control>
      <view class="content">
         <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
               <uni-forms label-width="120">
                  <uni-forms-item label="托盘条码">
                     <uni-easyinput type="text" :focus="!istrue" v-model="barcode" placeholder="请扫描托盘条码"
                        ref='midInput' @input="inputChangebarcode()" />
                  </uni-forms-item>
                  <uni-forms-item>
                     <button @click="picking" type="primary" style="margin-left: 0px;">拣选完成</button>
                  </uni-forms-item>
               </uni-forms>
               <uni-list>
                  <uni-list-item direction="column" v-for="item in matInfos" :key="item.sn">
                     <template v-slot:body>
                        <view class="uni-list-box">
                           <!-- <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                              @click="deleteList(item.sn)">
                           </uni-icons> -->
                           <view class="uni-content">
                              <view class="uni-title-sub uni-ellipsis-2">单据编号:{{item.orderNo}}</view>
                              <view class="uni-note">托盘编号:{{item.palletCode}}</view>
                              <view class="uni-note">物料批次:{{item.batchNo}}</view>
                              <view class="uni-note">物料编码:{{item.materielCode}}</view>
                              <view class="uni-note">物料名称:{{item.materielName}}</view>
                              <view class="uni-note">单据数量:{{item.orderQuantity}}</view>
                              <view class="uni-note">原始库存:{{item.originalQuantity}}</view>
                              <view class="uni-note">分配库存:{{item.assignQuantity}}</view>
                              <view class="uni-note">剩余库存:{{item.originalQuantity-item.assignQuantity}}</view>
                           </view>
                        </view>
                     </template>
                  </uni-list-item>
               </uni-list>
            </view>
         </view>
         <view v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
               <uni-forms label-width="120">
                  <uni-forms-item label="托盘条码">
                     <uni-easyinput type="text" :focus="!istrue2" v-model="barcode2" placeholder="请扫描托盘条码"
                        ref='midInput' @input="inputChangebarcode2()" />
                  </uni-forms-item>
                  <uni-forms-item label="内箱标签">
                     <uni-easyinput type="text" @input="inputChange2()" v-model="innerboxcode"
                        placeholder="请扫描内箱标签" ref='midInput' :focus="istrue2" />
                  </uni-forms-item>
                  <uni-forms-item>
                     <button @click="submit" type="primary" size="default" style="margin-top: 2%;">组盘</button>
                  </uni-forms-item>
               </uni-forms>
            </view>
         </view>
         <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle">
               <uni-forms label-width="120">
                  <uni-forms-item label="托盘条码">
                     <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                        placeholder="请扫描托盘条码" ref='midInput' @input="inputChangebarcode3" />
                  </uni-forms-item>
                  <uni-forms-item label="地址条码">
                     <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                        :focus="addressFocus" />
                  </uni-forms-item>
                  <uni-forms-item>
                     <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库确认</button>
                  </uni-forms-item>
               </uni-forms>
            </view>
         </view>
      </view>
      <uni-list class="footer">
         <uni-list-item direction="column" v-if="value2">
            <label>{{value2}}</label>
         </uni-list-item>
         <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
            <template v-slot:body>
               <view class="uni-list-box">
                  <view class="uni-content">
                     <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                     <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                  </view>
               </view>
            </template>
         </uni-list-item>
         <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
            <template v-slot:body>
               <view class="uni-list-box">
                  <view class="uni-content">
                     <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">物料编码:{{item.matCode}}
                     </view>
                     <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">物料名称:{{item.matName}}
                     </view>
                     <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">数量:{{item.matQty}}
                     </view>
                  </view>
               </view>
            </template>
         </uni-list-item>
      </uni-list>
      <u-toast ref="uToast" />
   </view>
</template>
<script>
   // const SixUniTts = uni.requireNativePlugin("SmallSix-SixUniTts")
   export default {
      data() {
         return {
            value: "",
            matInfo: [],
            value2: "",
            matTotal:[]
            items: ['拣选', '入库'], //'拣选组盘',
            current: 0,
            isPicking: false,
            istrue: false,
            matInfos: [],
            barcode: '',
            materialsns: "",
            boxBarcodes: [],
            sns: [],
            barcodefocus: true,
            totalNum: 0,
            pickNum: 0,
            num: 0,
            orderTotalNum: 0,
            orderPickNum: 0,
            orderNo: "",
            matTotal: [],
            istrue2: false,
            barcode2: '',
            innerboxcode: "",
            sns2: [],
            barcodefocus: true,
            addressFocus: false,
            inboundBarcode: "",
            address: "",
            warehouseId: 0,
         }
      },
      onLoad(res) {
         //this.hideboard();
         this.barcodefocus = false;
         this.warehouseId = res.warehouseId;
         this.istrue = false;
      },
      methods: {
         submit() {
            if (this.value.length == 0) {
         onClickItem(e) {
            this.barcodeFo = true;
            this.focus = false;
            this.addressFocus = false;
            if (this.current !== e.currentIndex) {
               this.current = e.currentIndex;
            }
         },
         inbound() {
            if (this.inboundBarcode == "") {
               this.$refs.uToast.show({
                  title: "请扫码",
                  title: "请扫描托盘条码",
                  type: "error"
               })
               return;
            }
            var param;
            var matInfo = this.value.split('|');
            if (matInfo.length == 7) {
               param = {
                  MainData: {
                     "innerCode": this.value
                  }
               }
            } else {
               param = {
                  MainData: {
                     "barcode": this.value
                  }
            if (this.address == "") {
               this.$refs.uToast.show({
                  title: "请扫描地址条码",
                  type: "error"
               })
               return;
            }
            var postData = {
               MainData: {
                  "barcode": this.inboundBarcode,
                  "startPoint": this.address,
                  "warehouseId": this.warehouseId
               }
            }
            this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
               if (resdt.status) {
                  uni.$showMsg('解盘成功!')
                  this.value = "";
                  this.matInfo = [];
            this.$u.post('/api/Task/RequestInboundTask', postData).then(res => {
               if (res.status) {
                  uni.$showMsg(res.message);
                  this.inboundBarcode = "";
                  this.address = "";
                  setTimeout(() => {
                     this.addressFocus = false;
                  }, 200);
               } else {
                  this.$refs.uToast.show({
                     title: resdt.message,
                     title: res.message,
                     type: "error"
                  })
               }
@@ -101,47 +167,195 @@
               })
            })
         },
         inputChangebarcode3() {
            this.addressFocus = false;
            this.$nextTick(function(x) {
               if (this.inboundBarcode != '') {
                  this.addressFocus = true;
               }
            })
         },
         picking() {
            if (this.barcode == "") {
               this.$refs.uToast.show({
                  title: "请扫描托盘条码",
                  type: "error"
               })
               return;
            }
            this.$u.post('/api/OutStockLockInfo/MaterialPick?palletCode=' + this.barcode, {}).then(res => {
               if (res.status) {
                  uni.$showMsg('拣选成功!')
                  this.barcode = "";
                  this.matInfos = [];
               } else {
                  this.$refs.uToast.show({
                     title: res.message,
                     type: "error"
                  })
               }
            })
         },
         inputChange(e) {
            this.$nextTick(() => {
               if (this.value.length == 0) {
                  return;
               }
               var matInfo = this.value.split('|');
               this.matInfo = [];
               this.istrue = false;
               var matInfo = this.materialsns.split('|');
               if (matInfo.length == 7) {
                  this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
                     MainData: {
                        "innerCode": this.value
                     }
                  }).then(res => {
                     if (res.status) {
                        this.matInfo = res.data.stockInfo;
                        this.matTotal = res.data.stockTotal;
                     } else {
                        this.$refs.uToast.show({
                           title: res.message,
                           type: "error"
                  var matObj = {
                     matCode: matInfo[1],
                     matProductionDate: matInfo[3],
                     matQty: matInfo[5],
                     orderNo: matInfo[6],
                     sn: this.materialsns,
                     isPicking: this.isPicking
                  }
                  var temp = this.boxBarcodes.find(x => x.orderNo == matObj.orderNo);
                  if (!temp) {
                     var tmp = this.matTotal.find(x => x.matCode == matObj.matCode);
                     if (!tmp) {
                        this.matTotal.push({
                           matCode: matObj.matCode,
                           matQuantity: parseInt(matObj.matQty)
                        })
                     } else {
                        tmp.matQuantity += parseInt(matObj.matQty);
                     }
                  })
                     this.sns.push({
                        innerboxcode: this.materialsns,
                        isSplit: this.isPicking
                     });
                     this.boxBarcodes.push(matObj);
                     this.isPicking = false;
                     setTimeout(this.updateFocus, 100);
                  } else {
                     this.$refs.uToast.show({
                        title: "扫码重复",
                        type: "error"
                     })
                     setTimeout(this.updateFocus, 100);
                  }
               } else {
                  this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
                  this.$refs.uToast.show({
                     title: "扫码错误,请扫描正确内箱码",
                     type: "error"
                  })
                  setTimeout(this.updateFocus, 100);
               }
            })
         },
         checkedClick() {
            this.isPicking = !this.isPicking;
            this.istrue = false;
            this.$nextTick(function(x) {
               if (this.barcode != '') {
                  this.istrue = true;
               }
            })
         },
         updateFocus() {
            this.materialsns = '';
            if (!this.istrue) {
               this.istrue = true;
            }
         },
         inputChangebarcode() {
            this.boxBarcodes = [];
            this.istrue = false;
            this.$nextTick(function(x) {
               if (this.barcode != '') {
                  var postData = {
                     MainData: {
                        "barcode": this.value
                        "barcode": this.barcode,
                        "warehouseId": this.warehouseId,
                     }
                  }).then(res => {
                     if (res.status) {
                        this.matInfo = res.data.stockInfo;
                        this.matTotal = res.data.stockTotal;
                        // console.log(res.data);
                        // console.log(this.matTotal);
                  };
                  this.$u.post('/api/OutStockLockInfo/GetStockOutboundOrder', postData).then(res => {
                     this.matInfos = [];
                     if (res != null) {
                        this.matInfos = res
                     } else {
                        this.$refs.uToast.show({
                           title: res.message,
                           title: "未找到拣选信息",
                           type: "error"
                        })
                     }
                  })
                  this.istrue = true;
               }
            })
         },
         deleteList(res) {
            this.matTotal.map((item, index) => {
               var temp = this.boxBarcodes.find(x => x.sn == res);
               if (temp) {
                  if (item.matCode == temp.matCode) {
                     if (item.matQuantity - temp.matQty == 0) {
                        this.matTotal.splice(index, 1);
                     } else {
                        item.matQuantity -= temp.matQty;
                     }
                  }
               }
            })
            this.sns.map((item, index) => {
               if (item.innerboxcode == res) {
                  this.sns.splice(index, 1);
               }
            })
            this.boxBarcodes.map((item, index) => {
               if (item.sn == res) {
                  this.boxBarcodes.splice(index, 1);
               }
            })
         },
         submit() {
            if (this.barcode2 == "") {
               this.$refs.uToast.show({
                  title: "请扫描托盘条码",
                  type: "error"
               })
               return;
            }
            if (this.innerboxcode == "") {
               this.$refs.uToast.show({
                  title: "请扫描内箱标签",
                  type: "error"
               })
               return;
            }
            this.$u.post('/api/StockOperate/PickingBoxing', {
               MainData: {
                  "barcode": this.barcode2,
                  "innerboxcode": this.innerboxcode
               },
               DelKeys: this.sns2
            }).then(res => {
               if (res.status) {
                  uni.$showMsg('组盘成功!')
                  this.barcode2 = "";
                  this.innerboxcode = "";
               } else {
                  this.$refs.uToast.show({
                     title: res.message,
                     type: "error"
                  })
               }
            }).catch(err => {
               this.$refs.uToast.show({
                  title: err.message,
                  type: "error"
               })
            })
         },
         inputChange2(e) {
         },
         inputChangebarcode2() {
            this.istrue2 = false;
            this.$nextTick(function(x) {
               if (this.barcode2 != '') {
                  this.istrue2 = true;
               }
            })
         },
@@ -152,86 +366,22 @@
<style lang="scss">
   @import '@/common/uni-ui.scss';
   page {
      display: flex;
      flex-direction: column;
      box-sizing: border-box;
      background-color: #efeff4;
      min-height: 100%;
      height: auto;
   }
   .tips {
      color: #67c23a;
      font-size: 14px;
      line-height: 40px;
      text-align: center;
      background-color: #f0f9eb;
      height: 0;
      opacity: 0;
      transform: translateY(-100%);
      transition: all 0.3s;
   }
   .tips-ani {
      transform: translateY(0);
      height: 40px;
      opacity: 1;
   }
   .content {
      width: 100%;
      display: flex;
   }
   .list-picture {
      width: 100%;
      height: 145px;
   }
   .thumb-image {
      width: 100%;
      height: 100%;
   }
   .ellipsis {
      display: flex;
      overflow: hidden;
   }
   .uni-ellipsis-1 {
      overflow: hidden;
      white-space: nowrap;
      text-overflow: ellipsis;
   }
   .uni-ellipsis-2 {
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
   }
   .customcss {
      display: flex;
      position: fixed;
      width: 100%;
      top: 10px;
      text-align: center;
      z-index: 999;
      left: 30px;
      height: 20%;
   }
   .footer {
      // padding-top: 30%;
   }
   .header {
      width: 100%;
      height: 150px;
      background-color: #ffffff;
      padding: 20rpx 40rpx;
   }
   .content-text {
      font-size: 14px;
      color: #666;
   }
   .itemstyle {
      margin-top: 20px;
      margin-left: 5%;
   }
   .headerstyle {
      width: 90%;
   }
</style>