Hanye官网
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <div class="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
  3. <div class="max-w-md w-full text-center">
  4. <div class="mb-6">
  5. <h1 v-if="error.statusCode === 404" class="text-6xl font-extrabold text-blue-600">404</h1>
  6. <h1 v-else class="text-6xl font-extrabold text-red-600">{{ error.statusCode || '错误' }}</h1>
  7. </div>
  8. <h2 class="text-3xl font-bold text-gray-900 mb-4">
  9. {{ error.statusCode === 404 ? '页面未找到' : '发生错误' }}
  10. </h2>
  11. <p class="text-lg text-gray-600 mb-8">
  12. {{ error.message || '很抱歉,您请求的页面不存在或发生了错误。' }}
  13. </p>
  14. <div class="flex justify-center space-x-4">
  15. <button @click="handleError" class="btn btn-primary">
  16. {{ error.statusCode === 404 ? '返回首页' : '重试' }}
  17. </button>
  18. <button v-if="error.statusCode !== 404" @click="goBack" class="btn bg-white text-gray-800 border border-gray-300 hover:bg-gray-50">
  19. 返回上一页
  20. </button>
  21. </div>
  22. </div>
  23. </div>
  24. </template>
  25. <script setup lang="ts">
  26. /**
  27. * 通用错误页面
  28. * 处理各种错误状态(404、500等)
  29. */
  30. interface ErrorProps {
  31. error: {
  32. statusCode: number;
  33. message?: string;
  34. };
  35. }
  36. const props = defineProps<ErrorProps>();
  37. /**
  38. * 处理错误
  39. * 如果是404错误,返回首页;否则尝试刷新
  40. */
  41. function handleError() {
  42. if (props.error.statusCode === 404) {
  43. navigateTo('/');
  44. } else {
  45. window.location.reload();
  46. }
  47. }
  48. /**
  49. * 返回上一页
  50. */
  51. function goBack() {
  52. window.history.back();
  53. }
  54. // 设置页面标题
  55. useHead({
  56. title: props.error.statusCode === 404 ? '页面未找到 - Hanye' : '发生错误 - Hanye'
  57. });
  58. </script>