Files
fj/index.html
T
selfreleaseandDevin 490f032d60 feat: 隐藏后台面板 + /api/stats 运行统计
- 连点页脚提示 6 次唤出管理面板:本机偏好/播放状态 + 服务器统计
- server.py 新增 GET /api/stats:运行时长、访客 IP(X-Forwarded-For
  末位取真实 IP 防伪造)、TTS 请求与缓存命中率、缓存体积、经典数
- 计数为进程内存统计,重启清零

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-05 13:19:59 +08:00

122 lines
6.2 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">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#f6f1e6">
<meta name="description" content="心经、金刚经、阿弥陀经、普门品、道德经、清静经、太上感应篇诵读——千问语音合成,晨钟暮鼓配乐,逐段跟读高亮。">
<title>心经</title>
<link rel="icon" type="image/svg+xml" href="icon.svg">
<link rel="apple-touch-icon" href="icon-180.png">
<link rel="manifest" href="manifest.json">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="apple-mobile-web-app-title" content="经典诵读">
<link rel="stylesheet" href="style.css?v=11">
</head>
<body>
<div class="site-logo" aria-hidden="true">
<img src="icon.svg" alt="" class="logo-mark">
<span class="logo-text">经典诵读</span>
</div>
<main class="page">
<section class="hero">
<div class="seal" id="seal" aria-hidden="true">心经</div>
<div class="hero-text">
<h1 class="sutra-title" id="sutra-title">般若波罗蜜多心经</h1>
<p class="subtitle" id="sutra-sub">唐三藏法师 玄奘 译</p>
</div>
</section>
<section class="panel player-card" id="player-card" aria-label="语音诵读">
<div class="player-row">
<button id="btn-play" class="btn-play" type="button" aria-label="播放或停止">
<svg viewBox="0 0 24 24" class="icon icon-play"><path d="M8 5v14l11-7z"/></svg>
<svg viewBox="0 0 24 24" class="icon icon-stop"><rect x="6" y="6" width="12" height="12" rx="1.5"/></svg>
<span class="play-label">播 放</span>
</button>
<span id="sleep-remaining" class="sleep-remaining" aria-label="定时剩余时间"></span>
<div class="field-pair">
<label class="tool-name" for="sutra-select">经典</label>
<select id="sutra-select" aria-label="选择经典"></select>
</div>
<div class="player-meta">
<label class="voice-label" for="voice-select">诵读音色</label>
<select id="voice-select"></select>
</div>
<span class="flex-break" aria-hidden="true"></span>
<div class="tool-group" role="group" aria-label="字号">
<span class="tool-name">字号</span>
<button type="button" data-size="lg" class="size-btn">大</button>
<button type="button" data-size="md" class="size-btn active">中</button>
<button type="button" data-size="sm" class="size-btn">小</button>
</div>
<span class="flex-break flex-break-2" aria-hidden="true"></span>
<div class="tool-group" role="group" aria-label="排版">
<button type="button" id="btn-layout" class="layout-btn">切换竖排</button>
</div>
<div class="tool-group" role="group" aria-label="模式">
<button type="button" id="btn-loop" class="layout-btn" aria-pressed="false">循环</button>
<button type="button" id="btn-night" class="layout-btn" aria-pressed="false">夜间</button>
<div class="field-pair">
<label class="tool-name" for="bgm-select">配乐</label>
<select id="bgm-select" aria-label="背景音乐">
<option value="" selected>关</option>
<option value="bell">晨钟</option>
<option value="valley">空山</option>
</select>
</div>
<div class="field-pair">
<label class="tool-name" for="timer-select">定时</label>
<select id="timer-select" aria-label="定时停止">
<option value="0">关闭</option>
<option value="30">30 分钟</option>
<option value="60">60 分钟</option>
<option value="90">90 分钟</option>
<option value="120">120 分钟</option>
</select>
</div>
<div class="field-pair">
<label class="tool-name" for="rate-select">语速</label>
<select id="rate-select" aria-label="诵读语速">
<option value="0.8">慢 0.8×</option>
<option value="1" selected>常速</option>
<option value="1.25">快 1.25×</option>
</select>
</div>
</div>
<div id="status" class="status" role="status"></div>
<button type="button" id="btn-expand" class="expand-btn" aria-expanded="false" aria-label="展开设置" title="设置">
<span class="expand-label">设置</span>
<svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
</button>
</div>
<div id="progress" class="progress" aria-hidden="true"></div>
</section>
<article class="sutra-paper">
<div id="sutra" class="sutra size-md" role="document"></div>
<button type="button" id="btn-jump-now" class="jump-now" hidden>⤵ 回到诵读处</button>
</article>
<nav class="pager" id="pager" aria-label="分页" hidden>
<button type="button" id="btn-prev" class="pager-btn">‹ 上一页</button>
<span id="page-info" class="page-info"></span>
<button type="button" id="btn-next" class="pager-btn">下一页 ›</button>
</nav>
</main>
<footer class="site-footer">
<p id="foot-hint">点击段落可从该段起诵读 · ← → 键翻页 · 语音由千问 Qwen3-TTS 合成 · 经文来源:<a id="sutra-source" href="https://www.dpm.org.cn/lemmas/243222.html" target="_blank" rel="noopener">故宫博物院</a></p>
</footer>
<audio id="audio" preload="auto"></audio>
<script src="app.js?v=13"></script>
</body>
</html>