Sfoglia il codice sorgente

改了一下,增加了没有匹配的物料清单时的显示,避免AI乱搞先提交

wukai 5 mesi fa
parent
commit
02a6e79548
5 ha cambiato i file con 916 aggiunte e 747 eliminazioni
  1. 8 0
      .env.local
  2. 8 0
      .env.pd
  3. 2 0
      package.json
  4. 866 726
      src/pages/bpb/index.vue
  5. 32 21
      vue.config.js

+ 8 - 0
.env.local

@@ -0,0 +1,8 @@
+# 接口服务地址
+VUE_APP_API = "http://127.0.0.1:8080"
+
+# 模型服务地址
+VUE_APP_3D = 'ws://127.0.0.1:8082'
+
+# 管理后台SSO地址
+VUE_APP_SSO = 'http://127.0.0.1/twin/sso'

+ 8 - 0
.env.pd

@@ -0,0 +1,8 @@
+# 接口服务地址
+VUE_APP_API = "http://192.168.66.133:8080"
+
+# 模型服务地址
+VUE_APP_3D = 'ws://192.168.66.133:8082'
+
+# 管理后台SSO地址
+VUE_APP_SSO = 'http://192.168.66.133/twin/sso'

+ 2 - 0
package.json

@@ -5,6 +5,8 @@
   "scripts": {
     "serve": "vue-cli-service serve",
     "test": "vue-cli-service serve --mode test",
+    "local": "vue-cli-service serve --mode local",
+    "pd": "vue-cli-service serve --mode pd",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint"
   },

+ 866 - 726
src/pages/bpb/index.vue

@@ -1,797 +1,937 @@
 <template>
