Browse Source

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

# Conflicts:
#	src/benyun/compVue/ModuleViewHandle.ts
AlanWong 2 years ago
parent
commit
d5c87fc1ab

+ 8 - 0
src/api/omsOrder.ts

@@ -95,4 +95,12 @@ export function purchaseQty(params:any){
 		method:'Get',
 		params:params
 	})
+}
+
+export function toPurchaseOrder(data:any){
+	return request({
+		url:'/omsOrder/omsOrder/toPurchaseOrder',
+		method:'POST',
+		data:data
+	})
 }

+ 8 - 4
src/benyun/compVue/ModuleViewHandle.ts

@@ -104,11 +104,15 @@ export default class ModuleViewHandle extends VueViews{
   // }
 
   //刷新
+  onRefresh(){
+    // (this.$refs[this.tableID] as any).setPage({pageNo:1,total:0})
+    // this.getList();
+		this.$emit('onRefresh')
+  }
   // onRefresh(){
-		// (this.$refs[this.searchID] as any).setValue({});
   //   (this.$refs[this.tableID] as any).setPage({pageNo:1,total:0})
-  //   // this.getList();
-		// this.$emit('onRefresh')
+  //   this.getList();
+	// 	this.$emit('onRefresh')
   // }
 
   //搜索
@@ -141,4 +145,4 @@ export default class ModuleViewHandle extends VueViews{
     this.$message.error(msg)
   }
 
-}
+}

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

@@ -26,6 +26,10 @@ import VueViews from '@/benyun/compVue/VueViews'
 export default class ByInput extends VueViews {
   value:any=null;
 
+  @Watch('propValue')
+  propValueChange(v:any){
+    this.value = (this as any).$lodash.cloneDeep(v);
+  }
 
   created(){
     if(this.propConfig){

+ 5 - 1
src/benyun/components/byTable/byTable.vue

@@ -14,7 +14,6 @@
       :row-config="{isHover: true}"
       :tooltip-config="{showAll: true}"
       style="width: 100%">
-
       <vxe-column v-if="attrs.checkbox" type="checkbox" width="50" fixed="left" />
       <vxe-column v-if="attrs.radio" type="radio" width="50" fixed="left" />
       <vxe-column v-if="attrs.seq" type="seq" title="序号" :width="attrs.seqWidth?attrs.seqWidth:50" fixed="left" :tree-node="attrs.treeNodeSeq" />
@@ -153,6 +152,11 @@ export default class ByTable extends VueViews {
       }
     })
   }
