文案(详情页):按 human-copy 过一遍;智能体提示去掉已取消的待处理中心
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
1 parent
d8f958d4fb
commit
be6349bbae
4 files changed
+12
-12
No files matched your search
@@ -202,7 +202,7 @@ export function MediaHero({ facts, badges, actions }: { facts: MediaFacts; badge
|
|||||||
className="mt-2 max-w-2xl text-caption leading-relaxed text-foreground/90"
|
className="mt-2 max-w-2xl text-caption leading-relaxed text-foreground/90"
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<p className="mt-2 text-meta text-muted-foreground">暂无简介</p>
|
<p className="mt-2 text-meta text-muted-foreground">没有简介</p>
|
||||||
)}
|
)}
|
||||||
{dates.length || facts.externalLinks.length ? (
|
{dates.length || facts.externalLinks.length ? (
|
||||||
<div className="mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-meta text-muted-foreground">
|
<div className="mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-meta text-muted-foreground">
|
||||||
@@ -364,7 +364,7 @@ export function EpisodeRow({ e }: { e: EpisodeRowData }) {
|
|||||||
{e.overview ? (
|
{e.overview ? (
|
||||||
<ClampText text={e.overview} lines={2} className="mt-1 text-caption text-foreground/85" />
|
<ClampText text={e.overview} lines={2} className="mt-1 text-caption text-foreground/85" />
|
||||||
) : (
|
) : (
|
||||||
<p className="mt-0.5 text-meta text-muted-foreground">暂无简介</p>
|
<p className="mt-0.5 text-meta text-muted-foreground">没有简介</p>
|
||||||
)}
|
)}
|
||||||
{e.extra}
|
{e.extra}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ function IdentityPanel({ detail }: { detail: LibraryDetail }) {
|
|||||||
const candidates = detail.identities.filter((i) => i.status === "proposed" || i.status === "conflicted");
|
const candidates = detail.identities.filter((i) => i.status === "proposed" || i.status === "conflicted");
|
||||||
return (
|
return (
|
||||||
<Panel
|
<Panel
|
||||||
title="匹配的 TMDB 条目"
|
title="TMDB 匹配"
|
||||||
actions={
|
actions={
|
||||||
<Button variant="outline" size="sm" onClick={() => setOpen(true)}>
|
<Button variant="outline" size="sm" onClick={() => setOpen(true)}>
|
||||||
<PencilLine />
|
<PencilLine />
|
||||||
@@ -271,7 +271,7 @@ function IdentityRow({ i }: { i: ExternalIdentity }) {
|
|||||||
className="mt-1 text-meta text-muted-foreground"
|
className="mt-1 text-meta text-muted-foreground"
|
||||||
title={`证据 ${evidenceLabel(i.evidenceLevel)} · ${VERIFY_STATUS[i.verifyStatus]?.label ?? i.verifyStatus} · r${i.revision}`}
|
title={`证据 ${evidenceLabel(i.evidenceLevel)} · ${VERIFY_STATUS[i.verifyStatus]?.label ?? i.verifyStatus} · r${i.revision}`}
|
||||||
>
|
>
|
||||||
{i.locked || i.evidenceLevel === "manual" ? "你确认的" : "自动匹配"}
|
{i.locked || i.evidenceLevel === "manual" ? "人工确认" : "自动匹配"}
|
||||||
{i.verifiedAt ? ` · ${relTime(i.verifiedAt)}` : ""}
|
{i.verifiedAt ? ` · ${relTime(i.verifiedAt)}` : ""}
|
||||||
</p>
|
</p>
|
||||||
{reason ? <p className="mt-0.5 text-meta break-words text-muted-foreground">{reason}</p> : null}
|
{reason ? <p className="mt-0.5 text-meta break-words text-muted-foreground">{reason}</p> : null}
|
||||||
@@ -350,7 +350,7 @@ function EvidenceLine({ field }: { field: MediaEntityDetail["metadataFields"][nu
|
|||||||
<ExternalLink className="h-3 w-3 shrink-0" />
|
<ExternalLink className="h-3 w-3 shrink-0" />
|
||||||
</a>
|
</a>
|
||||||
) : (
|
) : (
|
||||||
<span>无出处</span>
|
<span>没有出处</span>
|
||||||
)}
|
)}
|
||||||
{field?.field === "posterUrl" && ev.enrichmentId ? (
|
{field?.field === "posterUrl" && ev.enrichmentId ? (
|
||||||
<img
|
<img
|
||||||
@@ -407,7 +407,7 @@ function MetadataPanel({ detail, entity }: { detail: LibraryDetail; entity: Medi
|
|||||||
refresh.mutate(
|
refresh.mutate(
|
||||||
{ full: true },
|
{ full: true },
|
||||||
{
|
{
|
||||||
onSuccess: () => toast.success("已提交刷新,含全部季的每集信息"),
|
onSuccess: () => toast.success("已开始刷新,包括全部季的每集信息"),
|
||||||
onError: (err) => toast.error(errorMessage(err, "刷新失败")),
|
onError: (err) => toast.error(errorMessage(err, "刷新失败")),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -735,7 +735,7 @@ function EpisodesPanel({ detail, units }: { detail: LibraryDetail; units: Conten
|
|||||||
refresh.mutate(
|
refresh.mutate(
|
||||||
{ full: true },
|
{ full: true },
|
||||||
{
|
{
|
||||||
onSuccess: () => toast.success("已提交刷新,含全部季的每集信息"),
|
onSuccess: () => toast.success("已开始刷新,包括全部季的每集信息"),
|
||||||
onError: (err) => toast.error(errorMessage(err, "刷新失败")),
|
onError: (err) => toast.error(errorMessage(err, "刷新失败")),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ export default function TmdbMediaPage() {
|
|||||||
<>
|
<>
|
||||||
{back}
|
{back}
|
||||||
<ErrorState
|
<ErrorState
|
||||||
title={code === "not_found" ? "TMDB 没有这个条目" : "作品加载失败"}
|
title={code === "not_found" ? "TMDB 上找不到这部作品" : "作品加载失败"}
|
||||||
error={q.error}
|
error={q.error}
|
||||||
onRetry={code === "not_found" ? undefined : () => q.refetch()}
|
onRetry={code === "not_found" ? undefined : () => q.refetch()}
|
||||||
/>
|
/>
|
||||||
@@ -204,13 +204,13 @@ function InventoryPanel({ d }: { d: TmdbMediaDetail }) {
|
|||||||
const inv = d.inventory;
|
const inv = d.inventory;
|
||||||
const line = slotLine(inv);
|
const line = slotLine(inv);
|
||||||
return (
|
return (
|
||||||
<Panel title="库中情况">
|
<Panel title="本地状态">
|
||||||
<dl className="grid gap-4 sm:grid-cols-2">
|
<dl className="grid gap-4 sm:grid-cols-2">
|
||||||
<div className="min-w-0">
|
<div className="min-w-0">
|
||||||
<dt className="text-meta text-muted-foreground">媒体库</dt>
|
<dt className="text-meta text-muted-foreground">媒体库</dt>
|
||||||
<dd className="mt-1 space-y-1 text-caption text-foreground">
|
<dd className="mt-1 space-y-1 text-caption text-foreground">
|
||||||
{inv.state === "not_collected" ? (
|
{inv.state === "not_collected" ? (
|
||||||
<p>不在媒体库。</p>
|
<p>不在媒体库</p>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
@@ -234,7 +234,7 @@ function InventoryPanel({ d }: { d: TmdbMediaDetail }) {
|
|||||||
</Link>
|
</Link>
|
||||||
</p>
|
</p>
|
||||||
) : emby.isPending ? (
|
) : emby.isPending ? (
|
||||||
<p className="text-muted-foreground">查询中…</p>
|
<p className="text-muted-foreground">加载中…</p>
|
||||||
) : emby.isError ? (
|
) : emby.isError ? (
|
||||||
<p className="text-warning">{errorMessage(emby.error, "查询失败")}</p>
|
<p className="text-warning">{errorMessage(emby.error, "查询失败")}</p>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ export const INTENT_ROUTES: readonly IntentRoute[] = [
|
|||||||
{
|
{
|
||||||
intent: "问待处理事项、要我处理什么",
|
intent: "问待处理事项、要我处理什么",
|
||||||
steps: [{ cap: "decision.list", note: "未关闭事项、严重度与可选处理" }],
|
steps: [{ cap: "decision.list", note: "未关闭事项、严重度与可选处理" }],
|
||||||
tips: ["处理由用户在待处理中心选,智能体只汇总与建议。"],
|
tips: ["处理由用户在出问题的页面(如整理记录)或铃铛里选,智能体只汇总与建议。"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
intent: "问存储、清理空间",
|
intent: "问存储、清理空间",
|
||||||
|
|||||||
Reference in new issue
Block a user