feat(聊天界面): 新增字体大小调整功能
This commit is contained in:
parent
3f3d10ad83
commit
a2d9490b59
|
@ -17,13 +17,11 @@
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
border-bottom: 2px solid #eaeaea;
|
border-bottom: 2px solid #eaeaea;
|
||||||
padding-bottom: 0.25em;
|
padding-bottom: 0.25em;
|
||||||
font-size: 24px;
|
|
||||||
margin: 0.25em 0.25em;
|
margin: 0.25em 0.25em;
|
||||||
}
|
}
|
||||||
section {
|
section {
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
font-size: 20px;
|
|
||||||
p {
|
p {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
|
@ -32,7 +30,6 @@
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
font-size: 20px;
|
|
||||||
}
|
}
|
||||||
ul,
|
ul,
|
||||||
ol {
|
ol {
|
||||||
|
@ -40,7 +37,6 @@
|
||||||
padding-left: 1.8em;
|
padding-left: 1.8em;
|
||||||
li {
|
li {
|
||||||
margin-bottom: 0.25em;
|
margin-bottom: 0.25em;
|
||||||
font-size: 20px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
table {
|
table {
|
||||||
|
@ -60,7 +56,6 @@
|
||||||
border: none;
|
border: none;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: 20px;
|
|
||||||
border-bottom: 1px solid #ddd;
|
border-bottom: 1px solid #ddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,10 @@ import styles from './index.less';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
controller: AbortController;
|
controller: AbortController;
|
||||||
|
fontSize: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ChatContainer = ({ controller }: IProps) => {
|
const ChatContainer = ({ controller, fontSize = 16 }: IProps) => {
|
||||||
const { conversationId } = useGetChatSearchParams();
|
const { conversationId } = useGetChatSearchParams();
|
||||||
const { data: conversation } = useFetchNextConversation();
|
const { data: conversation } = useFetchNextConversation();
|
||||||
|
|
||||||
|
@ -55,7 +56,12 @@ const ChatContainer = ({ controller }: IProps) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Flex flex={1} className={styles.chatContainer} vertical>
|
<Flex flex={1} className={styles.chatContainer} vertical>
|
||||||
<Flex flex={1} vertical className={styles.messageContainer}>
|
<Flex
|
||||||
|
flex={1}
|
||||||
|
vertical
|
||||||
|
className={styles.messageContainer}
|
||||||
|
style={{ fontSize: `${fontSize}px` }}
|
||||||
|
>
|
||||||
<div>
|
<div>
|
||||||
<Spin spinning={loading}>
|
<Spin spinning={loading}>
|
||||||
{derivedMessages?.map((message, i) => {
|
{derivedMessages?.map((message, i) => {
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
import { ReactComponent as ChatAppCube } from '@/assets/svg/chat-app-cube.svg';
|
import { ReactComponent as ChatAppCube } from '@/assets/svg/chat-app-cube.svg';
|
||||||
import RenameModal from '@/components/rename-modal';
|
import RenameModal from '@/components/rename-modal';
|
||||||
import { DeleteOutlined, EditOutlined } from '@ant-design/icons';
|
import {
|
||||||
|
DeleteOutlined,
|
||||||
|
EditOutlined,
|
||||||
|
SettingOutlined,
|
||||||
|
} from '@ant-design/icons';
|
||||||
import {
|
import {
|
||||||
Avatar,
|
Avatar,
|
||||||
Button,
|
Button,
|
||||||
|
@ -12,12 +16,12 @@ import {
|
||||||
Space,
|
Space,
|
||||||
Spin,
|
Spin,
|
||||||
Tag,
|
Tag,
|
||||||
Tooltip,
|
// Tooltip,
|
||||||
Typography,
|
Typography,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import { MenuItemProps } from 'antd/lib/menu/MenuItem';
|
import { MenuItemProps } from 'antd/lib/menu/MenuItem';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
import ChatConfigurationModal from './chat-configuration-modal';
|
import ChatConfigurationModal from './chat-configuration-modal';
|
||||||
import ChatContainer from './chat-container';
|
import ChatContainer from './chat-container';
|
||||||
import {
|
import {
|
||||||
|
@ -43,9 +47,9 @@ import {
|
||||||
import { useTranslate } from '@/hooks/common-hooks';
|
import { useTranslate } from '@/hooks/common-hooks';
|
||||||
import { useSetSelectedRecord } from '@/hooks/logic-hooks';
|
import { useSetSelectedRecord } from '@/hooks/logic-hooks';
|
||||||
import { IDialog } from '@/interfaces/database/chat';
|
import { IDialog } from '@/interfaces/database/chat';
|
||||||
|
import { Modal, Slider } from 'antd';
|
||||||
import { PictureInPicture2 } from 'lucide-react';
|
import { PictureInPicture2 } from 'lucide-react';
|
||||||
import styles from './index.less';
|
import styles from './index.less';
|
||||||
|
|
||||||
const { Text } = Typography;
|
const { Text } = Typography;
|
||||||
|
|
||||||
const Chat = () => {
|
const Chat = () => {
|
||||||
|
@ -161,6 +165,17 @@ const Chat = () => {
|
||||||
addTemporaryConversation();
|
addTemporaryConversation();
|
||||||
}, [addTemporaryConversation]);
|
}, [addTemporaryConversation]);
|
||||||
|
|
||||||
|
const [fontSizeModalVisible, setFontSizeModalVisible] = useState(false);
|
||||||
|
const [fontSize, setFontSize] = useState(16); // 默认字体大小
|
||||||
|
|
||||||
|
// 从localStorage加载字体大小设置
|
||||||
|
useEffect(() => {
|
||||||
|
const savedFontSize = localStorage.getItem('chatFontSize');
|
||||||
|
if (savedFontSize) {
|
||||||
|
setFontSize(parseInt(savedFontSize));
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
const buildAppItems = (dialog: IDialog) => {
|
const buildAppItems = (dialog: IDialog) => {
|
||||||
const dialogId = dialog.id;
|
const dialogId = dialog.id;
|
||||||
|
|
||||||
|
@ -286,6 +301,7 @@ const Chat = () => {
|
||||||
</Flex>
|
</Flex>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Divider type={'vertical'} className={styles.divider}></Divider>
|
<Divider type={'vertical'} className={styles.divider}></Divider>
|
||||||
|
|
||||||
<Flex className={styles.chatTitleWrapper}>
|
<Flex className={styles.chatTitleWrapper}>
|
||||||
<Flex flex={1} vertical>
|
<Flex flex={1} vertical>
|
||||||
<Flex
|
<Flex
|
||||||
|
@ -297,15 +313,23 @@ const Chat = () => {
|
||||||
<b>{t('chat')}</b>
|
<b>{t('chat')}</b>
|
||||||
<Tag>{conversationList.length}</Tag>
|
<Tag>{conversationList.length}</Tag>
|
||||||
</Space>
|
</Space>
|
||||||
<Tooltip title={t('newChat')}>
|
{/* <Tooltip title={t('newChat')}> */}
|
||||||
<div>
|
<div>
|
||||||
<SvgIcon
|
<SettingOutlined
|
||||||
name="plus-circle-fill"
|
style={{
|
||||||
width={20}
|
marginRight: '8px',
|
||||||
onClick={handleCreateTemporaryConversation}
|
fontSize: '20px',
|
||||||
></SvgIcon>
|
cursor: 'pointer',
|
||||||
</div>
|
}}
|
||||||
</Tooltip>
|
onClick={() => setFontSizeModalVisible(true)}
|
||||||
|
/>
|
||||||
|
<SvgIcon
|
||||||
|
name="plus-circle-fill"
|
||||||
|
width={20}
|
||||||
|
onClick={handleCreateTemporaryConversation}
|
||||||
|
></SvgIcon>
|
||||||
|
</div>
|
||||||
|
{/* </Tooltip> */}
|
||||||
</Flex>
|
</Flex>
|
||||||
<Divider></Divider>
|
<Divider></Divider>
|
||||||
<Flex vertical gap={10} className={styles.chatTitleContent}>
|
<Flex vertical gap={10} className={styles.chatTitleContent}>
|
||||||
|
@ -356,7 +380,10 @@ const Chat = () => {
|
||||||
</Flex>
|
</Flex>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Divider type={'vertical'} className={styles.divider}></Divider>
|
<Divider type={'vertical'} className={styles.divider}></Divider>
|
||||||
<ChatContainer controller={controller}></ChatContainer>
|
<ChatContainer
|
||||||
|
controller={controller}
|
||||||
|
fontSize={fontSize}
|
||||||
|
></ChatContainer>
|
||||||
{dialogEditVisible && (
|
{dialogEditVisible && (
|
||||||
<ChatConfigurationModal
|
<ChatConfigurationModal
|
||||||
visible={dialogEditVisible}
|
visible={dialogEditVisible}
|
||||||
|
@ -386,6 +413,27 @@ const Chat = () => {
|
||||||
isAgent={false}
|
isAgent={false}
|
||||||
></EmbedModal>
|
></EmbedModal>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{fontSizeModalVisible && (
|
||||||
|
<Modal
|
||||||
|
title={'设置字体大小'}
|
||||||
|
open={fontSizeModalVisible}
|
||||||
|
onCancel={() => setFontSizeModalVisible(false)}
|
||||||
|
footer={null}
|
||||||
|
>
|
||||||
|
<Flex vertical gap="middle" align="center">
|
||||||
|
{'当前字体大小'}: {fontSize}px
|
||||||
|
<Slider
|
||||||
|
min={12}
|
||||||
|
max={24}
|
||||||
|
step={1}
|
||||||
|
defaultValue={fontSize}
|
||||||
|
style={{ width: '80%' }}
|
||||||
|
onChange={(value) => setFontSize(value)}
|
||||||
|
/>
|
||||||
|
</Flex>
|
||||||
|
</Modal>
|
||||||
|
)}
|
||||||
</Flex>
|
</Flex>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue