Bladeren bron

前端页面修改

oyq28 2 jaren geleden
bovenliggende
commit
a525ac7323

+ 1 - 1
imcs-ui/src/api/AxiosApi.js

@@ -109,7 +109,7 @@ const httpServer = (opts) => {
     baseURL: process.env.VUE_APP_PROD_REQUEST_DOMAIN_PREFIX + process.env.VUE_APP_BASE_API,
     url: opts.url,
     responseType: opts.responseType || '',
-    timeout: 200000
+    timeout: 600000
   }
   if (opts['meta']) {
     httpDefaultOpts.headers = opts['meta']

+ 1 - 1
imcs-ui/src/api/AxiosMeunApi.js

@@ -121,7 +121,7 @@ const httpServer = (opts) => {
     baseURL: process.env.VUE_APP_PROD_REQUEST_DOMAIN_PREFIX + process.env.VUE_APP_BASE_API,
     url: opts.url,
     responseType: opts.responseType || '',
-    timeout: 20000
+    timeout: 600000
   }
   if (opts['meta']) {
     httpDefaultOpts.headers = opts['meta']

+ 10 - 0
imcs-ui/src/api/resourceProductMgr/areaMgr.js

@@ -61,6 +61,10 @@ const apiList = {
     method: 'GET',
     url: `/authority/zZone/allSelect`
   },
+  getTimeSpanList: {
+    method: 'POST',
+    url: `/authority/zZone/getTimeSpanList`
+  }
 }
 
 export default {
@@ -167,5 +171,11 @@ export default {
       ...apiList.allSelect,
       data
     })
+  },
+  getTimeSpanList (data) {
+    return axiosApi({
+      ...apiList.getTimeSpanList,
+      data
+    })
   }
 }

+ 26 - 2
imcs-ui/src/components/Screenfull/index.vue

@@ -6,6 +6,8 @@
 
 <script>
 import screenfull from 'screenfull'
+import { api as fullscreen } from 'vue-fullscreen'
+import db from '@/utils/localstorage'
 
 export default {
   name: 'Screenfull',
@@ -29,7 +31,14 @@ export default {
         })
         return false
       }
-      screenfull.toggle()
+      
+      this.$nextTick(() => {	  			
+	  			db.save("isCurrScreen", this.isFullscreen)
+	  			let element = document.getElementsByClassName("app-main")[0]          
+	  			if(element){
+	  				this.toggle(element)
+          }
+	  		}) 
     },
     change() {
       this.isFullscreen = screenfull.isFullscreen
@@ -43,7 +52,22 @@ export default {
       if (screenfull.enabled) {
         screenfull.off('change', this.change)
       }
-    }
+    },
+    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.isFullscreen = isFullscreen
+       		    },
+      		})
+      		this.isFullscreen = fullscreen.isFullscreen
+   		},
   }
 }
 </script>

+ 1 - 1
imcs-ui/src/layout/components/Sidebar/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div :class='{"has-logo":showLogo}'>
+  <div id="sideBar" :class='{"has-logo":showLogo}'>
     <logo v-if='showLogo' :collapse='isCollapse' />
     <el-scrollbar wrap-class='scrollbar-wrapper'>
       <el-menu

+ 2 - 2
imcs-ui/src/layout/index.vue

@@ -3,7 +3,7 @@
     <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
     <sidebar class="sidebar-container" />
     <div :class="{hasTagsView:needTagsView}" class="main-container">
-      <div :class="{'fixed-header':fixedHeader}">
+      <div id="fixedHeader" :class="{'fixed-header':fixedHeader}">
         <navbar />
         <tags-view v-if="needTagsView" />
       </div>
@@ -77,7 +77,7 @@ export default {
       this.$store.commit('setting/closeSidebar', { withoutAnimation: false })
     },
     openMessageTips(data){      //排除数字大屏         
-      if(this.$route.fullPath.indexOf("/largeScreen/twoDatasModel")<0){
+      if(this.$route.fullPath.indexOf("/largeScreen")<0){
         //console.log("接收websocket的推送信息 == ", data)        
         if(data!=null && data.type == 'PUSH_TYPE_GLOBAL_EXCEPTION'){          
           this.$nextTick(()=> {

+ 3 - 0
imcs-ui/src/main.js

@@ -23,6 +23,8 @@ import { hasPermission, hasNoPermission, hasAnyPermission } from './utils/permis
 import uploader from 'vue-simple-uploader'
 
 import VueLazyload from 'vue-lazyload'
+import VueFullscreen from 'vue-fullscreen'
+
 // 日期格式化
 import $moment from 'moment' //引入文件
 $moment.suppressDeprecationWarnings = true;
@@ -40,6 +42,7 @@ Vue.use(PluginsWks)
 /************************ WKS添加本项目常量和方法(end)***************************/
 
 Vue.use(VueLazyload)
+Vue.use(VueFullscreen)
 
 const Plugins = [
   hasPermission,

+ 10 - 4
imcs-ui/src/utils/commons.js

@@ -165,10 +165,11 @@ export const fullScreen = ($elDom) => {
             wscript.SendKeys("{F11}");
         }
     }
-}
+} 
+
 
 //退出全屏
-export const exitFullScreen = () => {
+export const exitFullScreen = () => {  
     let el= document,
     cfs = el.cancelFullScreen || el.webkitCancelFullScreen || el.mozCancelFullScreen || el.exitFullScreen,
     wscript;
@@ -183,7 +184,7 @@ export const exitFullScreen = () => {
         if (wscript != null) {
             wscript.SendKeys("{F11}");
         }
-    }
+    }     
 }
 
 // Echarts的百分比圆环-函数
@@ -247,7 +248,12 @@ export const percentPie = (data) => {
 	                }
 	            },{
 	                value: (100 - _that.value).toFixed(2), //保留2位有效数字
-	                name:  _that.name2
+	                name:  _that.name2,
+                  label:{
+                    normal:{
+                        show:false
+                    }
+                }
 	            }
 	        ]
 	    }]

+ 2 - 2
imcs-ui/src/utils/request.js

