From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/components/Error/src/Error.vue | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/src/components/Error/src/Error.vue b/src/components/Error/src/Error.vue
new file mode 100644
index 0000000..3fd7a17
--- /dev/null
+++ b/src/components/Error/src/Error.vue
@@ -0,0 +1,58 @@
+<script lang="ts" setup>
+import pageError from '@/assets/svgs/404.svg'
+import networkError from '@/assets/svgs/500.svg'
+import noPermission from '@/assets/svgs/403.svg'
+import { propTypes } from '@/utils/propTypes'
+
+defineOptions({ name: 'Error' })
+
+interface ErrorMap {
+ url: string
+ message: string
+ buttonText: string
+}
+
+const { t } = useI18n()
+
+const errorMap: {
+ [key: string]: ErrorMap
+} = {
+ '404': {
+ url: pageError,
+ message: t('error.pageError'),
+ buttonText: t('error.returnToHome')
+ },
+ '500': {
+ url: networkError,
+ message: t('error.networkError'),
+ buttonText: t('error.returnToHome')
+ },
+ '403': {
+ url: noPermission,
+ message: t('error.noPermission'),
+ buttonText: t('error.returnToHome')
+ }
+}
+
+const props = defineProps({
+ type: propTypes.string.validate((v: string) => ['404', '500', '403'].includes(v)).def('404')
+})
+
+const emit = defineEmits(['errorClick'])
+
+const btnClick = () => {
+ emit('errorClick', props.type)
+}
+</script>
+
+<template>
+ <div class="flex justify-center">
+ <div class="text-center">
+ <img :src="errorMap[type].url" alt="" width="350" />
+ <div class="text-14px text-[var(--el-color-info)]">{{ errorMap[type].message }}</div>
+ <div class="mt-20px">
+ <ElButton type="primary" @click="btnClick">{{ errorMap[type].buttonText }}</ElButton>
+ </div>
+ </div>
+ </div>
+</template>
--
Gitblit v1.8.0