浏览代码

拆分订单

ymy 2 年之前
父节点
当前提交
101b731e1b

+ 16 - 0
src/api/omsOrder.ts

@@ -88,4 +88,20 @@ export function merge(params:any){
 		method:'POST',
 		params:params
 	})
+}
+//已拆分数量
+export function splitQtyQuery(params:any){
+	return request({
+		url:'/omsOrder/omsOrder/splitQtyQuery',
+		method:'Get',
+		params:params
+	})
+}
+//拆分
+export function split(data:any){
+	return request({
+		url:'/omsOrder/omsOrder/split',
+		method:'POST',
+		data:data
+	})
 }

+ 2 - 1
src/benyun/components/sideTree/sideTree.vue

@@ -2,8 +2,9 @@
   <div class="sideTree" v-loading="load">
     <div class="tree-top">
       <el-switch
+        :width="35"
         v-model="switchValue"
-        active-text="包含下级"
+        active-text="包含下级"
         size="mini">
       </el-switch>
     </div>

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

@@ -144,8 +144,8 @@
           <by-form :propConfig="newInvoicesConfig" ref="invoicesform"></by-form>
         </el-collapse-item>
       </el-collapse>
-      <product-sku-modal ref="product" @confirm="confirmProduct" />
-      <product-sku-modal ref="productGift" @confirm="confirmProductGift" />
+      <product-sku-modal ref="product" :mulit="true" @confirm="confirmProduct" />
+      <product-sku-modal ref="productGift" :mulit="true" @confirm="confirmProductGift" />
     </template>
     <template #footer v-if="!orderValue.id">
       <div class="btn">

+ 4 - 4
src/views/oms/order/components/mergeMedal.vue

@@ -1,6 +1,6 @@
 <template>
-  <vxe-modal v-model="value" id="mergeModel" title="合并订单" @show="show" width="70%" height="80%" min-width="460" min-height="320" 
-    show-zoom resize transfer show-footer @hide="hide" v-loading="load">
+  <vxe-modal v-model="value" id="mergeModel" title="合并订单" width="70%" height="80%" min-width="460" min-height="320" 
+    show-zoom resize transfer show-footer v-loading="load">
     <by-table :propConfig="config" ref="table">
       <template v-slot:sourceId="{row}">
         <span>{{ row.sourceId }}</span>
@@ -115,8 +115,6 @@ export default class MergeModel extends Vue {
       width:160
     }]
   }
-  show(){}
-  hide(){}
   setShow(v:boolean){
     this.value = v
   }
@@ -152,6 +150,8 @@ export default class MergeModel extends Vue {
         message:'数据合并成功!',
         type:'success'
       })
+      this.$emit('handleSuccess');
+      this.value = false;
     }).catch((err:any) => {
       this.load = false;
     })

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

@@ -133,6 +133,7 @@
     <vxe-column title="操作" width="120" fixed="right">
       <template #default="{ row }">
         <el-button type="text" v-if="showMerge(row)" @click="mergeHandle(row)">合并</el-button>
+        <el-button type="text" v-if="showSplit(row)" @click="splitHandle(row)">拆分</el-button>
       </template>
     </vxe-column>
   </vxe-table>
@@ -157,6 +158,15 @@ export default class OrderTable extends Vue {
     }
     return r;
   }
+  showSplit(item:any){
+    let r = false;
+    if(item.isSubmitted == 1 && item.pays && item.pays.length > 0){
+      if(item.status == 'WaitConfirm' || item.status == 'Question'){
+        r = true;
+      }
+    }
+    return r;
+  }
 
   formatDate(v:string){
     return Format(v,'yyyy-MM-dd');
@@ -189,6 +199,9 @@ export default class OrderTable extends Vue {
     }
     this.$emit('mergeHandle',data);
   }
+  splitHandle(row:any){
+    this.$emit('splitHandle',row);
+  }
 }
 </script>
 

+ 147 - 0
src/views/oms/order/components/splitModal.vue

