feat(web): nav regroup, site RSS tab and site types (IA-2)

- sidebar: 概览 / 获取 / 整理 / 系统. Tasks moves to 系统; sites,
  subscriptions and rules form the 获取 group (ACQUIRE_GROUP_TITLE in
  nav.ts, the single place to rename it); standalone RSS nav item removed
- site detail gets an RSS tab with everything the RSS page had (create,
  edit, enable, fetch now, fetch state) plus recent items; tabs and
  header actions follow the site's capabilities
- old /console/sources links redirect to the site's RSS tab (?feed= looks
  up the owning site) or the site list; task links to RSS point at sites
- site list shows and filters by type; add-site wizard starts with a type
  step (PT still picks from the definition library; public BT / custom
  RSS source only need name, URL and RSS URL)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-30 00:29:56 +08:00
1 parent ec65435328
commit 614262378e
20 files changed
+772 -304

No files matched your search

@@ -137,8 +137,10 @@ export function SiteFeedDialog({
<span className="break-all">
保存后显示为 <span className="font-mono">{shown}</span>
</span>
) : (
) : site.kind === "pt" ? (
"站点「控制面板 → RSS」里生成的链接"
) : (
"RSS 或 Atom 地址"
)
}
>
@@ -149,11 +151,13 @@ export function SiteFeedDialog({
spellCheck={false}
value={url}
aria-invalid={!!error}
placeholder={`${site.baseUrl.replace(/\/$/, "")}/torrentrss.php?passkey=…`}
placeholder={
site.kind === "pt" ? `${site.baseUrl.replace(/\/$/, "")}/torrentrss.php?passkey=…` : "https://"
}
onChange={(e) => setUrl(e.target.value)}
/>
</FormField>
{mismatch ? (
{mismatch && site.kind !== "rss_feed" ? (
<p className="-mt-1 mb-2 text-caption text-warning">
地址域名与 {site.name}({new URL(site.baseUrl).hostname})不一致,仍可保存;确认没有填错站点。
</p>