From b8bfbac2e53710b7e922f1c046552f26e4262a75 Mon Sep 17 00:00:00 2001 From: balibabu Date: Tue, 19 Aug 2025 17:41:03 +0800 Subject: [PATCH] Feat: Switch the root route to the new page #3221 (#9560) ### What problem does this PR solve? Feat: Switch the root route to the new page #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --- web/src/hooks/logic-hooks/navigate-hooks.ts | 7 +- web/src/layouts/next-header.tsx | 35 +-- web/src/pages/agent/index.tsx | 4 +- web/src/pages/agents/agent-log-page.tsx | 6 +- web/src/pages/agents/agent-templates.tsx | 6 +- web/src/pages/home/agent-list.tsx | 10 +- web/src/pages/home/application-card.tsx | 5 +- web/src/pages/home/chat-list.tsx | 21 +- web/src/pages/home/search-list.tsx | 21 +- web/src/pages/login/index.tsx | 4 +- web/src/pages/user-setting/index.tsx | 43 +++- web/src/routes.ts | 267 ++++++++++++-------- 12 files changed, 265 insertions(+), 164 deletions(-) diff --git a/web/src/hooks/logic-hooks/navigate-hooks.ts b/web/src/hooks/logic-hooks/navigate-hooks.ts index 4cd9aa6f1..585997e16 100644 --- a/web/src/hooks/logic-hooks/navigate-hooks.ts +++ b/web/src/hooks/logic-hooks/navigate-hooks.ts @@ -24,13 +24,17 @@ export const useNavigatePage = () => { ); const navigateToHome = useCallback(() => { - navigate(Routes.Home); + navigate(Routes.Root); }, [navigate]); const navigateToProfile = useCallback(() => { navigate(Routes.ProfileSetting); }, [navigate]); + const navigateToOldProfile = useCallback(() => { + navigate(Routes.UserSetting); + }, [navigate]); + const navigateToChatList = useCallback(() => { navigate(Routes.Chats); }, [navigate]); @@ -139,5 +143,6 @@ export const useNavigatePage = () => { navigateToSearch, navigateToFiles, navigateToAgentList, + navigateToOldProfile, }; }; diff --git a/web/src/layouts/next-header.tsx b/web/src/layouts/next-header.tsx index a75054d14..837019f17 100644 --- a/web/src/layouts/next-header.tsx +++ b/web/src/layouts/next-header.tsx @@ -40,7 +40,7 @@ export function Header() { const { t } = useTranslation(); const { pathname } = useLocation(); const navigate = useNavigateWithFromState(); - const { navigateToProfile } = useNavigatePage(); + const { navigateToOldProfile } = useNavigatePage(); const changeLanguage = useChangeLanguage(); const { setTheme, theme } = useTheme(); @@ -74,7 +74,7 @@ export function Header() { const tagsData = useMemo( () => [ - { path: Routes.Home, name: t('header.home'), icon: House }, + { path: Routes.Root, name: t('header.Root'), icon: House }, { path: Routes.Datasets, name: t('header.dataset'), icon: Library }, { path: Routes.Chats, name: t('header.chat'), icon: MessageSquareText }, { path: Routes.Searches, name: t('header.search'), icon: Search }, @@ -90,7 +90,7 @@ export function Header() { return { label: - tag.path === Routes.Home ? ( + tag.path === Routes.Root ? ( ) : ( {tag.name} @@ -100,18 +100,18 @@ export function Header() { }); }, [tagsData]); - const currentPath = useMemo(() => { - return ( - tagsData.find((x) => pathname.startsWith(x.path))?.path || Routes.Home - ); - }, [pathname, tagsData]); + // const currentPath = useMemo(() => { + // return ( + // tagsData.find((x) => pathname.startsWith(x.path))?.path || Routes.Root + // ); + // }, [pathname, tagsData]); const handleChange = (path: SegmentedValue) => { navigate(path as Routes); }; const handleLogoClick = useCallback(() => { - navigate(Routes.Home); + navigate(Routes.Root); }, [navigate]); return ( @@ -123,14 +123,19 @@ export function Header() { className="size-10 mr-[12]" onClick={handleLogoClick} /> -
- - 21.5k stars -
+ + + {/* 21.5k stars */} +
@@ -160,7 +165,7 @@ export function Header() { name={nickname} avatar={avatar} className="size-8 cursor-pointer" - onClick={navigateToProfile} + onClick={navigateToOldProfile} > {/* Temporarily hidden */} {/* diff --git a/web/src/pages/agent/index.tsx b/web/src/pages/agent/index.tsx index c08e94586..625fab48f 100644 --- a/web/src/pages/agent/index.tsx +++ b/web/src/pages/agent/index.tsx @@ -63,7 +63,7 @@ function AgentDropdownMenuItem({ export default function Agent() { const { id } = useParams(); - const { navigateToAgentList } = useNavigatePage(); + const { navigateToAgents } = useNavigatePage(); const { visible: chatDrawerVisible, hideModal: hideChatDrawer, @@ -113,7 +113,7 @@ export default function Agent() { - + Agent diff --git a/web/src/pages/agents/agent-log-page.tsx b/web/src/pages/agents/agent-log-page.tsx index c4ce9f33a..d0d39e41d 100644 --- a/web/src/pages/agents/agent-log-page.tsx +++ b/web/src/pages/agents/agent-log-page.tsx @@ -44,7 +44,7 @@ const getEndOfToday = (): Date => { return today; }; const AgentLogPage: React.FC = () => { - const { navigateToAgentList, navigateToAgent } = useNavigatePage(); + const { navigateToAgents, navigateToAgent } = useNavigatePage(); const { flowDetail: agentDetail } = useFetchDataOnMount(); const { id: canvasId } = useParams(); const queryClient = useQueryClient(); @@ -210,9 +210,7 @@ const AgentLogPage: React.FC = () => { - - Agent - + Agent diff --git a/web/src/pages/agents/agent-templates.tsx b/web/src/pages/agents/agent-templates.tsx index e6d914bd1..ba5aea817 100644 --- a/web/src/pages/agents/agent-templates.tsx +++ b/web/src/pages/agents/agent-templates.tsx @@ -18,7 +18,7 @@ import { TemplateCard } from './template-card'; import { MenuItemKey, SideBar } from './template-sidebar'; export default function AgentTemplates() { - const { navigateToAgentList } = useNavigatePage(); + const { navigateToAgents } = useNavigatePage(); const { t } = useTranslation(); const list = useFetchAgentTemplates(); const { loading, setAgent } = useSetAgent(); @@ -89,9 +89,7 @@ export default function AgentTemplates() { - - Agent - + Agent diff --git a/web/src/pages/home/agent-list.tsx b/web/src/pages/home/agent-list.tsx index ee5965e27..60e1a3c66 100644 --- a/web/src/pages/home/agent-list.tsx +++ b/web/src/pages/home/agent-list.tsx @@ -1,10 +1,18 @@ +import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { useFetchAgentListByPage } from '@/hooks/use-agent-request'; import { ApplicationCard } from './application-card'; export function Agents() { const { data } = useFetchAgentListByPage(); + const { navigateToAgent } = useNavigatePage(); return data .slice(0, 10) - .map((x) => ); + .map((x) => ( + + )); } diff --git a/web/src/pages/home/application-card.tsx b/web/src/pages/home/application-card.tsx index fc118d5d7..96aaed609 100644 --- a/web/src/pages/home/application-card.tsx +++ b/web/src/pages/home/application-card.tsx @@ -10,11 +10,12 @@ type ApplicationCardProps = { title: string; update_time: number; }; + onClick?(): void; }; -export function ApplicationCard({ app }: ApplicationCardProps) { +export function ApplicationCard({ app, onClick }: ApplicationCardProps) { return ( - +
( - - )); + return data.dialogs.slice(0, 10).map((x) => ( + + )); } diff --git a/web/src/pages/home/search-list.tsx b/web/src/pages/home/search-list.tsx index af22ab5f0..3e133e0a2 100644 --- a/web/src/pages/home/search-list.tsx +++ b/web/src/pages/home/search-list.tsx @@ -1,15 +1,20 @@ +import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { useFetchSearchList } from '../next-searches/hooks'; import { ApplicationCard } from './application-card'; export function SearchList() { const { data } = useFetchSearchList(); + const { navigateToSearch } = useNavigatePage(); - return data?.data.search_apps - .slice(0, 10) - .map((x) => ( - - )); + return data?.data.search_apps.slice(0, 10).map((x) => ( + navigateToSearch(x.id)} + > + )); } diff --git a/web/src/pages/login/index.tsx b/web/src/pages/login/index.tsx index 19906164b..9b4012c25 100644 --- a/web/src/pages/login/index.tsx +++ b/web/src/pages/login/index.tsx @@ -36,7 +36,7 @@ const Login = () => { const { isLogin } = useAuth(); useEffect(() => { if (isLogin) { - navigate('/knowledge'); + navigate('/'); } }, [isLogin, navigate]); @@ -68,7 +68,7 @@ const Login = () => { password: rsaPassWord, }); if (code === 0) { - navigate('/knowledge'); + navigate('/'); } } else { const code = await register({ diff --git a/web/src/pages/user-setting/index.tsx b/web/src/pages/user-setting/index.tsx index e23c4e400..d5871f177 100644 --- a/web/src/pages/user-setting/index.tsx +++ b/web/src/pages/user-setting/index.tsx @@ -2,16 +2,49 @@ import { Flex } from 'antd'; import { Outlet } from 'umi'; import SideBar from './sidebar'; +import { PageHeader } from '@/components/page-header'; +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from '@/components/ui/breadcrumb'; +import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; +import { cn } from '@/lib/utils'; +import { House } from 'lucide-react'; +import { useTranslation } from 'react-i18next'; import styles from './index.less'; const UserSetting = () => { + const { t } = useTranslation(); + const { navigateToHome } = useNavigatePage(); + return ( - - - - +
+ + + + + + + + + + + {t('setting.profile')} + + + + + + + + + - +
); }; diff --git a/web/src/routes.ts b/web/src/routes.ts index bd0d9fb59..990fa9304 100644 --- a/web/src/routes.ts +++ b/web/src/routes.ts @@ -1,4 +1,5 @@ export enum Routes { + Root = '/', Login = '/login', Logout = '/logout', Home = '/home', @@ -40,6 +41,7 @@ export enum Routes { AgentLogPage = '/agent-log-page', AgentShare = '/agent/share', ChatShare = `${Chats}/share`, + UserSetting = '/user-setting', } const routes = [ @@ -68,116 +70,116 @@ const routes = [ component: `@/pages${Routes.AgentShare}`, layout: false, }, - { - path: '/', - component: '@/layouts', - layout: false, - wrappers: ['@/wrappers/auth'], - routes: [ - { path: '/', redirect: '/knowledge' }, - { - path: '/knowledge', - component: '@/pages/knowledge', - // component: '@/pages/knowledge/datasets', - }, - { - path: '/knowledge', - component: '@/pages/add-knowledge', - routes: [ - { - path: '/knowledge/dataset', - component: '@/pages/add-knowledge/components/knowledge-dataset', - routes: [ - { - path: '/knowledge/dataset', - component: '@/pages/add-knowledge/components/knowledge-file', - }, - { - path: '/knowledge/dataset/chunk', - component: '@/pages/add-knowledge/components/knowledge-chunk', - }, - ], - }, - { - path: '/knowledge/configuration', - component: '@/pages/add-knowledge/components/knowledge-setting', - }, - { - path: '/knowledge/testing', - component: '@/pages/add-knowledge/components/knowledge-testing', - }, - { - path: '/knowledge/knowledgeGraph', - component: '@/pages/add-knowledge/components/knowledge-graph', - }, - ], - }, - { - path: '/chat', - component: '@/pages/chat', - }, - { - path: '/user-setting', - component: '@/pages/user-setting', - routes: [ - { path: '/user-setting', redirect: '/user-setting/profile' }, - { - path: '/user-setting/profile', - // component: '@/pages/user-setting/setting-profile', - component: '@/pages/user-setting/setting-profile', - }, - { - path: '/user-setting/locale', - component: '@/pages/user-setting/setting-locale', - }, - { - path: '/user-setting/password', - component: '@/pages/user-setting/setting-password', - }, - { - path: '/user-setting/model', - component: '@/pages/user-setting/setting-model', - }, - { - path: '/user-setting/team', - component: '@/pages/user-setting/setting-team', - }, - { - path: '/user-setting/system', - component: '@/pages/user-setting/setting-system', - }, - { - path: '/user-setting/api', - component: '@/pages/user-setting/setting-api', - }, - { - path: `/user-setting${Routes.Mcp}`, - component: `@/pages${Routes.ProfileMcp}`, - }, - ], - }, - { - path: '/file', - component: '@/pages/file-manager', - }, - { - path: '/flow', - component: '@/pages/flow/list', - }, - { - path: Routes.AgentList, - component: `@/pages/${Routes.Agents}`, - }, - { - path: '/flow/:id', - component: '@/pages/flow', - }, - { - path: '/search', - component: '@/pages/search', - }, - ], - }, + // { + // path: '/', + // component: '@/layouts', + // layout: false, + // wrappers: ['@/wrappers/auth'], + // routes: [ + // { path: '/', redirect: '/knowledge' }, + // { + // path: '/knowledge', + // component: '@/pages/knowledge', + // // component: '@/pages/knowledge/datasets', + // }, + // { + // path: '/knowledge', + // component: '@/pages/add-knowledge', + // routes: [ + // { + // path: '/knowledge/dataset', + // component: '@/pages/add-knowledge/components/knowledge-dataset', + // routes: [ + // { + // path: '/knowledge/dataset', + // component: '@/pages/add-knowledge/components/knowledge-file', + // }, + // { + // path: '/knowledge/dataset/chunk', + // component: '@/pages/add-knowledge/components/knowledge-chunk', + // }, + // ], + // }, + // { + // path: '/knowledge/configuration', + // component: '@/pages/add-knowledge/components/knowledge-setting', + // }, + // { + // path: '/knowledge/testing', + // component: '@/pages/add-knowledge/components/knowledge-testing', + // }, + // { + // path: '/knowledge/knowledgeGraph', + // component: '@/pages/add-knowledge/components/knowledge-graph', + // }, + // ], + // }, + // { + // path: '/chat', + // component: '@/pages/chat', + // }, + // { + // path: '/user-setting', + // component: '@/pages/user-setting', + // routes: [ + // { path: '/user-setting', redirect: '/user-setting/profile' }, + // { + // path: '/user-setting/profile', + // // component: '@/pages/user-setting/setting-profile', + // component: '@/pages/user-setting/setting-profile', + // }, + // { + // path: '/user-setting/locale', + // component: '@/pages/user-setting/setting-locale', + // }, + // { + // path: '/user-setting/password', + // component: '@/pages/user-setting/setting-password', + // }, + // { + // path: '/user-setting/model', + // component: '@/pages/user-setting/setting-model', + // }, + // { + // path: '/user-setting/team', + // component: '@/pages/user-setting/setting-team', + // }, + // { + // path: '/user-setting/system', + // component: '@/pages/user-setting/setting-system', + // }, + // { + // path: '/user-setting/api', + // component: '@/pages/user-setting/setting-api', + // }, + // { + // path: `/user-setting${Routes.Mcp}`, + // component: `@/pages${Routes.ProfileMcp}`, + // }, + // ], + // }, + // { + // path: '/file', + // component: '@/pages/file-manager', + // }, + // { + // path: '/flow', + // component: '@/pages/flow/list', + // }, + // { + // path: Routes.AgentList, + // component: `@/pages/${Routes.Agents}`, + // }, + // { + // path: '/flow/:id', + // component: '@/pages/flow', + // }, + // { + // path: '/search', + // component: '@/pages/search', + // }, + // ], + // }, { path: '/document/:id', component: '@/pages/document-viewer', @@ -189,12 +191,12 @@ const routes = [ layout: false, }, { - path: Routes.Home, + path: Routes.Root, layout: false, component: '@/layouts/next', routes: [ { - path: Routes.Home, + path: Routes.Root, component: `@/pages${Routes.Home}`, }, ], @@ -382,6 +384,47 @@ const routes = [ }, ], }, + { + path: '/user-setting', + component: '@/pages/user-setting', + layout: false, + routes: [ + { path: '/user-setting', redirect: '/user-setting/profile' }, + { + path: '/user-setting/profile', + // component: '@/pages/user-setting/setting-profile', + component: '@/pages/user-setting/setting-profile', + }, + { + path: '/user-setting/locale', + component: '@/pages/user-setting/setting-locale', + }, + { + path: '/user-setting/password', + component: '@/pages/user-setting/setting-password', + }, + { + path: '/user-setting/model', + component: '@/pages/user-setting/setting-model', + }, + { + path: '/user-setting/team', + component: '@/pages/user-setting/setting-team', + }, + { + path: '/user-setting/system', + component: '@/pages/user-setting/setting-system', + }, + { + path: '/user-setting/api', + component: '@/pages/user-setting/setting-api', + }, + { + path: `/user-setting${Routes.Mcp}`, + component: `@/pages${Routes.ProfileMcp}`, + }, + ], + }, ]; export default routes;