-    <div class="bpb_bg">
-        <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-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;">&nbsp;天</span>
-                <el-button @click="start">开始</el-button>
-                <el-button @click="imp" style="margin-left: 10px;">导出</el-button>
-            </div>
-            <div class="bpb_orderlist">
-                <div ref="bpb_orderlist_title" class="bpb_order_num fontcolor" @click="showAllOrderList">
-                    <template v-if="orderQueryState==2">订单数:<b>{{ orderlist.length }}</b></template>
-                </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,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>
-
-                </div>
-            </div>
-            <div class="pbp_order_app" ref="pbp_order_app" style="top:258.5px;">
-                <div class="title fontcolor">订单系统</div>
-                <div class="iconlist">
-                    <img src="../../assets/image/bpb/o.png" style="z-index: 1">
-                    <img src="../../assets/image/bpb/o.png" id="order_app_linkpoint" ref="order_app_linkpoint" style="z-index: 2;top: calc(0.7*110px);left: calc(0.7*70px);">
-                    <img src="../../assets/image/bpb/o.png" style="z-index: 3;top: calc(0.7*154px);left: calc(0.7*150px);">
-                </div>
-                <div class="opt_state" v-if="orderQueryState>0">
-                    <template v-if="orderQueryState==1">
-                        <span>订单提取中</span>
-                        <span class="dot-loading"><span class="dot"></span><span class="dot"></span><span class="dot"></span></span>
-                    </template>
-                    <template v-if="orderQueryState==2">
-                        <span><img src="../../assets/image/CheckCircle.png">订单提取完成</span>
-                    </template>
-                </div>
-            </div>
-            <div class="abs" id="order_app_line" ref="order_app_line" style="height: 50px; left: 192px; top: 287px;"><img src="../../assets/image/bpb/v317.png" style="width: 100%;height: 100%;"><img class="abs refresh" src="../../assets/image/bpb/refresh.png" style="left: 35%;top:8%;"></div>
-            <div class="bpb_mt_list" ref="bpb_mt_list">
-                <div class="title bpb_order_num fontcolor"  @click="showAllBomList">物料清单 <b>{{ bpb_mt_item_data.length }}</b></div>
-                <div class="title fontcolor" style="left: 420px;top: 111px;width:77%">经编当前日产能</div>
-                <img class="wlbg" src="../../assets/image/bpb/wlbg.png">
-                <div class="wlbg" style="right: -9px;top: 0%;height: 169%;bor;box-shadow: 3px 3px 10px #287faa;border: 1px solid rgb(47, 120, 171);width: 27%;border-radius: 3px;transform: rotateZ(240deg) rotateX(136deg) rotateY(-218deg) skew(0deg, -2deg);background: #0f3f6645;"></div>
-                <div class="itemlist">
-                    <div v-if="selectPredictOrders.length==0" style="text-align: center;transform: rotateZ(26deg) rotateX(28deg) rotateY(-72deg) skew(65deg);letter-spacing: 6px;font-size: 30px;color: #e1e187;margin-top: 21%;">
-                        请选择预测订单
-                    </div>
-                    <template v-else>
-                        <div v-for="(item,index) in bpb_mt_item_data_Top6" :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 }}<br>{{ item.bomSpec }}</td><td>需求:{{item.need/1000}} T</td></tr><tr><td :style="{opacity:item.opacity,transition: 'opacity 0.5s'}">库存:{{item.storage==null?'?':item.storage/1000+' 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/1000+'T'}}</b></div>
-                        </div>
-                    </template>
-                </div>
-            </div>
-            <div class="abs" id="order_wl_line" ref="order_wl_line" style="width: calc(120px); left: 413.59px; top: 269.031px;"><img src="../../assets/image/bpb/v318.png" style="width: 100%;height: 100%;"><img class="abs refresh" src="../../assets/image/bpb/refresh.png" style="left: 35%;top:8%;"></div>
-            <div class="pbp_storage" ref="pbp_storage" style="top: 388px; left: 331px;">
-                <div class="title fontcolor" style="top: 43px;left: -20px;">仓储</div>
-                <div class="iconlist">
-                    <img src="../../assets/image/bpb/h.png" style="z-index: 1">
-                    <img src="../../assets/image/bpb/h.png" id="storage_app_linkpoint" ref="storage_app_linkpoint" style="z-index: 2;top: calc(0.7*110px);left: calc(0.7*70px);">
-                    <img src="../../assets/image/bpb/h.png" style="z-index: 3;top: calc(0.7*154px);left: calc(0.7*150px);">
-                </div>
-                <div class="abs" id="storage_wl_line" ref="storage_wl_line" style="height: 50px;"><img src="../../assets/image/bpb/v317.png" style="width: 100%;height: 100%;"><img class="abs refresh" src="../../assets/image/bpb/refresh.png" style="left: 35%;top:100%;width: 36px;height: 36px"></div>
-                <div class="opt_state" v-if="storageQueryState>0">
-                    <template v-if="storageQueryState==1">
-                        <span>库存检查中</span>
-                        <span class="dot-loading"><span class="dot"></span><span class="dot"></span><span class="dot"></span></span>
-                    </template>
-                    <template v-if="storageQueryState==2">
-                        <span><img src="../../assets/image/CheckCircle.png">库存检查完成</span>
-                    </template>
-                </div>
-            </div>
-            <div class="pbp_plc" ref="pbp_plc" style="top: 477.313px; left: 596.962px;">
-                <div class="title fontcolor" style="top: 43px;left: -20px;">生产</div>
-                <div class="iconlist">
-                    <img src="../../assets/image/bpb/plc.png" style="z-index: 1">
-                    <img src="../../assets/image/bpb/plc.png" id="plc_app_linkpoint" ref="plc_app_linkpoint" style="z-index: 2;top: calc(0.7*110px);left: calc(0.7*70px);">
-                    <img src="../../assets/image/bpb/plc.png" style="z-index: 3;top: calc(0.7*154px);left: calc(0.7*150px);">
-                </div>
-                <div class="abs" id="plc_wl_line" ref="plc_wl_line" style="height: 42.1px;left: 84px;top: 37px;width: 58.4px;"><img src="../../assets/image/bpb/v317.png" style="width: 100%;height: 100%;top:0;"><img class="abs refresh" src="../../assets/image/bpb/refresh.png" style="left: 18%;top:11%;width: 36px;height: 36px"></div>
-                <div class="opt_state" v-if="plcPredictState>0">
-                    <template v-if="plcPredictState==1">
-                        <span>生产预测中</span>
-                        <span class="dot-loading"><span class="dot"></span><span class="dot"></span><span class="dot"></span></span>
-                    </template>
-                    <template v-if="plcPredictState==2">
-                        <span><img src="../../assets/image/CheckCircle.png">生产预测完成</span>
-                    </template>
-                </div>
+  <div class="bpb_bg">
+    <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-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;">&nbsp;天</span>
+        <el-button @click="start">开始</el-button>
+        <el-button @click="imp" style="margin-left: 10px;">导出</el-button>
+      </div>
+      <div class="bpb_orderlist">
+        <div ref="bpb_orderlist_title" class="bpb_order_num fontcolor" @click="showAllOrderList">
+          <template v-if="orderQueryState==2">订单数:<b>{{ orderlist.length }}</b></template>
+        </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,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>
+
+        </div>
+      </div>
+      <div class="pbp_order_app" ref="pbp_order_app" style="top:258.5px;">
+        <div class="title fontcolor">订单系统</div>
+        <div class="iconlist">
+          <img src="../../assets/image/bpb/o.png" style="z-index: 1">
+          <img src="../../assets/image/bpb/o.png" id="order_app_linkpoint" ref="order_app_linkpoint"
+               style="z-index: 2;top: calc(0.7*110px);left: calc(0.7*70px);">
+          <img src="../../assets/image/bpb/o.png" style="z-index: 3;top: calc(0.7*154px);left: calc(0.7*150px);">
+        </div>
+        <div class="opt_state" v-if="orderQueryState>0">
+          <template v-if="orderQueryState==1">
+            <span>订单提取中</span>
+            <span class="dot-loading"><span class="dot"></span><span class="dot"></span><span class="dot"></span></span>
+          </template>
+          <template v-if="orderQueryState==2">
+            <span><img src="../../assets/image/CheckCircle.png">订单提取完成</span>
+          </template>
+        </div>
+      </div>
+      <div class="abs" id="order_app_line" ref="order_app_line" style="height: 50px; left: 192px; top: 287px;"><img
+          src="../../assets/image/bpb/v317.png" style="width: 100%;height: 100%;"><img class="abs refresh"
+                                                                                       src="../../assets/image/bpb/refresh.png"
+                                                                                       style="left: 35%;top:8%;"></div>
+      <div class="bpb_mt_list" ref="bpb_mt_list">
+        <div class="title bpb_order_num fontcolor" @click="showAllBomList">物料清单 <b>{{ bpb_mt_item_data.length }}</b>
+        </div>
+        <div class="title fontcolor" style="left: 420px;top: 111px;width:77%">经编当前日产能</div>
+        <img class="wlbg" src="../../assets/image/bpb/wlbg.png">
+        <div class="wlbg"
+             style="right: -9px;top: 0%;height: 169%;bor;box-shadow: 3px 3px 10px #287faa;border: 1px solid rgb(47, 120, 171);width: 27%;border-radius: 3px;transform: rotateZ(240deg) rotateX(136deg) rotateY(-218deg) skew(0deg, -2deg);background: #0f3f6645;"></div>
+        <div class="itemlist">
+          <div v-if="selectPredictOrders.length==0"
+               style="text-align: center;transform: rotateZ(26deg) rotateX(28deg) rotateY(-72deg) skew(65deg);letter-spacing: 6px;font-size: 30px;color: #e1e187;margin-top: 21%;">
+            请选择预测订单
+          </div>
+          <template v-else>
+            <div v-if="bpb_mt_item_data_Top6.length==0"
+                 style="text-align: center;transform: rotateZ(26deg) rotateX(28deg) rotateY(-72deg) skew(65deg);letter-spacing: 6px;font-size: 30px;color: #e1e187;margin-top: 21%;">
+              未匹配到物料信息
             </div>
-            <div class="bpb_order_resultlist" ref="bpb_order_resultlist" style="left:inherit;right: 50px;top:calc(0.7*710px)">
-                <div ref="bpb_order_resultlist_title" class="bpb_order_num fontcolor" @click="showAllResultList" :style="{'width': plcPredictState=='2'?'75%':'0px','text-align': 'center'}">
-                    <div v-if="plcPredictState==2">预测结果 <b>{{ order_result_data.length }}</b></div>
-                </div>
-                <div class="itemlist" v-show="plcPredictState==2">
-                    <div :class="item.isalarm?'bpb_order_result_item alarm': 'bpb_order_result_item'" v-for="item in order_result_data_Top5" :key="item.id" :style="{zIndex:item.zindex,top:item.top,left:item.left,transition:transition}">
-                        <!--
-                        <div class="no" v-if="!item.isalarm">产能过剩:{{item.neednum/1000}} T<br>编号:{{ item.id }}</div>
-                        <div class="no" v-else>产能不足:{{item.neednum/1000}}T<br>编号:{{ item.id }}</div>
-                        -->
-                        <table cellspacing="0" cellpadding="0"><tbody>
-                                <tr><td rowspan="2"><div class="text_overflow" style="width:100%">{{ item.name }}</div>{{ item.bomSpec }}</td></tr>
-                                <!--
-                                <tr><td>
-                                    <div v-if="!item.isalarm">产能充足,超额 {{(item.neednum/1000).toFixed(1)}} T</div>
-                                    <div v-else>产能不足,差额 {{(item.neednum/1000).toFixed(1)}}T</div>
-                                </td></tr>
-                                -->
-                                <tr><td>
-                                    <div v-if="!item.isalarm">产能充足</div>
-                                    <div v-else>产能不足</div>
-                                </td></tr>
-                        </tbody></table>
-                    </div>
-                </div>
-                <div class="abs order_result_line" ref="order_result_line">
-                    <template v-if="plcPredictState==2">
-                        <img src="../../assets/image/bpb/v320.png" class="link_point">
-                        <img class="abs refresh" src="../../assets/image/bpb/refresh.png" style="left: 35%;top:27%;width: 36px;height: 36px">
-                    </template>
-                </div>
+            <div v-else v-for="(item,index) in bpb_mt_item_data_Top6" :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 }}<br>{{ item.bomSpec }}</td>
+                  <td>需求:{{ item.need / 1000 }} T</td>
+                </tr>
+                <tr>
+                  <td :style="{opacity:item.opacity,transition: 'opacity 0.5s'}">
+                    库存:{{ item.storage == null ? '?' : item.storage / 1000 + ' 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 / 1000 + 'T' }}</b></div>
             </div>
+          </template>
         </div>
-    </div>
-    <div class="abs order_all" ref="order_list_all" v-if="allOrderListShow">
-        <div class="triangle2"></div>
-        <div class="triangle"></div>
-        <el-table :data="orderlist" style="height: 360px;" @selection-change="selectValues">
-            <el-table-column type="selection" width="55" />
-            <el-table-column label="订单编号" align="center" prop="orderCode" />
-            <el-table-column label="订单时间" align="center" prop="orderDate" />
-        </el-table>
-        <div style="line-height: 40px;text-align: center;">
-            <el-button @click="okOrderWin">确定</el-button>
-            <el-button @click="closeOrderWin">关闭</el-button>
+      </div>
+      <div class="abs" id="order_wl_line" ref="order_wl_line"
+           style="width: calc(120px); left: 413.59px; top: 269.031px;"><img src="../../assets/image/bpb/v318.png"
+                                                                            style="width: 100%;height: 100%;"><img
+          class="abs refresh" src="../../assets/image/bpb/refresh.png" style="left: 35%;top:8%;"></div>
+      <div class="pbp_storage" ref="pbp_storage" style="top: 388px; left: 331px;">
+        <div class="title fontcolor" style="top: 43px;left: -20px;">仓储</div>
+        <div class="iconlist">
+          <img src="../../assets/image/bpb/h.png" style="z-index: 1">
+          <img src="../../assets/image/bpb/h.png" id="storage_app_linkpoint" ref="storage_app_linkpoint"
+               style="z-index: 2;top: calc(0.7*110px);left: calc(0.7*70px);">
+          <img src="../../assets/image/bpb/h.png" style="z-index: 3;top: calc(0.7*154px);left: calc(0.7*150px);">
         </div>
-    </div>
-    <div class="abs bom_all" ref="bom_list_all" v-if="allBomListShow">
-        <div class="bom_triangle2"></div>
-        <div class="bom_triangle"></div>
-        <el-table :data="bpb_mt_item_data" style="height: 360px;">
-            <el-table-column label="物料编码" align="center" prop="id" />
-            <el-table-column label="规格型号" align="center" prop="bomSpec" />
-            <el-table-column label="物料名称" align="center" prop="name" width="240px"/>
-            <el-table-column label="需求(T)" align="center" prop="need">
-                <template #default="scope">
-                      <span>{{ (scope.row.need/1000).toFixed(1) }} T</span>
-                    </template>
-            </el-table-column>
-            <el-table-column label="产能(T)" align="center" prop="plc">
-                <template #default="scope">
-                      <span>{{ (scope.row.plc/1000).toFixed(1) }} T</span>
-                    </template>
-            </el-table-column>
-        </el-table>
-        <div style="line-height: 40px;text-align: center;">
-            <el-button @click="closeAllBomList">关闭</el-button>
+        <div class="abs" id="storage_wl_line" ref="storage_wl_line" style="height: 50px;"><img
+            src="../../assets/image/bpb/v317.png" style="width: 100%;height: 100%;"><img class="abs refresh"
+                                                                                         src="../../assets/image/bpb/refresh.png"
+                                                                                         style="left: 35%;top:100%;width: 36px;height: 36px">
         </div>
-    </div>
-    <div class="abs bom_all" ref="result_list_all" :style="{'left':'auto !important','height':result_table_height+100+'px'}" v-if="allOrderResultShow">
-        <div class="bom_triangle2"></div>
-        <div class="bom_triangle"></div>
-        <el-tabs v-model="result_tab_index"> 
-            <el-tab-pane label="预测结果" name="t1"> 
-                <el-table :data="order_result_data" :style="{'height': result_table_height+'px'}">
-                    <el-table-column label="物料编号" align="center" prop="id" />
-                    <el-table-column label="物料名称" align="center" prop="name"  width="240px"/>
-                    <el-table-column label="物料规格" align="center" prop="bomSpec" width="120px"/>
-                    <el-table-column label="预测结果" align="center" prop="neednum" >
-                        <template #default="scope">
-                            <span :style="{'color':scope.row.isalarm?'red':''}" v-html="(scope.row.isalarm?'产能不足<br>差额 ':'产能充足<br>超额 ') + (scope.row.neednum/1000) +'T'"></span>
-                            </template>
-                    </el-table-column>
-                </el-table>
-            </el-tab-pane>
-            <el-tab-pane label="机台工艺调整推荐" name="t2"> 
-                <el-table :data="order_result_alldata" :style="{'height': result_table_height+'px'}" :cell-style="getTable2CellStyle">
-                    <el-table-column label="机台号" align="center" prop="device" fixed="left" width="120px"/>
-                    
-                    <el-table-column label="库存(T)" align="center" prop="kcl"  fixed="left"  width="75px">
-                        <template #default="scope">
-                            <span>{{scope.row.kcl.toFixed(1)}}</span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column label="需求(T)" align="center" prop="xql"  fixed="left" width="75px">
-                        <template #default="scope">
-                            <span>{{scope.row.xql.toFixed(1)}}</span>
-                        </template>
-                    </el-table-column>                    
-                    <el-table-column label="预测(T)" align="center" prop="ycl"  fixed="left" width="75px">
-                        <template #default="scope">
-                            <span>{{scope.row.ycl.toFixed(1)}}</span>
-                        </template>
-                    </el-table-column>
-                    
-                    <el-table-column label="超额(T)" align="center" prop="sy"  fixed="left" width="75px">
-                        <template #default="scope">
-                            <span>{{scope.row.sy.toFixed(1)}}</span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column label="纱线规格D" align="center">
-                        <el-table-column label="L1、L5" align="center" prop="formula_data_4"></el-table-column>
-                        <el-table-column label="L2、L4" align="center" prop="formula_data_5"></el-table-column>  
-                        <el-table-column label="L3" align="center" prop="formula_data_6" width="60px"></el-table-column>                        
-                    </el-table-column>
-                    <el-table-column label="成品" align="center">
-                        <el-table-column label="重" align="center" prop="formula_data_18" width="60px"/>
-                        <el-table-column label="长" align="center" prop="formula_data_16" width="60px"/>
-                        <el-table-column label="宽" align="center" prop="formula_data_17" width="60px"/>
-                    </el-table-column>                    
-                    <el-table-column label="平方米克重" align="center" prop="gramMass"></el-table-column>
-                    <el-table-column label="米克重" align="center" prop="formula_data_3"></el-table-column>
-                    <el-table-column label="毛高" align="center" prop="formula_data_15" width="60px"></el-table-column>
-                    <el-table-column label="配方号" align="center" prop="formula_data_1"></el-table-column>
-                    <el-table-column label="卷曲幅宽" align="center" prop="formula_data_13"></el-table-column> 
-                    <el-table-column label="下布长度" align="center" prop="formula_data_14"></el-table-column>
-                    <el-table-column label="牵拉密度" align="center" prop="formula_data_24"></el-table-column>
-                    <el-table-column label="卷曲张力系数" align="center" prop="formula_data_25"></el-table-column>
-                    <el-table-column label="纱线规格F" align="center" >
-                        <el-table-column label="L1、L5" align="center" prop="formula_data_7"></el-table-column>
-                        <el-table-column label="L2、L4" align="center" prop="formula_data_8"></el-table-column>  
-                        <el-table-column label="L3" align="center" prop="formula_data_9" width="60px"></el-table-column> 
-                    </el-table-column>
-                    <el-table-column label="盘头根数" align="center" >
-                        <el-table-column label="L1、L5" align="center" prop="formula_data_10"></el-table-column>
-                        <el-table-column label="L2、L4" align="center" prop="formula_data_11"></el-table-column>  
-                        <el-table-column label="L3" align="center" prop="formula_data_12" width="60px"></el-table-column>
-                    </el-table-column>
-                </el-table>
-            </el-tab-pane>
-        </el-tabs>
-        <div style="line-height: 40px;text-align: center;">
-            <el-button @click="closeAllResultList">关闭</el-button>
+        <div class="opt_state" v-if="storageQueryState>0">
+          <template v-if="storageQueryState==1">
+            <span>库存检查中</span>
+            <span class="dot-loading"><span class="dot"></span><span class="dot"></span><span class="dot"></span></span>
+          </template>
+          <template v-if="storageQueryState==2">
+            <span><img src="../../assets/image/CheckCircle.png">库存检查完成</span>
+          </template>
+        </div>
+      </div>
+      <div class="pbp_plc" ref="pbp_plc" style="top: 477.313px; left: 596.962px;">
+        <div class="title fontcolor" style="top: 43px;left: -20px;">生产</div>
+        <div class="iconlist">
+          <img src="../../assets/image/bpb/plc.png" style="z-index: 1">
+          <img src="../../assets/image/bpb/plc.png" id="plc_app_linkpoint" ref="plc_app_linkpoint"
+               style="z-index: 2;top: calc(0.7*110px);left: calc(0.7*70px);">
+          <img src="../../assets/image/bpb/plc.png" style="z-index: 3;top: calc(0.7*154px);left: calc(0.7*150px);">
+        </div>
+        <div class="abs" id="plc_wl_line" ref="plc_wl_line" style="height: 42.1px;left: 84px;top: 37px;width: 58.4px;">
+          <img src="../../assets/image/bpb/v317.png" style="width: 100%;height: 100%;top:0;"><img class="abs refresh"
+                                                                                                  src="../../assets/image/bpb/refresh.png"
+                                                                                                  style="left: 18%;top:11%;width: 36px;height: 36px">
+        </div>
+        <div class="opt_state" v-if="plcPredictState>0">
+          <template v-if="plcPredictState==1">
+            <span>生产预测中</span>
+            <span class="dot-loading"><span class="dot"></span><span class="dot"></span><span class="dot"></span></span>
+          </template>
+          <template v-if="plcPredictState==2">
+            <span><img src="../../assets/image/CheckCircle.png">生产预测完成</span>
+          </template>
+        </div>
+      </div>
+      <div class="bpb_order_resultlist" ref="bpb_order_resultlist" style="left:inherit;right: 50px;top:calc(0.7*710px)">
+        <div ref="bpb_order_resultlist_title" class="bpb_order_num fontcolor" @click="showAllResultList"
+             :style="{'width': plcPredictState=='2'?'75%':'0px','text-align': 'center'}">
+          <div v-if="plcPredictState==2">预测结果 <b>{{ order_result_data.length }}</b></div>
+        </div>
+        <div class="itemlist" v-show="plcPredictState==2">
+          <div :class="item.isalarm?'bpb_order_result_item alarm': 'bpb_order_result_item'"
+               v-for="item in order_result_data_Top5" :key="item.id"
+               :style="{zIndex:item.zindex,top:item.top,left:item.left,transition:transition}">
+            <!--
+            <div class="no" v-if="!item.isalarm">产能过剩:{{item.neednum/1000}} T<br>编号:{{ item.id }}</div>
+            <div class="no" v-else>产能不足:{{item.neednum/1000}}T<br>编号:{{ item.id }}</div>
+            -->
+            <table cellspacing="0" cellpadding="0">
+              <tbody>
+              <tr>
+                <td rowspan="2">
+                  <div class="text_overflow" style="width:100%">{{ item.name }}</div>
+                  {{ item.bomSpec }}
+                </td>
+              </tr>
+              <!--
+              <tr><td>
+                  <div v-if="!item.isalarm">产能充足,超额 {{(item.neednum/1000).toFixed(1)}} T</div>
+                  <div v-else>产能不足,差额 {{(item.neednum/1000).toFixed(1)}}T</div>
+              </td></tr>
+              -->
+              <tr>
+                <td>
+                  <div v-if="!item.isalarm">产能充足</div>
+                  <div v-else>产能不足</div>
+                </td>
+              </tr>
+              </tbody>
+            </table>
+          </div>
         </div>
+        <div class="abs order_result_line" ref="order_result_line">
+          <template v-if="plcPredictState==2">
+            <img src="../../assets/image/bpb/v320.png" class="link_point">
+            <img class="abs refresh" src="../../assets/image/bpb/refresh.png"
+                 style="left: 35%;top:27%;width: 36px;height: 36px">
+          </template>
+        </div>
+      </div>
+    </div>
+  </div>
+  <div class="abs order_all" ref="order_list_all" v-if="allOrderListShow">
+    <div class="triangle2"></div>
+    <div class="triangle"></div>
+    <el-table :data="orderlist" style="height: 360px;" @selection-change="selectValues">
+      <el-table-column type="selection" width="55"/>
+      <el-table-column label="订单编号" align="center" prop="orderCode"/>
+      <el-table-column label="订单时间" align="center" prop="orderDate"/>
+    </el-table>
+    <div style="line-height: 40px;text-align: center;">
+      <el-button @click="okOrderWin">确定</el-button>
+      <el-button @click="closeOrderWin">关闭</el-button>
+    </div>
+  </div>
+  <div class="abs bom_all" ref="bom_list_all" v-if="allBomListShow">
+    <div class="bom_triangle2"></div>
+    <div class="bom_triangle"></div>
+    <el-table :data="bpb_mt_item_data" style="height: 360px;">
+      <el-table-column label="物料编码" align="center" prop="id"/>
+      <el-table-column label="规格型号" align="center" prop="bomSpec"/>
+      <el-table-column label="物料名称" align="center" prop="name" width="240px"/>
+      <el-table-column label="需求(T)" align="center" prop="need">
+        <template #default="scope">
+          <span>{{ (scope.row.need / 1000).toFixed(1) }} T</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="产能(T)" align="center" prop="plc">
+        <template #default="scope">
+          <span>{{ (scope.row.plc / 1000).toFixed(1) }} T</span>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div style="line-height: 40px;text-align: center;">
+      <el-button @click="closeAllBomList">关闭</el-button>
     </div>
+  </div>
+  <div class="abs bom_all" ref="result_list_all"
+       :style="{'left':'auto !important','height':result_table_height+100+'px'}" v-if="allOrderResultShow">
+    <div class="bom_triangle2"></div>
+    <div class="bom_triangle"></div>
+    <el-tabs v-model="result_tab_index">
+      <el-tab-pane label="预测结果" name="t1">
+        <el-table :data="order_result_data" :style="{'height': result_table_height+'px'}">
+          <el-table-column label="物料编号" align="center" prop="id"/>
+          <el-table-column label="物料名称" align="center" prop="name" width="240px"/>
+          <el-table-column label="物料规格" align="center" prop="bomSpec" width="120px"/>
+          <el-table-column label="预测结果" align="center" prop="neednum">
+            <template #default="scope">
+              <span :style="{'color':scope.row.isalarm?'red':''}"
+                    v-html="(scope.row.isalarm?'产能不足<br>差额 ':'产能充足<br>超额 ') + (scope.row.neednum/1000) +'T'"></span>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-tab-pane>
+      <el-tab-pane label="机台工艺调整推荐" name="t2">
+        <el-table :data="order_result_alldata" :style="{'height': result_table_height+'px'}"
+                  :cell-style="getTable2CellStyle">
+          <el-table-column label="机台号" align="center" prop="device" fixed="left" width="120px"/>
+
+          <el-table-column label="库存(T)" align="center" prop="kcl" fixed="left" width="75px">
+            <template #default="scope">
+              <span>{{ scope.row.kcl.toFixed(1) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="需求(T)" align="center" prop="xql" fixed="left" width="75px">
+            <template #default="scope">
+              <span>{{ scope.row.xql.toFixed(1) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="预测(T)" align="center" prop="ycl" fixed="left" width="75px">
+            <template #default="scope">
+              <span>{{ scope.row.ycl.toFixed(1) }}</span>
+            </template>
+          </el-table-column>
+
+          <el-table-column label="超额(T)" align="center" prop="sy" fixed="left" width="75px">
+            <template #default="scope">
+              <span>{{ scope.row.sy.toFixed(1) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="纱线规格D" align="center">
+            <el-table-column label="L1、L5" align="center" prop="formula_data_4"></el-table-column>
+            <el-table-column label="L2、L4" align="center" prop="formula_data_5"></el-table-column>
+            <el-table-column label="L3" align="center" prop="formula_data_6" width="60px"></el-table-column>
+          </el-table-column>
+          <el-table-column label="成品" align="center">
+            <el-table-column label="重" align="center" prop="formula_data_18" width="60px"/>
+            <el-table-column label="长" align="center" prop="formula_data_16" width="60px"/>
+            <el-table-column label="宽" align="center" prop="formula_data_17" width="60px"/>
+          </el-table-column>
+          <el-table-column label="平方米克重" align="center" prop="gramMass"></el-table-column>
+          <el-table-column label="米克重" align="center" prop="formula_data_3"></el-table-column>
+          <el-table-column label="毛高" align="center" prop="formula_data_15" width="60px"></el-table-column>
+          <el-table-column label="配方号" align="center" prop="formula_data_1"></el-table-column>
+          <el-table-column label="卷曲幅宽" align="center" prop="formula_data_13"></el-table-column>
+          <el-table-column label="下布长度" align="center" prop="formula_data_14"></el-table-column>
+          <el-table-column label="牵拉密度" align="center" prop="formula_data_24"></el-table-column>
+          <el-table-column label="卷曲张力系数" align="center" prop="formula_data_25"></el-table-column>
+          <el-table-column label="纱线规格F" align="center">
+            <el-table-column label="L1、L5" align="center" prop="formula_data_7"></el-table-column>
+            <el-table-column label="L2、L4" align="center" prop="formula_data_8"></el-table-column>
+            <el-table-column label="L3" align="center" prop="formula_data_9" width="60px"></el-table-column>
+          </el-table-column>
+          <el-table-column label="盘头根数" align="center">
+            <el-table-column label="L1、L5" align="center" prop="formula_data_10"></el-table-column>
+            <el-table-column label="L2、L4" align="center" prop="formula_data_11"></el-table-column>
+            <el-table-column label="L3" align="center" prop="formula_data_12" width="60px"></el-table-column>
+          </el-table-column>
+        </el-table>
+      </el-tab-pane>
+    </el-tabs>
+    <div style="line-height: 40px;text-align: center;">
+      <el-button @click="closeAllResultList">关闭</el-button>
+    </div>
+  </div>
 </template>
 <style>
 @import '../../styles/bpb.css';
-.el-date-editor.el-input, .el-date-editor.el-input__wrapper{
-    width:150px;
+
+.el-date-editor.el-input, .el-date-editor.el-input__wrapper {
+  width: 150px;
 }
-.el-input__wrapper{
-    background-color:#1f4774;
-    box-shadow: 0 0 0 1px #7f9bdd inset !important;
+
+.el-input__wrapper {
+  background-color: #1f4774;
+  box-shadow: 0 0 0 1px #7f9bdd inset !important;
 }
-.el-input__wrapper input{
-    border:0px !important;
+
+.el-input__wrapper input {
+  border: 0px !important;
 }
 
 
 </style>
 <script>
-import { ref,onMounted,watch } from 'vue';
+import {onMounted, ref} from 'vue';
 import api from "@/api/system";
-import { ElDatePicker,ElMessage } from 'element-plus';
+import {ElMessage} from 'element-plus';
 import 'element-plus/dist/index.css'; // 确保导入样式文件
-import { template } from 'lodash';
 export default {
-    props:{
-
-    },
-    setup(props,{emit}) {
-        const result_table_height=ref(360)
-        const orderDateList = ref([]);
-        const orderDateList2 = ref([]);
-        const orderQueryState = ref(0);
-        const storageQueryState = ref(0);
-        const plcPredictState = ref(0);
-        const selectedDate1 = ref("");
-        const selectedDate2 = ref("");
-        const days = ref(10);
-        const allOrderListShow = ref(false);
-        const allBomListShow = ref(false);
-        const allOrderResultShow = ref(false);
-        let selectPredictOrders = ref([]);
-        let orderlist=ref([]);
-        let orderlistTop5 = ref([]);
-        let bpb_mt_item_data = ref([]);
-        let bpb_mt_item_data_Top6 = ref([]);
-        const order_list_all = ref(null);
-        const bom_list_all = ref(null);
-        const result_list_all = ref(null);
-        const bpb_orderlist_title = ref(null);
-        const bpb_order_resultlist_title =ref(null);
-        const orderItemList = ref(null);
-        const pbp_order_app = ref(null);
-        const order_app_linkpoint = ref(null);
-        const order_app_line = ref(null);
-        const order_wl_line = ref(null);
-        const bpb_mt_list = ref(null);
-        const pbp_storage = ref(null);
-        const pbp_plc = ref(null);
-        const storage_app_linkpoint = ref(null);
-        const plc_app_linkpoint = ref(null);
-        const storage_wl_line = ref(null);
-        const plc_wl_line = ref(null);
-        const bpb_order_resultlist = ref(null);
-        const order_result_line = ref(null);
-        let order_result_data_Top5 = ref([]);
-        let order_result_data = ref([]);
-        const result_tab_index = ref('t1');
-        const order_result_alldata=ref([]);
-
-        function testData(){
+  props: {},
+  setup(props, {emit}) {
+    const result_table_height = ref(360)
+    const orderDateList = ref([]);
+    const orderDateList2 = ref([]);
+    const orderQueryState = ref(0);
+    const storageQueryState = ref(0);
+    const plcPredictState = ref(0);
+    const selectedDate1 = ref("");
+    const selectedDate2 = ref("");
+    const days = ref(10);
+    const allOrderListShow = ref(false);
+    const allBomListShow = ref(false);
+    const allOrderResultShow = ref(false);
+    let selectPredictOrders = ref([]);
+    let orderlist = ref([]);
+    let orderlistTop5 = ref([]);
+    let bpb_mt_item_data = ref([]);
+    let bpb_mt_item_data_Top6 = ref([]);
+    const order_list_all = ref(null);
+    const bom_list_all = ref(null);
+    const result_list_all = ref(null);
+    const bpb_orderlist_title = ref(null);
+    const bpb_order_resultlist_title = ref(null);
+    const orderItemList = ref(null);
+    const pbp_order_app = ref(null);
+    const order_app_linkpoint = ref(null);
+    const order_app_line = ref(null);
+    const order_wl_line = ref(null);
+    const bpb_mt_list = ref(null);
+    const pbp_storage = ref(null);
+    const pbp_plc = ref(null);
+    const storage_app_linkpoint = ref(null);
+    const plc_app_linkpoint = ref(null);
+    const storage_wl_line = ref(null);
+    const plc_wl_line = ref(null);
+    const bpb_order_resultlist = ref(null);
+    const order_result_line = ref(null);
+    let order_result_data_Top5 = ref([]);
+    let order_result_data = ref([]);
+    const result_tab_index = ref('t1');
+    const order_result_alldata = ref([]);
 
-        }
-        function getTable2CellStyle({row, column, rowIndex, columnIndex}){
-                if (column.property == 'kcl' || column.property == 'ycl'||column.property == 'xql'||column.property == 'sy') {
-                    return {"background-color": "rgb(11 64 99)","color": "#000"};
-                }
-                return {};
-        }
-        function getOerderList(){
-            orderQueryState.value=1;//开始查询订单
-            var v = {
-                "start":selectedDate1.value,
-                "end":selectedDate2.value,
-                "days":days.value,
-            };
-            api.GetOrderList(v).then((response) => {
-              let res = response.data;
-              order_result_alldata.value = response.list;
-                if(res==null){
-                    return;
-                }
-                orderlist.value = res;
-                let tmpLst = [];
-                let top=0;
-                orderlistTop5.value = res.slice(0, 5);
-                orderQueryState.value=2;//订单查询完成
-                setTimeout(function(){
-                    orderlistTop5.value.forEach((item,ind)=>{
-                        top=210-(ind*30)+'px';
-                        let zindex = 1+ind;
-                        tmpLst.push({"id":item.orderCode,"orderCode":item.orderCode,customerName:item.customerName,orderDate:item.orderDate,bomlist:item.bomList,"top":top,"zindex":zindex,"checked":true,transition:'top '+(ind*0.3)+'s ease-in-out'});
-                    })
-                    orderlistTop5.value = tmpLst;
-                    layout();
-                },1000);
-                setTimeout(function(){
-                    selectPredictOrders.value = res;
-                    selectedOrder(null);
-                },2500);
-            });
-        }
-        function init(){
-            testData();
+    function testData() {
 
-            getOrderDateList();
-        }
-        function start(){
-            allOrderListShow.value=false;
-            orderQueryState.value = 0;
-            storageQueryState.value = 0;
-            plcPredictState.value = 0;
-            orderlist.value = [];
-            selectPredictOrders.value=[];
-            bpb_mt_item_data.value = [];
-            bpb_mt_item_data_Top6.value = [];
-            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();
-        }
-        //重置订单列表布局
-        function layout(){
-            setTimeout(() => {
-                let lastOrderItemEle = orderItemList.value.firstElementChild;
-                let sty1 = window.getComputedStyle(lastOrderItemEle);
-                var orderH = parseInt(sty1.height)+lastOrderItemEle.offsetTop;
-                bpb_orderlist_title.value.style.top = orderItemList.value.lastElementChild.offsetTop-10+'px';
-                orderItemList.value.parentElement.style.height = orderH+'px';
-                pbp_order_app.value.style.top = lastOrderItemEle.offsetTop+(parseInt(sty1.height)/2)+'px';
-                let sty2 = window.getComputedStyle(order_app_linkpoint.value);
-                //订单系统与订单之间的连线
-                order_app_line.value.style.left = pbp_order_app.value.offsetLeft + order_app_linkpoint.value.offsetLeft + (parseInt(sty2.width)/2+30)+'px';
-                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+'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';
-
-                storage_wl_line.value.style.left = storage_app_linkpoint.value.offsetLeft + parseInt(window.getComputedStyle(storage_app_linkpoint.value).width)/2 + 30 + 'px';
-                storage_wl_line.value.style.top = storage_app_linkpoint.value.offsetTop - parseInt(window.getComputedStyle(storage_app_linkpoint.value).height) -30 + 'px';
-                storage_wl_line.value.style.width = (0.7*130)+"px";
-                storage_wl_line.value.style.height = (0.7*80)+"px";
-                let cllist =  bpb_mt_list.value.querySelectorAll('.cl');
-                let cllistXY = (cllist[cllist.length-1].getBoundingClientRect());
-                pbp_plc.value.style.top = cllistXY.top + parseInt(window.getComputedStyle(cllist[cllist.length-1]).height) - 60 +'px';
-                pbp_plc.value.style.left = cllistXY.left -200 +'px';
-
-                plc_wl_line.value.style.left = plc_app_linkpoint.value.offsetLeft + parseInt(window.getComputedStyle(plc_app_linkpoint.value).width)/2+30+'px';
-                plc_wl_line.value.style.top = plc_app_linkpoint.value.offsetTop - parseInt(window.getComputedStyle(plc_app_linkpoint.value).height) -30 + 'px';
-                plc_wl_line.value.style.width = (0.7*132)+"px";
-                plc_wl_line.value.style.height = (0.7*173)+"px";
-            }, 1000);
+    }
+
+    function getTable2CellStyle({row, column, rowIndex, columnIndex}) {
+      if (column.property == 'kcl' || column.property == 'ycl' || column.property == 'xql' || column.property == 'sy') {
+        return {"background-color": "rgb(11 64 99)", "color": "#000"};
+      }
+      return {};
+    }
+
+    function getOerderList() {
+      orderQueryState.value = 1;//开始查询订单
+      var v = {
+        "start": selectedDate1.value,
+        "end": selectedDate2.value,
+        "days": days.value,
+      };
+      api.GetOrderList(v).then((response) => {
+        let res = response.data;
+        order_result_alldata.value = response.list;
+        if (res == null) {
+          return;
         }
-        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();
+        orderlist.value = res;
+        let tmpLst = [];
+        let top = 0;
+        orderlistTop5.value = res.slice(0, 5);
+        orderQueryState.value = 2;//订单查询完成
+        setTimeout(function () {
+          orderlistTop5.value.forEach((item, ind) => {
+            top = 210 - (ind * 30) + 'px';
+            let zindex = 1 + ind;
+            tmpLst.push({
+              "id": item.orderCode,
+              "orderCode": item.orderCode,
+              customerName: item.customerName,
+              orderDate: item.orderDate,
+              bomlist: item.bomList,
+              "top": top,
+              "zindex": zindex,
+              "checked": true,
+              transition: 'top ' + (ind * 0.3) + 's ease-in-out'
             });
+          })
+          orderlistTop5.value = tmpLst;
+          layout();
+        }, 1000);
+        setTimeout(function () {
+          selectPredictOrders.value = res;
+          selectedOrder(null);
+        }, 2500);
+      });
+    }
+
+    function init() {
+      testData();
+
+      getOrderDateList();
+    }
+
+    function start() {
+      allOrderListShow.value = false;
+      orderQueryState.value = 0;
+      storageQueryState.value = 0;
+      plcPredictState.value = 0;
+      orderlist.value = [];
+      selectPredictOrders.value = [];
+      bpb_mt_item_data.value = [];
+      bpb_mt_item_data_Top6.value = [];
+      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();
+    }
+
+    //重置订单列表布局
+    function layout() {
+      setTimeout(() => {
+        let lastOrderItemEle = orderItemList.value.firstElementChild;
+        let sty1 = window.getComputedStyle(lastOrderItemEle);
+        var orderH = parseInt(sty1.height) + lastOrderItemEle.offsetTop;
+        bpb_orderlist_title.value.style.top = orderItemList.value.lastElementChild.offsetTop - 10 + 'px';
+        orderItemList.value.parentElement.style.height = orderH + 'px';
+        pbp_order_app.value.style.top = lastOrderItemEle.offsetTop + (parseInt(sty1.height) / 2) + 'px';
+        let sty2 = window.getComputedStyle(order_app_linkpoint.value);
+        //订单系统与订单之间的连线
+        order_app_line.value.style.left = pbp_order_app.value.offsetLeft + order_app_linkpoint.value.offsetLeft + (parseInt(sty2.width) / 2 + 30) + 'px';
+        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+'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';
+
+        storage_wl_line.value.style.left = storage_app_linkpoint.value.offsetLeft + parseInt(window.getComputedStyle(storage_app_linkpoint.value).width) / 2 + 30 + 'px';
+        storage_wl_line.value.style.top = storage_app_linkpoint.value.offsetTop - parseInt(window.getComputedStyle(storage_app_linkpoint.value).height) - 30 + 'px';
+        storage_wl_line.value.style.width = (0.7 * 130) + "px";
+        storage_wl_line.value.style.height = (0.7 * 80) + "px";
+        let cllist = bpb_mt_list.value.querySelectorAll('.cl');
+        let cllistXY = (cllist[cllist.length - 1].getBoundingClientRect());
+        pbp_plc.value.style.top = cllistXY.top + parseInt(window.getComputedStyle(cllist[cllist.length - 1]).height) - 60 + 'px';
+        pbp_plc.value.style.left = cllistXY.left - 200 + 'px';
+
+        plc_wl_line.value.style.left = plc_app_linkpoint.value.offsetLeft + parseInt(window.getComputedStyle(plc_app_linkpoint.value).width) / 2 + 30 + 'px';
+        plc_wl_line.value.style.top = plc_app_linkpoint.value.offsetTop - parseInt(window.getComputedStyle(plc_app_linkpoint.value).height) - 30 + 'px';
+        plc_wl_line.value.style.width = (0.7 * 132) + "px";
+        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) {
+      allOrderListShow.value = false;
+      var ind = false;
+      var datelist2 = [];
+      bpb_mt_item_data_Top6.value = [];
+      selectedDate2.value = "";
+      for (let index = 0; index < orderDateList.value.length; index++) {
+        const element = orderDateList.value[index];
+        if (ind) {
+          datelist2.push(element);
+          continue;
         }
-        function date1Changed(v){
-            allOrderListShow.value=false;
-            var ind = false;
-            var datelist2 = [];
-            bpb_mt_item_data_Top6.value=[];
-            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;
+        if (v == element) {
+          ind = true;
+          datelist2.push(element);
         }
-        var boms = {};
-        function selectedOrder(obj){
-            //let tempLst = orderlistTop5.value;
-            bpb_order_resultlist_title.value.style.top='0%';
-            storageQueryState.value = 0;
-            plcPredictState.value = 0;
-            bpb_mt_item_data.value = [];
-            bpb_mt_item_data_Top6.value=[];
-            order_result_data.value = [];
-            boms = {};
-            if(obj!=null){
-                if(!obj.checked){
-                    obj.checked=true;
-                    selectPredictOrders.value.push(obj)
-                }else{
-                    obj.checked=false;
-                    var ind = -1;
-                    for(let i=0;i<selectPredictOrders.value.length;i++){
-                        if(selectPredictOrders.value[i].orderCode==obj.orderCode){
-                            ind = i;
-                            break;
-                        }
-                    }
-                    selectPredictOrders.value.splice(ind,1);
-                }
-            }
-            for(var k in selectPredictOrders.value){
-                let ele = selectPredictOrders.value[k];
-                    for (let index = 0; index < (ele.bomList||ele.bomlist).length; index++) {
-                        const element = (ele.bomList||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;
-                    }
-            }
-            //console.log(boms)
-            if(selectPredictOrders.value.length==0) storageQueryState.value=0;
-            else{
-                 setTimeout(() => {
-                    //物料清单信息
-                    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,bomSpec:item.bomSpec,"top":top,"zindex":zindex,"left":left,"isalarm":item.isalarm,need:item.need,storage:item.storage,plc:item.plc,"neednum":0};
-                        tempLst.push(obj);
-                    });
-                    bpb_mt_item_data.value = tempLst;
-                    bpb_mt_item_data_Top6.value = tempLst.slice(0,6);
-                    queryStorage();
-                 }, 1000);
+      }
+      orderDateList2.value = datelist2;
+    }
+
+    var boms = {};
+
+    function selectedOrder(obj) {
+      //let tempLst = orderlistTop5.value;
+      bpb_order_resultlist_title.value.style.top = '0%';
+      storageQueryState.value = 0;
+      plcPredictState.value = 0;
+      bpb_mt_item_data.value = [];
+      bpb_mt_item_data_Top6.value = [];
+      order_result_data.value = [];
+      boms = {};
+      if (obj != null) {
+        if (!obj.checked) {
+          obj.checked = true;
+          selectPredictOrders.value.push(obj)
+        } else {
+          obj.checked = false;
+          var ind = -1;
+          for (let i = 0; i < selectPredictOrders.value.length; i++) {
+            if (selectPredictOrders.value[i].orderCode == obj.orderCode) {
+              ind = i;
+              break;
             }
-            //orderlistTop5.value = tempLst;
-        }
-        //库存检查
-        function queryStorage(){
-            storageQueryState.value=1;
-            setTimeout(() => {
-                storageQueryState.value =2;
-                //渐隐
-                setTimeout(() => {
-                    let tempLst = bpb_mt_item_data.value;
-                    tempLst.forEach(ele=>{
-                        ele['opacity'] = 0;
-                    })
-                    bpb_mt_item_data.value = tempLst;
-                    bpb_mt_item_data_Top6.value = tempLst.slice(0,6);
-                }, 500);
-                //渐显
-                setTimeout(() => {
-                    let tempLst = bpb_mt_item_data.value;
-                    tempLst.forEach(ele=>{
-                        var bomItem = boms[ele.id];
-                        ele['storage'] = bomItem.kcl;
-                        ele['isalarm'] = false;
-                        ele['opacity'] = 1;
-                        ele['plc'] = bomItem.last;
-                    })
-                    bpb_mt_item_data.value = tempLst;
-                    bpb_mt_item_data_Top6.value = tempLst.slice(0,6);
-                    predict();
-                }, 1000);
-            }, 3000);
+          }
+          selectPredictOrders.value.splice(ind, 1);
         }
-        function predict(){
-            setTimeout(() => {
-                plcPredictState.value = 1;
-                 //预测结果列表
-                 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||element.bomList).length; index2++) {
-                        const element2 = (element.bomlist||element.bomList)[index2];
-                        if(boms[element2.bomCode]!=null){
-                            neednum = boms[element2.bomCode].cz;
-                            if(neednum>0) isalarm = true;
-                        }
-                    }
-                    temp2.push({id:element.id||element.orderCode,customerName:element.customerName,orderDate:element.orderDate,isalarm:isalarm,neednum:neednum})
-                }*/
-                for(let index=0;index<bpb_mt_item_data.value.length;index++){
-                    const element = {...bpb_mt_item_data.value[index]};
-                    var neednum = element.need-element.storage-element.plc*days.value;
-                    element['isalarm'] = neednum>0? true : false;
-                    element["neednum"] = Math.abs(neednum);
-                    temp2.push(element);
-                }
-                temp2.sort(function(a, b){
-                    return a.isalarm - b.isalarm
-                }).reverse();
-                order_result_data.value = temp2;
-                order_result_data_Top5.value = temp2.slice(0,6);
-                setTimeout(() => {
-                    //排列预测结果元素
-                    let tmpLst = [];
-                    order_result_data.value.forEach((item,ind)=>{
-                        tmpLst.push({"id":item.id,name:item.name,bomSpec:item.bomSpec,"zindex":1+ind,"left":'0px',"top":(ind*-65)+'px',"isalarm":item.isalarm,"neednum":item.neednum,transition:"opt "+(ind*0.5)+"s ease-in-out"});
-                    });
-                    order_result_data.value = tmpLst;
-                    order_result_data_Top5.value = tmpLst.slice(0,6);
-                    var orderCount = order_result_data_Top5.value.length;
-                    if(orderCount>3) orderCount=3;
-                    var tmpTop = parseInt(window.getComputedStyle(bpb_order_resultlist.value.querySelectorAll('.bpb_order_result_item')[0]).height)*0.7+((orderCount-1)*30);
-                    order_result_line.value.style.left = 'inherit';
-                    order_result_line.value.style.right = parseInt(window.getComputedStyle(bpb_order_resultlist.value).width) + 25 + 'px';
-                    order_result_line.value.style.top = tmpTop*-1+"px";
-                    bpb_order_resultlist_title.value.style.top =   ((order_result_data_Top5.value.length-1)*-65)-10+'px';
-                    plcPredictState.value = 2;
-                }, 5000);
-            }, 1000);
+      }
+      for (var k in selectPredictOrders.value) {
+        let ele = selectPredictOrders.value[k];
+        for (let index = 0; index < (ele.bomList || ele.bomlist).length; index++) {
+          const element = (ele.bomList || 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;
         }
+      }
+      //console.log(boms)
+      if (selectPredictOrders.value.length == 0) storageQueryState.value = 0;
+      else {
+        setTimeout(() => {
+          //物料清单信息
+          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,
+              bomSpec: item.bomSpec,
+              "top": top,
+              "zindex": zindex,
+              "left": left,
+              "isalarm": item.isalarm,
+              need: item.need,
+              storage: item.storage,
+              plc: item.plc,
+              "neednum": 0
+            };
+            tempLst.push(obj);
+          });
+          bpb_mt_item_data.value = tempLst;
+          bpb_mt_item_data_Top6.value = tempLst.slice(0, 6);
+          queryStorage();
+        }, 1000);
+      }
+      //orderlistTop5.value = tempLst;
+    }
 
-        function showAllOrderList(){
-            //if(orderlist.value.length<= orderlistTop5.value.length) return;
-            allOrderListShow.value = true;
-            allBomListShow.value= false;
-            allOrderResultShow.value =false;
-            setTimeout(() => {
-                order_list_all.value.style.top =  bpb_orderlist_title.value.offsetTop+'px';
-                order_list_all.value.style.left = bpb_orderlist_title.value.parentElement.offsetLeft+parseInt( window.getComputedStyle(bpb_orderlist_title.value.parentElement).width)+'px';
-            }, 20);
-        }
-        function showAllBomList(){
-            allBomListShow.value=true
-            allOrderListShow.value=false;
-            allOrderResultShow.value = false;
-            setTimeout(() => {
-                bom_list_all.value.style.top =  '86px';
-                bom_list_all.value.style.left = '191px';
-            }, 20);
-        }
+    //库存检查
+    function queryStorage() {
+      storageQueryState.value = 1;
+      setTimeout(() => {
+        storageQueryState.value = 2;
+        //渐隐
+        setTimeout(() => {
+          let tempLst = bpb_mt_item_data.value;
+          tempLst.forEach(ele => {
+            ele['opacity'] = 0;
+          })
+          bpb_mt_item_data.value = tempLst;
+          bpb_mt_item_data_Top6.value = tempLst.slice(0, 6);
+        }, 500);
+        //渐显
+        setTimeout(() => {
+          let tempLst = bpb_mt_item_data.value;
+          tempLst.forEach(ele => {
+            var bomItem = boms[ele.id];
+            ele['storage'] = bomItem.kcl;
+            ele['isalarm'] = false;
+            ele['opacity'] = 1;
+            ele['plc'] = bomItem.last;
+          })
+          bpb_mt_item_data.value = tempLst;
+          bpb_mt_item_data_Top6.value = tempLst.slice(0, 6);
+          predict();
+        }, 1000);
+      }, 3000);
+    }
 
-        function showAllResultList(){
-            allBomListShow.value=false;
-            allOrderListShow.value=false;
-            allOrderResultShow.value = true;
-            var t = parseInt(window.getComputedStyle(bpb_order_resultlist_title.value.parentElement).top)+bpb_order_resultlist_title.value.offsetTop-240;
-            if((724-t)<400 ){
-                result_table_height.value=200;
-            }else{
-                result_table_height.value=360;
-            }
-            setTimeout(() => {
-                result_list_all.value.style.top =  '246px';
-                result_list_all.value.style.right = '220px';
-            }, 20);
+    function predict() {
+      setTimeout(() => {
+        plcPredictState.value = 1;
+        //预测结果列表
+        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||element.bomList).length; index2++) {
+               const element2 = (element.bomlist||element.bomList)[index2];
+               if(boms[element2.bomCode]!=null){
+                   neednum = boms[element2.bomCode].cz;
+                   if(neednum>0) isalarm = true;
+               }
+           }
+           temp2.push({id:element.id||element.orderCode,customerName:element.customerName,orderDate:element.orderDate,isalarm:isalarm,neednum:neednum})
+       }*/
+        for (let index = 0; index < bpb_mt_item_data.value.length; index++) {
+          const element = {...bpb_mt_item_data.value[index]};
+          var neednum = element.need - element.storage - element.plc * days.value;
+          element['isalarm'] = neednum > 0 ? true : false;
+          element["neednum"] = Math.abs(neednum);
+          temp2.push(element);
         }
+        temp2.sort(function (a, b) {
+          return a.isalarm - b.isalarm
+        }).reverse();
+        order_result_data.value = temp2;
+        order_result_data_Top5.value = temp2.slice(0, 6);
+        setTimeout(() => {
+          //排列预测结果元素
+          let tmpLst = [];
+          order_result_data.value.forEach((item, ind) => {
+            tmpLst.push({
+              "id": item.id,
+              name: item.name,
+              bomSpec: item.bomSpec,
+              "zindex": 1 + ind,
+              "left": '0px',
+              "top": (ind * -65) + 'px',
+              "isalarm": item.isalarm,
+              "neednum": item.neednum,
+              transition: "opt " + (ind * 0.5) + "s ease-in-out"
+            });
+          });
+          order_result_data.value = tmpLst;
+          order_result_data_Top5.value = tmpLst.slice(0, 6);
+          var orderCount = order_result_data_Top5.value.length;
+          if (orderCount > 3) orderCount = 3;
+          var tmpTop = parseInt(window.getComputedStyle(bpb_order_resultlist.value.querySelectorAll('.bpb_order_result_item')[0]).height) * 0.7 + ((orderCount - 1) * 30);
+          order_result_line.value.style.left = 'inherit';
+          order_result_line.value.style.right = parseInt(window.getComputedStyle(bpb_order_resultlist.value).width) + 25 + 'px';
+          order_result_line.value.style.top = tmpTop * -1 + "px";
+          bpb_order_resultlist_title.value.style.top = ((order_result_data_Top5.value.length - 1) * -65) - 10 + 'px';
+          plcPredictState.value = 2;
+        }, 5000);
+      }, 1000);
+    }
 
-        function closeAllBomList(){
-            allBomListShow.value=false;
-        }
-        function closeAllResultList(){
-            allOrderResultShow.value = false;
-        }
-        function selectValues(vs){
-            //console.log(vs)
-            selectPredictOrders.value = vs;
-            let tmpLst = orderlistTop5.value;
-            tmpLst.forEach((item,ind)=>{
-                var d = vs.filter((ele)=> ele.orderCode==item.orderCode);
-                if(d.length>0){
-                    item.checked = true;
-                }else{
-                    item.checked=false;
-                }
-            })
-        }
-        function okOrderWin(){
-            storageQueryState.value = 0;
-            plcPredictState.value = 0;
-            bpb_mt_item_data.value = [];
-            bpb_mt_item_data_Top6.value=[];
-            order_result_data.value = [];
-            boms={};
-            for(var key in selectPredictOrders.value){
-                var ele = selectPredictOrders.value[key];
-                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;
-                }
-            }
-                    //物料清单信息
-                    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,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;
-                    bpb_mt_item_data_Top6.value = tempLst.slice(0,6);
-                    queryStorage();
-            allOrderListShow.value=false;
-        }
-        function closeOrderWin(){
-            allOrderListShow.value=false;
+    function showAllOrderList() {
+      //if(orderlist.value.length<= orderlistTop5.value.length) return;
+      allOrderListShow.value = true;
+      allBomListShow.value = false;
+      allOrderResultShow.value = false;
+      setTimeout(() => {
+        order_list_all.value.style.top = bpb_orderlist_title.value.offsetTop + 'px';
+        order_list_all.value.style.left = bpb_orderlist_title.value.parentElement.offsetLeft + parseInt(window.getComputedStyle(bpb_orderlist_title.value.parentElement).width) + 'px';
+      }, 20);
+    }
+
+    function showAllBomList() {
+      allBomListShow.value = true
+      allOrderListShow.value = false;
+      allOrderResultShow.value = false;
+      setTimeout(() => {
+        bom_list_all.value.style.top = '86px';
+        bom_list_all.value.style.left = '191px';
+      }, 20);
+    }
+
+    function showAllResultList() {
+      allBomListShow.value = false;
+      allOrderListShow.value = false;
+      allOrderResultShow.value = true;
+      var t = parseInt(window.getComputedStyle(bpb_order_resultlist_title.value.parentElement).top) + bpb_order_resultlist_title.value.offsetTop - 240;
+      if ((724 - t) < 400) {
+        result_table_height.value = 200;
+      } else {
+        result_table_height.value = 360;
+      }
+      setTimeout(() => {
+        result_list_all.value.style.top = '246px';
+        result_list_all.value.style.right = '220px';
+      }, 20);
+    }
+
+    function closeAllBomList() {
+      allBomListShow.value = false;
+    }
+
+    function closeAllResultList() {
+      allOrderResultShow.value = false;
+    }
+
+    function selectValues(vs) {
+      //console.log(vs)
+      selectPredictOrders.value = vs;
+      let tmpLst = orderlistTop5.value;
+      tmpLst.forEach((item, ind) => {
+        var d = vs.filter((ele) => ele.orderCode == item.orderCode);
+        if (d.length > 0) {
+          item.checked = true;
+        } else {
+          item.checked = false;
         }
+      })
+    }
 
-        function imp(){
-            allOrderListShow.value=false;
-            let uri = process.env.VUE_APP_API + "/api/export/order?start=" + selectedDate1.value + "&end=" + selectedDate2.value + "&days=" + days.value;
-            //proxy.download(uri, {}, `白坯布靶向智能生产预测${selectedDate1.value}至${selectedDate2.value}.zip`)
-            window.open(uri);
+    function okOrderWin() {
+      storageQueryState.value = 0;
+      plcPredictState.value = 0;
+      bpb_mt_item_data.value = [];
+      bpb_mt_item_data_Top6.value = [];
+      order_result_data.value = [];
+      boms = {};
+      for (var key in selectPredictOrders.value) {
+        var ele = selectPredictOrders.value[key];
+        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;
         }
-        onMounted(()=>{
-            init();
+      }
+      //物料清单信息
+      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
         });
-        return{
-            init,
-            start,
-            imp,
-            result_table_height,
-            days,
-            orderDateList,
-            orderDateList2,
-            selectPredictOrders,
-            orderQueryState,
-            storageQueryState,
-            plcPredictState,
-            selectedDate1,
-            selectedDate2,
-            orderlist,
-            orderlistTop5,
-            bpb_mt_item_data,
-            bpb_mt_item_data_Top6,
-            order_result_data,
-            order_result_data_Top5,
-            selectedOrder,
-            queryStorage,
-            order_list_all,
-            result_list_all,
-            bom_list_all,
-            bpb_orderlist_title,
-            bpb_order_resultlist_title,
-            orderItemList,
-            pbp_order_app,
-            order_app_linkpoint,
-            order_app_line,
-            order_wl_line,
-            bpb_mt_list,
-            pbp_storage,
-            pbp_plc,
-            storage_app_linkpoint,
-            plc_app_linkpoint,
-            storage_wl_line,
-            plc_wl_line,
-            order_result_line,
-            bpb_order_resultlist,
-            getOrderDateList,
-            date1Changed,
-            showAllOrderList,
-            showAllBomList,
-            closeAllBomList,
-            allOrderListShow,
-            allBomListShow,
-            allOrderResultShow,
-            showAllResultList,
-            closeAllResultList,
-            okOrderWin,
-            closeOrderWin,
-            selectValues,
-            result_tab_index,
-            order_result_alldata,
-            getTable2CellStyle,
-        }
+      }
+      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,
+          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;
+      bpb_mt_item_data_Top6.value = tempLst.slice(0, 6);
+      queryStorage();
+      allOrderListShow.value = false;
     }
+
+    function closeOrderWin() {
+      allOrderListShow.value = false;
+    }
+
+    function imp() {
+      allOrderListShow.value = false;
+      let uri = process.env.VUE_APP_API + "/api/export/order?start=" + selectedDate1.value + "&end=" + selectedDate2.value + "&days=" + days.value;
+      //proxy.download(uri, {}, `白坯布靶向智能生产预测${selectedDate1.value}至${selectedDate2.value}.zip`)
+      window.open(uri);
+    }
+
+    onMounted(() => {
+      init();
+    });
+    return {
+      init,
+      start,
+      imp,
+      result_table_height,
+      days,
+      orderDateList,
+      orderDateList2,
+      selectPredictOrders,
+      orderQueryState,
+      storageQueryState,
+      plcPredictState,
+      selectedDate1,
+      selectedDate2,
+      orderlist,
+      orderlistTop5,
+      bpb_mt_item_data,
+      bpb_mt_item_data_Top6,
+      order_result_data,
+      order_result_data_Top5,
+      selectedOrder,
+      queryStorage,
+      order_list_all,
+      result_list_all,
+      bom_list_all,
+      bpb_orderlist_title,
+      bpb_order_resultlist_title,
+      orderItemList,
+      pbp_order_app,
+      order_app_linkpoint,
+      order_app_line,
+      order_wl_line,
+      bpb_mt_list,
+      pbp_storage,
+      pbp_plc,
+      storage_app_linkpoint,
+      plc_app_linkpoint,
+      storage_wl_line,
+      plc_wl_line,
+      order_result_line,
+      bpb_order_resultlist,
+      getOrderDateList,
+      date1Changed,
+      showAllOrderList,
+      showAllBomList,
+      closeAllBomList,
+      allOrderListShow,
+      allBomListShow,
+      allOrderResultShow,
+      showAllResultList,
+      closeAllResultList,
+      okOrderWin,
+      closeOrderWin,
+      selectValues,
+      result_tab_index,
+      order_result_alldata,
+      getTable2CellStyle,
+    }
+  }
 }
 </script>
 <style scoped>
-    /deep/ .el-tabs__item{
-        color: #aaa0a0 !important;
-    }
-    /deep/ .el-tabs__item.is-active{
-        color: #fff !important;
-    }
+/deep/ .el-tabs__item {
+  color: #aaa0a0 !important;
+}
+
+/deep/ .el-tabs__item.is-active {
+  color: #fff !important;
+}
+
 /* 深色主题表格样式 */
 /deep/ .el-table {
-    background-color:#0c718900 !important;
-    color: #e0e0e0;
+  background-color: #0c718900 !important;
+  color: #e0e0e0;
 }
 
 /deep/ .el-table__header-wrapper th {
-    background-color:#07284bf7 !important;
-    color: #ffffff !important;
+  background-color: #07284bf7 !important;
+  color: #ffffff !important;
 }
 
 /deep/ .el-table__body-wrapper tr {
-    background-color:#0d3b6185 !important;
+  background-color: #0d3b6185 !important;
 }
 
 /deep/ .el-table__body-wrapper tr:hover {
-    background-color: #495879 !important;
+  background-color: #495879 !important;
 }
 
 /deep/ .el-table__body-wrapper tr.el-table__row--striped td {
-    background-color: #252525 !important;
+  background-color: #252525 !important;
 }
 
 /deep/ .el-table td,
 /deep/ .el-table th {
-    border-bottom: 1px solid #b3b2b21c  !important;
-    color: #e0e0e0 !important;
+  border-bottom: 1px solid #b3b2b21c !important;
+  color: #e0e0e0 !important;
 }
 
 /deep/ .el-table__header th {
-    border-bottom: 1px solid #b3b2b21c  !important;
+  border-bottom: 1px solid #b3b2b21c !important;
 }
 
 /deep/ .el-table .el-table__row:hover > td {
-    background-color: #495879 !important;
+  background-color: #495879 !important;
 }
 
-/deep/.el-table--border .el-table__inner-wrapper:after, .el-table--border:after, .el-table--border:before, .el-table__inner-wrapper:before{
-    background-color: #495879 !important;
+/deep/ .el-table--border .el-table__inner-wrapper:after, .el-table--border:after, .el-table--border:before, .el-table__inner-wrapper:before {
+  background-color: #495879 !important;
 }
-/deep/.el-table--border .el-table__cell {
-    border-right: 1px solid #213e5c !important;
+
+/deep/ .el-table--border .el-table__cell {
+  border-right: 1px solid #213e5c !important;
 }
 </style>

+ 32 - 21
vue.config.js

@@ -1,33 +1,44 @@
-const {
-    defineConfig
-} = require('@vue/cli-service')
+const { defineConfig } = require('@vue/cli-service')
+
 module.exports = defineConfig({
-    transpileDependencies: true
-})
-module.exports = {
+    transpileDependencies: true,
+    configureWebpack: {
+        output: {
+            filename: 'js/[name].[contenthash:8].js',
+            chunkFilename: 'js/[name].[contenthash:8].js'
+        }
+    },
+    css: {
+        extract: {
+            filename: 'css/[name].[contenthash:8].css',
+            chunkFilename: 'css/[name].[contenthash:8].css'
+        }
+    },
     devServer: {
+        port: 81, //固定端口号
         proxy: {
             '/api': {
-                // target: 'http://127.0.0.1:9527', // 设置你的后端 API 地址
-                target: 'http://192.168.66.133:8080', // 设置你的后端 API 地址
+                target: 'http://127.0.0.1:8080', // 设置你的后端 API 地址
+                // target: 'http://192.168.66.133:8080', // 设置你的后端 API 地址
                 changeOrigin: true, // 允许跨域
                 // pathRewrite: {
                 //   '^/api': '', // 重写请求路径,去掉 '/api'
                 // },
             },
         },
-        client:{
-            overlay:false
+        client: {
+            overlay: false
         }
-    },
-    chainWebpack: config => {
-        config.module
-            .rule('xlsx')
-            .test(/\.(xlsx)(\?.*)?$/)
-            .use('file-loader')
-            .loader('file-loader')
-            .options({
-                name: 'files/[name].[hash:8].[ext]'
-            });
     }
-};
+})
+
+module.exports.chainWebpack = config => {
+    config.module
+        .rule('xlsx')
+        .test(/\.(xlsx)(\?.*)?$/)
+        .use('file-loader')
+        .loader('file-loader')
+        .options({
+            name: 'files/[name].[hash:8].[ext]'
+        });
+};