diff --git a/core/provider_presets.go b/core/provider_presets.go index 6efa30f..d9a31da 100644 --- a/core/provider_presets.go +++ b/core/provider_presets.go @@ -32,7 +32,8 @@ type ProviderPreset struct { DescriptionZh string `json:"description_zh,omitempty"` Features []string `json:"features,omitempty"` Thinking string `json:"thinking,omitempty"` - Tier int `json:"tier"` // sponsor ranking: lower = higher priority + Tier int `json:"tier"` // sponsor ranking: lower = higher priority + Featured bool `json:"featured,omitempty"` // show a star badge when true Website string `json:"website,omitempty"` } diff --git a/web/src/api/providers.ts b/web/src/api/providers.ts index a842ead..8b8f0ad 100644 --- a/web/src/api/providers.ts +++ b/web/src/api/providers.ts @@ -37,6 +37,7 @@ export interface ProviderPreset { features?: string[]; thinking?: string; tier: number; + featured?: boolean; website?: string; } diff --git a/web/src/pages/Providers/ProviderList.tsx b/web/src/pages/Providers/ProviderList.tsx index bb70e48..774aa24 100644 --- a/web/src/pages/Providers/ProviderList.tsx +++ b/web/src/pages/Providers/ProviderList.tsx @@ -1,7 +1,7 @@ import { useEffect, useState, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { - Plug, Plus, Trash2, Pencil, ExternalLink, Sparkles, X, Eye, EyeOff, + Plug, Plus, Trash2, Pencil, ExternalLink, Star, Sparkles, X, Eye, EyeOff, } from 'lucide-react'; import { Card, Button, Badge, Modal, Input } from '@/components/ui'; import { @@ -268,6 +268,11 @@ function PresetGrid({ const added = existingNames.has(p.name); return ( + {p.featured && ( +
+ +
+ )}

{p.display_name || p.name}