Merge pull request #336 from liang09255/fix-switch-0502

This commit is contained in:
Jianwu Huang
2026-05-05 14:32:22 +08:00
committed by GitHub
5 changed files with 44 additions and 33 deletions

View File

@@ -4,47 +4,51 @@ import styles from './index.module.css'
import { useNavigate, useParams } from 'react-router-dom' import { useNavigate, useParams } from 'react-router-dom'
import AILogo from '@/components/Form/modelForm/Icons' import AILogo from '@/components/Form/modelForm/Icons'
import { useProviderStore } from '@/store/providerStore' import { useProviderStore } from '@/store/providerStore'
export interface IProviderCardProps { export interface IProviderCardProps {
id: string id: string
providerName: string providerName: string
Icon: string Icon: string
enable: number enable: number
} }
const ProviderCard: FC<IProviderCardProps> = ({ const ProviderCard: FC<IProviderCardProps> = ({
providerName, providerName,
Icon, Icon,
id, id,
enable,
}: IProviderCardProps) => { }: IProviderCardProps) => {
const navigate = useNavigate() const navigate = useNavigate()
const updateProvider = useProviderStore(state => state.updateProvider) const updateProvider = useProviderStore(state => state.updateProvider)
const handleClick = () => { const enabled = useProviderStore(state => state.provider.find(p => p.id === id)?.enabled)
navigate(`/settings/model/${id}`)
} const isChecked = enabled === 1
const handleEnable = () => {
console.log('enable', enable) const handleToggle = (checked: boolean) => {
const allProviders = useProviderStore.getState().provider
const provider = allProviders.find(p => p.id === id)
if (!provider) return
updateProvider({ updateProvider({
id, ...provider,
enabled: enable == 1 ? 0 : 1, enabled: checked ? 1 : 0,
}) })
} }
const rawId = useParams()
console.log('rawId', rawId)
// @ts-ignore // @ts-ignore
const { id: currentId } = useParams() const { id: currentId } = useParams()
const isActive = currentId === id const isActive = currentId === id
return ( return (
<div <div
onClick={() => {
handleClick()
}}
className={ className={
styles.card + styles.card +
' flex h-14 items-center justify-between rounded border border-[#f3f3f3] p-2' + ' flex h-14 items-center justify-between rounded border border-[#f3f3f3] p-2' +
(isActive ? ' bg-[#F0F0F0] font-semibold text-blue-600' : '') (isActive ? ' bg-[#F0F0F0] font-semibold text-blue-600' : '')
} }
> >
<div className="flex items-center text-lg"> <div
className="flex items-center text-lg"
onClick={() => navigate(`/settings/model/${id}`)}
>
<div className="flex h-9 w-9 items-center"> <div className="flex h-9 w-9 items-center">
<AILogo name={Icon} /> <AILogo name={Icon} />
</div> </div>
@@ -53,11 +57,8 @@ const ProviderCard: FC<IProviderCardProps> = ({
<div> <div>
<Switch <Switch
onClick={e => { checked={isChecked}
e.preventDefault() onCheckedChange={handleToggle}
handleEnable()
}}
checked={enable == 1}
/> />
</div> </div>
</div> </div>

View File

@@ -75,19 +75,19 @@ export const useProviderStore = create<ProviderStore>((set, get) => ({
getProviderById: id => get().provider.find(p => p.id === id), getProviderById: id => get().provider.find(p => p.id === id),
updateProvider: async (provider: IProvider) => { updateProvider: async (provider: IProvider) => {
try { try {
const existing = get().provider.find(p => p.id === provider.id)
const merged = { ...existing, ...provider }
const data = { const data = {
...provider, ...merged,
api_key: provider.apiKey, api_key: merged.apiKey,
base_url: provider.baseUrl, base_url: merged.baseUrl,
}
const res = await updateProviderById(data)
if (res.data.code === 0) {
const item = res.data.data
console.log('Provider ', item)
await get().fetchProviderList()
} }
// 拦截器已解包:成功时直接返回 data 部分
await updateProviderById(data)
await get().fetchProviderList()
} catch (error) { } catch (error) {
console.error('Error fetching provider:', error) console.error('Error updating provider:', error)
} }
}, },
getProviderList: () => get().provider, getProviderList: () => get().provider,

View File

@@ -1,5 +1,6 @@
from app.db.engine import get_db from app.db.engine import get_db
from app.db.models.models import Model from app.db.models.models import Model
from app.db.models.providers import Provider
def get_model_by_provider_and_name(provider_id: int, model_name: str): def get_model_by_provider_and_name(provider_id: int, model_name: str):
@@ -58,7 +59,8 @@ def delete_model(model_id: int):
def get_all_models(): def get_all_models():
db = next(get_db()) db = next(get_db())
try: try:
models = db.query(Model).all() # 只查询启用状态供应商的模型
models = db.query(Model).join(Provider, Model.provider_id == Provider.id).filter(Provider.enabled == 1).all()
return [ return [
{"id": m.id, "provider_id": m.provider_id, "model_name": m.model_name} {"id": m.id, "provider_id": m.provider_id, "model_name": m.model_name}
for m in models for m in models

View File

@@ -77,11 +77,14 @@ def update_provider(data: ProviderUpdateRequest):
): ):
return R.error(msg='请至少填写一个参数') return R.error(msg='请至少填写一个参数')
provider_id =ProviderService.update_provider( updated_provider =ProviderService.update_provider(
id=data.id, id=data.id,
data=dict(data) data=dict(data)
) )
return R.success(msg='更新模型供应商成功',data={'id': provider_id}) if updated_provider:
return R.success(msg='更新模型供应商成功', data=updated_provider)
else:
return R.error(msg='更新模型供应商失败')
except Exception as e: except Exception as e:
print(e) print(e)
return R.error(msg=str(e)) return R.error(msg=str(e))

View File

@@ -123,7 +123,12 @@ class ProviderService:
filtered_data = {k: v for k, v in data.items() if v is not None and k != 'id'} filtered_data = {k: v for k, v in data.items() if v is not None and k != 'id'}
print('更新模型供应商',filtered_data) print('更新模型供应商',filtered_data)
update_provider(id, **filtered_data) update_provider(id, **filtered_data)
return id # 获取更新后的供应商信息
updated_provider = get_provider_by_id(id)
return {
'id': id,
'enabled': updated_provider.enabled,
}
except Exception as e: except Exception as e:
print('更新模型供应商失败:',e) print('更新模型供应商失败:',e)