ソースを参照

销售订单提交

LAPTOP-16IUEB3P\Lenovo 2 年 前
コミット
38153d5aca

+ 60 - 0
src/api/codeManagement/index.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request';
+
+// 保存/修改编码信息
+export async function saveNew (data) {
+  const res = await request.post('/main/codemanage/saveNew', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 获取编码列表
+export async function getCodeList (data) {
+  let par = new URLSearchParams(data);
+  const res = await request.get(`/main/codemanage/page?` + par, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除编码
+ */
+export async function removeCodeInfo (params) {
+  const res = await request.post('/main/codemanage/delete', params);
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 获取编码详情
+export async function getCodeDetail (id) {
+  const res = await request.get(`/main/codemanage/getById/` + id, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 生成编码
+export async function getCode (code) {
+  const res = await request.get(`/main/codemanage/getCode/` + code, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 检查编码是否存在
+ * @param code 编码
+ */
+export async function checkCode (code) {
+  const res = await request.get('/main/codemanage/getByCode/' + code);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 18 - 0
src/api/saleOrder/index.js

@@ -37,4 +37,22 @@ export async function versionPage (params) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
+}
+
+// 刷新销售订单 
+export async function pullSalesOrder (params) {
+  const res = await request.get( `/aps/salesorder/pullSalesOrder` );
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 销售订单转生产计划保存 
+export async function saveSaleToPlan (data) {
+  const res = await request.post( `/aps/productionplan/save`,data );
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
 }

+ 4 - 1
src/views/saleOrder/components/AdditionalOrder.vue

@@ -75,7 +75,8 @@
 export default {
 	mixins: [dictMixins],
 	props: {
-		selectList:Array
+		selectList:Array,
+		productCode:String
 	},
     data() {
       return {
@@ -231,6 +232,7 @@ export default {
 	  			 size: limit,
 	  			 pageNum: page,
 	  			 status:[1],
+				 productCode:this.productCode,
 				 ...this.form
 	  		 }
 	  		const data = await getPageList(params)
@@ -240,6 +242,7 @@ export default {
 	   // 设置选中
 	   setSelect(){
 		   this.$nextTick(() => {
+			   this.$refs.table.clearSelection()
 			   this.tableList.forEach(row => {
 				   this.selectList.forEach(selected => {
 					   if (selected.id === row.id) {

+ 43 - 37
src/views/saleOrder/components/order-search.vue

@@ -121,7 +121,7 @@
 	  <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
 		  <el-form-item label-width="0px">
 			  <el-button @click="goProduct">转生产计划</el-button>
-			  <el-button type="primary">订单刷新</el-button>
+			  <el-button type="primary" @click="orderRefresh">订单刷新</el-button>
 			  <el-button type="success" @click="toCreate">创建订单</el-button>
 			  <el-upload
 				class="avatar-uploader"
@@ -156,7 +156,7 @@
 	import GroupOrder from '../components/group-order.vue'
 	import { importFile } from '@/api/saleOrder';
 	import fileUrl from '@/assets/file/销售订单导入模板.xlsx';
-	
+	import { pullSalesOrder  } from '@/api/saleOrder';
 	export default {
 		props: {
 			selection:Array
@@ -169,37 +169,37 @@
     data() {
       // 默认表单数据
       const defaultWhere = {
-		 code:'',
-		 productCode:'',
-		 customerName:'',
-		 lineNumber:'',
-		 model:'',
-		 brandNo:'',
-		 orderSource:'',
-		 orderType:'',
-		 proStu:'',
-		 orderLibraryType:'',
-		 salesman:'',
+			 code:'',
+			 productCode:'',
+			 customerName:'',
+			 lineNumber:'',
+			 model:'',
+			 brandNo:'',
+			 orderSource:'',
+			 orderType:'',
+			 proStu:'',
+			 orderLibraryType:'',
+			 salesman:'',
       };
       return {
-		fileUrl,
-        // 表单数据
-        where: { ...defaultWhere },
-        time:[],
-		fileList:[],
-		awaitProcuct:[
-			{value:1,label:'待排产'}
-		],
-		alreadyProcuct:[
-			{value:0,label:'所有状态'},
-			{value:2,label:'待发布'},
-			{value:3,label:'发布失败'},
-			{value:4,label:'待生产'},
-			{value:5,label:'生产中'},
-			{value:6,label:'已完成'},
-			{value:7,label:'已延期'}
-		],
-		chooseName:'first'
+				fileUrl,
+						// 表单数据
+						where: { ...defaultWhere },
+						time:[],
+				fileList:[],
+				awaitProcuct:[
+					{value:1,label:'待排产'}
+				],
+				alreadyProcuct:[
+					{value:0,label:'所有状态'},
+					{value:2,label:'待发布'},
+					{value:3,label:'发布失败'},
+					{value:4,label:'待生产'},
+					{value:5,label:'生产中'},
+					{value:6,label:'已完成'},
+					{value:7,label:'已延期'}
+				],
+				chooseName:'first'
       };
     },
     computed: {
@@ -254,6 +254,12 @@
 			}
 		 });
 	  },
+		
+		// 刷新订单
+		orderRefresh(){
+			 pullSalesOrder().then(res=>{
+			 })
+		},
 	  
 	   handleChange(file, fileList) {
 			this.fileList = fileList;
@@ -271,12 +277,12 @@
 	  //文件上传
 	  uploadFile (param) {
 		  let fd = new FormData();
-		  this.fileList.forEach(item=>{
-			  fd.append("importExcel",item.raw);
-		  })
-		importFile(fd).then(res=>{
-			this.$emit('search', this.where);
-		})
+				this.fileList.forEach(item=>{
+					fd.append("importExcel",item.raw);
+				})
+			importFile(fd).then(res=>{
+				this.$emit('search', this.where);
+			})
 	  },
 	  
     }

+ 107 - 0
src/views/saleOrder/components/plan-submit.vue

@@ -0,0 +1,107 @@
+<template>
+  <el-dialog
+    :visible.sync="visible"
+    title="计划提交"
+    width="60vw"
+    append-to-body
+  >
+    <div class="main_container">
+		<el-descriptions title="" :column="3" size="medium" border>
+		  <el-descriptions-item>
+			<template slot="label"> 计划编号 </template>
+			{{info.code}}
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 计划类型 </template>
+			{{getDictValue('订单计划类型', info.planType)}}
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 产品编码</template>
+			{{info.productCode}}
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 牌号 </template>
+			{{info.brandNo}}
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 型号 </template>
+			{{info.model}}
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 订单数量 </template>
+			{{info.codeNum}}
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 生产版本 </template>
+			{{info.producteVersionName}}
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 产品数量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 产品重量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 要求成型数量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 要求成型重量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 成型完成日期 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item :span="3">
+		  	<template slot="label"> 计划备注 </template>
+		  </el-descriptions-item>
+		</el-descriptions>
+	</div>
+    <div slot="footer" class="footer">
+      <div>
+        <el-button @click="cancel">取消</el-button>
+		<el-button >提交并发布</el-button>
+		<el-button type="primary">提交</el-button>
+      </div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+ import { getCode } from '@/api/codeManagement';
+ import dictMixins from '@/mixins/dictMixins';
+export default {
+	mixins: [dictMixins],
+		props: {
+			info:Object
+		},
+    data() {
+      return {
+        visible: false,
+		tableList:[]
+      };
+    },
+    computed: {
+      
+    },
+    created(){
+		this.requestDict('订单计划类型');
+    },
+    methods: {
+	  open () {
+	    this.visible = true;
+		this.getPlanCode()
+	  },
+      cancel () {
+        this.visible = false;
+      },
+	  async getPlanCode () {
+	  	const code = await getCode('product_code');
+	  	this.$set(this.info, 'code', code);
+	  }, 
+    }
+  };
+</script>
+<style lang="scss" scoped>
+  .basic-details-title{
+	  margin:10px 0
+  }
+</style>

+ 45 - 12
src/views/saleOrder/salesToProduction.vue

@@ -5,7 +5,7 @@
 			<div class="title-left">销售订单转生产计划</div>
 			<div class="title-right">
 				<el-button @click="cancel">取消</el-button>
-				<el-button type="primary" @click="toSubmit">
+				<el-button type="primary" @click="toSubmit" :loading="loading">
 				  提交计划
 				</el-button>
 			</div>
@@ -14,7 +14,7 @@
 			<el-row :gutter="24">
 				<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
 				  <el-form-item label="计划类型:">
-				     <DictSelection dictName="订单计划类型" clearable v-model="form.orderType">
+				     <DictSelection dictName="订单计划类型" clearable v-model="form.planType">
 				     </DictSelection>
 				  </el-form-item>
 				</el-col>
@@ -189,22 +189,25 @@
 				</el-col>
 			</el-row>
 		</el-form>
-       <AdditionalOrder ref="additionalRefs" :selectList="form.salesOrderVOS" @choose="confirmChoose"></AdditionalOrder>
+       <AdditionalOrder ref="additionalRefs" :productCode="form.productCode" :selectList="form.salesOrderVOS" @choose="confirmChoose"></AdditionalOrder>
 	   <ProductionVersion ref="versionRefs" @confirm="confirmVersion"></ProductionVersion>
+	   <PlanSubmit ref="submitRefs" :info="form"></PlanSubmit>
     </el-card>
   </div>
 </template>
 <script>
   import AdditionalOrder from './components/AdditionalOrder.vue';
+  import PlanSubmit from './components/plan-submit.vue';
   import ProductionVersion from '@/components/CreatePlan/ProductionVersion.vue'
-  import { productionToPlan  } from '@/api/saleOrder';	
+  import { productionToPlan , saveSaleToPlan  } from '@/api/saleOrder';	
   import dictMixins from '@/mixins/dictMixins';
   import { deepClone } from '@/utils/index'
   export default {
 	mixins: [dictMixins],
     components: {
 		AdditionalOrder,
-		ProductionVersion
+		ProductionVersion,
+		PlanSubmit
     },
     data () {
       return {
@@ -216,7 +219,8 @@
 		rules: {
 			producteVersionName:[{required: true,message: '请选择生产版本',trigger: 'change'}]
 		},
-		selection:[]
+		selection:[],
+		loading:false
       };
     },
     computed: {
@@ -249,7 +253,11 @@
 		   this.$router.go(-1)
 	   },
 	   toSubmit(){
-		   
+		   this.$refs.form.validate((valid) => {
+			 if (valid) {
+			   this.$refs.submitRefs.open()
+			 }
+		   });
 	   },
 	   sortTop (row) {
 	     if (row.priority <= 1) {
@@ -298,12 +306,37 @@
 		   const result = list.filter(
 		     i => this.form.salesOrderVOS.findIndex(p => p.id === i.id) === -1
 		   )
-		   console.log('筛选出的',result)
-		   // const sum = arr.reduce((pre,cur)=>{
-		   // return pre +cur
-		   // },2)
+		   // 取出在表格中并且不在弹窗中选中的数据 即取消选中的数据
+		   const del = this.form.salesOrderVOS.filter(
+		     i => list.findIndex(p => p.id === i.id) === -1
+		   )
+		  for(let i= this.form.salesOrderVOS.length-1;i>=0;i--){
+			  for(let j in del){
+				  if(this.form.salesOrderVOS[i].id === del[j].id){
+					  this.form.salesOrderVOS.splice(i,1);
+				  }
+			  }
+		  }
+		  this.form.salesOrderVOS = this.form.salesOrderVOS.concat(result)
+		  this.changeData()
+	   },
+	   changeData(){
+		   var productNum = 0
+		   var productWeight = 0
+		   var requiredFormingNum = 0
+		   // var requiredFormingWeight =  0
+		   // var formingCompletionDate = ''
+		   this.form.salesOrderVOS.map((item,index)=>{
+		     	item.priority = index+1
+				productNum = productNum + item.contractNum
+				productWeight = productWeight + Number(item.productSumWeight) 
+				requiredFormingNum = requiredFormingNum + item.requiredFormingNum
+				// requiredFormingWeight = requiredFormingWeight + Number(item.productUnitWeight) * Number(item.requiredFormingNum)
+		   })
+		   this.$set(this.form,'codeNum',this.form.salesOrderVOS.length)
+		   this.$set(this.form,'contractNum',productNum) 
+		   this.$set(this.form,'sumOrderWeight',productWeight.toFixed(2))
 	   }
-	   
     }
   };
 </script>