Преглед на файлове

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend-aps into dev

quwangxin преди 3 години
родител
ревизия
de44722611

+ 15 - 17
src/api/saleOrder/index.js

@@ -1,9 +1,9 @@
 import request from '@/utils/request';
 
 
-// 生成编码
-export async function getCode (code) {
-  const res = await request.get(`/main/codemanage/getCode/` + code, {});
+// 批量导入文件
+export async function importFile (data) {
+  const res = await request.post('/aps/salesorder/importFile',data);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -11,32 +11,30 @@ export async function getCode (code) {
 }
 
 
-/**
- * 获取当前登录的菜单、按钮权限
- */
-export async function getResourcesTree () {
-  const res = await request.get('/system/resources/getResourcesTree');
-  if (res.data.code == 0 && res.data.data) {
+// 获取销售订单列表
+export async function getPageList (data) {
+  const res = await request.post(`/aps/salesorder/page`, data);
+  if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
 }
 
-// 批量导入文件
-export async function importFile (data) {
-  const res = await request.post('/aps/salesorder/importFile',data);
+// 销售订单转生产计划
+export async function productionToPlan (data) {
+  const res = await request.post(`/aps/salesorder/productionPlanGenerator`, data);
   if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
 }
 
-
-// 获取销售订单列表
-export async function getPageList (data) {
-  const res = await request.get(`/aps/salesorder/page`, {params:data});
+// 生产版本列表
+export async function versionPage (params) {
+  let par = new URLSearchParams(params);
+  const res = await request.get( `/main/produceversion/page?` + par );
   if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
-}
+}

BIN
src/assets/file/601.xls


BIN
src/assets/file/销售订单导入模板.xlsx


+ 17 - 10
src/components/CreatePlan/ProductionVersion.vue

@@ -13,8 +13,8 @@
 	>
 	  <el-table-column label="生产版本" align="center" prop="name">
 	  </el-table-column>
-	  <el-table-column label="未完成工单数量" align="center" prop="name">
-	  </el-table-column>
+	  <el-table-column label="未完成工单数量" align="center" prop="num">
+	  </el-table-column>  
 	  <el-table-column label="未成型数量" align="center" prop="model">
 	  </el-table-column>
 	  <el-table-column label="预计完成时间" align="center" prop="model">
@@ -41,16 +41,15 @@
 </template>
 
 <script>
+	import { versionPage  } from '@/api/saleOrder';
 export default {
     data() {
       return {
         visible: false,
-		tableData:[
-			{id:1,name:'122',model:'型号1'},
-			{id:2,name:'222',model:'型号2'}
-		],
+		tableData:[],
 		loading:false,
-	      radio: '',
+	    radio: '',
+		current:null
       };
     },
     computed: {
@@ -60,19 +59,27 @@ export default {
     methods: {
 	  open () {
 	    this.visible = true;
+		this.getPageList()
+	  },
+	  getPageList(){
+		  versionPage({pageNum:1,size:-1}).then(res=>{
+			  this.tableData = res.list
+		  })
 	  },
       cancel () {
         this.visible = false;
-	     	this.radio = ''
+	    this.radio = ''
+		this.current = null
       },
 	  // 单击获取id
 	  single (row) {
+		  this.current = row
 	       this.radio = row.id;
 	  },
 	  /* 保存编辑 */
 	  save() {
-	     console.log('this.radio',this.radio)
-		 this.visible = false;
+	  	 this.visible = false;
+		 this.$emit('confirm',this.current)
 	  },
 	  
     }

+ 3 - 2
src/enum/dict.js

@@ -14,7 +14,8 @@ export default {
   生产状态: 'production_status',
   按单按库: 'order_library',
   紧急程度: 'urgent_type',
-  订单计划类型: 'plan_type'
+  订单计划类型: 'plan_type',
+  交付要求: 'require_ments'
 };
 
-export const numberList = ['patrol_cycle'];
+export const numberList = ['patrol_cycle','order_library','order_type','require_ments','order_source','production_status'];

+ 144 - 0
src/utils/index.js

@@ -0,0 +1,144 @@
+
+/**
+ * This is just a simple version of deep copy
+ * Has a lot of edge cases bug
+ * If you want to use a perfect deep copy, use lodash's _.cloneDeep
+ * @param {Object} source
+ * @returns {Object}
+ */
+export function deepClone (source) {
+  if (!source && typeof source !== 'object') {
+    throw new Error('error arguments', 'deepClone')
+  }
+  const targetObj = source.constructor === Array ? [] : {}
+  Object.keys(source).forEach(keys => {
+    if (source[keys] && typeof source[keys] === 'object') {
+      targetObj[keys] = deepClone(source[keys])
+    } else {
+      targetObj[keys] = source[keys]
+    }
+  })
+  return targetObj
+}
+
+/**
+ * @description:封装方法:获取今天、昨天、明天
+ * @param {*} dates  0 今天   -1   -2
+ * @returns
+ */
+export function getDay (dates) {
+  var dd = new Date()
+  var n = dates || 0
+  dd.setDate(dd.getDate() + n)
+  var y = dd.getFullYear()
+  var m = dd.getMonth() + 1
+  var d = dd.getDate()
+  m = m < 10 ? '0' + m : m
+  d = d < 10 ? '0' + d : d
+  var day = y + '-' + m + '-' + d
+  return day
+}
+
+/**
+ * @description: 获取某月的起始、结束日期
+ * @param {*} val 年月 2023-01
+ * @returns
+ */
+export function getMonday (val) {
+  let date = new Date(val)
+  let new_year = date.getFullYear() // 取当前的年份
+  let month = date.getMonth()
+  let new_month = month + 1 // 取当前的月份
+  let mon = ''
+  let day = ''
+  if (month > 12) {
+    new_month -= 12 // 月份减
+    new_year++ // 年份增
+  }
+  let firstDay = new Date(new_year, new_month, 1) // 取当年当月中的第一天
+  let lastDay = new Date(firstDay.getTime() - 1000 * 60 * 60 * 24).getDate() // 获取当月最后一天日期
+  if (firstDay.getMonth() < 10) {
+    mon = '0' + firstDay.getMonth()
+  } else {
+    mon = firstDay.getMonth()
+  }
+  if (lastDay < 10) {
+    day = '0' + lastDay
+  } else {
+    day = lastDay
+  }
+  let startDate =
+    firstDay.getFullYear() + '-' + mon + '-' + '0' + firstDay.getDate()
+  let endDate = firstDay.getFullYear() + '-' + mon + '-' + day
+  let dateRange = [startDate, endDate]
+  return dateRange
+}
+
+/**
+ * @description: 获取本周起始日期
+ * @param {*} type s 周开始  e周结束
+ * @param {*} dates  0 本周
+ * @returns
+ */
+export function getDate (type, dates = 0) {
+  var now = new Date()
+  var nowTime = now.getTime()
+  var day = now.getDay()
+  var longTime = 24 * 60 * 60 * 1000
+  var n = longTime * 7 * (dates || 0)
+  if (type == 's') {
+    var dd = nowTime - (day - 1) * longTime + n
+  }
+  if (type == 'e') {
+    var dd = nowTime + (7 - day) * longTime + n
+  }
+  dd = new Date(dd)
+  var y = dd.getFullYear()
+  var m = dd.getMonth() + 1
+  var d = dd.getDate()
+  m = m < 10 ? '0' + m : m
+  d = d < 10 ? '0' + d : d
+  var day = y + '-' + m + '-' + d
+  return day
+}
+
+/**
+ * @description 获取最近 7天日期
+ * @returns days
+ */
+export function getRecent7Days () {
+  let days = []
+  for (let i = 0; i <= 24 * 6; i += 24) {
+    // 使用当天时间戳减去以前的时间毫秒(小时 * 分 * 秒 * 毫秒)
+    let dateItem = new Date(Date.now() - i * 60 * 60 * 1000)
+    let y = dateItem.getFullYear()
+    let m = dateItem.getMonth() + 1
+    let d = dateItem.getDate()
+    m = addDate0(m)
+    d = addDate0(d)
+    let valueItem = y + '-' + m + '-' + d
+    days.push(valueItem)
+  }
+  return days
+}
+// 给日期拼接 0
+function addDate0 (time) {
+  if (time.toString().length === 1) {
+    time = '0' + time.toString()
+  }
+  return time
+}
+
+//补零 000
+export function pushZero (num) {
+  let count = 3 - String(num).length
+  if (count > 0) {
+    return new Array(count).fill('0').join('') + num
+  }
+  return num
+}
+
+//表格分页 序号连续
+export function tableIndex (index, page, size) {
+  return index + 1 + size * (page - 1)
+}

+ 211 - 50
src/views/saleOrder/components/AdditionalOrder.vue

@@ -9,57 +9,56 @@
 		<el-row :gutter="15">
 			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
 			  <el-form-item label="销售订单号:">
-			     <el-input clearable :maxlength="20" v-model="form.ddh"/>
+			     <el-input clearable :maxlength="20" v-model="form.code"/>
 			  </el-form-item>
 			</el-col>
 			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
 			  <el-form-item label="订单类型:">
-					<DictSelection dictName="订单类型" clearable v-model="form.staus">
+					<DictSelection dictName="订单类型" clearable v-model="form.orderType">
 					</DictSelection>
 			  </el-form-item>
 			</el-col>
 			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
 			  <el-form-item label="按单按库:">
-			  	<DictSelection dictName="按单按库" clearable v-model="form.staus">
+			  	<DictSelection dictName="按单按库" clearable v-model="form.orderLibraryType">
 			  	</DictSelection>
 			  </el-form-item>
 			</el-col>
+			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+			  <el-form-item label-width="0px">
+			  	  <el-button
+			  	  	type="primary"
+			  	  	icon="el-icon-search"
+			  	  	class="ele-btn-icon"
+			  	  	@click="search"
+			  	  	size="small"
+			  	  >
+			  	  	查询
+			  	  </el-button>
+			  	   <el-button @click="reset"
+			  	  	 icon="el-icon-refresh-left"
+			  	  	 size="small"
+			  	  	 type="primary"
+			  	   >重置</el-button>
+			  </el-form-item>
+			</el-col>
 		</el-row>
-	</el-form>
-	<el-table
-	  :data="tableList"
-	  border
+	</el-form>	
+	<ele-pro-table
+	  ref="table"
+	  :columns="columns"
+	  :datasource="datasource"
+	  :selection.sync="selection"
+	  cache-key="systemRoleTable"
+	  row-key="id"
+	  @done="setSelect"
 	>
-	  <el-table-column label="序号" align="center" width="60">
-		<template slot-scope="scope">
-		  <span>{{ scope.$index + 1 }}</span>
-		</template>
-	  </el-table-column>
-	  <el-table-column label="销售订单号" align="center" prop="name">
-	  </el-table-column>
-	  <el-table-column label="行号" align="center" prop="name">
-	  </el-table-column>
-	  <el-table-column label="合同数量" align="center" prop="model">
-	  </el-table-column>
-	  <el-table-column label="合同重量" align="center" prop="model">
-	  </el-table-column>
-	  <el-table-column label="按单按库" align="center" prop="model">
-	  </el-table-column>
-	  <el-table-column label="订单类型" align="center" prop="model">
-	  </el-table-column>
-	  <el-table-column label="交付日期" align="center" prop="model">
-	  </el-table-column>
-	  <el-table-column label="下达日期" align="center" prop="measuringUnit">
-	  </el-table-column>
-	  <el-table-column label="客户名称" align="center" prop="measuringUnit">
-	  </el-table-column>
-	  <el-table-column label="业务员" align="center" prop="measuringUnit">
-	  </el-table-column>
-	  <el-table-column label="交付要求" align="center" prop="measuringUnit">
-	  </el-table-column>
-	  <el-table-column type="selection" align="center">
-	  </el-table-column>
-	</el-table>
+		<!-- <template v-slot:name='{row}'>
+			<el-link :underline="false" @click="openDetails(row)">
+			  {{ row.name }}
+			</el-link>
+		</template> -->
+	</ele-pro-table>
 
     <template v-slot:footer>
       <el-button @click="cancel">取消</el-button>
@@ -71,18 +70,145 @@
 </template>
 
 <script>
+	import { getPageList  } from '@/api/saleOrder';
+	import dictMixins from '@/mixins/dictMixins';
 export default {
+	mixins: [dictMixins],
+	props: {
+		selectList:Array
+	},
     data() {
       return {
+		columns: [
+		  {
+		    width: 45,
+		    type: 'selection',
+		    columnKey: 'selection',
+		    align: 'center',
+			reserveSelection: true
+		  },
+		  {
+		    columnKey: 'index',
+		    label: '序号',
+		    type: 'index',
+		    width: 55,
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    fixed: 'left'
+		  },
+		  {
+		    prop: 'code',
+		    label: '销售订单号',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110,
+		    slot: 'code'
+		  },
+		  {
+		    prop: 'lineNumber',
+		    label: '行号',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'contractNum',
+		    label: '合同数量',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'productSumWeight',
+		    label: '合同重量',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'orderLibraryType',
+		    label: '按单按库',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('按单按库', _row.orderLibraryType);
+			}
+		  },
+		  {
+		    prop: 'orderType',
+		    label: '订单类型',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('订单类型', _row.orderType);
+			}
+		  },
+		  {
+		    prop: 'orderSource',
+		    label: '订单来源',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('订单来源', _row.orderSource);
+			}
+		  },
+		  {
+		    prop: 'status',
+		    label: '生产状态',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('生产状态', _row.status);
+			}
+		  },
+		  {
+		    prop: 'createTime',
+		    label: '下达时间',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'deliveryTime',
+		    label: '交付日期',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'customerName',
+		    label: '客户名称',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'salesman',
+		    label: '业务员',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		   {
+		     prop: 'deliveryRequirements',
+		     label: '交付要求',
+		     align: 'center',
+		     showOverflowTooltip: true,
+		     minWidth: 110,
+				formatter: (_row, _column, cellValue) => {
+				  return this.getDictValue('交付要求', _row.deliveryRequirements);
+				}
+		   }
+		],
         visible: false,
-		tableList:[],
 		loading:false,
-		form:{
-			tableList:[
-				{name:'122',model:'型号1'},
-				{name:'222',model:'型号2'}
-			]
-		},
+		form:{},
+		selection:[],
+		tableList:[]
       };
     },
     computed: {
@@ -91,9 +217,47 @@ export default {
         return this.$store.state.theme.styleResponsive;
       }
     },
-    created(){
+    created () {
+      this.requestDict('按单按库');
+      this.requestDict('交付要求');
+      this.requestDict('订单类型');
+      this.requestDict('订单来源');
+      this.requestDict('生产状态');
     },
     methods: {
+	  /* 表格数据源 */
+	  async datasource ({ page, limit, where, order }) {
+	  		 const params = {
+	  			 size: limit,
+	  			 pageNum: page,
+	  			 status:[1],
+				 ...this.form
+	  		 }
+	  		const data = await getPageList(params)
+			this.tableList = data.list
+	  		return data
+	   },
+	   // 设置选中
+	   setSelect(){
+		   this.$nextTick(() => {
+			   this.tableList.forEach(row => {
+				   this.selectList.forEach(selected => {
+					   if (selected.id === row.id) {
+						   this.$refs.table.toggleRowSelection(row, true)
+					   }
+				   })
+			   })
+		   })
+	   },
+	   /* 搜索 */
+	   search() {
+	      this.$refs.table.reload({ page: 1, size:10 });
+	   },
+	   /*  重置 */
+	   reset() {
+	     this.form = {}
+	     this.search()
+	   },
 	  open () {
 	    this.visible = true;
 	  },
@@ -104,11 +268,8 @@ export default {
       },
 	  /* 保存编辑 */
 	  save() {
-	    this.$refs.form.validate((valid) => {
-	      if (!valid) {
-	        return false;
-	      }
-	    });
+	    this.$emit('choose',this.selection)
+		this.cancel()
 	  },
 	  
     }

+ 34 - 17
src/views/saleOrder/components/order-search.vue

@@ -51,7 +51,7 @@
 	</el-col>
 	<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
 	  <el-form-item label="生产状态:">
-			<el-select v-model="where.status" placeholder="请选择">
+			<el-select v-model="where.proStu" placeholder="请选择">
 				<el-option
 				   v-if="chooseName=='first'"
 					v-for="item in awaitProcuct"
@@ -123,8 +123,6 @@
 			  <el-button @click="goProduct">转生产计划</el-button>
 			  <el-button type="primary">订单刷新</el-button>
 			  <el-button type="success" @click="toCreate">创建订单</el-button>
-			  <!-- <el-button type="info" @click="toGroup">订单组合</el-button> -->
-			  <!-- <el-button type="warning" @click="toImport">批量导入</el-button> -->
 			  <el-upload
 				class="avatar-uploader"
 				action="#"
@@ -135,7 +133,9 @@
 			  >
 				<el-button type="warning">批量导入</el-button>
 			  </el-upload>
-			  <el-button type="info">下载模板</el-button>
+			  <el-button type="info"> 
+			      <a :href="fileUrl" download="销售订单导入模板.xls" class="button-link">下载模板</a>
+			  </el-button>
 			  <el-button type="danger">批量删除</el-button>
 		  </el-form-item>			  
 	  </el-col>
@@ -155,9 +155,11 @@
 	import CreateOrder from '../components/create-order.vue'
 	import GroupOrder from '../components/group-order.vue'
 	import { importFile } from '@/api/saleOrder';
+	import fileUrl from '@/assets/file/销售订单导入模板.xlsx';
+	
 	export default {
 		props: {
-			
+			selection:Array
 		},
 		components: {
 		  ImportException,
@@ -175,27 +177,27 @@
 		 brandNo:'',
 		 orderSource:'',
 		 orderType:'',
-		 status:'',
+		 proStu:'',
 		 orderLibraryType:'',
 		 salesman:'',
-		 
-		 
       };
       return {
+		fileUrl,
         // 表单数据
         where: { ...defaultWhere },
         time:[],
 		fileList:[],
 		awaitProcuct:[
-			{value:0,label:'待排产'}
+			{value:1,label:'待排产'}
 		],
 		alreadyProcuct:[
-			{value:1,label:'待发布'},
-			{value:2,label:'发布失败'},
-			{value:3,label:'待生产'},
-			{value:4,label:'生产中'},
-			{value:5,label:'已完成'},
-			{value:6,label:'已延期'}
+			{value:0,label:'所有状态'},
+			{value:2,label:'待发布'},
+			{value:3,label:'发布失败'},
+			{value:4,label:'待生产'},
+			{value:5,label:'生产中'},
+			{value:6,label:'已完成'},
+			{value:7,label:'已延期'}
 		],
 		chooseName:'first'
       };
@@ -222,7 +224,7 @@
       },
       /*  重置 */
       reset() {
-		this.time = []
+	    this.time = []
         this.where = { ...this.defaultWhere };
         this.search();
       },
@@ -236,8 +238,20 @@
 		 this.$refs.groupDialog.open() 
 	  },
 	  goProduct(){
+		 if(!this.selection.length){
+			 return this.$message.warning('请先勾选一个或多个订单!')
+		 }
+		 const productCode = this.selection[0].productCode
+		 for(var i=0;i<this.selection.length;i++){
+			 if(productCode != this.selection[i].productCode){
+				 return this.$message.warning('产品编码不一致!')
+			 }
+		 }
 		 this.$router.push({
-		    path: '/saleOrder/salesToProduction'
+		    path: '/saleOrder/salesToProduction',
+			query:{
+				selection:JSON.stringify(this.selection)
+			}
 		 });
 	  },
 	  
@@ -278,4 +292,7 @@
 		display: inline-block;
 		margin: 0 10px;
 	}
+	.button-link{
+		color: #fff;
+	}
 </style>

+ 67 - 49
src/views/saleOrder/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never" v-loading="loading">
-      <order-search ref="searchRefs" @search="reload"> </order-search>
+      <order-search ref="searchRefs" @search="reload" :selection="selection"> </order-search>
 	  <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
 	    <el-tab-pane label="待排产" name="first"></el-tab-pane>
 	    <el-tab-pane label="已排产" name="second"></el-tab-pane>
@@ -11,7 +11,9 @@
         ref="table"
         :columns="columns"
         :datasource="datasource"
+		:selection.sync="selection"
         cache-key="systemRoleTable"
+		row-key="id"
       >
 		<template v-slot:name='{row}'>
 			<el-link :underline="false" @click="openDetails(row)">
@@ -53,6 +55,7 @@
   import OrderDetail from './components/order-detail.vue';
   import { getPageList  } from '@/api/saleOrder';
   import dictMixins from '@/mixins/dictMixins';
+  
   export default {
     mixins: [dictMixins],
     components: {
@@ -87,125 +90,125 @@
             slot: 'code'
           },
           {
-            prop: 'name',
+            prop: 'lineNumber',
             label: '行号',
             align: 'center',
             showOverflowTooltip: true,
-            minWidth: 110,
-			slot: 'name'
+            minWidth: 110
           },
           {
-            prop: 'groupName',
+            prop: 'productCode',
             label: '产品编码',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
           },
           {
-            prop: 'categoryName',
+            prop: 'brandNo',
             label: '牌号',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
           },
           {
-            prop: 'ruleName',
+            prop: 'model',
             label: '型号',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
           },
           {
-            prop: 'autoOrder',
+            prop: 'contractNum',
             label: '合同数量',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
           },
           {
-            prop: 'qjsl',
+            prop: 'lackNum',
             label: '欠交数量',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
           },
 		  {
-		    prop: 'ankad',
+		    prop: 'orderLibraryType',
 		    label: '按单按库',
 		    align: 'center',
 		    showOverflowTooltip: true,
-		    minWidth: 110
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('按单按库', _row.orderLibraryType);
+			}
 		  },
 		  {
-		    prop: 'jfyq',
+		    prop: 'deliveryRequirements',
 		    label: '交付要求',
 		    align: 'center',
 		    showOverflowTooltip: true,
-		    minWidth: 110
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('交付要求', _row.deliveryRequirements);
+			}
 		  },
 		  {
-		    prop: 'ddlx',
+		    prop: 'orderType',
 		    label: '订单类型',
 		    align: 'center',
 		    showOverflowTooltip: true,
-		    minWidth: 110
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('订单类型', _row.orderType);
+			}
 		  },
 		  {
-		    prop: 'ddly',
+		    prop: 'orderSource',
 		    label: '订单来源',
 		    align: 'center',
 		    showOverflowTooltip: true,
-		    minWidth: 110
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('订单来源', _row.orderSource);
+			}
 		  },
 		  {
-		    prop: 'sczt',
+		    prop: 'status',
 		    label: '生产状态',
 		    align: 'center',
 		    showOverflowTooltip: true,
-		    minWidth: 110
+		    minWidth: 110,
+			formatter: (_row, _column, cellValue) => {
+			  return this.getDictValue('生产状态', _row.status);
+			}
 		  },
 		  {
-		    prop: 'xdsj',
+		    prop: 'createTime',
 		    label: '下达时间',
 		    align: 'center',
 		    showOverflowTooltip: true,
 		    minWidth: 110
 		  },
 		  {
-		    prop: 'jfrq',
+		    prop: 'deliveryTime',
 		    label: '交付日期',
 		    align: 'center',
 		    showOverflowTooltip: true,
 		    minWidth: 110
 		  },
 		  {
-		    prop: 'khmc',
+		    prop: 'customerName',
 		    label: '客户名称',
 		    align: 'center',
 		    showOverflowTooltip: true,
 		    minWidth: 110
 		  },
 		  {
-		    prop: 'ywy',
+		    prop: 'salesman',
 		    label: '业务员',
 		    align: 'center',
 		    showOverflowTooltip: true,
 		    minWidth: 110
 		  },
-		  {
-		    prop: 'zhbm',
-		    label: '组合编码',
-		    align: 'center',
-		    showOverflowTooltip: true,
-		    minWidth: 110
-		  },
-		  {
-		    prop: 'jhdh',
-		    label: '计划单号',
-		    align: 'center',
-		    showOverflowTooltip: true,
-		    minWidth: 110
-		  },
 		  {
 		    columnKey: 'action',
 		    label: '操作',
@@ -219,33 +222,48 @@
         ],
         // 加载状态
         loading: false,
-		activeName:"first"
+		activeName:"first",
+		selection:[]
       };
     },
     computed: {},
