wangxichen 6 timmar sedan
förälder
incheckning
81e8d9eea3

+ 2 - 5
src/main/resources/views/modules/mesclient/mesClientVersionForm.html

@@ -15,11 +15,8 @@ $("#inputForm").validate({submitHandler:function(form){
     js.ajaxSubmitForm($(form),function(data){
         js.showMessage(data.message);
         if(data.result==Global.TRUE){
-            // 如果是被 layer 弹窗打开的,关闭 layer;否则关闭 tab
-            try{
-                var idx = parent.layer.getFrameIndex(window.name);
-                if(idx !== undefined && idx !== null){ parent.layer.close(idx); return; }
-            }catch(e){}
+            // 通知列表页刷新(跨 iframe / 跨 tab 均可)
+            try{ localStorage.setItem('mesClientVersion.reload', Date.now()); }catch(e){}
             js.closeCurrentTabPage();
         }
     },"json");

+ 17 - 17
src/main/resources/views/modules/mesclient/mesClientVersionList.html

@@ -1,7 +1,7 @@
 <% layout('/layouts/default.html', {title: '通用客户端版本管理', libs: ['dataGrid']}){ %>
 <div class="main-content"><div class="box box-main">
 <div class="box-header"><div class="box-title"><i class="fa icon-notebook"></i> 通用客户端版本管理</div><div class="box-tools pull-right">
-<% if(hasPermi('mes:clientVersion:edit')){ %><a href="javascript:openVersionForm()" class="btn btn-default btnTool"><i class="fa fa-plus"></i> 新增版本</a><% } %>
+<% if(hasPermi('mes:clientVersion:edit')){ %><a href="${ctx}/mes/clientVersion/form" class="btn btn-default btnTool"><i class="fa fa-plus"></i> 新增版本</a><% } %>
 <a href="#" class="btn btn-default" id="btnSetting"><i class="fa fa-navicon"></i></a></div></div>
 <div class="box-body">
 <ul class="nav nav-tabs" role="tablist">
@@ -20,6 +20,10 @@
     <table id="dataGrid"></table><div id="dataGridPage"></div>
 </div>
 <div id="runtimePanel" class="tab-pane">
+    <div style="margin-bottom:8px">
+        <button type="button" class="btn btn-sm btn-primary" onclick="$('#runtimeGrid').trigger('reloadGrid')"><i class="fa fa-refresh"></i> 刷新</button>
+        <span style="color:#888;margin-left:8px;font-size:12px">列表每次切到本页也会自动刷新</span>
+    </div>
     <table id="runtimeGrid"></table><div id="runtimeGridPage"></div>
 </div>
 </div></div></div></div>
@@ -33,34 +37,32 @@ $('#dataGrid').dataGrid({
     searchForm: $('#searchForm'),
     columnModel: [
         {header:'客户端类型', name:'clientType', width:120, formatter:function(v){return clientTypeName(v);}},
-        {header:'版本号', name:'ver', width:90, formatter:function(v,o,row){return '<a href="javascript:openVersionForm(\''+row.id+'\')" class="btnList">'+(v||row.id)+'</a>';}},
+        {header:'版本号', name:'ver', width:90, formatter:function(v,o,row){return '<a href="${ctx}/mes/clientVersion/form?id='+row.id+'" class="btnList">'+(v||row.id)+'</a>';}},
         {header:'更新内容', name:'content', width:250},
         {header:'状态', name:'state', width:80, formatter:function(v){return js.getDictLabel(${@DictUtils.getDictListJson('mes_app_status')},v,'未知',true);}},
         {header:'更新时间', name:'updateDate', width:150},
-        {header:'操作', name:'actions', width:100, formatter:function(v,o,row){return '<a href="javascript:openVersionForm(\''+row.id+'\')" class="btnList"><i class="fa fa-pencil"></i> 编辑</a>';}}
+        {header:'操作', name:'actions', width:100, formatter:function(v,o,row){return '<a href="${ctx}/mes/clientVersion/form?id='+row.id+'" class="btnList"><i class="fa fa-pencil"></i> 编辑</a>';}}
     ]
 });
 
-// 用 layer 弹窗打开版本表单,保存后自动刷新 grid(替代原 tab 打开)
-function openVersionForm(id){
-    var url = '${ctx}/mes/clientVersion/form' + (id ? '?id='+id : '');
-    top.layer.open({
-        type: 2, title: id ? '编辑版本' : '新增版本',
-        area: ['680px', '560px'], content: url,
-        end: function(){ $('#dataGrid').trigger('reloadGrid'); }
-    });
-}
+// 表单页保存后通过 localStorage 通知列表刷新
+window.addEventListener('storage', function(e){
+    if(e.key === 'mesClientVersion.reload') $('#dataGrid').trigger('reloadGrid');
+});
 
 // —— 客户端监控 grid ——
+function pad2(n){return (n<10?'0':'')+n;}
 function heartbeatCell(v){
     if(!v) return '<span class="label label-default">未知</span>';
-    var t = new Date(v.replace(' ','T')).getTime();
+    var t = new Date(String(v).replace(' ','T')).getTime();
     if(isNaN(t)) return '<span class="label label-default">'+v+'</span>';
     var gap = (Date.now()-t)/1000, lab;
     if(gap<60) lab='<span class="label label-success">在线</span>';
     else if(gap<180) lab='<span class="label label-warning">疑似离线</span>';
     else lab='<span class="label label-default">离线</span>';
-    return lab + ' <span style="color:#888">'+v+'</span>';
+    var d = new Date(t);
+    var short = pad2(d.getMonth()+1)+'-'+pad2(d.getDate())+' '+pad2(d.getHours())+':'+pad2(d.getMinutes());
+    return lab + ' <span style="color:#888">'+short+'</span>';
 }
 
 $('#runtimeGrid').dataGrid({
@@ -73,9 +75,7 @@ $('#runtimeGrid').dataGrid({
         {header:'IP', name:'hostIp', width:140},
         {header:'JAR版本', name:'jarVersion', width:90},
         {header:'配置版本', name:'configVersion', width:90},
-        {header:'心跳/在线', name:'lastHeartbeat', width:260, formatter:function(v){return heartbeatCell(v);}},
-        {header:'目标JAR', name:'desiredJarVersion', width:90},
-        {header:'目标配置', name:'desiredConfigVersion', width:90},
+        {header:'心跳/在线', name:'lastHeartbeat', width:200, formatter:function(v){return heartbeatCell(v);}},
         {header:'操作', name:'actions', width:130, formatter:function(v,o,row){return '<a href="javascript:openRuntimeDialog(\''+row.id+'\')" class="btn btn-xs btn-primary"><i class="fa fa-cog"></i> 配置/升级</a>';}}
     ]
 });