'use client'; import Link from 'next/link'; import { useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import { ArrowLeft, Pencil, X } from 'lucide-react'; import { useAuth } from '@/components/providers/auth-provider'; import { Button } from '@/components/ui/button'; import { previewOriginErrorPageHTML } from '@/lib/openflare/default-origin-error-page-html'; import { OptionService } from '@/lib/services/openflare'; import { ErrorPageGate } from '../components/error-page-gate'; import { mapOptionsToFields, OPTIONS_QUERY_KEY, optionsToMap, } from '../components/shared'; /** * 全屏「真实预览」:覆盖主布局,按访客视角展示替换后的 HTML。 */ export default function ErrorPagePreviewPage() { const { user } = useAuth(); const optionsQuery = useQuery({ queryKey: OPTIONS_QUERY_KEY, queryFn: () => OptionService.list(), enabled: !!user?.is_admin, }); const html = useMemo(() => { if (!optionsQuery.data) return ''; return mapOptionsToFields(optionsToMap(optionsQuery.data)).html; }, [optionsQuery.data]); const previewSrcDoc = useMemo(() => previewOriginErrorPageHTML(html), [html]); return (

错误页真实预览

{'{{status}}'}→502 · {'{{host}}'}→example.com · 全屏展示