fix(web): model options update

This commit is contained in:
zhaoying
2026-04-17 10:07:45 +08:00
parent e015455fb8
commit c96dc53534
2 changed files with 26 additions and 17 deletions

View File

@@ -2,9 +2,9 @@
* @Author: ZhaoYing
* @Date: 2026-03-07 16:49:59
* @Last Modified by: ZhaoYing
* @Last Modified time: 2026-04-16 17:46:02
* @Last Modified time: 2026-04-17 10:05:23
*/
import { useEffect, useState, forwardRef, useImperativeHandle } from 'react';
import { type FC, useEffect, useState } from 'react';
import { Select, Flex, Space } from 'antd';
import type { SelectProps } from 'antd/es/select';
import { useTranslation } from 'react-i18next';
@@ -26,17 +26,13 @@ interface ModelSelectProps extends SelectProps {
fontClassName?: string;
isAutoFetch?: boolean;
initialData?: Model[];
updateOptions?: (options: Model[]) => void;
}
const ModelSelect = forwardRef<ModelSelectRef, ModelSelectProps>((
{ params, placeholder, fontClassName, isAutoFetch = true, initialData = [], ...props },
ref
) => {
const ModelSelect: FC<ModelSelectProps> = ({ params, placeholder, fontClassName, isAutoFetch = true, initialData = [], updateOptions, ...props }) => {
const { t } = useTranslation();
const [options, setOptions] = useState<Model[]>([]);
useImperativeHandle(ref, () => ({ options }), [options]);
// Fetch active models whenever params change; stringify for stable deep comparison
useEffect(() => {
if (!isAutoFetch) return
@@ -62,6 +58,10 @@ const ModelSelect = forwardRef<ModelSelectRef, ModelSelectProps>((
);
};
useEffect(() => {
if (updateOptions) updateOptions([...options, ...initialData]);
}, [options, initialData])
return (
<Select
placeholder={placeholder ?? t('common.pleaseSelect')}
@@ -91,6 +91,6 @@ const ModelSelect = forwardRef<ModelSelectRef, ModelSelectProps>((
{...props}
/>
);
});
};
export default ModelSelect;

View File

@@ -1,29 +1,38 @@
import { type FC, useEffect, useRef, useState } from "react";
/*
* @Author: ZhaoYing
* @Date: 2026-03-07 14:55:04
* @Last Modified by: ZhaoYing
* @Last Modified time: 2026-04-17 10:05:32
*/
import { type FC, useEffect, useState } from "react";
import { useTranslation } from 'react-i18next'
import { Form, Switch } from 'antd'
import RbSlider from '@/components/RbSlider'
import RbCard from '@/components/RbCard/Card'
import ModelSelect, { type ModelSelectRef } from '@/components/ModelSelect'
import ModelSelect from '@/components/ModelSelect'
import type { Model } from '@/views/ModelManagement/types';
const ModelConfig: FC = () => {
const { t } = useTranslation()
const form = Form.useFormInstance()
const model_id = Form.useWatch(['model_id'], form)
const modelSelectRef = useRef<ModelSelectRef>(null)
const [selectedModel, setSelectedModel] = useState<Model | null>(null)
const [options, setOptions] = useState<Model[]>([])
const updateOptions = (options: Model[]) => {
setOptions(options)
}
useEffect(() => {
if (model_id && modelSelectRef.current?.options) {
const model = modelSelectRef.current?.options.find(item => item.id === model_id)
if (model_id && options) {
const model = options.find(item => item.id === model_id)
setSelectedModel(model || null)
form.setFieldValue('json_output', false)
} else {
setSelectedModel(null)
}
}, [model_id, modelSelectRef.current?.options])
console.log('ModelConfig', model_id)
}, [model_id, options])
return (
<>
@@ -34,11 +43,11 @@ const ModelConfig: FC = () => {
required
>
<ModelSelect
ref={modelSelectRef}
placeholder={t('common.pleaseSelect')}
params={{ type: 'llm,chat' }}
className="rb:w-full!"
size="small"
updateOptions={updateOptions}
/>
</Form.Item>
{model_id && (