瀏覽代碼

订单-拉取店铺

ymy 2 年之前
父節點
當前提交
1e1ce679ea

+ 8 - 0
src/api/omsOrder.ts

@@ -55,4 +55,12 @@ export function getSingleData(params:any){
 		params:params,
     method: 'GET'
   })
+}
+
+export function pullOrder(data:any){
+	return request({
+		url: '/omsOrder/omsOrder/pullOrder',
+		method: 'POST',
+		data: data
+	})
 }

+ 4 - 0
src/benyun/components/bySelect/bySelect.vue

@@ -89,6 +89,10 @@ export default class BySelect extends VueViews {
 
   setOptions(data:Array<any>){
     this.options = data;
+    if(!this.value && this.attrs.defaultIndex >= 0 && this.options[this.attrs.defaultIndex]){
+      this.value = this.options[this.attrs.defaultIndex][this.itemValue];
+      this.onChange();
+    }
   }
 
   onChange(){

+ 2 - 2
src/benyun/components/byTable/byTable.vue

@@ -57,8 +57,8 @@
             <component v-else-if="item.component" :is="item.component" :ref="item.prop+'Comp'" :propConfig="item.compConfig" :parentValue="row"
               :propValue="row[item.field]" @onChange="onChange($event, row,item.field)" />
             <template v-else>
-              <div v-if="item.isDetail" :style="{ 'text-align': item.align }" class="tdCol detail" @click="detail(row)">{{ row[item.field] }}</div>
-              <div class="tdCol" :style="{ 'text-align': item.align }" v-else>{{ row[item.field] }}</div>
+              <div v-if="item.isDetail" :title="row[item.field]" :style="{ 'text-align': item.align }" class="tdCol detail" @click="detail(row)">{{ row[item.field] }}</div>
+              <div class="tdCol" :title="row[item.field]" :style="{ 'text-align': item.align }" v-else>{{ row[item.field] }}</div>
             </template>
             
           </template>

+ 50 - 14
src/views/oms/order/components/addOrder.vue

@@ -210,6 +210,54 @@ export default class AddOrder extends Vue {
         }
       }],
       [{
+        span:6,
+        label:'订单来源',
+        prop:'sourceFrom',
+        component:'by-select',
+        compConfig:{
+          attr:{
+            // placeholder:'请输入订单日期',
+            disabled:true,
+            data:[{
+              label:'手工下单',
+              value:'ERP'
+            },{
+              label:'复制',
+              value:'COPY'
+            },{
+              label:'合并',
+              value:'MERGE'
+            },{
+              label:'拆分;拆分还原',
+              value:'SPLIT'
+            },{
+              label:'手机',
+              value:'MOBILE'
+            },{
+              label:'导入',
+              value:'IMPORT'
+            },{
+              label:'供销推送',
+              value:'drp-s'
+            },{
+              label:'分销推送',
+              value:'drp-d'
+            },{
+              label:'快手;微商城',
+              value:'KWAISHOP'
+            },{
+              label:'拼多多',
+              value:'PINDUODUO'
+            },{
+              label:'头条放心购',
+              value:'TOUTIAOFXG'
+            },{
+              label:'聚水潭',
+              value:'JUSHUITAN'
+            }]
+          }
+        }
+      },{
         label:'线下备注',
         prop:'note',
         component:'by-input',
@@ -368,24 +416,12 @@ export default class AddOrder extends Vue {
       title:'数量',
       field:'qty',
       width:100,
-      slot:true,
-      // component:'by-input',
-      // compConfig:{
-      //   attr:{
-      //     type:'number'
-      //   }
-      // }
+      slot:true
     },{
       title:'单价',
       field:'price',
       width:100,
-      slot:true,
-      // component:'by-input',
-      // compConfig:{
-      //   attr:{
-      //     type:'number'
-      //   }
-      // }
+      slot:true
     },{
       title:'原价',
       field:'basePrice',

+ 273 - 0
src/views/oms/order/components/loadOrderModal.vue

@@ -0,0 +1,273 @@
+<template>
+  <vxe-modal v-model="value" id="synchronousOrderModal"  width="500" height="400"  transfer show-footer v-loading="load">
+    <template #title>
+      <span>下载订单</span>
+    </template>
+    <template #default>
+      <div class="type">
+        <el-radio-group v-model="type">
+          <el-radio :label="1">按线上订单号</el-radio>
+          <el-radio :label="2">按时间段</el-radio>
+          <el-radio :label="3">按订单状态</el-radio>
+        </el-radio-group>
+      </div>
+      <div class="cont">
+        <div class="title">店铺名称:</div>
+        <div class="right-cont">
+          <el-select v-model="shopId" size="mini" style="width:100%" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in shopOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+      <template v-if="type == 1">
+        <div class="cont">
+          <div class="title">线上订单:</div>
+          <div class="right-cont">
+            <el-input v-model="sourceIds" type="textarea" rows="4" size="mini" placeholder="多个单号逗号隔开"></el-input>
+          </div>
+        </div>
+      </template>
+      <template v-if="type == 2">
+        <div class="cont">
+          <div class="title">时间类型:</div>
+          <div class="right-cont">
+            <el-select v-model="dateType" size="mini" style="width:100%" placeholder="请选择" clearable>
+              <el-option
+                v-for="item in dateTypeOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+        </div>
+        <div class="cont">
+          <div class="title">时间:</div>
+          <div class="right-cont">
+            <el-date-picker
+              v-model="time"
+              style="width: 100%;"
+              size="mini"
+              type="daterange"
+              clearable
+              value-format="yyyy-MM-dd"
+              range-separator="-"
+              start-placeholder="开始日期"
+              @change="change"
+              end-placeholder="结束日期">
+            </el-date-picker>
+          </div>
+        </div>
+      </template>
+      <template v-if="type == 3">
+        <div class="cont">
+          <div class="title">订单状态:</div>
+          <div class="right-cont">
+            <el-select v-model="status" size="mini" style="width:100%" placeholder="请选择" clearable>
+              <el-option
+                v-for="item in statusOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+        </div>
+      </template>
+    </template>
+    <template #footer>
+      <div class="btn">
+        <el-button type="primary" size="small" plain @click="clear">清空</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 { pullOrder } from '@/api/omsOrder'
+@Component
+export default class LoadOrderModal extends Vue {
+  load = false;
+  value = false;
+  type=1;
+  shopName = '犇云聚水潭店铺';
+  shopId:any = 2;
+  shopOptions=[{
+    label:'犇云聚水潭店铺',
+    value:2
+  }]
+  sourceIds=''; //线上订单号
+  dateType:any=null;
+  dateTypeOptions=[{
+    label:'修改时间',
+    value:0
+  },{
+    label:'订单日期',
+    value:1
+  },{
+    label:'发货时间',
+    value:2
+  }]
+  beginDate='';
+  endDate='';
+  time:any=null;
+  status='';
+  statusOptions:Array<any>=[{
+    label:'待付款',
+    value:'WaitPay'
+  },{
+    label:'发货中',
+    value:'Delivering'
+  },{
+    label:'被合并',
+    value:'Merged'
+  },{
+    label:'异常',
+    value:'Question'
+  },{
+    label:'被拆分',
+    value:'Split'
+  },{
+    label:'等供销商|外仓发货',
+    value:'WaitOuterSent'
+  },{
+    label:'已付款待审核',
+    value:'WaitConfirm'
+  },{
+    label:'已客审待财审',
+    value:'WaitFConfirm'
+  },{
+    label:'已发货',
+    value:'Sent'
+  },{
+    label:'取消',
+    value:'Cancelled'
+  }]
+  setShow(v:boolean){
+    this.value = v;
+  }
+  change(v:any){
+    if(v){
+      this.beginDate = v[0];
+      this.endDate = v[1];
+    }else{
+      this.beginDate = '';
+      this.endDate = '';
+    }
+  }
+  btn(){
+    let value:any={};
+    let msg = '';
+    if(!this.shopId){
+      msg = '店铺名称'
+    }
+    value.type = this.type;
+    if(this.type == 1){
+      if(!this.sourceIds){
+        if(msg){
+          msg = msg + ',线上订单'
+        }else{
+          msg = '线上订单'
+        }
+      }
+      
+      value.shopId = this.shopId;
+      value.showName = this.shopName;
+      value.sourceIds = this.sourceIds.split(',');
+    }else if(this.type == 2){
+      if(this.dateType < 0 || this.dateType > 2){
+        if(msg){
+          msg = msg + ',时间类型'
+        }else{
+          msg = '时间类型'
+        }
+      }
+      if(!this.time){
+        if(msg){
+          msg = msg + ',时间'
+        }else{
+          msg = '时间'
+        }
+      }
+      value.shopId = this.shopId;
+      value.showName = this.shopName;
+      value.dateType = this.dateType;
+      value.beginDate = this.beginDate + ' 00:00:00';
+      value.endDate = this.endDate + ' 00:00:00';
+    }else if(this.type == 3){
+      if(!this.status){
+        if(msg){
+          msg = msg + ',订单状态'
+        }else{
+          msg = '订单状态'
+        }
+      }
+      value.shopId = this.shopId;
+      value.showName = this.shopName;
+      value.status = this.status;
+    }
+    if(msg){
+      this.$message({
+        message:msg + '不能为空!',
+        type: 'warning'
+      })
+      return
+    }
+    this.load = true;
+    pullOrder(value).then((res:any) => {
+      this.load = false;
+      (this as any).$message({
+        message: '操作成功!',
+        type: 'success',
+      });
+      this.value = false;
+      this.$emit('handleSuccess');
+    }).catch((err:any) => {
+      this.load = false;
+    })
+  }
+  clear(){
+    this.type = 1;
+    this.shopName = '';
+    this.shopId = '';
+    this.sourceIds = '';
+    this.dateType = '';
+    this.beginDate = '';
+    this.endDate = '';
+    this.time = null;
+    this.status = '';
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.btn{
+  width: 100%;
+  display: flex;
+  justify-content: flex-end;
+}
+.type{
+  width: 100%;
+  padding: 8px 0;
+}
+.cont{
+  width: 100%;
+  display: flex;
+  align-items: center;
+  padding: 8px 0;
+  .title{
+    width: 100px;
+    text-align: right;
+  }
+  .right-cont{
+    width: calc(100% - 100px);
+  }
+}
+</style>

+ 10 - 3
src/views/oms/order/components/orderTable.vue

@@ -4,6 +4,7 @@
     border
     ref="table"
     :height="height"
+    :row-config="{isHover: true}"
     :data="data">
     <vxe-column type="checkbox" width="50" fixed="left"></vxe-column>
     <vxe-column type="seq" width="60" title="序号" fixed="left"></vxe-column>
@@ -53,7 +54,7 @@
     <vxe-column field="receiverMobile" title="手机" width="120"></vxe-column>
     <vxe-column field="buyerMessage" title="买家留言" width="120"></vxe-column>
     <vxe-column field="wmsCoId" title="发货仓编号" width="120"></vxe-column>
-    <vxe-column field="payDate" title="支付时间" width="120"></vxe-column>
+    <vxe-column field="payDate" title="支付时间" width="140"></vxe-column>
     <vxe-column field="freeAmount" title="抵扣金额" width="120"></vxe-column>
     <vxe-column field="payAmount" title="应付+运费" width="120">
       <template #default="{ row }">
@@ -69,8 +70,14 @@
     <vxe-column field="questionType" title="问题类型" width="120"></vxe-column>
     <vxe-column field="questionDesc" title="问题描述" width="120"></vxe-column>
     <vxe-column field="shopName" title="店铺" width="120"></vxe-column>
-    <vxe-column field="invoiceType" title="发票类型" width="120"></vxe-column>
-    <vxe-column field="invoiceTitle" title="发票抬头+税号" width="120"></vxe-column>
+    <!-- <vxe-column field="invoiceType" title="发票类型" width="120"></vxe-column> -->
+    <vxe-column field="invoiceTitle" title="发票抬头+税号" width="120">
+      <template #default="{ row }">
+        <span>{{ row.invoiceTitle }}</span> <br/>
+        <span style="color: #b9b8b8;">{{ row.buyerTaxNo }}</span><br/>
+        <span>{{ row.invoiceType }}</span>
+      </template>
+    </vxe-column>
     <!-- <vxe-column field="buyerTaxNo" title="发票税号" width="120"></vxe-column> -->
     <vxe-column field="drpCoIdFrom" title="分销商编号" width="120"></vxe-column>
     <vxe-column field="drpCoIdTo" title="供销商编号" width="120"></vxe-column>

+ 8 - 4
src/views/oms/order/components/orderTool.vue

@@ -1,13 +1,17 @@
 <template>
   <div class="order-tool">
-    <el-button type="text" @click="handle('addOrder')">新增订单</el-button>
+    <el-dropdown split-button type="text" @click="handle('addOrder')" @command="handleCommand">
+      新增订单
+      <el-dropdown-menu slot="dropdown">
+        <el-dropdown-item command="loadOrder">手工下载</el-dropdown-item>
+      </el-dropdown-menu>
+    </el-dropdown>
+    <!-- <el-button type="text" @click="handle('addOrder')">新增订单</el-button> -->
     <div class="split"></div>
     <el-dropdown split-button type="text" @click="handle('smt')" @command="handleCommand">
         审批
       <el-dropdown-menu slot="dropdown">
         <el-dropdown-item command="reSmt">反审批</el-dropdown-item>
-        <!-- <el-dropdown-item>批量审批</el-dropdown-item>
-        <el-dropdown-item>批量反审批</el-dropdown-item> -->
       </el-dropdown-menu>
     </el-dropdown>
     <el-button type="text">设快递</el-button>
@@ -43,7 +47,7 @@ import { Component, Prop, Vue, Watch } from "vue-property-decorator";
 export default class OrderTool extends Vue {
 
   handleCommand(n:string){
-    console.log(n)
+    this.$emit(n)
   }
 
   handle(n:string){

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

@@ -131,7 +131,7 @@
               </el-select>
             </div>
           </el-collapse-item> -->
-          <order-checkbox title="店铺" ref="searchCom13" keyName="shopIdList" :options="shopIdListOptions" @checkboxChange="onChange($event,'shopIdList')" />
+          <!-- <order-checkbox title="店铺" ref="searchCom13" keyName="shopIdList" :options="shopIdListOptions" @checkboxChange="onChange($event,'shopIdList')" /> -->
 
           <order-checkbox title="省份" ref="searchCom14" keyName="receiverProvinceCode" :options="provinceOptions" @checkboxChange="onChange($event,'receiverProvinceCodeList')" />
         </el-collapse>
@@ -143,7 +143,7 @@
     </div>
     <div class="order-right">
       <div class="tool">
-        <order-tool @addOrder="addOrder" @smt="smtOrder" @reSmt="reSmt"/>
+        <order-tool @addOrder="addOrder" @smt="smtOrder" @reSmt="reSmt" @loadOrder="loadOrder"/>
       </div>
       <div class="table">
         <order-table :data="data" ref="orderTable" class="order-table" @detail="detail"/>
@@ -153,6 +153,7 @@
         </div>
       </div>
       <add-order ref="addOrder" @handleSuccess="handleSuccess" />
+      <load-order-modal ref="loadOrder" @handleSuccess="handleSuccess" />
     </div>
   </div>
 </template>
@@ -168,8 +169,9 @@ import AddOrder from "./components/addOrder.vue";
 import InputSelect from "./components/inputSelect.vue";
 import OrderProduct from "./components/orderProduct.vue";
 import filterMinMax from './components/filterMinMax.vue'
+import loadOrderModal from './components/loadOrderModal.vue'
 import { query,getProvince,smt,unSmt } from '@/api/omsOrder'
-@Component({components:{filterInput,OrderCheckbox,OrderRadio,filterDate,OrderTool,OrderTable,AddOrder,InputSelect,OrderProduct,filterMinMax}})
+@Component({components:{filterInput,OrderCheckbox,OrderRadio,filterDate,OrderTool,OrderTable,AddOrder,InputSelect,OrderProduct,filterMinMax,loadOrderModal}})
 export default class Order extends Vue {
   test={}
   activeNames:Array<any>=['1','status']
@@ -612,8 +614,7 @@ export default class Order extends Vue {
   //订单详情
   detail(row:any){
     (this.$refs.addOrder as any).setShow(true);
-    (this.$refs.addOrder as any).setDetail(row);
-    
+    (this.$refs.addOrder as any).setDetail(row); 
   }
 
   handleSizeChange(v:number){
@@ -625,6 +626,11 @@ export default class Order extends Vue {
     this.getList();
   }
 
+  //同步店铺订单
+  loadOrder(){
+    (this.$refs.loadOrder as any).setShow(true);
+  }
+
 }
 </script>