瀏覽代碼

Stop tracking WEB-INF/classes

hou 1 周之前
父節點
當前提交
73730e4fa9
共有 100 個文件被更改,包括 1102 次插入183 次删除
  1. 0 8
      .idea/.gitignore
  2. 0 18
      .idea/compiler.xml
  3. 0 6
      .idea/encodings.xml
  4. 0 30
      .idea/jarRepositories.xml
  5. 0 12
      .idea/misc.xml
  6. 0 6
      .idea/vcs.xml
  7. 14 0
      db/mes_product_rivet_history.sql
  8. 1 1
      src/main/java/com/jeesite/modules/mes/dao/MesProductRecordDao.java
  9. 2 2
      src/main/java/com/jeesite/modules/mes/service/MesProductRecordService.java
  10. 8 1
      src/main/java/com/jeesite/modules/mes/web/MesProductController.java
  11. 1 0
      src/main/resources/config/application.yml
  12. 4 0
      src/main/resources/mappings/modules/mes/MesProductRecordDao.xml
  13. 52 1
      src/main/resources/static/screen/oprno-record-screen.css
  14. 234 14
      src/main/resources/static/screen/oprno-record-screen.js
  15. 150 21
      src/main/resources/views/modules/mes/mesScreen5.html
  16. 159 15
      src/main/resources/views/modules/mes/mesScreen6.html
  17. 159 15
      src/main/resources/views/modules/mes/mesScreen7.html
  18. 159 15
      src/main/resources/views/modules/mes/mesScreen8.html
  19. 159 15
      src/main/resources/views/modules/mes/mesScreen9.html
  20. 0 3
      src/main/webapp/WEB-INF/classes/META-INF/MANIFEST.MF
  21. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/Application.class
  22. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/Modbus.class
  23. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/S7.class
  24. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/Test.class
  25. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/config/BaseConfig.class
  26. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/config/WebConfig.class
  27. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/interceptor/SiteClosedInterceptor.class
  28. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesAppDao.class
  29. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesApplyDao.class
  30. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesApprovalDao.class
  31. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesApprovalNodeDao.class
  32. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesBatchSnDao.class
  33. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCcdInspectionDao.class
  34. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCheckDao.class
  35. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCheckFormDao.class
  36. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCheckItemsDao.class
  37. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCheckItemsFailDao.class
  38. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCustomerDao.class
  39. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceAlarmDao.class
  40. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceCateDao.class
  41. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceCheckDao.class
  42. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceClientDao.class
  43. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceConsumableDao.class
  44. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceConsumableRecordDao.class
  45. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceDao.class
  46. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceFormDao.class
  47. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceLogDao.class
  48. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDevicePreventDao.class
  49. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDevicePreventFormDao.class
  50. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDevicePreventTaskDao.class
  51. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceRecordDao.class
  52. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceStateDao.class
  53. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceTaskDao.class
  54. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceTaskFormDao.class
  55. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceTaskUserDao.class
  56. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceTimeDao.class
  57. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceUrgencyDao.class
  58. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDocumentCateDao.class
  59. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDocumentDao.class
  60. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesElectricTorqueDao.class
  61. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesElectricTorqueInfoDao.class
  62. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGlueDao.class
  63. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGlueRecordDao.class
  64. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGp12RecordDao.class
  65. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGroupDao.class
  66. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGroupOprnoDao.class
  67. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGroupUserDao.class
  68. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesHwdgTimeDao.class
  69. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesIconsDao.class
  70. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesIpqcDao.class
  71. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesIqcDao.class
  72. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesJbLogDao.class
  73. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLineDao.class
  74. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLineProcessDao.class
  75. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLineProcessMaterialDao.class
  76. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLineProcessUserDao.class
  77. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLogDao.class
  78. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLogUselessDao.class
  79. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialBfRecordDao.class
  80. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialBfRecordItemsDao.class
  81. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialBlpRecordDao.class
  82. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCheckDao.class
  83. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCheckItemsDao.class
  84. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCheckRecordDao.class
  85. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCheckRecordItemsDao.class
  86. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCkLogDao.class
  87. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialDao.class
  88. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialKcLogDao.class
  89. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialKwDao.class
  90. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialLlRecordDao.class
  91. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialLlRecordItemsDao.class
  92. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialPrebindDao.class
  93. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialReportDao.class
  94. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialRkLogDao.class
  95. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialRkRecordDao.class
  96. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialRkRecordItemsDao.class
  97. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialThRecordDao.class
  98. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialThRecordItemsDao.class
  99. 二進制
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesNgDao.class
  100. 0 0
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesPeriodicMaintenanceDao.class

+ 0 - 8
.idea/.gitignore

@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml

+ 0 - 18
.idea/compiler.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CompilerConfiguration">
-    <annotationProcessing>
-      <profile name="Maven default annotation processors profile" enabled="true">
-        <sourceOutputDir name="target/generated-sources/annotations" />
-        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
-        <outputRelativeToContentRoot value="true" />
-        <module name="jee-mes-x04c" />
-      </profile>
-    </annotationProcessing>
-  </component>
-  <component name="JavacSettings">
-    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
-      <module name="jee-mes-x04c" options="-parameters" />
-    </option>
-  </component>
-</project>

+ 0 - 6
.idea/encodings.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="Encoding">
-    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
-  </component>
-</project>

+ 0 - 30
.idea/jarRepositories.xml

@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="RemoteRepositoriesConfiguration">
-    <remote-repository>
-      <option name="id" value="aliyun-repos" />
-      <option name="name" value="aliyun-repos" />
-      <option name="url" value="https://maven.aliyun.com/repository/public" />
-    </remote-repository>
-    <remote-repository>
-      <option name="id" value="central" />
-      <option name="name" value="Central Repository" />
-      <option name="url" value="https://repo.maven.apache.org/maven2" />
-    </remote-repository>
-    <remote-repository>
-      <option name="id" value="central" />
-      <option name="name" value="Maven Central repository" />
-      <option name="url" value="https://repo1.maven.org/maven2" />
-    </remote-repository>
-    <remote-repository>
-      <option name="id" value="jboss.community" />
-      <option name="name" value="JBoss Community repository" />
-      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
-    </remote-repository>
-    <remote-repository>
-      <option name="id" value="jeesite-repos" />
-      <option name="name" value="jeesite-repos" />
-      <option name="url" value="http://maven.jeesite.net/repository/maven-public" />
-    </remote-repository>
-  </component>
-</project>

+ 0 - 12
.idea/misc.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ExternalStorageConfigurationManager" enabled="true" />
-  <component name="MavenProjectsManager">
-    <option name="originalFiles">
-      <list>
-        <option value="$PROJECT_DIR$/pom.xml" />
-      </list>
-    </option>
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
-</project>

+ 0 - 6
.idea/vcs.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
-  </component>
-</project>

+ 14 - 0
db/mes_product_rivet_history.sql

@@ -0,0 +1,14 @@
+-- 压铆参数改为按次留历史:增加批次号,去掉唯一键
+-- 已有库执行本脚本;新库直接使用 mes_product_rivet.sql
+
+ALTER TABLE mes_product_rivet
+    ADD COLUMN batch_id VARCHAR(64) NULL COMMENT '上传批次号(同一次 batchUpload 相同)' AFTER point_no;
+
+ALTER TABLE mes_product_rivet
+    DROP INDEX uk_sn_line_oprno_point;
+
+ALTER TABLE mes_product_rivet
+    ADD INDEX idx_rivet_sn_batch (sn, batch_id);
+
+ALTER TABLE mes_product_rivet
+    ADD INDEX idx_rivet_sn_line_oprno_point (sn, line_sn, oprno, point_no);

+ 1 - 1
src/main/java/com/jeesite/modules/mes/dao/MesProductRecordDao.java

@@ -27,6 +27,6 @@ public interface MesProductRecordDao extends CrudDao<MesProductRecord> {
 
     List<MesProductRecord> selectByOprno(MesProductRecord mesProductRecord);
 
-    List<Map<String, Object>> findRecordCountByOprnos(@Param("oprnos") List<String> oprnos);
+    List<Map<String, Object>> findRecordCountByOprnos(@Param("oprnos") List<String> oprnos, @Param("dateScope") String dateScope);
 
 }

