@@ -15,9 +15,7 @@ import { ProviderHeaderCard } from './components/ProviderHeaderCard';
1515import { ProviderCategoryList } from './components/ProviderCategoryList' ;
1616import { ProviderResourcePanel } from './components/ProviderResourcePanel' ;
1717import type { ProviderPanelControls } from './components/ProviderResourcePanel' ;
18- import { SponsorQuickStartPanel } from './components/SponsorQuickStartPanel' ;
1918import { ProviderSheet , type ProviderSheetHandle } from './sheets/ProviderSheet' ;
20- import { APIKEY_FUN_DISPLAY_NAME } from './sponsor' ;
2119import { isMultiProtocolSponsorBrand } from './sponsorDefinitions' ;
2220import { useProviderWorkbench } from './useProviderWorkbench' ;
2321import {
@@ -43,6 +41,17 @@ interface ProvidersWorkbenchPageProps {
4341 fixedBrand ?: ProviderBrand ;
4442}
4543
44+ // CPA 不展示上游内置的商业推广供应商。它们会把固定注册地址和服务地址带入管理页,
45+ // 与“由用户自行填写任意兼容供应商”的产品定位冲突;过滤必须放在页面数据入口,
46+ // 避免它们因同步上游后再次出现在提供商列表或“快速填入”分组中。
47+ const PROMOTIONAL_PROVIDER_BRANDS : ReadonlySet < ProviderBrand > = new Set ( [
48+ 'apikeyFun' ,
49+ 'code0' ,
50+ 'fennoAI' ,
51+ 'qiniuCloud' ,
52+ 'claudeApi' ,
53+ ] ) ;
54+
4655const formatDateTime = ( iso : string , locale ?: string ) => {
4756 try {
4857 const date = new Date ( iso ) ;
@@ -149,10 +158,14 @@ export function ProvidersWorkbenchPage({ fixedBrand }: ProvidersWorkbenchPagePro
149158
150159 const allGroups = useMemo ( ( ) => workbench . snapshot ?. groups ?? [ ] , [ workbench . snapshot ] ) ;
151160 const groups = useMemo (
152- ( ) =>
153- fixedBrand
154- ? allGroups . filter ( ( group ) => group . id === fixedBrand )
155- : allGroups . filter ( ( group ) => group . id !== 'apikeyFun' ) ,
161+ ( ) => {
162+ const visibleGroups = allGroups . filter (
163+ ( group ) => ! PROMOTIONAL_PROVIDER_BRANDS . has ( group . id )
164+ ) ;
165+ return fixedBrand
166+ ? visibleGroups . filter ( ( group ) => group . id === fixedBrand )
167+ : visibleGroups ;
168+ } ,
156169 [ allGroups , fixedBrand ]
157170 ) ;
158171 const firstVisibleBrand = groups [ 0 ] ?. id ?? fixedBrand ?? 'gemini' ;
@@ -270,21 +283,9 @@ export function ProvidersWorkbenchPage({ fixedBrand }: ProvidersWorkbenchPagePro
270283 ( ) => groups . filter ( ( g ) => g . resources . length > 0 ) . length ,
271284 [ groups ]
272285 ) ;
273- const quickStartResource = useMemo (
274- ( ) =>
275- fixedBrand === 'apikeyFun' && activeGroup ? ( activeGroup . resources [ 0 ] ?? null ) : null ,
276- [ activeGroup , fixedBrand ]
277- ) ;
278-
279286 const updatedAtLabel = workbench . snapshot
280287 ? formatDateTime ( workbench . snapshot . fetchedAt , i18n . language )
281288 : t ( 'providersPage.modelCatalog.notLoaded' ) ;
282- const headerTitle =
283- fixedBrand === 'apikeyFun'
284- ? quickStartResource
285- ? APIKEY_FUN_DISPLAY_NAME
286- : t ( 'nav.quick_start' )
287- : undefined ;
288289
289290 const openCreate = useCallback ( ( ) => {
290291 const brand = activeBrand ;
@@ -378,7 +379,6 @@ export function ProvidersWorkbenchPage({ fixedBrand }: ProvidersWorkbenchPagePro
378379 return (
379380 < div className = { styles . page } >
380381 < ProviderHeaderCard
381- title = { headerTitle }
382382 totalActive = { 0 }
383383 totalResources = { 0 }
384384 providerFamilies = { 0 }
@@ -388,7 +388,6 @@ export function ProvidersWorkbenchPage({ fixedBrand }: ProvidersWorkbenchPagePro
388388 onNew = { ( ) => { } }
389389 isNewDisabled
390390 showNewAction = { ! fixedBrand }
391- showSummary = { fixedBrand !== 'apikeyFun' }
392391 />
393392 </ div >
394393 ) ;
@@ -397,17 +396,14 @@ export function ProvidersWorkbenchPage({ fixedBrand }: ProvidersWorkbenchPagePro
397396 return (
398397 < div className = { styles . page } >
399398 < ProviderHeaderCard
400- title = { headerTitle }
401399 totalActive = { totalActive }
402400 totalResources = { totalResources }
403401 providerFamilies = { providerFamilies }
404402 updatedAtLabel = { updatedAtLabel }
405403 isFetching = { workbench . isFetching }
406404 isNewDisabled = { disableMutations }
407405 showNewAction = { ! fixedBrand }
408- showSummary = { fixedBrand !== 'apikeyFun' }
409406 newLabel = { t ( 'providersPage.actions.new' ) }
410- variant = { fixedBrand === 'apikeyFun' ? 'quickStart' : undefined }
411407 onRefresh = { ( ) => void handleRefresh ( ) }
412408 onNew = { openCreate }
413409 />
@@ -433,29 +429,21 @@ export function ProvidersWorkbenchPage({ fixedBrand }: ProvidersWorkbenchPagePro
433429 } }
434430 />
435431 ) : null }
436- { fixedBrand === 'apikeyFun' ? (
437- < SponsorQuickStartPanel
438- resource = { quickStartResource }
439- workbench = { workbench }
440- mutationDisabled = { disableMutations }
441- />
442- ) : (
443- < ProviderResourcePanel
444- group = { activeGroup }
445- filter = { filter }
446- onFilterChange = { ( value ) => updateActiveFilterState ( { filter : value } ) }
447- filteredResources = { visibleResources }
448- selectedId = { sheetState . open ? ( sheetState . resource ?. id ?? null ) : null }
449- disableMutations = { disableMutations }
450- usageByProvider = { usageByProvider }
451- toolbarControls = { toolbarControls }
452- onView = { openView }
453- onEdit = { openEdit }
454- onDelete = { handleDelete }
455- onToggleDisabled = { handleToggleDisabled }
456- onCreate = { openCreate }
457- />
458- ) }
432+ < ProviderResourcePanel
433+ group = { activeGroup }
434+ filter = { filter }
435+ onFilterChange = { ( value ) => updateActiveFilterState ( { filter : value } ) }
436+ filteredResources = { visibleResources }
437+ selectedId = { sheetState . open ? ( sheetState . resource ?. id ?? null ) : null }
438+ disableMutations = { disableMutations }
439+ usageByProvider = { usageByProvider }
440+ toolbarControls = { toolbarControls }
441+ onView = { openView }
442+ onEdit = { openEdit }
443+ onDelete = { handleDelete }
444+ onToggleDisabled = { handleToggleDisabled }
445+ onCreate = { openCreate }
446+ />
459447 </ div >
460448
461449 { ! fixedBrand ? (
0 commit comments