文案:格式化本轮改动的文件
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
1 parent
804f40cd36
commit
058519fa0e
5 files changed
+16
-35
No files matched your search
@@ -599,7 +599,8 @@ export function TransferDialog({
|
|||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>{mode === "move" ? "移动到…" : "复制到…"}</DialogTitle>
|
<DialogTitle>{mode === "move" ? "移动到…" : "复制到…"}</DialogTitle>
|
||||||
<DialogDescription>
|
<DialogDescription>
|
||||||
{items.length === 1 ? baseName(items[0]?.path ?? "") : `${items.length} 项`} · 跨卷移动会先复制、核验,再删除源文件。
|
{items.length === 1 ? baseName(items[0]?.path ?? "") : `${items.length} 项`} ·
|
||||||
|
跨卷移动会先复制、核验,再删除源文件。
|
||||||
</DialogDescription>
|
</DialogDescription>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
<div className="grid min-h-0 gap-4 overflow-y-auto md:grid-cols-[15rem_minmax(0,1fr)]">
|
<div className="grid min-h-0 gap-4 overflow-y-auto md:grid-cols-[15rem_minmax(0,1fr)]">
|
||||||
@@ -635,9 +636,7 @@ export function TransferDialog({
|
|||||||
}}
|
}}
|
||||||
className="max-h-72 md:max-h-96"
|
className="max-h-72 md:max-h-96"
|
||||||
/>
|
/>
|
||||||
<p className="text-meta text-muted-foreground">
|
<p className="text-meta text-muted-foreground">目标可以是可写的媒体库目录或 Alist 存储。</p>
|
||||||
目标可以是可写的媒体库目录或 Alist 存储。
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
<div className="min-w-0 space-y-3">
|
<div className="min-w-0 space-y-3">
|
||||||
{target && targetRoot ? (
|
{target && targetRoot ? (
|
||||||
@@ -687,9 +686,7 @@ export function TransferDialog({
|
|||||||
</button>
|
</button>
|
||||||
</Notice>
|
</Notice>
|
||||||
) : null}
|
) : null}
|
||||||
{plan.truncated ? (
|
{plan.truncated ? <Notice tone="warning">文件太多,只列出前一部分。执行时全部处理。</Notice> : null}
|
||||||
<Notice tone="warning">文件太多,只列出前一部分。执行时全部处理。</Notice>
|
|
||||||
) : null}
|
|
||||||
<ul className="space-y-1.5">
|
<ul className="space-y-1.5">
|
||||||
{plan.pairs.map((p) => {
|
{plan.pairs.map((p) => {
|
||||||
const sr = rootById.get(p.source.root);
|
const sr = rootById.get(p.source.root);
|
||||||
@@ -875,9 +872,7 @@ export function DeleteDialog({
|
|||||||
{d.hnr === "satisfied" ? "已满足" : d.hnr === "unsatisfied" ? "未满足" : "未知"}
|
{d.hnr === "satisfied" ? "已满足" : d.hnr === "unsatisfied" ? "未满足" : "未知"}
|
||||||
</p>
|
</p>
|
||||||
))}
|
))}
|
||||||
{c.assets.length ? (
|
{c.assets.length ? <p>含 {c.assets.length} 个已整理文件</p> : null}
|
||||||
<p>含 {c.assets.length} 个已整理文件</p>
|
|
||||||
) : null}
|
|
||||||
{c.bindings.map((bd) => (
|
{c.bindings.map((bd) => (
|
||||||
<p key={bd.bindingId}>
|
<p key={bd.bindingId}>
|
||||||
路径绑定:{bd.title}
|
路径绑定:{bd.title}
|
||||||
@@ -907,9 +902,7 @@ export function DeleteDialog({
|
|||||||
<input type="checkbox" className="mt-1" checked={unbind} onChange={(e) => setUnbind(e.target.checked)} />
|
<input type="checkbox" className="mt-1" checked={unbind} onChange={(e) => setUnbind(e.target.checked)} />
|
||||||
<span>
|
<span>
|
||||||
解除路径绑定
|
解除路径绑定
|
||||||
<span className="block text-meta text-muted-foreground">
|
<span className="block text-meta text-muted-foreground">绑定作废,这个作品下次整理时重新选目录。</span>
|
||||||
绑定作废,这个作品下次整理时重新选目录。
|
|
||||||
</span>
|
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
) : null}
|
) : null}
|
||||||
@@ -943,7 +936,9 @@ export function DeleteDialog({
|
|||||||
<span>
|
<span>
|
||||||
永久删除
|
永久删除
|
||||||
<span className="block text-meta text-muted-foreground">
|
<span className="block text-meta text-muted-foreground">
|
||||||
{isAdmin ? "无法恢复。部署时设置 FILES_ALLOW_PERMANENT_DELETE=true 才能用。" : "只有管理员会话可用。"}
|
{isAdmin
|
||||||
|
? "无法恢复。部署时设置 FILES_ALLOW_PERMANENT_DELETE=true 才能用。"
|
||||||
|
: "只有管理员会话可用。"}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@@ -1051,9 +1046,7 @@ export function RefreshMetadataDialog({ items, onClose }: { items: FileEntry[];
|
|||||||
onSuccess: (r) => {
|
onSuccess: (r) => {
|
||||||
setResult(r);
|
setResult(r);
|
||||||
const skipped = r.skipped.length ? `,${r.skipped.length} 个跳过` : "";
|
const skipped = r.skipped.length ? `,${r.skipped.length} 个跳过` : "";
|
||||||
(r.skipped.length ? toast.warning : toast.success)(
|
(r.skipped.length ? toast.warning : toast.success)(`已提交 ${r.submitted.length} 个作品${skipped}`);
|
||||||
`已提交 ${r.submitted.length} 个作品${skipped}`,
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
onError: (e) => toast.error(filesErrorText(e, "提交失败")),
|
onError: (e) => toast.error(filesErrorText(e, "提交失败")),
|
||||||
},
|
},
|
||||||
@@ -1177,9 +1170,7 @@ export function ScrapeDialog({ items, root, onClose }: { items: FileEntry[]; roo
|
|||||||
<DialogContent className="sm:max-w-2xl">
|
<DialogContent className="sm:max-w-2xl">
|
||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>刮削{single ? ` · ${single.name}` : ` · ${items.length} 项`}</DialogTitle>
|
<DialogTitle>刮削{single ? ` · ${single.name}` : ` · ${items.length} 项`}</DialogTitle>
|
||||||
<DialogDescription>
|
<DialogDescription>按路径识别作品,在文件所在目录写 NFO 和图片。没整理过的文件也能刮削。</DialogDescription>
|
||||||
按路径识别作品,在文件所在目录写 NFO 和图片。没整理过的文件也能刮削。
|
|
||||||
</DialogDescription>
|
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
{!started ? (
|
{!started ? (
|
||||||
<div className="grid gap-3">
|
<div className="grid gap-3">
|
||||||
|
|||||||
@@ -398,9 +398,7 @@ export function OrganizeWizard({ source, onClose }: { source: OrganizeSource; on
|
|||||||
<p className="truncate font-mono text-caption" title={r.path}>
|
<p className="truncate font-mono text-caption" title={r.path}>
|
||||||
{baseName(r.path)}
|
{baseName(r.path)}
|
||||||
</p>
|
</p>
|
||||||
<p className="truncate text-meta text-muted-foreground">
|
<p className="truncate text-meta text-muted-foreground">{r.entity ? entityLabel(r.entity) : "未识别"}</p>
|
||||||
{r.entity ? entityLabel(r.entity) : "未识别"}
|
|
||||||
</p>
|
|
||||||
{rowProblem(r) ? <p className="text-meta text-warning">{rowProblem(r)}</p> : null}
|
{rowProblem(r) ? <p className="text-meta text-warning">{rowProblem(r)}</p> : null}
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
@@ -711,9 +709,7 @@ export function OrganizeWizard({ source, onClose }: { source: OrganizeSource; on
|
|||||||
<div className="flex items-center justify-between gap-3 rounded-xl border border-border px-3 py-2">
|
<div className="flex items-center justify-between gap-3 rounded-xl border border-border px-3 py-2">
|
||||||
<span className="text-caption">
|
<span className="text-caption">
|
||||||
整理后刮削
|
整理后刮削
|
||||||
<span className="block text-meta text-muted-foreground">
|
<span className="block text-meta text-muted-foreground">整理完成后写 NFO 和图片</span>
|
||||||
整理完成后写 NFO 和图片
|
|
||||||
</span>
|
|
||||||
</span>
|
</span>
|
||||||
<Switch
|
<Switch
|
||||||
checked={options.scrapeAfterImport}
|
checked={options.scrapeAfterImport}
|
||||||
|
|||||||
@@ -33,9 +33,7 @@ export function FileSourceSelection({
|
|||||||
<DialogContent>
|
<DialogContent>
|
||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>{profiles.isPending ? "读取整理来源…" : "选择整理来源"}</DialogTitle>
|
<DialogTitle>{profiles.isPending ? "读取整理来源…" : "选择整理来源"}</DialogTitle>
|
||||||
<DialogDescription>
|
<DialogDescription>整理时沿用所选整理来源的整理方式、目标目录和分类。</DialogDescription>
|
||||||
整理时沿用所选整理来源的整理方式、目标目录和分类。
|
|
||||||
</DialogDescription>
|
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
{profiles.isPending ? (
|
{profiles.isPending ? (
|
||||||
<p role="status" className="text-caption text-muted-foreground">
|
<p role="status" className="text-caption text-muted-foreground">
|
||||||
|
|||||||
@@ -98,9 +98,7 @@ function QueueItem({ run }: { run: EngineRun }) {
|
|||||||
<span className="text-muted-foreground">来源</span>
|
<span className="text-muted-foreground">来源</span>
|
||||||
<p className="break-all font-mono text-meta">
|
<p className="break-all font-mono text-meta">
|
||||||
{source ??
|
{source ??
|
||||||
(detail.isFetching || download.isFetching || recordQuery.isFetching
|
(detail.isFetching || download.isFetching || recordQuery.isFetching ? "加载中…" : "读取不到来源")}
|
||||||
? "加载中…"
|
|
||||||
: "读取不到来源")}
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="min-w-0">
|
<div className="min-w-0">
|
||||||
|
|||||||
@@ -85,9 +85,7 @@ export function SourceSelection({
|
|||||||
onSuccess: (r) =>
|
onSuccess: (r) =>
|
||||||
r.items.length
|
r.items.length
|
||||||
? onSelect(stockWizardSource(p, r))
|
? onSelect(stockWizardSource(p, r))
|
||||||
: toast.info(
|
: toast.info(`没有可整理的文件${stockNotes(r)}`),
|
||||||
`没有可整理的文件${stockNotes(r)}`,
|
|
||||||
),
|
|
||||||
onError: (e) => toast.error(filesErrorText(e, "扫描存量失败")),
|
onError: (e) => toast.error(filesErrorText(e, "扫描存量失败")),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in new issue
Block a user