diff --git a/app/globals.css b/app/globals.css index 6e85ffe..4b9a21d 100644 --- a/app/globals.css +++ b/app/globals.css @@ -230,7 +230,7 @@ select:focus, input:focus, textarea:focus { border-color: var(--blue); box-shado .section-heading > p { max-width: 480px; margin: 0; color: #6e7a8e; line-height: 1.8; font-size: 13px; } .catalog-summary { display: grid; - grid-template-columns: repeat(7, 1fr); + grid-template-columns: repeat(8, 1fr); gap: 9px; margin-bottom: 22px; } @@ -451,6 +451,7 @@ footer > span { color: #9aa4b2; font-size: 10px; } .hero-copy { max-width: 760px; } .selector-shell { width: min(100%, 720px); } .how-section { gap: 45px; } + .catalog-summary { grid-template-columns: repeat(4, 1fr); } .catalog-grid { grid-template-columns: repeat(2, 1fr); } .catalog-image-button { height: 260px; } } @@ -475,7 +476,6 @@ footer > span { color: #9aa4b2; font-size: 10px; } .capability-strip div:nth-child(2) { border-right: 0; } .section-heading { align-items: flex-start; flex-direction: column; gap: 18px; } .catalog-summary { grid-template-columns: repeat(2, 1fr); } - .catalog-summary button:last-child { grid-column: 1 / -1; } .catalog-toolbar { top: 64px; } .catalog-grid { grid-template-columns: 1fr; gap: 15px; } .catalog-image-button { height: 280px; } diff --git a/app/page.tsx b/app/page.tsx index bf78894..acdad94 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -39,6 +39,7 @@ const CATALOG_CATEGORIES = [ "全金属舵机", "大扭矩舵机", "积木舵机", + "静音舵机", "标准齿轮箱", "翻盖电机", ]; @@ -63,6 +64,8 @@ function getFeaturedSpecs(product: CatalogProduct) { } const SERVO_CATEGORIES = ["标准舵机", "异形舵机", "全金属舵机", "大扭矩舵机", "积木舵机"]; +const SILENT_SERVO_CATEGORY = "静音舵机"; +const SELECTOR_CATEGORIES = [...SERVO_CATEGORIES, SILENT_SERVO_CATEGORY]; const TORQUE_MIN = 0.09; const TORQUE_MAX = 920; const TORQUE_PRESETS = [0.1, 1, 5, 20, 100, 300, 920]; @@ -80,6 +83,17 @@ function parseNumbers(value = "") { return (value.match(/\d+(?:\.\d+)?/g) ?? []).map(Number); } +function isSilentServo(product: CatalogProduct) { + return SERVO_CATEGORIES.includes(product.category) && + [product.name, ...Object.values(product.specs)].join(" ").includes("静音"); +} + +const SILENT_SERVO_COUNT = CATALOG_PRODUCTS.filter(isSilentServo).length; + +function getCategoryCount(category: string) { + return category === SILENT_SERVO_CATEGORY ? SILENT_SERVO_COUNT : CATALOG_COUNTS[category]; +} + function inferWeight(product: CatalogProduct) { const listedWeight = parseNumbers(product.specs["重量"])[0]; if (Number.isFinite(listedWeight)) return listedWeight; @@ -152,6 +166,7 @@ const SELECTOR_PRODUCTS = CATALOG_PRODUCTS.filter((product) => voltageMin: voltageValues[0] ?? ratedVoltage, voltageMax: voltageValues.at(-1) ?? ratedVoltage, weight: inferWeight(product), + isSilent: isSilentServo(product), gear: classifyGear(product.specs["齿轮材质"]), angle: product.specs["可操作角度"] ?? product.specs["操作角度范围"] ?? "", control, @@ -186,8 +201,9 @@ function getMatches(requirements: Requirements) { return SELECTOR_PRODUCTS.map((product) => { let score = 20; const reasons: string[] = []; - const categoryOk = - requirements.category === "全部舵机" || requirements.category === product.category; + const categoryOk = requirements.category === "全部舵机" || + requirements.category === product.category || + (requirements.category === SILENT_SERVO_CATEGORY && product.isSilent); const torqueOk = product.torque >= requirements.torque; const voltageOk = requirements.voltage === product.ratedVoltage; const weightOk = @@ -275,7 +291,9 @@ export default function Home() { const query = catalogQuery.trim().toLowerCase(); return CATALOG_PRODUCTS.filter((product) => { const matchesCategory = - catalogCategory === "全部产品" || product.category === catalogCategory; + catalogCategory === "全部产品" || + product.category === catalogCategory || + (catalogCategory === SILENT_SERVO_CATEGORY && isSilentServo(product)); if (!matchesCategory) return false; if (!query) return true; const haystack = [ @@ -427,9 +445,9 @@ export default function Home() { onChange={(event) => update("category", event.target.value)} > - {SERVO_CATEGORIES.map((category) => ( + {SELECTOR_CATEGORIES.map((category) => ( ))} @@ -742,7 +760,7 @@ export default function Home() {

官方产品目录 · 2026.06

完整收录280个产品型号

-

覆盖标准、异形、全金属、大扭矩和积木舵机,以及标准齿轮箱与翻盖电机。参数来自高徳乐官方产品型号表。

+

覆盖标准、异形、静音、全金属、大扭矩和积木舵机,以及标准齿轮箱与翻盖电机。参数来自高徳乐官方产品型号表。

@@ -756,7 +774,7 @@ export default function Home() { setCatalogLimit(24); }} > - {CATALOG_COUNTS[category]} + {getCategoryCount(category)} {category} ))}