better ux

This commit is contained in:
suyao 2025-12-12 13:26:03 +08:00
parent e21c6ce2fc
commit 908506c83f
No known key found for this signature in database
4 changed files with 66 additions and 56 deletions

View File

@ -4559,6 +4559,7 @@
"credentials_required": "Please fill in Access Key ID and Secret Access Key",
"credentials_save_failed": "Failed to save credentials",
"credentials_saved": "Credentials saved",
"credentials_saved_notice": "Credentials have been securely saved. Clear credentials to update them.",
"description": "Volcengine is ByteDance's cloud service platform, providing Doubao and other large language model services. Please use IAM user's Access Key for authentication, do not use the root user credentials.",
"project_name": "Project Name",
"project_name_help": "Project name for endpoint filtering, default is 'default'",

View File

@ -4559,6 +4559,7 @@
"credentials_required": "请填写 Access Key ID 和 Secret Access Key",
"credentials_save_failed": "凭证保存失败",
"credentials_saved": "凭证已保存",
"credentials_saved_notice": "凭证已安全保存。如需更新,请先清除凭证。",
"description": "火山引擎是字节跳动旗下的云服务平台,提供豆包等大语言模型服务。请使用 IAM 子用户的 Access Key 进行身份验证,不要使用主账号的根用户密钥。",
"project_name": "项目名称",
"project_name_help": "用于筛选推理接入点的项目名称,默认为 'default'",

View File

@ -4559,6 +4559,7 @@
"credentials_required": "請填寫 Access Key ID 和 Secret Access Key",
"credentials_save_failed": "憑證儲存失敗",
"credentials_saved": "憑證已儲存",
"credentials_saved_notice": "憑證已安全儲存。如需更新,請先清除憑證。",
"description": "火山引擎是字節跳動旗下的雲端服務平台,提供豆包等大型語言模型服務。請使用 IAM 子用戶的 Access Key 進行身份驗證,不要使用主帳號的根用戶密鑰。",
"project_name": "專案名稱",
"project_name_help": "用於篩選推論接入點的專案名稱,預設為 'default'",

View File

