refactor(web): simplify models page header

This commit is contained in:
2026-05-11 11:02:08 +08:00
parent 9243db2787
commit ec87816c95
2 changed files with 27 additions and 54 deletions
+5 -28
View File
@@ -1,5 +1,5 @@
import { useMemo, useState } from 'react';
import { Boxes, Search, Sparkles } from 'lucide-react';
import { Boxes, Search } from 'lucide-react';
import type {
BaseModelCatalogItem,
BillingConfig,
@@ -7,7 +7,6 @@ import type {
PlatformModel,
} from '@easyai-ai-gateway/contracts';
import type { ConsoleData } from '../app-state';
import { PageHeader } from '../components/PageHeader';
import { Badge, Card, CardContent, Input } from '../components/ui';
import { stableModelAlias } from './admin/platform-form';
@@ -146,15 +145,12 @@ export function ModelsPage(props: { data: ConsoleData }) {
const filteredModels = useMemo(() => {
const normalizedQuery = query.trim().toLowerCase();
return sourceModels.filter((model) => {
const providerInfo = providerMap.get(model.providerKey);
const matchedProvider = provider === 'all' || model.providerKey === provider;
const matchedCapability = modelMatchesCapability(model.modelType, capability);
const matchedQuery = [
model.modelName,
model.modelAlias,
model.displayName,
providerInfo?.displayName,
providerInfo?.code,
]
.filter(Boolean)
.join(' ')
@@ -162,9 +158,7 @@ export function ModelsPage(props: { data: ConsoleData }) {
.includes(normalizedQuery);
return matchedProvider && matchedCapability && matchedQuery;
});
}, [capability, provider, providerMap, query, sourceModels]);
const selectedProvider = provider === 'all' ? undefined : providerMap.get(provider);
}, [capability, provider, query, sourceModels]);
return (
<div className="modelsPage">
@@ -184,31 +178,14 @@ export function ModelsPage(props: { data: ConsoleData }) {
</aside>
<main className="modelsContent">
<PageHeader
eyebrow="Models"
title="模型"
description={`${sourceModels.length} 个模型,当前显示 ${filteredModels.length}`}
/>
<div className="modelSearchBar">
<div className="searchField">
<div className="modelsToolbar">
<p> {sourceModels.length} {filteredModels.length} </p>
<div className="searchField modelHeaderSearch">
<Search size={16} />
<Input value={query} onChange={(event) => setQuery(event.target.value)} placeholder="模型名称模糊搜索" />
</div>
</div>
<section className="providerHero">
{selectedProvider ? <ProviderIcon provider={selectedProvider} /> : (
<div className="providerLogo">
<Sparkles size={22} />
</div>
)}
<div>
<strong>{selectedProvider?.displayName ?? '全部模型厂商'}</strong>
<span>{selectedProvider ? `${selectedProvider.code} · ${selectedProvider.providerType}` : `${sourceProviders.length} 个厂商来自 integration-platform 目录`}</span>
</div>
<Badge variant="success">{filteredModels.length} </Badge>
</section>
<section className="modelCards">
{filteredModels.map((model) => (
<ModelCard model={model} provider={providerMap.get(model.providerKey)} key={model.id} />