|
@@ -3,9 +3,9 @@
|
|
|
<div class="bpb_title"></div>
|
|
|
<div class="bpb_content">
|
|
|
<div class="abs" style="text-align: center;top:2%;width: 100%;letter-spacing: 5px;color: #cdd2fb;font-size: 18px;">
|
|
|
- <span style="position: relative;">订单日期<el-date-picker v-model="selectedDate" type="date" placeholder="选择日期"></el-date-picker></span>
|
|
|
- <span style="position: relative;margin-left:10px;">预测周期<input value="10" type="text" style="text-align: center;width: 80px;"> 天</span>
|
|
|
- <el-button @click="init">开始</el-button>
|
|
|
+ <span style="position: relative;">订单日期<el-select style="width: 120px;letter-spacing:0;" v-model="selectedDate1" @change="date1Changed"><el-option v-for="(item,index) in orderDateList" :key="index" :label="item" :value="item"></el-option></el-select>到<el-select style="width: 120px;letter-spacing:0;" v-model="selectedDate2"><el-option v-for="(item,index) in orderDateList2" :key="index" :label="item" :value="item"></el-option></el-select></span>
|
|
|
+ <span style="position: relative;margin-left:10px;">预测周期<input v-model="days" type="text" style="text-align: center;width: 80px;"> 天</span>
|
|
|
+ <el-button @click="start">开始</el-button>
|
|
|
</div>
|
|
|
<div class="bpb_orderlist">
|
|
|
<div ref="bpb_orderlist_title" class="bpb_order_num fontcolor">
|
|
@@ -13,8 +13,8 @@
|
|
|
</div>
|
|
|
<div class="itemlist" ref="orderItemList">
|
|
|
<div class="bpb_order_item" style="top:210px;transition: none;z-index: 0;"></div>
|
|
|
- <div class="bpb_order_item" v-for="item in orderlist" :style="{top:item.top,zIndex:item.zindex,transition:item.transition}" @click="selectedOrder(item)">
|
|
|
- <div class="no">编号:{{ item.id }}</div>
|
|
|
+ <div class="bpb_order_item" v-for="(item,index) in orderlistTop5" :style="{top:item.top,zIndex:item.zindex,transition:item.transition}" @click="selectedOrder(item)">
|
|
|
+ <div class="no">编号:{{ item.orderCode }}</div>
|
|
|
<div class="checkbox abs"><input :checked="item.checked" type="checkbox" name=""></div>
|
|
|
</div>
|
|
|
|
|
@@ -50,7 +50,7 @@
|
|
|
<template v-else>
|
|
|
<div v-for="item in bpb_mt_item_data" :class="item.isalarm ? 'bpb_mt_item alarm':'bpb_mt_item'" :key="item.id" :style="{left:item.left,top:item.top,zIndex:item.zindex}">
|
|
|
<table cellspacing="0" cellpadding="0"><tbody>
|
|
|
- <tr><td rowspan="2">{{ item.name }}</td><td>需求:{{item.need}}T</td></tr><tr><td :style="{opacity:item.opacity,transition: 'opacity 0.5s'}">库存:{{item.storage==null?'?':item.storage+'T'}}</td></tr>
|
|
|
+ <tr><td rowspan="2">{{ item.name }}<br>{{ item.bomSpec }}</td><td>需求:{{item.need}} T</td></tr><tr><td :style="{opacity:item.opacity,transition: 'opacity 0.5s'}">库存:{{item.storage==null?'?':item.storage+' T'}}</td></tr>
|
|
|
</tbody></table>
|
|
|
<img src="../../assets/image/bpb/v320.png" class="link_point" :style="{top:'90%',left:'90%',zIndex:item.zindex}">
|
|
|
<div class="cl" :style="{top:'102%',left:'119%',zIndex:item.zindex}"><b class="">{{item.plc==null?'?':item.plc+'T'}}</b></div>
|
|
@@ -101,7 +101,7 @@
|
|
|
</div>
|
|
|
<div class="itemlist" v-show="plcPredictState==2">
|
|
|
<div :class="item.isalarm?'bpb_order_item alarm': 'bpb_order_item'" v-for="item in order_result_data" :key="item.id" :style="{zIndex:item.zindex,top:item.top,left:item.left,transition:transition}">
|
|
|
- <div class="no" v-if="!item.isalarm">需求过剩:{{item.neednum}}T<br>编号:{{ item.id }}</div>
|
|
|
+ <div class="no" v-if="!item.isalarm">需求过剩:{{item.neednum}} T<br>编号:{{ item.id }}</div>
|
|
|
<div class="no" v-else>产能不足:{{item.neednum}}T<br>编号:{{ item.id }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -131,7 +131,7 @@
|
|
|
<script>
|
|
|
import { ref,onMounted,watch } from 'vue';
|
|
|
import api from "@/api/system";
|
|
|
-import { ElDatePicker } from 'element-plus';
|
|
|
+import { ElDatePicker,ElMessage } from 'element-plus';
|
|
|
import 'element-plus/dist/index.css'; // 确保导入样式文件
|
|
|
import { template } from 'lodash';
|
|
|
export default {
|
|
@@ -139,12 +139,17 @@ export default {
|
|
|
|
|
|
},
|
|
|
setup(props,{emit}) {
|
|
|
+ const orderDateList = ref([]);
|
|
|
+ const orderDateList2 = ref([]);
|
|
|
const orderQueryState = ref(0);
|
|
|
const storageQueryState = ref(0);
|
|
|
const plcPredictState = ref(0);
|
|
|
- let selectedDate = ref(new Date().Format("yyyy-MM-dd"));
|
|
|
+ const selectedDate1 = ref("");
|
|
|
+ const selectedDate2 = ref("");
|
|
|
+ const days = ref(10);
|
|
|
let selectPredictOrders = ref([]);
|
|
|
let orderlist=ref([]);
|
|
|
+ let orderlistTop5 = ref([]);
|
|
|
let bpb_mt_item_data = ref([]);
|
|
|
const bpb_orderlist_title = ref(null);
|
|
|
const bpb_order_resultlist_title =ref(null);
|
|
@@ -170,26 +175,38 @@ export default {
|
|
|
}
|
|
|
function getOerderList(){
|
|
|
orderQueryState.value=1;//开始查询订单
|
|
|
- setTimeout(() => {
|
|
|
- var lst = [{id:'12345670'},{id:'12345671'},{id:'12345672'},{id:'12345673'},{id:'12345674'}];
|
|
|
- orderlist.value = lst.reverse();
|
|
|
+ var v = {
|
|
|
+ "start":selectedDate1.value,
|
|
|
+ "end":selectedDate2.value,
|
|
|
+ "days":days.value,
|
|
|
+ };
|
|
|
+ api.GetOrderList(v).then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ if(res==null){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ orderlist.value = res;
|
|
|
let tmpLst = [];
|
|
|
let top=0;
|
|
|
+ orderlistTop5.value = res.slice(0, 5);
|
|
|
orderQueryState.value=2;//订单查询完成
|
|
|
setTimeout(function(){
|
|
|
- orderlist.value.forEach((item,ind)=>{
|
|
|
+ orderlistTop5.value.forEach((item,ind)=>{
|
|
|
top=210-(ind*30)+'px';
|
|
|
let zindex = 1+ind;
|
|
|
- tmpLst.push({"id":item.id,"top":top,"zindex":zindex,"checked":false,transition:'top '+(ind*0.3)+'s ease-in-out'});
|
|
|
+ tmpLst.push({"id":item.orderCode,"orderCode":item.orderCode,bomlist:item.bomList,"top":top,"zindex":zindex,"checked":false,transition:'top '+(ind*0.3)+'s ease-in-out'});
|
|
|
})
|
|
|
- orderlist.value = tmpLst;
|
|
|
+ orderlistTop5.value = tmpLst;
|
|
|
layout();
|
|
|
},1000);
|
|
|
-
|
|
|
- }, 2000);
|
|
|
+ });
|
|
|
}
|
|
|
function init(){
|
|
|
testData();
|
|
|
+
|
|
|
+ getOrderDateList();
|
|
|
+ }
|
|
|
+ function start(){
|
|
|
orderQueryState.value = 0;
|
|
|
storageQueryState.value = 0;
|
|
|
plcPredictState.value = 0;
|
|
@@ -199,6 +216,15 @@ export default {
|
|
|
order_result_data.value = [];
|
|
|
bpb_orderlist_title.value.style.top="0%";
|
|
|
bpb_order_resultlist_title.value.style.top='0%';
|
|
|
+ if(selectedDate1.value==""){
|
|
|
+ ElMessage({
|
|
|
+ message:'请选择订单日期!',
|
|
|
+ type:'error',
|
|
|
+ customClass: 'custom-message'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(selectedDate2.value=="") selectedDate2.value = selectedDate1.value;
|
|
|
getOerderList();
|
|
|
}
|
|
|
//重置订单列表布局
|
|
@@ -216,7 +242,7 @@ export default {
|
|
|
order_app_line.value.style.top = parseInt(pbp_order_app.value.style.top) + order_app_linkpoint.value.offsetTop - (parseInt(sty2.height) - 30)+'px';
|
|
|
let eleXY = lastOrderItemEle.getBoundingClientRect();
|
|
|
order_wl_line.value.style.left = eleXY.left + parseInt(sty1.width) + 'px';
|
|
|
- order_wl_line.value.style.top = eleXY.top - (parseInt(sty1.height)/4)+'px'
|
|
|
+ //order_wl_line.value.style.top = eleXY.top+'px'
|
|
|
|
|
|
pbp_storage.value.style.top = bpb_mt_list.value.offsetTop + parseInt( window.getComputedStyle(bpb_mt_list.value).height)-60 + 'px';
|
|
|
pbp_storage.value.style.left = bpb_mt_list.value.offsetLeft - 120 + 'px';
|
|
@@ -236,8 +262,35 @@ export default {
|
|
|
plc_wl_line.value.style.height = (0.7*173)+"px";
|
|
|
}, 1000);
|
|
|
}
|
|
|
+ function getOrderDateList(){
|
|
|
+ api.GetOrderDateList().then(res=>{
|
|
|
+ orderDateList.value = res;
|
|
|
+ if(res!=null && res.length>1) selectedDate1.value = res[res.length-1];
|
|
|
+ selectedDate2.value = selectedDate1.value;
|
|
|
+ start();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function date1Changed(v){
|
|
|
+ console.log(v)
|
|
|
+ var ind = false;
|
|
|
+ var datelist2 = [];
|
|
|
+ selectedDate2.value = "";
|
|
|
+ for (let index = 0; index < orderDateList.value.length; index++) {
|
|
|
+ const element = orderDateList.value[index];
|
|
|
+ if(ind){
|
|
|
+ datelist2.push(element);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(v==element){
|
|
|
+ ind = true;
|
|
|
+ datelist2.push(element);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ orderDateList2.value = datelist2;
|
|
|
+ }
|
|
|
+ var boms = {};
|
|
|
function selectedOrder(obj){
|
|
|
- let tempLst = orderlist.value;
|
|
|
+ let tempLst = orderlistTop5.value;
|
|
|
bpb_order_resultlist_title.value.style.top='0%';
|
|
|
storageQueryState.value = 0;
|
|
|
plcPredictState.value = 0;
|
|
@@ -245,39 +298,44 @@ export default {
|
|
|
order_result_data.value = [];
|
|
|
for(let i=0;i<tempLst.length;i++){
|
|
|
if(tempLst[i].id==obj.id){
|
|
|
- tempLst[i].checked = !tempLst[i].checked;
|
|
|
-
|
|
|
+ tempLst[i].checked = !tempLst[i].checked;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- let tmpLst2=[];
|
|
|
+ let tmpLst2=[];
|
|
|
tempLst.forEach(ele=>{
|
|
|
- if(ele.checked) tmpLst2.push(ele);
|
|
|
+ if(ele.checked){
|
|
|
+ tmpLst2.push(ele);
|
|
|
+ for (let index = 0; index < ele.bomlist.length; index++) {
|
|
|
+ const element = ele.bomlist[index];
|
|
|
+ const xql = element.xql;
|
|
|
+ if(boms[element.bomCode]==null) boms[element.bomCode] = element;
|
|
|
+ else boms[element.bomCode].xql = boms[element.bomCode].xql + xql;
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|
|
|
selectPredictOrders.value=tmpLst2;
|
|
|
if(tmpLst2.length==0) storageQueryState.value=0;
|
|
|
else{
|
|
|
setTimeout(() => {
|
|
|
//物料清单信息
|
|
|
- var temp1 = [
|
|
|
- {id:1,name:'单层涤纶毯(成品)',need:30,'storage':null,plc:null,isalarm:false},
|
|
|
- {id:2,name:'单层涤纶毯(成品)',need:30,'storage':null,plc:null,isalarm:false},
|
|
|
- {id:3,name:'单层涤纶毯(成品)',need:30,'storage':null,plc:null,isalarm:true},
|
|
|
- {id:4,name:'单层涤纶毯(成品)',need:30,'storage':null,plc:null,isalarm:true}
|
|
|
- ];
|
|
|
+ var temp1 = [];
|
|
|
+ for(let key in boms){
|
|
|
+ temp1.push({id:boms[key].bomCode,name:boms[key].bomName,bomSpec:boms[key].bomSpec,need:boms[key].xql,'storage':null,plc:null,isalarm:false});
|
|
|
+ }
|
|
|
let tempLst=[];
|
|
|
temp1.forEach((item,ind) => {
|
|
|
let top=11+(ind*30)+'px';
|
|
|
let zindex = 100-ind;
|
|
|
let left = 272+(ind*-53)+'px';
|
|
|
- let obj = {"id":item.id,name:item.name,"top":top,"zindex":zindex,"left":left,"isalarm":item.isalarm,need:item.need,storage:item.storage,plc:item.plc};
|
|
|
+ let obj = {"id":item.id,name:item.name,bomSpec:item.bomSpec,"top":top,"zindex":zindex,"left":left,"isalarm":item.isalarm,need:item.need,storage:item.storage,plc:item.plc};
|
|
|
tempLst.push(obj);
|
|
|
});
|
|
|
bpb_mt_item_data.value = tempLst;
|
|
|
queryStorage();
|
|
|
}, 1000);
|
|
|
}
|
|
|
- orderlist.value = tempLst;
|
|
|
+ orderlistTop5.value = tempLst;
|
|
|
}
|
|
|
//库存检查
|
|
|
function queryStorage(){
|
|
@@ -296,10 +354,11 @@ export default {
|
|
|
setTimeout(() => {
|
|
|
let tempLst = bpb_mt_item_data.value;
|
|
|
tempLst.forEach(ele=>{
|
|
|
- ele['storage'] = 30;
|
|
|
+ var bomItem = boms[ele.id];
|
|
|
+ ele['storage'] = bomItem.kcl;
|
|
|
ele['isalarm'] = false;
|
|
|
ele['opacity'] = 1;
|
|
|
- ele['plc'] = 25;
|
|
|
+ ele['plc'] = bomItem.last;
|
|
|
})
|
|
|
bpb_mt_item_data.value = tempLst;
|
|
|
predict();
|
|
@@ -311,10 +370,21 @@ export default {
|
|
|
setTimeout(() => {
|
|
|
plcPredictState.value = 1;
|
|
|
//预测结果列表
|
|
|
- var temp2=[
|
|
|
- {id:'12345670',isalarm:true,neednum:5},{id:'212345671',isalarm:false,neednum:5},{id:'012345672',isalarm:true,neednum:5},{id:'12345673',isalarm:false,neednum:5},{id:'12345674',isalarm:false,neednum:5},
|
|
|
- ];
|
|
|
- order_result_data.value = temp2;
|
|
|
+ var temp2=[];
|
|
|
+ for (let index = 0; index < selectPredictOrders.value.length; index++) {
|
|
|
+ const element = selectPredictOrders.value[index];
|
|
|
+ var isalarm=false;
|
|
|
+ var neednum = 0;
|
|
|
+ for (let index2 = 0; index2 < element.bomlist.length; index2++) {
|
|
|
+ const element2 = element.bomlist[index2];
|
|
|
+ if(boms[element2.bomCode]!=null){
|
|
|
+ neednum = boms[element2.bomCode].cz;
|
|
|
+ if(neednum>0) isalarm = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ temp2.push({id:element.id,isalarm:isalarm,neednum:neednum})
|
|
|
+ }
|
|
|
+ order_result_data.value = temp2;
|
|
|
setTimeout(() => {
|
|
|
//排列预测结果元素
|
|
|
let tmpLst = [];
|
|
@@ -339,12 +409,18 @@ export default {
|
|
|
});
|
|
|
return{
|
|
|
init,
|
|
|
+ start,
|
|
|
+ days,
|
|
|
+ orderDateList,
|
|
|
+ orderDateList2,
|
|
|
selectPredictOrders,
|
|
|
orderQueryState,
|
|
|
storageQueryState,
|
|
|
plcPredictState,
|
|
|
- selectedDate,
|
|
|
+ selectedDate1,
|
|
|
+ selectedDate2,
|
|
|
orderlist,
|
|
|
+ orderlistTop5,
|
|
|
bpb_mt_item_data,
|
|
|
order_result_data,
|
|
|
selectedOrder,
|
|
@@ -365,6 +441,8 @@ export default {
|
|
|
plc_wl_line,
|
|
|
order_result_line,
|
|
|
bpb_order_resultlist,
|
|
|
+ getOrderDateList,
|
|
|
+ date1Changed,
|
|
|
}
|
|
|
}
|
|
|
}
|