"use client"; import { FormEvent, useMemo, useState } from "react"; import { CATALOG_COUNTS, CATALOG_PRODUCTS, type CatalogProduct, } from "./catalog-data"; type Gear = "塑料齿" | "半金属齿" | "金属齿"; type Product = { id: string; name: string; subtitle: string; weight: number; torque: number; speed: number; voltageMin: number; voltageMax: number; gear: Gear; price: number; size: string; image: string; applications: string[]; code: string; }; type Requirements = { application: string; torque: number; voltage: number; weightLimit: number; gear: "不限" | Gear; annualVolume: string; currentModel: string; painPoint: string; }; const PRODUCTS: Product[] = [ { id: "17g", name: "1.7克超微型舵机", subtitle: "极致轻量,适合微型结构", weight: 1.7, torque: 0.09, speed: 0.12, voltageMin: 2.7, voltageMax: 5, gear: "塑料齿", price: 30, size: "13.40 × 6.15 × 16.00 mm", image: "/products/servo-17g.png", applications: ["AI毛绒", "智能玩具", "微型机器人", "云台/航模"], code: "4.A.01.A0060", }, { id: "2g", name: "2克塑料齿舵机", subtitle: "快速响应的微型执行方案", weight: 2, torque: 0.4, speed: 0.08, voltageMin: 3.5, voltageMax: 6, gear: "塑料齿", price: 14.4, size: "16.25 × 8.30 × 16.90 mm", image: "/products/servo-2g.jpg", applications: ["AI毛绒", "智能玩具", "微型机器人", "云台/航模"], code: "4.A.01.A0004", }, { id: "37g", name: "3.7克塑料齿舵机", subtitle: "轻量玩具与科创教育通用", weight: 3.7, torque: 0.8, speed: 0.09, voltageMin: 3.5, voltageMax: 6, gear: "塑料齿", price: 14.7, size: "20.40 × 8.70 × 20.32 mm", image: "/products/servo-37g.jpg", applications: ["AI毛绒", "智能玩具", "教育/积木", "云台/航模"], code: "4.A.01.A0003", }, { id: "9p", name: "9克塑料齿舵机", subtitle: "成本优先的标准轻载方案", weight: 9, torque: 2.1, speed: 0.11, voltageMin: 4.8, voltageMax: 6, gear: "塑料齿", price: 13.1, size: "23.00 × 12.36 × 28.50 mm", image: "/products/servo-9g-plastic.jpg", applications: ["智能玩具", "教育/积木", "微型机器人", "云台/航模"], code: "4.A.01.A0009", }, { id: "9h", name: "9克半金属齿舵机", subtitle: "耐久与成本兼顾", weight: 9, torque: 3.2, speed: 0.13, voltageMin: 4.8, voltageMax: 6, gear: "半金属齿", price: 18, size: "23.00 × 12.36 × 28.50 mm", image: "/products/servo-9g-hybrid.jpg", applications: ["智能玩具", "教育/积木", "微型机器人", "云台/航模"], code: "4.A.01.B0001", }, { id: "9m", name: "9克全金属齿舵机", subtitle: "高频使用与冲击负载优选", weight: 9, torque: 3.2, speed: 0.13, voltageMin: 4.8, voltageMax: 6, gear: "金属齿", price: 28.7, size: "23.00 × 12.36 × 28.50 mm", image: "/products/servo-9g-metal.jpg", applications: ["教育/积木", "微型机器人", "云台/航模", "工业设备"], code: "4.A.01.B0026", }, { id: "17p", name: "17克塑料齿舵机", subtitle: "玩具机构的高性价比选择", weight: 17, torque: 5, speed: 0.1, voltageMin: 4.8, voltageMax: 6, gear: "塑料齿", price: 14.9, size: "28.60 × 13.00 × 31.00 mm", image: "/products/servo-17g-plastic.jpg", applications: ["智能玩具", "教育/积木", "微型机器人"], code: "4.A.01.A0002", }, { id: "17m", name: "17克金属齿舵机", subtitle: "宽电压、高扭矩、耐冲击", weight: 17, torque: 8.8, speed: 0.18, voltageMin: 4.8, voltageMax: 8.4, gear: "金属齿", price: 27.8, size: "28.60 × 13.00 × 31.00 mm", image: "/products/servo-17g-metal.jpg", applications: ["智能玩具", "微型机器人", "云台/航模", "工业设备"], code: "4.A.01.B0007", }, { id: "25p", name: "25克塑料齿舵机", subtitle: "中等负载的经济型方案", weight: 25, torque: 7.5, speed: 0.15, voltageMin: 4.8, voltageMax: 6, gear: "塑料齿", price: 16.4, size: "36.00 × 15.20 × 29.50 mm", image: "/products/servo-25g-plastic.jpg", applications: ["智能玩具", "教育/积木", "微型机器人"], code: "4.A.01.A0001", }, { id: "25m", name: "25克金属齿舵机", subtitle: "中型机器人和高频机构", weight: 25, torque: 8.2, speed: 0.15, voltageMin: 4.8, voltageMax: 8.4, gear: "金属齿", price: 44.7, size: "36.00 × 15.20 × 29.50 mm", image: "/products/servo-25g-metal.jpg", applications: ["微型机器人", "云台/航模", "工业设备"], code: "4.A.01.B0014", }, { id: "37p", name: "37克塑料齿舵机", subtitle: "标准尺寸、大负载经济型", weight: 37, torque: 6.8, speed: 0.22, voltageMin: 4.8, voltageMax: 6, gear: "塑料齿", price: 18.4, size: "40.85 × 20.15 × 39.15 mm", image: "/products/servo-37g-plastic.jpg", applications: ["智能玩具", "微型机器人", "工业设备"], code: "4.A.01.B0015", }, { id: "37h", name: "37克半金属齿舵机", subtitle: "大扭矩与成本的平衡点", weight: 37, torque: 11.2, speed: 0.26, voltageMin: 4.8, voltageMax: 6, gear: "半金属齿", price: 32.9, size: "40.85 × 20.15 × 39.15 mm", image: "/products/servo-37g-hybrid.jpg", applications: ["微型机器人", "云台/航模", "工业设备"], code: "4.A.01.B0005", }, { id: "37m", name: "37克金属齿舵机", subtitle: "24kgf·cm级强劲输出", weight: 37, torque: 24, speed: 0.22, voltageMin: 4.8, voltageMax: 8.4, gear: "金属齿", price: 37.6, size: "40.85 × 20.15 × 39.15 mm", image: "/products/servo-37g-metal.jpg", applications: ["机器人/机械臂", "云台/航模", "工业设备"], code: "4.A.01.B0017", }, ]; const APPLICATIONS = [ { name: "AI毛绒", note: "头部、耳朵、手臂等轻量动作" }, { name: "智能玩具", note: "互动机构、表情和行走结构" }, { name: "教育/积木", note: "STEAM套件与积木动力模块" }, { name: "微型机器人", note: "关节、夹爪和小型机械臂" }, { name: "云台/航模", note: "飞行控制、云台与模型机构" }, { name: "工业设备", note: "控制机构与定制传动组件" }, ]; const CATALOG_CATEGORIES = [ "全部产品", "标准舵机", "异形舵机", "全金属舵机", "大扭矩舵机", "积木舵机", "标准齿轮箱", "翻盖电机", ]; const FEATURED_SPEC_ORDER = [ "堵转扭矩", "额定电压", "电压范围", "信号类型", "通讯方式", "齿轮比", "寿命", "产品尺寸", "外形尺寸", ]; function getFeaturedSpecs(product: CatalogProduct) { return FEATURED_SPEC_ORDER .filter((label) => product.specs[label]) .slice(0, 3) .map((label) => [label, product.specs[label]] as const); } const DEFAULT_REQUIREMENTS: Requirements = { application: "", torque: 2, voltage: 5, weightLimit: 40, gear: "不限", annualVolume: "5000–50000件", currentModel: "", painPoint: "交期", }; function getMatches(requirements: Requirements) { return PRODUCTS.map((product) => { let score = 34; const reasons: string[] = []; if (product.applications.includes(requirements.application)) { score += 18; reasons.push(`适合${requirements.application}场景`); } if (product.torque >= requirements.torque) { score += 25; const margin = Math.round((product.torque / requirements.torque - 1) * 100); reasons.push(`扭矩满足,约有${Math.max(0, margin)}%余量`); } else { score -= 70; } if ( requirements.voltage >= product.voltageMin && requirements.voltage <= product.voltageMax ) { score += 14; reasons.push(`${requirements.voltage}V供电兼容`); } else { score -= 35; } if (product.weight <= requirements.weightLimit) { score += 10; reasons.push(`重量不超过${requirements.weightLimit}g`); } else { score -= 45; } if (requirements.gear === "不限" || requirements.gear === product.gear) { score += requirements.gear === "不限" ? 4 : 12; if (requirements.gear !== "不限") reasons.push(`${product.gear}符合偏好`); } else if (requirements.gear === "金属齿" && product.gear !== "金属齿") { score -= 22; } if (requirements.painPoint === "成本" && product.gear === "塑料齿") score += 8; if (requirements.painPoint === "耐久" && product.gear === "金属齿") score += 8; if (requirements.painPoint === "体积" && product.weight <= 9) score += 8; return { product, score, confidence: Math.max(52, Math.min(96, score)), reasons: reasons.slice(0, 3), }; }).sort((a, b) => b.score - a.score); } function Metric({ label, value }: { label: string; value: string }) { return (
{label} {value}
); } export default function Home() { const [stage, setStage] = useState(0); const [requirements, setRequirements] = useState(DEFAULT_REQUIREMENTS); const [showSampleForm, setShowSampleForm] = useState(false); const [submitted, setSubmitted] = useState(false); const [leadId, setLeadId] = useState(""); const [catalogQuery, setCatalogQuery] = useState(""); const [catalogCategory, setCatalogCategory] = useState("全部产品"); const [catalogLimit, setCatalogLimit] = useState(24); const [selectedCatalogProduct, setSelectedCatalogProduct] = useState(null); const matches = useMemo(() => getMatches(requirements), [requirements]); const topMatches = matches.slice(0, 3); const top = topMatches[0]; const filteredCatalog = useMemo(() => { const query = catalogQuery.trim().toLowerCase(); return CATALOG_PRODUCTS.filter((product) => { const matchesCategory = catalogCategory === "全部产品" || product.category === catalogCategory; if (!matchesCategory) return false; if (!query) return true; const haystack = [ product.name, product.code, product.category, ...Object.keys(product.specs), ...Object.values(product.specs), ] .join(" ") .toLowerCase(); return haystack.includes(query); }); }, [catalogCategory, catalogQuery]); const visibleCatalog = filteredCatalog.slice(0, catalogLimit); const needsEngineer = top.score < 60 || requirements.annualVolume === "50000件以上" || requirements.application === "工业设备"; function update(key: K, value: Requirements[K]) { setRequirements((current) => ({ ...current, [key]: value })); } function reset() { setStage(1); setRequirements(DEFAULT_REQUIREMENTS); setShowSampleForm(false); setSubmitted(false); } function submitLead(event: FormEvent) { event.preventDefault(); const id = `GDL-${new Date().toISOString().slice(5, 10).replace("-", "")}-${String( Date.now(), ).slice(-4)}`; setLeadId(id); setSubmitted(true); } return (
G GAUDELOT 高徳乐 · 精密传动
AI 智能选型 · 工程师复核

3分钟,找到
适合你的舵机

告诉我们应用、扭矩与结构限制。AI从高徳乐标准产品中生成候选方案, 同步准备样品与替代选型摘要。

查看能力范围
280 个产品型号 0.09–920 kgf·cm 48h 方案响应
AI 选型助手
仅作初选建议
{stage === 0 && (
AI

高徳乐选型助手

你好,我来帮你缩小选型范围。

回答3组问题,即可获得推荐型号、匹配理由和样品申请入口。

✓ 无需注册即可查看选型结果
)} {stage > 0 && stage < 4 && (
需求识别 {stage} / 3
{stage === 1 && (

第一步 · 使用场景

舵机将用在什么产品上?

选择最接近的一项,后续可以补充具体结构。

{APPLICATIONS.map((item) => ( ))}
)} {stage === 2 && (

第二步 · 核心参数

需要多大的输出能力?

不确定时可填写估算值,工程师会在送样前复核。

update("torque", Number(event.target.value))} />
0.15101524
)} {stage === 3 && (

第三步 · 项目信息

最后,告诉我采购侧的偏好。

这些信息用于计算推荐优先级,不会改变公开参考价。

齿轮偏好
{(["不限", "塑料齿", "半金属齿", "金属齿"] as const).map((gear) => ( ))}
)}
)} {stage === 4 && top && (

AI 初选结果

找到 {topMatches.length} 个候选方案

{top.product.name} 首选推荐
匹配度{top.confidence}%

{top.product.code}

{top.product.name}

{top.product.subtitle}

    {top.reasons.map((reason) =>
  • ✓ {reason}
  • )}
商城参考价 ¥{top.product.price.toFixed(1)} / 只 · 批量价需确认
{needsEngineer && (
工程师复核

你的项目包含高用量、工业场景或边界参数,系统已标记为优先人工复核。

)}
{topMatches.slice(1).map((match) => (
{match.product.name}
{match.confidence}% 匹配

{match.product.name}

{match.product.torque} kgf·cm · {match.product.gear} · ¥{match.product.price.toFixed(1)}

))}
{!showSampleForm && (
)} {showSampleForm && !submitted && (

样品申请

留下项目联系方式

演示版会生成一张线索卡;正式版可接入CRM、企微或商城订单。