feat: 任务队列卡片显示每个频道的日期范围
部署到群晖 / deploy (push) Successful in 58s

- 后端 _compute_current_task_queue 返回每项附带 download_filter
- 前端三种卡片(已完成/当前/排队中)都加一行 📅 日期范围,
  复用既有 parseFilterDisplay 解析 filter 字符串

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
yuming
2026-04-23 13:17:58 +08:00
parent fbdd3fa31b
commit 8de92095f7
2 changed files with 14 additions and 1 deletions
+12
View File
@@ -1506,16 +1506,24 @@
const totalStr = (c.total && c.total > 0) const totalStr = (c.total && c.total > 0)
? `${c.done||0} / ${c.total} 完成` ? `${c.done||0} / ${c.total} 完成`
: `${c.done||0} 个完成`; : `${c.done||0} 个完成`;
const filterLine = renderFilterLine(q.download_filter);
return ` return `
<div class="qcard qcard-done"> <div class="qcard qcard-done">
<div class="qcard-icon">✅</div> <div class="qcard-icon">✅</div>
<div class="qcard-main"> <div class="qcard-main">
<div class="qcard-name">${title}</div> <div class="qcard-name">${title}</div>
${filterLine}
<div class="qcard-state">${totalStr}${skipStr}</div> <div class="qcard-state">${totalStr}${skipStr}</div>
</div> </div>
</div>`; </div>`;
} }
function renderFilterLine(filter) {
const txt = parseFilterDisplay(filter || '');
if (!txt) return '';
return `<div class="qcard-state" style="color:var(--muted);">${escapeHtml(txt)}</div>`;
}
function renderActiveCard(q, p, paused) { function renderActiveCard(q, p, paused) {
const title = escapeHtml(q.chat_title || p.current_chat_title || q.chat_id); const title = escapeHtml(q.chat_title || p.current_chat_title || q.chat_id);
const dl = p.downloading_files||0, done = p.completed_files||0, skip = p.skipped_files||0; const dl = p.downloading_files||0, done = p.completed_files||0, skip = p.skipped_files||0;
@@ -1544,11 +1552,13 @@
<div class="qcard-state" style="margin-top:3px;">${done} / ${realTotal}${suffix}</div>`; <div class="qcard-state" style="margin-top:3px;">${done} / ${realTotal}${suffix}</div>`;
} }
const filterLine = renderFilterLine(q.download_filter);
return ` return `
<div class="qcard qcard-active"> <div class="qcard qcard-active">
<div class="qcard-icon">🚀</div> <div class="qcard-icon">🚀</div>
<div class="qcard-main"> <div class="qcard-main">
<div class="qcard-name">${title}</div> <div class="qcard-name">${title}</div>
${filterLine}
<div class="qcard-state">${st}</div> <div class="qcard-state">${st}</div>
${progBar} ${progBar}
</div> </div>
@@ -1557,11 +1567,13 @@
function renderPendingCard(q) { function renderPendingCard(q) {
const title = escapeHtml(q.chat_title || q.chat_id); const title = escapeHtml(q.chat_title || q.chat_id);
const filterLine = renderFilterLine(q.download_filter);
return ` return `
<div class="qcard qcard-pending"> <div class="qcard qcard-pending">
<div class="qcard-icon">⏳</div> <div class="qcard-icon">⏳</div>
<div class="qcard-main"> <div class="qcard-main">
<div class="qcard-name">${title}</div> <div class="qcard-name">${title}</div>
${filterLine}
<div class="qcard-state">排队中…</div> <div class="qcard-state">排队中…</div>
</div> </div>
</div>`; </div>`;
+2 -1
View File
@@ -215,11 +215,12 @@ def _compute_current_task_queue() -> list:
if cid: if cid:
history_map[cid] = h.get("chat_title", "") or cid history_map[cid] = h.get("chat_title", "") or cid
queue = [] queue = []
for chat_id in _app.chat_download_config.keys(): for chat_id, cfg in _app.chat_download_config.items():
cid_str = str(chat_id) cid_str = str(chat_id)
queue.append({ queue.append({
"chat_id": cid_str, "chat_id": cid_str,
"chat_title": history_map.get(cid_str, cid_str), "chat_title": history_map.get(cid_str, cid_str),
"download_filter": getattr(cfg, "download_filter", "") or "",
}) })
return queue return queue