// ===== page-trial-report.jsx =====
// 免费试用:粘贴 100-2000 字文本 → LLM 实时分析前 1000 字 → 展示部分结果 + 锁定剩余 + CTA
const { useState: useSTR, useEffect: useETR, useRef: useRTR } = React;
const SAMPLE_TEXT = '在新时代的背景下,我们要充分认识到文化遗产保护的重要性。值得注意的是,文化遗产数字化保护是一项系统性工程,需要多方协同。综上所述,加强文化遗产数字化保护,对于传承中华优秀传统文化具有重要意义,能够有效推动文化事业的高质量发展。本研究将从多个维度对该问题进行深入剖析,构建系统化的理论分析框架,为后续研究提供有益参考。本文采用文献研究法、问卷调查法、案例分析法相结合的研究方法,全方位、多层次地剖析青年消费者品牌忠诚度的形成机制。从总体上看,研究表明,社交媒体互动对品牌忠诚度具有显著的正向影响。具体而言,互动频率、互动质量与互动深度均发挥着积极的促进作用。';
const LEVEL_META_TRIAL = {
low: { label: '低风险', tone: 'ok', desc: '前 1000 字呈现明显的人类写作特征。可以放心继续写作。' },
mid: { label: '中风险', tone: 'warn', desc: '前 1000 字部分段落呈现可疑特征,建议改写后再做全文检测。' },
'mid-high': { label: '中高风险', tone: 'bad', desc: '前 1000 字已发现明显 AI 生成痕迹,建议改写后再做全文检测。' },
high: { label: '高风险', tone: 'bad', desc: '前 1000 字呈现强烈的 AI 生成统计特征,建议系统性改写。' },
};
function TrialReportPage({ navigate }) {
// States: idle → analyzing → result → error
const [stage, setStage] = useSTR('idle');
const [text, setText] = useSTR('');
const [result, setResult] = useSTR(null);
const [error, setError] = useSTR(null);
const submit = async () => {
if (text.trim().length < 100) return;
setStage('analyzing');
setError(null);
try {
const data = await window.API.trial(text);
setResult(data);
setStage('result');
setTimeout(() => window.scrollTo({ top: 200, behavior: 'smooth' }), 50);
} catch (err) {
console.error('trial failed', err);
setError(err);
setStage('error');
}
};
const useSample = () => setText(SAMPLE_TEXT);
const reset = () => { setStage('idle'); setResult(null); setError(null); };
return (
{/* idle: 输入区 */}
{stage === 'idle' && (
)}
{/* analyzing */}
{stage === 'analyzing' &&
}
{/* error */}
{stage === 'error' && (
试用失败
{error?.message || '检测引擎暂时不可用,请稍后重试'}
)}
{/* result */}
{stage === 'result' && result && (
)}
);
}
function TrialInputCard({ text, setText, onSubmit, useSample }) {
const len = text.trim().length;
const ok = len >= 100 && len <= 2000;
return (
FREE TRIAL
粘贴一段你写的文本 免费检测
直接粘贴 100–2000 字到下方,30 秒内拿到 AIGC 概率初判 + 风险标记。无需注册,结果即时生成。
);
}
function TrialAnalyzing() {
return (
检测引擎分析中
正在与 8 大主流模型指纹比对...
{['加载文本预处理流水线', '计算困惑度与突发性指标', '比对 LLM 高频模板词', '生成段落级风险评估'].map((s, i) => (
{s}
))}
);
}
function TrialResultView({ result, onRetry, navigate }) {
const meta = LEVEL_META_TRIAL[result.risk_level] || LEVEL_META_TRIAL.mid;
const aigc = Math.round(result.aigc_probability);
const dimsRaw = result.dimensions || {};
const dims = {
perplexity: Math.round(dimsRaw.perplexity || 0),
burstiness: Math.round(dimsRaw.burstiness || 0),
cliche: Math.round(dimsRaw.cliche || 0),
regularity: Math.round(dimsRaw.regularity || 0),
voice: Math.round(dimsRaw.voice || 0),
};
const lockedModels = [
{ name: 'ChatGPT (GPT-4)', match: 64 },
{ name: 'DeepSeek', match: 58 },
{ name: 'Claude', match: 41 },
{ name: '文心一言', match: 29 },
{ name: '通义千问', match: 24 },
{ name: '豆包', match: 17 },
];
const teaser = result.teaser || {};
const hiddenCount = teaser.hidden_paragraphs || 0;
return (
<>
试用结果
·
前 {result.sample_word_count} 字
试用版报告 · 已分析 {result.sample_paragraphs.length} 段
{hiddenCount > 0 ? `本检测共发现 ${result.sample_paragraphs.length + hiddenCount} 个段落,` : ''}
上传完整论文可启用全部 5 维度模型 + 模型指纹比对 + 改写建议。
}>重新试用
{/* Score visible */}
试用估算 · {meta.label}
{meta.label}
{meta.desc}
{hiddenCount > 0 && }
{/* Visible paragraphs */}
} />
{result.sample_paragraphs.length > 0 ? (
) : (
本段未识别出明显段落特征
)}
{/* Locked sections */}
{MOCK.DIMENSIONS.map(d => (
))}
{Array.from({ length: 5 }).map((_, i) => (
))}
{hiddenCount > 0 ? <>本检测共 {hiddenCount + result.sample_paragraphs.length} 段
解锁完整报告> : <>解锁全文 5 维度分析
模型指纹与改写建议>}
完整报告含全文段落分析、模型指纹匹配、改写建议
检测完成后 24h 自动删除 · 30 分钟超时全额退款
{[
{ icon:
, label: '5 维度雷达图' },
{ icon:
, label: '8 大模型指纹' },
{ icon:
, label: '全段改写建议' },
].map(b => (
{b.icon}
{b.label}
))}
试用版说明:试用报告基于前 1000 字的初步统计,仅供方法演示参考。完整报告启用全部 5 维度统计模型与全文段落级标记,结果会更精确。
检测结果仅供作者自查改进使用,不构成最终学术鉴定。请以所在机构官方查重系统结果为准。
>
);
}
function MetricChipT({ label, value, tone = 'ink' }) {
const tones = { ink: 'bg-ink-50', ok: 'bg-ok-50', brand: 'bg-brand-50' };
return (
);
}
function SectionTitleT({ n, title, subtitle, extra }) {
return (
{n} · SECTION
{title}
{subtitle &&
{subtitle}
}
{extra}
);
}
window.TrialReportPage = TrialReportPage;