1
wankeda
2 天以前 844c7c3ce2c39139490a6ecb0f35170f6cade290
¼ª°²PDA/pages/stash/CPraworderboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,564 @@
<template>
   <view>
      <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="180">
                  <uni-forms-item :label="label">
                  </uni-forms-item>
                  <uni-forms-item label="托盘条码:">
                     <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                        v-model="barcode" @confirm="barcodeInput" />
                  </uni-forms-item>
                  <uni-forms-item label="内箱标签:">
                     <uni-easyinput type="text" placeholder="请扫描箱号(如BOX202510160019)" ref='midInput' :focus="focus"
                        v-model="materSn" @confirm="snInput" />
                  </uni-forms-item>
                  <uni-forms-item :label="Testlabel" v-if="Test">
                     <uni-easyinput type="text" :placeholder="Testplaceholder" ref='midInput'
                        v-model="Initiallife" />
                  </uni-forms-item>
                  <uni-forms-item>
                     <view style="display: flex;justify-content: space-around;margin-top: 2%;">
                        <button @click="reset" type="default" size="default"
                           style="width: 160rpx;border: 1rpx solid #007aff;color: #007aff;">重置</button>
                        <button @click="submit" type="primary" size="default" style="width: 160rpx;">组盘</button>
                     </view>
                  </uni-forms-item>
               </uni-forms>
               <uni-list>
                  <uni-list-item direction="column" v-for="(item,index) in matInfos" :key="index">
                     <template v-slot:body>
                        <view class="uni-list-box">
                           <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                              @click="deleteList(index)">
                           </uni-icons>
                           <view class="uni-content">
                              <view class="uni-title-sub uni-ellipsis-2">箱号:{{item.boxNumber}}</view>
                              <view class="uni-note">数量:{{item.quantity}}</view>
                           </view>
                        </view>
                     </template>
                  </uni-list-item>
               </uni-list>
            </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' @confirm="inputChangebarcode" />
                  </uni-forms-item>
                  <uni-forms-item label="地址条码">
                     <uni-easyinput type="text" v-model="address" :disabled="addressdisabled"
                        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 v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
               <uni-list :border="true">
                  <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="index">
                     <template v-slot:body>
                        <view class="uni-list-box">
                           <view class="uni-content">
                              <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                              <view style="font-size: 18px;">物料编码:{{item.materielCode}}</view>
                              <view>物料名称:{{item.materielName}}</view>
                              <view style="font-size: 18px;">数量:{{item.orderQuantity}}</view>
                              <view style="font-size: 18px;">组盘数量:{{item.receiptQuantity}}</view>
                           </view>
                        </view>
                     </template>
                  </uni-list-item>
               </uni-list>
            </view>
         </view>
         <view v-if="current === 3" class="headerstyle">
            <view class="itemstyle">
               <uni-forms label-width="180">
                  <uni-forms-item label="内箱标签:">
                     <uni-easyinput type="text" placeholder="请扫描箱号(如BOX202510160019)" ref='midInput' :focus="!pkfocus"
                        v-model="pkmaterSn" @confirm="pksnInput" />
                  </uni-forms-item>
                  <uni-forms-item>
                     <view style="display: flex;justify-content: space-around;margin-top: 2%;">
                        <button @click="resetInPk" type="default" size="default"
                           style="width: 160rpx;border: 1rpx solid #007aff;color: #007aff;">重置</button>
                        <button @click="pksubmit" type="primary" size="default"
                           style="margin-top: 2%;">入平库</button>
                     </view>
                  </uni-forms-item>
               </uni-forms>
               <uni-list>
                  <uni-list-item direction="column" v-for="(item,index) in pkmatInfos" :key="index">
                     <template v-slot:body>
                        <view class="uni-list-box">
                           <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                              @click="pkdeleteList(index)">
                           </uni-icons>
                           <view class="uni-content">
                              <view class="uni-title-sub uni-ellipsis-2">箱号:{{item.boxNumber}}</view>
                              <view class="uni-note">数量:{{item.quantity}}</view>
                           </view>
                        </view>
                     </template>
                  </uni-list-item>
               </uni-list>
            </view>
         </view>
      </view>
      <u-toast ref="uToast" />
   </view>
