refactor: 应用Tab整体并入工具Tab(应用管理/设备已装应用成为工具子分栏),移除独立应用导航
This commit is contained in:
@@ -281,23 +281,22 @@ function showTab(name){
|
||||
document.querySelectorAll('.tab-panel').forEach(p=>p.classList.remove('active'));
|
||||
document.querySelectorAll('.navbar .tab').forEach(t=>t.classList.remove('active'));
|
||||
document.getElementById('tab-'+name).classList.add('active');
|
||||
document.querySelectorAll('.navbar .tab')[['monitor','tasks','apps','groups','logs','users','maintenance','tools'].indexOf(name)].classList.add('active');
|
||||
document.querySelectorAll('.navbar .tab')[['monitor','tasks','groups','logs','users','maintenance','tools'].indexOf(name)].classList.add('active');
|
||||
// 停止所有定时器
|
||||
if(_monitorTimer){clearInterval(_monitorTimer);_monitorTimer=null;}
|
||||
if(_logTimer){clearInterval(_logTimer);_logTimer=null;}
|
||||
// 按需加载数据
|
||||
if(name==='monitor'){loadMonitor();_monitorTimer=setInterval(loadMonitor,5000);}
|
||||
if(name==='tasks'){showSubTab('tasks',_activeSubs.tasks);loadTasks();loadCustomActions();}
|
||||
if(name==='apps'){showSubTab('apps',_activeSubs.apps);loadApks();}
|
||||
if(name==='tools'){showSubTab('tools',_activeSubs.tools);loadToolsDevices();loadAdbDevices();loadTailscaleDevices();}
|
||||
if(name==='tools'){showSubTab('tools',_activeSubs.tools);loadToolsDevices();loadAdbDevices();loadTailscaleDevices();loadApks();}
|
||||
if(name==='groups')loadGroups();
|
||||
if(name==='logs'){loadLogs();if(document.getElementById('log-auto').checked)_logTimer=setInterval(loadLogs,3000);}
|
||||
if(name==='users')loadUsers();
|
||||
}
|
||||
|
||||
// ================== 页内子分栏(任务/应用/工具 通用) ==================
|
||||
// ================== 页内子分栏(任务/工具 通用) ==================
|
||||
// 每个带子分栏的 Tab 记住上次选中的子分栏,切走再切回来保持原位
|
||||
let _activeSubs = {tasks: 'plan', apps: 'apks', tools: 'clipboard'};
|
||||
let _activeSubs = {tasks: 'plan', tools: 'clipboard'};
|
||||
|
||||
function showSubTab(tabId, name){
|
||||
_activeSubs[tabId] = name;
|
||||
|
||||
@@ -286,7 +286,6 @@ select.form-control{cursor:pointer}
|
||||
<div class="tabs">
|
||||
<button class="tab active" onclick="showTab('monitor')">监控</button>
|
||||
<button class="tab" onclick="showTab('tasks')">任务</button>
|
||||
<button class="tab" onclick="showTab('apps')" data-perm="apks">应用</button>
|
||||
<button class="tab" onclick="showTab('groups')">分组</button>
|
||||
<button class="tab" onclick="showTab('logs')" data-perm="logs">日志</button>
|
||||
<button class="tab" onclick="showTab('users')" data-perm="admin">用户</button>
|
||||
@@ -393,60 +392,6 @@ select.form-control{cursor:pointer}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ========== Tab: 应用 ========== -->
|
||||
<div id="tab-apps" class="tab-panel">
|
||||
<div class="page-title">应用</div>
|
||||
<div class="page-sub">APK 上传安装与设备已装应用查看</div>
|
||||
|
||||
<div class="sub-tabs">
|
||||
<button class="sub-tab active" data-sub="apks" onclick="showSubTab('apps','apks')">应用管理</button>
|
||||
<button class="sub-tab" data-sub="devapps" onclick="showSubTab('apps','devapps')">设备已装应用</button>
|
||||
</div>
|
||||
|
||||
<!-- 子分栏 1:应用管理 -->
|
||||
<div class="sub-panel active" id="apps-sub-apks">
|
||||
<div class="toolbar">
|
||||
<label class="btn btn-primary" style="cursor:pointer;margin-bottom:0">
|
||||
上传APK
|
||||
<input type="file" accept=".apk" style="display:none" onchange="uploadApk(this)">
|
||||
</label>
|
||||
<button class="btn" onclick="loadApks()">刷新</button>
|
||||
<input class="form-control list-search" id="search-apks" placeholder="搜索应用名/包名...">
|
||||
<span class="hint" id="apk-hint"></span>
|
||||
</div>
|
||||
<table class="table">
|
||||
<thead><tr>
|
||||
<th>应用名</th><th>包名</th><th>版本</th><th>大小</th><th>上传时间</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody id="tb-apks"></tbody>
|
||||
</table>
|
||||
<div class="list-pager" id="pager-apks"></div>
|
||||
</div>
|
||||
|
||||
<!-- 子分栏 2:设备已装应用 -->
|
||||
<div class="sub-panel" id="apps-sub-devapps">
|
||||
<div class="toolbar">
|
||||
<select id="apps-device" class="form-control" style="width:280px;display:inline-block">
|
||||
<option value="">选择设备...</option>
|
||||
</select>
|
||||
<button class="btn btn-primary" onclick="loadDeviceApps()">查看应用</button>
|
||||
<input class="form-control list-search" id="search-devapps" placeholder="搜索包名/路径...">
|
||||
<span class="hint" id="apps-hint"></span>
|
||||
</div>
|
||||
<div style="max-height:420px;overflow:auto;border:1px solid var(--border);border-radius:8px">
|
||||
<table class="table" style="margin:0">
|
||||
<thead><tr>
|
||||
<th>应用</th><th>版本号</th><th>versionCode</th><th>APK 路径</th>
|
||||
</tr></thead>
|
||||
<tbody id="tb-device-apps">
|
||||
<tr><td colspan="4" class="empty">选择设备后点击"查看应用"</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="list-pager" id="pager-devapps"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ========== Tab 3: 分组 ========== -->
|
||||
<div id="tab-groups" class="tab-panel">
|
||||
<div class="page-title">设备分组管理</div>
|
||||
@@ -525,12 +470,14 @@ select.form-control{cursor:pointer}
|
||||
<!-- ========== Tab 8: 工具(仅管理员) ========== -->
|
||||
<div id="tab-tools" class="tab-panel">
|
||||
<div class="page-title">工具</div>
|
||||
<div class="page-sub">管理员专用:常用设备工具集合</div>
|
||||
<div class="page-sub">管理员专用:设备工具与应用管理集合</div>
|
||||
|
||||
<div class="sub-tabs">
|
||||
<button class="sub-tab active" data-sub="clipboard" onclick="showSubTab('tools','clipboard')">剪贴板注入</button>
|
||||
<button class="sub-tab" data-sub="adb" onclick="showSubTab('tools','adb')">adb 远程终端</button>
|
||||
<button class="sub-tab" data-sub="ts" onclick="showSubTab('tools','ts')">Tailscale 管理</button>
|
||||
<button class="sub-tab" data-sub="apks" onclick="showSubTab('tools','apks')">应用管理</button>
|
||||
<button class="sub-tab" data-sub="devapps" onclick="showSubTab('tools','devapps')">设备已装应用</button>
|
||||
</div>
|
||||
|
||||
<!-- 子分栏 1:剪贴板注入 -->
|
||||
@@ -619,6 +566,49 @@ select.form-control{cursor:pointer}
|
||||
<div class="list-pager" id="pager-tailscale"></div>
|
||||
<div class="help">"设置IP"可修改设备 IPv4(会断开当前连接,平台 serial 随之变化,需同步 STF 设备池);"密钥不过期"= 关闭设备密钥验证,设备不会被定期踢下线;auth key 生成后只显示一次,请立即复制。</div>
|
||||
</div>
|
||||
|
||||
<!-- 子分栏 4:应用管理 -->
|
||||
<div class="sub-panel" id="tools-sub-apks">
|
||||
<div class="toolbar">
|
||||
<label class="btn btn-primary" style="cursor:pointer;margin-bottom:0">
|
||||
上传APK
|
||||
<input type="file" accept=".apk" style="display:none" onchange="uploadApk(this)">
|
||||
</label>
|
||||
<button class="btn" onclick="loadApks()">刷新</button>
|
||||
<input class="form-control list-search" id="search-apks" placeholder="搜索应用名/包名...">
|
||||
<span class="hint" id="apk-hint"></span>
|
||||
</div>
|
||||
<table class="table">
|
||||
<thead><tr>
|
||||
<th>应用名</th><th>包名</th><th>版本</th><th>大小</th><th>上传时间</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody id="tb-apks"></tbody>
|
||||
</table>
|
||||
<div class="list-pager" id="pager-apks"></div>
|
||||
</div>
|
||||
|
||||
<!-- 子分栏 5:设备已装应用 -->
|
||||
<div class="sub-panel" id="tools-sub-devapps">
|
||||
<div class="toolbar">
|
||||
<select id="apps-device" class="form-control" style="width:280px;display:inline-block">
|
||||
<option value="">选择设备...</option>
|
||||
</select>
|
||||
<button class="btn btn-primary" onclick="loadDeviceApps()">查看应用</button>
|
||||
<input class="form-control list-search" id="search-devapps" placeholder="搜索包名/路径...">
|
||||
<span class="hint" id="apps-hint"></span>
|
||||
</div>
|
||||
<div style="max-height:420px;overflow:auto;border:1px solid var(--border);border-radius:8px">
|
||||
<table class="table" style="margin:0">
|
||||
<thead><tr>
|
||||
<th>应用</th><th>版本号</th><th>versionCode</th><th>APK 路径</th>
|
||||
</tr></thead>
|
||||
<tbody id="tb-device-apps">
|
||||
<tr><td colspan="4" class="empty">选择设备后点击"查看应用"</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="list-pager" id="pager-devapps"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- /.content -->
|
||||
|
||||
Reference in New Issue
Block a user