import { useState } from "react"; import { useNavigate, useParams } from "react-router"; import { ArrowLeft, Sparkles, Send, Eye, Check, Globe, Database, Boxes } from "lucide-react"; import { toast } from "sonner"; import { Button } from "../components/ui/button"; import { Card } from "../components/ui/card"; import { AiBadge } from "../components/shared/common"; import { sourcingRecords, projects } from "../data/mock"; type SourceKey = "all" | "internet" | "srm" | "pool"; const SOURCES: { key: SourceKey; label: string; icon: any; desc: string }[] = [ { key: "all", label: "全部来源", icon: Sparkles, desc: "AI 综合多渠道寻源" }, { key: "internet", label: "互联网寻源", icon: Globe, desc: "公共资源交易平台等" }, { key: "srm", label: "SRM 库寻源", icon: Database, desc: "集团合格供方库" }, { key: "pool", label: "临时供应商池", icon: Boxes, desc: "STP 平台临时池" }, ]; // 依据记录派生来源(示例):按序分配到三类来源 function sourceOf(index: number): Exclude { return (["internet", "srm", "pool"] as const)[index % 3]; } const SOURCE_LABEL: Record, string> = { internet: "互联网", srm: "SRM 库", pool: "临时池", }; export function SmartSourcing() { const navigate = useNavigate(); const { id } = useParams(); const project = projects.find((p) => p.id === id) ?? projects[0]; const [tab, setTab] = useState("all"); const records = sourcingRecords.map((r, i) => ({ ...r, source: sourceOf(i) })); const filtered = tab === "all" ? records : records.filter((r) => r.source === tab); const viewed = filtered.filter((r) => r.viewed).length; const registered = filtered.filter((r) => r.registered).length; return (

AI 智慧寻源结果

{/* 关联项目 */}

关联项目:{project.name} · {project.code}

{/* 三类寻源来源 */}
{SOURCES.map((s) => { const Icon = s.icon; const active = tab === s.key; const count = s.key === "all" ? records.length : records.filter((r) => r.source === s.key).length; return ( ); })}
{[ { l: "AI 外发邀请", v: filtered.length, c: "var(--primary)" }, { l: "已查看回执", v: viewed, c: "#f59e0b" }, { l: "已报名", v: registered, c: "#14b8a6" }, ].map((s) => (
{s.l}
{s.v}
))}

主动外发邀请记录

{SOURCES.find((s) => s.key === tab)?.label}
{filtered.map((r) => ( ))}
目标供应商 寻源来源 外发渠道 外发时间 查看回执 是否报名 操作
{r.supplier} {SOURCE_LABEL[r.source]} {r.channel} {r.sentAt} {r.viewed ? ( 已查看 ) : ( 待查看 )} {r.registered ? 已报名 : 未报名}
小滨已结合本项目采购品类与历史成交,从互联网平台、集团 SRM 合格供方库与 STP 临时供应商池三类来源综合寻源并外发邀请,未查看回执的供应商已为您高亮提醒。
); }