+  loadTableData(data:Array<any>){
+    if(this.$refs.table){
+      (this.$refs.table as any).loadData(data);
+    }
+  }
   //点击详情
   detail(row:any){
     let data = (this as any).$lodash.cloneDeep(row);

+ 5 - 1
src/benyun/components/moduleView/moduleView.vue

@@ -66,6 +66,10 @@ export default class ModuleView extends ModuleViewHandle {
   detail(row:any){
     this.$emit('detail',row)
   }
+  //清除搜索条件
+  clearSearch(){
+    (this.$refs[this.searchID] as any).clearValue();
+  }
   resert(){
     this.resertHandle()
   }
@@ -83,7 +87,7 @@ export default class ModuleView extends ModuleViewHandle {
     }
     return data;
   }
-  //清选中表格
+  //清选中表格
   clearCheckboxRow(){
     if(this.$refs[this.tableID]){
       (this.$refs[this.tableID] as any).clearCheckboxRow()

+ 6 - 3
src/components/supplierModal/supplierModal.vue

@@ -34,11 +34,13 @@ export default class SupplierModal extends Vue {
   config:any={
     search:{
       attr:{
-        size:'mini'
+        size:'mini',
+        
       },
       columns:[
         [{
-          span:6,
+          labelWidth:'50px',
+          span:8,
           label:'名称',
           prop:'name',
           component:'by-input',
@@ -49,7 +51,8 @@ export default class SupplierModal extends Vue {
             }
           }
         },{
-          span:6,
+          labelWidth:'70px',
+          span:8,
           label:'负责人',
           prop:'contacts',
           component:'by-input',

+ 2 - 0
src/main.ts

@@ -42,6 +42,8 @@ import buyer from './components/buyer/buyer.vue'
 Vue.component('by-buyer', buyer);
 import productSkuModal from './components/skuModal/productModal.vue';
 Vue.component('product-sku-modal', productSkuModal);
+import supplierModal from './components/supplierModal/supplierModal.vue';
+Vue.component('supplier-modal', supplierModal);
 
 Vue.use(Element, {
   size: Cookies.get('size') || 'medium' // set element-ui default size

+ 1 - 0
src/store/getters.ts

@@ -7,6 +7,7 @@ const getters = {
   token: (state:any) => state.user.token,
   avatar: (state:any) => state.user.avatar,
   name: (state:any) => state.user.name,
+  userInfo:(state:any) => state.user.userInfo,
   introduction: (state:any) => state.user.introduction,
   roles: (state:any) => state.user.roles,
   permissions: (state:any) => state.user.permissions,

+ 5 - 0
src/store/modules/user.ts

@@ -6,6 +6,7 @@ const user = {
   state: {
     token: getToken(),
     name: '',
+    userInfo:{},
     avatar: '',
     roles: [],
     permissions: []
@@ -29,6 +30,9 @@ const user = {
     },
     SET_PERMISSIONS: (state:any, permissions:any) => {
       state.permissions = permissions
+    },
+    SET_USERINFO:(state:any,userInfo:any) => {
+      state.userInfo = userInfo;
     }
   },
 
@@ -68,6 +72,7 @@ const user = {
           }
           commit('SET_NAME', user.userName)
           commit('SET_AVATAR', avatar)
+          commit('SET_USERINFO',user);
           resolve(res)
         }).catch((error:any) => {
           reject(error)

+ 0 - 182
src/views/audit/productManagement/components/productModal.vue

@@ -1,182 +0,0 @@
-<template>
-  <vxe-modal v-model="value" id="productDialogModal" :width="width?width+'px':'80%'" @show="show" :height="height?height+'px':'80%'" min-width="500" min-height="400" 
-  show-zoom resize transfer show-footer  @confirm="confirm">
-    <template #title>
-      <span>选择商品</span>
-    </template>
-    <template #default>
-      <module-view :propConfig="config" ref="view" @pagination="getList" @search="getList" @resert="getList" @clickHandle="clickHandle" />
-    </template>
-  </vxe-modal>
-</template>
-
-<script lang="ts">
-import { Component, Prop, Vue, Watch } from "vue-property-decorator";
-@Component
-export default class ProductModal extends Vue {
-  value=false
-  time:any;
-  timeNum = 0;
-  data:Array<any>=[]
-
-  @Prop()
-  width?:number
-
-  @Prop()
-  height?:number
-
-  @Prop()
-  mulit?:boolean
-
-
-  config:any={
-    search:{
-      attr:{
-        size:'mini'
-      },
-      columns:[
-        [{
-          span:6,
-          label:'物料ID',
-          prop:'materialId',
-          component:'by-input',
-          compConfig:{
-            attr:{
-              clearable:true,
-              placeholder:'请输入名称'
-            }
-          }
-        },{
-          span:6,
-          label:'标题',
-          prop:'skuTitle',
-          component:'by-input',
-          compConfig:{
-            attr:{
-              clearable:true,
-              placeholder:'请输入名称'
-            }
-          }
-        }]
-      ]
-    },
-    tool:{
-      tools:{
-        search:true,
-        refresh:true
-      }
-    },
-    table:{
-      attr:{
-        size:'mini',
-        seq:true,
-        align:'center',
-        // radio:true,
-        pageSize:10
-      },
-      columns:[{
-        title:'物料ID',
-        field:'materialId',
-        width:100
-      },{
-        title:'标题',
-        field:'skuTitle',
-        width:150
-      },{
-        title:'规格',
-        field:'materialSpec'
-      },{
-        title:'单价',
-        field:'price'
-      },{
-        title:'库存',
-        field:'stock'
-      }]
-    },
-    // request:{
-    //   url:'/system/maindataMaterial/page'
-    // }
-  }
-  brandData:Array<any>=[]
-  
-  getBrandData(){
-    return this.brandData;
-  }
-
-  clickHandle(n:string){
-    if(n == 'onRefresh'){
-      this.getList()
-    }
-  }
-
-  setShow(v:boolean){
-    this.value = v;
-  }
-
-  created(){
-    if(this.mulit){
-      this.config.table.attr.checkbox = true
-    }else{
-      this.config.table.attr.radio = true
-    }
-  }
-  mounted(){}
-
-  //确定
-  confirm(){
-    let data:Array<any>=this.getSelectdata();
-    this.$emit('confirm',data);
-    this.value = false;
-  }
-  //获取已选中表格数据
-  getSelectdata(){
-    let data:Array<any>=[];
-    if(this.$refs.view){
-      data = (this.$refs.view as any).getSelectData()
-    }
-    return data;
-  }
-  //显示弹窗
-  show(){
-    if(this.data.length ==0){
-      this.time =setInterval(()=>{
-        this.getList()
-      },500) 
-    }
-    if(this.$refs.view){
-      (this.$refs.view as any).clearCheckboxRow();
-    }
-  }
-  getList(){
-    if(!this.$refs.view){
-      if(this.timeNum > 5){
-        clearInterval(this.time)
-      }
-      this.timeNum ++;
-      return
-    }
-    clearInterval(this.time)
-    let query:any = (this.$refs.view as any).getQuery();
-    query.isLikeSearch = '1';
-    (this as any).$request({
-      url: '/maindata/maindataMaterialSku/page',
-      method: 'get',
-      params:query
-    }).then((res:any) => {
-      if(res.data.records){
-        (this.$refs.view as any).setTableValue(res.data.records);
-        this.data = res.data.records;
-        let page={
-          pageNo: res.data.current, //当前页
-          pageSize: res.data.size, //每页条数
-          total: res.data.total //总条数
-        };
-        (this.$refs.view as any).setPage(page)
-      }
-    })
-  }
-} 
-</script>
-<style lang="scss" scoped>
-
-</style>

+ 29 - 28
src/views/oms/order/components/addOrder.vue

@@ -121,7 +121,7 @@ export default class AddOrder extends Vue {
   load = false;
   freeAmount="";
   productTotal:any=0;
-  userName:any='';//用户信息
+  userInfo:any='';//用户信息
   orderValue:any={}; //新增订单值
   radioPay=0;
   activeNames:Array<any> =['1','2','3','4','5','save'];
@@ -217,7 +217,7 @@ export default class AddOrder extends Vue {
         compConfig:{
           attr:{
             // placeholder:'请输入订单日期',
-            // disabled:true,
+            disabled:true,
             data:[{
               label:'手工下单',
               value:'ERP'
@@ -482,28 +482,28 @@ export default class AddOrder extends Vue {
             placeholder:'发票类型',
             clearable:true,
             data:[{
-              value: '1',
+              value: '个人电子普通',
               label: '个人电子普通'
             }, {
-              value: '2',
+              value: '单位电子普通',
               label: '单位电子普通'
             }, {
-              value: '3',
+              value: '个人纸质普通',
               label: '个人纸质普通'
             }, {
-              value: '4',
+              value: '单位纸质普通',
               label: '单位纸质普通'
             }, {
-              value: '5',
+              value: '个人电子增值税',
               label: '个人电子增值税'
             }, {
-              value: '6',
+              value: '单位电子增值税',
               label: '单位电子增值税'
             }, {
-              value: '7',
+              value: '个人纸质增值税',
               label: '个人纸质增值税'
             }, {
-              value: '8',
+              value: '单位纸质增值税',
               label: '单位纸质增值税'
             }]
           }
@@ -658,8 +658,8 @@ export default class AddOrder extends Vue {
         }
       },{
         span:6,
-        label:'支付号',
-        prop:'buyerAccount',
+        label:'支付号',
+        prop:'outerPayId',
         component:'by-input',
         rules:[
           { required: true, message: '请选择支付日期', trigger: 'change' }
@@ -674,7 +674,7 @@ export default class AddOrder extends Vue {
       [{
         span:6,
         label:'支付金额',
-        prop:'buyerAccount',
+        prop:'amount',
         component:'by-input',
         rules:[
           { required: true, message: '请输入支付金额', trigger: 'blur' }
@@ -688,8 +688,8 @@ export default class AddOrder extends Vue {
         }
       },{
         span:6,
-        label:'买家账号',
-        prop:'buyerPaymentId',
+        label:'买家收款账号',
+        prop:'buyerAccount',
         component:'by-input',
         compConfig:{
           attr:{
@@ -699,8 +699,8 @@ export default class AddOrder extends Vue {
         }
       },{
         span:6,
-        label:'收款账号',
-        prop:'sellerId',
+        label:'卖家收款账号',
+        prop:'sellerAccount',
         component:'by-input',
         compConfig:{
           attr:{
@@ -729,8 +729,8 @@ export default class AddOrder extends Vue {
       this.orderValue.isPay = v;
     }
   }
-  mounted(){
-    this.userName = this.$store.getters.name;
+  created(){
+    this.userInfo = this.$store.getters.userInfo;
   }
   show(){
     this.baseConfig = (this as any).$lodash.cloneDeep(this.config);
@@ -814,7 +814,7 @@ export default class AddOrder extends Vue {
 
     }else{
       let value:any = (this.$refs.baseform as any).getValue();
-      value.createBy = this.userName;
+      value.createBy = this.userInfo.userName;
       (this.$refs.baseform as any).setValue(value);
     }
     (this.$refs.baseform as any).setConfig(this.baseConfig);
@@ -896,17 +896,17 @@ export default class AddOrder extends Vue {
   //商品处理
   productHandle(data:Array<any>,isGift:boolean){
     let nowData = (this.$refs.table as any).getValue();
-    let ids='';
+    let names='';
     if(data.length > 0){
       for(const item of data){
         let t = true;
         let v = isGift ? 1 : 0;
         for(const t_item of nowData){
           if(item.id == t_item.itemId && t_item.isGift == v){
-            if(!ids){
-              ids = item.skuCode
+            if(!names){
+              names = item.skuTitle
             }else{
-              ids = ids + ',' + item.skuCode
+              names = names + ',' + item.skuTitle
             }
             t = false;
             break;
@@ -917,7 +917,7 @@ export default class AddOrder extends Vue {
           obj.name = item.skuTitle; //商品名称
           obj.skuId = item.skuCode; //商品编码
           obj.itemId = item.id;
-          obj.styleId = item.newNumber; //款式编码
+          obj.styleId = item.itemNumber; //款式编码
           obj.qty = 1;
           if(isGift){
             obj.price = 0;  //单价
@@ -929,7 +929,7 @@ export default class AddOrder extends Vue {
           
           obj.basePrice = item.price; //原价
           obj.amount = item.price;
-          obj.stock = item.stock;
+          // obj.stock = item.stock;
           nowData.push(obj)
         }
       }
@@ -940,9 +940,9 @@ export default class AddOrder extends Vue {
         this.payAmountChange();
       }
       this.totalNum();
-      if(ids){
+      if(names){
         let name = isGift ? '赠品' : '商品';
-        this.$alert(name+'“'+ids+'”已存在!', '提示', {
+        this.$alert(name+'“'+names+'”已存在!', '提示', {
           confirmButtonText: '确定',
           callback: action => {}
         });
@@ -1065,6 +1065,7 @@ export default class AddOrder extends Vue {
               if(payFormValue.payDate){
                 payFormValue.payDate = payFormValue.payDate + ' 00:00:00'
               }
+              payFormValue.sellerId = this.userInfo.userId;
               this.orderValue.pays.push(payFormValue);
               resolve();
             }).catch(()=>{

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

@@ -38,7 +38,7 @@
         <el-dropdown-item>合并</el-dropdown-item>
       </el-dropdown-menu>
     </el-dropdown>
-    <el-button type="text" @click="handle('producePurchase')" title="选取已审批数据">生成采购单</el-button>
+    <el-button type="text" @click="handle('producePurchase')" title="选取已提交数据">生成采购单</el-button>
   </div>
 </template>
 

+ 110 - 11
src/views/oms/order/components/purchaseModel.vue

@@ -1,14 +1,14 @@
 <template>
   <vxe-modal v-model="value" id="purchaseModel" @show="show" width="70%" height="80%" min-width="460" min-height="320" 
-    show-zoom resize transfer show-footer @hide="hide" v-loading="load">
+    show-zoom resize transfer show-footer @hide="hide" v-loading="load"  @confirm="btn">
     <template #title>
-      <span>选择商品</span>
+      <span>生成采购单</span>
     </template>
     <el-collapse v-model="activeNames">
       <el-collapse-item title="基本信息" name="1" class="add-order-item">
         <by-form :propConfig="baseConfig" ref="baseform">
           <template v-slot:organizationName='{ value }'>
-            <el-input placeholder="请选择供应商" v-model="value.organizationName" class="input-organizationName" size="mini" clearable>
+            <el-input placeholder="请选择供应商" v-model="value.organizationName" @clear="organizationClear" class="input-organizationName" size="mini" clearable>
               <el-button slot="append" icon="el-icon-more" @click="handleSupplier"></el-button>
             </el-input>
           </template>
@@ -16,7 +16,7 @@
       </el-collapse-item>
 
       <el-collapse-item title="商品信息" name="2" class="add-order-item">
-        <by-table :propConfig="tableConfig" ref="table"></by-table>
+        <by-table :propConfig="tableConfig" ref="table" @onChangeRow="onChangeRow"></by-table>
       </el-collapse-item>
     </el-collapse>
     <supplier-modal ref="supplierModal" @confirm="confirm" />
@@ -25,7 +25,7 @@
 
 <script lang="ts">
 import { Component, Prop, Vue, Watch } from "vue-property-decorator";
-import { addOrder,saveBaseOrder } from '@/api/omsOrder'
+import { toPurchaseOrder } from '@/api/omsOrder'
 import { add,multiply,subtract,divide } from '@/benyun/utils/accuracy'
 import SupplierModal from "@/components/supplierModal/supplierModal.vue";
 @Component({components:{SupplierModal}})
@@ -99,7 +99,7 @@ export default class PurchaseModel extends Vue {
         component:'by-input',
         compConfig:{
           attr:{
-            placeholder:'请输入交货人',
+            placeholder:'请输入交货人手机',
             clearable:true
           }
         }
@@ -132,18 +132,29 @@ export default class PurchaseModel extends Vue {
   tableConfig:any={
     attr:{
       size:'small',
-      align:'center'
+      align:'center',
+      seq:true
     },
     columns:[{
       title:'商品',
       field:'name',
-      width:100,
-      slot:true
+      // width:180,
+      // slot:true
     },{
       title:'数量',
       field:'qty',
       width:100,
-      components:'by-input',
+      component:'by-input',
+      compConfig:{
+        attr:{
+          type:'number'
+        }
+      }
+    },{
+      title:'价格',
+      field:'price',
+      width:100,
+      component:'by-input',
       compConfig:{
         attr:{
           type:'number'
@@ -151,17 +162,71 @@ export default class PurchaseModel extends Vue {
       }
     },{
       title:'可采购数量',
-      field:'num'
+      field:'residueQty',
+      width:100,
+    },{
+      action:true,
+      width:100,
+      title:'操作',
+      plugins:[{
+        name:'删除',
+        event:{
+          click:(row:any)=>{
+            this.del(row)
+          }
+        }
+      }]
     }]
   }
 
+  del(row:any){
+    let data = (this.$refs.table as any).getValue();
+    let _index=-1
+    for(const item of data){
+      _index ++;
+      if(item.itemId == row.itemId && item.name == row.name){
+        break
+      }
+    }
+    if(_index >= 0){
+      data.splice(_index,1);
+    }
+    (this.$refs.table as any).setValue(data);
+  }
   show(){}
   hide(){}
 
+  onChangeRow(row:any){
+    if(Number(row.qty) > Number(row.residueQty)){
+      this.$message('数量不能大于可采购数量!');
+      row.qty = 0;
+      this.$forceUpdate()
+    }
+  }
+
   setShow(v:boolean){
     this.value = v;
   }
 
+  setTableData(data:Array<any>){
+    let newData:Array<any>=[]
+    if(data.length > 0){
+      for(const item of data){
+        newData.push({
+          orderId:item.orderId,
+          itemId:item.id,
+          name:item.name,
+          residueQty:item.residueQty,
+          qty:item.residueQty,
+          price:item.price
+        })
+      }
+    }
+    this.$nextTick(()=>{
+      (this.$refs.table as any).setValue(newData);
+    })
+  }
+
   handleSupplier(){
     (this.$refs.supplierModal as any).setShow(true);
   }
@@ -174,6 +239,40 @@ export default class PurchaseModel extends Vue {
     let value:any = (this.$refs.baseform as any).getValue();
     value.organizationName = data[0].name;
     value.organizationId = data[0].id;
+    (this.$refs.baseform as any).setValue(value);
+  }
+  organizationClear(){
+    let value:any = (this.$refs.baseform as any).getValue();
+    value.organizationName = '';
+    value.organizationId = '';
+    (this.$refs.baseform as any).setValue(value);
+  }
+  btn(){
+    (this.$refs.baseform as any).validate().then(()=>{
+      let value:any = (this.$refs.baseform as any).getValue();
+      let data:Array<any>=(this.$refs.table as any).getValue();
+        if(data.length > 0){
+          value.items = data;
+          this.load = true;
+          toPurchaseOrder(value).then((res:any)=>{
+            this.load = false;
+            this.$message({
+              message:'采购单已生成!',
+              type:'success'
+            })
+            this.$emit('handleSuccess');
+          }).catch((err:any) => {
+            this.load = false;
+          })
+        }else{
+          this.$message({
+            message:'采购的商品不能为空!',
+            type:'warning'
+          })
+        }
+      
+    })
+    
   }
 }
 </script>

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

@@ -155,7 +155,7 @@
       </div>
       <add-order ref="addOrder" @handleSuccess="handleSuccess" />
       <load-order-modal ref="loadOrder" @handleSuccess="handleSuccess" />
-      <purchase-model ref="purchaseModel" />
+      <purchase-model ref="purchaseModel" @handleSuccess="handleSuccess" />
     </div>
   </div>
 </template>
@@ -445,7 +445,7 @@ export default class Order extends Vue {
 
   //生成采购单
   producePurchase(){
-    (this.$refs.purchaseModel as any).setShow(true);
+    
     let data:Array<any>= (this.$refs.orderTable as any).getSelectData();
     if(data.length == 0){
       this.$message('请选择订单!');
@@ -471,8 +471,26 @@ export default class Order extends Vue {
     }
     purchaseQty({
       ids:ids
-    }).then(() => {
-      
+    }).then((res:any) => {
+      let productData:Array<any>=[];
+      for(const item of data){
+        for(const childItem of item.items){
+          childItem.orderId = item.id;
+          childItem.residueQty = childItem.qty;
+          productData.push(childItem)
+        }
+      }
+      if(res.data.length){
+        for(const item of productData){
+          for(const _item of res.data){
+            if(item.id == _item.itemId){
+              item.residueQty = _item.residueQty >= 0 ?  _item.residueQty : item.qty
+            }
+          }
+        }
+      }
+      (this.$refs.purchaseModel as any).setShow(true);
+      (this.$refs.purchaseModel as any).setTableData(productData);
     })
   }