aa
This commit is contained in:
@@ -764,7 +764,7 @@
|
||||
<button type="button" class="btn-ghost" data-open="config">环境配置</button>
|
||||
<button type="button" class="btn-ghost" data-open="logs">运行日志</button>
|
||||
{% if console_authed %}
|
||||
<form method="post" action="/auth/console/logout" style="margin:0;">
|
||||
<form method="post" action="{{ app_url('/auth/console/logout') }}" style="margin:0;">
|
||||
<button type="submit" class="btn-ghost">退出验证</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
@@ -859,16 +859,16 @@
|
||||
<p class="alert-warn" role="alert">客户端:{{ error }}</p>
|
||||
{% endif %}
|
||||
<div class="btn-row">
|
||||
<form method="post" action="/start">
|
||||
<form method="post" action="{{ app_url('/start') }}">
|
||||
<button class="btn-primary" type="submit">初始化 / 连接 Telegram</button>
|
||||
</form>
|
||||
<form method="post" action="/stop">
|
||||
<form method="post" action="{{ app_url('/stop') }}">
|
||||
<button class="btn-danger" type="submit">断开 Telegram</button>
|
||||
</form>
|
||||
<form method="post" action="/jobs/continuous/start">
|
||||
<form method="post" action="{{ app_url('/jobs/continuous/start') }}">
|
||||
<button class="btn-primary" type="submit">启动持续抓取(含心跳)</button>
|
||||
</form>
|
||||
<form method="post" action="/jobs/continuous/stop">
|
||||
<form method="post" action="{{ app_url('/jobs/continuous/stop') }}">
|
||||
<button class="btn-danger" type="submit">停止持续抓取</button>
|
||||
</form>
|
||||
</div>
|
||||
@@ -892,14 +892,14 @@
|
||||
<strong>添加</strong>:<code>@用户名</code>、<code>-100…</code>、<code>https://t.me/xxx</code>。
|
||||
不支持仅靠群内显示标题。
|
||||
</p>
|
||||
<form method="post" action="/channels/add" class="form-inline">
|
||||
<form method="post" action="{{ app_url('/channels/add') }}" class="form-inline">
|
||||
<input type="text" name="channel_spec" placeholder="@channel 或 -100… 或 https://t.me/…" aria-label="要添加的频道" />
|
||||
<button class="btn-primary" type="submit">添加</button>
|
||||
</form>
|
||||
<p class="hint">
|
||||
<strong>移除</strong>:<code>all</code>;<code>1,2</code>;<code>-100…</code>;<code>@用户名</code> / t.me(须已在监控中)。
|
||||
</p>
|
||||
<form method="post" action="/channels/remove" class="form-inline">
|
||||
<form method="post" action="{{ app_url('/channels/remove') }}" class="form-inline">
|
||||
<input type="text" name="channel_spec" placeholder="all 或 1,2 或 -100… 或 @name" aria-label="要移除的频道" />
|
||||
<button class="btn-danger" type="submit">移除</button>
|
||||
</form>
|
||||
@@ -907,15 +907,15 @@
|
||||
<div class="ops-block">
|
||||
<h4>任务(抓取 / 导出 / 补媒体)</h4>
|
||||
<p class="hint">范围:<code>all</code>、<code>1,3</code>、<code>-100…</code> 或已在监控的 <code>@</code> / 链接。</p>
|
||||
<form method="post" action="/jobs/scrape" class="form-inline">
|
||||
<form method="post" action="{{ app_url('/jobs/scrape') }}" class="form-inline">
|
||||
<input type="text" name="selection" value="all" aria-label="抓取范围" />
|
||||
<button class="btn-primary" type="submit">开始抓取</button>
|
||||
</form>
|
||||
<form method="post" action="/jobs/export" class="form-inline">
|
||||
<form method="post" action="{{ app_url('/jobs/export') }}" class="form-inline">
|
||||
<input type="text" name="selection" value="all" aria-label="导出范围" />
|
||||
<button class="btn-primary" type="submit">导出 CSV+JSON</button>
|
||||
</form>
|
||||
<form method="post" action="/jobs/rescrape" class="form-inline">
|
||||
<form method="post" action="{{ app_url('/jobs/rescrape') }}" class="form-inline">
|
||||
<input type="text" name="selection" value="all" aria-label="补抓范围" />
|
||||
<button class="btn-primary" type="submit">补抓媒体</button>
|
||||
</form>
|
||||
@@ -946,7 +946,7 @@
|
||||
<div>
|
||||
<p class="hint">账号可见频道:勾选后加入监控。标题包含配置项「账号列表隐藏」中任一子串的会话不会出现在此列表(默认隐藏含「远程-到岗-技术招聘」的群,避免选到自有招聘群)。</p>
|
||||
{% if account_channels %}
|
||||
<form method="post" action="/channels/add-selected" class="account-pick-form">
|
||||
<form method="post" action="{{ app_url('/channels/add-selected') }}" class="account-pick-form">
|
||||
<div class="account-pick-toolbar">
|
||||
<button type="button" class="text-btn" id="account-select-all">全选可选项</button>
|
||||
<button type="button" class="text-btn" id="account-select-none">全不选</button>
|
||||
@@ -988,7 +988,7 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="hint">保存后建议断开并重新连接 Telegram。</p>
|
||||
<form method="post" action="/config" class="config-form">
|
||||
<form method="post" action="{{ app_url('/config') }}" class="config-form">
|
||||
{% for f in fields %}
|
||||
{% if f.key in binary_env_keys %}
|
||||
<div class="field-row field-row-toggle">
|
||||
@@ -1037,6 +1037,21 @@
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js"></script>
|
||||
<script>
|
||||
window.__URL_PREFIX__ = {{ url_prefix|tojson }};
|
||||
function appPath(p) {
|
||||
p = p.startsWith("/") ? p : ("/" + p);
|
||||
var pre = window.__URL_PREFIX__ || "";
|
||||
return pre ? (pre + p) : p;
|
||||
}
|
||||
function appHomeWithQuery(tail) {
|
||||
var pre = window.__URL_PREFIX__ || "";
|
||||
var base = pre ? (pre + "/") : "/";
|
||||
base = base.replace(/\/*$/, "/");
|
||||
if (!tail) return base;
|
||||
if (tail.charAt(0) !== "?") tail = "?" + tail;
|
||||
return base + tail;
|
||||
}
|
||||
|
||||
function formatInt(n) {
|
||||
if (n == null || isNaN(n)) return "—";
|
||||
return Number(n).toLocaleString("zh-CN");
|
||||
@@ -1049,7 +1064,7 @@
|
||||
|
||||
async function consoleAuthStatus() {
|
||||
try {
|
||||
var r = await fetch("/auth/console/status", { credentials: "same-origin" });
|
||||
var r = await fetch(appPath("/auth/console/status"), { credentials: "same-origin" });
|
||||
if (!r.ok) return false;
|
||||
var j = await r.json();
|
||||
return j.ok === true;
|
||||
@@ -1086,7 +1101,7 @@
|
||||
}
|
||||
var pw = authPwd ? authPwd.value : "";
|
||||
try {
|
||||
var res = await fetch("/auth/console/login", {
|
||||
var res = await fetch(appPath("/auth/console/login"), {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
credentials: "same-origin",
|
||||
@@ -1102,7 +1117,7 @@
|
||||
pendingOpenDlgId = null;
|
||||
}
|
||||
if (authPwd) authPwd.value = "";
|
||||
window.location.href = "/" + tail;
|
||||
window.location.href = appHomeWithQuery(tail);
|
||||
} else {
|
||||
if (authErr) {
|
||||
authErr.textContent = (data && data.error) ? data.error : "验证失败";
|
||||
@@ -1266,7 +1281,7 @@
|
||||
var qs = new URLSearchParams({ days: String(days) });
|
||||
if (kw) qs.set("keywords", kw);
|
||||
try {
|
||||
var res = await fetch("/api/stats/overview?" + qs.toString());
|
||||
var res = await fetch(appPath("/api/stats/overview") + "?" + qs.toString());
|
||||
if (!res.ok) throw new Error("HTTP " + res.status);
|
||||
var data = await res.json();
|
||||
applyStats(data);
|
||||
@@ -1307,7 +1322,7 @@
|
||||
|
||||
async function refreshStatus() {
|
||||
try {
|
||||
var statusResp = await fetch("/api/jobs/status", { credentials: "same-origin" });
|
||||
var statusResp = await fetch(appPath("/api/jobs/status"), { credentials: "same-origin" });
|
||||
if (statusResp.ok) {
|
||||
var status = await statusResp.json();
|
||||
var runningEl = document.getElementById("job-running");
|
||||
@@ -1355,7 +1370,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
var channelsResp = await fetch("/api/channels/monitored", { credentials: "same-origin" });
|
||||
var channelsResp = await fetch(appPath("/api/channels/monitored"), { credentials: "same-origin" });
|
||||
if (channelsResp.ok) {
|
||||
var payload = await channelsResp.json();
|
||||
var wrap = document.getElementById("monitored-list");
|
||||
|
||||
Reference in New Issue
Block a user