Files
MeowOS-For-R3P2/patch_v2/meowpanel/web/index.html
T
AskaEth a2aec783a7 feat(ui): M6.38批 — P1 MD3细化(SDK对话框28)+批②底部上滑回桌面+批6 ncm顶栏回播放页+批④面板后台列表+launcher UI微调(歌词页黑半透明底/播放页布局下移)+封面空artwork保留修复
- P1: meow_ui_dialog.c 对话框底框 radius_card→MEOW_SHAPE_EXTRA_LARGE(28) 三处(:103填充/:104描边/:361 BottomSheet); meow_ui_widgets.h 新增 MEOW_SHAPE_EXTRA_LARGE 28 宏; TextField/FAB/Slider/Progress 按设计文档保留
- 批②: np_gesture.h 新增 NP_GEST_HOME+np_home_gesture(底部热区上滑,与左缘返回对称互斥); now_playing.c 新增 np_draw_home_bar(屏底左缘pill指示条)+手势衔接; test_now_playing_widgets G5b
- 批6: ncm home.c 顶栏加回播放页按钮(MEOW_ICON_QUEUE_MUSIC)→push(ACT_PLAYER), 无音频也生效
- 批④: meowpanel /api/ams/bg 只读端点+前端后台列表页+杀/清复用kill通道
- UI微调: now_playing.c 播放页布局宏下移(NP_COVER_Y 84/NP_BTN_Y 612消底部留白)+歌词页背景统一黑色半透明叠层(弃封面取色底,删 np_draw_lyric_coverbg)
- 封面保留: now_playing.c/notif_center.c 空artwork保留上一张已解码封面(防暂停/开歌单致META报空artwork后封面闪没); test_np_cover C2断言更新+mirror同步

0warning;宿主测试 test_np_cover ALL PASS;launcher/ncm/panel 宿主测试无回归。二进制留批量批次未入库
2026-09-04 13:09:03 +08:00

