'use client'; import {useEffect,useState} from 'react'; const LABEL:Record={advance:'建议推进',supplement:'建议补件',stop:'暂不推进',insufficient_information:'信息不足'}; export default function MeetingFeedbackPanel({project,send}:any){ const [report,setReport]=useState(null),[error,setError]=useState(''),[busy,setBusy]=useState(false); async function load(){setBusy(true);setError('');try{setReport(await send('GET',`/library/projects/${encodeURIComponent(project.id)}/feedback`));}catch(e:any){setError(e.message);}finally{setBusy(false);}} useEffect(()=>{setReport(null);load();},[project.id]); return
MEETING FEEDBACK

预审建议,后来是否真的通过?

只比较会议之前已完成的冻结预审。正式结果需关联材料版本并确认通过/否决口径;更正、暂缓和未送审单列。

{busy&&

读取冻结预审与会议结果…

}{error&&

{error}

}{report&&<>
有效对照样本{report.observed}
建议推进组{report.advance_group.count}
推进组实际通过占比{report.advance_group.rate===null?'待积累':`${(report.advance_group.rate*100).toFixed(1)}%`}
排除记录{report.excluded.length}

{report.note}

{!report.rows.length&&

尚无符合口径的反馈样本。完成预审后,在下方登记会议结果、会议时间与实际审议的材料版本,再刷新这里。

}
    {report.rows.map((r:any)=>
  • {LABEL[r.recommendation]||r.recommendation} → {r.approved?'会议通过':'会议否决'}{r.divergence&&' · 优先复盘分歧'}

    运行 {r.run_id} · 会议 {r.meeting_id} · 方案 {r.plan_ref?.id}@{r.plan_ref?.version} · {r.data_domain==='demo'?'模拟域':'真实域'}

  • )}
查看排除原因({report.excluded.length})
    {report.excluded.map((r:any)=>
  • {r.reason} · {r.outcome_id}
  • )}
}
; }