mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-29 01:40:51 +00:00
perf: ssr
This commit is contained in:
@@ -25,6 +25,7 @@ const Radio = ({ list, value, onChange, ...props }: Props) => {
|
|||||||
mr: 1,
|
mr: 1,
|
||||||
borderRadius: '16px',
|
borderRadius: '16px',
|
||||||
transition: '0.2s',
|
transition: '0.2s',
|
||||||
|
boxSizing: 'border-box',
|
||||||
...(value === item.value
|
...(value === item.value
|
||||||
? {
|
? {
|
||||||
border: '5px solid',
|
border: '5px solid',
|
||||||
|
@@ -11,8 +11,6 @@ const { definePartsStyle: switchPart, defineMultiStyleConfig: switchMultiStyle }
|
|||||||
createMultiStyleConfigHelpers(switchAnatomy.keys);
|
createMultiStyleConfigHelpers(switchAnatomy.keys);
|
||||||
const { definePartsStyle: selectPart, defineMultiStyleConfig: selectMultiStyle } =
|
const { definePartsStyle: selectPart, defineMultiStyleConfig: selectMultiStyle } =
|
||||||
createMultiStyleConfigHelpers(selectAnatomy.keys);
|
createMultiStyleConfigHelpers(selectAnatomy.keys);
|
||||||
const { definePartsStyle: checkboxPart, defineMultiStyleConfig: checkboxMultiStyle } =
|
|
||||||
createMultiStyleConfigHelpers(checkboxAnatomy.keys);
|
|
||||||
|
|
||||||
// modal 弹窗
|
// modal 弹窗
|
||||||
const ModalTheme = defineMultiStyleConfig({
|
const ModalTheme = defineMultiStyleConfig({
|
||||||
@@ -69,6 +67,7 @@ const Button = defineStyleConfig({
|
|||||||
backgroundImage:
|
backgroundImage:
|
||||||
'linear-gradient(to bottom right, #2152d9 0%,#3370ff 40%, #4e83fd 100%) !important',
|
'linear-gradient(to bottom right, #2152d9 0%,#3370ff 40%, #4e83fd 100%) !important',
|
||||||
color: 'white',
|
color: 'white',
|
||||||
|
border: 'none',
|
||||||
_hover: {
|
_hover: {
|
||||||
filter: 'brightness(115%)'
|
filter: 'brightness(115%)'
|
||||||
},
|
},
|
||||||
|
@@ -1,12 +1,10 @@
|
|||||||
function Error({ errStr }: { errStr: string }) {
|
function Error() {
|
||||||
return <p>{errStr}</p>;
|
return (
|
||||||
|
<p>
|
||||||
|
部分系统不兼容,导致页面崩溃。如果可以,请联系作者,反馈下具体操作和页面。大部分是 苹果 的
|
||||||
|
safari 浏览器导致,可以尝试更换 chrome 浏览器。
|
||||||
|
</p>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Error.getInitialProps = ({ res, err }: { res: any; err: any }) => {
|
|
||||||
console.log(err);
|
|
||||||
return {
|
|
||||||
errStr: `部分系统不兼容,导致页面崩溃。如果可以,请联系作者,反馈下具体操作和页面。大部分是 苹果 的 safari 浏览器导致,可以尝试更换 chrome 浏览器。`
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Error;
|
export default Error;
|
||||||
|
@@ -9,9 +9,14 @@ import { useToast } from '@/hooks/useToast';
|
|||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { useUserStore } from '@/store/user';
|
import { useUserStore } from '@/store/user';
|
||||||
import { MyModelsTypeEnum } from '@/constants/user';
|
import { MyModelsTypeEnum } from '@/constants/user';
|
||||||
|
import dynamic from 'next/dynamic';
|
||||||
|
|
||||||
import Avatar from '@/components/Avatar';
|
const Avatar = dynamic(() => import('@/components/Avatar'), {
|
||||||
import Tabs from '@/components/Tabs';
|
ssr: true
|
||||||
|
});
|
||||||
|
const Tabs = dynamic(() => import('@/components/Tabs'), {
|
||||||
|
ssr: true
|
||||||
|
});
|
||||||
|
|
||||||
const ModelList = ({ modelId }: { modelId: string }) => {
|
const ModelList = ({ modelId }: { modelId: string }) => {
|
||||||
const [currentTab, setCurrentTab] = useState(MyModelsTypeEnum.my);
|
const [currentTab, setCurrentTab] = useState(MyModelsTypeEnum.my);
|
||||||
|
@@ -47,10 +47,10 @@ import { defaultShareChat } from '@/constants/model';
|
|||||||
import type { ShareChatEditType } from '@/types/model';
|
import type { ShareChatEditType } from '@/types/model';
|
||||||
import type { ModelSchema } from '@/types/mongoSchema';
|
import type { ModelSchema } from '@/types/mongoSchema';
|
||||||
import { formatTimeToChatTime, useCopyData, getErrText } from '@/utils/tools';
|
import { formatTimeToChatTime, useCopyData, getErrText } from '@/utils/tools';
|
||||||
import MyIcon from '@/components/Icon';
|
|
||||||
import { useGlobalStore } from '@/store/global';
|
import { useGlobalStore } from '@/store/global';
|
||||||
import { useUserStore } from '@/store/user';
|
import { useUserStore } from '@/store/user';
|
||||||
import Avatar from '@/components/Avatar';
|
import Avatar from '@/components/Avatar';
|
||||||
|
import MyIcon from '@/components/Icon';
|
||||||
|
|
||||||
const ModelEditForm = ({
|
const ModelEditForm = ({
|
||||||
formHooks,
|
formHooks,
|
||||||
@@ -174,32 +174,6 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
|
|||||||
|
|
||||||
// init kb select list
|
// init kb select list
|
||||||
const { data: kbList = [] } = useQuery(['loadKbList'], () => loadKbList());
|
const { data: kbList = [] } = useQuery(['loadKbList'], () => loadKbList());
|
||||||
const RenderSelectedKbList = useCallback(() => {
|
|
||||||
const kbs = getValues('chat.relatedKbs')?.map((id) => kbList.find((kb) => kb._id === id)) || [];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
{kbs.map((item) =>
|
|
||||||
item ? (
|
|
||||||
<Card
|
|
||||||
key={item._id}
|
|
||||||
p={3}
|
|
||||||
mt={3}
|
|
||||||
cursor={'pointer'}
|
|
||||||
onClick={() => router.push(`/kb?kbId=${item._id}`)}
|
|
||||||
>
|
|
||||||
<Flex alignItems={'center'}>
|
|
||||||
<Avatar src={item.avatar} w={'20px'} h={'20px'}></Avatar>
|
|
||||||
<Box ml={3} fontWeight={'bold'}>
|
|
||||||
{item.name}
|
|
||||||
</Box>
|
|
||||||
</Flex>
|
|
||||||
</Card>
|
|
||||||
) : null
|
|
||||||
)}
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}, [getValues, kbList, router]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -353,7 +327,6 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
|
|||||||
</Select>
|
</Select>
|
||||||
</Flex>
|
</Flex>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Box mt={4}>
|
<Box mt={4}>
|
||||||
<Box mb={1}>系统提示词</Box>
|
<Box mb={1}>系统提示词</Box>
|
||||||
<Textarea
|
<Textarea
|
||||||
@@ -408,7 +381,32 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
|
|||||||
选择
|
选择
|
||||||
</Button>
|
</Button>
|
||||||
</Flex>
|
</Flex>
|
||||||
<RenderSelectedKbList />
|
{(() => {
|
||||||
|
const kbs =
|
||||||
|
getValues('chat.relatedKbs')?.map((id) => kbList.find((kb) => kb._id === id)) || [];
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{kbs.map((item) =>
|
||||||
|
item ? (
|
||||||
|
<Card
|
||||||
|
key={item._id}
|
||||||
|
p={3}
|
||||||
|
mt={3}
|
||||||
|
cursor={'pointer'}
|
||||||
|
onClick={() => router.push(`/kb?kbId=${item._id}`)}
|
||||||
|
>
|
||||||
|
<Flex alignItems={'center'}>
|
||||||
|
<Avatar src={item.avatar} w={'20px'} h={'20px'}></Avatar>
|
||||||
|
<Box ml={3} fontWeight={'bold'}>
|
||||||
|
{item.name}
|
||||||
|
</Box>
|
||||||
|
</Flex>
|
||||||
|
</Card>
|
||||||
|
) : null
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
})()}
|
||||||
</Card>
|
</Card>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
@@ -586,7 +584,6 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
|
|||||||
isChecked={getValues('chat.relatedKbs')?.includes(item._id)}
|
isChecked={getValues('chat.relatedKbs')?.includes(item._id)}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
const ids = getValues('chat.relatedKbs');
|
const ids = getValues('chat.relatedKbs');
|
||||||
// toggle to true
|
|
||||||
if (e.target.checked) {
|
if (e.target.checked) {
|
||||||
setValue('chat.relatedKbs', ids.concat(item._id));
|
setValue('chat.relatedKbs', ids.concat(item._id));
|
||||||
} else {
|
} else {
|
||||||
|
@@ -8,7 +8,13 @@ import { useForm } from 'react-hook-form';
|
|||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { useUserStore } from '@/store/user';
|
import { useUserStore } from '@/store/user';
|
||||||
import { useLoading } from '@/hooks/useLoading';
|
import { useLoading } from '@/hooks/useLoading';
|
||||||
import ModelEditForm from './components/ModelEditForm';
|
import Loading from '@/components/Loading';
|
||||||
|
import dynamic from 'next/dynamic';
|
||||||
|
|
||||||
|
const ModelEditForm = dynamic(() => import('./components/ModelEditForm'), {
|
||||||
|
loading: () => <Loading fixed={false} />,
|
||||||
|
ssr: false
|
||||||
|
});
|
||||||
|
|
||||||
const ModelDetail = ({ modelId, isPc }: { modelId: string; isPc: boolean }) => {
|
const ModelDetail = ({ modelId, isPc }: { modelId: string; isPc: boolean }) => {
|
||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
|
@@ -10,7 +10,7 @@ import SideBar from '@/components/SideBar';
|
|||||||
|
|
||||||
const ModelDetail = dynamic(() => import('./components/detail/index'), {
|
const ModelDetail = dynamic(() => import('./components/detail/index'), {
|
||||||
loading: () => <Loading fixed={false} />,
|
loading: () => <Loading fixed={false} />,
|
||||||
ssr: false
|
ssr: true
|
||||||
});
|
});
|
||||||
|
|
||||||
const Model = ({ modelId }: { modelId: string }) => {
|
const Model = ({ modelId }: { modelId: string }) => {
|
||||||
|
@@ -65,13 +65,14 @@ textarea::placeholder {
|
|||||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||||
-webkit-focus-ring-color: rgba(0, 0, 0, 0);
|
-webkit-focus-ring-color: rgba(0, 0, 0, 0);
|
||||||
outline: none;
|
outline: none;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
#__next {
|
#__next {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
#nprogress .bar {
|
#nprogress .bar {
|
||||||
background: '#85b1ff' !important; //自定义颜色
|
background: '#1237b3' !important; //自定义颜色
|
||||||
}
|
}
|
||||||
|
|
||||||
.textEllipsis {
|
.textEllipsis {
|
||||||
|
Reference in New Issue
Block a user