ソースを参照

大屏适配优化

jingbo 3 ヶ月 前
親
コミット
90b739d4a7

+ 1 - 1
src/main/java/com/jeesite/modules/mes/web/MesJbLogController.java

@@ -117,7 +117,7 @@ public class MesJbLogController extends BaseController {
 	}
 
 
-	@RequiresPermissions("mes:mesJbLog:api")
+//	@RequiresPermissions("mes:mesJbLog:api")
 	@RequestMapping(value = "getBatchInfo")
 	@ResponseBody
 	public CommonResp getBatchInfo(HttpServletRequest req) {

+ 13 - 7
src/main/resources/config/application.yml

@@ -139,8 +139,8 @@ server:
   #    encoding.enabled: true
   tomcat:
     uri-encoding: UTF-8
-    # 表单请求数据的最大大小
-    max-http-form-post-size: 20MB
+    # 表单/文件上传请求体最大大小(须大于客户端安装包,与 file.maxFileSize 保持一致)
+    max-http-form-post-size: 500MB
   #    # 进程的最大连接数
   #    max-connections: 8192
   #    # 连接数满后的排队个数
@@ -374,6 +374,11 @@ spring:
     pathmatch:
       matching-strategy: ANT_PATH_MATCHER
 
+  servlet:
+    multipart:
+      max-file-size: 500MB
+      max-request-size: 500MB
+
 #  # Redis 连接参数 (RedisProperties)
 #  redis:
 #    host: 127.0.0.1
@@ -840,6 +845,7 @@ shiro:
     ${adminPath}/mes/mesProductProgress/pdaIn= anon
     ${adminPath}/mes/mesProductProgress/pdaOut= anon
     ${adminPath}/mes/mesMaterialKw/kwList= anon
+    ${adminPath}/mes/mesJbLog/getBatchInfo= anon
     ${adminPath}/** = user
 
 
@@ -1056,7 +1062,7 @@ file:
   enabled: true
 
   #  # 文件上传根路径,设置路径中不允许包含“userfiles”,在指定目录中系统会自动创建userfiles目录,如果不设置默认为contextPath路径
-  baseDir: D:/mescloud
+  baseDir: E:/mescloud
   #  baseDir: /www/wwwroot/mes_cloud_dy
   #
   #  # 上传文件的相对路径(支持:yyyy, MM, dd, HH, mm, ss, E)
@@ -1086,10 +1092,10 @@ file:
 #  # 是否启用秒传
 #  checkmd5: true
 #
-#  # 是否开启分片上传
-#  chunked: true
-#  # 分片大小,单位字节(10M)
-#  chunkSize: '10*1024*1024'
+#  # 是否开启分片上传(大文件建议开启,单片 10MB 更稳定)
+  chunked: true
+  #  # 分片大小,单位字节(10M)
+  chunkSize: '10*1024*1024'
 #  # 最大上传线程数
 #  threads: 3
 #

+ 23 - 11
src/main/resources/views/modules/mes/mesDeviceOeeScreen.html

@@ -20,11 +20,11 @@
 		}
 		.oee-screen {
 			position: relative;
-			width: 100vw;
-			height: 100vh;
-			min-width: 1280px;
-			min-height: 720px;
-			padding: clamp(12px, 1vw, 20px);
+			width: 1920px;
+			height: 1080px;
+			padding: 16px;
+			transform-origin: left top;
+			overflow: hidden;
 			background:
 				radial-gradient(circle at 52% 44%, rgba(13, 102, 154, .24), transparent 32%),
 				linear-gradient(180deg, #071426 0%, #081d31 48%, #061323 100%);
@@ -52,14 +52,14 @@
 		.oee-top {
 			position: relative;
 			display: grid;
-			grid-template-columns: 1fr minmax(420px, 720px) 1fr;
+			grid-template-columns: 1fr 600px 1fr;
 			align-items: center;
 			min-height: 0;
 		}
 		.oee-title {
 			position: relative;
 			text-align: center;
-			font-size: clamp(28px, 2.3vw, 44px);
+			font-size: 36px;
 			font-weight: 700;
 			letter-spacing: 0;
 			color: #ecfbff;
@@ -89,7 +89,7 @@
 		}
 		.oee-main {
 			display: grid;
-			grid-template-columns: minmax(360px, 24vw) 1fr;
+			grid-template-columns: 460px 1fr;
 			gap: 14px;
 			min-height: 0;
 		}
@@ -144,7 +144,7 @@
 		.oee-kpi-value {
 			margin-top: 8px;
 			font-family: Impact, "Arial Narrow", sans-serif;
-			font-size: clamp(24px, 1.85vw, 34px);
+			font-size: 30px;
 			line-height: 1;
 			color: #36f2ff;
 			text-shadow: 0 0 15px rgba(54, 242, 255, .52);
@@ -312,7 +312,7 @@
 		}
 		.oee-device-name {
 			color: #edfaff;
-			font-size: clamp(14px, 1.1vw, 16px);
+			font-size: 15px;
 			font-weight: 700;
 			line-height: 1.4;
 			word-break: break-all;
@@ -492,7 +492,7 @@
 	</style>
 </head>
 <body>
-<div class="oee-screen">
+<div class="oee-screen" id="screen">
 	<div class="oee-shell">
 		<div class="oee-top">
 			<div></div>
@@ -732,6 +732,8 @@
 	}
 
 	$(function() {
+		fitScreen();
+		statusChart.resize();
 		loadData();
 		setInterval(loadData, 60000);
 		$('#rankList, #deviceGrid').on('mouseenter', function() {
@@ -741,11 +743,21 @@
 			autoScrollPaused[this.id] = false;
 		});
 		$(window).on('resize', function() {
+			fitScreen();
 			statusChart.resize();
 			startAutoScroll('rankList', 90);
 			startAutoScroll('deviceGrid', 70);
 		});
 	});
+
+	function fitScreen() {
+		var scaleX = window.innerWidth / 1920;
+		var scaleY = window.innerHeight / 1080;
+		$('#screen').css({
+			transform: 'scale(' + scaleX + ',' + scaleY + ')',
+			transformOrigin: 'left top'
+		});
+	}
 </script>
 </body>
 </html>

+ 20 - 9
src/main/resources/views/modules/mes/mesMaterialScreen.html

@@ -17,9 +17,11 @@
 		}
 		.screen {
 			position: relative;
-			width: 100vw;
-			height: 100vh;
-			padding: clamp(12px, 1vw, 20px);
+			width: 1920px;
+			height: 1080px;
+			padding: 16px;
+			transform-origin: left top;
+			overflow: hidden;
 			background:
 				linear-gradient(130deg, rgba(11, 107, 114, .2), transparent 38%),
 				linear-gradient(235deg, rgba(48, 96, 147, .18), transparent 42%),
@@ -43,18 +45,16 @@
 			gap: 14px;
 			width: 100%;
 			height: 100%;
-			min-width: 1200px;
-			min-height: 680px;
 		}
 		.header {
 			display: grid;
-			grid-template-columns: 1fr minmax(360px, 640px) 1fr;
+			grid-template-columns: 1fr 600px 1fr;
 			align-items: center;
 		}
 		.title {
 			position: relative;
 			text-align: center;
-			font-size: clamp(30px, 2.25vw, 44px);
+			font-size: 36px;
 			font-weight: 700;
 			color: #f1ffff;
 			text-shadow: 0 0 18px rgba(61, 226, 255, .85);
@@ -115,7 +115,7 @@
 		.kpi-value {
 			margin-top: 8px;
 			font-family: Impact, "Arial Narrow", sans-serif;
-			font-size: clamp(26px, 1.9vw, 38px);
+			font-size: 32px;
 			line-height: 1;
 			color: #45f1ff;
 			text-shadow: 0 0 16px rgba(69, 241, 255, .5);
@@ -244,7 +244,7 @@
 	</style>
 </head>
 <body>
-<div class="screen">
+<div class="screen" id="screen">
 	<div class="shell">
 		<div class="header">
 			<div></div>
@@ -490,6 +490,7 @@
 	}
 
 	$(function() {
+		fitScreen();
 		initCharts();
 		updateTime();
 		loadData();
@@ -498,10 +499,20 @@
 		$('#stockList, #actionList, #unlinkedList').on('mouseenter', function() { scrollPaused[this.id] = true; });
 		$('#stockList, #actionList, #unlinkedList').on('mouseleave', function() { scrollPaused[this.id] = false; });
 		$(window).on('resize', function() {
+			fitScreen();
 			Object.keys(charts).forEach(function(key) { charts[key].resize(); });
 			['stockList', 'actionList', 'unlinkedList'].forEach(function(id) { startAutoScroll(id, 80); });
 		});
 	});
+
+	function fitScreen() {
+		var scaleX = window.innerWidth / 1920;
+		var scaleY = window.innerHeight / 1080;
+		$('#screen').css({
+			transform: 'scale(' + scaleX + ',' + scaleY + ')',
+			transformOrigin: 'left top'
+		});
+	}
 </script>
 </body>
 </html>

+ 20 - 14
src/main/resources/views/modules/mes/mesQualityScreen.html

@@ -17,9 +17,11 @@
 		}
 		.quality-screen {
 			position: relative;
-			width: 100vw;
-			height: 100vh;
-			padding: clamp(12px, 1vw, 20px);
+			width: 1920px;
+			height: 1080px;
+			padding: 16px;
+			transform-origin: left top;
+			overflow: hidden;
 			background:
 				linear-gradient(120deg, rgba(15, 92, 113, .18), transparent 36%),
 				linear-gradient(250deg, rgba(32, 81, 150, .18), transparent 40%),
@@ -43,18 +45,16 @@
 			gap: 14px;
 			width: 100%;
 			height: 100%;
-			min-width: 1200px;
-			min-height: 680px;
 		}
 		.header {
 			display: grid;
-			grid-template-columns: 1fr minmax(360px, 620px) 1fr;
+			grid-template-columns: 1fr 600px 1fr;
 			align-items: center;
 		}
 		.title {
 			position: relative;
 			text-align: center;
-			font-size: clamp(30px, 2.25vw, 44px);
+			font-size: 36px;
 			font-weight: 700;
 			color: #efffff;
 			text-shadow: 0 0 18px rgba(61, 226, 255, .85);
@@ -116,7 +116,7 @@
 		.kpi-value {
 			margin-top: 8px;
 			font-family: Impact, "Arial Narrow", sans-serif;
-			font-size: clamp(30px, 2.2vw, 42px);
+			font-size: 36px;
 			line-height: 1;
 			color: #45f1ff;
 			text-shadow: 0 0 16px rgba(69, 241, 255, .5);
@@ -248,15 +248,10 @@
 			color: #6fa9bb;
 			font-size: 14px;
 		}
-		@media (max-aspect-ratio: 15/9) {
-			.shell { min-width: 1100px; }
-			.main { grid-template-columns: minmax(0, 30fr) minmax(0, 40fr) minmax(0, 30fr); }
-			.table-head, .table-row { grid-template-columns: 66px 1fr .75fr 1fr 68px 76px; gap: 8px; }
-		}
 	</style>
 </head>
 <body>
-<div class="quality-screen">
+<div class="quality-screen" id="screen">
 	<div class="shell">
 		<div class="header">
 			<div></div>
@@ -481,6 +476,7 @@
 	}
 
 	$(function() {
+		fitScreen();
 		initCharts();
 		updateTime();
 		loadData();
@@ -489,10 +485,20 @@
 		$('#issueList').on('mouseenter', function() { issueScrollPaused = true; });
 		$('#issueList').on('mouseleave', function() { issueScrollPaused = false; });
 		$(window).on('resize', function() {
+			fitScreen();
 			Object.keys(charts).forEach(function(key) { charts[key].resize(); });
 			startIssueAutoScroll();
 		});
 	});
+
+	function fitScreen() {
+		var scaleX = window.innerWidth / 1920;
+		var scaleY = window.innerHeight / 1080;
+		$('#screen').css({
+			transform: 'scale(' + scaleX + ',' + scaleY + ')',
+			transformOrigin: 'left top'
+		});
+	}
 </script>
 </body>
 </html>

+ 6 - 4
src/main/resources/views/modules/mes/mesScreenLiuan.html

@@ -491,10 +491,12 @@
     var ngPageTimer = null;
 
     function fitScreen() {
-        var scale = Math.min(window.innerWidth / 1920, window.innerHeight / 1080);
-        var left = (window.innerWidth - 1920 * scale) / 2;
-        var top = (window.innerHeight - 1080 * scale) / 2;
-        $('#screen').css({ transform: 'translate(' + left + 'px,' + top + 'px) scale(' + scale + ')' });
+        var scaleX = window.innerWidth / 1920;
+        var scaleY = window.innerHeight / 1080;
+        $('#screen').css({
+            transform: 'scale(' + scaleX + ',' + scaleY + ')',
+            transformOrigin: 'left top'
+        });
     }
 
     function pad(n) {

+ 15 - 0
src/main/resources/views/modules/mes/mesScreenPlayer.html

@@ -281,10 +281,25 @@
 
             var screenUrl = normalizeScreenUrl(screen.screenUrl);
             $('#player-frame').attr('src', screenUrl);
+            $('#player-frame').off('load.fitScreen').on('load.fitScreen', function() {
+                notifyFrameResize(this);
+            });
 
             startCountdown();
         }
 
+        function notifyFrameResize(frame) {
+            try {
+                if (frame && frame.contentWindow) {
+                    frame.contentWindow.dispatchEvent(new Event('resize'));
+                }
+            } catch (e) {}
+        }
+
+        $(window).on('resize', function() {
+            notifyFrameResize(document.getElementById('player-frame'));
+        });
+
         function startCountdown() {
             clearInterval(countdownTimer);