From 7c403a41c9b2e7ed4834e8fc3b34c53a62d2ecfa Mon Sep 17 00:00:00 2001 From: zstar <65890619+zstar1003@users.noreply.github.com> Date: Tue, 27 May 2025 23:34:48 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor(user-setting):=20=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C=E5=99=A8=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E4=BD=95=E7=89=88=E6=9C=AC=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/interfaces/database/user-setting.ts | 2 +- .../user-setting/setting-system/index.tsx | 28 +++++-------------- web/src/pages/user-setting/sidebar/index.tsx | 15 ++-------- 3 files changed, 10 insertions(+), 35 deletions(-) diff --git a/web/src/interfaces/database/user-setting.ts b/web/src/interfaces/database/user-setting.ts index 933f80d..e2dded1 100644 --- a/web/src/interfaces/database/user-setting.ts +++ b/web/src/interfaces/database/user-setting.ts @@ -38,7 +38,7 @@ export interface ISystemStatus { storage: Storage; database: Database; redis: Redis; - task_executor_heartbeat: Record; + // task_executor_heartbeat: Record; } interface Redis { diff --git a/web/src/pages/user-setting/setting-system/index.tsx b/web/src/pages/user-setting/setting-system/index.tsx index 9c41154..abad403 100644 --- a/web/src/pages/user-setting/setting-system/index.tsx +++ b/web/src/pages/user-setting/setting-system/index.tsx @@ -1,19 +1,13 @@ import SvgIcon from '@/components/svg-icon'; import { useFetchSystemStatus } from '@/hooks/user-setting-hooks'; -import { - ISystemStatus, - TaskExecutorHeartbeatItem, -} from '@/interfaces/database/user-setting'; +import { ISystemStatus } from '@/interfaces/database/user-setting'; +import { toFixed } from '@/utils/common-util'; import { Badge, Card, Flex, Spin, Typography } from 'antd'; import classNames from 'classnames'; import lowerCase from 'lodash/lowerCase'; import upperFirst from 'lodash/upperFirst'; import { useEffect } from 'react'; - -import { toFixed } from '@/utils/common-util'; -import { isObject } from 'lodash'; import styles from './index.less'; -import TaskBarChat from './task-bar-chat'; const { Text } = Typography; @@ -28,11 +22,9 @@ const TitleMap = { storage: 'Object Storage', redis: 'Redis', database: 'Database', - task_executor_heartbeats: 'Task Executor', }; const IconMap = { - es: 'es', doc_engine: 'storage', redis: 'redis', storage: 'minio', @@ -56,15 +48,16 @@ const SystemInfo = () => { {Object.keys(systemStatus).map((key) => { const info = systemStatus[key as keyof ISystemStatus]; - return ( {key === 'task_executor_heartbeats' ? ( - +
) : ( + // + // 各组件Icon { key={key} > {key === 'task_executor_heartbeats' ? ( - isObject(info) ? ( - } - > - ) : ( - - {typeof info.error === 'string' ? info.error : ''} - - ) +
) : ( Object.keys(info) .filter((x) => x !== 'status') @@ -103,6 +88,7 @@ const SystemInfo = () => { className={styles.text} > {upperFirst(lowerCase(x))}: + {/* 卡片具体文字数值 */} { const pathName = useSecondPathName(); const { logout } = useLogout(); const { t } = useTranslate('setting'); - const { version, fetchSystemVersion } = useFetchSystemVersion(); - - useEffect(() => { - if (location.host !== Domain) { - fetchSystemVersion(); - } - }, [fetchSystemVersion]); function getItem( label: string, @@ -43,9 +34,7 @@ const SideBar = () => { label: ( {t(label)} - - {label === 'system' && version} - + {label === 'system'} ), type, From f98c8727b7a575b8bd354bfc0139dbcc420b56cb Mon Sep 17 00:00:00 2001 From: zstar <65890619+zstar1003@users.noreply.github.com> Date: Tue, 27 May 2025 23:41:10 +0800 Subject: [PATCH 2/3] =?UTF-8?q?refactor(language):=20=E7=B2=BE=E7=AE=80?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81=E5=88=97=E8=A1=A8=EF=BC=8C?= =?UTF-8?q?=E4=BB=85=E4=BF=9D=E7=95=99=E4=B8=AD=E6=96=87=E5=92=8C=E8=8B=B1?= =?UTF-8?q?=E6=96=87=E7=9B=B8=E5=85=B3=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/constants/common.ts | 44 +++++-------------------------------- 1 file changed, 5 insertions(+), 39 deletions(-) diff --git a/web/src/constants/common.ts b/web/src/constants/common.ts index 4acb8bb..5334dfd 100644 --- a/web/src/constants/common.ts +++ b/web/src/constants/common.ts @@ -39,64 +39,30 @@ export const fileIconMap = { xml: 'xml.svg', }; -export const LanguageList = [ - 'English', - 'Chinese', - 'Traditional Chinese', - 'Indonesia', - 'Spanish', - 'Vietnamese', - 'Japanese', - 'Portuguese BR', - 'German', -]; +export const LanguageList = ['Chinese', 'Traditional Chinese', 'English']; export const LanguageMap = { - English: 'English', Chinese: '简体中文', 'Traditional Chinese': '繁體中文', - Indonesia: 'Indonesia', - Spanish: 'Español', - Vietnamese: 'Tiếng việt', - Japanese: '日本語', - 'Portuguese BR': 'Português BR', - German: 'German', + English: 'English', }; export enum LanguageAbbreviation { - En = 'en', Zh = 'zh', ZhTraditional = 'zh-TRADITIONAL', - Id = 'id', - Ja = 'ja', - Es = 'es', - Vi = 'vi', - PtBr = 'pt-BR', - De = 'de', + En = 'en', } export const LanguageAbbreviationMap = { - [LanguageAbbreviation.En]: 'English', [LanguageAbbreviation.Zh]: '简体中文', [LanguageAbbreviation.ZhTraditional]: '繁體中文', - [LanguageAbbreviation.Id]: 'Indonesia', - [LanguageAbbreviation.Es]: 'Español', - [LanguageAbbreviation.Vi]: 'Tiếng việt', - [LanguageAbbreviation.Ja]: '日本語', - [LanguageAbbreviation.PtBr]: 'Português BR', - [LanguageAbbreviation.De]: 'Deutsch', + [LanguageAbbreviation.En]: 'English', }; export const LanguageTranslationMap = { - English: 'en', Chinese: 'zh', 'Traditional Chinese': 'zh-TRADITIONAL', - Indonesia: 'id', - Spanish: 'es', - Vietnamese: 'vi', - Japanese: 'ja', - 'Portuguese BR': 'pt-br', - German: 'de', + English: 'en', }; export enum FileMimeType { From e38ce90026d719b64edd342db851151d4a32dd40 Mon Sep 17 00:00:00 2001 From: zstar <65890619+zstar1003@users.noreply.github.com> Date: Thu, 29 May 2025 16:54:42 +0800 Subject: [PATCH 3/3] =?UTF-8?q?refactor(chat):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E5=A4=A7=E5=B0=8F=E8=AE=BE=E7=BD=AE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E4=BD=BF=E7=94=A8Cookie=E4=BD=9C=E4=B8=BA?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/pages/chat/chat-container/index.tsx | 2 +- web/src/pages/chat/index.tsx | 56 +++++++++++---------- web/src/utils/font-storage.ts | 49 ++++++++++++++++++ 3 files changed, 79 insertions(+), 28 deletions(-) create mode 100644 web/src/utils/font-storage.ts diff --git a/web/src/pages/chat/chat-container/index.tsx b/web/src/pages/chat/chat-container/index.tsx index 4dc20ab..5bc005f 100644 --- a/web/src/pages/chat/chat-container/index.tsx +++ b/web/src/pages/chat/chat-container/index.tsx @@ -27,7 +27,7 @@ interface IProps { fontSize: number; } -const ChatContainer = ({ controller, fontSize = 16 }: IProps) => { +const ChatContainer = ({ controller, fontSize = 18 }: IProps) => { const { conversationId } = useGetChatSearchParams(); const { data: conversation } = useFetchNextConversation(); diff --git a/web/src/pages/chat/index.tsx b/web/src/pages/chat/index.tsx index 8e2af93..ec5c96d 100644 --- a/web/src/pages/chat/index.tsx +++ b/web/src/pages/chat/index.tsx @@ -1,5 +1,20 @@ import { ReactComponent as ChatAppCube } from '@/assets/svg/chat-app-cube.svg'; +import EmbedModal from '@/components/api-service/embed-modal'; +import { useShowEmbedModal } from '@/components/api-service/hooks'; import RenameModal from '@/components/rename-modal'; +import SvgIcon from '@/components/svg-icon'; +import { useTheme } from '@/components/theme-provider'; +import { SharedFrom } from '@/constants/chat'; +import { + useClickConversationCard, + useClickDialogCard, + useFetchNextDialogList, + useGetChatSearchParams, +} from '@/hooks/chat-hooks'; +import { useTranslate } from '@/hooks/common-hooks'; +import { useSetSelectedRecord } from '@/hooks/logic-hooks'; +import { IDialog } from '@/interfaces/database/chat'; +import { FontStorageUtil } from '@/utils/font-storage'; import { DeleteOutlined, EditOutlined, @@ -13,6 +28,8 @@ import { Dropdown, Flex, MenuProps, + Modal, + Slider, Space, Spin, Tag, @@ -21,6 +38,7 @@ import { } from 'antd'; import { MenuItemProps } from 'antd/lib/menu/MenuItem'; import classNames from 'classnames'; +import { PictureInPicture2 } from 'lucide-react'; import { useCallback, useEffect, useState } from 'react'; import ChatConfigurationModal from './chat-configuration-modal'; import ChatContainer from './chat-container'; @@ -32,23 +50,6 @@ import { useRenameConversation, useSelectDerivedConversationList, } from './hooks'; - -import EmbedModal from '@/components/api-service/embed-modal'; -import { useShowEmbedModal } from '@/components/api-service/hooks'; -import SvgIcon from '@/components/svg-icon'; -import { useTheme } from '@/components/theme-provider'; -import { SharedFrom } from '@/constants/chat'; -import { - useClickConversationCard, - useClickDialogCard, - useFetchNextDialogList, - useGetChatSearchParams, -} from '@/hooks/chat-hooks'; -import { useTranslate } from '@/hooks/common-hooks'; -import { useSetSelectedRecord } from '@/hooks/logic-hooks'; -import { IDialog } from '@/interfaces/database/chat'; -import { Modal, Slider } from 'antd'; -import { PictureInPicture2 } from 'lucide-react'; import styles from './index.less'; const { Text } = Typography; @@ -166,16 +167,20 @@ const Chat = () => { }, [addTemporaryConversation]); const [fontSizeModalVisible, setFontSizeModalVisible] = useState(false); - const [fontSize, setFontSize] = useState(16); // 默认字体大小 + const [fontSize, setFontSize] = useState(18); // 默认字体大小 - // 从localStorage加载字体大小设置 + // 从存储加载字体大小设置 useEffect(() => { - const savedFontSize = localStorage.getItem('chatFontSize'); - if (savedFontSize) { - setFontSize(parseInt(savedFontSize)); - } + const savedFontSize = FontStorageUtil.getFontSize(); + setFontSize(savedFontSize); }, []); + // 字体大小变化处理 + const handleFontSizeChange = (value: number) => { + setFontSize(value); + FontStorageUtil.setFontSize(value); + }; + const buildAppItems = (dialog: IDialog) => { const dialogId = dialog.id; @@ -429,10 +434,7 @@ const Chat = () => { step={1} defaultValue={fontSize} style={{ width: '80%' }} - onChange={(value) => { - setFontSize(value); - localStorage.setItem('chatFontSize', value.toString()); - }} + onChange={handleFontSizeChange} />
diff --git a/web/src/utils/font-storage.ts b/web/src/utils/font-storage.ts new file mode 100644 index 0000000..e4a1db6 --- /dev/null +++ b/web/src/utils/font-storage.ts @@ -0,0 +1,49 @@ +// 字体大小存储工具 +export const FontStorageUtil = { + // 获取字体大小 + getFontSize: (): number => { + try { + // 优先从localStorage获取 + const localStorageValue = localStorage.getItem('chatFontSize'); + if (localStorageValue && !isNaN(parseInt(localStorageValue))) { + return parseInt(localStorageValue); + } + } catch (error) { + console.warn('localStorage不可用,尝试从cookie获取'); + } + + try { + // 从cookie获取 + const cookieValue = document.cookie + .split('; ') + .find((row) => row.startsWith('chatFontSize=')) + ?.split('=')[1]; + + if (cookieValue && !isNaN(parseInt(cookieValue))) { + return parseInt(cookieValue); + } + } catch (error) { + console.warn('cookie也不可用'); + } + + return 18; // 默认字体大小 + }, + + // 保存字体大小 + setFontSize: (size: number): void => { + try { + localStorage.setItem('chatFontSize', size.toString()); + } catch (error) { + console.warn('localStorage保存失败,尝试使用cookie'); + } + + try { + // 设置cookie,有效期30天 + const expires = new Date(); + expires.setDate(expires.getDate() + 30); + document.cookie = `chatFontSize=${size}; expires=${expires.toUTCString()}; path=/`; + } catch (error) { + console.warn('cookie保存也失败'); + } + }, +};