Quellcode durchsuchen

新增商品监控

ymy vor 1 Jahr
Ursprung
Commit
f99698d3a2

+ 10 - 1
src/api/currency.ts

@@ -112,6 +112,14 @@ function getFinancialCode(data? : any) {
 		params: data
 	})
 }
+//商品同步
+function queryByProductId(data? : any) {
+	return request({
+		url: '/omsOrder/omsOrder/queryByProductId',
+		method: 'POST',
+		params: data
+	})
+}
 
 export default {
 	treeList,
@@ -127,5 +135,6 @@ export default {
 	WMSPushProducts,
 	getMaterialInventory,
 	syncMaterialByKingdeeToOms,
-	getFinancialCode
+	getFinancialCode,
+	queryByProductId
 }

+ 131 - 0
src/views/audit/productManagement/components/storeRecord.vue

@@ -0,0 +1,131 @@
+<template>
+  <el-drawer class="storeRecord" :size="600" append-to-body title="入库记录" :visible.sync="drawer" direction="rtl">
+    <div class="record-main">
+        <div class="re-box">
+          <div class="record-row" v-for="(item,index) of data" :key="index">
+            <div class="log-time"><i class="el-icon-time"></i> {{item.createTime}}</div>
+            <div class="log-user"><i class="el-icon-user"></i> {{item.optUser}}</div>
+            <div class="log-act"><i class="el-icon-setting"></i> {{item.optName}}</div>
+            <div class="log-desc" v-html="item.optDesc"></div>
+          </div>
+        </div>
+        <div class="page">
+          <el-pagination
+            background
+            layout="prev, pager, next"
+            @current-change="handleCurrentChange"
+            :current-page="page.pageNo"
+            :page-size="page.pageSize"
+            :total="page.total">
+          </el-pagination>
+        </div>
+    </div>
+  </el-drawer>
+</template>
+
+<script lang="ts">
+import { Component, Prop, Vue, Watch } from "vue-property-decorator";
+import api from '@/api/currency'
+@Component({components:{}})
+export default class StoreRecord extends Vue {
+  drawer=false
+  data:Array<any>=[]
+  value:any={}
+  load:boolean = false;
+  page = {
+    pageNo: 1, //当前页
+    pageSize: 20, //每页条数
+    total: 0 //总条数
+  }
+  handleCurrentChange(v:number){
+    this.page.pageNo = v
+  }
+  setShow(v:boolean){
+    this.drawer = v
+  }
+  setData(data:any){
+    this.value = data
+    this.loadList()
+  }
+
+  loadList(){
+    if(this.value && this.value.id){
+      let data:any = {};
+      data.itemId = this.value.id
+      data.pageNo = this.page.pageNo
+      data.pageSize = this.page.pageSize
+      this.load = true;
+      api.queryByProductId(data).then(res => {
+        this.load = false
+      }).catch(() => {
+        this.load = false
+      })
+    }
+    
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .record-main{
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    padding: 0 16px;
+    .re-box{
+      height: calc(100% - 50px);
+      overflow-y: auto;
+      .record-row{
+        width: 100%;
+          display: flex;
+          flex-flow: wrap;
+          font-size: 14px;
+          padding: 16px 0;
+          border-bottom: dotted 1px #CCC;
+          .log-time{
+            width: 170px;
+            color: #666;
+          }
+          .log-user{
+            width: 120px;
+            padding-right: 8px;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            color: #666;
+          }
+          .log-act{
+            width: 130px;
+            padding-right: 8px;
+            overflow: hidden;
+            white-space: nowrap;
+            color: #666;
+            text-overflow: ellipsis;
+          }
+          .log-desc{
+            // min-width: 150px;
+            width: 100%;
+            font-size: 12px;
+            padding-top: 8px;
+            // display: flex;
+            // flex-wrap: wrap;
+            
+          }
+      }
+    }
+    .page{
+      height:50px;
+      display: flex;
+      align-items: flex-end;
+      flex-direction: column;
+      justify-content: center;
+    }
+  }
+</style>
+<style lang="scss">
+.storeRecord {
+		.el-drawer__body {
+			height: calc(100% - 63px);
+		}
+	}
+</style>

+ 16 - 2
src/views/audit/productManagement/index.vue

@@ -188,7 +188,7 @@
 				<el-button type="primary" @click="dateConfirm">确 定</el-button>
 			</span>
 		</el-dialog>
-		
+		<StoreRecord ref="StoreRecord" />
 	</div>
 </template>
 <script lang="ts">
@@ -198,8 +198,9 @@
 	import ForTab from "@/components/ForTab/index.vue";
 	import productModal from "./components/productModal.vue";
 	import brandType from "./components/brandType.vue";
+	import StoreRecord from "./components/storeRecord.vue";
 	// import selectKin from "./components/selectKin.vue";
-	@Component({ components: { ForTab, productModal, brandType } })
+	@Component({ components: { ForTab, productModal, brandType,StoreRecord } })
 	export default class productManagement extends Vue {
 		tagsData : any = [] // 标签值
 		isShow = 'home'
@@ -1074,6 +1075,19 @@
 							}
 						}
 					},
+					{
+						name: '商品监控', icon: 'el-icon-document', event: {
+							click: () => {
+								let data = (this.$refs.moduleView as any).getSelectData();
+								if(data.length !== 1) {
+									this.$message('请选择一条商品!')
+									return
+								}
+								(this.$refs.StoreRecord as any).setShow(true);
+								(this.$refs.StoreRecord as any).setData(data[0]);
+							}
+						}
+					}
 				]
 			},
 			table: {

+ 98 - 3
src/views/audit/sku/components/inStoreRecord.vue

@@ -1,6 +1,25 @@
 <template>
-  <el-drawer class="instoreRecord" :size="600" append-to-body title="入库记录" :visible.sync="drawer" direction="rtl">
-    
+  <el-drawer class="storeRecord" :size="600" append-to-body title="入库记录" :visible.sync="drawer" direction="rtl">
+    <div class="record-main">
+        <div class="re-box">
+          <div class="record-row" v-for="(item,index) of data" :key="index">
+            <div class="log-time"><i class="el-icon-time"></i> {{item.createTime}}</div>
+            <div class="log-user"><i class="el-icon-user"></i> {{item.optUser}}</div>
+            <div class="log-act"><i class="el-icon-setting"></i> {{item.optName}}</div>
+            <div class="log-desc" v-html="item.optDesc"></div>
+          </div>
+        </div>
+        <div class="page">
+          <el-pagination
+            background
+            layout="prev, pager, next"
+            @current-change="handleCurrentChange"
+            :current-page="page.pageNo"
+            :page-size="page.pageSize"
+            :total="page.total">
+          </el-pagination>
+        </div>
+    </div>
   </el-drawer>
 </template>
 
@@ -9,9 +28,85 @@ import { Component, Prop, Vue, Watch } from "vue-property-decorator";
 @Component({components:{}})
 export default class InStoreRecord extends Vue {
   drawer=false
+  data:Array<any>=[]
+  value:any={}
+  page = {
+    pageNo: 1, //当前页
+    pageSize: 20, //每页条数
+    total: 0 //总条数
+  }
+  handleCurrentChange(v:number){
+    this.page.pageNo = v
+  }
+  setShow(v:boolean){
+    this.drawer = v
+  }
+  setData(data:any){
+    this.value = data
+  }
 }
 </script>
 
 <style scoped lang="scss">
-
+  .record-main{
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    padding: 0 16px;
+    .re-box{
+      height: calc(100% - 50px);
+      overflow-y: auto;
+      .record-row{
+        width: 100%;
+          display: flex;
+          flex-flow: wrap;
+          font-size: 14px;
+          padding: 16px 0;
+          border-bottom: dotted 1px #CCC;
+          .log-time{
+            width: 170px;
+            color: #666;
+          }
+          .log-user{
+            width: 120px;
+            padding-right: 8px;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            color: #666;
+          }
+          .log-act{
+            width: 130px;
+            padding-right: 8px;
+            overflow: hidden;
+            white-space: nowrap;
+            color: #666;
+            text-overflow: ellipsis;
+          }
+          .log-desc{
+            // min-width: 150px;
+            width: 100%;
+            font-size: 12px;
+            padding-top: 8px;
+            // display: flex;
+            // flex-wrap: wrap;
+            
+          }
+      }
+    }
+    .page{
+      height:50px;
+      display: flex;
+      align-items: flex-end;
+      flex-direction: column;
+      justify-content: center;
+    }
+  }
+</style>
+<style lang="scss">
+.storeRecord {
+		.el-drawer__body {
+			height: calc(100% - 63px);
+		}
+	}
 </style>

+ 112 - 2
src/views/audit/sku/components/outStoreRecord.vue

@@ -1,3 +1,113 @@
 <template>
-  
-</template>
+  <el-drawer class="storeRecord" :size="600" append-to-body title="出库记录" :visible.sync="drawer" direction="rtl">
+    <div class="record-main">
+        <div class="re-box">
+          <div class="record-row" v-for="(item,index) of data" :key="index">
+            <div class="log-time"><i class="el-icon-time"></i> {{item.createTime}}</div>
+            <div class="log-user"><i class="el-icon-user"></i> {{item.optUser}}</div>
+            <div class="log-act"><i class="el-icon-setting"></i> {{item.optName}}</div>
+            <div class="log-desc" v-html="item.optDesc"></div>
+          </div>
+        </div>
+        <div class="page">
+          <el-pagination
+            background
+            layout="prev, pager, next"
+            @current-change="handleCurrentChange"
+            :current-page="page.pageNo"
+            :page-size="page.pageSize"
+            :total="page.total">
+          </el-pagination>
+        </div>
+    </div>
+  </el-drawer>
+</template>
+
+<script lang="ts">
+import { Component, Prop, Vue, Watch } from "vue-property-decorator";
+@Component({components:{}})
+export default class OutStoreRecord extends Vue {
+  drawer=false
+  data:Array<any>=[]
+  value:any={}
+  page = {
+    pageNo: 1, //当前页
+    pageSize: 20, //每页条数
+    total: 0 //总条数
+  }
+  handleCurrentChange(v:number){
+    this.page.pageNo = v
+  }
+  setShow(v:boolean){
+    this.drawer = v
+  }
+  setData(data:any){
+    this.value = data
+  }
+
+}
+</script>
+
+<style scoped lang="scss">
+  .record-main{
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    padding: 0 16px;
+    .re-box{
+      height: calc(100% - 50px);
+      overflow-y: auto;
+      .record-row{
+        width: 100%;
+          display: flex;
+          flex-flow: wrap;
+          font-size: 14px;
+          padding: 16px 0;
+          border-bottom: dotted 1px #CCC;
+          .log-time{
+            width: 170px;
+            color: #666;
+          }
+          .log-user{
+            width: 120px;
+            padding-right: 8px;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            color: #666;
+          }
+          .log-act{
+            width: 130px;
+            padding-right: 8px;
+            overflow: hidden;
+            white-space: nowrap;
+            color: #666;
+            text-overflow: ellipsis;
+          }
+          .log-desc{
+            // min-width: 150px;
+            width: 100%;
+            font-size: 12px;
+            padding-top: 8px;
+            // display: flex;
+            // flex-wrap: wrap;
+            
+          }
+      }
+    }
+    .page{
+      height:50px;
+      display: flex;
+      align-items: flex-end;
+      flex-direction: column;
+      justify-content: center;
+    }
+  }
+</style>
+<style lang="scss">
+.storeRecord {
+		.el-drawer__body {
+			height: calc(100% - 63px);
+		}
+	}
+</style>

+ 0 - 14
src/views/audit/sku/index.vue

@@ -310,20 +310,6 @@
 								(this as any).syncSystem()
 							}
 						}
-					},
-					{
-						name: '入库记录', icon: 'el-icon-document', event: {
-							click: () => {
-								
-							}
-						}
-					},
-					{
-						name: '出库记录', icon: 'el-icon-document', event: {
-							click: () => {
-								
-							}
-						}
 					}
 				]
 			},

+ 9 - 9
src/views/oms/B2BOrder/components/addOrder.vue

@@ -259,7 +259,7 @@ export default class AddOrder extends Vue {
     },
     columns:[
       [{
-        span:6,
+        span:8,
         label:'订单来源',
         prop:'upSourceName',
         // slot:true,
@@ -273,7 +273,7 @@ export default class AddOrder extends Vue {
           }
         }
       },{
-        span:6,
+        span:8,
         label:'线上订单',
         prop:'sourceId',
         component:'by-input',
@@ -284,7 +284,7 @@ export default class AddOrder extends Vue {
           }
         }
       },{
-        span:6,
+        span:8,
         label:'订单日期',
         prop:'orderDate',
         component:'by-date-picker',
@@ -299,7 +299,7 @@ export default class AddOrder extends Vue {
         }
       }],
       [{
-        span:6,
+        span:8,
         label:'运费',
         prop:'freight',
         component:'by-input',
@@ -311,7 +311,7 @@ export default class AddOrder extends Vue {
           }
         }
       },{
-        span:6,
+        span:8,
         label:'快递公司',
         prop:'logisticsCompany',
         component:'by-input',
@@ -323,7 +323,7 @@ export default class AddOrder extends Vue {
         }
       },
       {
-        span:6,
+        span:8,
         label:'业务员',
         prop:'createBy',
         component:'by-input',
@@ -335,7 +335,7 @@ export default class AddOrder extends Vue {
         }
       }],
       [{
-        span:6,
+        span:8,
         label:'操作标记',
         prop:'operationFlag',
         descSlot:true,
@@ -392,7 +392,7 @@ export default class AddOrder extends Vue {
         slot:true
       }],
       [{
-        span:6,
+        span:8,
         label:'售卖类型',
         prop:'sellType',
         descSlot:true,
@@ -1421,7 +1421,7 @@ export default class AddOrder extends Vue {
   }
   addProductMoadlHandle(data:Array<any>, isGift:boolean) {
     if(this.orderValue.id){
-      (this.$refs.addProductModal as any).setBillValue([this.orderValue.id]);
+      (this.$refs.addProductModal as any).setBillValue(this.orderValue.id);
       (this.$refs.addProductModal as any).setShow(true);
       (this.$refs.addProductModal as any).setGift(isGift);
       (this.$refs.addProductModal as any).setData(data)

+ 1 - 1
src/views/oms/B2BOrder/components/addProductModal.vue

@@ -135,7 +135,7 @@ export default class AddProductModal extends Vue {
       return
     }
     let parames:any={};
-    parames.idList = this.billValue;
+    parames.idList = [this.billValue];
     parames.giftList=[];
     for(const item of tlist){
       parames.giftList.push({

+ 120 - 0
src/views/oms/B2BOrder/components/autoSplit.vue

@@ -0,0 +1,120 @@
+<template>
+  <vxe-modal v-model="value" id="autoSplitModal" width="400" v-loading="load" @show="show" @hide="hide" height="260" show-footer title="自动拆分">
+    <div class="split-num">
+      <div class="max-label">可拆分数量:</div>
+      <vxe-input v-model="val" size="small" placeholder="请输入" type="integer"></vxe-input>
+    </div>
+    <template #footer>
+      <div class="btn">
+        <el-button plain size="small" @click="value = false">取消</el-button>
+        <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 { split } from '@/api/omsOrder'
+@Component({components:{}})
+export default class UpdateRmkModal extends Vue {
+  value=false;
+  load=false;
+  val:number=0;
+  data:Array<any>=[];
+  setShow(v:boolean){
+    this.value = v;
+  }
+  setData(data:Array<any>){
+    this.data = data;
+    console.log('值', this.data)
+  }
+  show(){}
+  hide(){
+    this.val = 0
+  }
+  btn(){
+    let n = Number(this.val)
+    let paramArr:Array<any>=[]
+    if(n) {
+      this.data.forEach(ele => {
+        if(ele.items && ele.items.length > 0) {
+          let obj:any={}
+          obj.id = ele.id
+          obj.splitInfos=[]
+          for(const item of ele.items){
+            if(item.qty > n){
+              obj.splitInfos.push({
+                qty:n,
+                orderItemId:item.id
+              })
+            }
+          }
+          if(obj.splitInfos.length > 0) {
+            paramArr.push(obj)
+          }
+        }
+      })
+      if(paramArr.length == 0){
+        this.$message('未找到可拆分数量大于'+n+'的订单')
+        return
+      }
+      this.load = true
+      let i = 0;
+      for(const item of paramArr){
+        split(item).then((res:any) => {
+          i++
+          if(i >= paramArr.length){
+            this.load = false;
+            this.$message({
+              message:'拆分成功!',
+              type:'success'
+            })
+            this.$emit('handleSuccess');
+            this.value = false;
+          }
+        }).catch(() => {
+          i++
+          if(i >= paramArr.length){
+            this.load = false;
+            this.$emit('handleSuccess');
+            this.value = false;
+          }
+        })
+      }
+    }else{
+      this.$message('请输入可拆分数量')
+    }
+    // (this.$refs.form as any).validate().then(()=>{
+    //   let data = (this.$refs.form as any).getValue();
+    //   data.idList = this.billValue;
+    //   this.load = true
+    //   split(data).then(()=>{
+    //     this.load = false;
+    //     (this.$message({
+    //       message:'操作成功!',
+    //       type:'success'
+    //     }));
+    //     this.$emit('handleSuccess');
+    //     this.value = false;
+    //   }).catch(()=>{
+    //     this.load = false;
+    //   })
+    // })
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.split-num{
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  padding-top: 32px;
+  .max-label{
+    font-size: 14px;
+    padding-right: 8px;
+  }
+}
+</style>

+ 60 - 18
src/views/oms/B2BOrder/components/expressDeliveryModal.vue

@@ -27,6 +27,12 @@
               <span :title="value.tmsBusinessPhone">{{ value.tmsBusinessPhone }}</span>
             </div>
           </div>
+          <div class="info-row">
+            <div class="info-col">
+              <span class="label">仓库:</span>
+              <span :title="value.storeHouseName">{{ value.storeHouseName }}</span>
+            </div>
+          </div>
           <div class="info-row">
             <div class="info-col">
               <span class="label">备注:</span>
@@ -39,8 +45,8 @@
             <div class="g-label">物料信息</div>
             <div class="g-cont">
               <div class="g-total">
-                <span class="name-label">重量合计:</span>
-                <span class="total-num">{{totalWeight}}g</span>
+                <span class="name-label">重量合计(kg):</span>
+                <span class="total-num">{{totalWeight}}</span>
               </div>
             </div>
           </div>
@@ -51,8 +57,13 @@
               align="center"
               header-cell-class-name="header-cell"
               :data="value.subItem">
-              <vxe-column field="tmsGoodsCode" title="物料编码" width="130"></vxe-column>
-              <vxe-column field="name" title="物料名称" width="260"></vxe-column>
+              <vxe-column field="barCode" title="商品条码" width="130"></vxe-column>
+              <vxe-column field="name" title="物料名称" width="260">
+                <template #default="{ row }">
+                  {{ row.name }}
+                  <el-tag type="success" v-if="row.isGift == 1" size="mini">赠品</el-tag>
+                </template>
+              </vxe-column>
               <vxe-column field="weight" title="重量"></vxe-column>
               <vxe-column field="price" title="单价"></vxe-column>
               <vxe-column field="tmsQuantity" title="数量"></vxe-column>
@@ -77,9 +88,9 @@
         <!-- <div class="estimate-total">
           预计总价<span class="total">¥{{currentPrice.estimateFreight?currentPrice.estimateFreight:'0.00'}}</span> 
         </div> -->
-        <div class="agreement">
+        <!-- <div class="agreement">
           <el-checkbox v-model="checked">已读并同意《XXX电子运单协议》</el-checkbox>
-        </div>
+        </div> -->
       </div>
       <div class="send-btn" @click="btn">确认发货</div>
     </div>
@@ -90,6 +101,7 @@
 import { Component, Prop, Vue, Watch } from "vue-property-decorator";
 import { add,multiply,subtract,divide } from '@/benyun/utils/accuracy'
 import { getInventoryByStoreHouseIdAndSkuids,express } from  '@/api/delivery'
+import api from '@/api/currency'
 @Component({components:{}})
 export default class ExpressDeliveryModal extends Vue {
   drawer=false;
@@ -98,7 +110,7 @@ export default class ExpressDeliveryModal extends Vue {
   checked=false;
   stopHandle=false;
   data:Array<any>=[]
-  totalWeight=0;
+  totalWeight:any=0;
   value:any = {}
   showModal=false;
   config:any={
@@ -247,8 +259,8 @@ export default class ExpressDeliveryModal extends Vue {
   setValue(data:Array<any>){
     this.data =data;
     this.value={};
-    // this.value.tmsBusinessMan = (this as any).$store.getters.userInfo.userName;
-    // this.value.tmsBusinessPhone = (this as any).$store.getters.userInfo.phonenumber;
+    this.value.tmsBusinessMan = (this as any).$store.getters.userInfo.userName;
+    this.value.tmsBusinessPhone = (this as any).$store.getters.userInfo.phonenumber;
     this.value.subItem=[];
     this.checked = false;
     const requestId =  new Date().getTime() + this.getUuid();
@@ -258,7 +270,7 @@ export default class ExpressDeliveryModal extends Vue {
       if(item.items){
         for(const i of item.items){
           let total:any = 0;
-          if(Number(i.qty) && Number(i.price)){
+          if(Number(i.qty) && Number(i.price) && i.isGift !== 1){
             total = multiply(Number(i.qty),Number(i.price))
           }
           if(Number(i.weight)){
@@ -270,18 +282,48 @@ export default class ExpressDeliveryModal extends Vue {
             omsOrderItemId:i.itemId,
             tmsGoodsModel:i.styleId,
             tmsGoodsCode:i.skuId,
+            isGift:i.isGift,
+            barCode:i.barCode,
             tmsQuantity:Number(i.qty)?Number(i.qty):0,
             tmsGoodsTotalPrice:total,
             name:i.name,
-            price:i.price,
+            price:i.isGift === 1 ? 0 : i.price,
             weight:i.weight
           })
         }
       }
     }
-    this.$nextTick(() => {
-      this.edit()
-    })
+    if(this.totalWeight){
+      this.totalWeight = divide(this.totalWeight,1000)?.toFixed(3)
+    }
+    this.loadWarehouse()
+    // this.$nextTick(() => {
+    //   this.edit()
+    // })
+  }
+  loadWarehouse() {
+    api.pageList({
+      pageNo: 1,
+      pageSize: 1000
+    }, 'maindataStorehouse').then((res: any) => {
+      let warehouseData = res.data.records;
+      if(warehouseData.length > 0){
+        this.value.tmsShipmentConsignor=warehouseData[0].shipper;
+        this.value.tmsShipmentContacts=warehouseData[0].shipperPhone;
+        this.value.tmsShipmentProvince= warehouseData[0].province;
+        this.value.tmsShipmentProvinceNo=warehouseData[0].provinceCode;
+        this.value.tmsShipmentCity= warehouseData[0].city;
+        this.value.tmsShipmentCityNo= warehouseData[0].cityCode;
+        this.value.tmsShipmentRegion= warehouseData[0].region;
+        this.value.tmsShipmentRegionNo= warehouseData[0].regionCode;
+        this.value.tmsShipmentStreetNo= warehouseData[0].streetCode;
+        this.value.tmsShipmentStreet= warehouseData[0].street;
+        this.value.tmsShipmentAddress=warehouseData[0].address;
+        this.value.storeHouseId= warehouseData[0].id;
+        this.value.storeHouseName= warehouseData[0].name;
+        this.$forceUpdate()
+      }
+    }).catch(() => {})
   }
   getUuid(){
     return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
@@ -356,10 +398,10 @@ export default class ExpressDeliveryModal extends Vue {
     //   this.$message('库存不足!')
     //   return
     // }
-    if(!this.checked){
-      this.$message('请阅读并同意运单协议!')
-      return
-    }
+    // if(!this.checked){
+    //   this.$message('请阅读并同意运单协议!')
+    //   return
+    // }
     let params:any=(this as any).$lodash.cloneDeep(this.value);
     params.omsOrderIds=[]
     for(const item of this.data){

+ 3 - 6
src/views/oms/B2BOrder/components/orderTable.vue

@@ -130,7 +130,7 @@
     <vxe-column field="labels" title="标签" width="120"></vxe-column>
     <vxe-column title="操作" width="120" fixed="right" align="center">
       <template #default="{ row }">
-        <el-button type="text" size="mini" v-if="showMerge(row)" @click="mergeHandle(row)">自动合并</el-button>
+        <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'  || row.status == 'Sent'" @click="sendGoodsDetail(row)">发货明细</el-button>
@@ -259,11 +259,8 @@ export default class OrderTable extends Vue {
     let data:Array<any> = [];
     data.push(v);
     for(const item of this.data){
-      if(row.id != item.id && item.isSubmitted == 1 && row.shopId == item.shopId && row.shopName == item.shopName && row.buyerId == item.buyerId && 
-      row.receiverMobile == item.receiverMobile && row.receiverProvince == item.receiverProvince && row.receiverCity == item.receiverCity 
-      && row.receiverDistrict == item.receiverDistrict && row.receiverTown == item.receiverTown && row.receiverAddress == item.receiverAddress 
-      && item.pays && item.pays.length > 0 && item.operationFlag.indexOf('SPLIT') == -1 && item.operationFlag.indexOf('MERGE') == -1 && (item.status == 'WaitConfirm'
-      || item.status == 'Question')){
+      if(row.id != item.id && item.isSubmitted == 1 && row.buyerId == item.buyerId &&  row.receiverMobile == item.receiverMobile && row.receiverProvince == item.receiverProvince && row.receiverCity == item.receiverCity && row.receiverDistrict == item.receiverDistrict && row.receiverTown == item.receiverTown && row.receiverAddress == item.receiverAddress  && item.pays && item.pays.length > 0 && item.operationFlag.indexOf('SPLIT') == -1 && 
+      item.operationFlag.indexOf('MERGE') == -1 && (item.status == 'WaitConfirm' || item.status == 'Question')){
         data.push(item);
       }
     }

+ 2 - 0
src/views/oms/B2BOrder/components/orderTool.vue

@@ -48,6 +48,8 @@
     <el-button type="text" @click="handle('producePurchase')" title="选取已提交数据">生成采购单</el-button>
     <el-button type="text" @click="handle('orderFile')">订单归档</el-button>
     <div class="split"></div>
+    <el-button type="text" @click="handle('autoMerge')">自动合并<i class="el-icon-info" title="自动合并条件:已付款,已提交,同一个买家/分销商,同一个发货地址,未合并,未拆分"></i></el-button>
+    <el-button type="text" @click="handle('autoSplit')">自动拆分<i class="el-icon-info" title="自动拆分条件:已付款,已提交,未合并"></i></el-button>
     <el-button type="text" @click="handle('batchSendGoods')">发货</el-button>
   </div>
 </template>

+ 2 - 2
src/views/oms/B2BOrder/components/sendModeModal.vue

@@ -28,7 +28,7 @@
         </div>
         <div class="msg">同一客户同一目的地订单形成一张物流单<br />优惠多多</div>
       </div>
-      <!-- <div class="moda-item" :class="{'onModal': mode==='2'}" @click="modeHandle('2')">
+      <div class="moda-item" :class="{'onModal': mode==='2'}" @click="modeHandle('2')">
         <div class="img-tag">
           <img src="../../../../assets/images/img1.png" />
         </div>
@@ -39,7 +39,7 @@
           </div>
         </div>
         <div class="msg">处理后形成新物流单</div>
-      </div> -->
+      </div>
     </div>
   </vxe-modal>
 </template>

+ 5 - 0
src/views/oms/B2BOrder/components/splitModal.vue

@@ -1,6 +1,10 @@
 <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="!hideBtn" v-loading="load">
     <by-table :propConfig="config" ref="table" id="split-table"> 
+      <template v-slot:name="{row}">
+        {{ row.name }}
+        <el-tag v-if="row.isGift == 1" size="mini" type="success">赠</el-tag>
+      </template>
       <template v-slot:num="{row}">
         <vxe-input v-model="row.num" v-if="row.splitNum > 0" placeholder="请输入" type="integer" @input="onChangeRow(row)"></vxe-input>
       </template>
@@ -32,6 +36,7 @@ export default class SplitModel extends Vue {
     columns:[{
       title:'名称',
       field:'name',
+      slot:true,
       width:300
     },{
       title:'价格',

+ 95 - 10
src/views/oms/B2BOrder/index.vue

@@ -101,7 +101,7 @@
         <order-tool @addOrder="addOrder" @smt="smtOrder" @reSmt="reSmt" @loadOrder="loadOrder" @producePurchase="producePurchase" @cancelOrder="cancelOrder" 
         @reCancelOrder="reCancelOrder" @updateRmk="updateRmk" @changeQues="changeQues" @changeNormal="changeNormal" @updateSalesman="updateSalesman" 
         @updateTag="updateTag" @addGift="addGift" @addProduct="addProduct" @updateFreight="updateFreight" @orderFile="orderFile" @batchSendGoods="batchSendGoods"
-        @importOrder="importOrder" />
+        @importOrder="importOrder" @autoMerge="autoMerge" @autoSplit="autoSplit" />
       </div>
       <div class="table">
         <order-table :data="data" ref="orderTable" class="order-table" @detail="detail" @mergeHandle="mergeHandle" @splitHandle="splitHandle" @sendGoods="sendGoods" 
@@ -151,9 +151,11 @@
       <!-- 物流信息 -->
       <logisticsInfo ref="logisticsInfo" />
       <!-- 快递发货 -->
-      <!-- <express-delivery-modal ref="expressDeliveryModal" @handleSuccess="handleSuccess" /> -->
+      <express-delivery-modal ref="expressDeliveryModal" @handleSuccess="handleSuccess" />
       <!-- 上传excel -->
       <ImportExcelModel ref="ImportExcelModel" @handleSuccess="handleSuccess" />
+      <!-- 自动拆分 -->
+      <autoSplit ref="autoSplit" @handleSuccess="handleSuccess" />
     </div>
   </div>
 </template>
@@ -187,13 +189,15 @@ import batchbyOneModal from './components/batchbyOneModal.vue'
 import carpoolModal from './components/carpoolModal.vue'
 import DeliveryDetail from "./components/deliveryDetail.vue";
 import LogisticsInfo from "./components/logisticsInfo.vue";
-// import ExpressDeliveryModal from "./components/expressDeliveryModal.vue";
+import ExpressDeliveryModal from "./components/expressDeliveryModal.vue";
 import ImportExcelModel from "./components/importExcelModal.vue";
-import { query,getProvince,smt,unSmt,purchaseQty,unCancel,resetQuestion,archive } from '@/api/omsOrder'
+import autoSplit from './components/autoSplit.vue'
+import { query,getProvince,smt,unSmt,purchaseQty,unCancel,resetQuestion,archive,merge } 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,DeliveryDetail,LogisticsInfo,ImportExcelModel}})
+  TabModal,AddProductModal,FreightModal,LabelsModal,SendModeModal,batchbyOneModal,carpoolModal,DeliveryDetail,LogisticsInfo,ImportExcelModel,
+  autoSplit,ExpressDeliveryModal}})
 export default class Order extends Vue {
   activeNames:Array<any>=['1','statusList']
   radio=''
@@ -472,6 +476,87 @@ export default class Order extends Vue {
     this.getProvince();
     this.getQuestionList();
   }
+  //自动拆分
+  autoSplit(){
+    let newData:Array<any> = [];
+    let s=['WaitConfirm','Question','Split']
+    for(const item of this.data){
+      if(item.isSubmitted == 1 && item.pays && item.pays.length > 0 && (!item.operationFlag || item.operationFlag.indexOf('MERGE') == -1 && item.operationFlag.indexOf('SPLIT') == -1 && item.operationFlag.indexOf('JUSHUITAN') == -1) && s.indexOf(item.status) >= 0){
+        newData.push(item)
+      }
+    }
+    if(newData.length == 0) {
+      this.$message('未有符合条件的订单!');
+      return
+    }
+    (this.$refs.autoSplit as any).setShow(true);
+    (this.$refs.autoSplit as any).setData(newData)
+  }
+  // 自动合并
+  autoMerge() {
+    let data:Array<any>= (this.$refs.orderTable as any).getSelectData();
+    if(data.length == 0) {
+      this.$message('请选择一个主订单!');
+      return
+    }
+    if(data.length > 1) {
+      this.$message('合并操作只能选择一个主订单!');
+      return
+    }
+    let r = false;
+    if(data[0].isSubmitted == 1 && data[0].pays && data[0].pays.length > 0 && (!data[0].operationFlag || data[0].operationFlag.indexOf('MERGE') == -1 && data[0].operationFlag.indexOf('SPLIT') == -1  && data[0].operationFlag.indexOf('JUSHUITAN') == -1) && (data[0].status == 'WaitConfirm' || data[0].status == 'Question')){
+      r = true;
+    }
+    if(!r) {
+      this.$message('选择的主订单不符合合并条件!');
+      return
+    }
+
+    let row = data[0]
+    let newData:Array<any> = [];
+    row.isMain = 1;
+    newData.push(row);
+    for(const item of this.data){
+      if(row.id != item.id && item.isSubmitted == 1 && row.shopId == item.shopId && row.shopName == item.shopName && row.buyerId == item.buyerId && 
+      row.receiverMobile == item.receiverMobile && row.receiverProvince == item.receiverProvince && row.receiverCity == item.receiverCity 
+      && row.receiverDistrict == item.receiverDistrict && row.receiverTown == item.receiverTown && row.receiverAddress == item.receiverAddress 
+      && item.pays && item.pays.length > 0 && item.operationFlag.indexOf('SPLIT') == -1 && item.operationFlag.indexOf('MERGE') == -1 && (item.status == 'WaitConfirm'
+      || item.status == 'Question')){
+        newData.push(item);
+      }
+    }
+    if(newData.length == 1){
+      this.$message('未找到符合条件的合并订单!')
+      return
+    }
+    this.$confirm('你确定将买家/分销商为“'+ row.buyerNickname +'”的订单进行合并?', '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    }).then(() => {
+      let params:any={};
+      params.idList=[];
+      for(const item of newData){
+        if(item.isMain == 1){
+          params.id = item.id;
+        }else{
+          params.idList.push(item.id);
+        }
+      }
+      this.load = true;
+      merge(params).then((res:any)=>{
+        this.load = false;
+        this.$message({
+          message:'自动合并成功!',
+          type:'success'
+        })
+        this.load = false;
+        this.getList();
+      }).catch((err:any) => {
+        this.load = false;
+      })
+    }).catch(() => {  });
+  }
   //上传excel
   importOrder(){
     if(this.$refs.ImportExcelModel) {
@@ -549,11 +634,11 @@ export default class Order extends Vue {
           (this.$refs.carpoolModal as any).setValue(data);
         }
         break;
-      // case '2': // 快递发货
-      //   if(this.$refs.expressDeliveryModal){
-      //     (this.$refs.expressDeliveryModal as any).setShow(true);
-      //     (this.$refs.expressDeliveryModal as any).setValue(data);
-      //   }
+      case '2': // 快递发货
+        if(this.$refs.expressDeliveryModal){
+          (this.$refs.expressDeliveryModal as any).setShow(true);
+          (this.$refs.expressDeliveryModal as any).setValue(data);
+        }
     }
   }
   //整车发货

+ 2 - 2
src/views/oms/B2COrder/components/orderTable.vue

@@ -125,8 +125,8 @@
     <vxe-column field="labels" title="标签" width="120"></vxe-column>
     <vxe-column title="操作" width="120" fixed="right" align="center">
       <template #default="{ row }">
-        <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="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'  || row.status == 'Sent'" @click="sendGoodsDetail(row)">发货明细</el-button>
       </template>