feat: 添加条件渲染以隐藏假助手的设置组,优化用户界面

This commit is contained in:
suyao 2025-09-23 06:04:25 +08:00
parent da18ff3d48
commit 53a6c70eca
No known key found for this signature in database

View File

@ -181,128 +181,130 @@ const SettingsTab: FC<Props> = (props) => {
return ( return (
<Container className="settings-tab"> <Container className="settings-tab">
<CollapsibleSettingGroup {props.assistant.id !== 'fake' && (
title={t('assistants.settings.title')} <CollapsibleSettingGroup
defaultExpanded={true} title={t('assistants.settings.title')}
extra={ defaultExpanded={true}
<HStack alignItems="center" gap={2}> extra={
<Button <HStack alignItems="center" gap={2}>
type="text" <Button
size="small" type="text"
icon={<Settings2 size={16} />} size="small"
onClick={() => AssistantSettingsPopup.show({ assistant, tab: 'model' })} icon={<Settings2 size={16} />}
/> onClick={() => AssistantSettingsPopup.show({ assistant, tab: 'model' })}
</HStack> />
}> </HStack>
<SettingGroup style={{ marginTop: 5 }}> }>
<Row align="middle"> <SettingGroup style={{ marginTop: 5 }}>
<SettingRowTitleSmall> <Row align="middle">
{t('chat.settings.temperature.label')} <SettingRowTitleSmall>
<HelpTooltip title={t('chat.settings.temperature.tip')} /> {t('chat.settings.temperature.label')}
</SettingRowTitleSmall> <HelpTooltip title={t('chat.settings.temperature.tip')} />
<Switch </SettingRowTitleSmall>
size="small" <Switch
style={{ marginLeft: 'auto' }} size="small"
checked={enableTemperature} style={{ marginLeft: 'auto' }}
onChange={(enabled) => { checked={enableTemperature}
setEnableTemperature(enabled) onChange={(enabled) => {
onUpdateAssistantSettings({ enableTemperature: enabled }) setEnableTemperature(enabled)
}} onUpdateAssistantSettings({ enableTemperature: enabled })
/> }}
</Row> />
{enableTemperature ? ( </Row>
{enableTemperature ? (
<Row align="middle" gutter={10}>
<Col span={23}>
<Slider
min={0}
max={2}
onChange={setTemperature}
onChangeComplete={onTemperatureChange}
value={typeof temperature === 'number' ? temperature : 0}
step={0.1}
/>
</Col>
</Row>
) : (
<SettingDivider />
)}
<Row align="middle">
<SettingRowTitleSmall>
{t('chat.settings.context_count.label')}
<HelpTooltip title={t('chat.settings.context_count.tip')} />
</SettingRowTitleSmall>
</Row>
<Row align="middle" gutter={10}> <Row align="middle" gutter={10}>
<Col span={23}> <Col span={23}>
<Slider <Slider
min={0} min={0}
max={2} max={maxContextCount}
onChange={setTemperature} onChange={setContextCount}
onChangeComplete={onTemperatureChange} onChangeComplete={onContextCountChange}
value={typeof temperature === 'number' ? temperature : 0} value={typeof contextCount === 'number' ? contextCount : 0}
step={0.1} step={1}
/> />
</Col> </Col>
</Row> </Row>
) : (
<SettingDivider /> <SettingDivider />
)} <SettingRow>
<Row align="middle"> <SettingRowTitleSmall>{t('models.stream_output')}</SettingRowTitleSmall>
<SettingRowTitleSmall> <Switch
{t('chat.settings.context_count.label')} size="small"
<HelpTooltip title={t('chat.settings.context_count.tip')} /> checked={streamOutput}
</SettingRowTitleSmall> onChange={(checked) => {
</Row> setStreamOutput(checked)
<Row align="middle" gutter={10}> onUpdateAssistantSettings({ streamOutput: checked })
<Col span={23}> }}
<Slider
min={0}
max={maxContextCount}
onChange={setContextCount}
onChangeComplete={onContextCountChange}
value={typeof contextCount === 'number' ? contextCount : 0}
step={1}
/> />
</Col> </SettingRow>
</Row> <SettingDivider />
<SettingDivider /> <SettingRow>
<SettingRow> <Row align="middle">
<SettingRowTitleSmall>{t('models.stream_output')}</SettingRowTitleSmall> <SettingRowTitleSmall>
<Switch {t('chat.settings.max_tokens.label')}
size="small" <HelpTooltip title={t('chat.settings.max_tokens.tip')} />
checked={streamOutput} </SettingRowTitleSmall>
onChange={(checked) => { </Row>
setStreamOutput(checked) <Switch
onUpdateAssistantSettings({ streamOutput: checked }) size="small"
}} checked={enableMaxTokens}
/> onChange={async (enabled) => {
</SettingRow> if (enabled) {
<SettingDivider /> const confirmed = await modalConfirm({
<SettingRow> title: t('chat.settings.max_tokens.confirm'),
<Row align="middle"> content: t('chat.settings.max_tokens.confirm_content'),
<SettingRowTitleSmall> okButtonProps: {
{t('chat.settings.max_tokens.label')} danger: true
<HelpTooltip title={t('chat.settings.max_tokens.tip')} /> }
</SettingRowTitleSmall> })
</Row> if (!confirmed) return
<Switch }
size="small" setEnableMaxTokens(enabled)
checked={enableMaxTokens} onUpdateAssistantSettings({ enableMaxTokens: enabled })
onChange={async (enabled) => { }}
if (enabled) { />
const confirmed = await modalConfirm({ </SettingRow>
title: t('chat.settings.max_tokens.confirm'), {enableMaxTokens && (
content: t('chat.settings.max_tokens.confirm_content'), <Row align="middle" gutter={10} style={{ marginTop: 10 }}>
okButtonProps: { <Col span={24}>
danger: true <InputNumber
} disabled={!enableMaxTokens}
}) min={0}
if (!confirmed) return max={10000000}
} step={100}
setEnableMaxTokens(enabled) value={typeof maxTokens === 'number' ? maxTokens : 0}
onUpdateAssistantSettings({ enableMaxTokens: enabled }) changeOnBlur
}} onChange={(value) => value && setMaxTokens(value)}
/> onBlur={() => onMaxTokensChange(maxTokens)}
</SettingRow> style={{ width: '100%' }}
{enableMaxTokens && ( />
<Row align="middle" gutter={10} style={{ marginTop: 10 }}> </Col>
<Col span={24}> </Row>
<InputNumber )}
disabled={!enableMaxTokens} <SettingDivider />
min={0} </SettingGroup>
max={10000000} </CollapsibleSettingGroup>
step={100} )}
value={typeof maxTokens === 'number' ? maxTokens : 0}
changeOnBlur
onChange={(value) => value && setMaxTokens(value)}
onBlur={() => onMaxTokensChange(maxTokens)}
style={{ width: '100%' }}
/>
</Col>
</Row>
)}
<SettingDivider />
</SettingGroup>
</CollapsibleSettingGroup>
{isOpenAI && ( {isOpenAI && (
<OpenAISettingsGroup <OpenAISettingsGroup
model={model} model={model}