瀏覽代碼

优化发货操作

ymy 1 年之前
父節點
當前提交
55011c324c

+ 1 - 1
src/views/oms/order/components/addOrder.vue

@@ -221,7 +221,7 @@ export default class AddOrder extends Vue {
       itemCount:4,
       rules:{
         shopName:[{
-          required: true, message: '店铺名称不能为空!', trigger: 'blur'
+          required: true, message: '店铺名称不能为空!', trigger: 'change'
         }],
         orderDate:[{
           required: true, message: '订单日期不能为空!', trigger: 'blur'

+ 72 - 24
src/views/oms/order/components/batchbyOneModal.vue

@@ -36,8 +36,8 @@
         </div>
       </div>
       <div class="btn-box">
-        <div class="send-btn" @click="btn" :class="{'stopBtn':stopHandle}">一键发货</div>
         <div class="send-btn" @click="nextBtn" :class="{'stopBtn':stopHandle}" v-if="data.length > 1">确认,下一单</div>
+        <div class="send-btn" @click="btn" :class="{'stopBtn':stopHandle}">一键发货</div>
       </div>
       
     </div>
@@ -69,6 +69,9 @@ export default class BatchbyOneModal extends Vue {
     this.priceObj={};
     this.currentPrice={};
     this.isSuccess = false;
+    this.stopHandle = false;
+    this.currentOrder = 0;
+    this.checked = false;
   }
   close(){
     if(this.isSuccess){
@@ -96,9 +99,7 @@ export default class BatchbyOneModal extends Vue {
   }
   setValue(data:Array<any>){
     this.data = [];
-    this.stopHandle = false;
-    this.currentOrder = 0;
-    this.checked = false;
+    
     if(data && data.length > 0){
       for(const item of data){
         const requestId =  new Date().getTime() + this.getUuid()
@@ -154,7 +155,11 @@ export default class BatchbyOneModal extends Vue {
     return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
   }
   btn(){
-    this.currentOrder = 0;
+    this.noSentOrder();
+    if(!this.data[this.currentOrder]){
+      this.$message('没有需要发货的订单!')
+      return
+    }
     if(this.stopHandle){
       this.$message('库存不足!')
       return
@@ -163,7 +168,7 @@ export default class BatchbyOneModal extends Vue {
       this.$message('请阅读并同意运单协议!')
       return
     }
-    if(!this.data[0].orderType || !this.data[0].tmsShipmentConsignor){
+    if(!this.data[this.currentOrder].tmsShipmentAddress || !this.data[this.currentOrder].tmsShipmentConsignor || !this.data[this.currentOrder].tmsUnloadingAddress || !this.data[this.currentOrder].tmsUnloadingConsignor){
       this.$message("请编辑订单信息");
       return
     }
@@ -175,7 +180,7 @@ export default class BatchbyOneModal extends Vue {
       
       let ids='';
       for(const item of this.data){
-        if(!item.orderType || !item.tmsShipmentConsignor){
+        if(!item.tmsShipmentAddress || !item.tmsShipmentConsignor || !item.tmsUnloadingAddress || !item.tmsUnloadingConsignor){
           ids = ids ? ids + ',' + item.omsOrderIds : String(item.omsOrderIds)
         }
       }
@@ -186,17 +191,25 @@ export default class BatchbyOneModal extends Vue {
           type: 'warning'
         }).then(() => {
           this.setOnEditOrderInfo(ids);
-          this.sendGoods(this.data[0]);
+          this.sendGoods(this.data[this.currentOrder]);
 
         }).catch(() => {});
       }else{
-        this.sendGoods(this.data[0]);
+        this.sendGoods(this.data[this.currentOrder]);
       }
     }else{
+      if(this.data[0].isSuccess){
+        this.$message('订单:'+this.data[0].omsOrderIds+'已执行过发货操作!');
+        return
+      }
       this.sendGoods(this.data[0]);
     }
   }
   nextBtn(){
+    if(this.currentOrder >= this.data.length){
+      this.$message('已经是最后一单!')
+      return
+    }
     if(this.stopHandle){
       this.$message('库存不足!')
       return
@@ -205,18 +218,26 @@ export default class BatchbyOneModal extends Vue {
       this.$message('请阅读并同意运单协议!')
       return
     }
-    if(!this.data[this.currentOrder].tmsShipmentAddress || !this.data[this.currentOrder].tmsShipmentConsignor){
+    const _value = this.data[this.currentOrder];
+    if(!_value.tmsShipmentAddress || !_value.tmsShipmentConsignor || !_value.tmsUnloadingAddress || !_value.tmsUnloadingConsignor){
       this.$message("请编辑订单信息");
       return
     }
-    if(!this.currentPrice[this.data[this.currentOrder].omsOrderIds]){
+    if(!this.currentPrice[_value.omsOrderIds]){
       this.$message('请选择价格!')
       return
     }
-    this.sendGoods(this.data[this.currentOrder],true);
+    if(_value.isSuccess){
+      this.$message('订单:'+_value.omsOrderIds+'已执行过发货操作!');
+      return
+    }
+    this.sendGoods(_value,true);
   }
   //查库存
   getStoreCount(item:any,callback?:Function){
+    if(!item){
+      return
+    }
     let params:any={};
     params.storeHouseId = item.storeHouse;
     params.skuIds=[]
@@ -257,8 +278,10 @@ export default class BatchbyOneModal extends Vue {
   //发货
   sendGoods(item:any,isNext?:boolean){
     if(!item){
+      this.$message('订单不存在!')
       return
     }
+    
     let params:any=(this as any).$lodash.cloneDeep(item);
     if(this.priceObj[item.omsOrderIds]){
       try{
@@ -278,20 +301,32 @@ export default class BatchbyOneModal extends Vue {
           message:'订单:'+item.omsOrderIds+'发货成功!',
           type:'success'
         })
-        this.currentOrder ++;
-        
-        if(this.currentOrder < this.data.length){
-          if(!isNext){
-            let item:any = this.data[this.currentOrder];
-            if(this.currentPrice[item.omsOrderIds]){
-              this.sendGoods(item);
+        for(let it of this.data){
+          if(it.omsOrderIds == item.omsOrderIds){
+            it.isSuccess=true;
+            break;
+          }
+        }
+
+        if(!isNext){
+          //寻找未发货的订单
+          this.noSentOrder();
+          let _item:any = this.data[this.currentOrder];
+          //是否是最后一单
+            if(this.currentOrder >= this.data.length){
+              this.drawer = false;
             }else{
-              this.getStoreCount(item,this.getPriceInfo);
+              if(this.currentPrice[_item.omsOrderIds]){
+                this.sendGoods(_item);
+              }else{
+                this.getStoreCount(_item,this.getPriceInfo);
+              }
             }
-          }
-          this.setInfo();
         }else{
-          this.drawer=false;
+          if(this.currentOrder < this.data.length - 1) {
+            this.currentOrder ++;
+            this.setInfo();
+          }
         }
         this.$forceUpdate();
       }
@@ -299,10 +334,23 @@ export default class BatchbyOneModal extends Vue {
       this.load = false;
     })
   }
+  //寻找未发货订单
+  noSentOrder(){
+    this.currentOrder = this.data.length;
+    for(let i = 0; i < this.data.length; i++){
+      if(!this.data[i].isSuccess){
+        this.currentOrder = i;
+        break
+      }
+    }
+    // if(this.data[this.currentOrder]){
+      this.setInfo();
+    // } 
+  }
   setOnEditOrderInfo(ids:string){
     let _value = this.data[0]
     for(const item of this.data){
-      if(ids.indexOf(item.omsOrderIds) > -1){
+      if(ids.indexOf(item.omsOrderIds) > -1 && !item.isSuccess){
         item.orderType = _value.orderType;
         item.storeHouse = _value.storeHouse;
         item.tmsArrivalDate = _value.tmsArrivalDate;

+ 1 - 1
src/views/oms/order/components/carpoolModal.vue

@@ -136,7 +136,7 @@ export default class carpoolModal extends Vue {
       this.$message('请阅读并同意运单协议!')
       return
     }
-    if(!this.value.tmsShipmentAddress || !this.value.tmsShipmentConsignor){
+    if(!this.value.tmsShipmentAddress || !this.value.tmsShipmentConsignor || !this.value.tmsUnloadingAddress || !this.value.tmsUnloadingConsignor){
       this.$message("请编辑订单信息");
       return
     }

+ 33 - 2
src/views/oms/order/components/deliveryGoodsInfo.vue

@@ -27,10 +27,14 @@
         </div>
       </div>
       <div class="info-row">
-        <div class="info-col">
+        <div class="info-col col-width">
           <span class="label">业务员手机:</span>
           <span :title="value.tmsBusinessPhone">{{ value.tmsBusinessPhone }}</span>
         </div>
+        <div class="info-col col-width" v-if="!hideOrderCode">
+          <span class="label">发货状态:</span>
+          <span>{{ value.isSuccess ? '发货中' : '' }}</span>
+        </div>
       </div>
       <div class="info-row">
         <div class="info-col">
@@ -137,7 +141,6 @@
           size="mini"
           align="center"
           header-cell-class-name="header-cell"
-          height="200"
           :data="value.subItem">
           <vxe-column field="tmsGoodsCode" title="物料编码" width="130"></vxe-column>
           <vxe-column field="name" title="物料名称" width="260"></vxe-column>
@@ -454,6 +457,34 @@ export default class DeliveryGoodsInfo extends Vue {
     if(this.$refs.form){
       (this.$refs.form as any).validate().then(()=>{
         this.value = (this.$refs.form as any).getValue();
+        if(!this.value.tmsShipmentCity){
+          this.$message({
+            message:'请选择发货城市!',
+            type:'warning'
+          })
+          return
+        }
+        if(!this.value.tmsShipmentRegion){
+          this.$message({
+            message:'请选择发货区/县!',
+            type:'warning'
+          })
+          return
+        }
+        if(!this.value.tmsUnloadingCity){
+          this.$message({
+            message:'请选择收货城市!',
+            type:'warning'
+          })
+          return
+        }
+        if(!this.value.tmsUnloadingRegion){
+          this.$message({
+            message:'请选择收货区/县!',
+            type:'warning'
+          })
+          return
+        }
         this.showModal = false;
         this.$emit('editState',true);
         this.$emit('editResult',this.value);

+ 4 - 0
src/views/oms/order/components/orderTable.vue

@@ -126,6 +126,7 @@
         <el-button type="text" size="mini" v-if="showMerge(row)" @click="mergeHandle(row)">合并</el-button>
         <el-button type="text" size="mini" v-if="showSplit(row)" @click="splitHandle(row)">拆分</el-button>
         <el-button type="text" size="mini" v-if="showSend(row)" @click="sendGoods(row)">发货</el-button>
+        <el-button type="text" size="mini" v-if="row.status == 'Delivering'" @click="sendGoodsDetail(row)">发货明细</el-button>
       </template>
     </vxe-column>
   </vxe-table>
@@ -230,6 +231,9 @@ export default class OrderTable extends Vue {
   sendGoods(row:any){
     this.$emit('sendGoods',row)
   }
+  sendGoodsDetail(row:any){
+    this.$emit('sendGoodsDetail',row)
+  }
   mergeHandle(row:any){
     let v = (this as any).$lodash.cloneDeep(row);
     v.isMain = 1;

+ 11 - 4
src/views/oms/order/index.vue

@@ -144,7 +144,8 @@
         @updateTag="updateTag" @addGift="addGift" @addProduct="addProduct" @updateFreight="updateFreight" @orderFile="orderFile" @batchSendGoods="batchSendGoods" />
       </div>
       <div class="table">
-        <order-table :data="data" ref="orderTable" class="order-table" @detail="detail" @mergeHandle="mergeHandle" @splitHandle="splitHandle" @sendGoods="sendGoods" />
+        <order-table :data="data" ref="orderTable" class="order-table" @detail="detail" @mergeHandle="mergeHandle" @splitHandle="splitHandle" @sendGoods="sendGoods" 
+        @sendGoodsDetail="sendGoodsDetail"/>
         <div class="page">
           <el-pagination v-if="page.total > 0" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.pageNo" :page-size="page.pageSize"
             :layout="'total, sizes, prev, pager, next, jumper'" :total="page.total"></el-pagination>
@@ -185,7 +186,8 @@
       <batchbyOneModal ref="batchbyOneModal" @handleSuccess="handleSuccess" />
       <!-- 整车/拼单发货 -->
       <carpoolModal ref="carpoolModal" @handleSuccess="handleSuccess" />
-
+      <!-- 发货单详情 -->
+      <deliveryDetail ref="deliveryDetail" />
     </div>
   </div>
 </template>
@@ -217,11 +219,12 @@ import LabelsModal from "./components/labelsModal.vue";
 import SendModeModal from "./components/sendModeModal.vue";
 import batchbyOneModal from './components/batchbyOneModal.vue'
 import carpoolModal from './components/carpoolModal.vue'
+import DeliveryDetail from "./components/deliveryDetail.vue";
 import { query,getProvince,smt,unSmt,purchaseQty,unCancel,resetQuestion,archive } from '@/api/omsOrder'
 import { queryAll } from '@/api/question'
 @Component({components:{filterInput,OrderCheckbox,OrderRadio,filterDate,OrderTool,OrderTable,AddOrder,InputSelect,OrderProduct,
   filterMinMax,loadOrderModal,PurchaseModel,MergeModel,SplitModel,CancelOrderModel,QuestModel,SetQuesModal,UpdateRmkModal,UpdateSalerModal,
-  TabModal,AddProductModal,FreightModal,LabelsModal,SendModeModal,batchbyOneModal,carpoolModal}})
+  TabModal,AddProductModal,FreightModal,LabelsModal,SendModeModal,batchbyOneModal,carpoolModal,DeliveryDetail}})
 export default class Order extends Vue {
   activeNames:Array<any>=['1','statusList']
   radio=''
@@ -495,6 +498,10 @@ export default class Order extends Vue {
     this.getList();
     this.getProvince();
     this.getQuestionList();
+  }
+  //发货详情
+  sendGoodsDetail(row:any){
+
   }
   //批量发货
   batchSendGoods(){
@@ -540,7 +547,7 @@ export default class Order extends Vue {
       }
     }
   }
-  //发货
+  //z整车发货
   sendGoods(item:any){
     (this.$refs.batchbyOneModal as any).setShow(true);
     (this.$refs.batchbyOneModal as any).setValue([item]);