perf: error show
This commit is contained in:
parent
e7d3a8e2e1
commit
371e0e36c6
@ -78,6 +78,6 @@ export default Layout;
|
|||||||
|
|
||||||
Layout.getInitialProps = ({ req }: any) => {
|
Layout.getInitialProps = ({ req }: any) => {
|
||||||
return {
|
return {
|
||||||
isPcDevice: !/Mobile/.test(req ? req.headers['user-agent'] : navigator.userAgent)
|
isPcDevice: !/Mobile/.test(req?.headers?.['user-agent'])
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -4,7 +4,9 @@ function Error({ errStr }: { errStr: string }) {
|
|||||||
|
|
||||||
Error.getInitialProps = ({ res, err }: { res: any; err: any }) => {
|
Error.getInitialProps = ({ res, err }: { res: any; err: any }) => {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
return { errStr: JSON.stringify(err) };
|
return {
|
||||||
|
errStr: `部分系统不兼容,导致页面崩溃。如果可以,请联系作者,反馈下具体操作和页面。大部分是 苹果 的 safari 浏览器导致,可以尝试更换 chrome 浏览器。`
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Error;
|
export default Error;
|
||||||
|
|||||||
@ -89,3 +89,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const config = {
|
||||||
|
api: {
|
||||||
|
bodyParser: {
|
||||||
|
sizeLimit: '100mb'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@ -5,8 +5,10 @@ import Markdown from '@/components/Markdown';
|
|||||||
import { LOGO_ICON } from '@/constants/chat';
|
import { LOGO_ICON } from '@/constants/chat';
|
||||||
|
|
||||||
const Empty = ({
|
const Empty = ({
|
||||||
|
showChatProblem,
|
||||||
model: { name, intro, avatar }
|
model: { name, intro, avatar }
|
||||||
}: {
|
}: {
|
||||||
|
showChatProblem: boolean;
|
||||||
model: {
|
model: {
|
||||||
name: string;
|
name: string;
|
||||||
intro: string;
|
intro: string;
|
||||||
@ -43,13 +45,18 @@ const Empty = ({
|
|||||||
<Box whiteSpace={'pre-line'}>{intro}</Box>
|
<Box whiteSpace={'pre-line'}>{intro}</Box>
|
||||||
</Card>
|
</Card>
|
||||||
)}
|
)}
|
||||||
{/* version intro */}
|
|
||||||
<Card p={4} mb={10}>
|
{showChatProblem && (
|
||||||
<Markdown source={versionIntro} />
|
<>
|
||||||
</Card>
|
{/* version intro */}
|
||||||
<Card p={4}>
|
<Card p={4} mb={10}>
|
||||||
<Markdown source={chatProblem} />
|
<Markdown source={versionIntro} />
|
||||||
</Card>
|
</Card>
|
||||||
|
<Card p={4}>
|
||||||
|
<Markdown source={chatProblem} />
|
||||||
|
</Card>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -36,12 +36,11 @@ import { useToast } from '@/hooks/useToast';
|
|||||||
import { useScreen } from '@/hooks/useScreen';
|
import { useScreen } from '@/hooks/useScreen';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import dynamic from 'next/dynamic';
|
import dynamic from 'next/dynamic';
|
||||||
import { useCopyData, voiceBroadcast, formatLinkTextToHtml } from '@/utils/tools';
|
import { useCopyData, voiceBroadcast, hasVoiceApi } from '@/utils/tools';
|
||||||
import { streamFetch } from '@/api/fetch';
|
import { streamFetch } from '@/api/fetch';
|
||||||
import MyIcon from '@/components/Icon';
|
import MyIcon from '@/components/Icon';
|
||||||
import { throttle } from 'lodash';
|
import { throttle } from 'lodash';
|
||||||
import { Types } from 'mongoose';
|
import { Types } from 'mongoose';
|
||||||
import Markdown from '@/components/Markdown';
|
|
||||||
import { LOGO_ICON } from '@/constants/chat';
|
import { LOGO_ICON } from '@/constants/chat';
|
||||||
import { ChatModelMap } from '@/constants/model';
|
import { ChatModelMap } from '@/constants/model';
|
||||||
import { useChatStore } from '@/store/chat';
|
import { useChatStore } from '@/store/chat';
|
||||||
@ -50,19 +49,16 @@ import { fileDownload } from '@/utils/file';
|
|||||||
import { htmlTemplate } from '@/constants/common';
|
import { htmlTemplate } from '@/constants/common';
|
||||||
import { useUserStore } from '@/store/user';
|
import { useUserStore } from '@/store/user';
|
||||||
import Loading from '@/components/Loading';
|
import Loading from '@/components/Loading';
|
||||||
|
import Markdown from '@/components/Markdown';
|
||||||
|
import Empty from './components/Empty';
|
||||||
|
|
||||||
const PhoneSliderBar = dynamic(() => import('./components/PhoneSliderBar'), {
|
const PhoneSliderBar = dynamic(() => import('./components/PhoneSliderBar'), {
|
||||||
loading: () => <Loading fixed={false} />,
|
|
||||||
ssr: false
|
ssr: false
|
||||||
});
|
});
|
||||||
const History = dynamic(() => import('./components/History'), {
|
const History = dynamic(() => import('./components/History'), {
|
||||||
loading: () => <Loading fixed={false} />,
|
loading: () => <Loading fixed={false} />,
|
||||||
ssr: false
|
ssr: false
|
||||||
});
|
});
|
||||||
const Empty = dynamic(() => import('./components/Empty'), {
|
|
||||||
loading: () => <Loading fixed={false} />,
|
|
||||||
ssr: false
|
|
||||||
});
|
|
||||||
|
|
||||||
import styles from './index.module.scss';
|
import styles from './index.module.scss';
|
||||||
|
|
||||||
@ -77,7 +73,6 @@ const Chat = ({
|
|||||||
chatId: string;
|
chatId: string;
|
||||||
isPcDevice: boolean;
|
isPcDevice: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
const hasVoiceApi = typeof window === 'undefined' ? false : !!window.speechSynthesis;
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
@ -627,7 +622,6 @@ const Chat = ({
|
|||||||
chatData.model.canUse,
|
chatData.model.canUse,
|
||||||
chatData.modelId,
|
chatData.modelId,
|
||||||
delChatRecord,
|
delChatRecord,
|
||||||
hasVoiceApi,
|
|
||||||
onclickCopy,
|
onclickCopy,
|
||||||
router,
|
router,
|
||||||
theme.borders.base
|
theme.borders.base
|
||||||
@ -714,7 +708,7 @@ const Chat = ({
|
|||||||
justifyContent={'space-between'}
|
justifyContent={'space-between'}
|
||||||
py={[3, 5]}
|
py={[3, 5]}
|
||||||
px={5}
|
px={5}
|
||||||
borderBottom={'1px solid '}
|
borderBottom={'1px solid'}
|
||||||
borderBottomColor={useColorModeValue('gray.200', 'gray.700')}
|
borderBottomColor={useColorModeValue('gray.200', 'gray.700')}
|
||||||
color={useColorModeValue('myGray.900', 'white')}
|
color={useColorModeValue('myGray.900', 'white')}
|
||||||
>
|
>
|
||||||
@ -790,7 +784,10 @@ const Chat = ({
|
|||||||
order: 1,
|
order: 1,
|
||||||
mr: ['6px', 2],
|
mr: ['6px', 2],
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
onClick: () => isPc && router.push(`/model?modelId=${chatData.modelId}`)
|
onClick: () =>
|
||||||
|
isPc &&
|
||||||
|
chatData.model.canUse &&
|
||||||
|
router.push(`/model?modelId=${chatData.modelId}`)
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
order: 3,
|
order: 3,
|
||||||
@ -856,17 +853,16 @@ const Chat = ({
|
|||||||
bg={'myBlue.300'}
|
bg={'myBlue.300'}
|
||||||
onContextMenu={(e) => onclickContextMenu(e, item)}
|
onContextMenu={(e) => onclickContextMenu(e, item)}
|
||||||
>
|
>
|
||||||
<Box
|
<Box as={'p'}>{item.value}</Box>
|
||||||
as={'p'}
|
|
||||||
dangerouslySetInnerHTML={{ __html: formatLinkTextToHtml(item.value) }}
|
|
||||||
/>
|
|
||||||
</Card>
|
</Card>
|
||||||
</Box>
|
</Box>
|
||||||
)}
|
)}
|
||||||
</Flex>
|
</Flex>
|
||||||
</Flex>
|
</Flex>
|
||||||
))}
|
))}
|
||||||
{chatData.history.length === 0 && <Empty model={chatData.model} />}
|
{chatData.history.length === 0 && (
|
||||||
|
<Empty model={chatData.model} showChatProblem={true} />
|
||||||
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
{/* 发送区 */}
|
{/* 发送区 */}
|
||||||
@ -1012,7 +1008,7 @@ Chat.getInitialProps = ({ query, req }: any) => {
|
|||||||
return {
|
return {
|
||||||
modelId: query?.modelId || '',
|
modelId: query?.modelId || '',
|
||||||
chatId: query?.chatId || '',
|
chatId: query?.chatId || '',
|
||||||
isPcDevice: !/Mobile/.test(req ? req.headers['user-agent'] : navigator.userAgent)
|
isPcDevice: !/Mobile/.test(req?.headers?.['user-agent'])
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -34,12 +34,11 @@ import { useToast } from '@/hooks/useToast';
|
|||||||
import { useScreen } from '@/hooks/useScreen';
|
import { useScreen } from '@/hooks/useScreen';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import dynamic from 'next/dynamic';
|
import dynamic from 'next/dynamic';
|
||||||
import { useCopyData, voiceBroadcast } from '@/utils/tools';
|
import { useCopyData, voiceBroadcast, hasVoiceApi } from '@/utils/tools';
|
||||||
import { streamFetch } from '@/api/fetch';
|
import { streamFetch } from '@/api/fetch';
|
||||||
import MyIcon from '@/components/Icon';
|
import MyIcon from '@/components/Icon';
|
||||||
import { throttle } from 'lodash';
|
import { throttle } from 'lodash';
|
||||||
import { Types } from 'mongoose';
|
import { Types } from 'mongoose';
|
||||||
import Markdown from '@/components/Markdown';
|
|
||||||
import { LOGO_ICON } from '@/constants/chat';
|
import { LOGO_ICON } from '@/constants/chat';
|
||||||
import { useChatStore } from '@/store/chat';
|
import { useChatStore } from '@/store/chat';
|
||||||
import { useLoading } from '@/hooks/useLoading';
|
import { useLoading } from '@/hooks/useLoading';
|
||||||
@ -47,15 +46,13 @@ import { fileDownload } from '@/utils/file';
|
|||||||
import { htmlTemplate } from '@/constants/common';
|
import { htmlTemplate } from '@/constants/common';
|
||||||
import { useUserStore } from '@/store/user';
|
import { useUserStore } from '@/store/user';
|
||||||
import Loading from '@/components/Loading';
|
import Loading from '@/components/Loading';
|
||||||
|
import Markdown from '@/components/Markdown';
|
||||||
|
import Empty from './components/Empty';
|
||||||
|
|
||||||
const ShareHistory = dynamic(() => import('./components/ShareHistory'), {
|
const ShareHistory = dynamic(() => import('./components/ShareHistory'), {
|
||||||
loading: () => <Loading fixed={false} />,
|
loading: () => <Loading fixed={false} />,
|
||||||
ssr: false
|
ssr: false
|
||||||
});
|
});
|
||||||
const Empty = dynamic(() => import('./components/Empty'), {
|
|
||||||
loading: () => <Loading fixed={false} />,
|
|
||||||
ssr: false
|
|
||||||
});
|
|
||||||
|
|
||||||
import styles from './index.module.scss';
|
import styles from './index.module.scss';
|
||||||
|
|
||||||
@ -70,7 +67,6 @@ const Chat = ({
|
|||||||
historyId: string;
|
historyId: string;
|
||||||
isPcDevice: boolean;
|
isPcDevice: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
const hasVoiceApi = typeof window === 'undefined' ? false : !!window.speechSynthesis;
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
@ -536,7 +532,7 @@ const Chat = ({
|
|||||||
<MenuItem onClick={() => delShareChatHistoryItemById(historyId, index)}>删除</MenuItem>
|
<MenuItem onClick={() => delShareChatHistoryItemById(historyId, index)}>删除</MenuItem>
|
||||||
</MenuList>
|
</MenuList>
|
||||||
),
|
),
|
||||||
[delShareChatHistoryItemById, hasVoiceApi, historyId, onclickCopy, theme.borders.base]
|
[delShareChatHistoryItemById, historyId, onclickCopy, theme.borders.base]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -754,7 +750,9 @@ const Chat = ({
|
|||||||
</Flex>
|
</Flex>
|
||||||
</Flex>
|
</Flex>
|
||||||
))}
|
))}
|
||||||
{shareChatData.history.length === 0 && <Empty model={shareChatData.model} />}
|
{shareChatData.history.length === 0 && (
|
||||||
|
<Empty model={shareChatData.model} showChatProblem={false} />
|
||||||
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
{/* 发送区 */}
|
{/* 发送区 */}
|
||||||
@ -926,7 +924,7 @@ Chat.getInitialProps = ({ query, req }: any) => {
|
|||||||
return {
|
return {
|
||||||
shareId: query?.shareId || '',
|
shareId: query?.shareId || '',
|
||||||
historyId: query?.historyId || '',
|
historyId: query?.historyId || '',
|
||||||
isPcDevice: !/Mobile/.test(req ? req.headers['user-agent'] : navigator.userAgent)
|
isPcDevice: !/Mobile/.test(req?.headers?.['user-agent'])
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -117,6 +117,6 @@ export default Login;
|
|||||||
|
|
||||||
Login.getInitialProps = ({ query, req }: any) => {
|
Login.getInitialProps = ({ query, req }: any) => {
|
||||||
return {
|
return {
|
||||||
isPcDevice: !/Mobile/.test(req ? req.headers['user-agent'] : navigator.userAgent)
|
isPcDevice: !/Mobile/.test(req?.headers?.['user-agent'])
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -45,6 +45,11 @@ const ModelDetail = ({ modelId, isPc }: { modelId: string; isPc: boolean }) => {
|
|||||||
[modelDetail.userId, userInfo?._id]
|
[modelDetail.userId, userInfo?._id]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const canRead = useMemo(
|
||||||
|
() => isOwner || isLoading || modelDetail.share.isShareDetail,
|
||||||
|
[isLoading, isOwner, modelDetail.share.isShareDetail]
|
||||||
|
);
|
||||||
|
|
||||||
/* 点击删除 */
|
/* 点击删除 */
|
||||||
const handleDelModel = useCallback(async () => {
|
const handleDelModel = useCallback(async () => {
|
||||||
if (!modelDetail) return;
|
if (!modelDetail) return;
|
||||||
@ -129,7 +134,7 @@ const ModelDetail = ({ modelId, isPc }: { modelId: string; isPc: boolean }) => {
|
|||||||
};
|
};
|
||||||
}, [router]);
|
}, [router]);
|
||||||
|
|
||||||
return (
|
return canRead ? (
|
||||||
<Box h={'100%'} p={5} overflow={'overlay'} position={'relative'}>
|
<Box h={'100%'} p={5} overflow={'overlay'} position={'relative'}>
|
||||||
{/* 头部 */}
|
{/* 头部 */}
|
||||||
<Card px={6} py={3}>
|
<Card px={6} py={3}>
|
||||||
@ -196,6 +201,10 @@ const ModelDetail = ({ modelId, isPc }: { modelId: string; isPc: boolean }) => {
|
|||||||
</Grid>
|
</Grid>
|
||||||
<Loading loading={isLoading} fixed={false} />
|
<Loading loading={isLoading} fixed={false} />
|
||||||
</Box>
|
</Box>
|
||||||
|
) : (
|
||||||
|
<Box h={'100%'} p={5}>
|
||||||
|
无权查看模型配置
|
||||||
|
</Box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -46,6 +46,6 @@ export default Model;
|
|||||||
Model.getInitialProps = ({ query, req }: any) => {
|
Model.getInitialProps = ({ query, req }: any) => {
|
||||||
return {
|
return {
|
||||||
modelId: query?.modelId || '',
|
modelId: query?.modelId || '',
|
||||||
isPcDevice: !/Mobile/.test(req ? req.headers['user-agent'] : navigator.userAgent)
|
isPcDevice: !/Mobile/.test(req?.headers?.['user-agent'])
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -89,6 +89,7 @@ export const formatTimeToChatTime = (time: Date) => {
|
|||||||
return target.format('YYYY/M/D');
|
return target.format('YYYY/M/D');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const hasVoiceApi = typeof window !== 'undefined' && 'speechSynthesis' in window;
|
||||||
/**
|
/**
|
||||||
* voice broadcast
|
* voice broadcast
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user