@@ -44,7 +44,7 @@ export function OrganizeScrapeHistory({ recordId }: { recordId: string }) {
{record.match?.title ?? record.path} · {record.path || "/"}
{record.status === "skipped" ? null : (
-
{scrapeCounts(record) || "等待写入 NFO 与图片"}
+
{scrapeCounts(record) || "等待写入"}
)}
{record.reason ? (
- 失败或没写的文件
+ 失败或跳过的文件
) : (
- 没有关联的刮削记录。
+ 没有刮削记录。
)}
);
diff --git a/apps/web/app/components/organize/queue-model.test.ts b/apps/web/app/components/organize/queue-model.test.ts
index 2f9a2faa..be7a3463 100644
--- a/apps/web/app/components/organize/queue-model.test.ts
+++ b/apps/web/app/components/organize/queue-model.test.ts
@@ -8,24 +8,22 @@ describe("organize queue", () => {
recordId: undefined,
});
expect(organizeQueueStage({ status: "pending" })).toBe("等待执行");
- expect(organizeQueueStage({ status: "running" })).toBe("核验文件与生成整理计划");
+ expect(organizeQueueStage({ status: "running" })).toBe("核验文件,生成整理计划");
});
it("distinguishes file transfer, plan waiting, and workflow waiting", () => {
expect(organizeRunInput({ recordId: "record" }).recordId).toBe("record");
expect(organizeQueueStage({ status: "running" }, { status: "queued" })).toContain("等待搬运");
expect(organizeQueueStage({ status: "running" }, { status: "running" })).toContain("搬运文件");
- expect(organizeQueueStage({ status: "sleeping" }, { status: "running" })).toBe("等待继续执行");
+ expect(organizeQueueStage({ status: "sleeping" }, { status: "running" })).toBe("等待继续");
});
it("keeps the independent scrape stage distinct after importing finishes", () => {
expect(organizeRunInput({ input: { scrapeRecordId: "scrape" } }).scrapeRecordId).toBe("scrape");
- expect(scrapeQueueStage({ status: "running" })).toBe("刮削 NFO / 图片");
+ expect(scrapeQueueStage({ status: "running" })).toBe("刮削中");
expect(scrapeQueueStage({ status: "pending" })).toContain("等待刮削");
});
- it("原地入库显示核验与登记,不显示搬运", () => {
- expect(organizeQueueStage({ status: "running" }, { status: "running", action: "in_place" })).toBe(
- "核验原文件与登记媒体库",
- );
- expect(organizeQueueStage({ status: "running" }, { status: "queued", action: "in_place" })).toBe("等待原地登记");
+ it("原地整理不显示搬运", () => {
+ expect(organizeQueueStage({ status: "running" }, { status: "running", action: "in_place" })).toBe("原地整理中");
+ expect(organizeQueueStage({ status: "running" }, { status: "queued", action: "in_place" })).toBe("等待原地整理");
});
it("does not describe a finished business record as transferring", () => {
expect(organizeQueueStage({ status: "running" }, { status: "succeeded" })).toContain("收尾");
diff --git a/apps/web/app/components/organize/queue-model.ts b/apps/web/app/components/organize/queue-model.ts
index fa1c94ff..ee0e47d8 100644
--- a/apps/web/app/components/organize/queue-model.ts
+++ b/apps/web/app/components/organize/queue-model.ts
@@ -20,18 +20,18 @@ export function organizeQueueStage(
run: Pick,
record?: Pick & Partial>,
) {
- if (run.status === "sleeping") return "等待继续执行";
+ if (run.status === "sleeping") return "等待继续";
if (run.status === "pending") return "等待执行";
- if (!record) return "核验文件与生成整理计划";
+ if (!record) return "核验文件,生成整理计划";
if (record.action === "in_place" && (record.status === "queued" || record.status === "running"))
- return record.status === "queued" ? "等待原地登记" : "核验原文件与登记媒体库";
- if (record.status === "queued") return "整理计划已生成,等待搬运";
- if (record.status === "running") return "搬运文件与登记媒体库";
- return "整理已结束,完成任务收尾";
+ return record.status === "queued" ? "等待原地整理" : "原地整理中";
+ if (record.status === "queued") return "等待搬运文件";
+ if (record.status === "running") return "搬运文件中";
+ return "收尾中";
}
export function scrapeQueueStage(run: Pick) {
- if (run.status === "pending") return "等待刮削 NFO / 图片";
- if (run.status === "sleeping") return "等待继续刮削 NFO / 图片";
- return "刮削 NFO / 图片";
+ if (run.status === "pending") return "等待刮削";
+ if (run.status === "sleeping") return "等待继续刮削";
+ return "刮削中";
}
diff --git a/apps/web/app/components/organize/record-attention.tsx b/apps/web/app/components/organize/record-attention.tsx
index ca7ea6ce..a939bd51 100644
--- a/apps/web/app/components/organize/record-attention.tsx
+++ b/apps/web/app/components/organize/record-attention.tsx
@@ -27,7 +27,7 @@ type Rec = Pick
identify.mutateAsync(r.id).then(
- (x) => toast.success(x.queued ? "已让智能体识别,认出来会自动重新整理" : "智能体已经在识别了"),
- (err) => toast.error(errorMessage(err, "操作失败")),
+ (x) => toast.success(x.queued ? "已交给智能体识别" : "智能体正在识别"),
+ (err) => toast.error(errorMessage(err, "交给智能体识别失败")),
)
}
>
@@ -112,14 +112,14 @@ export function RecordAttentionActions({
忽略
}
- title="忽略这条记录的问题?"
- description="不再算需要处理,文件和记录都不动;之后可以随时重新整理。"
+ title="忽略这个问题?"
+ description="这条记录不再算需要处理,文件和记录不变。之后仍可重新整理。"
confirmLabel="忽略"
onConfirm={() =>
dismiss.mutateAsync(r.id).then(
() => toast.success("已忽略"),
(err) => {
- toast.error(errorMessage(err, "操作失败"));
+ toast.error(errorMessage(err, "忽略失败"));
throw err;
},
)
diff --git a/apps/web/app/components/organize/source-selection.tsx b/apps/web/app/components/organize/source-selection.tsx
index 51757404..72921db3 100644
--- a/apps/web/app/components/organize/source-selection.tsx
+++ b/apps/web/app/components/organize/source-selection.tsx
@@ -17,9 +17,21 @@ export function stockWizardSource(profile: OrganizeSourceView, stock: OrganizeSt
sourceConfigId: profile.id,
defaultAction: profile.action,
label: `整理存量 · ${profile.name}`,
- scanSummary: `找到 ${stock.items.length} 个文件,跳过 ${stock.skipped} 个,不可读取 ${stock.unavailable} 个${stock.truncated ? ";扫描已达到上限,仅显示本批结果" : ""}。本次扫描不改变自动整理基线,请先预览再执行。`,
+ scanSummary: `找到 ${stock.items.length} 个文件${stockNotes(stock)}。`,
};
}
+/** 扫描结果的补充说明:只写非零项 */
+function stockNotes(r: Pick): string {
+ return [
+ r.skipped ? `跳过 ${r.skipped} 个` : "",
+ r.unavailable ? `${r.unavailable} 个读取失败` : "",
+ r.truncated ? "达到扫描上限,只列出这一批" : "",
+ ]
+ .filter(Boolean)
+ .map((x) => `,${x}`)
+ .join("");
+}
+
export function SourceSelection({
onClose,
onSelect,
@@ -36,7 +48,7 @@ export function SourceSelection({
mode="source"
allowRoot={false}
onClose={() => setManual(false)}
- onSelect={(ref) => onSelect({ kind: "files", items: [ref], label: "手动选择来源目录" })}
+ onSelect={(ref) => onSelect({ kind: "files", items: [ref], label: "手动选择的目录" })}
/>
);
return (
@@ -44,19 +56,19 @@ export function SourceSelection({
选择整理来源
- 扫描来源存量后,进入文件识别、预览与执行。扫描不会改变自动整理基线。
+ 扫描来源目录里已有的文件,预览后再整理。扫描不改变自动整理的基线。
- {sources.isPending ?
读取来源中…
: null}
+ {sources.isPending ?
加载中…
: null}
{sources.error ? (
- 来源配置读取失败,仍可手动选择目录。
+ 读取整理来源失败。可以手动选择目录
) : null}
{sources.data?.items.length ? (
@@ -74,7 +86,7 @@ export function SourceSelection({
r.items.length
? onSelect(stockWizardSource(p, r))
: toast.info(
- `没有可整理文件;跳过 ${r.skipped},不可读取 ${r.unavailable}${r.truncated ? ",扫描已达到上限" : ""}`,
+ `没有可整理的文件${stockNotes(r)}`,
),
onError: (e) => toast.error(filesErrorText(e, "扫描存量失败")),
},
@@ -89,7 +101,7 @@ export function SourceSelection({
) : null}
{sources.isSuccess && !sources.data.items.length ? (
- 去设置新增整理来源
+ 新增整理来源
) : null}