feat: deliver Xingbang four-agent v2 workspace

This commit is contained in:
NathanAlex7
2026-09-08 02:49:06 +08:00
parent 58fb2854dc
commit b5073c3841
32 changed files with 2061 additions and 12 deletions
+12
View File
@@ -0,0 +1,12 @@
"use client";
import {useEffect,useState} from "react";
import {ArrowRight,RefreshCw,ShieldCheck} from "lucide-react";
import AgentNav,{projectLink} from "@/components/xingbang/AgentNav";
import "../data-access/workspace.css";
export default function XingbangWorkspace(){
const [data,setData]=useState<any[]>([]),[search,setSearch]=useState(""),[error,setError]=useState(""),[loading,setLoading]=useState(true);
async function load(){setLoading(true);setError("");try{const token=sessionStorage.getItem("xingbang-access-token");const r=await fetch("/api/risk-agent/workspace/projects",{headers:token?{Authorization:`Bearer ${token}`}:{}});const d=await r.json();if(!r.ok)throw Error(d.detail);setData(d.projects);}catch(e:any){setError(e.message);}finally{setLoading(false);}}
useEffect(()=>{load();},[]);
return <div className="ra-app"><AgentNav active="overview"/><main className="xb-overview"><div className="xb-overview-heading"><div><h1>兴邦金租 · 项目工作台</h1><p>项目总览</p></div><a className="ra-button primary" href="/data-access?view=run"><ShieldCheck size={16}/>发起风险研判</a></div>{error&&<div role="alert" className="ra-alert error">{error}<a href="/data-access">身份设置</a></div>}<div className="xb-overview-stat"><span><strong>{data.length}</strong>项目</span><span><strong>{data.filter(p=>p.coordination&&p.coordination.stage!=="已完成").length}</strong>评审在办</span><span><strong>{data.filter(p=>p.collateral?.stale).length}</strong>核验待更新</span><span><strong>{data.filter(p=>p.report?.status==="final").length}</strong>报告已定稿</span></div><div className="xb-overview-tools"><input aria-label="搜索项目" placeholder="项目编号 / 客户名称" value={search} onChange={e=>setSearch(e.target.value)}/><button className="ra-button" title="刷新项目" disabled={loading} onClick={load}><RefreshCw size={15}/></button></div><div className="xb-table-wrap"><table className="xb-project-table"><thead><tr><th>项目 / 客户</th><th>01 风险研判</th><th>02 报告与经验</th><th>03 评审协同</th><th>04 租赁物与增信</th></tr></thead><tbody>{data.filter(p=>(p.project_id+" "+p.risk?.customer).toLowerCase().includes(search.toLowerCase())).map(p=><tr key={p.project_id}><td><b>{p.project_id}</b><small>{p.risk?.customer||"客户资料待接入"}</small></td><td><a href={projectLink("/data-access",p.project_id)}>{p.risk?`${p.risk.findings} 项关注`:"开始研判"}<ArrowRight size={12}/></a><small>{p.risk?.time?new Date(p.risk.time).toLocaleString():"暂无快照"}</small></td><td><a href={projectLink("/report-workbench",p.project_id)}>{p.report?(p.report.status==="final"?"已定稿":"待复核草稿"):"建立报告"}<ArrowRight size={12}/></a><small>{p.report?`版本 ${p.report.version}`:"尚未建立"}</small></td><td><a href={projectLink("/review-workbench",p.project_id)}>{p.coordination?.stage||"接入评审"}<ArrowRight size={12}/></a><small>{p.coordination?`${p.coordination.owner} · ${p.coordination.open_tasks} 项补件`:"尚未分配"}</small></td><td><a href={projectLink("/collateral-workbench",p.project_id)}>{!p.collateral?"开始核验":p.collateral.stale?"需重新核验":`${p.collateral.open_checks} 项待落实`}<ArrowRight size={12}/></a><small>{p.collateral?.has_result?"已保存核验快照":"尚无核验结果"}</small></td></tr>)}</tbody></table></div>{!data.length&&<div className="ra-empty">{loading?"正在读取项目…":"暂无项目研判记录"}</div>}</main></div>;
}