mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-07-08 08:01:24 +08:00
Merge pull request #336 from liang09255/fix-switch-0502
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user