-    created () {
-      this.requestDict('规则状态');
+    created () {     
+	  this.requestDict('按单按库');
+	  this.requestDict('交付要求');
+	  this.requestDict('订单类型');
+	  this.requestDict('订单来源');
+	  this.requestDict('生产状态');
     },
     methods: {
 	
       /* 表格数据源 */
-      datasource ({ page, limit, where, order }) {
-		  return []
-    //     return getPageList({
-    //       pageNum: page,
-    //       size: limit,
-    //       ...where,
-		  
-    //     });
+      async datasource ({ page, limit, where, order }) {
+			if(this.activeName=='first'){
+				 where.status = [1]
+			 }else{
+				 if(where.proStu){
+					 where.status = [where.proStu]
+				 }else{
+					 where.status = [2,3,4,5,6,7]
+				 }
+			 }
+			 const params = {
+				 size: limit,
+				 pageNum: page,
+				 ...where
+			 }
+			const data = await getPageList(params)
+			return data
       },
 
       /* 刷新表格 */
       reload (where) {
-        this.$refs.table.reload({ page: 1, where, ruleType: 2 });
+        this.$refs.table.reload({ page: 1, limit:10,  where });
       },
 	  
 	  handleClick(tab, event) {
 		  this.$refs.searchRefs.setData(this.activeName)
+		  this.reload()
 		  // console.log('activeName',this.activeName);
 	  },
 	  openDetails(row){

+ 110 - 57
src/views/saleOrder/salesToProduction.vue

@@ -14,48 +14,48 @@
 			<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.type">
+				     <DictSelection dictName="订单计划类型" clearable v-model="form.orderType">
 				     </DictSelection>
 				  </el-form-item>
 				</el-col>
 				<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-				  <el-form-item label="生产版本:" prop="edition">
-				     <el-input @click.native="openVersion" placeholder="请选择生产版本" readonly v-model="form.edition"></el-input>
+				  <el-form-item label="生产版本:" prop="producteVersionName">
+				     <el-input @click.native="openVersion" placeholder="请选择生产版本" readonly v-model="form.producteVersionName"></el-input>
 				  </el-form-item>
 				</el-col>
 				<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-				  <el-form-item label="产线:" prop="productline">
+				  <el-form-item label="产线:">
 				     <el-input v-model="form.productline"></el-input>
 				  </el-form-item>
 				</el-col>
 				<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-				  <el-form-item label="使用改型:" prop="remodel">
-				     <el-checkbox v-model="form.remodel"></el-checkbox>
+				  <el-form-item label="使用改型:" prop="modification">
+				     <el-checkbox v-model="form.modification" :true-label='1' :false-label='0'></el-checkbox>
 				  </el-form-item>
 				</el-col>
 			</el-row>
 			<el-row :gutter="24" class="row-intro">
 				<el-col v-bind="styleResponsive ? { lg: 3, md: 12 } : { span: 3 }">
-				  <el-form-item label="销售单数量:">3</el-form-item>
+				  <el-form-item label="销售单数量:">{{form.codeNum}}</el-form-item>
 				</el-col>
 				<el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
-				  <el-form-item label="订单总数量:">10000</el-form-item>
+				  <el-form-item label="订单总数量:">{{form.contractNum}}</el-form-item>
 				</el-col>
 				<el-col v-bind="styleResponsive ? { lg: 3, md: 12 } : { span: 3 }">
-				  <el-form-item label="订单总重量:">3021.23</el-form-item>
+				  <el-form-item label="订单总重量:">{{form.sumOrderWeight}}</el-form-item>
 				</el-col>
 				<el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
-				  <el-form-item label="产品编码:">W30000004536</el-form-item>
+				  <el-form-item label="产品编码:">{{form.productCode}}</el-form-item>
 				</el-col>
 				<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-				  <el-form-item label="牌号|型号:">YL10.2|BΦ16.0*330(MG)</el-form-item>
+				  <el-form-item label="牌号|型号:">{{form.brandNo}}|{{form.model}}</el-form-item>
 				</el-col>
 				<el-col v-bind="styleResponsive ? { lg: 3, md: 12 } : { span: 3 }">
-				  <el-form-item label="库存数量:">1523</el-form-item>
+				  <el-form-item label="库存数量:">{{form.stockCountBase}}</el-form-item>
 				</el-col>
 			</el-row>
 			<el-table
-			  :data="form.tableData"
+			  :data="form.salesOrderVOS"
 			  border
 			>
 			  <el-table-column label="序号" align="center" width="60">
@@ -63,29 +63,30 @@
 			      <span>{{ scope.$index + 1 }}</span>
 			    </template>
 			  </el-table-column>
-			  <el-table-column label="销售订单号" align="center" prop="name" width="120">
+			  <el-table-column label="销售订单号" align="center" prop="code" width="120">
 			  </el-table-column>
-			  <el-table-column label="行号" align="center" prop="name">
+			  <el-table-column label="行号" align="center" prop="lineNumber">
 			  </el-table-column>
-			  <el-table-column label="合同数量" align="center" prop="model">
+			  <el-table-column label="合同数量" align="center" prop="contractNum">
 			  </el-table-column>
-			  <el-table-column label="合同重量" align="center" prop="model">
+			  <el-table-column label="合同重量" align="center" prop="productSumWeight">
 			  </el-table-column>
-			  <el-table-column label="欠交数量" align="center" prop="model">
+			  <el-table-column label="欠交数量" align="center" prop="lackNum">
 			  </el-table-column>
-			  <el-table-column label="计划生产数" align="center" prop="pNum"  width="120">
+			  <el-table-column label="计划生产数" align="center" prop="productNum"  width="120">
 			    <template slot-scope="scope">
 			      <el-form-item
 			          label-width="0px"
-			         :prop="'tableData.'+ scope.$index + '.pNum'"
+			         :prop="'salesOrderVOS.'+ scope.$index + '.productNum'"
 			         :rules="{
 			           required: true,
 			           message: '请输入计划生产数',
 			           trigger: 'blur'
 			         }"
+					 class="table-item"
 			       >
 			         <el-input
-			            v-model.number="scope.row.pNum"
+			            v-model.number="scope.row.productNum"
 			            size="small"
 			            oninput="value=value.replace(/[^\d]/g,'')"
 			            style="width: 100%"
@@ -94,19 +95,20 @@
 			      </el-form-item>
 			    </template>
 			  </el-table-column>
-			  <el-table-column label="要求成型数量" align="center" prop="mNum"  width="120">
+			  <el-table-column label="要求成型数量" align="center" prop="requiredFormingNum"  width="120">
 			    <template slot-scope="scope">
 			      <el-form-item
 			          label-width="0px"
-			         :prop="'tableData.'+ scope.$index + '.mNum'"
+			         :prop="'salesOrderVOS.'+ scope.$index + '.requiredFormingNum'"
 			         :rules="{
 			           required: true,
 			           message: '请输入要求成型数量',
 			           trigger: 'blur'
 			         }"
+					 class="table-item"
 			       >
 			         <el-input
-			            v-model.number="scope.row.mNum"
+			            v-model.number="scope.row.requiredFormingNum"
 			            size="small"
 			            oninput="value=value.replace(/[^\d]/g,'')"
 			            style="width: 100%"
@@ -115,26 +117,33 @@
 			      </el-form-item>
 			    </template>
 			  </el-table-column>
-			  <el-table-column label="按单按库" align="center" prop="model">
+			  <el-table-column label="按单按库" align="center" prop="orderLibraryType">
+				  <template slot-scope="{row}">
+				      {{getDictValue('按单按库', row.orderLibraryType)}}
+				  </template>
 			  </el-table-column>
-			  <el-table-column label="订单类型" align="center" prop="model">
+			  <el-table-column label="订单类型" align="center" prop="orderType">
+				  <template slot-scope="{row}">
+				      {{getDictValue('订单类型', row.orderType)}}
+				  </template>
 			  </el-table-column>
-			  <el-table-column label="交付日期" align="center" prop="measuringUnit">
+			  <el-table-column label="交付日期" align="center" prop="deliveryTime" width="160">
 			  </el-table-column>
-			  <el-table-column label="要求成型日期" align="center" prop="date"  width="180">
+			  <el-table-column label="要求成型日期" align="center" prop="reqMoldTime"  width="180">
 				  <template slot-scope="scope">
 				    <el-form-item
 				        label-width="0px"
-				       :prop="'tableData.'+ scope.$index + '.date'"
+				       :prop="'salesOrderVOS.'+ scope.$index + '.reqMoldTime'"
 				       :rules="{
 				         required: true,
 				         message: '请选择要求成型日期',
 				         trigger: 'blur'
 				       }"
+					   class="table-item"
 				     >
 				       <el-date-picker
 				          style="width: 100%;"
-				          v-model="scope.row.date"
+				          v-model="scope.row.reqMoldTime"
 				          type="date"
 				          placeholder="选择日期"
 				          value-format="yyyy-MM-dd">
@@ -142,11 +151,14 @@
 				    </el-form-item>
 				  </template>
 			  </el-table-column>
-			  <el-table-column label="客户名称" align="center" prop="measuringUnit">
+			  <el-table-column label="客户名称" align="center" prop="customerName">
 			  </el-table-column>
-			  <el-table-column label="业务员" align="center" prop="measuringUnit">
+			  <el-table-column label="业务员" align="center" prop="salesman">
 			  </el-table-column>
-			  <el-table-column label="交付要求" align="center" prop="measuringUnit">
+			  <el-table-column label="交付要求" align="center" prop="deliveryRequirements">
+				  <template slot-scope="{row}">
+				      {{getDictValue('交付要求', row.deliveryRequirements)}}
+				  </template>
 			  </el-table-column>
 			  <el-table-column prop="priority" label="优先级" width="100" align="center">
 			    <template slot-scope="{ row }">
@@ -172,20 +184,24 @@
 			<el-row :gutter="24">
 				<el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
 				  <el-form-item label="计划备注:">
-					  <el-input type="textarea" :rows="4" v-model="form.remark" resize='none'></el-input>
+					  <el-input type="textarea" :rows="4" v-model="form.notes" resize='none'></el-input>
 				  </el-form-item>
 				</el-col>
 			</el-row>
 		</el-form>
-       <AdditionalOrder ref="additionalRefs"></AdditionalOrder>
-	   <ProductionVersion ref="versionRefs"></ProductionVersion>
+       <AdditionalOrder ref="additionalRefs" :selectList="form.salesOrderVOS" @choose="confirmChoose"></AdditionalOrder>
+	   <ProductionVersion ref="versionRefs" @confirm="confirmVersion"></ProductionVersion>
     </el-card>
   </div>
 </template>
 <script>
   import AdditionalOrder from './components/AdditionalOrder.vue';
   import ProductionVersion from '@/components/CreatePlan/ProductionVersion.vue'
+  import { productionToPlan  } from '@/api/saleOrder';	
+  import dictMixins from '@/mixins/dictMixins';
+  import { deepClone } from '@/utils/index'
   export default {
+	mixins: [dictMixins],
     components: {
 		AdditionalOrder,
 		ProductionVersion
@@ -193,16 +209,14 @@
     data () {
       return {
          form:{
-			tableData:[
-				{name:'122',model:'型号1',sort:1},
-				{name:'222',model:'型号2',sort:2}
-			]
+			producteVersionId:'', 
+			salesOrderVOS:[]
         },
          // 表单验证规则
 		rules: {
-			edition:[{required: true,message: '请选择生产版本',trigger: 'blur'}],
-			productline:[{required: true,message: '请选择产线',trigger: 'blur'}],
+			producteVersionName:[{required: true,message: '请选择生产版本',trigger: 'change'}]
 		},
+		selection:[]
       };
     },
     computed: {
@@ -211,7 +225,26 @@
         return this.$store.state.theme.styleResponsive;
       }
     },
+	created() {
+		this.requestDict('按单按库'); 
+		this.requestDict('订单类型');
+		this.requestDict('交付要求');
+		this.selection = JSON.parse(this.$route.query.selection)
+		const list = []
+		this.selection.map(item=>{
+			list.push(item.id)
+		})
+		this.getSaleInfo(list)
+	},
 	methods: {
+	   getSaleInfo(params){
+		    productionToPlan(params).then(res=>{
+				this.form = deepClone(res)
+				this.form.salesOrderVOS.map((item,index)=>{
+					item.priority = index+1
+				})
+			})
+	   },
        cancel(){
 		   this.$router.go(-1)
 	   },
@@ -219,42 +252,58 @@
 		   
 	   },
 	   sortTop (row) {
-	     if (row.sort <= 1) {
+	     if (row.priority <= 1) {
 	       return;
 	     }
-	     let rowN = this.form.tableData.find((n) => n.sort == row.sort - 1);
-	     rowN.sort += 1;
-	     row.sort -= 1;
-	     this.form.tableData.sort((a, b) => {
-	       return a.sort - b.sort;
+	     let rowN = this.form.salesOrderVOS.find((n) => n.priority == row.priority - 1);
+	     rowN.priority += 1;
+	     row.priority -= 1;
+	     this.form.salesOrderVOS.sort((a, b) => {
+	       return a.priority - b.priority;
 	     });
 	   },
 	   sortBottom (row) {
-	     if (row.sort >= this.form.tableData.length) {
+	     if (row.priority >= this.form.salesOrderVOS.length) {
 	       return;
 	     }
-	     let rowN = this.form.tableData.find((n) => n.sort == row.sort + 1);
-	     rowN.sort -= 1;
-	     row.sort += 1;
-	     this.form.tableData.sort((a, b) => {
-	       return a.sort - b.sort;
+	     let rowN = this.form.salesOrderVOS.find((n) => n.priority == row.priority + 1);
+	     rowN.priority -= 1;
+	     row.priority += 1;
+	     this.form.salesOrderVOS.sort((a, b) => {
+	       return a.priority - b.priority;
 	     });
 	   },
 	   againSort () {
-	     this.form.tableData.forEach((n, index) => {
-	       n.sort = index + 1;
+	     this.form.salesOrderVOS.forEach((n, index) => {
+	       n.priority = index + 1;
 	     });
 	   },
 	   // 删除产品
 	   handleDeleteItem (index) {
-	     this.form.tableData.splice(index, 1)
+	     this.form.salesOrderVOS.splice(index, 1)
 	   },
 	   addEquipment(){
 		   this.$refs.additionalRefs.open()
 	   },
 	   openVersion(){
 		  this.$refs.versionRefs.open() 
+	   },
+	   confirmVersion(data){
+		   this.$set(this.form,'producteVersionName',data.name)
+		   this.$set(this.form,'producteVersionId',data.id)
+	   },
+	   
+	   confirmChoose(list){
+		   // 取出在弹窗中选中并且不在表格中的数据
+		   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)
 	   }
+	   
     }
   };
 </script>
@@ -277,6 +326,7 @@
 	}
 	.row-intro{
 		border-bottom: 1px dashed #ccc;
+		margin-bottom: 20px;
 	}
 	.sort-wrap {
 	  i {
@@ -300,4 +350,7 @@
 		  margin:10px 0;
 		  cursor: pointer;
 	}
+	.table-item{
+		margin-bottom: 0;
+	}
 </style>