This commit is contained in:
Archer
2025-08-12 23:08:00 +08:00
committed by GitHub
parent 3cbcb1e3b6
commit 83aa3a855f
6 changed files with 52 additions and 44 deletions

View File

@@ -363,7 +363,6 @@
"core.chat.Speaking": "I'm Listening, Please Speak...", "core.chat.Speaking": "I'm Listening, Please Speak...",
"core.chat.Type a message": "Enter a Question, Press [Enter] to Send / Press [Ctrl(Alt/Shift) + Enter] for New Line", "core.chat.Type a message": "Enter a Question, Press [Enter] to Send / Press [Ctrl(Alt/Shift) + Enter] for New Line",
"core.chat.Unpin": "Unpin", "core.chat.Unpin": "Unpin",
"core.chat.You need to a chat app": "You Do Not Have an Available App",
"core.chat.error.Chat error": "Chat Error", "core.chat.error.Chat error": "Chat Error",
"core.chat.error.Messages empty": "API Content is Empty, Possibly Due to Text Being Too Long", "core.chat.error.Messages empty": "API Content is Empty, Possibly Due to Text Being Too Long",
"core.chat.error.Select dataset empty": "You Have Not Selected a Dataset", "core.chat.error.Select dataset empty": "You Have Not Selected a Dataset",

View File

@@ -363,7 +363,6 @@
"core.chat.Speaking": "我在听,请说...", "core.chat.Speaking": "我在听,请说...",
"core.chat.Type a message": "输入问题,发送 [Enter]/换行 [Ctrl(Alt/Shift) + Enter]", "core.chat.Type a message": "输入问题,发送 [Enter]/换行 [Ctrl(Alt/Shift) + Enter]",
"core.chat.Unpin": "取消置顶", "core.chat.Unpin": "取消置顶",
"core.chat.You need to a chat app": "你没有可用的应用",
"core.chat.error.Chat error": "对话出现异常", "core.chat.error.Chat error": "对话出现异常",
"core.chat.error.Messages empty": "接口内容为空,可能文本超长了~", "core.chat.error.Messages empty": "接口内容为空,可能文本超长了~",
"core.chat.error.Select dataset empty": "你没有选择知识库", "core.chat.error.Select dataset empty": "你没有选择知识库",

View File

@@ -363,7 +363,6 @@
"core.chat.Speaking": "我在聽,請說...", "core.chat.Speaking": "我在聽,請說...",
"core.chat.Type a message": "輸入問題,按 [Enter] 傳送 / 按 [Ctrl(Alt/Shift) + Enter] 換行", "core.chat.Type a message": "輸入問題,按 [Enter] 傳送 / 按 [Ctrl(Alt/Shift) + Enter] 換行",
"core.chat.Unpin": "取消釘選", "core.chat.Unpin": "取消釘選",
"core.chat.You need to a chat app": "您沒有可用的應用程式",
"core.chat.error.Chat error": "對話發生錯誤", "core.chat.error.Chat error": "對話發生錯誤",
"core.chat.error.Messages empty": "API 內容為空,可能是文字過長", "core.chat.error.Messages empty": "API 內容為空,可能是文字過長",
"core.chat.error.Select dataset empty": "您尚未選擇知識庫", "core.chat.error.Select dataset empty": "您尚未選擇知識庫",

View File

