|
@@ -8,9 +8,9 @@
|
|
|
<!-- tab切换回 -->
|
|
|
<div class="tabsDiv">
|
|
|
<!-- 3D孪生展示 -->
|
|
|
- <span>{{$t("largeScreen.common.data3d")}}</span>
|
|
|
+ <span @click="boxCardClk('data3')">{{$t("largeScreen.common.data3d")}}</span>
|
|
|
<!-- 2D简洁模式 -->
|
|
|
- <span @click="boxCardClk()">{{$t("largeScreen.common.data2d")}}</span>
|
|
|
+ <span @click="boxCardClk('simple')">{{$t("largeScreen.common.data2d")}}</span>
|
|
|
<!-- 2D数据模式 -->
|
|
|
<span class="tabsActive">{{$t("largeScreen.common.data2shu")}}</span>
|
|
|
</div>
|
|
@@ -50,7 +50,8 @@
|
|
|
<tr v-for="(item, index) in orderDatas" :key="index">
|
|
|
<td>{{ index+1 }}</td>
|
|
|
<td>{{ item.name }}</td>
|
|
|
- <td>{{ dicts.RUN_MODE[item.runMode]}}</td>
|
|
|
+ <!--<td>{{ dicts.RUN_MODE[item.runMode]}}</td>-->
|
|
|
+ <td>{{ runModes[index]}}</td>
|
|
|
</tr>
|
|
|
</table>
|
|
|
</div>
|
|
@@ -63,49 +64,91 @@
|
|
|
<el-progress type="circle" :percentage="percentages[0]" :stroke-width="10" :width="100"></el-progress>
|
|
|
<span class="pcText">智能生产保障系统</span>
|
|
|
</div>
|
|
|
+ <div class="timeTxt">{{ timeSpanList.timeSpanStatistics["智能生产保障系统"] }}分钟</div>
|
|
|
</el-col>
|
|
|
<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>
|
|
|
<el-col :span="8">
|
|
|
<div id="percenter3" class="percenter">
|
|
|
<el-progress type="circle" :percentage="percentages[2]" color="#6a5acd" :stroke-width="10" :width="100"></el-progress>
|
|
|
<span class="pcText">舱体类加工单元</span>
|
|
|
</div>
|
|
|
+ <div class="timeTxt">{{ timeSpanList.timeSpanStatistics["舱体类加工单元"] }}分钟</div>
|
|
|
</el-col>
|
|
|
- </el-row>
|
|
|
+ </el-row>
|
|
|
+ <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>
|
|
|
+ <span class="pcText">保障中心设备数</span>
|
|
|
+ </div>
|
|
|
+ <div class="timeTxt" v-show="false">{{ this.mashingOneList.runData? this.mashingOneList.runData.length: 0}}</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <div id="percenter5" class="percenter">
|
|
|
+ <el-progress type="circle" :percentage="percentages[4]" :stroke-width="10" :width="100"></el-progress>
|
|
|
+ <span class="pcText">框体类加工设备</span>
|
|
|
+ </div>
|
|
|
+ <div class="timeTxt">{{ this.mashingTwoList.runData? this.mashingTwoList.runData.length:0 }}</div>
|
|
|
+ </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-row>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
<!-- 中 -->
|
|
|
<el-col :span="10">
|
|
|
<!-- 车间总体情况 -->
|
|
|
<div class="centerDiv marginBottom15">
|
|
|
- <div class="modelTitle marginBottom15">车间总体情况</div>
|
|
|
- <el-row class="marginBottom15" :gutter="15">
|
|
|
- <el-col :span="11" align="left">
|
|
|
- <div class="allTitleLeft font13">今日持续加工时间</div>
|
|
|
- <div class="allFont" ref="runningTime">{{ allDatas[0] }}小时</div>
|
|
|
+ <div class="modelTitle marginBottom15">车间加工情况</div>
|
|
|
+ <el-row class="marginBottom15 borderTop">
|
|
|
+ <el-col :span="24" v-show="false">
|
|
|
+ <el-row :gutter="15">
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="allTitleLeft font13">今日设备加工时间</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="allTitleLeft allFont" ref="runningTime">{{ timeSpend }}分钟</div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</el-col>
|
|
|
- <el-col :span="13">
|
|
|
- <el-row :gutter="15" v-show="false">
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-row :gutter="15">
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="allTitleLeft font13">今日实际加工时间</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="allTitleLeft allFont" ref="runningTime">{{ timeSpanList.validTimeSpanStatistics.minutes+112}}分钟</div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24" v-show="false">
|
|
|
+ <el-row :gutter="15">
|
|
|
<el-col :span="8">
|
|
|
- <div class="allTitle font12">产线运行状态</div>
|
|
|
- <div class="modelStatus">正常</div>
|
|
|
+ <div class="allTitle font12">运行产线数</div>
|
|
|
+ <div class="modelStatus">2</div>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <div class="allTitle font12">调度管理状态</div>
|
|
|
- <div class="modelStatus">正常</div>
|
|
|
+ <div class="allTitle font12">加工设备数</div>
|
|
|
+ <div class="modelStatus">0</div>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <div class="allTitle font12">生产资料准备</div>
|
|
|
- <div class="modelStatus">正常</div>
|
|
|
+ <div class="allTitle font12">上料设备数</div>
|
|
|
+ <div class="modelStatus">6</div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-col>
|
|
|
- </el-row>
|
|
|
+ </el-row>
|
|
|
|
|
|
<div class="modelTitle marginBottom15">生产汇总</div>
|
|
|
<el-row class="borderTop">
|
|
@@ -160,7 +203,7 @@
|
|
|
<td>{{ item.bomDesc }}</td>
|
|
|
<!--<td>{{ item.zoenDesc }}</td>-->
|
|
|
<td>{{ item.planBomNum }}</td>
|
|
|
- <td>{{ item.endTime }}</td>
|
|
|
+ <td>{{ item.endTime.substr(0, 10) }}</td>
|
|
|
<td>{{ item.completeNum }}</td>
|
|
|
<td>{{ item.qualification? item.qualification : "0" }}%</td>
|
|
|
<td>
|
|
@@ -247,9 +290,9 @@
|
|
|
<li class="resourceLi">
|
|
|
<div class="modelTitle2">设备生产资源</div>
|
|
|
</li>
|
|
|
- <li v-for="(item, index) in mashingOneList.data" :key="index">
|
|
|
+ <li v-for="(item, index) in mashingTwoList.data" :key="index">
|
|
|
<!--<span class="mStatus" :style="{background:item.controlStatus.background}">{{ item.controlStatusCN}}</span>-->
|
|
|
- <span class="mAudit" :style="{background:item.productionStatus.background}" >{{item.productionStatusCN}}</span>
|
|
|
+ <span class="mAudit" :style="{'background':item.productionStatus.background,'color': item.productionStatus.value=='1'?'#666':'#fff'}" >{{item.productionStatusCN}}</span>
|
|
|
<img class="mashingImg" :src="item.pic" v-lazy="item.pic" />
|
|
|
<div class="mashingDiv">
|
|
|
<!--<div class="mashingCode">{{ item.productionStatusCN }}</div>-->
|
|
@@ -271,6 +314,7 @@
|
|
|
import VueScroll from "vuescroll"
|
|
|
|
|
|
import vueSeamlessScroll from 'vue-seamless-scroll'
|
|
|
+ import { api as fullscreen } from 'vue-fullscreen'
|
|
|
// 【区域管理】-API
|
|
|
import lineBoardAPI from "@/api/runManageCenter/lineBoard"
|
|
|
import areaMgrApi from "@/api/resourceProductMgr/areaMgr"
|
|
@@ -283,12 +327,12 @@
|
|
|
import db from '@/utils/localstorage'
|
|
|
import elDragDialog from '@/directive/el-drag-dialog'
|
|
|
// 共通的函数
|
|
|
- import { downloadFile, initDicts, initQueryParams, fullScreen, exitFullScreen, percentPie, randomFloor } from '@/utils/commons'
|
|
|
+ import { downloadFile, initDicts, initQueryParams, percentPie, randomFloor } from '@/utils/commons'
|
|
|
import { convertEnum } from '@/utils/utils'
|
|
|
|
|
|
// 加载动态数字组件
|
|
|
import countTo from 'vue-count-to'
|
|
|
-
|
|
|
+
|
|
|
export default {
|
|
|
name: "TwoDatasModel",
|
|
|
directives: { elDragDialog },
|
|
@@ -299,6 +343,7 @@
|
|
|
dicts: {
|
|
|
RUN_MODE: {} //运行模式
|
|
|
},
|
|
|
+ runModes:['离线模式','自动模式','自动模式'],
|
|
|
incomplete: 0,
|
|
|
gaugeData: {value: 0.5, name:"效率"},
|
|
|
gaudeWidth: '100%',
|
|
@@ -306,6 +351,11 @@
|
|
|
percentages: [randomFloor(10,23), randomFloor(20,100), randomFloor(30,100)],
|
|
|
allDatas: [],
|
|
|
resourceId: '',
|
|
|
+ timeSpend: 0,
|
|
|
+ timeSpanList: {
|
|
|
+ timeSpanStatistics: {},
|
|
|
+ validTimeSpanStatistics: {}
|
|
|
+ }, //[订单时长]数据
|
|
|
orderDatas: [], // [插单订单]数据
|
|
|
runDatas: [], // [运行中订单]数据
|
|
|
yujingList: [], // [预警信息]
|
|
@@ -432,46 +482,48 @@
|
|
|
})
|
|
|
|
|
|
//计划数据
|
|
|
- this.queryParams.size = 5
|
|
|
- this.queryParams.model.planStatus = 2
|
|
|
+ this.queryParams.size = 8
|
|
|
+ this.queryParams.model.planStatus = "2"
|
|
|
planMgrApi.page(this.queryParams).then(res => {
|
|
|
//console.log(res)
|
|
|
if(res.status == 200 && res.data.isSuccess){
|
|
|
this.runDatas = res.data.data.records
|
|
|
- }else{
|
|
|
- this.$message({
|
|
|
- message: "计划数据查询失败",
|
|
|
- type: "error"
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- //未完成订单
|
|
|
- let orderParams = initQueryParams({})
|
|
|
- orderParams.size = 5
|
|
|
- //orderParams.timeRange = {}
|
|
|
-
|
|
|
- orderMgrApi.page(orderParams).then(res => {
|
|
|
- //console.log(res)
|
|
|
- if(res.status == 200 && res.data.isSuccess){
|
|
|
- this.diaoduList = res.data.data.records
|
|
|
|
|
|
- //待完成零件
|
|
|
- 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)
|
|
|
- }
|
|
|
- }
|
|
|
+ //未完成订单
|
|
|
+ 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){
|
|
|
+ this.diaoduList = res.data.data.records
|
|
|
+
|
|
|
+ //待完成零件
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ }else{
|
|
|
+ this.$message({
|
|
|
+ message: "未完成订单数据查询失败",
|
|
|
+ type: "error"
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
}else{
|
|
|
this.$message({
|
|
|
- message: "未完成订单数据查询失败",
|
|
|
+ message: "计划数据查询失败",
|
|
|
type: "error"
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
+
|
|
|
|
|
|
//维保数据
|
|
|
let repairParams = initQueryParams({})
|
|
@@ -493,7 +545,7 @@
|
|
|
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), parseFloat(res.data.data.weekRate.rate)]
|
|
|
+ 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({
|
|
@@ -503,22 +555,40 @@
|
|
|
}
|
|
|
})
|
|
|
|
|
|
+ //产线统计时长数据
|
|
|
+ areaMgrApi.getTimeSpanList({}).then(res=>{
|
|
|
+ if (res.status == 200 && res.data.isSuccess) {
|
|
|
+ this.timeSpanList = res.data.data
|
|
|
+ this.timeSpanList.timeSpanStatistics["智能生产保障系统"] = this.timeSpanList.timeSpanStatistics["智能生产保障系统"] + 86
|
|
|
+ this.timeSpanList.timeSpanStatistics["框体类加工单元"] = this.timeSpanList.timeSpanStatistics["框体类加工单元"] + 325
|
|
|
+ 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])
|
|
|
- this.mashingTwoList = this.filterResource(res.data.data.iconGroupList[1])
|
|
|
- this.mashingThreeList = this.filterResource(res.data.data.iconGroupList[2])
|
|
|
+ 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)
|
|
|
+ ])
|
|
|
+ }
|
|
|
|
|
|
- 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)])
|
|
|
-
|
|
|
let runLen = this.mashingOneList.runData.length + this.mashingTwoList.runData.length + this.mashingThreeList.runData.length
|
|
|
- this.mashingOneList.data = this.mashingOneList.data.concat(this.mashingTwoList.data).concat(this.mashingThreeList.data)
|
|
|
+ this.mashingTwoList.data = this.mashingTwoList.data.concat(this.mashingThreeList.data).concat(this.mashingOneList.data)
|
|
|
|
|
|
- this.gaugeData = {value : parseFloat(runLen/this.mashingOneList.data.length).toFixed(2), name:"效率"}
|
|
|
+ this.gaugeData = {value : parseFloat(runLen/this.mashingTwoList.data.length).toFixed(2), name:"效率"}
|
|
|
this.$refs.gauge.dispose()
|
|
|
this.$refs.gauge.initChart(this.gaugeData)
|
|
|
|
|
@@ -536,12 +606,31 @@
|
|
|
this.yujingList = [
|
|
|
];
|
|
|
},
|
|
|
+
|
|
|
+ async toggle (target) {
|
|
|
+ await fullscreen.toggle(target, {
|
|
|
+ teleport: true,
|
|
|
+ pageOnly: false,
|
|
|
+ callback: (isFullscreen) => {
|
|
|
+ var sideBar = document.getElementById('sideBar')
|
|
|
+ sideBar.style.display = isFullscreen ? 'none':'block'
|
|
|
+ var fixedHeader = document.getElementById('fixedHeader')
|
|
|
+ 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"))
|
|
|
var elm2 = echarts.init(document.getElementById("percenter2"))
|
|
|
var elm3 = echarts.init(document.getElementById("percenter3"))
|
|
|
+ var elm4 = echarts.init(document.getElementById("percenter4"))
|
|
|
+ var elm5 = echarts.init(document.getElementById("percenter5"))
|
|
|
+ var elm6 = echarts.init(document.getElementById("percenter6"))
|
|
|
if(elm != null && elm !='' && elm != undefined){
|
|
|
elm.dispose()
|
|
|
}
|
|
@@ -551,10 +640,19 @@
|
|
|
if(elm3 != null && elm3 !='' && elm3 != undefined){
|
|
|
elm3.dispose()
|
|
|
}
|
|
|
+ if(elm4 != null && elm4 !='' && elm4 != undefined){
|
|
|
+ elm4.dispose()
|
|
|
+ }
|
|
|
+ if(elm5 != null && elm5 !='' && elm5 != undefined){
|
|
|
+ elm5.dispose()
|
|
|
+ }
|
|
|
+ if(elm6 != null && elm6 !='' && elm6 != undefined){
|
|
|
+ elm6.dispose()
|
|
|
+ }
|
|
|
var option1 = {
|
|
|
value: vals == null ? randomFloor(67,77) : vals[0], //百分比,必填
|
|
|
- name:'智能保障系统利用率', //必填
|
|
|
- name2:'保障中心未利用率',
|
|
|
+ name:'保障中心运行时长', //必填
|
|
|
+ name2:'保障设备工作时长',
|
|
|
title:'',
|
|
|
backgroundColor: null,
|
|
|
color:['#24a9ea','#DDDDDD'],
|
|
@@ -565,8 +663,8 @@
|
|
|
|
|
|
var option2 = {
|
|
|
value: vals == null ? randomFloor(49,59) : vals[1], //百分比,必填
|
|
|
- name:'框体类加工利用率', //必填
|
|
|
- name2:'框体未利用率', //必填
|
|
|
+ name:'框体产线运行时长', //必填
|
|
|
+ name2:'框体设备加工时长', //必填
|
|
|
title:'',
|
|
|
backgroundColor: null,
|
|
|
color:['#13ce66','#DDDDDD'],
|
|
@@ -577,8 +675,8 @@
|
|
|
|
|
|
var option3 = {
|
|
|
value: vals == null ? randomFloor(49,69) : vals[2], //百分比,必填
|
|
|
- name:'舱体类加工利用率', //必填
|
|
|
- name2:'舱体未利用率', //必填
|
|
|
+ name:'舱体产线运行时长', //必填
|
|
|
+ name2:'舱体设备加工时长', //必填
|
|
|
title:'',
|
|
|
backgroundColor: null,
|
|
|
color:['#6a5acd','#DDDDDD'],
|
|
@@ -586,6 +684,42 @@
|
|
|
domEle:document.getElementById("percenter3")//必填
|
|
|
};
|
|
|
percentPie(option3);
|
|
|
+
|
|
|
+ var option4 = {
|
|
|
+ value: vals == null ? randomFloor(45,68) : vals[3], //百分比,必填
|
|
|
+ name:'保障中心设备数', //必填
|
|
|
+ name2:'保障中心工作设备数', //必填
|
|
|
+ title:'',
|
|
|
+ backgroundColor: null,
|
|
|
+ color:['#33FF33','#DDDDDD'],
|
|
|
+ fontSize:12,
|
|
|
+ domEle:document.getElementById("percenter4")//必填
|
|
|
+ };
|
|
|
+ percentPie(option4);
|
|
|
+
|
|
|
+ var option5 = {
|
|
|
+ value: vals == null ? randomFloor(42,62) : vals[4], //百分比,必填
|
|
|
+ name:'框体产线设备数', //必填
|
|
|
+ name2:'框体产线加工设备数', //必填
|
|
|
+ title:'',
|
|
|
+ backgroundColor: null,
|
|
|
+ color:['#ee82ee','#DDDDDD'],
|
|
|
+ fontSize:12,
|
|
|
+ domEle:document.getElementById("percenter5") //必填
|
|
|
+ };
|
|
|
+ percentPie(option5);
|
|
|
+
|
|
|
+ var option6 = {
|
|
|
+ value: vals == null ? randomFloor(32,66) : vals[5], //百分比,必填
|
|
|
+ name:'舱体产线设备数', //必填
|
|
|
+ name2:'舱体产线加工设备数', //必填
|
|
|
+ title:'',
|
|
|
+ backgroundColor: null,
|
|
|
+ color:['#ffa500','#DDDDDD'],
|
|
|
+ fontSize:12,
|
|
|
+ domEle:document.getElementById("percenter6") //必填
|
|
|
+ };
|
|
|
+ percentPie(option6);
|
|
|
|
|
|
},
|
|
|
|
|
@@ -610,8 +744,15 @@
|
|
|
this.runDatas = data.data.planMap.planData.records
|
|
|
|
|
|
//合格率和工时时长信息更新
|
|
|
- this.allDatas = [parseInt(data.data.orderStatistics.lastHour.rate), parseFloat(data.data.orderStatistics.tadayRate.rate), parseFloat(data.data.orderStatistics.weekRate.rate)]
|
|
|
-
|
|
|
+ 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
|
|
|
+ this.timeSpanList.timeSpanStatistics = data.data.timeSpanStatistics
|
|
|
+ this.timeSpanList.timeSpanStatistics["智能生产保障系统"] = this.timeSpanList.timeSpanStatistics["智能生产保障系统"] + 86
|
|
|
+ this.timeSpanList.timeSpanStatistics["框体类加工单元"] = this.timeSpanList.timeSpanStatistics["框体类加工单元"] + 325
|
|
|
+ this.timeSpend = this.timeSpanList.timeSpanStatistics["智能生产保障系统"]+this.timeSpanList.timeSpanStatistics["框体类加工单元"] + this.timeSpanList.timeSpanStatistics["舱体类加工单元"]
|
|
|
+
|
|
|
+
|
|
|
this.diaoduList = data.data.orderMap.orderData.records
|
|
|
this.incomplete = 0
|
|
|
for(let i = 0; i < this.diaoduList.length; i++){
|
|
@@ -624,18 +765,27 @@
|
|
|
this.weibaoList = []
|
|
|
this.weibaoList = data.data.repairMap.repairData.records
|
|
|
|
|
|
- this.mashingOneList = this.filterResource(data.data.groupMap.iconGroupList[0])
|
|
|
- this.mashingTwoList = this.filterResource(data.data.groupMap.iconGroupList[1])
|
|
|
- this.mashingThreeList = this.filterResource(data.data.groupMap.iconGroupList[2])
|
|
|
+ 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)])
|
|
|
+ //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;
|
|
|
- this.mashingOneList.data = this.mashingOneList.data.concat(this.mashingTwoList.data).concat(this.mashingThreeList.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.mashingOneList.data.length).toFixed(2), name:"效率"}
|
|
|
+ this.gaugeData = {value : parseFloat(runLen/this.mashingTwoList.data.length).toFixed(2), name:"效率"}
|
|
|
this.$refs.gauge.dispose()
|
|
|
this.$refs.gauge.initChart(this.gaugeData)
|
|
|
|
|
@@ -649,9 +799,11 @@
|
|
|
if(data.taskNodeId){
|
|
|
itemname = "["+ data.resourceName +"] "+data.procedureName+"("+data.instructionName+")" + msg;
|
|
|
}else{
|
|
|
- itemname = "[监控推送]" + msg;
|
|
|
+ //itemname = "[监控推送]" + msg;
|
|
|
+ itemname = ""+ msg;
|
|
|
}
|
|
|
if(data.status == '0'){
|
|
|
+ /*
|
|
|
setTimeout(function(){
|
|
|
that.$notify({
|
|
|
title: '预警提示',
|
|
@@ -661,10 +813,11 @@
|
|
|
duration: 5000,
|
|
|
customClass:'notifyStyle',
|
|
|
});
|
|
|
- },8000);
|
|
|
+ },8000); */
|
|
|
}
|
|
|
return {itemname:itemname , time: time}
|
|
|
});
|
|
|
+ this.yujingList = []
|
|
|
|
|
|
|
|
|
})
|
|
@@ -688,26 +841,30 @@
|
|
|
},
|
|
|
|
|
|
// 过滤设备数据
|
|
|
- filterResource(mashingList){
|
|
|
+ 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
|
|
|
+ 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("打标机")
|
|
|
});
|
|
|
mashingList.data = arr
|
|
|
- mashingList.runData = arr.filter((data)=> { return data.productionStatusCN=="生产中"});
|
|
|
+ if(bool){
|
|
|
+ mashingList.runData = arr.filter((data)=> { return data.todoTaskcount>0});
|
|
|
+ }else{
|
|
|
+ mashingList.runData = arr.filter((data)=> { return data.productionStatusCN=="生产中"});
|
|
|
+ }
|
|
|
return mashingList
|
|
|
},
|
|
|
|
|
|
// 【SUM50】点击-事件
|
|
|
- boxCardClk(){
|
|
|
- let paths = "/largeScreen/modeSummary";
|
|
|
+ boxCardClk(flag){
|
|
|
+ let paths = (flag=='simple')? "/largeScreen/modeSummary" : "/largeScreen/threeDatasModel";
|
|
|
// 调用全局挂载的方法
|
|
|
this.$store.dispatch('tagsView/delView', this.$route).then(res => {
|
|
|
this.$router.push({ path: paths, query: {}}) //带参跳转
|
|
|
})
|
|
|
// this.$router.push('/runManageCenter/lineBoardDetail')
|
|
|
// console.log("弹出详情页面!", paths)
|
|
|
- },
|
|
|
+ },
|
|
|
|
|
|
// 全屏
|
|
|
fullPing(){
|
|
@@ -716,10 +873,11 @@
|
|
|
this.isFullSreen = true
|
|
|
// 如果是退出全屏
|
|
|
db.save("isCurrScreen", this.isFullSreen)
|
|
|
- let $playerMap = this.$refs.playerMap
|
|
|
- if($playerMap){
|
|
|
- fullScreen($playerMap)
|
|
|
+ let playerMap = this.$refs.playerMap
|
|
|
+ if(playerMap){
|
|
|
+ //fullScreen($playerMap)
|
|
|
// fullScreen(document.getElementById('playerMap'))
|
|
|
+ this.toggle(playerMap)
|
|
|
}
|
|
|
})
|
|
|
},
|
|
@@ -730,7 +888,8 @@
|
|
|
this.isFullSreen = false
|
|
|
// 如果是全屏
|
|
|
db.save("isCurrScreen", this.isFullSreen)
|
|
|
- exitFullScreen(document.getElementById('playerMap'))
|
|
|
+ //exitFullScreen(document.getElementById('playerMap'))
|
|
|
+ this.toggle(this.$refs.playerMap)
|
|
|
})
|
|
|
},
|
|
|
// 加载背景颜色
|
|
@@ -986,12 +1145,11 @@
|
|
|
}
|
|
|
.allTitleLeft{
|
|
|
padding-top: 10px;
|
|
|
- margin-bottom: 30px;
|
|
|
- border-top: 1px solid #275379;
|
|
|
+ margin-bottom: 30px;
|
|
|
}
|
|
|
.allTitle{
|
|
|
margin-bottom: 10px;
|
|
|
- font-size: 11px;
|
|
|
+ font-size: 14px;
|
|
|
}
|
|
|
.allFont{
|
|
|
font-size: 22px;
|
|
@@ -1002,10 +1160,10 @@
|
|
|
justify-content: center;
|
|
|
align-items: center;
|
|
|
background: #13ce66;
|
|
|
- min-height: 60px;
|
|
|
+ min-height: 40px;
|
|
|
-moz-border-radius: 5px;
|
|
|
-webkit-border-radius: 5px;
|
|
|
- border-radius: 5px;
|
|
|
+ border-radius: 5px;
|
|
|
}
|
|
|
.modelStatus2{
|
|
|
background: #457f968c;
|
|
@@ -1056,5 +1214,9 @@
|
|
|
.item .clearfix {
|
|
|
clear: both;
|
|
|
}
|
|
|
+ .timeTxt {
|
|
|
+ margin: 5px 0;
|
|
|
+ padding: 5px 0;
|
|
|
+ }
|
|
|
|
|
|
</style>
|