mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-05-10 17:43:40 +08:00
fix(frontend): 修复供应商开关切换不能实时生效的问题
This commit is contained in:
@@ -4,47 +4,51 @@ import styles from './index.module.css'
|
||||
import { useNavigate, useParams } from 'react-router-dom'
|
||||
import AILogo from '@/components/Form/modelForm/Icons'
|
||||
import { useProviderStore } from '@/store/providerStore'
|
||||
|
||||
export interface IProviderCardProps {
|
||||
id: string
|
||||
providerName: string
|
||||
Icon: string
|
||||
enable: number
|
||||
}
|
||||
|
||||
const ProviderCard: FC<IProviderCardProps> = ({
|
||||
providerName,
|
||||
Icon,
|
||||
id,
|
||||
enable,
|
||||
}: IProviderCardProps) => {
|
||||
const navigate = useNavigate()
|
||||
const updateProvider = useProviderStore(state => state.updateProvider)
|
||||
const handleClick = () => {
|
||||
navigate(`/settings/model/${id}`)
|
||||
}
|
||||
const handleEnable = () => {
|
||||
console.log('enable', enable)
|
||||
const enabled = useProviderStore(state => state.provider.find(p => p.id === id)?.enabled)
|
||||
|
||||
const isChecked = enabled === 1
|
||||
|
||||
const handleToggle = (checked: boolean) => {
|
||||
const allProviders = useProviderStore.getState().provider
|
||||
const provider = allProviders.find(p => p.id === id)
|
||||
if (!provider) return
|
||||
updateProvider({
|
||||
id,
|
||||
enabled: enable == 1 ? 0 : 1,
|
||||
...provider,
|
||||
enabled: checked ? 1 : 0,
|
||||
})
|
||||
}
|
||||
const rawId = useParams()
|
||||
console.log('rawId', rawId)
|
||||
|
||||
// @ts-ignore
|
||||
const { id: currentId } = useParams()
|
||||
const isActive = currentId === id
|
||||
|
||||
return (
|
||||
<div
|
||||
onClick={() => {
|
||||
handleClick()
|
||||
}}
|
||||
className={
|
||||
styles.card +
|
||||
' flex h-14 items-center justify-between rounded border border-[#f3f3f3] p-2' +
|
||||
(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">
|
||||
<AILogo name={Icon} />
|
||||
</div>
|
||||
@@ -53,11 +57,8 @@ const ProviderCard: FC<IProviderCardProps> = ({
|
||||
|
||||
<div>
|
||||
<Switch
|
||||
onClick={e => {
|
||||
e.preventDefault()
|
||||
handleEnable()
|
||||
}}
|
||||
checked={enable == 1}
|
||||
checked={isChecked}
|
||||
onCheckedChange={handleToggle}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -75,19 +75,19 @@ export const useProviderStore = create<ProviderStore>((set, get) => ({
|
||||
getProviderById: id => get().provider.find(p => p.id === id),
|
||||
updateProvider: async (provider: IProvider) => {
|
||||
try {
|
||||
const existing = get().provider.find(p => p.id === provider.id)
|
||||
const merged = { ...existing, ...provider }
|
||||
|
||||
const data = {
|
||||
...provider,
|
||||
api_key: provider.apiKey,
|
||||
base_url: provider.baseUrl,
|
||||
}
|
||||
const res = await updateProviderById(data)
|
||||
if (res.data.code === 0) {
|
||||
const item = res.data.data
|
||||
console.log('Provider ', item)
|
||||
await get().fetchProviderList()
|
||||
...merged,
|
||||
api_key: merged.apiKey,
|
||||
base_url: merged.baseUrl,
|
||||
}
|
||||
// 拦截器已解包:成功时直接返回 data 部分
|
||||
await updateProviderById(data)
|
||||
await get().fetchProviderList()
|
||||
} catch (error) {
|
||||
console.error('Error fetching provider:', error)
|
||||
console.error('Error updating provider:', error)
|
||||
}
|
||||
},
|
||||
getProviderList: () => get().provider,
|
||||
|
||||
Reference in New Issue
Block a user