|
@@ -7,10 +7,10 @@
|
|
|
<div class="headerTitle">{{$t("largeScreen.common.largeAllTitle")}}</div>
|
|
|
<!-- tab切换回 -->
|
|
|
<div class="tabsDiv">
|
|
|
- <!-- 3D孪生展示 -->
|
|
|
+<!-- <!– 3D孪生展示 –>
|
|
|
<span @click="boxCardClk('data3')">{{$t("largeScreen.common.data3d")}}</span>
|
|
|
- <!-- 2D简洁模式 -->
|
|
|
- <span @click="boxCardClk('simple')">{{$t("largeScreen.common.data2d")}}</span>
|
|
|
+ <!– 2D简洁模式 –>
|
|
|
+ <span @click="boxCardClk('simple')">{{$t("largeScreen.common.data2d")}}</span>-->
|
|
|
<!-- 2D数据模式 -->
|
|
|
<span class="tabsActive">{{$t("largeScreen.common.data2shu")}}</span>
|
|
|
</div>
|
|
@@ -69,7 +69,7 @@
|
|
|
<el-col :span="8">
|
|
|
<div id="percenter2" class="percenter">
|
|
|
<el-progress type="circle" :percentage="percentages[1]" color="#5cb87a" :stroke-width="10" :width="100"></el-progress>
|
|
|
- <span class="pcText">框体类加工单元</span>
|
|
|
+ <span class="pcText">框体类加工单元</span>
|
|
|
</div>
|
|
|
<div class="timeTxt">{{ timeSpanList.timeSpanStatistics["框体类加工单元"] }}分钟</div>
|
|
|
</el-col>
|
|
@@ -81,7 +81,7 @@
|
|
|
<div class="timeTxt">{{ timeSpanList.timeSpanStatistics["舱体类加工单元"] }}分钟</div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
- <el-row :gutter="15">
|
|
|
+ <el-row :gutter="15">
|
|
|
<el-col :span="8">
|
|
|
<div id="percenter4" class="percenter" v-show="false">
|
|
|
<el-progress type="circle" :percentage="percentages[3]" :stroke-width="10" :width="100"></el-progress>
|
|
@@ -95,14 +95,14 @@
|
|
|
<span class="pcText">框体类加工设备</span>
|
|
|
</div>
|
|
|
<div class="timeTxt">{{ this.mashingTwoList.runData? this.mashingTwoList.runData.length:0 }}</div>
|
|
|
- </el-col>
|
|
|
+ </el-col>
|
|
|
<el-col :span="8">
|
|
|
<div id="percenter6" class="percenter">
|
|
|
<el-progress type="circle" :percentage="percentages[5]" :stroke-width="10" :width="100"></el-progress>
|
|
|
<span class="pcText">舱体类加工设备</span>
|
|
|
</div>
|
|
|
<div class="timeTxt">{{ this.mashingThreeList.runData? this.mashingThreeList.runData.length: 0}}</div>
|
|
|
- </el-col>
|
|
|
+ </el-col>
|
|
|
</el-row>
|
|
|
</div>
|
|
|
</el-col>
|
|
@@ -119,8 +119,8 @@
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<div class="allTitleLeft allFont" ref="runningTime">{{ timeSpend }}分钟</div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</el-col>
|
|
|
<el-col :span="24" v-show="false">
|
|
|
<el-row :gutter="15">
|
|
@@ -129,9 +129,9 @@
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<div class="allTitleLeft allFont" ref="runningTime">{{ timeSpanList.validTimeSpanStatistics.minutes>0?timeSpanList.validTimeSpanStatistics.minutes:568}}分钟</div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-col>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-col>
|
|
|
<el-col :span="24" v-show="false">
|
|
|
<el-row :gutter="15">
|
|
|
<el-col :span="8">
|
|
@@ -149,7 +149,7 @@
|
|
|
</el-row>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
-
|
|
|
+
|
|
|
<div class="modelTitle marginBottom15">生产汇总</div>
|
|
|
<el-row class="borderTop">
|
|
|
<el-col>
|
|
@@ -181,18 +181,20 @@
|
|
|
</el-row>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
-
|
|
|
+
|
|
|
</div>
|
|
|
-
|
|
|
+ <div class="centerDiv">
|
|
|
+ <img :src="require(`@/assets/logo/chanxian.jpg`)" style="width: 100%;">
|
|
|
+ </div>
|
|
|
<!-- 生产计划 -->
|
|
|
- <div class="centerDiv">
|
|
|
+<!-- <div class="centerDiv">
|
|
|
<div class="modelTitle marginBottom15">生产计划</div>
|
|
|
<table class="pragreeTable tableBorder" border="0" cellspacing="0" cellpadding="0" >
|
|
|
<tr>
|
|
|
<th width="70">生产计划(-订单)</th>
|
|
|
<th width="60">零件名称</th>
|
|
|
- <!--<th width="55">排产产线</th>-->
|
|
|
- <th width="45">数量</th>
|
|
|
+ <!–<th width="55">排产产线</th>–>
|
|
|
+ <th width="45">数量</th>
|
|
|
<th width="80">计划完成时间</th>
|
|
|
<th width="45">已生产</th>
|
|
|
<th width="45">合格率</th>
|
|
@@ -201,7 +203,7 @@
|
|
|
<tr v-for="(item, index) in runDatas" :key="index">
|
|
|
<td>{{ item.planNo }}-{{ item.orderNo }}</td>
|
|
|
<td>{{ item.bomDesc }}</td>
|
|
|
- <!--<td>{{ item.zoenDesc }}</td>-->
|
|
|
+ <!–<td>{{ item.zoenDesc }}</td>–>
|
|
|
<td>{{ item.planBomNum }}</td>
|
|
|
<td>{{ item.endTime.substr(0, 10) }}</td>
|
|
|
<td>{{ item.completeNum }}</td>
|
|
@@ -211,9 +213,11 @@
|
|
|
</td>
|
|
|
</tr>
|
|
|
</table>
|
|
|
- </div>
|
|
|
+ </div>-->
|
|
|
+
|
|
|
+
|
|
|
</el-col>
|
|
|
-
|
|
|
+
|
|
|
<!-- 右 -->
|
|
|
<el-col :span="7">
|
|
|
<!-- 预警信息 -->
|
|
@@ -228,14 +232,14 @@
|
|
|
</table> -->
|
|
|
<vue-seamless-scroll :data="yujingList" class="seamless-warp" :class-option="classOption">
|
|
|
<ul class="item" style="height:160px;">
|
|
|
- <li class="DataList_top" v-for="(item,index) in yujingList" :key="index">
|
|
|
+ <li class="DataList_top" v-for="(item,index) in yujingList" :key="index">
|
|
|
<div class="DataList_col">{{item.itemname}}</div>
|
|
|
<div class="DataList_col2">{{item.time}}</div>
|
|
|
<div class="clearfix"></div>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</vue-seamless-scroll>
|
|
|
-
|
|
|
+
|
|
|
</div>
|
|
|
<!-- 待完成订单 -->
|
|
|
<div class="rightDiv marginBottom15">
|
|
@@ -272,7 +276,7 @@
|
|
|
</tr>
|
|
|
<tr v-for="(item, index) in weibaoList" :key="index">
|
|
|
<td>{{ item.productionresourceName }}</td>
|
|
|
- <td class="timeprogress">
|
|
|
+ <td class="timeprogress">
|
|
|
<el-progress v-if="item.expireFlag=='0'" :text-inside="true" :stroke-width="15" :percentage="setPercentage(item.repairEndTime)" color="#FF3366" :format="setItemText(item.repairEndTime)" ></el-progress>
|
|
|
<el-progress v-else :text-inside="true" :stroke-width="15" :percentage="100" color="#FF3366" :format="expireText(item.repairEndTime)" ></el-progress>
|
|
|
</td>
|
|
@@ -281,7 +285,7 @@
|
|
|
</div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
-
|
|
|
+
|
|
|
<!-- 尾部-部分 -->
|
|
|
<el-row class="rowCls">
|
|
|
<div class="bottomDiv">
|
|
@@ -303,7 +307,7 @@
|
|
|
</vue-scroll>
|
|
|
</div>
|
|
|
</el-row>
|
|
|
-
|
|
|
+
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -312,7 +316,7 @@
|
|
|
import * as echarts from 'echarts'
|
|
|
// 引入vuescroll
|
|
|
import VueScroll from "vuescroll"
|
|
|
-
|
|
|
+
|
|
|
import vueSeamlessScroll from 'vue-seamless-scroll'
|
|
|
import { api as fullscreen } from 'vue-fullscreen'
|
|
|
// 【区域管理】-API
|
|
@@ -329,7 +333,7 @@
|
|
|
// 共通的函数
|
|
|
import { downloadFile, initDicts, initQueryParams, percentPie, randomFloor } from '@/utils/commons'
|
|
|
import { convertEnum } from '@/utils/utils'
|
|
|
-
|
|
|
+
|
|
|
// 加载动态数字组件
|
|
|
import countTo from 'vue-count-to'
|
|
|
|
|
@@ -354,7 +358,7 @@
|
|
|
timeSpend: 0,
|
|
|
timeSpanList: {
|
|
|
timeSpanStatistics: {},
|
|
|
- validTimeSpanStatistics: {}
|
|
|
+ validTimeSpanStatistics: {}
|
|
|
}, //[订单时长]数据
|
|
|
orderDatas: [], // [插单订单]数据
|
|
|
runDatas: [], // [运行中订单]数据
|
|
@@ -373,14 +377,14 @@
|
|
|
vuescroll: {
|
|
|
mode: 'native',
|
|
|
sizeStrategy: 'percent',
|
|
|
- detectResize: true,
|
|
|
+ detectResize: true,
|
|
|
},
|
|
|
scrollPanel: {
|
|
|
initialScrollY: false,
|
|
|
initialScrollX: false,
|
|
|
scrollingX: true,
|
|
|
scrollingY: false,
|
|
|
- speed: 200
|
|
|
+ speed: 200
|
|
|
},
|
|
|
rail: {
|
|
|
background: '#1883f7',
|
|
@@ -401,7 +405,7 @@
|
|
|
}
|
|
|
},
|
|
|
filters:{
|
|
|
-
|
|
|
+
|
|
|
},
|
|
|
// 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
|
|
|
created() {
|
|
@@ -433,14 +437,14 @@
|
|
|
hoverStop: true, // 是否开启鼠标悬停stop
|
|
|
direction: 1, // 0向下 1向上 2向左 3向右
|
|
|
openWatch: true, // 开启数据实时监控刷新dom
|
|
|
- singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动)
|
|
|
- singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动)
|
|
|
+ singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动)
|
|
|
+ singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动)
|
|
|
waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
|
|
|
}
|
|
|
- },
|
|
|
-
|
|
|
+ },
|
|
|
+
|
|
|
// 接收信息
|
|
|
- websocketMsg() {
|
|
|
+ websocketMsg() {
|
|
|
return this.$store.getters.STAFF_UPDATE.msg
|
|
|
}
|
|
|
,
|
|
@@ -452,7 +456,7 @@
|
|
|
// 判断长连接,是否已经开启
|
|
|
if(this.$store.state.websocket.websock == null){
|
|
|
// 页面刚进入时开启长连接
|
|
|
- this.$store.dispatch('STAFF_WEBSOCKET')
|
|
|
+ this.$store.dispatch('STAFF_WEBSOCKET')
|
|
|
}
|
|
|
// DOM加载后,加载
|
|
|
this.$nextTick(()=> {
|
|
@@ -477,10 +481,10 @@
|
|
|
this.$message({
|
|
|
message: "产线数据查询失败",
|
|
|
type: "error"
|
|
|
- })
|
|
|
+ })
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
+
|
|
|
//计划数据
|
|
|
this.queryParams.size = 5
|
|
|
this.queryParams.model.planStatus = "2"
|
|
@@ -490,11 +494,11 @@
|
|
|
this.runDatas = res.data.data.records
|
|
|
|
|
|
//未完成订单
|
|
|
- let orderParams = initQueryParams({})
|
|
|
+ let orderParams = initQueryParams({})
|
|
|
orderParams.size = 5
|
|
|
let orderIds = this.runDatas.map(item=> (item.orderId))
|
|
|
orderParams.model.orderIds = orderIds.join(",")
|
|
|
-
|
|
|
+
|
|
|
orderMgrApi.page(orderParams).then(res => {
|
|
|
//console.log(res)
|
|
|
if(res.status == 200 && res.data.isSuccess){
|
|
@@ -505,33 +509,33 @@
|
|
|
if(this.diaoduList[i].completeNum == null){
|
|
|
this.incomplete += parseInt(this.diaoduList[i].productNum)
|
|
|
}else{
|
|
|
- this.incomplete += parseInt(this.diaoduList[i].productNum) - parseInt(this.diaoduList[i].completeNum)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ this.incomplete += parseInt(this.diaoduList[i].productNum) - parseInt(this.diaoduList[i].completeNum)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}else{
|
|
|
this.$message({
|
|
|
message: "未完成订单数据查询失败",
|
|
|
type: "error"
|
|
|
- })
|
|
|
+ })
|
|
|
}
|
|
|
})
|
|
|
}else{
|
|
|
this.$message({
|
|
|
message: "计划数据查询失败",
|
|
|
type: "error"
|
|
|
- })
|
|
|
+ })
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
//维保数据
|
|
|
let repairParams = initQueryParams({})
|
|
|
//this.queryParams.map.createTime_st = this.queryParams.timeRange[0]
|
|
|
//this.queryParams.map.createTime_ed = this.queryParams.timeRange[1]
|
|
|
repairParams.size = 5
|
|
|
repairApi.page(repairParams).then(res => {
|
|
|
- //console.log(res)
|
|
|
+ //console.log(res)
|
|
|
if (res.status == 200 && res.data.isSuccess) {
|
|
|
this.weibaoList = res.data.data.records
|
|
|
}else{
|
|
@@ -539,14 +543,14 @@
|
|
|
message: "维保数据查询失败",
|
|
|
type: "error"
|
|
|
})
|
|
|
- }
|
|
|
+ }
|
|
|
})
|
|
|
|
|
|
orderMgrApi.orderStatitcs().then(res=> {
|
|
|
- if (res.status == 200 && res.data.isSuccess) {
|
|
|
- //更新执行时间和合格率
|
|
|
- this.allDatas = [parseInt(res.data.data.lastHour.rate), parseFloat(res.data.data.tadayRate.rate)>0?parseFloat(res.data.data.tadayRate.rate)>0:100, parseFloat(res.data.data.weekRate.rate)>0?parseFloat(res.data.data.weekRate.rate):100]
|
|
|
-
|
|
|
+ if (res.status == 200 && res.data.isSuccess) {
|
|
|
+ //更新执行时间和合格率
|
|
|
+ this.allDatas = [parseInt(res.data.data.lastHour.rate), parseFloat(res.data.data.tadayRate.rate)>0?parseFloat(res.data.data.tadayRate.rate)>0:100, parseFloat(res.data.data.weekRate.rate)>0?parseFloat(res.data.data.weekRate.rate):100]
|
|
|
+
|
|
|
}else{
|
|
|
this.$message({
|
|
|
message: "订单合格率查询失败",
|
|
@@ -561,51 +565,51 @@
|
|
|
this.timeSpanList = res.data.data
|
|
|
this.timeSpanList.timeSpanStatistics["智能生产保障系统"] = this.timeSpanList.timeSpanStatistics["智能生产保障系统"]>0? this.timeSpanList.timeSpanStatistics["智能生产保障系统"]: 254
|
|
|
this.timeSpanList.timeSpanStatistics["框体类加工单元"] = this.timeSpanList.timeSpanStatistics["框体类加工单元"]>0? this.timeSpanList.timeSpanStatistics["框体类加工单元"]: 839
|
|
|
- this.timeSpend = this.timeSpanList.timeSpanStatistics["智能生产保障系统"]+this.timeSpanList.timeSpanStatistics["框体类加工单元"] + this.timeSpanList.timeSpanStatistics["舱体类加工单元"]
|
|
|
+ this.timeSpend = this.timeSpanList.timeSpanStatistics["智能生产保障系统"]+this.timeSpanList.timeSpanStatistics["框体类加工单元"] + this.timeSpanList.timeSpanStatistics["舱体类加工单元"]
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
- //设备资源数据
|
|
|
+
|
|
|
+ //设备资源数据
|
|
|
areaMgrApi.iconGroupList({resourceStatus:"1",group:0}).then(res => {
|
|
|
//console.log(res)
|
|
|
if (res.status == 200 && res.data.isSuccess) {
|
|
|
- this.mashingOneList = this.filterResource(res.data.data.iconGroupList[0], true)
|
|
|
- this.mashingTwoList = this.filterResource(res.data.data.iconGroupList[1], false)
|
|
|
+ this.mashingOneList = this.filterResource(res.data.data.iconGroupList[0], true)
|
|
|
+ this.mashingTwoList = this.filterResource(res.data.data.iconGroupList[1], false)
|
|
|
this.mashingThreeList = this.filterResource(res.data.data.iconGroupList[2], false)
|
|
|
-
|
|
|
+
|
|
|
//this.initPercentPie([parseInt(100 * this.mashingOneList.runData.length / this.mashingOneList.data.length),
|
|
|
// parseInt(100 * this.mashingTwoList.runData.length / this.mashingTwoList.data.length), parseInt(100 * this.mashingThreeList.runData.length / this.mashingThreeList.data.length)])
|
|
|
if(this.timeSpend>0){
|
|
|
this.initPercentPie([parseInt(100* this.timeSpanList.timeSpanStatistics["智能生产保障系统"]/ this.timeSpend),
|
|
|
parseInt(100 * this.timeSpanList.timeSpanStatistics["框体类加工单元"] / this.timeSpend), parseInt(100 * this.timeSpanList.timeSpanStatistics["舱体类加工单元"] / this.timeSpend),
|
|
|
parseInt(100 * this.mashingOneList.runData.length / this.mashingOneList.data.length),parseInt(100 * this.mashingTwoList.runData.length / this.mashingTwoList.data.length), parseInt(100 * this.mashingThreeList.runData.length / this.mashingThreeList.data.length)
|
|
|
- ])
|
|
|
+ ])
|
|
|
}else{
|
|
|
this.initPercentPie([0,0,0,parseInt(100 * this.mashingOneList.runData.length / this.mashingOneList.data.length),parseInt(100 * this.mashingTwoList.runData.length / this.mashingTwoList.data.length), parseInt(100 * this.mashingThreeList.runData.length / this.mashingThreeList.data.length)
|
|
|
- ])
|
|
|
- }
|
|
|
-
|
|
|
- let runLen = this.mashingOneList.runData.length + this.mashingTwoList.runData.length + this.mashingThreeList.runData.length
|
|
|
+ ])
|
|
|
+ }
|
|
|
+
|
|
|
+ let runLen = this.mashingOneList.runData.length + this.mashingTwoList.runData.length + this.mashingThreeList.runData.length
|
|
|
this.mashingTwoList.data = this.mashingTwoList.data.concat(this.mashingThreeList.data).concat(this.mashingOneList.data)
|
|
|
-
|
|
|
+
|
|
|
//this.gaugeData = {value : parseFloat(runLen/this.mashingTwoList.data.length).toFixed(2), name:"效率"}
|
|
|
- this.gaugeData = {value:0.67, name:"效率"}
|
|
|
+ this.gaugeData = {value:0.67, name:"效率"}
|
|
|
|
|
|
this.$refs.gauge.dispose()
|
|
|
this.$refs.gauge.initChart(this.gaugeData)
|
|
|
-
|
|
|
+
|
|
|
}else{
|
|
|
this.$message({
|
|
|
message: "设备数据查询失败",
|
|
|
type: "error"
|
|
|
})
|
|
|
- }
|
|
|
- })
|
|
|
+ }
|
|
|
+ })
|
|
|
},
|
|
|
- initDatas(){
|
|
|
-
|
|
|
+ initDatas(){
|
|
|
+
|
|
|
// [预警信息]
|
|
|
- this.yujingList = [
|
|
|
+ this.yujingList = [
|
|
|
];
|
|
|
},
|
|
|
|
|
@@ -613,18 +617,18 @@
|
|
|
await fullscreen.toggle(target, {
|
|
|
teleport: true,
|
|
|
pageOnly: false,
|
|
|
- callback: (isFullscreen) => {
|
|
|
+ callback: (isFullscreen) => {
|
|
|
var sideBar = document.getElementById('sideBar')
|
|
|
- sideBar.style.display = isFullscreen ? 'none':'block'
|
|
|
+ sideBar.style.display = isFullscreen ? 'none':'block'
|
|
|
var fixedHeader = document.getElementById('fixedHeader')
|
|
|
- fixedHeader.style.display = isFullscreen ? 'none':'block'
|
|
|
+ fixedHeader.style.display = isFullscreen ? 'none':'block'
|
|
|
this.$store.commit("setting/toggleSidebar");
|
|
|
this.isFullSreen = isFullscreen
|
|
|
},
|
|
|
})
|
|
|
this.isFullSreen = fullscreen.isFullscreen
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
// 加载数据-[生产资源使用率]
|
|
|
initPercentPie(vals){
|
|
|
var elm = echarts.init(document.getElementById("percenter1"))
|
|
@@ -662,7 +666,7 @@
|
|
|
domEle:document.getElementById("percenter1")//必填
|
|
|
};
|
|
|
percentPie(option1);
|
|
|
-
|
|
|
+
|
|
|
var option2 = {
|
|
|
value: vals == null ? randomFloor(49,59) : vals[1], //百分比,必填
|
|
|
name:'框体产线运行时长', //必填
|
|
@@ -673,8 +677,8 @@
|
|
|
fontSize:12,
|
|
|
domEle:document.getElementById("percenter2")//必填
|
|
|
};
|
|
|
- percentPie(option2);
|
|
|
-
|
|
|
+ percentPie(option2);
|
|
|
+
|
|
|
var option3 = {
|
|
|
value: vals == null ? randomFloor(49,69) : vals[2], //百分比,必填
|
|
|
name:'舱体产线运行时长', //必填
|
|
@@ -722,9 +726,9 @@
|
|
|
domEle:document.getElementById("percenter6") //必填
|
|
|
};
|
|
|
percentPie(option6);
|
|
|
-
|
|
|
+
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
// 是否设置大屏
|
|
|
setMaxScreen(){
|
|
|
let isCurrScreen = db.get("isCurrScreen");
|
|
@@ -736,7 +740,7 @@
|
|
|
// 推送接收到的数据
|
|
|
openMessageTips(data){
|
|
|
// 如果是【数据模式】
|
|
|
- if(this.$route.fullPath.indexOf("/largeScreen/twoDatasModel") > -1){
|
|
|
+ if(this.$route.fullPath.indexOf("/largeScreen/twoDatasModel") > -1){
|
|
|
console.log("接收websocket的推送信息 == ",data)
|
|
|
if(data.type == 'PUSH_TYPE_DATA_SCREEN'){
|
|
|
this.$nextTick(()=> {
|
|
@@ -747,30 +751,30 @@
|
|
|
|
|
|
//合格率和工时时长信息更新
|
|
|
this.allDatas = [parseInt(data.data.orderStatistics.lastHour.rate), parseFloat(data.data.orderStatistics.tadayRate.rate)>0?parseFloat(data.data.orderStatistics.tadayRate.rate):100, parseFloat(data.data.orderStatistics.weekRate.rate)>0?parseFloat(data.data.orderStatistics.weekRate.rate):100]
|
|
|
-
|
|
|
+
|
|
|
this.timeSpanList.validTimeSpanStatistics = data.data.validTimeSpanStatistics>0? data.data.validTimeSpanStatistics: 568
|
|
|
this.timeSpanList.timeSpanStatistics = data.data.timeSpanStatistics
|
|
|
this.timeSpanList.timeSpanStatistics["智能生产保障系统"] = this.timeSpanList.timeSpanStatistics["智能生产保障系统"]>0? this.timeSpanList.timeSpanStatistics["智能生产保障系统"]: 254
|
|
|
this.timeSpanList.timeSpanStatistics["框体类加工单元"] = this.timeSpanList.timeSpanStatistics["框体类加工单元"]>0? this.timeSpanList.timeSpanStatistics["框体类加工单元"]: 839
|
|
|
- this.timeSpend = this.timeSpanList.timeSpanStatistics["智能生产保障系统"]+this.timeSpanList.timeSpanStatistics["框体类加工单元"] + this.timeSpanList.timeSpanStatistics["舱体类加工单元"]
|
|
|
+ this.timeSpend = this.timeSpanList.timeSpanStatistics["智能生产保障系统"]+this.timeSpanList.timeSpanStatistics["框体类加工单元"] + this.timeSpanList.timeSpanStatistics["舱体类加工单元"]
|
|
|
|
|
|
|
|
|
this.diaoduList = data.data.orderMap.orderData.records
|
|
|
- this.incomplete = 0
|
|
|
+ this.incomplete = 0
|
|
|
for(let i = 0; i < this.diaoduList.length; i++){
|
|
|
if(this.diaoduList[i].completeNum == null){
|
|
|
this.incomplete += parseInt(this.diaoduList[i].productNum)
|
|
|
}else{
|
|
|
- this.incomplete += parseInt(this.diaoduList[i].productNum) - parseInt(this.diaoduList[i].completeNum)
|
|
|
- }
|
|
|
+ this.incomplete += parseInt(this.diaoduList[i].productNum) - parseInt(this.diaoduList[i].completeNum)
|
|
|
+ }
|
|
|
}
|
|
|
this.weibaoList = []
|
|
|
- this.weibaoList = data.data.repairMap.repairData.records
|
|
|
-
|
|
|
+ this.weibaoList = data.data.repairMap.repairData.records
|
|
|
+
|
|
|
this.mashingOneList = this.filterResource(data.data.groupMap.iconGroupList[0], true)
|
|
|
this.mashingTwoList = this.filterResource(data.data.groupMap.iconGroupList[1], false)
|
|
|
this.mashingThreeList = this.filterResource(data.data.groupMap.iconGroupList[2], false)
|
|
|
-
|
|
|
+
|
|
|
//计算设备利用率
|
|
|
//this.initPercentPie([parseInt(100 * this.mashingOneList.runData.length / this.mashingOneList.data.length),
|
|
|
// parseInt(100 * this.mashingTwoList.runData.length / this.mashingTwoList.data.length), parseInt(100 * this.mashingThreeList.runData.length / this.mashingThreeList.data.length)])
|
|
@@ -778,57 +782,57 @@
|
|
|
this.initPercentPie([parseInt(100* this.timeSpanList.timeSpanStatistics["智能生产保障系统"]/ this.timeSpend),
|
|
|
parseInt(100 * this.timeSpanList.timeSpanStatistics["框体类加工单元"] / this.timeSpend), parseInt(100 * this.timeSpanList.timeSpanStatistics["舱体类加工单元"] / this.timeSpend),
|
|
|
parseInt(100 * this.mashingOneList.runData.length / this.mashingOneList.data.length),parseInt(100 * this.mashingTwoList.runData.length / this.mashingTwoList.data.length), parseInt(100 * this.mashingThreeList.runData.length / this.mashingThreeList.data.length)
|
|
|
- ])
|
|
|
+ ])
|
|
|
}else{
|
|
|
this.initPercentPie([0,0,0,parseInt(100 * this.mashingOneList.runData.length / this.mashingOneList.data.length),parseInt(100 * this.mashingTwoList.runData.length / this.mashingTwoList.data.length), parseInt(100 * this.mashingThreeList.runData.length / this.mashingThreeList.data.length)
|
|
|
- ])
|
|
|
- }
|
|
|
+ ])
|
|
|
+ }
|
|
|
+
|
|
|
+ let runLen = this.mashingOneList.runData.length + this.mashingTwoList.runData.length + this.mashingThreeList.runData.length;
|
|
|
+ this.mashingTwoList.data = this.mashingTwoList.data.concat(this.mashingThreeList.data).concat(this.mashingOneList.data)
|
|
|
|
|
|
- let runLen = this.mashingOneList.runData.length + this.mashingTwoList.runData.length + this.mashingThreeList.runData.length;
|
|
|
- this.mashingTwoList.data = this.mashingTwoList.data.concat(this.mashingThreeList.data).concat(this.mashingOneList.data)
|
|
|
-
|
|
|
- //this.gaugeData = {value : parseFloat(runLen/this.mashingTwoList.data.length).toFixed(2), name:"效率"}
|
|
|
+ //this.gaugeData = {value : parseFloat(runLen/this.mashingTwoList.data.length).toFixed(2), name:"效率"}
|
|
|
this.gaugeData = {value:randomFloor(60,75)/100, name:"效率"}
|
|
|
this.$refs.gauge.dispose()
|
|
|
this.$refs.gauge.initChart(this.gaugeData)
|
|
|
|
|
|
let datas = data.data.warnMap.warnData.records
|
|
|
let that = this
|
|
|
- this.yujingList = datas.map((data)=>{
|
|
|
+ this.yujingList = datas.map((data)=>{
|
|
|
let msg = data.feedback ? data.feedback : " 响应超时 ";
|
|
|
- let arr = data.createTime;
|
|
|
- let time = arr[0] + "-" + arr[1] + "-" + arr[2] + "\t" + arr[3] + ":" + arr[4];
|
|
|
+ let arr = data.createTime;
|
|
|
+ let time = arr[0] + "-" + arr[1] + "-" + arr[2] + "\t" + arr[3] + ":" + arr[4];
|
|
|
let itemname = ""
|
|
|
if(data.taskNodeId){
|
|
|
- itemname = "["+ data.resourceName +"] "+data.procedureName+"("+data.instructionName+")" + msg;
|
|
|
+ itemname = "["+ data.resourceName +"] "+data.procedureName+"("+data.instructionName+")" + msg;
|
|
|
}else{
|
|
|
//itemname = "[监控推送]" + msg;
|
|
|
itemname = ""+ msg;
|
|
|
- }
|
|
|
+ }
|
|
|
if(data.status == '0'){
|
|
|
-
|
|
|
+
|
|
|
setTimeout(function(){
|
|
|
that.$notify({
|
|
|
title: '预警提示',
|
|
|
message: itemname + "\t" + "请管理人员去产线查看",
|
|
|
type: 'warning',
|
|
|
- position: 'bottom-right',
|
|
|
+ position: 'bottom-right',
|
|
|
duration: 5000,
|
|
|
- customClass:'notifyStyle',
|
|
|
- });
|
|
|
- },8000);
|
|
|
- }
|
|
|
+ customClass:'notifyStyle',
|
|
|
+ });
|
|
|
+ },8000);
|
|
|
+ }
|
|
|
return {itemname:itemname , time: time}
|
|
|
});
|
|
|
this.yujingList = []
|
|
|
|
|
|
|
|
|
})
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
// 组件销毁的时候,关闭websocket连接
|
|
|
- websocketClose() {
|
|
|
+ websocketClose() {
|
|
|
this.$store.getters.STAFF_UPDATE.lockReconnect = true
|
|
|
this.$store.getters.STAFF_UPDATE.websock.close() // 离开路由之后断开websocket连接
|
|
|
clearTimeout(this.$store.getters.STAFF_UPDATE.reconnectData) // 离开清除 timeout
|
|
@@ -842,10 +846,10 @@
|
|
|
console.log("websocket获取数据==="+evt)
|
|
|
}
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
// 过滤设备数据
|
|
|
- filterResource(mashingList, bool){
|
|
|
- let arr = mashingList.data.filter((data) => {
|
|
|
+ filterResource(mashingList, bool){
|
|
|
+ let arr = mashingList.data.filter((data) => {
|
|
|
return data.name.indexOf("接驳位") <0 && data.name.indexOf("托板") < 0 && data.name.indexOf("上下料站") < 0
|
|
|
&& data.name.indexOf("线边库") <0 && data.name.indexOf("立库") <0 && data.name.indexOf("三坐标") && data.name.indexOf("打标机")
|
|
|
});
|
|
@@ -857,7 +861,7 @@
|
|
|
}
|
|
|
return mashingList
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
// 【SUM50】点击-事件
|
|
|
boxCardClk(flag){
|
|
|
let paths = (flag=='simple')? "/largeScreen/modeSummary" : "/largeScreen/threeDatasModel";
|
|
@@ -867,8 +871,8 @@
|
|
|
})
|
|
|
// this.$router.push('/runManageCenter/lineBoardDetail')
|
|
|
// console.log("弹出详情页面!", paths)
|
|
|
- },
|
|
|
-
|
|
|
+ },
|
|
|
+
|
|
|
// 全屏
|
|
|
fullPing(){
|
|
|
this.$nextTick(() => {
|
|
@@ -906,7 +910,7 @@
|
|
|
// 获取列表数据
|
|
|
getTabList(){
|
|
|
lineBoardAPI.getBigScreenList({}).then(res => {
|
|
|
- res = res.data
|
|
|
+ res = res.data
|
|
|
if(res.isSuccess){
|
|
|
this.tabDownData.list = res.data.list
|
|
|
// 给资源赋值id
|
|
@@ -916,36 +920,36 @@
|
|
|
},
|
|
|
|
|
|
//时间差转换
|
|
|
- formatGap(date) {
|
|
|
- let staytimeGap = new Date(date).getTime() - new Date().getTime();
|
|
|
+ formatGap(date) {
|
|
|
+ let staytimeGap = new Date(date).getTime() - new Date().getTime();
|
|
|
if(staytimeGap<0){
|
|
|
staytimeGap = new Date().getTime() - new Date(date).getTime();
|
|
|
- }
|
|
|
-
|
|
|
+ }
|
|
|
+
|
|
|
let stayDay = Math.floor(staytimeGap/(24*3600*1000));
|
|
|
- let level = staytimeGap%(24*3600*1000);
|
|
|
+ let level = staytimeGap%(24*3600*1000);
|
|
|
let stayHour = Math.floor(level/(3600*1000));
|
|
|
let leave12 = level%(3600*1000);
|
|
|
let stayMin = Math.floor(leave12/(60*1000));
|
|
|
-
|
|
|
+
|
|
|
return [Number(parseFloat(stayDay/30*100).toFixed(2)), stayDay + "天" +stayHour + "小时" + stayMin + "分"]
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
// 设置进度文本内容
|
|
|
setItemText(text){
|
|
|
return () => {
|
|
|
return this.formatGap(text)[1]
|
|
|
- }
|
|
|
+ }
|
|
|
},
|
|
|
expireText(text){
|
|
|
- return () => {
|
|
|
+ return () => {
|
|
|
return "过期" + this.formatGap(text)[1]
|
|
|
}
|
|
|
},
|
|
|
setPercentage(text){
|
|
|
- return this.formatGap(text)[0]>100? 100 : this.formatGap(text)[0]
|
|
|
+ return this.formatGap(text)[0]>100? 100 : this.formatGap(text)[0]
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
</script>
|
|
|
<!-- 全局样式-通过定义父DOM的calss,来只影响本组件 -->
|
|
@@ -964,12 +968,12 @@
|
|
|
}
|
|
|
.timeprogress .el-progress-bar__outer {
|
|
|
background-color:#000;
|
|
|
- }
|
|
|
+ }
|
|
|
.timeprogress .el-progress-bar__inner {
|
|
|
text-align:center;
|
|
|
}
|
|
|
.notifyStyle {
|
|
|
- background-color:#000088 !important;
|
|
|
+ background-color:#000088 !important;
|
|
|
}
|
|
|
.notifyStyle .el-notification__content{
|
|
|
color: #fff !important;
|
|
@@ -989,7 +993,7 @@
|
|
|
text-shadow: 1px 2px 3px #ece9e9;
|
|
|
letter-spacing: 3px;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.platformDiv {
|
|
|
.leftDivAuto {
|
|
|
min-height: initial;
|
|
@@ -1129,7 +1133,7 @@
|
|
|
border-right: 1px solid #184659;
|
|
|
border-bottom: 1px solid #184659;
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
.percenter{
|
|
|
position: relative;
|
|
@@ -1148,7 +1152,7 @@
|
|
|
}
|
|
|
.allTitleLeft{
|
|
|
padding-top: 10px;
|
|
|
- margin-bottom: 30px;
|
|
|
+ margin-bottom: 30px;
|
|
|
}
|
|
|
.allTitle{
|
|
|
margin-bottom: 10px;
|
|
@@ -1166,7 +1170,7 @@
|
|
|
min-height: 40px;
|
|
|
-moz-border-radius: 5px;
|
|
|
-webkit-border-radius: 5px;
|
|
|
- border-radius: 5px;
|
|
|
+ border-radius: 5px;
|
|
|
}
|
|
|
.modelStatus2{
|
|
|
background: #457f968c;
|
|
@@ -1188,38 +1192,38 @@
|
|
|
padding-top: 10px;
|
|
|
border-top: 1px solid #275379;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.seamless-warp {
|
|
|
height: 200px;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
.item > .DataList_top {
|
|
|
list-style: none;
|
|
|
- float: left;
|
|
|
+ float: left;
|
|
|
color: red;
|
|
|
margin-left: -40px;
|
|
|
font-size: 14px;
|
|
|
min-width:400px;
|
|
|
width:100%;
|
|
|
}
|
|
|
- .item .DataList_col {
|
|
|
+ .item .DataList_col {
|
|
|
float: left;
|
|
|
font-size: 12px;
|
|
|
margin:2px 0;
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.item .DataList_col2 {
|
|
|
float: left;
|
|
|
font-size: 12px;
|
|
|
- margin:2px 0 2px 12px;
|
|
|
+ margin:2px 0 2px 12px;
|
|
|
}
|
|
|
.item .clearfix {
|
|
|
clear: both;
|
|
|
}
|
|
|
.timeTxt {
|
|
|
margin: 5px 0;
|
|
|
- padding: 5px 0;
|
|
|
+ padding: 5px 0;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
</style>
|