+ 2 - 2
src/main/java/com/jeesite/modules/mes/service/MesProductRecordService.java

@@ -223,8 +223,8 @@ public class MesProductRecordService extends CrudService<MesProductRecordDao, Me
 		return mesProductRecordDao.selectByOprno(mesProductRecord);
 	}
 
-	public List<Map<String, Object>> findRecordCountByOprnos(List<String> oprnos) {
-		return mesProductRecordDao.findRecordCountByOprnos(oprnos);
+	public List<Map<String, Object>> findRecordCountByOprnos(List<String> oprnos, String dateScope) {
+		return mesProductRecordDao.findRecordCountByOprnos(oprnos, dateScope);
 	}
 
 

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

@@ -355,7 +355,14 @@ public class MesProductController extends BaseController {
 		}
 
 		List<String> oprnoList = new ArrayList<>(oprnoSet);
-		List<Map<String, Object>> countRows = mesProductRecordService.findRecordCountByOprnos(oprnoList);
+		String dateScope = req.getParameter("dateScope");
+		if (StringUtils.isEmpty(dateScope)) {
+			dateScope = req.getParameter("scope");
+		}
+		if (!"today".equalsIgnoreCase(dateScope)) {
+			dateScope = "all";
+		}
+		List<Map<String, Object>> countRows = mesProductRecordService.findRecordCountByOprnos(oprnoList, dateScope);
 		Map<String, Long> countMap = MapUtils.newHashMap();
 		for (Map<String, Object> row : countRows) {
 			if (row == null) {

+ 1 - 0
src/main/resources/config/application.yml

@@ -688,6 +688,7 @@ shiro:
     ${adminPath}/mes/mesProductRecord/pccheck = anon
     ${adminPath}/mes/mesProductRecord/pccreate = anon
     ${adminPath}/mes/mesProductRecord/changeLine = anon
+    ${adminPath}/mes/mesProductRivet/batchUpload = anon
     ${adminPath}/** = user
 
 

+ 4 - 0
src/main/resources/mappings/modules/mes/MesProductRecordDao.xml

@@ -47,6 +47,10 @@
         <foreach collection="oprnos" item="oprno" open="(" separator="," close=")">
             #{oprno}
         </foreach>
+        <if test="dateScope == 'today'">
+            AND create_date &gt;= CURDATE()
+            AND create_date &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY)
+        </if>
         GROUP BY oprno
     </select>
     <update id="updateAll">

+ 52 - 1
src/main/resources/static/screen/oprno-record-screen.css

@@ -221,17 +221,68 @@ body {
 .data-panel {
 	display: grid;
 	grid-template-rows: 52px 350px 1fr;
+	min-height: 0;
+	overflow: hidden;
 }
 
 .chart-box {
 	min-height: 0;
 }
 
-.table-wrap {
+.table-panel {
+	display: flex;
+	flex-direction: column;
+	min-height: 0;
 	padding: 0 18px 18px;
 	overflow: hidden;
 }
 
+.record-table-header {
+	flex-shrink: 0;
+}
+
+.record-table-header th {
+	background: rgba(4, 20, 45, 0.96);
+}
+
+.record-table-header .record-table {
+	margin-bottom: 0;
+}
+
+.table-wrap {
+	flex: 1;
+	padding: 0;
+	overflow-x: hidden;
+	overflow-y: auto;
+	min-height: 0;
+	-webkit-overflow-scrolling: touch;
+	scrollbar-width: thin;
+	scrollbar-color: rgba(0, 143, 253, 0.55) rgba(0, 143, 253, 0.08);
+}
+
+.table-wrap::-webkit-scrollbar {
+	width: 8px;
+}
+
+.table-wrap::-webkit-scrollbar-track {
+	background: rgba(0, 143, 253, 0.08);
+	border-radius: 4px;
+}
+
+.table-wrap::-webkit-scrollbar-thumb {
+	background: rgba(0, 143, 253, 0.45);
+	border-radius: 4px;
+}
+
+.table-wrap.is-auto-scroll {
+	scrollbar-width: none;
+}
+
+.table-wrap.is-auto-scroll::-webkit-scrollbar {
+	width: 0;
+	height: 0;
+}
+
 .record-table {
 	width: 100%;
 	border-collapse: collapse;

+ 234 - 14
src/main/resources/static/screen/oprno-record-screen.js

@@ -1,14 +1,25 @@
 (function () {
 	var config = window.screenOprnoConfig || {};
+	var tableAutoScroll = {
+		timer: null,
+		pauseTimer: null,
+		paused: false,
+		resizeTimer: null,
+		loopHeight: 0
+	};
 	var state = {
 		oprnos: normalizeOprnos(config.defaultOprnos || []),
 		data: [],
-		chart: null
+		chart: null,
+		scope: config.defaultScope === "today" ? "today" : "all",
+		panelCollapsed: false,
+		seriesName: "全部生产数量"
 	};
 
 	$(function () {
 		changeZoom();
 		initPage();
+		bindDelegatedEvents();
 		refreshData();
 		setInterval(updateTime, 1000);
 		setInterval(refreshData, 1000 * 60);
@@ -17,14 +28,19 @@
 			if (state.chart) {
 				state.chart.resize();
 			}
+			scheduleTableAutoScrollRestart();
 		});
 	});
 
 	function initPage() {
 		$("#screenTitle").text(config.title || "工位加工记录统计大屏");
+		initTableLayout();
 		updateTime();
+		updateScopeLabels();
+		syncScopeTabs();
 		renderInput();
 		renderTags();
+		applyPanelCollapsed();
 
 		$("#addBtn").on("click", addOprno);
 		$("#addOprno").on("keydown", function (e) {
@@ -47,6 +63,80 @@
 		});
 	}
 
+	function bindDelegatedEvents() {
+		$(document).on("click", "#panelCollapseBtn", function (e) {
+			e.preventDefault();
+			state.panelCollapsed = !state.panelCollapsed;
+			applyPanelCollapsed();
+		});
+
+		$(document).on("click", ".scope-tab", function (e) {
+			e.preventDefault();
+			var scope = $(this).attr("data-scope");
+			if (!scope || scope === state.scope) {
+				return;
+			}
+			setScope(scope);
+		});
+	}
+
+	function setScope(scope) {
+		if (scope !== "all" && scope !== "today") {
+			return;
+		}
+		state.scope = scope;
+		syncScopeTabs();
+		updateScopeLabels();
+		refreshData();
+	}
+
+	function syncScopeTabs() {
+		if (!$(".scope-tab").length) {
+			return;
+		}
+		$(".scope-tab").removeClass("is-active");
+		$('.scope-tab[data-scope="' + state.scope + '"]').addClass("is-active");
+	}
+
+	function applyPanelCollapsed() {
+		var $grid = $("#mainGrid");
+		if (!$grid.length) {
+			return;
+		}
+		$grid.toggleClass("is-folded", state.panelCollapsed);
+		$("#panelCollapseBtn").attr("aria-expanded", state.panelCollapsed ? "false" : "true");
+		$("#panelCollapseBtn").attr("title", state.panelCollapsed ? "展开工位配置" : "收起工位配置");
+		var label = state.panelCollapsed ? "展开" : "收起";
+		$("#panelCollapseBtn .fold-label").text(label);
+		resizeChartLater();
+		scheduleTableAutoScrollRestart();
+	}
+
+	function updateScopeLabels() {
+		var isToday = state.scope === "today";
+		var totalLabel = isToday ? "今日生产数量" : "全部生产数量";
+		var panelTitle = isToday ? "各工位今日生产数量" : "各工位全部生产数量";
+		state.seriesName = totalLabel;
+		if ($("#recordTotalLabel").length) {
+			$("#recordTotalLabel").text(totalLabel);
+		}
+		if ($("#dataPanelTitle").length) {
+			$("#dataPanelTitle").text(panelTitle);
+		}
+		if ($("#recordCountHeader").length) {
+			$("#recordCountHeader").text(totalLabel);
+		}
+	}
+
+	function resizeChartLater() {
+		if (!state.chart) {
+			return;
+		}
+		setTimeout(function () {
+			state.chart.resize();
+		}, 300);
+	}
+
 	function changeZoom() {
 		var wb = $(window).width() / 1920;
 		var hb = $(window).height() / 1080;
@@ -104,7 +194,7 @@
 		});
 		$("#tagList").html(html);
 		$(".tag-remove").on("click", function () {
-			removeOprno($(this).data("oprno"));
+			removeOprno($(this).attr("data-oprno"));
 		});
 		$("#oprnoTotal").text(state.oprnos.length);
 	}
@@ -115,15 +205,26 @@
 			renderData();
 			return;
 		}
-		$.post("/js/a/mes/mesProduct/screenOprnoRecordCount", {
-			oprnos: state.oprnos.join(",")
-		}, function (ret) {
-			if (ret && ret.result === "true") {
-				state.data = ret.data || [];
-			} else {
+		$.ajax({
+			type: "POST",
+			url: "/js/a/mes/mesProduct/screenOprnoRecordCount",
+			data: {
+				oprnos: state.oprnos.join(","),
+				dateScope: state.scope
+			},
+			dataType: "json",
+			success: function (ret) {
+				if (ret && ret.result === "true") {
+					state.data = ret.data || [];
+				} else {
+					state.data = [];
+				}
+				renderData();
+			},
+			error: function () {
 				state.data = [];
+				renderData();
 			}
-			renderData();
 		});
 	}
 
@@ -142,11 +243,26 @@
 		renderChart(rows);
 	}
 
-	function renderTable(rows) {
-		if (!rows.length) {
-			$("#recordBody").html('<tr><td colspan="3"><div class="empty-row">暂无工位数据</div></td></tr>');
+	function initTableLayout() {
+		var $wrap = $(".table-wrap");
+		if (!$wrap.length || $wrap.data("layout-ready")) {
+			return;
+		}
+		var $table = $wrap.children(".record-table").first();
+		if (!$table.length) {
 			return;
 		}
+		var $thead = $table.find("thead").detach();
+		var $shell = $('<div class="table-panel"></div>');
+		var $header = $('<div class="record-table-header"></div>');
+		$header.append($('<table class="record-table"></table>').append($thead));
+		$wrap.before($shell);
+		$shell.append($header);
+		$shell.append($wrap);
+		$wrap.data("layout-ready", true);
+	}
+
+	function buildTableRowsHtml(rows) {
 		var html = "";
 		rows.forEach(function (item, index) {
 			html += "<tr>";
@@ -155,11 +271,100 @@
 			html += '<td class="count-cell">' + Number(item.recordCount || 0) + "</td>";
 			html += "</tr>";
 		});
-		$("#recordBody").html(html);
+		return html;
+	}
+
+	function measureLoopHeight() {
+		var $rows = $("#recordBody").children("tr");
+		var half = $rows.length / 2;
+		if (half < 1) {
+			return 0;
+		}
+		return $rows.eq(half)[0].offsetTop - $rows.eq(0)[0].offsetTop;
+	}
+
+	function renderTable(rows) {
+		stopTableAutoScroll();
+		initTableLayout();
+		if (!rows.length) {
+			$("#recordBody").html('<tr><td colspan="3"><div class="empty-row">暂无工位数据</div></td></tr>');
+			tableAutoScroll.loopHeight = 0;
+			return;
+		}
+		var rowHtml = buildTableRowsHtml(rows);
+		$("#recordBody").html(rowHtml + rowHtml);
+		setTimeout(function () {
+			tableAutoScroll.loopHeight = measureLoopHeight();
+			startTableAutoScroll();
+		}, 0);
+	}
+
+	function stopTableAutoScroll() {
+		if (tableAutoScroll.timer) {
+			clearInterval(tableAutoScroll.timer);
+			tableAutoScroll.timer = null;
+		}
+		if (tableAutoScroll.pauseTimer) {
+			clearTimeout(tableAutoScroll.pauseTimer);
+			tableAutoScroll.pauseTimer = null;
+		}
+		$(".table-wrap").removeClass("is-auto-scroll");
+	}
+
+	function scheduleTableAutoScrollRestart() {
+		if (tableAutoScroll.resizeTimer) {
+			clearTimeout(tableAutoScroll.resizeTimer);
+		}
+		tableAutoScroll.resizeTimer = setTimeout(function () {
+			tableAutoScroll.loopHeight = measureLoopHeight();
+			startTableAutoScroll();
+		}, 320);
+	}
+
+	function startTableAutoScroll() {
+		if (config.tableAutoScroll === false) {
+			return;
+		}
+		stopTableAutoScroll();
+		var $wrap = $(".table-wrap");
+		if (!$wrap.length) {
+			return;
+		}
+		var el = $wrap[0];
+		el.scrollTop = 0;
+		if (!tableAutoScroll.loopHeight || el.scrollHeight <= el.clientHeight + 2) {
+			tableAutoScroll.loopHeight = 0;
+			return;
+		}
+
+		var step = Number(config.tableScrollStep) > 0 ? Number(config.tableScrollStep) : 1;
+		var speed = Number(config.tableScrollSpeed) > 0 ? Number(config.tableScrollSpeed) : 35;
+
+		$wrap.addClass("is-auto-scroll");
+		$wrap.off("mouseenter.tableScroll mouseleave.tableScroll");
+		$wrap.on("mouseenter.tableScroll", function () {
+			tableAutoScroll.paused = true;
+		});
+		$wrap.on("mouseleave.tableScroll", function () {
+			tableAutoScroll.paused = false;
+		});
+
+		tableAutoScroll.timer = setInterval(function () {
+			if (tableAutoScroll.paused) {
+				return;
+			}
+			el.scrollTop += step;
+			while (el.scrollTop >= tableAutoScroll.loopHeight) {
+				el.scrollTop -= tableAutoScroll.loopHeight;
+			}
+		}, speed);
 	}
 
 	function renderChart(rows) {
 		var chartDom = document.getElementById("recordChart");
+		if (!chartDom) {
+			return;
+		}
 		if (!state.chart) {
 			state.chart = echarts.init(chartDom);
 		}
@@ -195,7 +400,7 @@
 				splitLine: { lineStyle: { color: "rgba(255,255,255,0.08)" } }
 			},
 			series: [{
-				name: "加工记录数",
+				name: state.seriesName,
 				type: "bar",
 				barMaxWidth: 46,
 				data: values,
@@ -253,4 +458,19 @@
 			.replace(/"/g, "&quot;")
 			.replace(/'/g, "&#39;");
 	}
+
+	window.MesOprnoScreen = {
+		setScope: setScope,
+		togglePanel: function () {
+			state.panelCollapsed = !state.panelCollapsed;
+			applyPanelCollapsed();
+		},
+		getScope: function () {
+			return state.scope;
+		},
+		isPanelCollapsed: function () {
+			return state.panelCollapsed;
+		},
+		refresh: refreshData
+	};
 })();

+ 150 - 21
src/main/resources/views/modules/mes/mesScreen5.html

@@ -5,43 +5,172 @@
 	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 	<meta http-equiv="X-UA-Compatible" content="ie=edge">
 	<title>MES工位加工记录统计大屏</title>
-	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css">
+	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css?v=202506244">
+	<style>
+		.screen-header .header-left-tools {
+			justify-self: start;
+			display: flex;
+			align-items: center;
+		}
+
+		.scope-tab-group {
+			display: inline-flex;
+			padding: 4px;
+			border: 1px solid rgba(0, 143, 253, 0.34);
+			border-radius: 6px;
+			background: rgba(4, 20, 45, 0.78);
+			box-shadow: inset 0 0 24px rgba(0, 143, 253, 0.1);
+		}
+
+		.scope-tab {
+			min-width: 112px;
+			height: 40px;
+			padding: 0 16px;
+			border: none;
+			border-radius: 4px;
+			background: transparent;
+			color: #9ad8ff;
+			font-size: 18px;
+			font-family: inherit;
+			cursor: pointer;
+			transition: color 0.2s, background 0.2s, box-shadow 0.2s;
+		}
+
+		.scope-tab.is-active {
+			color: #fff;
+			background: linear-gradient(180deg, rgba(64, 222, 120, 0.32), rgba(0, 143, 253, 0.24));
+			box-shadow: 0 0 14px rgba(64, 222, 120, 0.22);
+		}
+
+		.scope-tab:not(.is-active):hover {
+			color: #d8f4ff;
+			background: rgba(0, 143, 253, 0.16);
+		}
+
+		.main-grid-wrap {
+			position: relative;
+			display: flex;
+			align-items: stretch;
+			height: 770px;
+			margin-top: 22px;
+		}
+
+		.main-grid-wrap .side-config-panel {
+			width: 470px;
+			flex-shrink: 0;
+			overflow: hidden;
+			transition: width 0.28s ease, opacity 0.28s ease, margin 0.28s ease;
+		}
+
+		.main-grid-wrap.is-folded .side-config-panel {
+			width: 0;
+			opacity: 0;
+			margin-right: 0;
+			pointer-events: none;
+		}
+
+		.config-fold-trigger {
+			position: relative;
+			z-index: 6;
+			flex-shrink: 0;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			width: 24px;
+			margin: 0 10px 0 0;
+			align-self: center;
+			height: 136px;
+			padding: 0;
+			border: 1px solid rgba(0, 246, 255, 0.38);
+			border-radius: 0 6px 6px 0;
+			background: linear-gradient(180deg, rgba(5, 37, 78, 0.96), rgba(5, 25, 54, 0.92));
+			box-shadow: inset 0 0 20px rgba(0, 143, 253, 0.14), 0 0 16px rgba(0, 143, 253, 0.18);
+			cursor: pointer;
+			color: #00f6ff;
+			font-size: 22px;
+			font-family: inherit;
+			line-height: 1;
+		}
+
+		.config-fold-trigger:hover {
+			border-color: rgba(64, 222, 120, 0.55);
+			color: #40de78;
+			box-shadow: inset 0 0 24px rgba(64, 222, 120, 0.12), 0 0 18px rgba(64, 222, 120, 0.2);
+		}
+
+		.config-fold-trigger .fold-icon {
+			display: block;
+			font-size: 28px;
+			font-weight: 700;
+			line-height: 1;
+			transition: transform 0.28s ease;
+		}
+
+		.config-fold-trigger .fold-label {
+			margin-top: 10px;
+			font-size: 14px;
+			writing-mode: vertical-rl;
+			text-orientation: mixed;
+			letter-spacing: 3px;
+		}
+
+		.main-grid-wrap.is-folded .config-fold-trigger .fold-icon {
+			transform: rotate(180deg);
+		}
+
+		.main-grid-wrap .data-panel-main {
+			flex: 1;
+			min-width: 0;
+		}
+	</style>
 </head>
 <body>
 <div class="screen-page">
 	<img class="bg" src="${ctxStatic}/screen/imgs/bg3.png" alt="">
 	<div class="screen-content">
 		<div class="screen-header">
-			<div></div>
+			<div class="header-left-tools">
+				<div class="scope-tab-group" id="scopeSwitch">
+					<button type="button" class="scope-tab is-active" data-scope="all">全部产量</button>
+					<button type="button" class="scope-tab" data-scope="today">今日产量</button>
+				</div>
+			</div>
 			<div class="screen-title-new" id="screenTitle"></div>
 			<div class="screen-time" id="screenTime"></div>
 		</div>
 		<div class="summary-row">
 			<div class="summary-item"><div class="summary-label">工位数量</div><div class="summary-value" id="oprnoTotal">0</div></div>
-			<div class="summary-item"><div class="summary-label">加工记录总数</div><div class="summary-value" id="recordTotal">0</div></div>
+			<div class="summary-item"><div class="summary-label" id="recordTotalLabel">全部生产数量</div><div class="summary-value" id="recordTotal">0</div></div>
 			<div class="summary-item"><div class="summary-label">最高工位</div><div class="summary-value" id="maxOprno">--</div></div>
 		</div>
-		<div class="main-grid">
-			<div class="panel control-panel">
-				<div class="panel-title">工位号</div>
-				<textarea class="oprno-input" id="oprnoInput"></textarea>
-				<div class="input-row">
-					<input class="add-input" id="addOprno" type="text" placeholder="新增工位号">
-					<button class="screen-btn primary" id="addBtn">添加</button>
-				</div>
-				<div class="action-row">
-					<button class="screen-btn primary" id="queryBtn">查询</button>
-					<button class="screen-btn" id="clearBtn">清空</button>
+		<div class="main-grid-wrap" id="mainGrid">
+			<div class="side-config-panel" id="sideConfigPanel">
+				<div class="panel control-panel">
+					<div class="panel-title">工位号</div>
+					<textarea class="oprno-input" id="oprnoInput"></textarea>
+					<div class="input-row">
+						<input class="add-input" id="addOprno" type="text" placeholder="新增工位号">
+						<button type="button" class="screen-btn primary" id="addBtn">添加</button>
+					</div>
+					<div class="action-row">
+						<button type="button" class="screen-btn primary" id="queryBtn">查询</button>
+						<button type="button" class="screen-btn" id="clearBtn">清空</button>
+					</div>
+					<div class="tag-list" id="tagList"></div>
+					<div class="hint">支持逗号、空格、换行分隔工位号。</div>
 				</div>
-				<div class="tag-list" id="tagList"></div>
-				<div class="hint">支持逗号、空格、换行分隔工位号。</div>
 			</div>
-			<div class="panel data-panel">
-				<div class="panel-title">各工位加工记录数</div>
+			<button type="button" class="config-fold-trigger" id="panelCollapseBtn" aria-expanded="true" title="收起工位配置">
+				<span class="fold-icon">‹</span>
+				<span class="fold-label">收起</span>
+			</button>
+			<div class="panel data-panel data-panel-main">
+				<div class="panel-title" id="dataPanelTitle">各工位全部生产数量</div>
 				<div class="chart-box" id="recordChart"></div>
 				<div class="table-wrap">
 					<table class="record-table">
-						<thead><tr><th>序号</th><th>工位</th><th>加工记录数</th></tr></thead>
+						<thead><tr><th>序号</th><th>工位</th><th id="recordCountHeader">全部生产数量</th></tr></thead>
 						<tbody id="recordBody"></tbody>
 					</table>
 				</div>
@@ -54,9 +183,9 @@
 <script>
 	window.screenOprnoConfig = {
 		title: "一号工位加工记录统计大屏",
-		defaultOprnos: ["OP040A", "OP060", "OP070", "OP080", "OP090", "OP100", "OP110", "OP120", "OP130", "OP140"]
+		defaultOprnos: ["OP010A", "OP050A", "OP060A", "OP070A", "OP070B", "OP080A", "OP090A", "OP090B", "OP090C", "OP100A", "OP100B", "OP100C"]
 	};
 </script>
-<script src="${ctxStatic}/screen/oprno-record-screen.js"></script>
+<script src="${ctxStatic}/screen/oprno-record-screen.js?v=202506244"></script>
 </body>
 </html>

+ 159 - 15
src/main/resources/views/modules/mes/mesScreen6.html

@@ -5,31 +5,175 @@
 	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 	<meta http-equiv="X-UA-Compatible" content="ie=edge">
 	<title>MES工位加工记录统计大屏</title>
-	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css">
+	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css?v=202506244">
+	<style>
+		.screen-header .header-left-tools {
+			justify-self: start;
+			display: flex;
+			align-items: center;
+		}
+
+		.scope-tab-group {
+			display: inline-flex;
+			padding: 4px;
+			border: 1px solid rgba(0, 143, 253, 0.34);
+			border-radius: 6px;
+			background: rgba(4, 20, 45, 0.78);
+			box-shadow: inset 0 0 24px rgba(0, 143, 253, 0.1);
+		}
+
+		.scope-tab {
+			min-width: 112px;
+			height: 40px;
+			padding: 0 16px;
+			border: none;
+			border-radius: 4px;
+			background: transparent;
+			color: #9ad8ff;
+			font-size: 18px;
+			font-family: inherit;
+			cursor: pointer;
+			transition: color 0.2s, background 0.2s, box-shadow 0.2s;
+		}
+
+		.scope-tab.is-active {
+			color: #fff;
+			background: linear-gradient(180deg, rgba(64, 222, 120, 0.32), rgba(0, 143, 253, 0.24));
+			box-shadow: 0 0 14px rgba(64, 222, 120, 0.22);
+		}
+
+		.scope-tab:not(.is-active):hover {
+			color: #d8f4ff;
+			background: rgba(0, 143, 253, 0.16);
+		}
+
+		.main-grid-wrap {
+			position: relative;
+			display: flex;
+			align-items: stretch;
+			height: 770px;
+			margin-top: 22px;
+		}
+
+		.main-grid-wrap .side-config-panel {
+			width: 470px;
+			flex-shrink: 0;
+			overflow: hidden;
+			transition: width 0.28s ease, opacity 0.28s ease, margin 0.28s ease;
+		}
+
+		.main-grid-wrap.is-folded .side-config-panel {
+			width: 0;
+			opacity: 0;
+			margin-right: 0;
+			pointer-events: none;
+		}
+
+		.config-fold-trigger {
+			position: relative;
+			z-index: 6;
+			flex-shrink: 0;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			width: 24px;
+			margin: 0 10px 0 0;
+			align-self: center;
+			height: 136px;
+			padding: 0;
+			border: 1px solid rgba(0, 246, 255, 0.38);
+			border-radius: 0 6px 6px 0;
+			background: linear-gradient(180deg, rgba(5, 37, 78, 0.96), rgba(5, 25, 54, 0.92));
+			box-shadow: inset 0 0 20px rgba(0, 143, 253, 0.14), 0 0 16px rgba(0, 143, 253, 0.18);
+			cursor: pointer;
+			color: #00f6ff;
+			font-size: 22px;
+			font-family: inherit;
+			line-height: 1;
+		}
+
+		.config-fold-trigger:hover {
+			border-color: rgba(64, 222, 120, 0.55);
+			color: #40de78;
+			box-shadow: inset 0 0 24px rgba(64, 222, 120, 0.12), 0 0 18px rgba(64, 222, 120, 0.2);
+		}
+
+		.config-fold-trigger .fold-icon {
+			display: block;
+			font-size: 28px;
+			font-weight: 700;
+			line-height: 1;
+			transition: transform 0.28s ease;
+		}
+
+		.config-fold-trigger .fold-label {
+			margin-top: 10px;
+			font-size: 14px;
+			writing-mode: vertical-rl;
+			text-orientation: mixed;
+			letter-spacing: 3px;
+		}
+
+		.main-grid-wrap.is-folded .config-fold-trigger .fold-icon {
+			transform: rotate(180deg);
+		}
+
+		.main-grid-wrap .data-panel-main {
+			flex: 1;
+			min-width: 0;
+		}
+	</style>
 </head>
 <body>
 <div class="screen-page">
 	<img class="bg" src="${ctxStatic}/screen/imgs/bg3.png" alt="">
 	<div class="screen-content">
-		<div class="screen-header"><div></div><div class="screen-title-new" id="screenTitle"></div><div class="screen-time" id="screenTime"></div></div>
+		<div class="screen-header">
+			<div class="header-left-tools">
+				<div class="scope-tab-group" id="scopeSwitch">
+					<button type="button" class="scope-tab is-active" data-scope="all">全部产量</button>
+					<button type="button" class="scope-tab" data-scope="today">今日产量</button>
+				</div>
+			</div>
+			<div class="screen-title-new" id="screenTitle"></div>
+			<div class="screen-time" id="screenTime"></div>
+		</div>
 		<div class="summary-row">
 			<div class="summary-item"><div class="summary-label">工位数量</div><div class="summary-value" id="oprnoTotal">0</div></div>
-			<div class="summary-item"><div class="summary-label">加工记录总数</div><div class="summary-value" id="recordTotal">0</div></div>
+			<div class="summary-item"><div class="summary-label" id="recordTotalLabel">全部生产数量</div><div class="summary-value" id="recordTotal">0</div></div>
 			<div class="summary-item"><div class="summary-label">最高工位</div><div class="summary-value" id="maxOprno">--</div></div>
 		</div>
-		<div class="main-grid">
-			<div class="panel control-panel">
-				<div class="panel-title">工位号</div>
-				<textarea class="oprno-input" id="oprnoInput"></textarea>
-				<div class="input-row"><input class="add-input" id="addOprno" type="text" placeholder="新增工位号"><button class="screen-btn primary" id="addBtn">添加</button></div>
-				<div class="action-row"><button class="screen-btn primary" id="queryBtn">查询</button><button class="screen-btn" id="clearBtn">清空</button></div>
-				<div class="tag-list" id="tagList"></div>
-				<div class="hint">支持逗号、空格、换行分隔工位号。</div>
+		<div class="main-grid-wrap" id="mainGrid">
+			<div class="side-config-panel" id="sideConfigPanel">
+				<div class="panel control-panel">
+					<div class="panel-title">工位号</div>
+					<textarea class="oprno-input" id="oprnoInput"></textarea>
+					<div class="input-row">
+						<input class="add-input" id="addOprno" type="text" placeholder="新增工位号">
+						<button type="button" class="screen-btn primary" id="addBtn">添加</button>
+					</div>
+					<div class="action-row">
+						<button type="button" class="screen-btn primary" id="queryBtn">查询</button>
+						<button type="button" class="screen-btn" id="clearBtn">清空</button>
+					</div>
+					<div class="tag-list" id="tagList"></div>
+					<div class="hint">支持逗号、空格、换行分隔工位号。</div>
+				</div>
 			</div>
-			<div class="panel data-panel">
-				<div class="panel-title">各工位加工记录数</div>
+			<button type="button" class="config-fold-trigger" id="panelCollapseBtn" aria-expanded="true" title="收起工位配置">
+				<span class="fold-icon">‹</span>
+				<span class="fold-label">收起</span>
+			</button>
+			<div class="panel data-panel data-panel-main">
+				<div class="panel-title" id="dataPanelTitle">各工位全部生产数量</div>
 				<div class="chart-box" id="recordChart"></div>
-				<div class="table-wrap"><table class="record-table"><thead><tr><th>序号</th><th>工位</th><th>加工记录数</th></tr></thead><tbody id="recordBody"></tbody></table></div>
+				<div class="table-wrap">
+					<table class="record-table">
+						<thead><tr><th>序号</th><th>工位</th><th id="recordCountHeader">全部生产数量</th></tr></thead>
+						<tbody id="recordBody"></tbody>
+					</table>
+				</div>
 			</div>
 		</div>
 	</div>
@@ -42,6 +186,6 @@
 		defaultOprnos: ["OP150", "OP160", "OP170", "OP180", "OP190", "OP200", "OP210", "OP220", "OP230", "OP240"]
 	};
 </script>
-<script src="${ctxStatic}/screen/oprno-record-screen.js"></script>
+<script src="${ctxStatic}/screen/oprno-record-screen.js?v=202506244"></script>
 </body>
 </html>

+ 159 - 15
src/main/resources/views/modules/mes/mesScreen7.html

@@ -5,31 +5,175 @@
 	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 	<meta http-equiv="X-UA-Compatible" content="ie=edge">
 	<title>MES工位加工记录统计大屏</title>
-	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css">
+	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css?v=202506244">
+	<style>
+		.screen-header .header-left-tools {
+			justify-self: start;
+			display: flex;
+			align-items: center;
+		}
+
+		.scope-tab-group {
+			display: inline-flex;
+			padding: 4px;
+			border: 1px solid rgba(0, 143, 253, 0.34);
+			border-radius: 6px;
+			background: rgba(4, 20, 45, 0.78);
+			box-shadow: inset 0 0 24px rgba(0, 143, 253, 0.1);
+		}
+
+		.scope-tab {
+			min-width: 112px;
+			height: 40px;
+			padding: 0 16px;
+			border: none;
+			border-radius: 4px;
+			background: transparent;
+			color: #9ad8ff;
+			font-size: 18px;
+			font-family: inherit;
+			cursor: pointer;
+			transition: color 0.2s, background 0.2s, box-shadow 0.2s;
+		}
+
+		.scope-tab.is-active {
+			color: #fff;
+			background: linear-gradient(180deg, rgba(64, 222, 120, 0.32), rgba(0, 143, 253, 0.24));
+			box-shadow: 0 0 14px rgba(64, 222, 120, 0.22);
+		}
+
+		.scope-tab:not(.is-active):hover {
+			color: #d8f4ff;
+			background: rgba(0, 143, 253, 0.16);
+		}
+
+		.main-grid-wrap {
+			position: relative;
+			display: flex;
+			align-items: stretch;
+			height: 770px;
+			margin-top: 22px;
+		}
+
+		.main-grid-wrap .side-config-panel {
+			width: 470px;
+			flex-shrink: 0;
+			overflow: hidden;
+			transition: width 0.28s ease, opacity 0.28s ease, margin 0.28s ease;
+		}
+
+		.main-grid-wrap.is-folded .side-config-panel {
+			width: 0;
+			opacity: 0;
+			margin-right: 0;
+			pointer-events: none;
+		}
+
+		.config-fold-trigger {
+			position: relative;
+			z-index: 6;
+			flex-shrink: 0;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			width: 24px;
+			margin: 0 10px 0 0;
+			align-self: center;
+			height: 136px;
+			padding: 0;
+			border: 1px solid rgba(0, 246, 255, 0.38);
+			border-radius: 0 6px 6px 0;
+			background: linear-gradient(180deg, rgba(5, 37, 78, 0.96), rgba(5, 25, 54, 0.92));
+			box-shadow: inset 0 0 20px rgba(0, 143, 253, 0.14), 0 0 16px rgba(0, 143, 253, 0.18);
+			cursor: pointer;
+			color: #00f6ff;
+			font-size: 22px;
+			font-family: inherit;
+			line-height: 1;
+		}
+
+		.config-fold-trigger:hover {
+			border-color: rgba(64, 222, 120, 0.55);
+			color: #40de78;
+			box-shadow: inset 0 0 24px rgba(64, 222, 120, 0.12), 0 0 18px rgba(64, 222, 120, 0.2);
+		}
+
+		.config-fold-trigger .fold-icon {
+			display: block;
+			font-size: 28px;
+			font-weight: 700;
+			line-height: 1;
+			transition: transform 0.28s ease;
+		}
+
+		.config-fold-trigger .fold-label {
+			margin-top: 10px;
+			font-size: 14px;
+			writing-mode: vertical-rl;
+			text-orientation: mixed;
+			letter-spacing: 3px;
+		}
+
+		.main-grid-wrap.is-folded .config-fold-trigger .fold-icon {
+			transform: rotate(180deg);
+		}
+
+		.main-grid-wrap .data-panel-main {
+			flex: 1;
+			min-width: 0;
+		}
+	</style>
 </head>
 <body>
 <div class="screen-page">
 	<img class="bg" src="${ctxStatic}/screen/imgs/bg3.png" alt="">
 	<div class="screen-content">
-		<div class="screen-header"><div></div><div class="screen-title-new" id="screenTitle"></div><div class="screen-time" id="screenTime"></div></div>
+		<div class="screen-header">
+			<div class="header-left-tools">
+				<div class="scope-tab-group" id="scopeSwitch">
+					<button type="button" class="scope-tab is-active" data-scope="all">全部产量</button>
+					<button type="button" class="scope-tab" data-scope="today">今日产量</button>
+				</div>
+			</div>
+			<div class="screen-title-new" id="screenTitle"></div>
+			<div class="screen-time" id="screenTime"></div>
+		</div>
 		<div class="summary-row">
 			<div class="summary-item"><div class="summary-label">工位数量</div><div class="summary-value" id="oprnoTotal">0</div></div>
-			<div class="summary-item"><div class="summary-label">加工记录总数</div><div class="summary-value" id="recordTotal">0</div></div>
+			<div class="summary-item"><div class="summary-label" id="recordTotalLabel">全部生产数量</div><div class="summary-value" id="recordTotal">0</div></div>
 			<div class="summary-item"><div class="summary-label">最高工位</div><div class="summary-value" id="maxOprno">--</div></div>
 		</div>
-		<div class="main-grid">
-			<div class="panel control-panel">
-				<div class="panel-title">工位号</div>
-				<textarea class="oprno-input" id="oprnoInput"></textarea>
-				<div class="input-row"><input class="add-input" id="addOprno" type="text" placeholder="新增工位号"><button class="screen-btn primary" id="addBtn">添加</button></div>
-				<div class="action-row"><button class="screen-btn primary" id="queryBtn">查询</button><button class="screen-btn" id="clearBtn">清空</button></div>
-				<div class="tag-list" id="tagList"></div>
-				<div class="hint">支持逗号、空格、换行分隔工位号。</div>
+		<div class="main-grid-wrap" id="mainGrid">
+			<div class="side-config-panel" id="sideConfigPanel">
+				<div class="panel control-panel">
+					<div class="panel-title">工位号</div>
+					<textarea class="oprno-input" id="oprnoInput"></textarea>
+					<div class="input-row">
+						<input class="add-input" id="addOprno" type="text" placeholder="新增工位号">
+						<button type="button" class="screen-btn primary" id="addBtn">添加</button>
+					</div>
+					<div class="action-row">
+						<button type="button" class="screen-btn primary" id="queryBtn">查询</button>
+						<button type="button" class="screen-btn" id="clearBtn">清空</button>
+					</div>
+					<div class="tag-list" id="tagList"></div>
+					<div class="hint">支持逗号、空格、换行分隔工位号。</div>
+				</div>
 			</div>
-			<div class="panel data-panel">
-				<div class="panel-title">各工位加工记录数</div>
+			<button type="button" class="config-fold-trigger" id="panelCollapseBtn" aria-expanded="true" title="收起工位配置">
+				<span class="fold-icon">‹</span>
+				<span class="fold-label">收起</span>
+			</button>
+			<div class="panel data-panel data-panel-main">
+				<div class="panel-title" id="dataPanelTitle">各工位全部生产数量</div>
 				<div class="chart-box" id="recordChart"></div>
-				<div class="table-wrap"><table class="record-table"><thead><tr><th>序号</th><th>工位</th><th>加工记录数</th></tr></thead><tbody id="recordBody"></tbody></table></div>
+				<div class="table-wrap">
+					<table class="record-table">
+						<thead><tr><th>序号</th><th>工位</th><th id="recordCountHeader">全部生产数量</th></tr></thead>
+						<tbody id="recordBody"></tbody>
+					</table>
+				</div>
 			</div>
 		</div>
 	</div>
@@ -42,6 +186,6 @@
 		defaultOprnos: ["OP250", "OP260", "OP270", "OP281", "OP282", "OP283", "OP284", "OP290", "OP300", "OP310"]
 	};
 </script>
-<script src="${ctxStatic}/screen/oprno-record-screen.js"></script>
+<script src="${ctxStatic}/screen/oprno-record-screen.js?v=202506244"></script>
 </body>
 </html>

+ 159 - 15
src/main/resources/views/modules/mes/mesScreen8.html

@@ -5,31 +5,175 @@
 	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 	<meta http-equiv="X-UA-Compatible" content="ie=edge">
 	<title>MES工位加工记录统计大屏</title>
-	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css">
+	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css?v=202506244">
+	<style>
+		.screen-header .header-left-tools {
+			justify-self: start;
+			display: flex;
+			align-items: center;
+		}
+
+		.scope-tab-group {
+			display: inline-flex;
+			padding: 4px;
+			border: 1px solid rgba(0, 143, 253, 0.34);
+			border-radius: 6px;
+			background: rgba(4, 20, 45, 0.78);
+			box-shadow: inset 0 0 24px rgba(0, 143, 253, 0.1);
+		}
+
+		.scope-tab {
+			min-width: 112px;
+			height: 40px;
+			padding: 0 16px;
+			border: none;
+			border-radius: 4px;
+			background: transparent;
+			color: #9ad8ff;
+			font-size: 18px;
+			font-family: inherit;
+			cursor: pointer;
+			transition: color 0.2s, background 0.2s, box-shadow 0.2s;
+		}
+
+		.scope-tab.is-active {
+			color: #fff;
+			background: linear-gradient(180deg, rgba(64, 222, 120, 0.32), rgba(0, 143, 253, 0.24));
+			box-shadow: 0 0 14px rgba(64, 222, 120, 0.22);
+		}
+
+		.scope-tab:not(.is-active):hover {
+			color: #d8f4ff;
+			background: rgba(0, 143, 253, 0.16);
+		}
+
+		.main-grid-wrap {
+			position: relative;
+			display: flex;
+			align-items: stretch;
+			height: 770px;
+			margin-top: 22px;
+		}
+
+		.main-grid-wrap .side-config-panel {
+			width: 470px;
+			flex-shrink: 0;
+			overflow: hidden;
+			transition: width 0.28s ease, opacity 0.28s ease, margin 0.28s ease;
+		}
+
+		.main-grid-wrap.is-folded .side-config-panel {
+			width: 0;
+			opacity: 0;
+			margin-right: 0;
+			pointer-events: none;
+		}
+
+		.config-fold-trigger {
+			position: relative;
+			z-index: 6;
+			flex-shrink: 0;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			width: 24px;
+			margin: 0 10px 0 0;
+			align-self: center;
+			height: 136px;
+			padding: 0;
+			border: 1px solid rgba(0, 246, 255, 0.38);
+			border-radius: 0 6px 6px 0;
+			background: linear-gradient(180deg, rgba(5, 37, 78, 0.96), rgba(5, 25, 54, 0.92));
+			box-shadow: inset 0 0 20px rgba(0, 143, 253, 0.14), 0 0 16px rgba(0, 143, 253, 0.18);
+			cursor: pointer;
+			color: #00f6ff;
+			font-size: 22px;
+			font-family: inherit;
+			line-height: 1;
+		}
+
+		.config-fold-trigger:hover {
+			border-color: rgba(64, 222, 120, 0.55);
+			color: #40de78;
+			box-shadow: inset 0 0 24px rgba(64, 222, 120, 0.12), 0 0 18px rgba(64, 222, 120, 0.2);
+		}
+
+		.config-fold-trigger .fold-icon {
+			display: block;
+			font-size: 28px;
+			font-weight: 700;
+			line-height: 1;
+			transition: transform 0.28s ease;
+		}
+
+		.config-fold-trigger .fold-label {
+			margin-top: 10px;
+			font-size: 14px;
+			writing-mode: vertical-rl;
+			text-orientation: mixed;
+			letter-spacing: 3px;
+		}
+
+		.main-grid-wrap.is-folded .config-fold-trigger .fold-icon {
+			transform: rotate(180deg);
+		}
+
+		.main-grid-wrap .data-panel-main {
+			flex: 1;
+			min-width: 0;
+		}
+	</style>
 </head>
 <body>
 <div class="screen-page">
 	<img class="bg" src="${ctxStatic}/screen/imgs/bg3.png" alt="">
 	<div class="screen-content">
-		<div class="screen-header"><div></div><div class="screen-title-new" id="screenTitle"></div><div class="screen-time" id="screenTime"></div></div>
+		<div class="screen-header">
+			<div class="header-left-tools">
+				<div class="scope-tab-group" id="scopeSwitch">
+					<button type="button" class="scope-tab is-active" data-scope="all">全部产量</button>
+					<button type="button" class="scope-tab" data-scope="today">今日产量</button>
+				</div>
+			</div>
+			<div class="screen-title-new" id="screenTitle"></div>
+			<div class="screen-time" id="screenTime"></div>
+		</div>
 		<div class="summary-row">
 			<div class="summary-item"><div class="summary-label">工位数量</div><div class="summary-value" id="oprnoTotal">0</div></div>
-			<div class="summary-item"><div class="summary-label">加工记录总数</div><div class="summary-value" id="recordTotal">0</div></div>
+			<div class="summary-item"><div class="summary-label" id="recordTotalLabel">全部生产数量</div><div class="summary-value" id="recordTotal">0</div></div>
 			<div class="summary-item"><div class="summary-label">最高工位</div><div class="summary-value" id="maxOprno">--</div></div>
 		</div>
-		<div class="main-grid">
-			<div class="panel control-panel">
-				<div class="panel-title">工位号</div>
-				<textarea class="oprno-input" id="oprnoInput"></textarea>
-				<div class="input-row"><input class="add-input" id="addOprno" type="text" placeholder="新增工位号"><button class="screen-btn primary" id="addBtn">添加</button></div>
-				<div class="action-row"><button class="screen-btn primary" id="queryBtn">查询</button><button class="screen-btn" id="clearBtn">清空</button></div>
-				<div class="tag-list" id="tagList"></div>
-				<div class="hint">支持逗号、空格、换行分隔工位号。</div>
+		<div class="main-grid-wrap" id="mainGrid">
+			<div class="side-config-panel" id="sideConfigPanel">
+				<div class="panel control-panel">
+					<div class="panel-title">工位号</div>
+					<textarea class="oprno-input" id="oprnoInput"></textarea>
+					<div class="input-row">
+						<input class="add-input" id="addOprno" type="text" placeholder="新增工位号">
+						<button type="button" class="screen-btn primary" id="addBtn">添加</button>
+					</div>
+					<div class="action-row">
+						<button type="button" class="screen-btn primary" id="queryBtn">查询</button>
+						<button type="button" class="screen-btn" id="clearBtn">清空</button>
+					</div>
+					<div class="tag-list" id="tagList"></div>
+					<div class="hint">支持逗号、空格、换行分隔工位号。</div>
+				</div>
 			</div>
-			<div class="panel data-panel">
-				<div class="panel-title">各工位加工记录数</div>
+			<button type="button" class="config-fold-trigger" id="panelCollapseBtn" aria-expanded="true" title="收起工位配置">
+				<span class="fold-icon">‹</span>
+				<span class="fold-label">收起</span>
+			</button>
+			<div class="panel data-panel data-panel-main">
+				<div class="panel-title" id="dataPanelTitle">各工位全部生产数量</div>
 				<div class="chart-box" id="recordChart"></div>
-				<div class="table-wrap"><table class="record-table"><thead><tr><th>序号</th><th>工位</th><th>加工记录数</th></tr></thead><tbody id="recordBody"></tbody></table></div>
+				<div class="table-wrap">
+					<table class="record-table">
+						<thead><tr><th>序号</th><th>工位</th><th id="recordCountHeader">全部生产数量</th></tr></thead>
+						<tbody id="recordBody"></tbody>
+					</table>
+				</div>
 			</div>
 		</div>
 	</div>
@@ -42,6 +186,6 @@
 		defaultOprnos: ["OP320", "OP330", "OP340", "OP350", "OP360", "OP370", "OP380", "OP390", "OP400", "OP410"]
 	};
 </script>
-<script src="${ctxStatic}/screen/oprno-record-screen.js"></script>
+<script src="${ctxStatic}/screen/oprno-record-screen.js?v=202506244"></script>
 </body>
 </html>

+ 159 - 15
src/main/resources/views/modules/mes/mesScreen9.html

@@ -5,31 +5,175 @@
 	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 	<meta http-equiv="X-UA-Compatible" content="ie=edge">
 	<title>MES工位加工记录统计大屏</title>
-	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css">
+	<link rel="stylesheet" href="${ctxStatic}/screen/oprno-record-screen.css?v=202506244">
+	<style>
+		.screen-header .header-left-tools {
+			justify-self: start;
+			display: flex;
+			align-items: center;
+		}
+
+		.scope-tab-group {
+			display: inline-flex;
+			padding: 4px;
+			border: 1px solid rgba(0, 143, 253, 0.34);
+			border-radius: 6px;
+			background: rgba(4, 20, 45, 0.78);
+			box-shadow: inset 0 0 24px rgba(0, 143, 253, 0.1);
+		}
+
+		.scope-tab {
+			min-width: 112px;
+			height: 40px;
+			padding: 0 16px;
+			border: none;
+			border-radius: 4px;
+			background: transparent;
+			color: #9ad8ff;
+			font-size: 18px;
+			font-family: inherit;
+			cursor: pointer;
+			transition: color 0.2s, background 0.2s, box-shadow 0.2s;
+		}
+
+		.scope-tab.is-active {
+			color: #fff;
+			background: linear-gradient(180deg, rgba(64, 222, 120, 0.32), rgba(0, 143, 253, 0.24));
+			box-shadow: 0 0 14px rgba(64, 222, 120, 0.22);
+		}
+
+		.scope-tab:not(.is-active):hover {
+			color: #d8f4ff;
+			background: rgba(0, 143, 253, 0.16);
+		}
+
+		.main-grid-wrap {
+			position: relative;
+			display: flex;
+			align-items: stretch;
+			height: 770px;
+			margin-top: 22px;
+		}
+
+		.main-grid-wrap .side-config-panel {
+			width: 470px;
+			flex-shrink: 0;
+			overflow: hidden;
+			transition: width 0.28s ease, opacity 0.28s ease, margin 0.28s ease;
+		}
+
+		.main-grid-wrap.is-folded .side-config-panel {
+			width: 0;
+			opacity: 0;
+			margin-right: 0;
+			pointer-events: none;
+		}
+
+		.config-fold-trigger {
+			position: relative;
+			z-index: 6;
+			flex-shrink: 0;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			width: 24px;
+			margin: 0 10px 0 0;
+			align-self: center;
+			height: 136px;
+			padding: 0;
+			border: 1px solid rgba(0, 246, 255, 0.38);
+			border-radius: 0 6px 6px 0;
+			background: linear-gradient(180deg, rgba(5, 37, 78, 0.96), rgba(5, 25, 54, 0.92));
+			box-shadow: inset 0 0 20px rgba(0, 143, 253, 0.14), 0 0 16px rgba(0, 143, 253, 0.18);
+			cursor: pointer;
+			color: #00f6ff;
+			font-size: 22px;
+			font-family: inherit;
+			line-height: 1;
+		}
+
+		.config-fold-trigger:hover {
+			border-color: rgba(64, 222, 120, 0.55);
+			color: #40de78;
+			box-shadow: inset 0 0 24px rgba(64, 222, 120, 0.12), 0 0 18px rgba(64, 222, 120, 0.2);
+		}
+
+		.config-fold-trigger .fold-icon {
+			display: block;
+			font-size: 28px;
+			font-weight: 700;
+			line-height: 1;
+			transition: transform 0.28s ease;
+		}
+
+		.config-fold-trigger .fold-label {
+			margin-top: 10px;
+			font-size: 14px;
+			writing-mode: vertical-rl;
+			text-orientation: mixed;
+			letter-spacing: 3px;
+		}
+
+		.main-grid-wrap.is-folded .config-fold-trigger .fold-icon {
+			transform: rotate(180deg);
+		}
+
+		.main-grid-wrap .data-panel-main {
+			flex: 1;
+			min-width: 0;
+		}
+	</style>
 </head>
 <body>
 <div class="screen-page">
 	<img class="bg" src="${ctxStatic}/screen/imgs/bg3.png" alt="">
 	<div class="screen-content">
-		<div class="screen-header"><div></div><div class="screen-title-new" id="screenTitle"></div><div class="screen-time" id="screenTime"></div></div>
+		<div class="screen-header">
+			<div class="header-left-tools">
+				<div class="scope-tab-group" id="scopeSwitch">
+					<button type="button" class="scope-tab is-active" data-scope="all">全部产量</button>
+					<button type="button" class="scope-tab" data-scope="today">今日产量</button>
+				</div>
+			</div>
+			<div class="screen-title-new" id="screenTitle"></div>
+			<div class="screen-time" id="screenTime"></div>
+		</div>
 		<div class="summary-row">
 			<div class="summary-item"><div class="summary-label">工位数量</div><div class="summary-value" id="oprnoTotal">0</div></div>
-			<div class="summary-item"><div class="summary-label">加工记录总数</div><div class="summary-value" id="recordTotal">0</div></div>
+			<div class="summary-item"><div class="summary-label" id="recordTotalLabel">全部生产数量</div><div class="summary-value" id="recordTotal">0</div></div>
 			<div class="summary-item"><div class="summary-label">最高工位</div><div class="summary-value" id="maxOprno">--</div></div>
 		</div>
-		<div class="main-grid">
-			<div class="panel control-panel">
-				<div class="panel-title">工位号</div>
-				<textarea class="oprno-input" id="oprnoInput"></textarea>
-				<div class="input-row"><input class="add-input" id="addOprno" type="text" placeholder="新增工位号"><button class="screen-btn primary" id="addBtn">添加</button></div>
-				<div class="action-row"><button class="screen-btn primary" id="queryBtn">查询</button><button class="screen-btn" id="clearBtn">清空</button></div>
-				<div class="tag-list" id="tagList"></div>
-				<div class="hint">支持逗号、空格、换行分隔工位号。</div>
+		<div class="main-grid-wrap" id="mainGrid">
+			<div class="side-config-panel" id="sideConfigPanel">
+				<div class="panel control-panel">
+					<div class="panel-title">工位号</div>
+					<textarea class="oprno-input" id="oprnoInput"></textarea>
+					<div class="input-row">
+						<input class="add-input" id="addOprno" type="text" placeholder="新增工位号">
+						<button type="button" class="screen-btn primary" id="addBtn">添加</button>
+					</div>
+					<div class="action-row">
+						<button type="button" class="screen-btn primary" id="queryBtn">查询</button>
+						<button type="button" class="screen-btn" id="clearBtn">清空</button>
+					</div>
+					<div class="tag-list" id="tagList"></div>
+					<div class="hint">支持逗号、空格、换行分隔工位号。</div>
+				</div>
 			</div>
-			<div class="panel data-panel">
-				<div class="panel-title">各工位加工记录数</div>
+			<button type="button" class="config-fold-trigger" id="panelCollapseBtn" aria-expanded="true" title="收起工位配置">
+				<span class="fold-icon">‹</span>
+				<span class="fold-label">收起</span>
+			</button>
+			<div class="panel data-panel data-panel-main">
+				<div class="panel-title" id="dataPanelTitle">各工位全部生产数量</div>
 				<div class="chart-box" id="recordChart"></div>
-				<div class="table-wrap"><table class="record-table"><thead><tr><th>序号</th><th>工位</th><th>加工记录数</th></tr></thead><tbody id="recordBody"></tbody></table></div>
+				<div class="table-wrap">
+					<table class="record-table">
+						<thead><tr><th>序号</th><th>工位</th><th id="recordCountHeader">全部生产数量</th></tr></thead>
+						<tbody id="recordBody"></tbody>
+					</table>
+				</div>
 			</div>
 		</div>
 	</div>
@@ -42,6 +186,6 @@
 		defaultOprnos: ["OP420", "OP430", "OP440", "OP450", "OP460", "OP470", "OP480", "OP490", "OP320A"]
 	};
 </script>
-<script src="${ctxStatic}/screen/oprno-record-screen.js"></script>
+<script src="${ctxStatic}/screen/oprno-record-screen.js?v=202506244"></script>
 </body>
 </html>

+ 0 - 3
src/main/webapp/WEB-INF/classes/META-INF/MANIFEST.MF

@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.jeesite.modules.Application
-

二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/Application.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/Modbus.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/S7.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/Test.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/config/BaseConfig.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/config/WebConfig.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/interceptor/SiteClosedInterceptor.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesAppDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesApplyDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesApprovalDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesApprovalNodeDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesBatchSnDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCcdInspectionDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCheckDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCheckFormDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCheckItemsDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCheckItemsFailDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesCustomerDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceAlarmDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceCateDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceCheckDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceClientDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceConsumableDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceConsumableRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceFormDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceLogDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDevicePreventDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDevicePreventFormDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDevicePreventTaskDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceStateDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceTaskDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceTaskFormDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceTaskUserDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceTimeDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDeviceUrgencyDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDocumentCateDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesDocumentDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesElectricTorqueDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesElectricTorqueInfoDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGlueDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGlueRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGp12RecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGroupDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGroupOprnoDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesGroupUserDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesHwdgTimeDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesIconsDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesIpqcDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesIqcDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesJbLogDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLineDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLineProcessDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLineProcessMaterialDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLineProcessUserDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLogDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesLogUselessDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialBfRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialBfRecordItemsDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialBlpRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCheckDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCheckItemsDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCheckRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCheckRecordItemsDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialCkLogDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialKcLogDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialKwDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialLlRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialLlRecordItemsDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialPrebindDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialReportDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialRkLogDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialRkRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialRkRecordItemsDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialThRecordDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesMaterialThRecordItemsDao.class


二進制
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesNgDao.class


+ 0 - 0
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesPeriodicMaintenanceDao.class


部分文件因文件數量過多而無法顯示