@ -1,6 +1,5 @@
import { loggerService } from '@logger'
import { HStack } from '@renderer/components/Layout'
import { PROVIDER_URLS } from '@renderer/config/providers'
import { useVolcengineSettings } from '@renderer/hooks/useVolcengine'
import { Alert, Button, Input, Space } from 'antd'
import type { FC } from 'react'
@ -8,14 +7,12 @@ import { useCallback, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { SettingHelpLink, SettingHelpText, SettingHelpTextRow, SettingSubtitle } from '..'
const accessKeyWebSite = 'https://console.volcengine.com/iam/identitymanage'
const VolcengineSettings: FC = () => {
const { t } = useTranslation()
const { region, projectName, setRegion, setProjectName } = useVolcengineSettings()
const providerConfig = PROVIDER_URLS['doubao']
const apiKeyWebsite = providerConfig?.websites?.apiKey
const [localAccessKeyId, setLocalAccessKeyId] = useState('')
const [localSecretAccessKey, setLocalSecretAccessKey] = useState('')
const [localRegion, setLocalRegion] = useState(region)
@ -86,60 +83,70 @@ const VolcengineSettings: FC = () => {
<SettingSubtitle style={{ marginTop: 5 }}>{t('settings.provider.volcengine.title')}</SettingSubtitle>
<Alert type="info" style={{ marginTop: 5 }} message={t('settings.provider.volcengine.description')} showIcon />
<SettingSubtitle style={{ marginTop: 15 }}>{t('settings.provider.volcengine.access_key_id')}</SettingSubtitle>
<Input
value={localAccessKeyId}
placeholder="Access Key ID"
onChange={(e) => setLocalAccessKeyId(e.target.value)}
style={{ marginTop: 5 }}
spellCheck={false}
/>
<SettingHelpTextRow>
<SettingHelpText>{t('settings.provider.volcengine.access_key_id_help')}</SettingHelpText>
</SettingHelpTextRow>
{!hasCredentials ? (
<>
<SettingSubtitle style={{ marginTop: 15 }}>{t('settings.provider.volcengine.access_key_id')}</SettingSubtitle>
<Input
value={localAccessKeyId}
placeholder="Access Key ID"
onChange={(e) => setLocalAccessKeyId(e.target.value)}
style={{ marginTop: 5 }}
spellCheck={false}
/>
<SettingHelpTextRow>
<SettingHelpText>{t('settings.provider.volcengine.access_key_id_help')}</SettingHelpText>
</SettingHelpTextRow>
<SettingSubtitle style={{ marginTop: 15 }}>{t('settings.provider.volcengine.secret_access_key')}</SettingSubtitle>
<Input.Password
value={localSecretAccessKey}
placeholder="Secret Access Key"
onChange={(e) => setLocalSecretAccessKey(e.target.value)}
style={{ marginTop: 5 }}
spellCheck={false}
/>
<SettingHelpTextRow style={{ justifyContent: 'space-between' }}>
<HStack>
{apiKeyWebsite && (
<SettingHelpLink target="_blank" href={apiKeyWebsite}>
{t('settings.provider.get_api_key')}
</SettingHelpLink>
)}
</HStack>
<SettingHelpText>{t('settings.provider.volcengine.secret_access_key_help')}</SettingHelpText>
</SettingHelpTextRow>
<SettingSubtitle style={{ marginTop: 15 }}>
{t('settings.provider.volcengine.secret_access_key')}
</SettingSubtitle>
<Input.Password
value={localSecretAccessKey}
placeholder="Secret Access Key"
onChange={(e) => setLocalSecretAccessKey(e.target.value)}
style={{ marginTop: 5 }}
spellCheck={false}
/>
<SettingHelpTextRow style={{ justifyContent: 'space-between' }}>
<HStack>
<SettingHelpLink target="_blank" href={accessKeyWebSite}>
{t('settings.provider.get_api_key')}
</SettingHelpLink>
</HStack>
<SettingHelpText>{t('settings.provider.volcengine.secret_access_key_help')}</SettingHelpText>
</SettingHelpTextRow>
<SettingSubtitle style={{ marginTop: 15 }}>{t('settings.provider.volcengine.region')}</SettingSubtitle>
<Input
value={localRegion}
placeholder="cn-beijing"
onChange={(e) => setLocalRegion(e.target.value)}
onBlur={() => setRegion(localRegion)}
style={{ marginTop: 5 }}
/>
<SettingHelpTextRow>
<SettingHelpText>{t('settings.provider.volcengine.region_help')}</SettingHelpText>
</SettingHelpTextRow>
<SettingSubtitle style={{ marginTop: 15 }}>{t('settings.provider.volcengine.region')}</SettingSubtitle>
<Input
value={localRegion}
placeholder="cn-beijing"
onChange={(e) => setLocalRegion(e.target.value)}
onBlur={() => setRegion(localRegion)}
style={{ marginTop: 5 }}
/>
<SettingHelpTextRow>
<SettingHelpText>{t('settings.provider.volcengine.region_help')}</SettingHelpText>
</SettingHelpTextRow>
<SettingSubtitle style={{ marginTop: 15 }}>{t('settings.provider.volcengine.project_name')}</SettingSubtitle>
<Input
value={localProjectName}
placeholder="default"
onChange={(e) => setLocalProjectName(e.target.value)}
onBlur={() => setProjectName(localProjectName)}
style={{ marginTop: 5 }}
/>
<SettingHelpTextRow>
<SettingHelpText>{t('settings.provider.volcengine.project_name_help')}</SettingHelpText>
</SettingHelpTextRow>
<SettingSubtitle style={{ marginTop: 15 }}>{t('settings.provider.volcengine.project_name')}</SettingSubtitle>
<Input
value={localProjectName}
placeholder="default"
onChange={(e) => setLocalProjectName(e.target.value)}
onBlur={() => setProjectName(localProjectName)}
style={{ marginTop: 5 }}
/>
<SettingHelpTextRow>
<SettingHelpText>{t('settings.provider.volcengine.project_name_help')}</SettingHelpText>
</SettingHelpTextRow>
</>
) : (
<Alert
type="success"
style={{ marginTop: 15 }}
message={t('settings.provider.volcengine.credentials_saved_notice')}
showIcon
/>
)}
<Space style={{ marginTop: 15 }}>
<Button type="primary" onClick={handleSaveCredentials} loading={saving}>