diff --git a/apps/web/components/review/AcceptPanel.tsx b/apps/web/components/review/AcceptPanel.tsx index a16b332..b728bbb 100644 --- a/apps/web/components/review/AcceptPanel.tsx +++ b/apps/web/components/review/AcceptPanel.tsx @@ -142,7 +142,7 @@ export function AcceptPanel({ ))} -

+

以上为预期,最终以验收回执为准。

diff --git a/apps/web/components/review/AnnotatedText.tsx b/apps/web/components/review/AnnotatedText.tsx index 7d70417..2d5d85d 100644 --- a/apps/web/components/review/AnnotatedText.tsx +++ b/apps/web/components/review/AnnotatedText.tsx @@ -1,8 +1,12 @@ "use client"; import { useRef, type ReactNode, type RefObject } from "react"; +import Link from "next/link"; +import { PenLine } from "lucide-react"; +import { EmptyState } from "@/components/ui/EmptyState"; import { locateInDraft } from "@/lib/review/locate"; +import { buttonClass, proseBody } from "@/lib/ui/variants"; import type { ReviewConflict } from "@/lib/review/sse"; interface AnnotatedTextProps { @@ -12,14 +16,16 @@ interface AnnotatedTextProps { // 当前聚焦的冲突下标(来自报告卡「跳转」/锚点),用于锚点高亮联动。 focusedIndex: number | null; onAnchorClick: (index: number) => void; + // 空待审正文时,引导回写作页起草本章。 + projectId: string; + chapterNo: number; // 转发给可编辑 textarea,供父组件 setSelectionRange 定位/高亮问题区域。 editorRef?: RefObject; } // 高亮叠层编辑器:背景层渲染带 高亮的正文,前景透明 textarea 负责编辑。 -// 两层必须共享同一盒模型/排版常量,否则高亮与文字像素错位。 -const TYPO = - "box-border w-full font-serif text-[17px] leading-[1.9] tracking-normal whitespace-pre-wrap break-words"; +// 两层必须共享同一盒模型/排版常量,否则高亮与文字像素错位;正文排版与写作页 Editor 一致(proseBody)。 +const TYPO = `box-border w-full whitespace-pre-wrap break-words ${proseBody}`; // 把终稿按已定位的冲突区间切成 [纯文本 | | …]; 带 id 供父组件滚动定位。 // 区间按 start 排序,重叠区间保留先到者(跳过后者),避免标签嵌套。 @@ -61,6 +67,8 @@ export function AnnotatedText({ conflicts, focusedIndex, onAnchorClick, + projectId, + chapterNo, editorRef, }: AnnotatedTextProps) { const backdropRef = useRef(null); @@ -69,6 +77,26 @@ export function AnnotatedText({ const anchorable = conflicts .map((c, i) => ({ c, i })) .filter(({ c }) => locateInDraft(value, c) !== null); + + // 空待审正文:不渲染高亮叠层,直接引导回写作页起草本章(避免对着空编辑器发懵)。 + if (!value) { + return ( + +