|
|
@@ -9,7 +9,7 @@ import { EmptyState, ErrorState, LoadingState } from "@/components/StateBlocks";
|
|
|
import { getFlowLedgerWalk } from "@/lib/api/client";
|
|
|
import type { FlowLedgerWalkResponse, RawRecord } from "@/lib/api/types";
|
|
|
import { methodLabel, type BusinessTone } from "@/lib/flow-ledger/business";
|
|
|
-import { asArray, asRecord, text } from "@/lib/flow-ledger/format";
|
|
|
+import { asArray, asRecord, maybeText, text } from "@/lib/flow-ledger/format";
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
// tree model
|
|
|
@@ -296,11 +296,14 @@ function Toggle({ open, disabled, onClick }: { open: boolean; disabled: boolean;
|
|
|
function RowLinks({ video, runId, }: { video: RawRecord; runId: string }) {
|
|
|
const id = text(video.id, "");
|
|
|
if (!id) return null;
|
|
|
+ // platform content ids (视频号 finder ids) can contain / + = which break path routing;
|
|
|
+ // prefer the clean content_discovery_id for the detail route.
|
|
|
+ const detailId = maybeText(video.content_discovery_id) || id;
|
|
|
const platformUrl = text(video.platform_url, "");
|
|
|
const platformLabel = text(video.platform_label, "原视频");
|
|
|
return (
|
|
|
<span className="wt-links">
|
|
|
- <Link className="wt-link" href={`/runs/${encodeURIComponent(runId)}/videos/${encodeURIComponent(id)}`} onClick={(e) => e.stopPropagation()}>
|
|
|
+ <Link className="wt-link" href={`/runs/${encodeURIComponent(runId)}/videos/${encodeURIComponent(detailId)}`} onClick={(e) => e.stopPropagation()}>
|
|
|
详情
|
|
|
</Link>
|
|
|
{platformUrl ? (
|