ErrorPage.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import React from 'react';
  2. import { useRouteError, useNavigate } from 'react-router';
  3. import { Alert, Button } from 'antd';
  4. import { useTheme } from '../hooks/ThemeProvider';
  5. export const ErrorPage = () => {
  6. const navigate = useNavigate();
  7. const { isDark } = useTheme();
  8. const error = useRouteError() as any;
  9. const errorMessage = error?.statusText || error?.message || '未知错误';
  10. return (
  11. <div className="flex flex-col items-center justify-center flex-grow p-4"
  12. style={{ color: isDark ? '#fff' : 'inherit' }}
  13. >
  14. <div className="max-w-3xl w-full">
  15. <h1 className="text-2xl font-bold mb-4">发生错误</h1>
  16. <Alert
  17. type="error"
  18. message={error?.message || '未知错误'}
  19. description={
  20. error?.stack ? (
  21. <pre className="text-xs overflow-auto p-2 bg-gray-100 dark:bg-gray-800 rounded">
  22. {error.stack}
  23. </pre>
  24. ) : null
  25. }
  26. className="mb-4"
  27. />
  28. <div className="flex gap-4">
  29. <Button
  30. type="primary"
  31. onClick={() => navigate(0)}
  32. >
  33. 重新加载
  34. </Button>
  35. <Button
  36. onClick={() => navigate('/admin')}
  37. >
  38. 返回首页
  39. </Button>
  40. </div>
  41. </div>
  42. </div>
  43. );
  44. };