From 8ec18dd21bcaf966cd3c8e305715509ae30e2b9d Mon Sep 17 00:00:00 2001 From: "Apple\\Apple" Date: Sat, 21 Jun 2025 02:36:09 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=AC=20refactor:=20separate=20chat=20se?= =?UTF-8?q?ttings=20into=20dedicated=20tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create new ChatsSetting component for managing chat configurations - Add "Chat Settings" tab with MessageSquare icon in settings page - Remove chat settings section from OperationSetting component - Update import path to use Chat directory structure --- web/src/components/settings/ChatsSetting.js | 63 +++++++++++++++++++ .../components/settings/OperationSetting.js | 8 --- .../components/settings/RateLimitSetting.js | 19 +++--- web/src/i18n/locales/en.json | 2 +- .../{Operation => Chat}/SettingsChats.js | 27 +------- .../Setting/Operation/SettingsGeneral.js | 5 -- web/src/pages/Setting/index.js | 14 ++++- 7 files changed, 87 insertions(+), 51 deletions(-) create mode 100644 web/src/components/settings/ChatsSetting.js rename web/src/pages/Setting/{Operation => Chat}/SettingsChats.js (85%) diff --git a/web/src/components/settings/ChatsSetting.js b/web/src/components/settings/ChatsSetting.js new file mode 100644 index 00000000..6330808d --- /dev/null +++ b/web/src/components/settings/ChatsSetting.js @@ -0,0 +1,63 @@ +import React, { useEffect, useState } from 'react'; +import { Card, Spin } from '@douyinfe/semi-ui'; +import SettingsChats from '../../pages/Setting/Chat/SettingsChats.js'; +import { API, showError } from '../../helpers'; + +const ChatsSetting = () => { + let [inputs, setInputs] = useState({ + /* 聊天设置 */ + Chats: '[]', + }); + + let [loading, setLoading] = useState(false); + + const getOptions = async () => { + const res = await API.get('/api/option/'); + const { success, message, data } = res.data; + if (success) { + let newInputs = {}; + data.forEach((item) => { + if ( + item.key.endsWith('Enabled') || + ['DefaultCollapseSidebar'].includes(item.key) + ) { + newInputs[item.key] = item.value === 'true' ? true : false; + } else { + newInputs[item.key] = item.value; + } + }); + + setInputs(newInputs); + } else { + showError(message); + } + }; + + async function onRefresh() { + try { + setLoading(true); + await getOptions(); + } catch (error) { + showError('刷新失败'); + } finally { + setLoading(false); + } + } + + useEffect(() => { + onRefresh(); + }, []); + + return ( + <> + + {/* 聊天设置 */} + + + + + + ); +}; + +export default ChatsSetting; \ No newline at end of file diff --git a/web/src/components/settings/OperationSetting.js b/web/src/components/settings/OperationSetting.js index f6786f95..779d80a6 100644 --- a/web/src/components/settings/OperationSetting.js +++ b/web/src/components/settings/OperationSetting.js @@ -7,7 +7,6 @@ import SettingsLog from '../../pages/Setting/Operation/SettingsLog.js'; import SettingsDataDashboard from '../../pages/Setting/Operation/SettingsDataDashboard.js'; import SettingsMonitoring from '../../pages/Setting/Operation/SettingsMonitoring.js'; import SettingsCreditLimit from '../../pages/Setting/Operation/SettingsCreditLimit.js'; -import SettingsChats from '../../pages/Setting/Operation/SettingsChats.js'; import { API, showError } from '../../helpers'; const OperationSetting = () => { @@ -56,9 +55,6 @@ const OperationSetting = () => { AutomaticDisableChannelEnabled: false, AutomaticEnableChannelEnabled: false, AutomaticDisableKeywords: '', - - /* 聊天设置 */ - Chats: '[]', }); let [loading, setLoading] = useState(false); @@ -131,10 +127,6 @@ const OperationSetting = () => { - {/* 聊天设置 */} - - - ); diff --git a/web/src/components/settings/RateLimitSetting.js b/web/src/components/settings/RateLimitSetting.js index 4d061363..21580d1a 100644 --- a/web/src/components/settings/RateLimitSetting.js +++ b/web/src/components/settings/RateLimitSetting.js @@ -1,8 +1,7 @@ import React, { useEffect, useState } from 'react'; -import { Card, Spin, Tabs } from '@douyinfe/semi-ui'; +import { Card, Spin } from '@douyinfe/semi-ui'; -import { API, showError, showSuccess } from '../../helpers/index.js'; -import SettingsChats from '../../pages/Setting/Operation/SettingsChats.js'; +import { API, showError } from '../../helpers/index.js'; import { useTranslation } from 'react-i18next'; import RequestRateLimit from '../../pages/Setting/RateLimit/SettingsRequestRateLimit.js'; @@ -24,14 +23,14 @@ const RateLimitSetting = () => { if (success) { let newInputs = {}; data.forEach((item) => { - if (item.key === 'ModelRequestRateLimitGroup') { - item.value = JSON.stringify(JSON.parse(item.value), null, 2); - } + if (item.key === 'ModelRequestRateLimitGroup') { + item.value = JSON.stringify(JSON.parse(item.value), null, 2); + } - if (item.key.endsWith('Enabled')) { - newInputs[item.key] = item.value === 'true' ? true : false; - } else { - newInputs[item.key] = item.value; + if (item.key.endsWith('Enabled')) { + newInputs[item.key] = item.value === 'true' ? true : false; + } else { + newInputs[item.key] = item.value; } }); diff --git a/web/src/i18n/locales/en.json b/web/src/i18n/locales/en.json index b89207e5..d9d5486e 100644 --- a/web/src/i18n/locales/en.json +++ b/web/src/i18n/locales/en.json @@ -1206,7 +1206,7 @@ "默认折叠侧边栏": "Default collapse sidebar", "聊天链接功能已经弃用,请使用下方聊天设置功能": "Chat link function has been deprecated, please use the chat settings below", "你似乎并没有修改什么": "You seem to have not modified anything", - "令牌聊天设置": "Chat settings", + "聊天设置": "Chat settings", "必须将上方聊天链接全部设置为空,才能使用下方聊天设置功能": "Must set all chat links above to empty to use the chat settings below", "链接中的{key}将自动替换为sk-xxxx,{address}将自动替换为系统设置的服务器地址,末尾不带/和/v1": "The {key} in the link will be automatically replaced with sk-xxxx, the {address} will be automatically replaced with the server address in system settings, and the end will not have / and /v1", "聊天配置": "Chat configuration", diff --git a/web/src/pages/Setting/Operation/SettingsChats.js b/web/src/pages/Setting/Chat/SettingsChats.js similarity index 85% rename from web/src/pages/Setting/Operation/SettingsChats.js rename to web/src/pages/Setting/Chat/SettingsChats.js index 4322f558..76f3f9f2 100644 --- a/web/src/pages/Setting/Operation/SettingsChats.js +++ b/web/src/pages/Setting/Chat/SettingsChats.js @@ -2,10 +2,7 @@ import React, { useEffect, useState, useRef } from 'react'; import { Banner, Button, - Col, Form, - Popconfirm, - Row, Space, Spin, } from '@douyinfe/semi-ui'; @@ -16,7 +13,6 @@ import { showSuccess, showWarning, verifyJSON, - verifyJSONPromise, } from '../../../helpers'; import { useTranslation } from 'react-i18next'; @@ -80,21 +76,6 @@ export default function SettingsChats(props) { } } - async function resetModelRatio() { - try { - let res = await API.post(`/api/option/rest_model_ratio`); - // return {success, message} - if (res.data.success) { - showSuccess(res.data.message); - props.refresh(); - } else { - showError(res.data.message); - } - } catch (error) { - showError(error); - } - } - useEffect(() => { const currentInputs = {}; for (let key in props.options) { @@ -119,13 +100,7 @@ export default function SettingsChats(props) { getFormApi={(formAPI) => (refForm.current = formAPI)} style={{ marginBottom: 15 }} > - - + -
(refForm.current = formAPI)} diff --git a/web/src/pages/Setting/index.js b/web/src/pages/Setting/index.js index f50586fe..591bfb34 100644 --- a/web/src/pages/Setting/index.js +++ b/web/src/pages/Setting/index.js @@ -9,7 +9,8 @@ import { Shapes, Cog, MoreHorizontal, - LayoutDashboard + LayoutDashboard, + MessageSquare } from 'lucide-react'; import SystemSetting from '../../components/settings/SystemSetting.js'; @@ -20,6 +21,7 @@ import RateLimitSetting from '../../components/settings/RateLimitSetting.js'; import ModelSetting from '../../components/settings/ModelSetting.js'; import DashboardSetting from '../../components/settings/DashboardSetting.js'; import RatioSetting from '../../components/settings/RatioSetting.js'; +import ChatsSetting from '../../components/settings/ChatsSetting.js'; const Setting = () => { const { t } = useTranslation(); @@ -39,6 +41,16 @@ const Setting = () => { content: , itemKey: 'operation', }); + panes.push({ + tab: ( + + + {t('聊天设置')} + + ), + content: , + itemKey: 'chats', + }); panes.push({ tab: (