@@ -7,7 +7,7 @@ import 'nprogress/nprogress.css'
 
 const service = axios.create({
   baseURL: process.env.VUE_APP_BASE_API,
-  timeout: 10000,
+  timeout: 80000,
   responseType: 'json',
   validateStatus (status) {
     return status === 200
@@ -16,7 +16,7 @@ const service = axios.create({
 
 const refresh_service = axios.create({
   baseURL: process.env.VUE_APP_BASE_API,
-  timeout: 10000,
+  timeout: 80000,
   responseType: 'json',
   validateStatus (status) {
     return status === 200

+ 2 - 2
imcs-ui/src/views/zuihou/developer/warnLong/Index.vue

@@ -122,14 +122,14 @@
 	         <span v-if="row.status == '1'">{{row.updateTime}}</span>
 	     </template>
 	  </el-table-column>        
-	  <el-table-column 
+	  <el-table-column 	  		
 	       :label="$t('table.operation')"
 		   fixed="right"
 		    align="center"
 		    column-key="operation"
 		    width="85px">
 			<template slot-scope="{ row }">
-		        	<el-tooltip class="item" content='分析处理' effect="dark" placement="top-start">
+		        	<el-tooltip class="item" content='分析处理' effect="dark" placement="top-start" v-if="row.taskNodeId">
 			          <i
 			            class="el-icon-bell table-operation"
 			            style="color: #87d068;"

+ 26 - 24
imcs-ui/src/views/zuihou/developer/warnLong/components/View.vue

@@ -75,14 +75,14 @@
         <div class="view-item">
           <i class="el-icon-time" />
           <span>计划时间</span>
-          <h3>{{ dataList[1].planTime||'无' }}</h3>
+          <h3>{{ dataList[1] && dataList[1].planTime||'无' }}</h3>
         </div>
       </el-col>
       <el-col :xs="24" :sm="12">
         <div class="view-item">
           <i class="el-icon-brush" />
           <span>执行时间</span>
-          <h3>{{ dataList[1].actualTime || '无' }}</h3>
+          <h3>{{ dataList[1] && dataList[1].actualTime || '无' }}</h3>
         </div>
       </el-col>
     </el-row>
@@ -91,14 +91,14 @@
         <div class="view-item">
           <i class="el-icon-time" />
           <span>执行设备状态</span>
-          <h3>{{ dataList[1].resourceStatus=="1"? "设备可用": "设备不可用" }}</h3>
+          <h3>{{ dataList[1] && dataList[1].resourceStatus=="1"? "设备可用": "设备不可用" }}</h3>
         </div>
       </el-col>
       <el-col :xs="24" :sm="12">
         <div class="view-item">
           <i class="el-icon-brush" />
           <span>执行设备工作状态</span>
-          <h3>{{ dataList[1].onlineStatus=="1"? "设备在线":(dataList[1].onlineStatus=='0'?'离线':(dataList[1].onlineStatus=='2')?'加工中':'报警') }}</h3>
+          <h3>{{ dataList[1] && dataList[1].onlineStatus=="1"? "设备在线":(dataList[1] && dataList[1].onlineStatus=='0'?'离线':(dataList[1] && dataList[1].onlineStatus=='2')?'加工中':'报警') }}</h3>
         </div>
       </el-col>
     </el-row>
@@ -112,11 +112,11 @@
           <el-alert v-if="tenant.exeResult=='0' && tenant.exeStatus=='1'" title="请求指令发送成功,执行设备操作未完成" type="error" :closable="false" effect="dark"> </el-alert>
           <el-alert v-if="tenant.exeResult=='0' && tenant.exeStatus=='3'" title="执行设备操作已完成,但返回信号未确认成功" type="error" :closable="false" effect="dark"> </el-alert>
           <el-alert v-if="tenant.exeResult==null" title="设备操作执行中返回信号中断或者丢弃" type="error" :closable="false" effect="dark"> </el-alert>
-          <el-alert v-if="dataList[1].resourceStatus=='0'|| dataList[1].onlineStatus=='3'" title="执行设备状态异常,请检查设备是否故障" type="error" :closable="false" effect="dark"> </el-alert>
+          <el-alert v-if="dataList[1] && (dataList[1].resourceStatus=='0'|| dataList[1].onlineStatus=='3')" title="执行设备状态异常,请检查设备是否故障" type="error" :closable="false" effect="dark"> </el-alert>
 
-          <el-alert v-if="dataList[1].onlineStatus=='0'" title="执行设备工作状态异常,请检查设备是否在线" type="error" :closable="false" effect="dark"> </el-alert>
+          <el-alert v-if="dataList[1] && dataList[1].onlineStatus=='0'" title="执行设备工作状态异常,请检查设备是否在线" type="error" :closable="false" effect="dark"> </el-alert>
 
-          <el-alert v-if="dataList[1].onlineStatus=='2'" title="执行设备正在工作中,请耐心等待资源释放" type="warning" :closable="false" effect="dark"> </el-alert>
+          <el-alert v-if="dataList[1] && dataList[1].onlineStatus=='2'" title="执行设备正在工作中,请耐心等待资源释放" type="warning" :closable="false" effect="dark"> </el-alert>
 
         </div>
       </el-col>      
@@ -134,21 +134,21 @@
               <el-col :xs="24" :sm="8"  v-for="(key, index) in keys" :key="index">
                 <div class="view-item">
                    <span>{{ key.value }}</span>  
-                   <h3>{{ dataList[0][key.name]|| '无' }}</h3>
+                   <h3>{{ dataList[0] && dataList[0][key.name]|| '无' }}</h3>
                 </div>                   
               </el-col>
               <el-col :xs="24" :sm="8">
         <div class="view-item">
           <i class="el-icon-phone-outline" />
           <span>操作状态</span>
-          <h3>指令{{dataList[0].exeStatus=='1'? "已发送":( dataList[0].exeStatus=='2'?'进行中':'已完成')}}</h3>
+          <h3>指令{{dataList[0] && dataList[0].exeStatus=='1'? "已发送":(dataList[0] && dataList[0].exeStatus=='2'?'进行中':'已完成')}}</h3>
         </div>
       </el-col>
       <el-col :xs="24" :sm="8">
         <div class="view-item">
           <i class="el-icon-phone-outline" />
           <span>结果状态</span>
-          <h3>结果执行{{ dataList[0].exeResult=='1'?'成功':(dataList[0].exeResult=='0'?'失败':'响应超时') }}</h3>
+          <h3>结果执行{{dataList[0] && dataList[0].exeResult=='1'?'成功':(dataList[0] && dataList[0].exeResult=='0'?'失败':'响应超时') }}</h3>
         </div>
       </el-col>
                 
@@ -165,21 +165,21 @@
               <el-col :xs="24" :sm="8"  v-for="(key, index) in keys" :key="index">
                 <div class="view-item">
                    <span>{{ key.value }}</span>  
-                   <h3>{{ dataList[2][key.name] || '无' }}</h3>
+                   <h3>{{ dataList[2] && dataList[2][key.name] || '无' }}</h3>
                 </div>                   
               </el-col>
               <el-col :xs="24" :sm="8">
         <div class="view-item">
           <i class="el-icon-phone-outline" />
           <span>操作状态</span>
-          <h3>指令{{dataList[2].exeStatus=='1'? "已发送":( dataList[2].exeStatus=='2'?'进行中':'已完成')}}</h3>
+          <h3>指令{{dataList[2] && dataList[2].exeStatus=='1'? "已发送":( dataList[2] && dataList[2].exeStatus=='2'?'进行中':'已完成')}}</h3>
         </div>
       </el-col>
       <el-col :xs="24" :sm="8">
         <div class="view-item">
           <i class="el-icon-phone-outline" />
           <span>结果状态</span>
-          <h3>结果执行{{ dataList[2].exeResult=='1'?'成功':(dataList[2].exeResult=='0'?'失败':'响应超时') }}</h3>
+          <h3>结果执行{{ dataList[2] && dataList[2].exeResult=='1'?'成功':(dataList[2] && dataList[2].exeResult=='0'?'失败':'响应超时') }}</h3>
         </div>
       </el-col>  
           </el-row>
@@ -195,7 +195,7 @@
                <el-col :xs="24" :sm="8"  v-for="(taskNode, index) in storageNodeList.data" :key="index">
                 <div class="view-item">
                    <span>占位节点及设备名</span>  
-                   <h3>{{ taskNode.nodeName }}/ {{ taskNode.resourceName }}</h3>
+                   <h3>{{ taskNode.nodeNo }}/ {{ taskNode.resourceName }}</h3>
                 </div>                   
               </el-col>
           </el-row>
@@ -236,14 +236,14 @@
         <div class="view-item">
           <i class="el-icon-brush" />
           <span>回调ID</span>
-          <el-input v-model="callbackId"  :placeholder="dataList[1].taskNodeId"></el-input>
+          <el-input v-model="callbackId"  :placeholder="dataList[1]?dataList[1].taskNodeId:''"></el-input>
         </div>
       </el-col>
       <el-col :xs="24" :sm="8">
         <div class="view-item">
           <i class="el-icon-brush" />
           <span>设备ID</span>
-          <el-input v-model="deviceId" :placeholder="dataList[1].deviceId"></el-input>
+          <el-input v-model="deviceId" :placeholder="dataList[1]?dataList[1].deviceId:''"></el-input>
         </div>
       </el-col>      
        <el-col :xs="24" :sm="8">
@@ -376,15 +376,17 @@ export default {
 	        const res = response.data
 	        if (res.isSuccess) {
 	          this.dataList = res.data
-            this.deviceId = this.dataList[1].deviceId
+            this.deviceId = this.dataList[1]? this.dataList[1].deviceId : ''
             console.log(this.dataList[1])
-            warnLogApi.getStorageNode({resourceId: this.dataList[1].deviceId}).then(response => {
-	              const res = response.data
-	            if (res.isSuccess) {
-	                this.storageNodeList = res.data
-                  console.log(this.storageNodeList)
-	             }	        
-	          })
+            if(this.deviceId!=''){
+              warnLogApi.getStorageNode({resourceId: this.dataList[1].deviceId}).then(response => {
+	                const res = response.data
+	               if (res.isSuccess) {
+	                  this.storageNodeList = res.data
+                    console.log(this.storageNodeList)
+	               }	        
+	            })
+            }
 	        }	        
 	      }).finally(() => this.loading = false)       
        

+ 86 - 65
imcs-ui/src/views/zuihou/largeScreen/cabinLine/index.vue

@@ -8,11 +8,11 @@
 	    	<!-- tab切换回 -->
     		<div class="tabsDiv">
     			<!-- 3D孪生展示 -->
-    			<span>{{$t("largeScreen.common.data3d")}}</span>
+    			<span @click="boxCardClk('three')">{{$t("largeScreen.common.data3d")}}</span>
     			<!-- 2D简洁模式 -->
     			<span class="tabsActive">{{$t("largeScreen.common.data2d")}}</span>
     			<!-- 2D数据模式 -->
-    			<span @click="boxCardClk()">{{$t("largeScreen.common.data2shu")}}</span>
+    			<span @click="boxCardClk('two')">{{$t("largeScreen.common.data2shu")}}</span>
     		</div>
     		<!-- 全屏 -->
 	    	<div class="battonDiv">
@@ -81,23 +81,23 @@
 	  			</td>
 	  			<td>
 
-				  	<!-- 上-部分 -->
-			  		<el-row class="topRow alignLeft">
-			  			<div class="bottomDiv2" style="width: 100%;overflow-x: auto;">
+					<!-- 上-部分 -->
+					<el-row class="topRow" style="text-align: left;">
+			  			<div class="bottomDiv2">
 			  				<!-- 方块 -->
 				  			<el-card class="box-card" style="margin-right: 20px;">
 					  			<table class="blokTable" border="0" cellspacing="0" cellpadding="0">
-					  				<tr v-for="(item, index) in sideList1" :key="index">
+					  				<tr v-for="(item, index) in sideList2" :key="index">
 					  					<td v-for="obj in item" :key="obj.no" :class="obj.haveGoods == '1' ? 'selectTd' : ''">
 					  						<div :class="obj.lockStatus == '0' ? 'lockStatusCls' : ''">{{ obj.name }}</div>
 					  					</td>
 					  				</tr>
 					  			</table>
-				  				<div class="linTitle">线库</div>
+				  				<div class="linTitle">线库</div>
 				  			</el-card>
 
-				  			<!-- 打标机 -->
-					  		<template v-for="item in moduleList">
+								<!-- 打标机 -->
+								<template v-for="item in moduleList">
 						  		<el-card v-if="item.code == 'KT_121'" :key="item.id" class="box-card">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
@@ -153,8 +153,8 @@
 						  		</el-card>
 								</template>
 
-								<!-- 清洗机 -->
-						  	<template v-for="item in moduleList">
+									<!-- 清洗机 -->
+									<template v-for="item in moduleList">
 									<el-card class="box-card" v-if="item.code == 'KT_122'" :key="item.id">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
@@ -210,9 +210,10 @@
 									</el-card>
 								</template>
 
-				  			<!-- SMU50-4 -->
-					  		<template v-for="item in moduleList">
-									<el-card v-if="item.code == 'KT_127'" class="box-card">
+
+
+							  <template v-for="item in moduleList">
+									<el-card v-if="item.code == 'KT_130'" class="box-card">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
 						  				<tr>
@@ -230,8 +231,8 @@
 						  							<tr>
 						  								<td>
 						  									<div :class="reJisuanCls(item.positionList[0])">
-						  										<el-tooltip class="item" effect="dark" :content="item.positionList[0].name" placement="top-start">
-						  											<div class="ellipsisCom">{{item.positionList[0].name}}</div>
+						  										<el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+						  											<div class="ellipsisCom">{{item.name.substr(3)}}</div>
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
@@ -267,9 +268,9 @@
 									</el-card>
 					  		</template>
 
-			  				<!-- 打标机 -->
+				  			<!-- 打标机 -->
 					  		<template v-for="item in moduleList">
-						  		<el-card v-if="item.code == 'KT_128'" :key="item.id" class="box-card">
+						  		<el-card v-if="item.code == 'KT_131'" :key="item.id" class="box-card">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
 						  				<tr>
@@ -287,8 +288,8 @@
 						  							<tr>
 						  								<td>
 						  									<div :class="reJisuanCls(item.positionList[0])">
-						  										<el-tooltip class="item" effect="dark" :content="item.positionList[0].name" placement="top-start">
-						  											<div class="ellipsisCom">{{item.positionList[0].name}}</div>
+						  										<el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+						  											<div class="ellipsisCom">{{item.name.substr(3)}}</div>
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
@@ -326,7 +327,7 @@
 
 								<!-- 清洗机 -->
 						  	<template v-for="item in moduleList">
-									<el-card class="box-card" v-if="item.code == 'KT_129'" :key="item.id">
+									<el-card class="box-card" v-if="item.code == 'KT_132'" :key="item.id">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
 						  				<tr>
@@ -344,8 +345,8 @@
 						  							<tr>
 						  								<td>
 						  									<div :class="reJisuanCls(item.positionList[0])">
-						  										<el-tooltip class="item" effect="dark" :content="item.positionList[0].name" placement="top-start">
-						  											<div class="ellipsisCom">{{item.positionList[0].name}}</div>
+						  										<el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+						  											<div class="ellipsisCom">{{item.name.substr(3)}}</div>
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
@@ -383,7 +384,7 @@
 
 				  			<!-- SMU50-4 -->
 					  		<template v-for="item in moduleList">
-									<el-card v-if="item.code == 'KT_130'" class="box-card">
+									<el-card v-if="item.code == 'KT_133'" class="box-card">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
 						  				<tr>
@@ -401,8 +402,8 @@
 						  							<tr>
 						  								<td>
 						  									<div :class="reJisuanCls(item.positionList[0])">
-						  										<el-tooltip class="item" effect="dark" :content="item.positionList[0].name" placement="top-start">
-						  											<div class="ellipsisCom">{{item.positionList[0].name}}</div>
+						  										<el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+						  											<div class="ellipsisCom">{{item.name.substr(3)}}</div>
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
@@ -437,8 +438,9 @@
 										</div>
 									</el-card>
 					  		</template>
+
 			  			</div>
-			  		</el-row>
+			  		</el-row>			  	
 
 			  		<!-- 中-部分 -->
 			  		<el-row class="topRow">
@@ -485,23 +487,24 @@
 			  		</el-row>
 
 			  		<!-- 下-部分 -->
-			  		<el-row class="topRow" style="text-align: left;">
-			  			<div class="bottomDiv2">
+			  		<el-row class="topRow alignLeft">
+			  			<div class="bottomDiv2" style="width: 100%;overflow-x: auto;">
 			  				<!-- 方块 -->
 				  			<el-card class="box-card" style="margin-right: 20px;">
 					  			<table class="blokTable" border="0" cellspacing="0" cellpadding="0">
-					  				<tr v-for="(item, index) in sideList2" :key="index">
+					  				<tr v-for="(item, index) in sideList1" :key="index">
 					  					<td v-for="obj in item" :key="obj.no" :class="obj.haveGoods == '1' ? 'selectTd' : ''">
 					  						<div :class="obj.lockStatus == '0' ? 'lockStatusCls' : ''">{{ obj.name }}</div>
 					  					</td>
 					  				</tr>
 					  			</table>
-				  				<div class="linTitle">线库</div>
+				  				<div class="linTitle">线库</div>
 				  			</el-card>
+				
 
-				  			<!-- 打标机 -->
+				  			<!-- SMU50-4 -->
 					  		<template v-for="item in moduleList">
-						  		<el-card v-if="item.code == 'KT_131'" :key="item.id" class="box-card">
+									<el-card v-if="item.code == 'KT_127'" class="box-card">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
 						  				<tr>
@@ -519,20 +522,20 @@
 						  							<tr>
 						  								<td>
 						  									<div :class="reJisuanCls(item.positionList[0])">
-						  										<el-tooltip class="item" effect="dark" :content="item.positionList[0].name" placement="top-start">
-						  											<div class="ellipsisCom">{{item.positionList[0].name}}</div>
+						  										<el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+						  											<div class="ellipsisCom">{{item.name.substr(3)}}</div>
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
 						  								<td width="40" align="right" style="vertical-align: top;">
-						  									<!--<div class="block">
+						  									<div v-if="item.cncProgram == '1'" class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
 															      :src="resolveLogo(toolsImg)"
 															      fit="contain"
 															    >
 															    </el-image>
-												  			</div>-->
+												  			</div>
 												  			<div v-if="item.toolLib == '1'" class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -548,17 +551,17 @@
 						  				</tr>
 						  			</table>
 										<!-- 状态 -->
-										<div class="statusDiv">
+						  			<div class="statusDiv">
 											<!--											<span class="linkLine" :style="setBackground(item.linkStatus.background)">{{item.linkStatus.text}}</span>-->
 											<span class="jianguan" :style="setBackground(item.controlStatus.background)">{{item.controlStatus.text}}</span>
 											<span class="producting" :style="setBackground(item.productionStatus.background)">{{item.productionStatus.text}}</span>
 										</div>
-						  		</el-card>
-								</template>
+									</el-card>
+					  		</template>
 
-								<!-- 清洗机 -->
-						  	<template v-for="item in moduleList">
-									<el-card class="box-card" v-if="item.code == 'KT_132'" :key="item.id">
+			  				<!-- 打标机 -->
+					  		<template v-for="item in moduleList">
+						  		<el-card v-if="item.code == 'KT_128'" :key="item.id" class="box-card">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
 						  				<tr>
@@ -576,8 +579,8 @@
 						  							<tr>
 						  								<td>
 						  									<div :class="reJisuanCls(item.positionList[0])">
-						  										<el-tooltip class="item" effect="dark" :content="item.positionList[0].name" placement="top-start">
-						  											<div class="ellipsisCom">{{item.positionList[0].name}}</div>
+						  										<el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+						  											<div class="ellipsisCom">{{item.name.substr(3)}}</div>
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
@@ -610,12 +613,12 @@
 											<span class="jianguan" :style="setBackground(item.controlStatus.background)">{{item.controlStatus.text}}</span>
 											<span class="producting" :style="setBackground(item.productionStatus.background)">{{item.productionStatus.text}}</span>
 										</div>
-									</el-card>
+						  		</el-card>
 								</template>
 
-				  			<!-- SMU50-4 -->
-					  		<template v-for="item in moduleList">
-									<el-card v-if="item.code == 'KT_133'" class="box-card">
+								<!-- 清洗机 -->
+						  	<template v-for="item in moduleList">
+									<el-card class="box-card" v-if="item.code == 'KT_129'" :key="item.id">
 						  			<!-- 内容区域(格式一) -->
 						  			<table style="width: 100%;" @click="boxCardClkCard(item.id)">
 						  				<tr>
@@ -633,20 +636,20 @@
 						  							<tr>
 						  								<td>
 						  									<div :class="reJisuanCls(item.positionList[0])">
-						  										<el-tooltip class="item" effect="dark" :content="item.positionList[0].name" placement="top-start">
-						  											<div class="ellipsisCom">{{item.positionList[0].name}}</div>
+						  										<el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+						  											<div class="ellipsisCom">{{item.name.substr(3)}}</div>
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
 						  								<td width="40" align="right" style="vertical-align: top;">
-						  									<div v-if="item.cncProgram == '1'" class="block">
+						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
 															      :src="resolveLogo(toolsImg)"
 															      fit="contain"
 															    >
 															    </el-image>
-												  			</div>
+												  			</div>-->
 												  			<div v-if="item.toolLib == '1'" class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -662,17 +665,19 @@
 						  				</tr>
 						  			</table>
 										<!-- 状态 -->
-						  			<div class="statusDiv">
+										<div class="statusDiv">
 											<!--											<span class="linkLine" :style="setBackground(item.linkStatus.background)">{{item.linkStatus.text}}</span>-->
 											<span class="jianguan" :style="setBackground(item.controlStatus.background)">{{item.controlStatus.text}}</span>
 											<span class="producting" :style="setBackground(item.productionStatus.background)">{{item.productionStatus.text}}</span>
 										</div>
 									</el-card>
-					  		</template>
+								</template>
 
+				  			<!-- SMU50-4 -->					  		
 			  			</div>
 			  		</el-row>
 
+
   				</td>
 
 	  		</tr>
@@ -690,8 +695,8 @@
 	// 共通保存本地
 	import db from '@/utils/localstorage'
 	import elDragDialog from '@/directive/el-drag-dialog'
-	import { downloadFile, initEnums, initDicts, initQueryParams, fullScreen, exitFullScreen } from '@/utils/commons'
-	import axios from 'axios'
+	import { initQueryParams } from '@/utils/commons'
+	import { api as fullscreen } from 'vue-fullscreen'
 	// 加载动态数字组件
 	import countTo from 'vue-count-to'
 	export default {
@@ -828,15 +833,30 @@
 	  			this.fullPing();
 	  		}
 	  	},
+		async toggle (target) {
+      		await fullscreen.toggle(target, {
+        		teleport: true,
+				pageOnly: false,
+        		callback: (isFullscreen) => {					
+					let sideBar = document.getElementById('sideBar')
+					sideBar.style.display = isFullscreen ? 'none':'block'					
+					let fixedHeader = document.getElementById('fixedHeader')
+					fixedHeader.style.display = isFullscreen ? 'none':'block'					 
+					this.$store.commit("setting/toggleSidebar");
+          			this.isFullSreen = isFullscreen
+       		    },
+      		})
+      		this.isFullSreen = fullscreen.isFullscreen
+   		},
 	  	// 推送接收到的数据
 	  	openMessageTips(data){
 	  		// 如果是【产线看板】
   	  	if(this.$route.fullPath.indexOf("/largeScreen/cabinLine") > -1){
-		  		//console.log("接收websocket的推送信息22222 == ",data)
+		  		console.log("接收websocket的推送信息 == ",data)
 		  		// 如果是【线边库】信息
 		  		if(data.type == 'PUSH_TYPE_STORGE'){
 		  			this.sideList1 = data.data.KT_01;
-            this.sideList2 = data.data.KT_02;
+            		this.sideList2 = data.data.KT_02;
 		  		}
 		  		// 如果是【生产资源】信息
 		  		if(data.type == 'PUSH_TYPE_RESOURCE') {
@@ -878,8 +898,9 @@
 	    },
 
 	  	// 【SUM50】点击-事件
-	  	boxCardClk(){
-	  		let paths = "/largeScreen/twoDatasModel";
+	  	boxCardClk(flag){
+	  		//let paths = "/largeScreen/twoDatasModel";
+			let paths = (flag=='two')? "/largeScreen/twoDatasModel" : "/largeScreen/threeDatasModel";
 				// 调用全局挂载的方法
 				this.$store.dispatch('tagsView/delView', this.$route).then(res => {
 					this.$router.push({ path: paths, query: {}}) //带参跳转
@@ -897,7 +918,7 @@
 	  			db.save("isCurrScreen", this.isFullSreen)
 	  			let $playerMap = this.$refs.playerMap
 	  			if($playerMap){
-	  				fullScreen($playerMap)
+	  				this.toggle($playerMap)
 	  				// fullScreen(document.getElementById('playerMap'))
 	  			}
 	  		})
@@ -909,7 +930,7 @@
 	  			this.isFullSreen = false
 	  			// 如果是全屏
 	  			db.save("isCurrScreen", this.isFullSreen)
-	  			exitFullScreen(document.getElementById('playerMap'))
+	  			this.toggle(document.getElementById('playerMap'))
 	  		})
 	  	},
 
@@ -1019,9 +1040,9 @@
 	.linTitle {
 		display: inline-block;
 		width: 100%;
-		text-align: left;
+		text-align: center;
 		color: #FFFFFF;
-		margin-top: 5px;
+		margin-top: 15px;
 		font-size: 14px;
 	}
 	.defaultRow{

+ 27 - 12
imcs-ui/src/views/zuihou/largeScreen/frameLine/index.vue

@@ -69,8 +69,8 @@
 						  							<tr>
 						  								<td>
 						  									<div :class="reJisuanCls(item.positionList[0])">
-						  										<el-tooltip class="item" effect="dark" :content="item.positionList[0].name" placement="top-start">
-						  											<div class="ellipsisCom">{{item.positionList[0].name}}</div>
+						  										<el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+						  											<div class="ellipsisCom">{{item.name.substr(3)}}</div>
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
@@ -229,7 +229,7 @@
 					  					</td>
 					  				</tr>
 					  			</table>
-				  				<div class="linTitle">线库</div>
+				  				<div class="linTitle">线库</div>
 				  			</el-card>
 			  			</div>
 			  		</el-row>
@@ -461,7 +461,7 @@
 					  					</td>
 					  				</tr>
 					  			</table>
-				  				<div class="linTitle">线库</div>
+				  				<div class="linTitle">线库</div>
 				  			</el-card>
 			  			</div>
 			  		</el-row>
@@ -517,8 +517,8 @@
 	// 共通保存本地
 	import db from '@/utils/localstorage'
 	import elDragDialog from '@/directive/el-drag-dialog'
-	import { downloadFile, initEnums, initDicts, initQueryParams, fullScreen, exitFullScreen } from '@/utils/commons'
-	import axios from 'axios'
+	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
+	import { api as fullscreen } from 'vue-fullscreen'
 	// 加载动态数字组件
 	import countTo from 'vue-count-to'
 	export default {
@@ -655,15 +655,30 @@
 	  			this.fullPing();
 	  		}
 	  	},
+		async toggle (target) {
+      		await fullscreen.toggle(target, {
+        		teleport: true,
+				pageOnly: false,
+        		callback: (isFullscreen) => {					
+					let sideBar = document.getElementById('sideBar')
+					sideBar.style.display = isFullscreen ? 'none':'block'					
+					let fixedHeader = document.getElementById('fixedHeader')
+					fixedHeader.style.display = isFullscreen ? 'none':'block'					 
+					this.$store.commit("setting/toggleSidebar");
+          			this.isFullSreen = isFullscreen
+       		    },
+      		})
+      		this.isFullSreen = fullscreen.isFullscreen
+   		},
 	  	// 推送接收到的数据
 	  	openMessageTips(data){
 	  		// 如果是【产线看板】
   	  	if(this.$route.fullPath.indexOf("/largeScreen/frameLine") > -1){
-		  		//console.log("接收websocket的推送信息22222 == ",data)
+		  		console.log("接收websocket的推送信息 == ",data)
 		  		// 如果是【线边库】信息
 		  		if(data.type == 'PUSH_TYPE_STORGE'){
 		  			this.sideList1 = data.data.CT_01;
-            this.sideList2 = data.data.CT_02;
+            		this.sideList2 = data.data.CT_02;
 		  		}
 		  		// 如果是【生产资源】信息
 		  		if(data.type == 'PUSH_TYPE_RESOURCE') {
@@ -724,7 +739,7 @@
 	  			db.save("isCurrScreen", this.isFullSreen)
 	  			let $playerMap = this.$refs.playerMap
 	  			if($playerMap){
-	  				fullScreen($playerMap)
+	  				this.toggle($playerMap)
 	  				// fullScreen(document.getElementById('playerMap'))
 	  			}
 	  		})
@@ -736,7 +751,7 @@
 	  			this.isFullSreen = false
 	  			// 如果是全屏
 	  			db.save("isCurrScreen", this.isFullSreen)
-	  			exitFullScreen(document.getElementById('playerMap'))
+	  			this.toggle(document.getElementById('playerMap'))
 	  		})
 	  	},
 
@@ -848,9 +863,9 @@
 	.linTitle {
 		display: inline-block;
 		width: 100%;
-		text-align: left;
+		text-align: center;
 		color: #FFFFFF;
-		margin-top: 5px;
+		margin-top: 15px;
 		font-size: 14px;
 	}
 	.defaultRow{

+ 5 - 1
imcs-ui/src/views/zuihou/largeScreen/modeSummary/Index.vue

@@ -7,7 +7,7 @@
     		<div class="headerTitle">产线运行智能总控监控平台</div>
     		<!-- tab切换回  @click="boxCardClk()" -->
     		<div class="tabsDiv">
-    			<span>3D孪生展示</span>
+    			<span @click="boxCardClk('data3')">3D孪生展示</span>
     			<span class="tabsActive">2D简洁模式</span>
     			<span @click="boxCardClk('data2')">2D数据模式</span>
     		</div>
@@ -164,6 +164,10 @@
 	  		// 2D数据模式
 	  		if(flag == "data2"){
 	  			paths = "/largeScreen/twoDatasModel";
+	  		}
+			// 3D数据模式
+			if(flag == "data3"){
+	  			paths = "/largeScreen/threeDatasModel";
 	  		}
 				// 调用全局挂载的方法
 				this.$store.dispatch('tagsView/delView', this.$route).then(res => {

+ 22 - 4
imcs-ui/src/views/zuihou/largeScreen/modeSummary/components/IntroductionOne.vue

@@ -544,8 +544,8 @@
 	// 共通保存本地
 	import db from '@/utils/localstorage'
 	import elDragDialog from '@/directive/el-drag-dialog'
-	import { downloadFile, initEnums, initDicts, initQueryParams, fullScreen, exitFullScreen } from '@/utils/commons'
-	import axios from 'axios'
+	import { downloadFile, initEnums, initDicts, initQueryParams} from '@/utils/commons'
+	import { api as fullscreen } from 'vue-fullscreen'
 	// 加载动态数字组件
 	import countTo from 'vue-count-to'
 	export default {
@@ -706,6 +706,22 @@
 				// this.$router.push('/runManageCenter/lineBoardDetail')
 	  		// console.log("弹出详情页面!", this.$router)
 	  	},
+		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
+   		},
+
 	  	// 全屏
 	  	fullPing(){
 	  		this.$nextTick(() => {
@@ -715,8 +731,9 @@
 	  			db.save("isCurrScreen", this.isFullSreen)
 	  			let $playerMap = this.$refs.playerMap
 	  			if($playerMap){
-	  				fullScreen($playerMap)
+	  				//fullScreen($playerMap)
 	  				// fullScreen(document.getElementById('playerMap'))
+					this.toggle($playerMap)
 	  			}
 	  		})
 	  	},
@@ -727,7 +744,8 @@
 	  			this.isFullSreen = false
 	  			// 如果是全屏
 	  			db.save("isCurrScreen", this.isFullSreen)
-	  			exitFullScreen(document.getElementById('playerMap'))
+	  			//exitFullScreen(document.getElementById('playerMap'))
+				  this.toggle(document.getElementById('playerMap'))
 	  		})
 	  	},
 	  	// 加载背景颜色

+ 49 - 31
imcs-ui/src/views/zuihou/largeScreen/supportCenter/index.vue

@@ -54,7 +54,7 @@
 					  					</td>
 					  				</tr>
 					  			</table>
-				  				<div class="linTitle">线库</div>
+				  				<div class="linTitle">线库</div>
 				  			</el-card>
 			  			</div>
 			  		</el-row>
@@ -104,7 +104,7 @@
 			  		</el-row>
 
 			  		<!-- 下-部分 -->
-			  		<el-row class="topRow" style="text-align: left;">
+			  		<el-row class="topRow" style="text-align: left; margin-top:40px;">
 			  			<div class="bottomDiv2">
 			  				<!-- AGV上下料站-1 -->
 					  		<template v-for="item in moduleList">
@@ -131,7 +131,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -188,7 +188,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -245,7 +245,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<div v-if="item.cncProgram == '1'" class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -278,7 +278,7 @@
 					  		</template>
 
 			  				<!-- 方块 -->
-				  			<el-card class="box-card" style="margin: 0 20px;">
+				  			<el-card class="box-card" style="margin: 0 10px;">
 					  			<table class="blokTable" border="0" cellspacing="0" cellpadding="0">
 					  				<tr v-for="(item, index) in sideList2" :key="index">
 					  					<td v-for="obj in item" :key="obj.no" :class="obj.haveGoods == '1' ? 'selectTd' : ''">
@@ -286,11 +286,11 @@
 					  					</td>
 					  				</tr>
 					  			</table>
-				  				<div class="linTitle">体缓存库</div>
+				  				<div class="linTitle">体缓存库</div>
 				  			</el-card>
 
 				  			<!-- 方块 -->
-				  			<el-card class="box-card" style="margin: 0 20px;">
+				  			<el-card class="box-card" style="margin: 0 10px;">
 					  			<table class="blokTable" border="0" cellspacing="0" cellpadding="0">
 					  				<tr v-for="(item, index) in sideList3" :key="index">
 					  					<td v-for="obj in item" :key="obj.no" :class="obj.haveGoods == '1' ? 'selectTd' : ''">
@@ -298,7 +298,7 @@
 					  					</td>
 					  				</tr>
 					  			</table>
-				  				<div class="linTitle">体缓存库</div>
+				  				<div class="linTitle">体缓存库</div>
 				  			</el-card>
 
 				  			<!-- 三坐标 -->
@@ -326,7 +326,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -383,7 +383,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -440,7 +440,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<div v-if="item.cncProgram == '1'" class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -497,7 +497,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -554,7 +554,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -611,7 +611,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<div v-if="item.cncProgram == '1'" class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -668,7 +668,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -725,7 +725,7 @@
 						  										</el-tooltip>
 						  									</div>
 						  								</td>
-						  								<td width="40" align="right" style="vertical-align: top;">
+						  								<td width="10" align="right" style="vertical-align: top;">
 						  									<!--<div class="block">
 															    <el-image
 															      style="max-width: 40px; max-height:50px;"
@@ -773,9 +773,9 @@
 	// 共通保存本地
 	import db from '@/utils/localstorage'
 	import elDragDialog from '@/directive/el-drag-dialog'
-	import { downloadFile, initEnums, initDicts, initQueryParams, fullScreen, exitFullScreen } from '@/utils/commons'
+	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
 	import { randomFloor } from '@/utils/utils'
-	import axios from 'axios'
+	import { api as fullscreen } from 'vue-fullscreen'
 	// 加载动态数字组件
 	import countTo from 'vue-count-to'
 	export default {
@@ -840,7 +840,6 @@
   	  // 	}
       // },
 	  	websocketMsg(curVal, oldVal) {
-			  console.log("33333333333333333333333333333333");
 	      let obj = JSON.parse(curVal)
 	      this.openMessageTips(obj)
 	    }
@@ -916,11 +915,26 @@
 	  			this.fullPing();
 	  		}
 	  	},
+		async toggle (target) {
+      		await fullscreen.toggle(target, {
+        		teleport: true,
+				pageOnly: false,
+        		callback: (isFullscreen) => {					
+					let sideBar = document.getElementById('sideBar')
+					sideBar.style.display = isFullscreen ? 'none':'block'					
+					let fixedHeader = document.getElementById('fixedHeader')
+					fixedHeader.style.display = isFullscreen ? 'none':'block'					 
+					this.$store.commit("setting/toggleSidebar");
+          			this.isFullSreen = isFullscreen
+       		    },
+      		})
+      		this.isFullSreen = fullscreen.isFullscreen
+   		},
 	  	// 推送接收到的数据
 	  	openMessageTips(data){
 	  		// 如果是【产线看板】
   	  	if(this.$route.fullPath.indexOf("/largeScreen/supportCenter") > -1){
-		  		//console.log("接收websocket的推送信息22222 == ",data)
+			console.log("接收websocket的推送信息 == ",data)
 		  		// 如果是【线边库】信息
 		  		if(data.type == 'PUSH_TYPE_STORGE'){
             this.sideList1 = data.data.BZ_01;
@@ -987,7 +1001,7 @@
 	  			db.save("isCurrScreen", this.isFullSreen)
 	  			let $playerMap = this.$refs.playerMap
 	  			if($playerMap){
-	  				fullScreen($playerMap)
+	  				this.toggle($playerMap)
 	  				// fullScreen(document.getElementById('playerMap'))
 	  			}
 	  		})
@@ -999,7 +1013,7 @@
 	  			this.isFullSreen = false
 	  			// 如果是全屏
 	  			db.save("isCurrScreen", this.isFullSreen)
-	  			exitFullScreen(document.getElementById('playerMap'))
+	  			this.toggle(document.getElementById('playerMap'))
 	  		})
 	  	},
 
@@ -1125,9 +1139,9 @@
 	.linTitle {
 		display: inline-block;
 		width: 100%;
-		text-align: left;
+		text-align: center ;
 		color: #FFFFFF;
-		margin-top: 5px;
+		margin-top: 15px;
 		font-size: 14px;
 	}
 	.defaultRow{
@@ -1175,7 +1189,7 @@
 		right: 20px;
 	}
 	.topRow{
-		margin: 20px 20px;
+		margin: 50px 20px;
 		.alignLeft{
 			text-align: left;
 		}
@@ -1210,8 +1224,8 @@
 		border-right: 1px solid #096A94;
 		border-bottom: 1px solid #096A94;
 		color: white;
-		padding: 9px 12px;
-		font-size: 14px;
+		padding: 6px 10px;
+		font-size: 13px;
 	}
 	.blokTable td:hover{
 		cursor: pointer;
@@ -1223,6 +1237,7 @@
 	.guiDao-card{
 		position: relative;
 		z-index: 2;
+		width: 220px;
 	}
 	.guiDaoTd{
 		position: relative;
@@ -1302,8 +1317,8 @@
 	}
 	.el-card{
 		display: inline-block;
-		min-width: 200px;
-		margin: 0 5px 5px 0;
+		min-width: 160px;
+		margin: 0 4px 4px 0;
 	}
 	.areaTitle{
 		margin-bottom: 15px;
@@ -1327,7 +1342,7 @@
 		font-size: 14px;
 		color: white;
 		text-align: center;
-		max-width: 126px;
+		//max-width: 126px;
 		padding: 3px 5px;
 		margin-bottom: 5px;
 	}
@@ -1429,4 +1444,7 @@
 	.footerDiv a:hover{
 		opacity: 0.7;
 	}
+	.platformDiv{
+		padding: 10px;
+	}
 </style>

+ 15 - 7
imcs-ui/src/views/zuihou/largeScreen/threeDatasModel/Index.vue

@@ -1,15 +1,16 @@
-<template>
-     <div class="main-info">
+<template>     
+     <div class="main-info">       
         <iframe
          ref="iframe"
          id="iframe"
          frameborder="0"
          :src="iframeSrc"
-         style="min-height:900px;width: 100%;height:100%;"
+         style="min-height:1200px;width: 100%;height:100%;"
          scrolling="auto"
         >
         </iframe>
-    </div>    
+     </div>    
+   
 </template>
 
 <script>
@@ -22,13 +23,14 @@
            isReceiveMsg: false,
            actionNum: 5,
            timer: null,
-           loading: false
+           loading: false,
+           isFullSreen: false
          }
      },
      created() {
-        this.iframeSrc = `http://192.168.170.123:8015/scada/gc/128098`
+        this.iframeSrc = `http://192.168.11.242:8015/scada/gc/128098`
         // 监听收到消息
-        //window.addEventListener('message', this.handleMessageEvent)
+        //window.addEventListener('message', this.handleMessageEvent)        
     },
     mounted () {
        const self = this
@@ -109,6 +111,12 @@
     destroyed() {
         window.removeEventListener('message', this.handleMessageEvent)
      }
+    },
+    fullPing(){
+
+    },
+    exitFullPing(){
+
     }
 }
 

