Jelajahi Sumber

Merge branch 'master' of http://47.107.53.207:3000/ymy/oms

AlanWong 2 tahun lalu
induk
melakukan
0392c3ccde

+ 5 - 0
src/benyun/components/byArea/byArea.vue

@@ -102,6 +102,11 @@ export default class ByArea extends VueViews {
   provinceError = false;
   cityError = false;
   countyError = false;
+  
+  @Watch('propValue')
+  propValueChange(v:any){
+    this.setValue(v);
+  }
   created(){
     if(this.propConfig){
       this.setConfig(this.propConfig)

+ 13 - 0
src/benyun/components/byForm/byForm.vue

@@ -1,6 +1,16 @@
 <template>
   <div class="by-form">
+    <el-descriptions v-if="attrs.showType=='desc'" :title="attrs.title" :column="attrs.itemCount" :border="attrs.border" :direction="attrs.direction" 
+    :size="attrs.size?attrs.size:'medium'" :colon="attrs.colon">
+      <template v-for="(itemChild,index) of columns">
+        <el-descriptions-item :label="item.label"  v-for="(item,_ind) of itemChild" :span="item.colspan" :key="index+'-'+_ind">
+          <slot v-if="item.descSlot" :name='item.prop' :value='value'></slot>
+          <template v-else>{{value[item.prop]?value[item.prop]:'--'}}</template>
+        </el-descriptions-item>
+      </template>
+    </el-descriptions>
     <el-form class="byForm" 
+    v-else
     :style="{ height: attrs.height ? attrs.height + 'px' : 'auto' }" 
     :model="value" 
     ref="byForm" 
@@ -211,6 +221,9 @@ export default class ByForm extends VueViews {
   //表单验证
   validate(parames?:any):Promise<any>{
     return new Promise((resolve:Function, reject:Function) => {
+      if(!this.$refs.byForm){
+        resolve(true)
+      }
       (this as any).$refs.byForm.validate((valid:any) => {
           if (valid) {
             resolve(true)

+ 29 - 10
src/views/audit/synchronous/components/synchronousOrderModal.vue

@@ -14,7 +14,7 @@
       <div class="cont">
         <div class="t-title">店铺名称:</div>
         <div class="right-cont">
-          <el-select v-model="shopId" size="mini" style="width:100%" placeholder="请选择" clearable>
+          <el-select v-model="shopId" size="mini" style="width:100%" placeholder="请选择" clearable @change="shopChange">
             <el-option
               v-for="item in shopOptions"
               :key="item.value"
@@ -61,9 +61,9 @@
               v-model="time"
               style="width: 100%;"
               size="mini"
-              type="daterange"
+              type="datetimerange"
               clearable
-              value-format="yyyy-MM-dd"
+              value-format="yyyy-MM-dd HH:mm:ss"
               range-separator="-"
               start-placeholder="开始日期"
               @change="change"
@@ -123,6 +123,18 @@ export default class SynchronousOrderModal extends Vue {
       this.endDate = '';
     }
   }
+  shopChange(v:any){
+    if(v){
+      for(const item of this.shopOptions){
+        if(item.value = v){
+          this.shopName = item.label
+          break
+        }
+      }
+    }else{
+      this.shopName = ''
+    }
+  }
   btn(){
     let value:any={};
     let msg = '';
@@ -150,8 +162,8 @@ export default class SynchronousOrderModal extends Vue {
       }
       msg = this.msgInfo(this.time,msg,'时间')
       value.dateType = this.dateType;
-      value.beginDate = this.beginDate + ' 00:00:00';
-      value.endDate = this.endDate + ' 00:00:00';
+      value.beginDate = this.beginDate;
+      value.endDate = this.endDate;
     }
     if(msg){
       this.$message({
@@ -163,12 +175,19 @@ export default class SynchronousOrderModal extends Vue {
     this.load = true;
     pullItem(value).then((res:any) => {
       this.load = false;
-      (this as any).$message({
-        message: '操作成功!',
-        type: 'success',
-      });
       this.value = false;
-      this.$emit('handleSuccess');
+      if(res.data && res.data.length > 0){
+        (this as any).$message({
+          message: '成功更新' + res.data + '条数据!',
+          type: 'success',
+        });
+        this.$emit('handleSuccess');
+      }else{
+        (this as any).$message({
+          message: '未更新数据!',
+          type: 'warning',
+        });
+      }
     }).catch((err:any) => {
       this.load = false;
     })

+ 4 - 4
src/views/audit/synchronous/index.vue

@@ -127,10 +127,9 @@ export default class SynchronousProduct extends Vue {
   }
   //商品同步成功
   handleSuccess() {
-    let page = (this.$refs.moduleView as any).getPage();
-    page.pageNo = 1;
-    (this.$refs.moduleView as any).setPage(page);
-    this.getSyncData()
+    let data = (this.$refs.view as any).getPage();
+    data.pageNo = 1;
+    this.getList(data);
   }
   pagination(){
     this.search();
@@ -174,6 +173,7 @@ export default class SynchronousProduct extends Vue {
     if(!this.$refs.view){
       return
     }
+    this.count = 0;
     clearInterval(this.time)
     let data = (this.$refs.view as any).getPage();
     

+ 30 - 2
src/views/demo/form.vue

@@ -8,6 +8,9 @@
     </by-form>
     <el-button type="primary" @click="getFormData">获取数据</el-button>
     <el-button type="primary" @click="getFormVali">获取表单验证</el-button>
+    <el-button type="primary" @click="setFormData">设置数据</el-button>
+    <el-button type="primary" @click="changeType">转换表单形式</el-button>
+    <el-button type="primary" @click="changeBorder">加边框</el-button>
   </div>
 </template>
 
@@ -100,9 +103,10 @@ export default class DemoForm extends Vue {
         }
       },{
         span:6,
-        // label:'插槽',
-        labelWidth:'0px',
+        label:'插槽',
+        // labelWidth:'0px',
         slot:true,
+        descSlot:true,
         prop:'slotField',
       }],
       [{
@@ -161,6 +165,30 @@ export default class DemoForm extends Vue {
     console.log('表单数据:',data);
   }
 
+  setFormData(){
+    let data={
+      name:'111',
+      name2:'2222',
+      name3:'333',
+      select:'选项一',
+      date:'2023-02-25 12:23:22',
+      tree:'222'
+    };
+    (this as any).$refs.form.setValue(data);
+  }
+
+  changeType(){
+    let c = (this as any).$lodash.cloneDeep(this.config);
+    c.attr.showType = 'desc';
+    (this as any).$refs.form.setConfig(c);
+  }
+  changeBorder(){
+    let c = (this as any).$lodash.cloneDeep(this.config);
+    c.attr.showType = 'desc';
+    c.attr.border = true;
+    (this as any).$refs.form.setConfig(c);
+  }
+
   getFormVali(){
     (this as any).$refs.form.validate().then(()=>{
       console.log('验证通过')

+ 116 - 23
src/views/oms/order/components/addOrder.vue

@@ -5,17 +5,46 @@
       <span>创建新订单</span>
     </template>
     <template #default>
+      <div class="order-step" v-if="orderValue.id">
+        <el-steps :active="stepActive" align-center finish-status="success" v-if="stepCon.indexOf(orderValue.status) >= 0" size="mini">
+          <el-step title="1.待付款"></el-step>
+          <el-step title="2.已付款待审核"></el-step>
+          <el-step title="3.已客审待财审"></el-step>
+          <el-step title="4.等供销商|外仓发货"></el-step>
+          <el-step title="5.已发货"></el-step>
+        </el-steps>
+        <div class="other" v-else>{{ stepTypeName(orderValue.status) }}</div>
+      </div>
       <el-collapse v-model="activeNames">
         <el-collapse-item title="基本信息" name="1" class="add-order-item">
-          <by-form :propConfig="baseConfig" ref="baseform" @formChange="formChangeBase"></by-form>
+          <by-form :propConfig="baseConfig" ref="baseform" @formChange="formChangeBase">
+            <template v-slot:sourceFrom='{ value }'>
+              <span v-if="value.sourceFrom == 'ERP'">手工下单</span>
+              <span v-if="value.sourceFrom == 'COPY'">复制</span>
+              <span v-if="value.sourceFrom == 'MERGE'">合并</span>
+              <span v-if="value.sourceFrom == 'SPLIT'">拆分;拆分还原</span>
+              <span v-if="value.sourceFrom == 'MOBILE'">手工下单</span>
+              <span v-if="value.sourceFrom == 'IMPORT'">导入</span>
+              <span v-if="value.sourceFrom == 'drp-s'">供销推送</span>
+              <span v-if="value.sourceFrom == 'drp-d'">分销推送</span>
+              <span v-if="value.sourceFrom == 'KWAISHOP'">快手;微商城</span>
+              <span v-if="value.sourceFrom == 'PINDUODUO'">拼多多</span>
+              <span v-if="value.sourceFrom == 'TOUTIAOFXG'">头条放心购</span>
+              <span v-if="value.sourceFrom == 'JUSHUITAN'">聚水潭</span>
+            </template>
+          </by-form>
         </el-collapse-item>
         <el-collapse-item title="买家信息" name="2" class="add-order-item">
-          <by-form :propConfig="buyerInfoConfig" ref="infoform"></by-form>
+          <by-form :propConfig="buyerInfoConfig" ref="infoform">
+            <template v-slot:receiverDistrictCode='{ value }'>
+              {{ value.receiverProvince + '-' + value.receiverCity + '-' + value.receiverDistrict + (value.receiverTown?'-'+value.receiverTown:'') }}
+            </template>
+          </by-form>
         </el-collapse-item>
         <el-collapse-item title="发票信息" name="5" class="add-order-item" v-if="orderValue.id">
-          <by-form :propConfig="invoicesConfig" ref="invoicesform"></by-form>
+          <by-form :propConfig="newInvoicesConfig" ref="invoicesform"></by-form>
         </el-collapse-item>
-        <div class="btn-save" v-if="orderValue.id">
+        <div class="btn-save" v-if="orderValue.id && orderValue.isSubmitted != 1">
           <el-button type="primary" size="small" @click="saveBase">保存基本信息及收获地址</el-button>
         </div>
         <el-collapse-item title="订单支付情况" name="4" class="add-order-item" v-if="orderValue.id">
@@ -95,6 +124,13 @@
               <div class="amount-price" style="color:#F00; font-size: 14px;">¥{{orderValue.payAmount?orderValue.payAmount:'0.00'}}</div>
             </div>
           </div>
+          <div class="product-row" v-if="orderValue.paidAmount">
+            <div class="p-left"></div>
+            <div class="p-right">
+              <div class="amount-title">实付总金额:</div>
+              <div class="amount-price" style="color:#F00; font-size: 14px;">¥{{orderValue.paidAmount?orderValue.paidAmount:'0.00'}}</div>
+            </div>
+          </div>
         </el-collapse-item>
         <el-collapse-item title="订单支付情况" name="4" class="add-order-item" v-if="!orderValue.id">
           <el-radio-group v-model="radioPay" @input="inputPay" class="payType">
@@ -105,7 +141,7 @@
           <by-form v-if="radioPay == 2" :propConfig="payConfig" ref="payform"></by-form>
         </el-collapse-item>
         <el-collapse-item title="发票信息" name="5" class="add-order-item" v-if="!orderValue.id">
-          <by-form :propConfig="invoicesConfig" ref="invoicesform"></by-form>
+          <by-form :propConfig="newInvoicesConfig" ref="invoicesform"></by-form>
         </el-collapse-item>
       </el-collapse>
       <product-sku-modal ref="product" @confirm="confirmProduct" />
@@ -136,12 +172,16 @@ export default class AddOrder extends Vue {
   userInfo:any='';//用户信息
   orderValue:any={}; //新增订单值
   radioPay=0;
+  stepActive:number=0;
+  stepCon=['WaitPay','WaitConfirm','WaitFConfirm','WaitOuterSent','Sent']
   activeNames:Array<any> =['1','2','3','4','5','save'];
   baseConfig:any={};
   buyerInfoConfig:any={};
+  newInvoicesConfig:any={}
   config:any={
     attr:{
       size:'mini',
+      itemCount:4,
       rules:{
         shopName:[{
           required: true, message: '店铺名称不能为空!', trigger: 'blur'
@@ -225,6 +265,7 @@ export default class AddOrder extends Vue {
         span:6,
         label:'订单来源',
         prop:'sourceFrom',
+        descSlot:true,
         component:'by-select',
         compConfig:{
           attr:{
@@ -307,6 +348,7 @@ export default class AddOrder extends Vue {
   config2:any={
     attr:{
       size:'mini',
+      itemCount:4,
       rules:{
         buyerId:[{
           required: true, message: '买家账号不能为空!', trigger: 'blur'
@@ -350,6 +392,8 @@ export default class AddOrder extends Vue {
         // slot:true,
         prop:'receiverDistrictCode',
         component:'by-area',
+        colspan:2,
+        descSlot:true,
         compConfig:{
           attr:{
             province:'receiverProvince', //省
@@ -481,7 +525,7 @@ export default class AddOrder extends Vue {
   }
   invoicesConfig:any={
     attr:{
-      size:'mini'
+      size:'mini',
     },
     columns:[
       [{
@@ -554,7 +598,7 @@ export default class AddOrder extends Vue {
       },{
         span:6,
         label:'专票银行',
-        prop:'account',
+        prop:'bank',
         component:'by-input',
         compConfig:{
           attr:{
@@ -723,6 +767,22 @@ export default class AddOrder extends Vue {
       }]
     ]
   }
+  stepTypeName(n:string){
+    let t = '';
+    if(n == 'Merged'){
+      t = '被合并'
+    }
+    if(n == 'Question'){
+      t = '异常'
+    }
+    if(n == 'Split'){
+      t = '被拆分'
+    }
+    if(n == 'Cancelled'){
+      t = '已取消'
+    }
+    return t;
+  }
   setShow(v:boolean){
     this.value = v;
   }
@@ -747,7 +807,7 @@ export default class AddOrder extends Vue {
   show(){
     this.baseConfig = (this as any).$lodash.cloneDeep(this.config);
     this.buyerInfoConfig = (this as any).$lodash.cloneDeep(this.config2);
-    
+    this.newInvoicesConfig = (this as any).$lodash.cloneDeep(this.invoicesConfig);
     if(this.orderValue.id){
       let data = this.orderValue;
       this.freeAmount = this.orderValue.freeAmount;
@@ -801,30 +861,48 @@ export default class AddOrder extends Vue {
       if(data.invoices && data.invoices[0]){
         (this.$refs.invoicesform as any).setValue(data.invoices[0]);
       }
-      
-      for(let col of this.baseConfig.columns){
-        for(let item of col){
-          let fieldArr = ['freight','buyerMessage','remark']
-          if(fieldArr.indexOf(item.prop) == -1){
-            if(!item.compConfig.attr) item.compConfig.attr = {};
-            item.compConfig.attr.disabled = true;
-          }
-        }
-      }
       if(this.orderValue.isSubmitted == 1){
-        for(let col of this.buyerInfoConfig.columns){
+        this.baseConfig.attr.showType='desc';
+        this.baseConfig.attr.size='medium';
+      }else{
+        for(let col of this.baseConfig.columns){
           for(let item of col){
-            if(!item.compConfig.attr) item.compConfig.attr = {};
+            let disField:Array<string>=['freight','buyerMessage','remark'] 
+            if(disField.indexOf(item.prop) == -1){
+              if(!item.compConfig.attr) item.compConfig.attr = {};
               item.compConfig.attr.disabled = true;
+            }
           }
         }
       }
+      
+      // let disStatus = ['WaitPay','Merged','Question','Split','WaitConfirm','Cancelled'];
+      if(this.orderValue.isSubmitted == 1){
+        this.buyerInfoConfig.attr.showType='desc';
+        this.buyerInfoConfig.attr.size='medium';
+        this.newInvoicesConfig.attr.showType='desc';
+        this.newInvoicesConfig.attr.size='medium';
+        // for(let col of this.buyerInfoConfig.columns){
+        //   for(let item of col){
+        //     if(!item.compConfig.attr) item.compConfig.attr = {};
+        //     item.compConfig.attr.disabled = true;
+        //   }
+        // }
+        // for(let col of this.newInvoicesConfig.columns){
+        //   for(let item of col){
+        //     if(!item.compConfig.attr) item.compConfig.attr = {};
+        //     item.compConfig.attr.disabled = true;
+        //   }
+        // }
+      }
 
       this.totalAmount();
       this.amountChange();
       this.payAmountChange();
       this.totalNum();
-
+      if(this.stepCon.indexOf(data.status) >=0 ){
+        this.stepActive = this.stepCon.indexOf(data.status) 
+      }
     }else{
       let value:any = (this.$refs.baseform as any).getValue();
       value.createBy = this.userInfo.userName;
@@ -832,7 +910,7 @@ export default class AddOrder extends Vue {
     }
     (this.$refs.baseform as any).setConfig(this.baseConfig);
     (this.$refs.infoform as any).setConfig(this.buyerInfoConfig);
-    
+    (this.$refs.invoicesform as any).setConfig(this.newInvoicesConfig);
   }
   hide(){
     this.clearValue();
@@ -1012,9 +1090,10 @@ export default class AddOrder extends Vue {
     this.amountChange();
     this.payAmountChange();
   }
-  //清整个订单数据
+  //清整个订单数据
   clearValue(){
     this.orderValue = {};
+    this.stepActive = 0;
     (this.$refs.baseform as any).clearValue();
     (this.$refs.baseform as any).clearValidate();
     (this.$refs.infoform as any).clearValue();
@@ -1254,6 +1333,20 @@ export default class AddOrder extends Vue {
   display: flex;
   justify-content: flex-end;
 }
+.order-step{
+  padding-bottom: 8px;
+  width: 100%;
+  .other{
+    height: 30px;
+    line-height: 30px;
+    width: 100%;
+    box-sizing: border-box;
+    padding: 0 16px;
+    font-size: 14px;
+    color: #FFF;
+    background-color: #198cf8;
+  }
+}
 </style>
 
 <style lang="scss">

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

@@ -4,18 +4,25 @@
     border
     ref="table"
     :height="height"
-    :row-config="{isHover: true}"
+    :row-config="{isCurrent: true,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>
-    <vxe-column field="sourceId" title="线上订单号" width="130" fixed="left">
+    <vxe-column field="sourceId" title="线上订单号" width="160" fixed="left">
       <template #default="{ row }">
-        <div class="detail" @click="detail(row)">{{ row.sourceId }}</div>
+        <!-- <div class="detail" @click="detail(row)">{{ row.sourceId }}</div> -->
+        <div class="col-cont">
+          <span>{{ row.sourceId }}</span>
+          <div class="update">
+            <div class="tag-update" @click="detail(row)">详</div>
+          </div>
+          
+        </div>
       </template>
     </vxe-column>
     <vxe-column field="isSubmitted" title="提交状态" width="130">
       <template #default="{ row }">
-        <el-tag v-if="row.isSubmitted == 1" type="success">已提交</el-tag>
+        <el-tag v-if="row.isSubmitted == 1">已提交</el-tag>
         <el-tag v-else type="warning"> 未提交 </el-tag>
 
       </template>
@@ -147,4 +154,46 @@ export default class OrderTable extends Vue {
   color: #0089ff;
   cursor: pointer;
 }
+.col-cont{
+  // display: flex;
+  // justify-content: space-between;
+  // align-items: center;
+  // flex-direction: column;
+  .update{
+    display: flex;
+    justify-content: flex-end;
+    width: 100%;
+    visibility: hidden;
+  }
+  .tag-update{
+    height: 24px;
+    width: 24px;
+    font-size: 12px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    border-radius: 50%;
+    background-color:#2d99f7;
+    color: #FFF;
+    flex-shrink: 0;
+    margin-left: 4px;
+    cursor: pointer;
+  }
+  .tag-update:hover{
+    opacity: 0.7;
+  }
+}
+</style>
+
+<style lang="scss">
+.row--hover{
+  .update{
+    visibility:visible !important;
+  }
+}
+.row--current{
+  .update{
+    visibility:visible !important;
+  }
+}
 </style>

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

@@ -27,8 +27,8 @@
 import { Component, Prop, Vue, Watch } from "vue-property-decorator";
 import { toPurchaseOrder } from '@/api/omsOrder'
 import { add,multiply,subtract,divide } from '@/benyun/utils/accuracy'
-import SupplierModal from "@/components/supplierModal/supplierModal.vue";
-@Component({components:{SupplierModal}})
+// import SupplierModal from "@/components/supplierModal/supplierModal.vue";
+@Component({components:{}})
 export default class PurchaseModel extends Vue {
   value=false;
   load = false;