@@ -0,0 +1,147 @@
+<template>
+  <vxe-modal v-model="value" id="splitModel" title="拆分订单" width="70%" height="80%" min-width="460" min-height="320" show-zoom resize transfer show-footer v-loading="load">
+    <by-table :propConfig="config" ref="table" @onChangeRow="onChangeRow"> </by-table>
+    <template #footer>
+      <div class="btn">
+        <el-button type="primary" size="small" @click="btn">确定</el-button>
+      </div>
+    </template>
+  </vxe-modal>
+</template>
+
+<script lang="ts">
+import { Component, Prop, Vue, Watch } from "vue-property-decorator";
+import { splitQtyQuery,split } from '@/api/omsOrder'
+@Component({components:{}})
+export default class SplitModel extends Vue {
+  value=false;
+  load=false;
+  billData:any=null;
+  data:Array<any>=[]
+  config:any={
+    attr:{
+      size:'small',
+      seq:true
+    },
+    columns:[{
+      title:'名称',
+      field:'name',
+      width:240
+    },{
+      title:'价格',
+      field:'price',
+      width:100
+    },{
+      title:'商品数量',
+      field:'qty',
+      width:100
+    },{
+      title:'可拆分数量',
+      field:'splitNum',
+      width:100
+    },{
+      title:'拆分数量',
+      field:'num',
+      component:'by-input',
+      compConfig:{
+        attr:{
+          size:'mini',
+          type:'number'
+        }
+      }
+    }]
+  }
+
+  setShow(v:boolean){
+    this.value = v;
+  }
+  setData(data:any){
+    if(data){
+      this.billData = data;
+      this.data = [];
+      this.getSplitNum(data);
+    }else{
+      this.billData = null;
+      this.data = [];
+    }
+    this.$nextTick(()=>{
+      if(this.$refs.table){
+        (this.$refs.table as any).setValue(this.data);
+      }
+    })
+  }
+//获取可拆分数量
+  getSplitNum(v:any){
+    if(!v) return;
+    let data = v.items?v.items:[];
+    if(data.length == 0) return;
+    this.load = true;
+    splitQtyQuery({id:v.id}).then((res:any) => {
+      this.load = false;
+      if(res.data){
+        for(const item of data){
+          let n = Number(res.data[item.id]);
+          if(n){
+            item.splitNum = item.qty - n;
+          }else{
+            item.splitNum = item.qty;
+          }
+          if(item.splitNum > 0){
+            this.data.push(item)
+          }
+        }
+        (this.$refs.table as any).setValue(this.data);
+      }
+    }).catch((err:any) => {
+      this.load = false
+    })
+  }
+
+  btn(){
+    let data = (this.$refs.table as any).getValue();
+    let info:Array<any>=[];
+    if(data.length == 0){
+      this.$message('未有数据不能执行此操作!')
+      return
+    }
+    for(const item of data){
+      if(Number(item.splitNum) > 0){
+        info.push({
+          qty:Number(item.splitNum),
+          orderItemId:item.id
+        })
+      }
+    }
+    if(info.length == 0){
+      this.$message('请设置拆分数量!')
+      return
+    }
+    this.load = true;
+    split({
+      id:this.billData.id,
+      splitInfos:info
+    }).then((res:any) => {
+      this.load = false;
+      this.$message({
+        message:'拆分成功!',
+        type:'success'
+      })
+      this.$emit('handleSuccess');
+      this.value = false;
+    }).catch(() => {
+      this.load = false
+    })
+  }
+
+  onChangeRow(row:any){
+    if(Number(row.splitNum) < Number(row.num)){
+      this.$message('拆分数量不能大于可拆分数量!');
+      row.num = 0;
+      this.$forceUpdate()
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+
+</style>

+ 15 - 6
src/views/oms/order/index.vue

@@ -147,7 +147,7 @@
         <order-tool @addOrder="addOrder" @smt="smtOrder" @reSmt="reSmt" @loadOrder="loadOrder" @producePurchase="producePurchase"/>
       </div>
       <div class="table">
-        <order-table :data="data" ref="orderTable" class="order-table" @detail="detail" @mergeHandle="mergeHandle"/>
+        <order-table :data="data" ref="orderTable" class="order-table" @detail="detail" @mergeHandle="mergeHandle" @splitHandle="splitHandle"/>
         <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>
@@ -156,7 +156,8 @@
       <add-order ref="addOrder" @handleSuccess="handleSuccess" />
       <load-order-modal ref="loadOrder" @handleSuccess="handleSuccess" />
       <purchase-model ref="purchaseModel" @handleSuccess="handleSuccess" />
-      <merge-model ref="mergeModel" />
+      <merge-model ref="mergeModel" @handleSuccess="handleSuccess" />
+      <split-model ref="splitModel" @handleSuccess="handleSuccess" />
     </div>
   </div>
 </template>
@@ -174,10 +175,11 @@ import OrderProduct from "./components/orderProduct.vue";
 import filterMinMax from './components/filterMinMax.vue'
 import loadOrderModal from './components/loadOrderModal.vue' //手工下载
 import PurchaseModel from "./components/purchaseModel.vue"; //生成采购单
-import MergeModel from "./components/mergeMedal.vue";
-import { query,getProvince,smt,unSmt,purchaseQty,merge } from '@/api/omsOrder'
+import MergeModel from "./components/mergeMedal.vue"; //合并
+import SplitModel from "./components/splitModal.vue"; //拆分
+import { query,getProvince,smt,unSmt,purchaseQty } from '@/api/omsOrder'
 @Component({components:{filterInput,OrderCheckbox,OrderRadio,filterDate,OrderTool,OrderTable,AddOrder,InputSelect,OrderProduct,
-  filterMinMax,loadOrderModal,PurchaseModel,MergeModel}})
+  filterMinMax,loadOrderModal,PurchaseModel,MergeModel,SplitModel}})
 export default class Order extends Vue {
   activeNames:Array<any>=['1','status']
   radio=''
@@ -500,7 +502,7 @@ export default class Order extends Vue {
       (this.$refs.purchaseModel as any).setTableData(productData);
     })
   }
-
+  //重置搜索数据
   clearSearchValue(){
     this.value={};
     for(const key in this.$refs){
@@ -527,6 +529,13 @@ export default class Order extends Vue {
       (this.$refs.mergeModel as any).setData(data);
     }
   }
+  //拆单
+  splitHandle(row:any){
+    if(this.$refs.splitModel){
+      (this.$refs.splitModel as any).setShow(true);
+      (this.$refs.splitModel as any).setData((this as any).$lodash.cloneDeep(row));
+    }
+  }
   addOrder(){
     (this.$refs.addOrder as any).setShow(true)
   }