+ 257 - 95
imcs-ui/src/views/zuihou/largeScreen/twoDatasModel/Index.vue

@@ -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>

+ 3 - 1
imcs-ui/src/views/zuihou/machiningClient/touchScreen/Index.vue

@@ -103,6 +103,7 @@
           >
             <el-card :gutter="24" class="box-card" style="margin: 5px" >
               <div class="card_content" >
+                <el-tag effect="dark" style="float:right;" v-if="item.deviceName" >{{ item.deviceName }}</el-tag>
                 <div class="block card_header" @click="view(item)">
                   <el-image
                     style="
@@ -115,6 +116,7 @@
                     fit="fill"
                   >
                   </el-image>
+                  
                   <span style="text-align: center;"><h2>{{ item.name }}_{{ item.taskName }}</h2></span>
                   <div class="itemNo" style="margin-top: 10px" >任务编号: {{ item.no }}</div>
                 </div>
@@ -490,7 +492,7 @@ export default {
                 this.$refs.view2.setTenant(item)
                 this.view2Visible = true
             }else if(item.taskName.indexOf('下料')>-1){
-                if(item.taskName.indexOf('OP')>-1){
+                if(item.taskName.indexOf('OP')>-1 || item.taskName.indexOf('动态')>-1){
                   //工序下料
                   item.uniqueCode = this.uniqueCode
                   this.$refs.view6.setTenant(item)

+ 13 - 1
imcs-ui/src/views/zuihou/machiningClient/touchScreen/components/View1.vue

@@ -131,7 +131,7 @@
 		  <el-button v-show="this.active==1 && this.existed==0" size="medium" type="primary" :disabled="callRobotFlag" @click="callRobot" round>呼叫托盘工装</el-button>	
 		  <el-button plain type="info" @click.native="prev" v-show="this.active>1"  >返回上一步</el-button>
 	      <el-button type="primary" :disabled="confirmDisabled" @click.native="next" v-show="this.active==1 && this.existed==2 && this.matched ">已完成,下一步</el-button>
-		  <el-button type="primary" :disabled="confirmDisabled" @click.native="submitForm" v-show="this.active>1">上料完成</el-button>
+		  <el-button type="primary" :disabled="confirmDisabled" @click.native="submitForm"  v-loading.fullscreen.lock="loading" v-show="this.active>1">上料完成</el-button>
 	    </div>
     </div>
   </el-dialog>
@@ -175,6 +175,7 @@ export default {
 		isReload: 0,
     	tenantViewVisible: false,
 		unFeedingCount: 0,  //未上料零件数
+		xbkValid: true,
       	existed: 0,
         matched: false,  //工装是否匹配
         count: 0,   //工序未零件数
@@ -231,6 +232,7 @@ export default {
             this.existed = res.data.existed
 			this.matched = res.data.matched
             this.confirmDisabled = false
+			this.xbkValid = res.data.xbkValid
           }
         });        
       },
@@ -301,6 +303,7 @@ export default {
       // 更新改任务的开始时间
       // TODO 写入rfid内容,工件信息、原材料R
 	    this.confirmDisabled = true
+		this.loading = true
       let valid = this.uniqueCode!=''? true: false;
 	    if(!valid){
           this.$message({
@@ -309,6 +312,14 @@ export default {
 	      })
 		  this.confirmDisabled = false
 		  return false
+	    }
+		if(!this.xbkValid){
+          this.$message({
+	          message: "产线线边库资源不够,请等待资源释放后再上料",
+	          type: "warning"
+	      })
+		  this.confirmDisabled = false
+		  return false
 	    }
 		//this.$confirm('确认?')		
 		let that = this
@@ -348,6 +359,7 @@ export default {
 			  });
               setTimeout(function(){
                       //通知列表
+			     that.loading = false		  
                  that.$emit("success");
                     //通知列表-并关闭弹出框
                  that.$emit("close");

+ 10 - 0
imcs-ui/src/views/zuihou/machiningClient/touchScreen/components/View5.vue

@@ -175,6 +175,7 @@
           isReload: 0,
           tenantViewVisible: false,
           callRobotFlag:false,
+          xbkValid: true,
           unFeedingCount: 0,  //未上料零件数
       	  existed: 0,
           matched: false,  //工装是否匹配
@@ -233,6 +234,7 @@
             this.existed = res.data.existed
 			      this.matched = res.data.matched
             this.confirmDisabled = false
+            this.xbkValid = res.data.xbkValid
           }
         });        
       },
