chore(copy): check:copy 加用词规则,拦客服腔、营销腔与「请…」「进行 + 动词」

其它路负责的 web 文件里现有命中先加 copy-allow,文案由对应路改。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-07 01:52:23 +08:00
1 parent 542f107566
commit 50aa02cfc5
6 files changed
+46 -4

No files matched your search

+1
View File
@@ -47,6 +47,7 @@ export async function fetchAllCursorPages<P extends { items: unknown[]; nextCurs
const seen = new Set<string>();
let cursor = first.nextCursor;
while (cursor) {
// copy-allow: 用词规则上线前已有,文案归其它路改
if (seen.has(cursor)) throw new ApiRequestError("internal", "分页游标重复,请重试");
seen.add(cursor);
const page = await fetchPage(cursor);
@@ -118,6 +118,7 @@ export function DirectoryDialog({
</p>
{!allowRoot && selected && !selected.path ? (
<p role="status" className="text-caption text-warning">
{/* copy-allow: 用词规则上线前已有,文案归其它路改 */}
请选择子目录,或先新增来源配置,再整理根目录存量。
</p>
) : null}
@@ -63,8 +63,10 @@ export function rowProblem(r: WizardRow): string | null {
if (r.excluded) return null;
if (!r.entity) return "未选择作品";
if (isMovieKind(r.entity.kind)) return null;
// copy-allow: 用词规则上线前已有,文案归其它路改
if (!r.episodeTouched) return episodeUnresolved(r) ? "集数待确认,请填写季集或排除" : null;
const eps = parseEpisodes(r.episodes);
// copy-allow: 用词规则上线前已有,文案归其它路改
if (eps === null) return "集号格式不对,请填写单集或连续区间,如 3、3-5";
const unique = [...new Set(eps)].sort((a, b) => a - b);
if (eps.length > 50) return "单个文件最多指定 50 个集号";
@@ -323,6 +323,7 @@ export function OrganizeWizard({ source, onClose }: { source: OrganizeSource; on
{
onSuccess: (r) => {
if (signatureRef.current !== snapshot) {
// copy-allow: 用词规则上线前已有,文案归其它路改
setNotice("选项或识别结果已变化,请重新生成预览。");
return;
}
@@ -357,6 +358,7 @@ export function OrganizeWizard({ source, onClose }: { source: OrganizeSource; on
const accepted = r.groups.filter((g) => !!g.recordId && !g.error).length;
if (accepted) toast.success(`已加入整理队列:${accepted} 组`);
if (failed.length) {
// copy-allow: 用词规则上线前已有,文案归其它路改
setNotice(`${accepted} 组已受理,${failed.length} 组未加入队列;请检查下方原因,修改后重新预览。`);
const acceptedSources = new Set(
r.groups.filter((g) => !!g.recordId && !g.error).flatMap((g) => g.files.map((f) => f.source)),
@@ -376,6 +378,7 @@ export function OrganizeWizard({ source, onClose }: { source: OrganizeSource; on
onError: (e) => {
if (filesErrorReason(e) === "plan_stale") {
setPreview(null);
// copy-allow: 用词规则上线前已有,文案归其它路改
setNotice("源文件已变化,请重新生成预览。");
}
toast.error(filesErrorText(e, "加入队列失败"));
@@ -492,6 +495,7 @@ export function OrganizeWizard({ source, onClose }: { source: OrganizeSource; on
value={inPlace ? "none" : (profile?.id ?? (ambiguous ? "choose" : "none"))}
onChange={pickProfile}
choices={[
// copy-allow: 用词规则上线前已有,文案归其它路改
...(ambiguous ? [{ value: "choose", label: "请选择匹配的来源配置", disabled: true }] : []),
{ value: "none", label: inPlace ? "原地 · 使用文件所在媒体库" : "手动指定 · 使用全局默认" },
...matches.map((p) => ({
@@ -784,7 +788,8 @@ export function OrganizeWizard({ source, onClose }: { source: OrganizeSource; on
<p role="alert" className="text-caption text-destructive">
{src.error
? filesErrorText(src.error, "读取来源失败")
: "源文件不存在或不在登记目录中,请在文件管理器重新选择。"}
: // copy-allow: 用词规则上线前已有,文案归其它路改
"源文件不存在或不在登记目录中,请在文件管理器重新选择。"}
</p>
) : identify.error ? (
<div>
@@ -17,6 +17,7 @@ export function stockWizardSource(profile: OrganizeSourceView, stock: OrganizeSt
sourceConfigId: profile.id,
defaultAction: profile.action,
label: `整理存量 · ${profile.name}`,
// copy-allow: 用词规则上线前已有,文案归其它路改
scanSummary: `找到 ${stock.items.length} 个文件,跳过 ${stock.skipped} 个,不可读取 ${stock.unavailable} 个${stock.truncated ? ";扫描已达到上限,仅显示本批结果" : ""}。本次扫描不改变自动整理基线,请先预览再执行。`,
};
}