181 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN" data-style="md3" data-mode="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<meta name="color-scheme" content="dark light">
<title>MeowPanel · MeowOS 面板</title>
<link rel="stylesheet" href="meowpanel.css">
</head>
<body>
<!-- 顶部横幅:后端未连接 / 网络错误 -->
<div id="offline-banner" class="offline-banner" hidden>⚠️ 后端未连接 — 请确认设备上的 MeowPanel 后端已启动(<code>http://&lt;host&gt;.local:8080</code>)</div>
<div id="app" class="app">
<!-- 左侧导航(宝塔式) -->
<aside class="sidebar" id="sidebar">
<div class="brand">
<span class="brand-mark">M</span>
<span class="brand-name">MeowPanel</span>
</div>
<nav class="nav" id="nav">
<button class="nav-item" data-route="home" title="首页仪表盘(系统总览)">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M3 11.5 12 4l9 7.5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M5.5 10.5V20h13v-9.5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M9.5 20v-5h5v5" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/></svg></span>
<span class="nav-label">首页</span>
</button>
<button class="nav-item" data-route="perf" title="实时性能">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M3 13h4l2-5 3 9 2-4h5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
<span class="nav-label">性能</span>
</button>
<button class="nav-item" data-route="bright" title="亮度 / 音量">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="12" r="4" fill="none" stroke="currentColor" stroke-width="2"/></svg></span>
<span class="nav-label">亮度·音量</span>
</button>
<button class="nav-item" data-route="audio" title="音频服务状态(meow_audiod)">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M4 10v4h3l5 4V6l-5 4H4z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><path d="M15.5 9.5a3.5 3.5 0 0 1 0 5M18 7a7 7 0 0 1 0 10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></span>
<span class="nav-label">音频</span>
</button>
<button class="nav-item" data-route="power" title="电源 / 功耗(meow_powermgr)">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M13 2 4 14h6l-1 8 9-12h-6z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/></svg></span>
<span class="nav-label">电源</span>
</button>
<button class="nav-item" data-route="net" title="网络管理(meow_netmgrd)">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M2.5 9a15 15 0 0 1 19 0M5.5 12.5a10 10 0 0 1 13 0M8.5 16a5 5 0 0 1 7 0" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="19" r="1.4" fill="currentColor"/></svg></span>
<span class="nav-label">网络</span>
</button>
<button class="nav-item" data-route="files" title="文件管理">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/></svg></span>
<span class="nav-label">文件</span>
</button>
<button class="nav-item" data-route="apps" title="MeowAPPs 管理">
<span class="nav-ico"><svg viewBox="0 0 24 24"><rect x="4" y="4" width="7" height="7" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><rect x="13" y="4" width="7" height="7" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><rect x="4" y="13" width="7" height="7" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><rect x="13" y="13" width="7" height="7" rx="4" fill="none" stroke="currentColor" stroke-width="2"/></svg></span>
<span class="nav-label">应用</span>
</button>
<button class="nav-item" data-route="fonts" title="字体库管理">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M5 18L10 5h1.4L16.5 18h-2.2l-1.2-3.2H8.3L7.1 18H5zm4-5h3.4l-1.7-4.7L9 13z" fill="currentColor"/><path d="M17 19h4v1.6h-4z" fill="currentColor"/></svg></span>
<span class="nav-label">字体</span>
</button>
<button class="nav-item" data-route="settings" title="设置镜像">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M4 6h16M4 12h16M4 18h16" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="9" cy="6" r="2" fill="var(--bg)"/><circle cx="15" cy="12" r="2" fill="var(--bg)"/><circle cx="7" cy="18" r="2" fill="var(--bg)"/></svg></span>
<span class="nav-label">设置</span>
</button>
<button class="nav-item" data-route="screen" title="屏幕 · 遥控(实时画面 + 遥控器)">
<span class="nav-ico"><svg viewBox="0 0 24 24"><rect x="3" y="5" width="14" height="11" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><path d="M7 21h6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="7.5" cy="10.5" r="1.1" fill="currentColor"/><path d="M10 10.5l3 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" transform="rotate(-45 11.5 12)"/><rect x="18" y="4" width="4.5" height="4.5" rx="1" fill="none" stroke="currentColor" stroke-width="1.8"/><rect x="18" y="11" width="4.5" height="4.5" rx="1" fill="none" stroke="currentColor" stroke-width="1.8"/><rect x="18" y="18" width="4.5" height="2.5" rx="1" fill="currentColor"/></svg></span>
<span class="nav-label">屏幕·遥控</span>
</button>
<button class="nav-item" data-route="proc" title="进程 / 服务(meow_svcd + meow_amsd)">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M4 6h16M4 12h16M4 18h16" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="9" cy="6" r="2.2" fill="var(--bg)"/><circle cx="15" cy="12" r="2.2" fill="var(--bg)"/><circle cx="7" cy="18" r="2.2" fill="var(--bg)"/></svg></span>
<span class="nav-label">进程·服务</span>
</button>
<button class="nav-item" data-route="bg" title="后台活动(App 后台常驻:CPU/内存占用 + 一键清后台)">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M12 3 3 8l9 5 9-5-9-5z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><path d="M3 12l9 5 9-5" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><path d="M3 16l9 5 9-5" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/></svg></span>
<span class="nav-label">后台</span>
</button>
<button class="nav-item" data-route="system" title="系统信息 / 升级">
<span class="nav-ico"><svg viewBox="0 0 24 24"><rect x="6" y="3" width="12" height="18" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><path d="M9 8h6M9 12h6M9 16h3" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></span>
<span class="nav-label">系统</span>
</button>
<button class="nav-item" data-route="logs" title="系统日志">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M5 4h14v16l-2-2-2 2-2-2-2 2-2-2-2 2z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><path d="M8 9h8M8 13h5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></span>
<span class="nav-label">日志</span>
</button>
<button class="nav-item" data-route="notif" title="通知中心">
<span class="nav-ico"><svg viewBox="0 0 24 24"><path d="M6 9a6 6 0 0 1 12 0v4l2 3H4l2-3z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><path d="M10 20a2 2 0 0 0 4 0" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></span>
<span class="nav-label">通知</span>
</button>
</nav>
</aside>
<!-- 右侧:顶栏 + 内容 -->
<div class="main">
<header class="topbar">
<button class="icon-btn menu-btn" id="menu-btn" title="展开/收起导航" aria-label="菜单">
<svg viewBox="0 0 24 24"><path d="M4 6h16M4 12h16M4 18h16" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>
</button>
<h1 class="topbar-title" id="page-title">首页仪表盘</h1>
<div class="topbar-actions">
<button class="btn topbar-btn" id="bg-clear" hidden>一键清后台</button>
<span class="conn" id="conn-dot" data-state="unknown" title="后端连接">
<span class="conn-dot"></span><span class="conn-text" id="conn-text">检测中…</span>
</span>
<div class="seg" id="style-seg" title="风格">
<button class="seg-btn" data-style="md3">MD3</button>
<button class="seg-btn" data-style="miuix">MIUIx</button>
</div>
<div class="seg" id="theme-seg" title="明暗">
<button class="seg-btn" data-mode="dark">深色</button>
<button class="seg-btn" data-mode="light">浅色</button>
</div>
</div>
</header>
<main class="content" id="content">
<p class="placeholder">加载中…</p>
</main>
</div>
</div>
<!-- 通用确认弹窗 -->
<div id="modal" class="modal-scrim" hidden>
<div class="modal">
<h2 class="modal-title" id="modal-title">确认</h2>
<p class="modal-body" id="modal-body"></p>
<div class="modal-actions">
<button class="btn" id="modal-no">取消</button>
<button class="btn btn-primary btn-danger" id="modal-yes">确定</button>
</div>
</div>
</div>
<!-- 登录 / 首次设置 PIN(访问级 PIN 鉴权;访问面板即需登录) -->
<div id="login" class="login-scrim" hidden>
<div class="login-box">
<div class="login-brand"><span class="login-brand-mark">M</span><span>MeowPanel</span></div>
<p class="login-sub" id="login-sub">此面板已开启访问鉴权,请输入 4 位 PIN。</p>
<input type="password" id="login-pin" class="login-input" placeholder="4 位 PIN" inputmode="numeric" autocomplete="off" maxlength="4">
<input type="password" id="login-pin2" class="login-input" placeholder="再次输入 PIN" inputmode="numeric" autocomplete="off" maxlength="4" hidden>
<p class="login-err" id="login-err" hidden></p>
<button class="btn btn-primary login-btn" id="login-btn">登 录</button>
</div>
</div>
<!-- 设置面板密码对话框 -->
<div id="pwdlg" class="modal-scrim" hidden>
<div class="modal">
<h2 class="modal-title" id="pwdlg-title">设置面板密码</h2>
<p class="modal-body" id="pwdlg-body">请输入新密码(留空则清除密码)。</p>
<input type="password" id="pwdlg-input" class="login-input" placeholder="新密码" autocomplete="new-password">
<div class="modal-actions">
<button class="btn" id="pwdlg-cancel">取消</button>
<button class="btn btn-primary" id="pwdlg-ok">确定</button>
</div>
</div>
</div>
<!-- 修改 / 清空面板 PIN 对话框(设置页「面板 PIN」卡) -->
<div id="pindlg" class="modal-scrim" hidden>
<div class="modal">
<h2 class="modal-title" id="pindlg-title">修改 PIN</h2>
<p class="modal-body" id="pindlg-body"></p>
<input type="password" id="pindlg-old" class="login-input" placeholder="当前 PIN" inputmode="numeric" autocomplete="off" maxlength="4" hidden>
<input type="password" id="pindlg-new" class="login-input" placeholder="新 4 位 PIN" inputmode="numeric" autocomplete="off" maxlength="4" hidden>
<input type="password" id="pindlg-new2" class="login-input" placeholder="再次输入新 PIN" inputmode="numeric" autocomplete="off" maxlength="4" hidden>
<p class="login-err" id="pindlg-err" hidden></p>
<div class="modal-actions">
<button class="btn" id="pindlg-cancel">取消</button>
<button class="btn btn-primary" id="pindlg-ok">确定</button>
</div>
</div>
</div>
<div id="toast" class="toast" hidden></div>
<!-- 前端模块化拆分(共享框架 → 各页渲染 → 入口路由),按顺序加载 -->
<script src="mp_shared.js"></script>
<script src="mp_pages.js"></script>
<script src="meowpanel.js"></script>
</body>
</html>