@@ -308,6 +310,14 @@
             this.confirmDisabled = false
             return false
           }
+          if(!this.xbkValid){
+            this.$message({
+	            message: "产线线边库资源不够,请等待资源释放后再上料",
+	            type: "warning"
+	          })
+		        this.confirmDisabled = false
+		        return false
+	        }
           //this.$confirm('确认?')		
           let that = this
           this.$confirm(

+ 8 - 3
imcs-ui/src/views/zuihou/prepareProductMgr/technologyVersion/components/trayForm/index.vue

@@ -52,7 +52,7 @@
 						    :preview-src-list="row.jjImgList">
 						  </el-image>
 				</div>
-	          	<el-button v-if="radio=='2'" type="text" @click="handleClick(row)">{{$t("common.uploadImg")}}</el-button>
+	          	<el-button type="text" @click="handleClick(row)">{{$t("common.uploadImg")}}</el-button>
 			</template>
 	      </el-table-column>
 	      <!-- 备注 -->
@@ -208,7 +208,7 @@
 	      loading: false,
 	      tableData: [],
 	      spanArr: [],  // 【组序】合并单元格
-	      spanArr2: [],  // 【优先级】合并单元格
+	      spanArr2: [],  // 【优先级】合并单元格		 
 	    }
 	  },
 	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
@@ -275,6 +275,8 @@
 	  	},
 	  	// 【托盘夹具组-来自上一工序】-函数
 	  	getPreMeterialList(){
+			console.log(this.technology)
+			this.type = this.technology.type
 	  		technologyMgrApi.getPreProcedureTrayList(this.technology).then(res => {
 	  			console.log("【托盘夹具组-来自上一工序】: ", res)
 	  			res = res.data
@@ -373,6 +375,7 @@
 	    handleSuccss(res, file, fileList) {
 	    	// console.log("图片:", res)
 	      // this.tempObj.jjImgList.push({ name: file.name, url: res.data.url, status: file.status, uid: file.uid })
+		  this.tempObj.jjImgList=[]
 	      this.tempObj.jjImgList.push(res.data.url)
 	      console.log("图片数据:", this.tempObj.jjImgList)
 	      // 赋值图片
@@ -592,6 +595,7 @@
 		    	// 重新赋值
 		    	this.tableData = [...this.tableData, ...list];
 	    	} else {
+				alert(11)
 	    		let target = [];
 	    		this.tableData.map(obj => {
 	    			let f1 = obj.id;
@@ -603,7 +607,8 @@
 				    	obj.name = tool.name;  					// 名称
 				    	obj.brand = tool.brand; 				// 品牌
 				    	obj.materialType = tool.materialType;		// 物料类型
-				    	obj.jjImgList = []; 						// 附件
+				    	obj.jjImgList = [this.tempObj.armorPic]; 	// 附件
+						obj.armorPic = this.tempObj.armorPic
 	    			}
 	    			target.push(obj);
 	    		});