@@ -25,7 +25,7 @@ import type { StartChatFnProps } from '@/components/core/chat/ChatContainer/type
import { streamFetch } from '@/web/common/api/fetch'; import { streamFetch } from '@/web/common/api/fetch';
import { getChatTitleFromChatMessage } from '@fastgpt/global/core/chat/utils'; import { getChatTitleFromChatMessage } from '@fastgpt/global/core/chat/utils';
import { GPTMessages2Chats } from '@fastgpt/global/core/chat/adapt'; import { GPTMessages2Chats } from '@fastgpt/global/core/chat/adapt';
import { useLocalStorageState, useMemoizedFn } from 'ahooks'; import { useLocalStorageState, useMemoizedFn, useMount } from 'ahooks';
import { useChatStore } from '@/web/core/chat/context/useChatStore'; import { useChatStore } from '@/web/core/chat/context/useChatStore';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { getInitChatInfo } from '@/web/core/chat/api'; import { getInitChatInfo } from '@/web/core/chat/api';
@@ -51,6 +51,7 @@ import { ChatRecordContext } from '@/web/core/chat/context/chatRecordContext';
import { HUGGING_FACE_ICON } from '@fastgpt/global/common/system/constants'; import { HUGGING_FACE_ICON } from '@fastgpt/global/common/system/constants';
import { getModelFromList } from '@fastgpt/global/core/ai/model'; import { getModelFromList } from '@fastgpt/global/core/ai/model';
import MyPopover from '@fastgpt/web/components/common/MyPopover'; import MyPopover from '@fastgpt/web/components/common/MyPopover';
import { ChatSidebarPaneEnum } from '../constants';
type Props = { type Props = {
myApps: AppListItemType[]; myApps: AppListItemType[];
@@ -73,9 +74,11 @@ const HomeChatWindow = ({ myApps }: Props) => {
const { isPc } = useSystem(); const { isPc } = useSystem();
const { userInfo } = useUserStore(); const { userInfo } = useUserStore();
const { llmModelList, defaultModels } = useSystemStore(); const { llmModelList, defaultModels, feConfigs } = useSystemStore();
const { chatId, appId, outLinkAuthData } = useChatStore(); const { chatId, appId, outLinkAuthData } = useChatStore();
const onHomeClick = useContextSelector(ChatSettingContext, (v) => v.handlePaneChange);
const isOpenSlider = useContextSelector(ChatContext, (v) => v.isOpenSlider); const isOpenSlider = useContextSelector(ChatContext, (v) => v.isOpenSlider);
const forbidLoadChat = useContextSelector(ChatContext, (v) => v.forbidLoadChat); const forbidLoadChat = useContextSelector(ChatContext, (v) => v.forbidLoadChat);
const onCloseSlider = useContextSelector(ChatContext, (v) => v.onCloseSlider); const onCloseSlider = useContextSelector(ChatContext, (v) => v.onCloseSlider);
@@ -168,6 +171,12 @@ const HomeChatWindow = ({ myApps }: Props) => {
} }
); );
useMount(() => {
if (!feConfigs?.isPlus) {
onHomeClick(ChatSidebarPaneEnum.RECENTLY_USED_APPS);
}
});
// 使用类似AppChatWindow的对话逻辑 // 使用类似AppChatWindow的对话逻辑
const onStartChat = useMemoizedFn( const onStartChat = useMemoizedFn(
async ({ async ({

View File

@@ -1,6 +1,6 @@
import React, { useCallback, useState } from 'react'; import React, { useCallback } from 'react';
import type { BoxProps } from '@chakra-ui/react'; import type { BoxProps } from '@chakra-ui/react';
import { Flex, Box, HStack, Image, Skeleton } from '@chakra-ui/react'; import { Flex, Box, HStack, Image } from '@chakra-ui/react';
import { motion, AnimatePresence } from 'framer-motion'; import { motion, AnimatePresence } from 'framer-motion';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { useTranslation } from 'next-i18next'; import { useTranslation } from 'next-i18next';
@@ -10,8 +10,6 @@ import MyDivider from '@fastgpt/web/components/common/MyDivider';
import { useUserStore } from '@/web/support/user/useUserStore'; import { useUserStore } from '@/web/support/user/useUserStore';
import UserAvatarPopover from '@/pageComponents/chat/UserAvatarPopover'; import UserAvatarPopover from '@/pageComponents/chat/UserAvatarPopover';
import MyBox from '@fastgpt/web/components/common/MyBox'; import MyBox from '@fastgpt/web/components/common/MyBox';
import MyPopover from '@fastgpt/web/components/common/MyPopover';
import SelectOneResource from '@/components/common/folder/SelectOneResource';
import MyIcon from '@fastgpt/web/components/common/Icon'; import MyIcon from '@fastgpt/web/components/common/Icon';
import type { import type {
GetResourceFolderListProps, GetResourceFolderListProps,
@@ -280,45 +278,49 @@ const NavigationSection = () => {
<AnimatePresence mode="wait"> <AnimatePresence mode="wait">
{isCollapsed ? ( {isCollapsed ? (
<AnimatedSection show={true}> <AnimatedSection show={true}>
<Flex flexDir="column" gap={2}> <ActionButton
<ActionButton icon="core/chat/sidebar/home"
icon="core/chat/sidebar/home" isCollapsed={true}
isCollapsed={true} isActive={isHomeActive}
isActive={isHomeActive} onClick={() => onHomeClick(ChatSidebarPaneEnum.HOME)}
onClick={() => onHomeClick(ChatSidebarPaneEnum.HOME)} />
/>
<ActionButton
icon="common/app"
isCollapsed={true}
isActive={isTeamAppsActive}
onClick={() => onHomeClick(ChatSidebarPaneEnum.TEAM_APPS)}
/>
</Flex>
</AnimatedSection> </AnimatedSection>
) : ( ) : (
<AnimatedSection show={true}> <AnimatedSection show={true}>
<Flex flexDir="column" gap={2}> <ActionButton
<ActionButton icon="core/chat/sidebar/home"
icon="core/chat/sidebar/home" text={t('chat:sidebar.home')}
text={t('chat:sidebar.home')} isCollapsed={false}
isCollapsed={false} isActive={isHomeActive}
isActive={isHomeActive} onClick={() => onHomeClick(ChatSidebarPaneEnum.HOME)}
onClick={() => onHomeClick(ChatSidebarPaneEnum.HOME)} />
/>
<ActionButton
icon="common/app"
text={t('chat:sidebar.team_apps')}
isCollapsed={false}
isActive={isTeamAppsActive}
onClick={() => onHomeClick(ChatSidebarPaneEnum.TEAM_APPS)}
/>
</Flex>
</AnimatedSection> </AnimatedSection>
)} )}
</AnimatePresence> </AnimatePresence>
)} )}
<AnimatePresence mode="wait">
{isCollapsed ? (
<AnimatedSection show={true}>
<ActionButton
icon="common/app"
isCollapsed={true}
isActive={isTeamAppsActive}
onClick={() => onHomeClick(ChatSidebarPaneEnum.TEAM_APPS)}
/>
</AnimatedSection>
) : (
<AnimatedSection show={true}>
<ActionButton
icon="common/app"
text={t('chat:sidebar.team_apps')}
isCollapsed={false}
isActive={isTeamAppsActive}
onClick={() => onHomeClick(ChatSidebarPaneEnum.TEAM_APPS)}
/>
</AnimatedSection>
)}
</AnimatePresence>
</Flex> </Flex>
); );
}; };

View File

@@ -2,7 +2,7 @@ import { create, createJSONStorage, devtools, persist, immer } from '@fastgpt/we
import { getNanoid } from '@fastgpt/global/common/string/tools'; import { getNanoid } from '@fastgpt/global/common/string/tools';
import { type OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat'; import { type OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat';
import type { ChatSourceEnum } from '@fastgpt/global/core/chat/constants'; import type { ChatSourceEnum } from '@fastgpt/global/core/chat/constants';
import { ChatSidebarPaneEnum } from '@/pageComponents/chat/constants'; import type { ChatSidebarPaneEnum } from '@/pageComponents/chat/constants';
type State = { type State = {
source?: `${ChatSourceEnum}`; source?: `${ChatSourceEnum}`;
@@ -17,7 +17,7 @@ type State = {
chatId: string; chatId: string;
setChatId: (e?: string) => any; setChatId: (e?: string) => any;
lastPane: ChatSidebarPaneEnum; lastPane?: ChatSidebarPaneEnum;
setLastPane: (e: ChatSidebarPaneEnum) => any; setLastPane: (e: ChatSidebarPaneEnum) => any;
outLinkAuthData: OutLinkChatAuthProps; outLinkAuthData: OutLinkChatAuthProps;
@@ -115,7 +115,7 @@ export const useChatStore = create<State>()(
state.lastChatAppId = e; state.lastChatAppId = e;
}); });
}, },
lastPane: ChatSidebarPaneEnum.HOME, lastPane: undefined,
setLastPane(e) { setLastPane(e) {
set((state) => { set((state) => {
state.lastPane = e; state.lastPane = e;