refactor(web): simplify models page header
This commit is contained in:
@@ -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} />
|
||||
|
||||
Reference in New Issue
Block a user