Browse Source

预销售订单交期预估

lishougeng 1 year ago
parent
commit
1e1a00aa88

+ 44 - 0
src/api/aps/capacity.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询工厂月产能定义列表
+export function listCapacity(query) {
+  return request({
+    url: '/aps/capacity/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询工厂月产能定义详细
+export function getCapacity(id) {
+  return request({
+    url: '/aps/capacity/' + id,
+    method: 'get'
+  })
+}
+
+// 新增工厂月产能定义
+export function addCapacity(data) {
+  return request({
+    url: '/aps/capacity',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改工厂月产能定义
+export function updateCapacity(data) {
+  return request({
+    url: '/aps/capacity',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除工厂月产能定义
+export function delCapacity(id) {
+  return request({
+    url: '/aps/capacity/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps/customers.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询客户管理列表
+export function listCustomers(query) {
+  return request({
+    url: '/aps/customers/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询客户管理详细
+export function getCustomers(id) {
+  return request({
+    url: '/aps/customers/' + id,
+    method: 'get'
+  })
+}
+
+// 新增客户管理
+export function addCustomers(data) {
+  return request({
+    url: '/aps/customers',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户管理
+export function updateCustomers(data) {
+  return request({
+    url: '/aps/customers',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户管理
+export function delCustomers(id) {
+  return request({
+    url: '/aps/customers/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps/expectation.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询交付预期列表
+export function listExpectation(query) {
+  return request({
+    url: '/aps/expectation/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询交付预期详细
+export function getExpectation(id) {
+  return request({
+    url: '/aps/expectation/' + id,
+    method: 'get'
+  })
+}
+
+// 新增交付预期
+export function addExpectation(data) {
+  return request({
+    url: '/aps/expectation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改交付预期
+export function updateExpectation(data) {
+  return request({
+    url: '/aps/expectation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除交付预期
+export function delExpectation(id) {
+  return request({
+    url: '/aps/expectation/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps/factory_capacity_detail.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询工厂月产能定义详情列表
+export function listFactory_capacity_detail(query) {
+  return request({
+    url: '/aps/factory_capacity_detail/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询工厂月产能定义详情详细
+export function getFactory_capacity_detail(id) {
+  return request({
+    url: '/aps/factory_capacity_detail/' + id,
+    method: 'get'
+  })
+}
+
+// 新增工厂月产能定义详情
+export function addFactory_capacity_detail(data) {
+  return request({
+    url: '/aps/factory_capacity_detail',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改工厂月产能定义详情
+export function updateFactory_capacity_detail(data) {
+  return request({
+    url: '/aps/factory_capacity_detail',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除工厂月产能定义详情
+export function delFactory_capacity_detail(id) {
+  return request({
+    url: '/aps/factory_capacity_detail/' + id,
+    method: 'delete'
+  })
+}

+ 123 - 0
src/api/aps/presalesorder.js

@@ -0,0 +1,123 @@
+import request from '@/utils/request';
+import store from '@/store';
+import Vue from 'vue';
+
+// 查询销售订单列表
+export async function listSalesorder(query)  {
+  console.log(query);
+  const res = await request.post('/aps/presalesorder/page', query);
+  if (res.data.code == '0') {
+    return res.data.data;
+  }
+  return Promise.reject(res.data); //报错处理
+}
+
+
+// 查询销售订单预估列表
+export async function listSalesorderExpect(data) {
+  console.log(data);
+  const res = await request.post('/aps/presalesorder/expect', data);
+  console.log(res)
+  if (res.status == 200) {
+      return res.data;
+    }
+  return Promise.reject(res.data); //报错处理
+}
+
+// 查询销售订单预估列表
+export async function listSalesorderExpectAll() {
+  const res = await request.get('/aps/presalesorder/expectAll',null);
+  console.log(res)
+  if (res.status == 200) {
+    return res.data;
+  }
+  return Promise.reject(res.data); //报错处理
+
+}
+
+// 查询销售订单预估列表
+export async function listSalesorderOccupyRes(query) {
+  console.log(query);
+  const res = await request.post('/aps/presalesorder/queryOccupyRes',query);
+  console.log(res);
+  if (res.status == 200) {
+    return res.data;
+  }
+  return Promise.reject(res.data); //报错处理
+}
+
+
+// 查询销售订单预估列表
+export async function occupyRes(data) {
+  console.log(data);
+  const res = await request.post('/aps/presalesorder/occupyRes',data);
+  console.log(res);
+  if (res.data.code == '0') {
+    return res.data;
+  }
+  return Promise.reject(res.data); //报错处理
+
+}
+
+// 一次性占用资源
+export async function occupyAllRes(param) {
+
+  console.log("occupyAllRes");
+
+  const res = await request.post('/aps/presalesorder/occupyAllRes',param);
+  console.log(res);
+  if (res.data.code == '0') {
+    return res.data;
+  }
+  return Promise.reject(res.data); //报错处理
+}
+
+// 一次性占用资源
+// export async function occupyAllRes(data) {
+//   console.log(data);
+//   return await request({
+//     url: '/aps/presalesorder/occupyAllRes',
+//     method: 'post',
+//     data: JSON.stringify(data)
+//   })
+// }
+
+// 查询销售订单详细
+export async function getSalesorder(id) {
+  const res = await request.get('/aps/presalesorder/' + id,null);
+  console.log(res);
+  if (res.data.code == '0') {
+    console.log(0);
+    return res.data;
+  }
+  return Promise.reject(res.data); //报错处理
+}
+
+// 新增销售订单
+export async function addSalesorder(data) {
+  const res = await request.post('/aps/presalesorder/addOne' ,data);
+  if (res.data.code == '0') {
+    return res.data.data;
+  }
+  return Promise.reject(res.data); //报错处理
+}
+
+// 修改销售订单
+export async function updateSalesorder(data) {
+  const res = await request.post('/aps/presalesorder/editOne',data);
+    if (res.data.code == '0') {
+      return res.data.data;
+    }
+    return Promise.reject(res.data); //报错处理
+
+}
+
+// 删除销售订单
+export async function delSalesorder(id) {
+  const res = await request.post('/aps/presalesorder/deleteOne/' + id ,null);
+    if (res.data.code == '0') {
+      return res.data.data;
+    }
+    return Promise.reject(res.data); //报错处理
+
+}

+ 44 - 0
src/api/aps_capacity/capacity.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS产能信息列表
+export function listCapacity(query) {
+  return request({
+    url: '/aps_capacity/capacity/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS产能信息详细
+export function getCapacity(sequenceId) {
+  return request({
+    url: '/aps_capacity/capacity/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS产能信息
+export function addCapacity(data) {
+  return request({
+    url: '/aps_capacity/capacity',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS产能信息
+export function updateCapacity(data) {
+  return request({
+    url: '/aps_capacity/capacity',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS产能信息
+export function delCapacity(sequenceId) {
+  return request({
+    url: '/aps_capacity/capacity/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_equipment/equipment.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS设备信息列表
+export function listEquipment(query) {
+  return request({
+    url: '/aps_equipment/equipment/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS设备信息详细
+export function getEquipment(sequenceId) {
+  return request({
+    url: '/aps_equipment/equipment/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS设备信息
+export function addEquipment(data) {
+  return request({
+    url: '/aps_equipment/equipment',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS设备信息
+export function updateEquipment(data) {
+  return request({
+    url: '/aps_equipment/equipment',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS设备信息
+export function delEquipment(sequenceId) {
+  return request({
+    url: '/aps_equipment/equipment/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_factory/factory.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS工厂信息列表
+export function listFactory(query) {
+  return request({
+    url: '/aps_factory/factory/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS工厂信息详细
+export function getFactory(sequenceId) {
+  return request({
+    url: '/aps_factory/factory/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS工厂信息
+export function addFactory(data) {
+  return request({
+    url: '/aps_factory/factory',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS工厂信息
+export function updateFactory(data) {
+  return request({
+    url: '/aps_factory/factory',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS工厂信息
+export function delFactory(sequenceId) {
+  return request({
+    url: '/aps_factory/factory/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_material_definition/definition.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询物料定义列表
+export function listDefinition(query) {
+  return request({
+    url: '/aps_material_definition/definition/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询物料定义详细
+export function getDefinition(id) {
+  return request({
+    url: '/aps_material_definition/definition/' + id,
+    method: 'get'
+  })
+}
+
+// 新增物料定义
+export function addDefinition(data) {
+  return request({
+    url: '/aps_material_definition/definition',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改物料定义
+export function updateDefinition(data) {
+  return request({
+    url: '/aps_material_definition/definition',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除物料定义
+export function delDefinition(id) {
+  return request({
+    url: '/aps_material_definition/definition/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_process_definition/definition.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询工艺定义列表
+export function listDefinition(query) {
+  return request({
+    url: '/aps_process_definition/definition/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询工艺定义详细
+export function getDefinition(id) {
+  return request({
+    url: '/aps_process_definition/definition/' + id,
+    method: 'get'
+  })
+}
+
+// 新增工艺定义
+export function addDefinition(data) {
+  return request({
+    url: '/aps_process_definition/definition',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改工艺定义
+export function updateDefinition(data) {
+  return request({
+    url: '/aps_process_definition/definition',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除工艺定义
+export function delDefinition(id) {
+  return request({
+    url: '/aps_process_definition/definition/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_product/product.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS产品信息列表
+export function listProduct(query) {
+  return request({
+    url: '/aps_product/product/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS产品信息详细
+export function getProduct(sequenceId) {
+  return request({
+    url: '/aps_product/product/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS产品信息
+export function addProduct(data) {
+  return request({
+    url: '/aps_product/product',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS产品信息
+export function updateProduct(data) {
+  return request({
+    url: '/aps_product/product',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS产品信息
+export function delProduct(sequenceId) {
+  return request({
+    url: '/aps_product/product/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_production_order_cal/cal.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询生产订单排程列表
+export function listCal(query) {
+  return request({
+    url: '/aps_production_order_cal/cal/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询生产订单排程详细
+export function getCal(id) {
+  return request({
+    url: '/aps_production_order_cal/cal/' + id,
+    method: 'get'
+  })
+}
+
+// 新增生产订单排程
+export function addCal(data) {
+  return request({
+    url: '/aps_production_order_cal/cal',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改生产订单排程
+export function updateCal(data) {
+  return request({
+    url: '/aps_production_order_cal/cal',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除生产订单排程
+export function delCal(id) {
+  return request({
+    url: '/aps_production_order_cal/cal/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_production_plan_cal/cal.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询生产计划排程列表
+export function listCal(query) {
+  return request({
+    url: '/aps_production_plan_cal/cal/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询生产计划排程详细
+export function getCal(id) {
+  return request({
+    url: '/aps_production_plan_cal/cal/' + id,
+    method: 'get'
+  })
+}
+
+// 新增生产计划排程
+export function addCal(data) {
+  return request({
+    url: '/aps_production_plan_cal/cal',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改生产计划排程
+export function updateCal(data) {
+  return request({
+    url: '/aps_production_plan_cal/cal',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除生产计划排程
+export function delCal(id) {
+  return request({
+    url: '/aps_production_plan_cal/cal/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_resource_occupancy/occupancy.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS资源每日占用记录列表
+export function listOccupancy(query) {
+  return request({
+    url: '/aps_resource_occupancy/occupancy/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS资源每日占用记录详细
+export function getOccupancy(sequenceId) {
+  return request({
+    url: '/aps_resource_occupancy/occupancy/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS资源每日占用记录
+export function addOccupancy(data) {
+  return request({
+    url: '/aps_resource_occupancy/occupancy',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS资源每日占用记录
+export function updateOccupancy(data) {
+  return request({
+    url: '/aps_resource_occupancy/occupancy',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS资源每日占用记录
+export function delOccupancy(sequenceId) {
+  return request({
+    url: '/aps_resource_occupancy/occupancy/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_resource_occupation_detail/detail.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询资源占用详情列表
+export function listDetail(query) {
+  return request({
+    url: '/aps_resource_occupation_detail/detail/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询资源占用详情详细
+export function getDetail(id) {
+  return request({
+    url: '/aps_resource_occupation_detail/detail/' + id,
+    method: 'get'
+  })
+}
+
+// 新增资源占用详情
+export function addDetail(data) {
+  return request({
+    url: '/aps_resource_occupation_detail/detail',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改资源占用详情
+export function updateDetail(data) {
+  return request({
+    url: '/aps_resource_occupation_detail/detail',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除资源占用详情
+export function delDetail(id) {
+  return request({
+    url: '/aps_resource_occupation_detail/detail/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_schedule_definition/schedule.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS作息时间定义列表
+export function listSchedule(query) {
+  return request({
+    url: '/aps_schedule_definition/schedule/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS作息时间定义详细
+export function getSchedule(sequenceId) {
+  return request({
+    url: '/aps_schedule_definition/schedule/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS作息时间定义
+export function addSchedule(data) {
+  return request({
+    url: '/aps_schedule_definition/schedule',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS作息时间定义
+export function updateSchedule(data) {
+  return request({
+    url: '/aps_schedule_definition/schedule',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS作息时间定义
+export function delSchedule(sequenceId) {
+  return request({
+    url: '/aps_schedule_definition/schedule/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_system_schedule/system.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS班制定义列表
+export function listSystem(query) {
+  return request({
+    url: '/aps_system_schedule/system/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS班制定义详细
+export function getSystem(sequenceId) {
+  return request({
+    url: '/aps_system_schedule/system/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS班制定义
+export function addSystem(data) {
+  return request({
+    url: '/aps_system_schedule/system',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS班制定义
+export function updateSystem(data) {
+  return request({
+    url: '/aps_system_schedule/system',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS班制定义
+export function delSystem(sequenceId) {
+  return request({
+    url: '/aps_system_schedule/system/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_warehouse_material/material.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询仓库物料列表
+export function listMaterial(query) {
+  return request({
+    url: '/aps_warehouse_material/material/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询仓库物料详细
+export function getMaterial(id) {
+  return request({
+    url: '/aps_warehouse_material/material/' + id,
+    method: 'get'
+  })
+}
+
+// 新增仓库物料
+export function addMaterial(data) {
+  return request({
+    url: '/aps_warehouse_material/material',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改仓库物料
+export function updateMaterial(data) {
+  return request({
+    url: '/aps_warehouse_material/material',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除仓库物料
+export function delMaterial(id) {
+  return request({
+    url: '/aps_warehouse_material/material/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_workday_schedule/schedule.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS月度班制排班列表
+export function listSchedule(query) {
+  return request({
+    url: '/aps_workday_schedule/schedule/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS月度班制排班详细
+export function getSchedule(sequenceId) {
+  return request({
+    url: '/aps_workday_schedule/schedule/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS月度班制排班
+export function addSchedule(data) {
+  return request({
+    url: '/aps_workday_schedule/schedule',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS月度班制排班
+export function updateSchedule(data) {
+  return request({
+    url: '/aps_workday_schedule/schedule',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS月度班制排班
+export function delSchedule(sequenceId) {
+  return request({
+    url: '/aps_workday_schedule/schedule/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_workshop/workshop.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS车间信息列表
+export function listWorkshop(query) {
+  return request({
+    url: '/aps_workshop/workshop/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS车间信息详细
+export function getWorkshop(sequenceId) {
+  return request({
+    url: '/aps_workshop/workshop/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS车间信息
+export function addWorkshop(data) {
+  return request({
+    url: '/aps_workshop/workshop',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS车间信息
+export function updateWorkshop(data) {
+  return request({
+    url: '/aps_workshop/workshop',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS车间信息
+export function delWorkshop(sequenceId) {
+  return request({
+    url: '/aps_workshop/workshop/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_workstation/workstation.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询APS工位信息列表
+export function listWorkstation(query) {
+  return request({
+    url: '/aps_workstation/workstation/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询APS工位信息详细
+export function getWorkstation(sequenceId) {
+  return request({
+    url: '/aps_workstation/workstation/' + sequenceId,
+    method: 'get'
+  })
+}
+
+// 新增APS工位信息
+export function addWorkstation(data) {
+  return request({
+    url: '/aps_workstation/workstation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改APS工位信息
+export function updateWorkstation(data) {
+  return request({
+    url: '/aps_workstation/workstation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除APS工位信息
+export function delWorkstation(sequenceId) {
+  return request({
+    url: '/aps_workstation/workstation/' + sequenceId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/aps_workstation_work_order/order.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询工位工单排程列表
+export function listOrder(query) {
+  return request({
+    url: '/aps_workstation_work_order/order/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询工位工单排程详细
+export function getOrder(id) {
+  return request({
+    url: '/aps_workstation_work_order/order/' + id,
+    method: 'get'
+  })
+}
+
+// 新增工位工单排程
+export function addOrder(data) {
+  return request({
+    url: '/aps_workstation_work_order/order',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改工位工单排程
+export function updateOrder(data) {
+  return request({
+    url: '/aps_workstation_work_order/order',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除工位工单排程
+export function delOrder(id) {
+  return request({
+    url: '/aps_workstation_work_order/order/' + id,
+    method: 'delete'
+  })
+}

+ 292 - 0
src/views/aps/capacity/index.vue

@@ -0,0 +1,292 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="年份" prop="year">
+        <el-select v-model="queryParams.year"  placeholder="请选择年份" clearable>
+                <el-option v-for="item in  dict.type.year_select" :key="item.value" :label="item.value" :value="item.value" ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="月份" prop="month">
+        <el-select v-model="queryParams.month"  placeholder="请选择月份" clearable>
+                  <el-option v-for="item in dict.type.month_select" :key="item.value" :label="item.value" :value="item.value" ></el-option>
+                </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['aps:capacity:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['aps:capacity:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['aps:capacity:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['aps:capacity:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="capacityList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="年份" align="center" prop="year" />
+      <el-table-column label="月份" align="center" prop="month" />
+      <el-table-column label="规划产能(吨)" align="center" prop="plannedCapacity" />
+      <el-table-column label="工作日天数" align="center" prop="expandedCapacity" />
+      <el-table-column label="平均天产能(KG)" align="center" prop="averageDailyCapacity" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['aps:capacity:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['aps:capacity:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改工厂月产能定义对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="年份" prop="year">
+          <el-select v-model="form.year"  placeholder="请选择年份">
+                  <el-option v-for="item in  dict.type.year_select" :key="item.value" :label="item.value" :value="item.value" ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="月份" prop="month">
+          <el-select v-model="form.month"  placeholder="请选择月份">
+            <el-option v-for="item in dict.type.month_select" :key="item.value" :label="item.value" :value="item.value" ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="规划产能(吨)" prop="plannedCapacity">
+          <el-input v-model="form.plannedCapacity" placeholder="请输入规划产能(吨)" />
+        </el-form-item>
+        <el-form-item label="工作日天数" prop="expandedCapacity">
+          <el-input v-model="form.expandedCapacity" placeholder="请输入工作日天数" />
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="getWorkDay">同步工作日</el-button>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listSchedule, getSchedule, delSchedule, addSchedule, updateSchedule } from "@/api/aps_workday_schedule/schedule";
+
+import { listCapacity, getCapacity, delCapacity, addCapacity, updateCapacity } from "@/api/aps/capacity";
+
+export default {
+  name: "Capacity",
+  dicts: ['year_select','month_select'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      scheduleList:[],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 工厂月产能定义表格数据
+      capacityList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        year: null,
+        month: null,
+        plannedCapacity: null,
+        expandedCapacity: null,
+        averageDailyCapacity: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询APS月度班制排班列表 */
+    getWorkDay() {
+      this.loading = true;
+      listSchedule({"year":this.form.year,"month":this.form.month}).then(response => {
+        this.scheduleList = response.rows;
+       if (this.scheduleList==null||this.scheduleList.length==0) {
+         this.$modal.msgSuccess("没有配置工作日");
+         this.form.expandedCapacity = 0;
+       }
+       else this.form.expandedCapacity = this.scheduleList[0].workdayCount;
+      });
+    },
+    /** 查询工厂月产能定义列表 */
+    getList() {
+      this.loading = true;
+      listCapacity(this.queryParams).then(response => {
+        this.capacityList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        year: null,
+        month: null,
+        plannedCapacity: null,
+        expandedCapacity: null,
+        averageDailyCapacity: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加工厂月产能定义";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getCapacity(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改工厂月产能定义";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        delete this.form.averageDailyCapacity;
+        if (valid) {
+          if (this.form.id != null) {
+            updateCapacity(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addCapacity(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除工厂月产能定义编号为"' + ids + '"的数据项?').then(function() {
+        return delCapacity(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('aps/capacity/export', {
+        ...this.queryParams
+      }, `capacity_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 293 - 0
src/views/aps/customers/index.vue

@@ -0,0 +1,293 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="客户代码" prop="customerCode">
+        <el-input
+          v-model="queryParams.customerCode"
+          placeholder="请输入客户代码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="客户名称" prop="customerName">
+        <el-input
+          v-model="queryParams.customerName"
+          placeholder="请输入客户名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系人" prop="contactPerson">
+        <el-input
+          v-model="queryParams.contactPerson"
+          placeholder="请输入联系人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="contactPhone">
+        <el-input
+          v-model="queryParams.contactPhone"
+          placeholder="请输入联系电话"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['aps:customers:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['aps:customers:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['aps:customers:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['aps:customers:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="customersList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="客户代码" align="center" prop="customerCode" />
+      <el-table-column label="客户名称" align="center" prop="customerName" />
+      <el-table-column label="客户地址" align="center" prop="customerAddress" />
+      <el-table-column label="联系人" align="center" prop="contactPerson" />
+      <el-table-column label="联系电话" align="center" prop="contactPhone" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['aps:customers:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['aps:customers:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改客户管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="客户代码" prop="customerCode">
+          <el-input v-model="form.customerCode" placeholder="请输入客户代码" />
+        </el-form-item>
+        <el-form-item label="客户名称" prop="customerName">
+          <el-input v-model="form.customerName" placeholder="请输入客户名称" />
+        </el-form-item>
+        <el-form-item label="客户地址" prop="customerAddress">
+          <el-input v-model="form.customerAddress" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="联系人" prop="contactPerson">
+          <el-input v-model="form.contactPerson" placeholder="请输入联系人" />
+        </el-form-item>
+        <el-form-item label="联系电话" prop="contactPhone">
+          <el-input v-model="form.contactPhone" placeholder="请输入联系电话" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCustomers, getCustomers, delCustomers, addCustomers, updateCustomers } from "@/api/aps/customers";
+
+export default {
+  name: "Customers",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 客户管理表格数据
+      customersList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        customerCode: null,
+        customerName: null,
+        customerAddress: null,
+        contactPerson: null,
+        contactPhone: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询客户管理列表 */
+    getList() {
+      this.loading = true;
+      listCustomers(this.queryParams).then(response => {
+        this.customersList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        customerCode: null,
+        customerName: null,
+        customerAddress: null,
+        contactPerson: null,
+        contactPhone: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加客户管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getCustomers(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改客户管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateCustomers(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addCustomers(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除客户管理编号为"' + ids + '"的数据项?').then(function() {
+        return delCustomers(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('aps/customers/export', {
+        ...this.queryParams
+      }, `customers_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 379 - 0
src/views/aps/expectation/index.vue

@@ -0,0 +1,379 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="销售订单" prop="preSalesOrderNumber">
+        <el-input
+          v-model="queryParams.preSalesOrderNumber"
+          placeholder="销售订单"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="产品编码" prop="productCode">
+        <el-input
+          v-model="queryParams.productCode"
+          placeholder="请输入产品编码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="材料编码" prop="materialCode">
+        <el-input
+          v-model="queryParams.materialCode"
+          placeholder="请输入材料编码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['aps:expectation:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['aps:expectation:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['aps:expectation:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['aps:expectation:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="expectationList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="预销售订单号" align="center" prop="preSalesOrderNumber" />
+      <el-table-column label="产品描述" align="center" prop="productDescription" />
+      <el-table-column label="产品编码" align="center" prop="productCode" />
+      <el-table-column label="材料编码" align="center" prop="materialCode" />
+      <el-table-column label="型号" align="center" prop="model" />
+      <el-table-column label="订单数量" align="center" prop="orderQuantity" />
+      <el-table-column label="单位" align="center" prop="unit" />
+      <el-table-column label="重量" align="center" prop="unitWeightKg" />
+      <el-table-column label="客户期望交期" align="center" prop="customerExpectedDeliveryDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.customerExpectedDeliveryDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="生产完成交期" align="center" prop="productionCompletionDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.productionCompletionDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="下料预计下达时间" align="center" prop="blankingExpectedIssueDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.blankingExpectedIssueDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="下料预计完成时间" align="center" prop="blankingExpectedCompletionDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.blankingExpectedCompletionDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="成品预计完成时间" align="center" prop="finishedProductExpectedCompletionDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.finishedProductExpectedCompletionDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['aps:expectation:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['aps:expectation:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改交付预期对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="预销售订单号" prop="preSalesOrderNumber">
+          <el-input v-model="form.preSalesOrderNumber" placeholder="请输入预销售订单号" />
+        </el-form-item>
+        <el-form-item label="产品描述" prop="productDescription">
+          <el-input v-model="form.productDescription" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="产品编码" prop="productCode">
+          <el-input v-model="form.productCode" placeholder="请输入产品编码" />
+        </el-form-item>
+        <el-form-item label="材料编码" prop="materialCode">
+          <el-input v-model="form.materialCode" placeholder="请输入材料编码" />
+        </el-form-item>
+        <el-form-item label="型号" prop="model">
+          <el-input v-model="form.model" placeholder="请输入型号" />
+        </el-form-item>
+        <el-form-item label="订单数量" prop="orderQuantity">
+          <el-input v-model="form.orderQuantity" placeholder="请输入订单数量" />
+        </el-form-item>
+        <el-form-item label="单位" prop="unit">
+          <el-input v-model="form.unit" placeholder="请输入单位" />
+        </el-form-item>
+        <el-form-item label="重量" prop="unitWeightKg">
+          <el-input v-model="form.unitWeightKg" placeholder="请输入重量" />
+        </el-form-item>
+        <el-form-item label="客户期望交期" prop="customerExpectedDeliveryDate">
+          <el-date-picker clearable
+            v-model="form.customerExpectedDeliveryDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择客户期望交期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="生产完成交期" prop="productionCompletionDate">
+          <el-date-picker clearable
+            v-model="form.productionCompletionDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择生产完成交期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="下料预计下达时间" prop="blankingExpectedIssueDate">
+          <el-date-picker clearable
+            v-model="form.blankingExpectedIssueDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择下料预计下达时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="下料预计完成时间" prop="blankingExpectedCompletionDate">
+          <el-date-picker clearable
+            v-model="form.blankingExpectedCompletionDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择下料预计完成时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="成品预计完成时间" prop="finishedProductExpectedCompletionDate">
+          <el-date-picker clearable
+            v-model="form.finishedProductExpectedCompletionDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择成品预计完成时间">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listExpectation, getExpectation, delExpectation, addExpectation, updateExpectation } from "@/api/aps/expectation";
+
+export default {
+  name: "Expectation",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 交付预期表格数据
+      expectationList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        preSalesOrderNumber: null,
+        productDescription: null,
+        productCode: null,
+        materialCode: null,
+        model: null,
+        orderQuantity: null,
+        unit: null,
+        unitWeightKg: null,
+        customerExpectedDeliveryDate: null,
+        productionCompletionDate: null,
+        blankingExpectedIssueDate: null,
+        blankingExpectedCompletionDate: null,
+        finishedProductExpectedCompletionDate: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询交付预期列表 */
+    getList() {
+      this.loading = true;
+      listExpectation(this.queryParams).then(response => {
+        this.expectationList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        preSalesOrderNumber: null,
+        productDescription: null,
+        productCode: null,
+        materialCode: null,
+        model: null,
+        orderQuantity: null,
+        unit: null,
+        unitWeightKg: null,
+        customerExpectedDeliveryDate: null,
+        productionCompletionDate: null,
+        blankingExpectedIssueDate: null,
+        blankingExpectedCompletionDate: null,
+        finishedProductExpectedCompletionDate: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加交付预期";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getExpectation(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改交付预期";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateExpectation(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addExpectation(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除交付预期编号为"' + ids + '"的数据项?').then(function() {
+        return delExpectation(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('aps/expectation/export', {
+        ...this.queryParams
+      }, `expectation_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 294 - 0
src/views/aps/factory_capacity_detail/index.vue

@@ -0,0 +1,294 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="年份" prop="year">
+        <el-select v-model="queryParams.year"  placeholder="请选择年份" clearable>
+                <el-option v-for="item in  dict.type.year_select" :key="item.value" :label="item.value" :value="item.value" ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="月份" prop="month">
+        <el-select v-model="queryParams.month"  placeholder="请选择月份" clearable>
+          <el-option v-for="item in dict.type.month_select" :key="item.value" :label="item.value" :value="item.value" ></el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="日期" prop="day">
+        <el-input
+          v-model="queryParams.day"
+          placeholder="请输入日期"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['aps:factory_capacity_detail:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['aps:factory_capacity_detail:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['aps:factory_capacity_detail:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['aps:factory_capacity_detail:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="factory_capacity_detailList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="年份" align="center" prop="year" />
+      <el-table-column label="月份" align="center" prop="month" />
+      <el-table-column label="日期" align="center" prop="day" />
+      <el-table-column label="规划产能(吨)" align="center" prop="plannedCapacity" />
+      <el-table-column label="已排产产能" align="center" prop="plannedSumCapacity" />
+      <el-table-column label="已排产单号" align="center" prop="plannedOrder" />
+      <el-table-column label="已排产产能" align="center" prop="plannedOrderCapacity" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['aps:factory_capacity_detail:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['aps:factory_capacity_detail:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改工厂月产能定义详情对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="年份" prop="year">
+          <el-input v-model="form.year" placeholder="请输入年份" />
+        </el-form-item>
+        <el-form-item label="月份" prop="month">
+          <el-input v-model="form.month" placeholder="请输入月份" />
+        </el-form-item>
+        <el-form-item label="日期" prop="day">
+          <el-input v-model="form.day" placeholder="请输入日期" />
+        </el-form-item>
+        <el-form-item label="规划产能(吨)" prop="plannedCapacity">
+          <el-input v-model="form.plannedCapacity" placeholder="请输入规划产能(吨)" />
+        </el-form-item>
+        <el-form-item label="已排产产能" prop="plannedSumCapacity">
+          <el-input v-model="form.plannedSumCapacity" placeholder="请输入已排产产能" />
+        </el-form-item>
+        <el-form-item label="已排产单号" prop="plannedOrder">
+          <el-input v-model="form.plannedOrder" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="已排产产能" prop="plannedOrderCapacity">
+          <el-input v-model="form.plannedOrderCapacity" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listFactory_capacity_detail, getFactory_capacity_detail, delFactory_capacity_detail, addFactory_capacity_detail, updateFactory_capacity_detail } from "@/api/aps/factory_capacity_detail";
+
+export default {
+  name: "Factory_capacity_detail",
+  dicts: ['year_select','month_select'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 工厂月产能定义详情表格数据
+      factory_capacity_detailList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        year: null,
+        month: null,
+        day: null,
+        plannedCapacity: null,
+        plannedSumCapacity: null,
+        plannedOrder: null,
+        plannedOrderCapacity: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询工厂月产能定义详情列表 */
+    getList() {
+      this.loading = true;
+      listFactory_capacity_detail(this.queryParams).then(response => {
+        this.factory_capacity_detailList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        year: null,
+        month: null,
+        day: null,
+        plannedCapacity: null,
+        plannedSumCapacity: null,
+        plannedOrder: null,
+        plannedOrderCapacity: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加工厂月产能定义详情";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getFactory_capacity_detail(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改工厂月产能定义详情";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateFactory_capacity_detail(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addFactory_capacity_detail(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除工厂月产能定义详情编号为"' + ids + '"的数据项?').then(function() {
+        return delFactory_capacity_detail(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('aps/factory_capacity_detail/export', {
+        ...this.queryParams
+      }, `factory_capacity_detail_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 672 - 0
src/views/aps/presalesorder/index.vue

@@ -0,0 +1,672 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="销售订单" prop="preSalesOrderNumber">
+        <el-input
+          v-model="queryParams.preSalesOrderNumber"
+          placeholder="请输入销售订单"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="客户代号" prop="customerCode">
+        <el-input
+          v-model="queryParams.customerCode"
+          placeholder="请输入客户代号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="客户名称" prop="customerName">
+        <el-input
+          v-model="queryParams.customerName"
+          placeholder="请输入客户名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="产品编码" prop="productCode">
+        <el-input
+          v-model="queryParams.productCode"
+          placeholder="请输入产品编码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :disabled="single"
+          @click="handleExpect"
+        >交期预估</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :disabled="multiple"
+          @click="handleAllExpect"
+        >全部预估</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" >导入</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+
+    </el-row>
+
+    <el-table v-loading="loading" :data="salesorderList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="销售订单" align="center" prop="preSalesOrderNumber" />
+      <el-table-column label="客户代号" align="center" prop="customerCode" />
+      <el-table-column label="客户名称" align="center" prop="customerName" />
+      <el-table-column label="产品描述" align="center" prop="productDescription" />
+      <el-table-column label="产品编码" align="center" prop="productCode" />
+      <el-table-column label="订单数量" align="center" prop="orderQuantity" />
+      <el-table-column label="单位" align="center" prop="unit" />
+      <el-table-column label="重量" align="center" prop="weightKg" />
+      <el-table-column label="客户交期" align="center" prop="customerDeliveryDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ scope.row.customerDeliveryDate }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="生产交期" align="center" prop="productionDeliveryDate" width="180">
+        <template slot-scope="scope">
+          <span>{{scope.row.productionDeliveryDate }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="材料编码" align="center" prop="materialCode" />
+      <el-table-column label="材料描述" align="center" prop="materialDescription" />
+      <el-table-column label="物料数量" align="center" prop="materialQuantity" />
+      <el-table-column label="物料单位" align="center" prop="materialUnit" />
+      <el-table-column label="物料重量" align="center" prop="materialWeightKg" />
+      <el-table-column label="订单状态" align="center" prop="status" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+
+
+<!-- 添加或修改销售订单对话框 -->
+    <el-dialog :title="titleExpect" :visible.sync="openExpect" width="70%" :close-on-click-modal="false" modal-append-to-body>
+
+      <el-table v-loading="loading" :data="salesorderExpectList" >
+        <el-table-column label="序号" align="center" prop="id" />
+        <el-table-column label="年份" align="center" prop="year" />
+        <el-table-column label="月份" align="center" prop="month" />
+        <el-table-column label="日期" align="center" prop="day" />
+        <el-table-column label="预计交付日期" align="center" prop="deliverDay" />
+        <el-table-column label="规划产能(吨)" align="center" prop="plannedCapacity" />
+        <el-table-column label="已排产产能" align="center" prop="plannedSumCapacity" />
+        <el-table-column label="未排产产能" align="center" prop="unplannedSumCapacity" />
+        <el-table-column label="本次排产产能" align="center" prop="currenPlannedSumCapacity" />
+        <el-table-column label="已排产单号列表" align="center" prop="plannedOrder" />
+        <el-table-column label="已排产产能列表" align="center" prop="plannedOrderCapacity" />
+      </el-table>
+      <div slot="footer" class="dialog-footer">
+          <el-button type="primary" :disabled="single" @click="submitFormExpect">确定交期</el-button>
+          <el-button type="primary" :disabled="multiple" @click="submitFormAllExpect">确定所有交期</el-button>
+          <el-button @click="cancelExpect">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 添加或修改销售订单对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="70%" :close-on-click-modal="false" modal-append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="销售订单" prop="preSalesOrderNumber">
+              <el-input v-model="form.preSalesOrderNumber" placeholder="请输入销售订单" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="客户代号" prop="customerCode">
+              <el-input v-model="form.customerCode" placeholder="请输入客户代号" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="客户名称" prop="customerName">
+              <el-input v-model="form.customerName" placeholder="请输入客户名称" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="产品描述" prop="productDescription">
+              <el-input v-model="form.productDescription" type="textarea" placeholder="请输入内容" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="产品编码" prop="productCode">
+              <el-input v-model="form.productCode" placeholder="请输入产品编码" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="订单数量" prop="orderQuantity">
+              <el-input v-model="form.orderQuantity" placeholder="请输入订单数量" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="单位" prop="unit">
+              <el-input v-model="form.unit" placeholder="请输入单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="重量" prop="weightKg">
+              <el-input v-model="form.weightKg" placeholder="请输入重量" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="客户交期" prop="customerDeliveryDate">
+              <el-date-picker clearable
+                v-model="form.customerDeliveryDate"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="请选择客户交期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="生产交期" prop="productionDeliveryDate">
+              <el-date-picker clearable
+                v-model="form.productionDeliveryDate"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="请选择生产交期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="材料编码" prop="materialCode">
+              <el-input v-model="form.materialCode" placeholder="请输入材料编码" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="材料描述" prop="materialDescription">
+              <el-input v-model="form.materialDescription" type="textarea" placeholder="请输入内容" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="物料数量" prop="materialQuantity">
+              <el-input v-model="form.materialQuantity" placeholder="请输入物料数量" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="物料单位" prop="materialUnit">
+              <el-input v-model="form.materialUnit" placeholder="请输入物料单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="物料重量" prop="materialWeightKg">
+              <el-input v-model="form.materialWeightKg" placeholder="请输入物料重量" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 直报系统导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+    	<el-upload ref="upload" :limit="1" accept=".xlsx, .xls,.csv" :headers="upload.headers"
+    		:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+    		:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+    		<i class="el-icon-upload"></i>
+    		<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+    		<div class="el-upload__tip text-center" slot="tip">
+    			<div class="el-upload__tip" slot="tip">
+    				<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的老数据
+    			</div>
+    			<span>仅允许导入xls、xlsx、csv格式文件。</span>
+    			<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
+    				@click="importTemplate">下载模板</el-link>
+    		</div>
+    	</el-upload>
+    	<div slot="footer" class="dialog-footer">
+    		<el-button type="primary" @click="submitFileForm">确 定</el-button>
+    		<el-button @click="upload.open = false">取 消</el-button>
+    	</div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listSalesorder, getSalesorder, delSalesorder, addSalesorder, updateSalesorder,listSalesorderExpect,occupyRes,listSalesorderOccupyRes,listSalesorderExpectAll,occupyAllRes} from "@/api/aps/presalesorder";
+
+
+export default {
+  name: "Salesorder",
+  data() {
+    return {
+      isSubmitting:true,
+      // 用户导入参数
+      upload: {
+      	// 是否显示弹出层(用户导入)
+      	open: false,
+      	// 弹出层标题(用户导入)
+      	title: "",
+      	// 是否禁用上传
+      	isUploading: false,
+      	// 是否更新已经存在的用户数据
+      	updateSupport: 0,
+      	// 设置上传的请求头部
+      	headers: {
+      		Authorization: "Bearer " +""
+      	},
+      	// 上传的地址
+      	url: process.env.VUE_APP_BASE_API + "/aps/salesorder/importData"
+      },
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 销售订单表格数据
+      salesorderList: [],
+      // 销售订单交期预估表格数据
+      salesorderExpectList:[],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 弹出层标题
+      titleExpect: "交期确定",
+      // 是否显示弹出层
+      openExpect: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        page:1,
+        preSalesOrderNumber: null,
+        customerCode: null,
+        customerName: null,
+        productDescription: null,
+        productCode: null,
+        orderQuantity: null,
+        unit: null,
+        weightKg: null,
+        customerDeliveryDate: null,
+        productionDeliveryDate: null,
+        materialCode: null,
+        materialDescription: null,
+        materialQuantity: null,
+        materialUnit: null,
+        materialWeightKg: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        preSalesOrderNumber: [
+          { required: true, message: "销售订单不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询销售订单列表 */
+    getList() {
+      console.log("getList")
+      this.loading = true;
+      listSalesorder(this.queryParams).then(response => {
+        console.log(response)
+        this.salesorderList = response;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 取消按钮
+    cancelExpect() {
+      this.openExpect = false;
+
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        preSalesOrderNumber: null,
+        customerCode: null,
+        customerName: null,
+        productDescription: null,
+        productCode: null,
+        orderQuantity: null,
+        unit: null,
+        weightKg: null,
+        customerDeliveryDate: null,
+        productionDeliveryDate: null,
+        materialCode: null,
+        materialDescription: null,
+        materialQuantity: null,
+        materialUnit: null,
+        materialWeightKg: null
+      };
+      //this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      //this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加销售订单";
+    },
+    /** 交期预估按钮操作 */
+    handleAdd() {
+      this.openExpect = true;
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getSalesorder(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改销售订单";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateSalesorder(this.form).then(response => {
+              this.$message.success("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSalesorder(this.form).then(response => {
+              this.$message.success("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 提交交期确定按钮 */
+     submitFormExpect() {
+      const id = this.ids
+      getSalesorder(id).then(response => {
+        // console.log(response);
+        let saleorder = response;
+        if (saleorder.status=="1") {
+          this.$message.success("已经分配过资源");
+          return;
+        }
+        var i=0;
+        this.salesorderExpectList.forEach(item=>{
+          i++;
+          item.plannedOrder = saleorder.preSalesOrderNumber+"-"+saleorder.materialCode+"";
+          item.plannedOrderCapacity = item.currenPlannedSumCapacity;
+          item.plannedSumCapacity  = item.currenPlannedSumCapacity;
+        });
+
+        var lastNode = this.salesorderExpectList[this.salesorderExpectList.length-1];
+          console.log(lastNode);
+          var productDay = lastNode.deliverDay;
+          saleorder.productionDeliveryDate = productDay;
+          console.log(saleorder.productionDeliveryDate);
+
+          var arr = [];
+          this.salesorderExpectList.forEach(item=>{
+            var node = {};
+            node.id = item.id;
+            node.createTime = item.createTime;
+            node.createUserId = item.createUserId;
+            node.year = item.year;
+            node.month = item.month;
+            node.day = item.day;
+            node.plannedCapacity = item.plannedCapacity;
+            node.unplannedSumCapacity = item.unplannedSumCapacity;
+            node.deliverDay = item.deliverDay;
+            node.currenPlannedSumCapacity = item.currenPlannedSumCapacity;
+            node.plannedSumCapacity = item.plannedSumCapacity;
+            node.plannedOrder = item.plannedOrder;
+            node.plannedOrderCapacity = item.plannedOrderCapacity;
+            node.plannedOrderDate = item.plannedOrderDate;
+            arr.push(node);
+          });
+         occupyRes(arr).then(response => {
+          this.$message.success("占用成功");
+
+          saleorder.data.status = "1";
+          console.log(saleorder.data);
+          updateSalesorder(saleorder.data).then(response => {
+            this.$message.success("修改成功");
+            this.openExpect = false;
+            this.getList();
+          });
+        });
+
+
+      });
+    },
+    submitFormAllExpect(){
+      var arr = [];
+      this.salesorderExpectList.forEach(item=>{
+        var node = {};
+        node.id = item.id;
+        node.createTime = item.createTime;
+        node.createUserId = item.createUserId;
+        node.year = item.year;
+        node.month = item.month;
+        node.day = item.day;
+        node.plannedCapacity = item.plannedCapacity;
+        node.unplannedSumCapacity = item.unplannedSumCapacity;
+        node.deliverDay = item.deliverDay;
+        node.currenPlannedSumCapacity = item.currenPlannedSumCapacity;
+        node.plannedSumCapacity = item.plannedSumCapacity;
+        node.plannedOrder = item.plannedOrder;
+        node.plannedOrderCapacity = item.plannedOrderCapacity;
+        node.plannedOrderDate = item.plannedOrderDate;
+        arr.push(node);
+      });
+
+      occupyAllRes(arr).then(response => {
+        //console.log(response)
+        this.openExpect = false;
+        this.getList();
+
+        this.$message.success("占用成功");
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除销售订单编号为"' + ids + '"的数据项?').then(function() {
+        return delSalesorder(ids);
+      }).then(() => {
+        this.getList();
+        this.$message.success("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('aps/salesorder/export', {
+        ...this.queryParams
+      }, `salesorder_${new Date().getTime()}.xlsx`)
+    },
+    /*销售单交期预估*/
+    handleExpect(row){
+      const id = row.id || this.ids
+
+      getSalesorder(id).then(response => {
+        let saleorder = response.data;
+        this.form = response.data;
+        console.log(saleorder);
+        //如果是已经占用资源,则显示已经占用的资源,不能重复
+        if (saleorder.status=="1"){
+
+          listSalesorderOccupyRes(saleorder).then(response => {
+              this.salesorderExpectList = response;
+              this.openExpect = true;
+              this.single = true;
+              this.multiple = true;
+            });
+          return;
+        }
+        else{
+
+          listSalesorderExpect(saleorder).then(response => {
+            this.salesorderExpectList = response;
+            this.openExpect = true;
+            this.single = false;
+            this.multiple = true;
+          });
+        }
+      });
+
+     },
+    //预览
+    handleAllExpect(){
+
+          listSalesorderExpectAll().then(response => {
+
+            this.salesorderExpectList = response;
+            this.openExpect = true;
+            this.single = true;
+            this.multiple = false;
+          });
+
+
+
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+    	this.download('aps/salesorder/importTemplate', {}, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+    	this.upload.title = "销售订单数据导入";
+    	this.upload.open = true;
+    },
+    // 提交上传文件
+    submitFileForm() {
+    	this.$refs.upload.submit();
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+    	this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+    	this.upload.open = false;
+    	this.upload.isUploading = false;
+    	this.$refs.upload.clearFiles();
+    	this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+    		response.msg + "</div>", "导入结果", {
+    			dangerouslyUseHTMLString: true
+    		});
+    	this.getList();
+    },
+  }
+};
+</script>