</template>
<script>
   const innerAudioContext = uni.createInnerAudioContext();
   export default {
      data() {
         return {
            items: ['组盘', '入库', '单据信息'],
            current: 0,
            matTotal: [],
            matInfos: [],
            orderNo: "",
            label: "",
            orderInfo: [],
            focus: false,
            pkfocus: false,
            barcode: "",
            materSn: "",
            Initiallife: 1000,
            sns: [],
            pksns: [],
            addressFocus: false,
            inboundBarcode: "",
            address: "",
            check: true,
            value: "",
            matInfo: [],
            value2: "",
            matTotals: [],
            warehouseId: "",
            Test: false,
            Testlabel: "",
            Testplaceholder: "",
            Testcheck: false,
            pkmaterSn: "",
            pkmatInfos: [],
            addressdisabled: false
         }
      },
      onShow() {},
      onLoad(res) {
         this.focus = false;
         this.addressFocus = false;
         this.orderNo = res.orderNo;
         this.warehouseId = res.warehouseId;
         if (this.warehouseId == 6) { //测试架仓库区ID
            this.Test = true;
            this.Testlabel = "初始寿命:";
            this.Testplaceholder = "请输入初始寿命";
         } else if (this.warehouseId == 2) { //油墨仓库区ID
            this.Test = true;
            this.Testlabel = "数量:";
            this.Testplaceholder = "请输入数量";
            this.Initiallife = 16;
         } else if (this.warehouseId == 5) { //辅料
            this.items.push("入平库");
            this.items[1] = "入立库";
            this.address = "8005";
         } else if (this.warehouseId == 3) { //辅料
            this.address = "1011";
            this.addressdisabled = true;
         }
         this.label = "单据编号:" + this.orderNo;
         this.getData();
      },
      methods: {
         // ç»„盘页数量编辑校验
         handleQuantityChange(item) {
            item.quantity = item.quantity ? Math.max(1, parseInt(item.quantity)) : 1;
         },
         // å…¥å¹³åº“页数量编辑校验
         handlePkQuantityChange(item) {
            item.quantity = item.quantity ? Math.max(1, parseInt(item.quantity)) : 1;
         },
         updateFocus() {
            this.$nextTick(() => {
               this.materSn = '';
               if (!this.focus) {
                  this.focus = true;
               }
            });
         },
         barcodeFocus() {
            this.barcode = '';
            if (this.focus) {
               this.focus = false;
            }
         },
         getData() {
            var postData = {
               MainData: {
                  orderNo: this.orderNo
               },
            }
            this.$u.post('/api/InboundOrderDetail/GetInboundOrderDetails', postData).then((res) => {
               if (res.status) {
                  this.orderInfo = res.data;
                  if (this.orderInfo.length > 3) {
                     this.loadVisible = true;
                  }
               }
            })
         },
         onClickItem(e) {
            this.focus = false;
            this.addressFocus = false;
            if (this.current !== e.currentIndex) {
               this.current = e.currentIndex;
               if (this.current == 2) {
                  this.getData();
               }
            }
         },
         barcodeInput() {
            this.$nextTick(function(x) {
               if (this.barcode.length > 0) {
                  this.focus = true;
               }
            })
         },
         // ç»„盘页箱号扫描
         snInput() {
            this.$nextTick(() => {
               if (!this.materSn) return;
               // å»¶è¿Ÿ100ms确保扫码完成
               setTimeout(() => {
                  this.focus = false;
                  let boxNumber = this.materSn.trim();
                  // æ ¡éªŒæ˜¯å¦å·²æ‰«æè¿‡
                  const isAlreadyScanned = this.sns.some(sn => sn === boxNumber);
                  if (isAlreadyScanned) {
                     this.$refs.uToast.show({
                        title: "该箱号已扫描,请勿重复扫描",
                        type: "warning"
                     });
                     this.materSn = "";
                     return;
                  }
                  // ç®€å•校验箱号格式(以BOX开头)
                  if (!boxNumber.startsWith('BOX')) {
                     this.$refs.uToast.show({
                        title: "箱号格式错误,应以BOX开头",
                        type: "error"
                     });
                     this.materSn = "";
                     return;
                  }
                  // æ·»åŠ ç®±å·åˆ°åˆ—è¡¨
                  const boxData = {
                     boxNumber: boxNumber,
                     quantity: 1, // é»˜è®¤æ•°é‡ä¸º1
                     serialNumber: boxNumber // ç®±å·ä½œä¸ºåºåˆ—号
                  };
                  this.sns.push(boxNumber);
                  this.matInfos.push(boxData);
                  this.$refs.uToast.show({
                     title: "箱号添加成功",
                     type: "success"
                  });
                  this.materSn = "";
               }, 100);
            })
         },
         // å…¥å¹³åº“页箱号扫描
         pksnInput() {
            this.$nextTick(() => {
               if (!this.pkmaterSn) return;
               // å»¶è¿Ÿ100ms确保扫码完成
               setTimeout(() => {
                  let boxNumber = this.pkmaterSn.trim();
                  // ç®€å•校验箱号格式(以BOX开头)
                  if (!boxNumber.startsWith('BOX')) {
                     this.$refs.uToast.show({
                        title: "箱号格式错误,应以BOX开头",
                        type: "error"
                     });
                     this.pkmaterSn = "";
                     return;
                  }
                  // æ·»åŠ ç®±å·åˆ°åˆ—è¡¨
                  const boxData = {
                     boxNumber: boxNumber,
                     quantity: 1, // é»˜è®¤æ•°é‡ä¸º1
                     serialNumber: boxNumber // ç®±å·ä½œä¸ºåºåˆ—号
                  };
                  this.pksns.push(boxNumber);
                  this.pkmatInfos.push(boxData);
                  this.$refs.uToast.show({
                     title: "箱号添加成功",
                     type: "success"
                  });
                  this.pkmaterSn = "";
               }, 100);
            })
         },
         inbound() {
            if (this.inboundBarcode == "") {
               this.$refs.uToast.show({
                  title: "请扫描托盘条码",
                  type: "error"
               })
               return;
            }
            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/Task/RequestInboundTask', postData).then(res => {
               if (res.status) {
                  this.inboundBarcode = "";
                  if (this.warehouseId != 5) this.address = "";
                  setTimeout(() => {
                     this.addressFocus = false;
                     this.$refs.uToast.show({
                        title: "成功",
                        type: "success"
                     })
                  }, 200);
               } else {
                  this.$refs.uToast.show({
                     title: res.message,
                     type: "error"
                  })
               }
            }).catch(err => {
               this.$refs.uToast.show({
                  title: err.message,
                  type: "error"
               })
            })
         },
         inputChangebarcode() {
            this.addressFocus = false;
            this.$nextTick(function(x) {
               if (this.inboundBarcode != '') {
                  this.addressFocus = true;
               }
            })
         },
         deleteList(res) {
            this.matInfos.splice(res, 1);
            this.sns.splice(res, 1);
         },
         pkdeleteList(res) {
            this.pkmatInfos.splice(res, 1);
            this.pksns.splice(res, 1);
         },
         reset() {
            this.barcode = "";
            this.matInfos = [];
            this.sns = [];
            this.materSn = "";
            if (this.warehouseId != 6) {
               this.Initiallife = 0;
            }
         },
         resetInPk() {
            this.pkmaterSn = "";
            this.pkfocus = false;
            this.pkmatInfos = [];
            this.pksns = [];
         },
         pksubmit() {
            if (this.pkmatInfos.length == 0) {
               this.$refs.uToast.show({
                  title: "请扫描箱号",
                  type: 'error'
               })
               return;
            }
            // ä½¿ç”¨ç®±å·æ•°æ®æäº¤
            const submitData = this.pkmatInfos.map(item => ({
               serialNumber: item.serialNumber,
               quantity: item.quantity
            }));
            this.$u.post('/api/InboundOrder/InPinKu?warehouseId=' + this.warehouseId + "&orderNo=" + this.orderNo,
                  submitData)
               .then(res => {
                  if (res.status) {
                     this.$refs.uToast.show({
                        title: "入库成功",
                        type: "success"
                     })
                     this.pkfocus = false;
                     this.pkmatInfos = [];
                     this.pksns = [];
                  } else {
                     this.$refs.uToast.show({
                        title: res.message,
                        type: "error"
                     })
                  }
               })
         },
         submit() {
            if (this.barcode == "") {
               this.$refs.uToast.show({
                  title: "请扫描托盘条码",
                  type: 'error'
               })
               return;
            }
            if (this.matInfos.length == 0) {
               this.$refs.uToast.show({
                  title: "请扫描箱号",
                  type: 'error'
               })
               return;
            }
            if (this.Test) {
               if (!this.Testcheck) {
                  this.Testcheck = true;
                  if (this.warehouseId == 2) {
                     this.$refs.uToast.show({
                        title: "请确认数量",
                        type: 'error'
                     })
                  } else if (this.warehouseId == 6) {
                     this.$refs.uToast.show({
                        title: "请确认初始寿命",
                        type: 'error'
                     })
                  }
                  return;
               }
            }
            // ä½¿ç”¨ç®±å·æ•°æ®æäº¤
            let submitSns = this.matInfos.map(item => ({
               serialNumber: item.serialNumber,
               quantity: item.quantity
            }));
            // æ²¹å¢¨ä»“库特殊处理
            if (this.warehouseId == 2) {
               const firstItem = submitSns[0];
               for (var i = 0; i < this.Initiallife - 1; i++) {
                  submitSns.push({
                     ...firstItem
                  });
               }
            }
            this.$u.post('/api/InboundOrder/CPMaterielGroup', {
               MainData: {
                  "palletCode": this.barcode,
                  "orderNo": this.orderNo,
                  "initiallife": this.Initiallife,
                  "warehouseId": this.warehouseId
               },
               DelKeys: submitSns
            }).then(res => {
               this.Testcheck = false;
               if (res.status) {
                  this.$refs.uToast.show({
                     title: "组盘成功",
                     type: "success"
                  })
                  this.focus = false;
                  this.barcode = "";
                  this.matInfos = [];
                  this.sns = [];
                  this.matTotal = [];
                  if (this.warehouseId != 6) {
                     this.Initiallife = "";
                  }
               } else {
                  this.$refs.uToast.show({
                     title: res.message,
                     type: "error"
                  })
               }
            })
         }
      }
   }
</script>
<style lang="scss">
   @import '@/common/uni-ui.scss';
   .content {
      display: flex;
      height: 150px;
   }
   .content-text {
      font-size: 14px;
      color: #666;
   }
   .itemstyle {
      margin-top: 30px;
      margin-left: 5%;
   }
   .headerstyle {
      width: 90%;
   }
</style>