diff --git a/src/app.tsx b/src/app.tsx index b89c6c69..a42b3802 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,5 +1,6 @@ import { GPUStackVersionAtom, UpdateCheckAtom } from '@/atoms/user'; import { setAtomStorage } from '@/atoms/utils'; +import { DEFAULT_ENTER_PAGE } from '@/config/settings'; import { requestConfig } from '@/request-config'; import { queryCurrentUserState, @@ -15,8 +16,6 @@ import { import { RequestConfig, history } from '@umijs/max'; import { message } from 'antd'; -const loginPath = '/login'; - // only for the first login and access from http://localhost const checkDefaultPage = async (userInfo: any) => { @@ -24,7 +23,7 @@ const checkDefaultPage = async (userInfo: any) => { if (isFirstLogin === null && isOnline()) { writeState(IS_FIRST_LOGIN, true); if (userInfo && userInfo?.is_admin) { - history.push('/models/deployments'); + history.push(DEFAULT_ENTER_PAGE.adminForFirst); } } }; @@ -72,7 +71,7 @@ export async function getInitialState(): Promise<{ duration: 5 }); } - history.push(loginPath); + history.push(DEFAULT_ENTER_PAGE.login); } return {} as Global.UserInfo; }; @@ -92,7 +91,7 @@ export async function getInitialState(): Promise<{ getAppVersionInfo(); - if (![loginPath].includes(location.pathname)) { + if (![DEFAULT_ENTER_PAGE.login].includes(location.pathname)) { const userInfo = await fetchUserInfo(); checkDefaultPage(userInfo); return { diff --git a/src/config/constants.ts b/src/config/constants.ts deleted file mode 100644 index 8868592e..00000000 --- a/src/config/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const HEADER_HEIGHT = 56; diff --git a/src/config/settings.ts b/src/config/settings.ts new file mode 100644 index 00000000..7eaa8afe --- /dev/null +++ b/src/config/settings.ts @@ -0,0 +1,8 @@ +export const HEADER_HEIGHT = 56; + +export const DEFAULT_ENTER_PAGE = { + adminForNormal: '/dashboard', + adminForFirst: '/models/deployments', + user: '/models/user-models', + login: '/login' +}; diff --git a/src/hooks/use-overlay-scroller.ts b/src/hooks/use-overlay-scroller.ts index 736560ad..ac72312b 100644 --- a/src/hooks/use-overlay-scroller.ts +++ b/src/hooks/use-overlay-scroller.ts @@ -232,20 +232,7 @@ export default function useOverlayScroller(data?: { instanceRef.current?.elements()?.scrollEventElement; } - const scrollerState = instanceRef.current?.state(); - const overflowAmount = scrollerState?.overflowAmount; const scrollOffsetElement = instanceRef.current?.elements().viewport; - console.log('osInstance==========', overflowAmount, scrollOffsetElement, { - top: - Math.round( - (overflowAmount?.y - scrollOffsetElement?.scrollTop || 0) / - overflowAmount?.y - ) * overflowAmount?.y, - scrollTop: scrollOffsetElement?.scrollTop, - scrollLeft: scrollOffsetElement?.scrollLeft, - scrollHeight: - scrollOffsetElement?.scrollHeight - scrollOffsetElement?.clientHeight - }); return { scrollTop: scrollOffsetElement?.scrollTop, diff --git a/src/layouts/extraRender.tsx b/src/layouts/extraRender.tsx index e68e0137..81dbed43 100644 --- a/src/layouts/extraRender.tsx +++ b/src/layouts/extraRender.tsx @@ -20,6 +20,7 @@ import { Avatar, Divider, Modal } from 'antd'; import { useAtom } from 'jotai'; import { useMemo } from 'react'; import styled from 'styled-components'; +import { DEFAULT_ENTER_PAGE } from '../config/settings'; const IconWrapper = styled.span` cursor: pointer; @@ -93,7 +94,7 @@ export const ExtraContent = () => { const navigate = useNavigate(); - const loginPath = '/login'; + const loginPath = DEFAULT_ENTER_PAGE.login; const showUpgrade = useMemo(() => { return ( diff --git a/src/layouts/index.tsx b/src/layouts/index.tsx index 1c0397bc..a087401a 100644 --- a/src/layouts/index.tsx +++ b/src/layouts/index.tsx @@ -9,6 +9,7 @@ import ShortCuts, { } from '@/components/short-cuts'; import VersionInfo, { modalConfig } from '@/components/version-info'; import routeCachekey from '@/config/route-cachekey'; +import { DEFAULT_ENTER_PAGE } from '@/config/settings'; import useBodyScroll from '@/hooks/use-body-scroll'; import useOverlayScroller from '@/hooks/use-overlay-scroller'; import useUserSettings from '@/hooks/use-user-settings'; @@ -54,7 +55,7 @@ const NO_CONTAINER_PAGES = [ 'clusterCreate' ]; -const loginPath = '/login'; +const loginPath = DEFAULT_ENTER_PAGE.login; type InitialStateType = { fetchUserInfo: () => Promise; @@ -408,8 +409,8 @@ export default (props: any) => { history.push(loginPath); } else if (location.pathname === '/') { const pathname = initialState?.currentUser?.is_admin - ? '/dashboard' - : '/playground'; + ? DEFAULT_ENTER_PAGE.adminForNormal + : DEFAULT_ENTER_PAGE.user; history.push(pathname); } }; @@ -417,11 +418,14 @@ export default (props: any) => { const onMenuHeaderClick = (e) => { e.stopPropagation(); e.preventDefault(); - navigate('/dashboard'); + const pagepath = initialState?.currentUser?.is_admin + ? DEFAULT_ENTER_PAGE.adminForNormal + : DEFAULT_ENTER_PAGE.user; + + navigate(pagepath); }; const onCollapse = (value) => { - // setCollapsed(value); setUserSettings({ ...userSettings, collapsed: value diff --git a/src/locales/en-US/models.ts b/src/locales/en-US/models.ts index 5f55bb24..36b42350 100644 --- a/src/locales/en-US/models.ts +++ b/src/locales/en-US/models.ts @@ -42,7 +42,7 @@ export default { 'models.search.hfvisit': 'Please make sure you can visit', 'models.search.unsupport': 'This model is not supported and may be unusable after deployment.', - 'models.form.scheduletype': 'Schedule Type', + 'models.form.scheduletype': 'Scheduling Mode', 'models.form.categories': 'Model Category', 'models.form.scheduletype.auto': 'Auto', 'models.form.scheduletype.manual': 'Manual', diff --git a/src/pages/llmodels/forms/index.tsx b/src/pages/llmodels/forms/index.tsx index 7301e73a..03b9a20c 100644 --- a/src/pages/llmodels/forms/index.tsx +++ b/src/pages/llmodels/forms/index.tsx @@ -3,6 +3,7 @@ import { PageActionType } from '@/config/types'; import CollapsePanel from '@/pages/_components/collapse-panel'; import { useWrapperContext } from '@/pages/_components/column-wrapper/use-wrapper-context'; import { useIntl } from '@umijs/max'; +import useMemoizedFn from 'ahooks/lib/useMemoizedFn'; import { Form, Segmented } from 'antd'; import _ from 'lodash'; import React, { forwardRef, useImperativeHandle, useMemo } from 'react'; @@ -130,11 +131,6 @@ const DataForm: React.FC = forwardRef((props, ref) => { } ]; - console.log( - 'getScrollElementScrollableHeight', - getScrollElementScrollableHeight?.() - ); - const segmentedTop = useMemo(() => { if ( modelSourceMap.local_path_value === source || @@ -294,10 +290,19 @@ const DataForm: React.FC = forwardRef((props, ref) => { setActiveKey(Array.isArray(keys) ? keys : [keys]); }; - const handleTargetChange = async (val: any) => { - setTarget(val); + const throttleScrollToSegment = useMemoizedFn( + _.throttle( + async (val: string) => { + setTarget(val); + scrollToSegment(val, { offsetTop: segmentedTop.offsetTop }); + }, + 500, + { trailing: true } + ) + ); - await scrollToSegment(val, { offsetTop: segmentedTop.offsetTop }); + const handleTargetChange = async (val: any) => { + throttleScrollToSegment(val); }; const handleOnFinishFailed = (errorInfo: any) => { diff --git a/src/pages/login/utils.ts b/src/pages/login/utils.ts index b26983ae..dd9ff84d 100644 --- a/src/pages/login/utils.ts +++ b/src/pages/login/utils.ts @@ -1,3 +1,4 @@ +import { DEFAULT_ENTER_PAGE } from '@/config/settings'; import { isOnline } from '@/utils'; import { IS_FIRST_LOGIN, @@ -12,13 +13,17 @@ export const checkDefaultPage = async (userInfo: any, replace: boolean) => { if (isFirstLogin === null && isOnline()) { writeState(IS_FIRST_LOGIN, true); const pathname = - userInfo && userInfo?.is_admin ? '/models/deployments' : '/playground'; + userInfo && userInfo?.is_admin + ? DEFAULT_ENTER_PAGE.adminForFirst + : DEFAULT_ENTER_PAGE.user; history.push(pathname); return; } await writeState(IS_FIRST_LOGIN, false); - const pathname = userInfo?.is_admin ? '/dashboard' : '/playground'; + const pathname = userInfo?.is_admin + ? DEFAULT_ENTER_PAGE.adminForNormal + : DEFAULT_ENTER_PAGE.user; history.push(pathname, { replace: replace }); }; diff --git a/src/pages/playground/components/ground-stt.tsx b/src/pages/playground/components/ground-stt.tsx index c4b96f96..6a5026cf 100644 --- a/src/pages/playground/components/ground-stt.tsx +++ b/src/pages/playground/components/ground-stt.tsx @@ -5,8 +5,8 @@ import AudioPlayer from '@/components/audio-player'; import CopyButton from '@/components/copy-button'; import IconFont from '@/components/icon-font'; import UploadAudio from '@/components/upload-audio'; -import { HEADER_HEIGHT } from '@/config/constants'; import routeCachekey from '@/config/route-cachekey'; +import { HEADER_HEIGHT } from '@/config/settings'; import useOverlayScroller from '@/hooks/use-overlay-scroller'; import { useCancelToken } from '@/hooks/use-request-token'; import { readAudioFile } from '@/utils/load-audio-file'; diff --git a/src/pages/playground/components/multiple-chat/index.tsx b/src/pages/playground/components/multiple-chat/index.tsx index 5cac9487..f925ce1e 100644 --- a/src/pages/playground/components/multiple-chat/index.tsx +++ b/src/pages/playground/components/multiple-chat/index.tsx @@ -1,4 +1,4 @@ -import { HEADER_HEIGHT } from '@/config/constants'; +import { HEADER_HEIGHT } from '@/config/settings'; import useOverlayScroller from '@/hooks/use-overlay-scroller'; import _ from 'lodash'; import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; diff --git a/src/request-config.ts b/src/request-config.ts index 377fe8fb..c853385f 100644 --- a/src/request-config.ts +++ b/src/request-config.ts @@ -2,6 +2,7 @@ import { userAtom } from '@/atoms/user'; import { clearAtomStorage } from '@/atoms/utils'; import { RequestConfig, history } from '@umijs/max'; import { message } from 'antd'; +import { DEFAULT_ENTER_PAGE } from './config/settings'; // no base URL APIs const NoBaseURLAPIs = ['/auth', '/v1-openai', '/version', '/proxy', '/update']; @@ -24,7 +25,7 @@ export const requestConfig: RequestConfig = { if (response?.status === 401) { clearAtomStorage(userAtom); - history.push('/login', { replace: true }); + history.push(DEFAULT_ENTER_PAGE.login, { replace: true }); } } },