import type { PropType } from 'vue'; import { Result, Button } from 'ant-design-vue'; import { defineComponent, ref, computed, unref } from 'vue'; import { ExceptionEnum } from '/@/enums/exceptionEnum'; import netWorkImg from '/@/assets/images/exception/net-work.png'; import error404 from '/@/assets/images/exception/404.png'; import error500 from '/@/assets/images/exception/500.png'; import notDataImg from '/@/assets/images/no-data.png'; import { useRoute } from 'vue-router'; import { useGo, useRedo } from '/@/hooks/web/usePage'; import { PageEnum } from '/@/enums/pageEnum'; import './exception.less'; interface MapValue { title: string; subTitle: string; btnText?: string; icon?: string; handler?: Fn; } export default defineComponent({ name: 'ErrorPage', props: { // 状态码 status: { type: Number as PropType, default: ExceptionEnum.PAGE_NOT_FOUND, }, title: { type: String as PropType, }, subTitle: { type: String as PropType, }, full: { type: Boolean as PropType, default: false, }, }, setup(props) { const statusMapRef = ref(new Map()); const { query } = useRoute(); const go = useGo(); const redo = useRedo(); const getStatus = computed(() => { const { status: routeStatus } = query; const { status } = props; return Number(routeStatus) || status; }); const getMapValue = computed( (): MapValue => { return unref(statusMapRef).get(unref(getStatus)) as MapValue; } ); unref(statusMapRef).set(ExceptionEnum.PAGE_NOT_FOUND, { title: '404', subTitle: '抱歉,您访问的页面不存在!', btnText: props.full ? '返回登录' : '返回首页', handler: () => (props.full ? go(PageEnum.BASE_LOGIN) : go()), icon: error404, }); unref(statusMapRef).set(ExceptionEnum.ERROR, { title: '500', subTitle: '抱歉,服务器出现异常!', btnText: '返回首页', handler: () => go(), icon: error500, }); unref(statusMapRef).set(ExceptionEnum.PAGE_NOT_DATA, { title: '当前页面无数据', subTitle: '', btnText: '刷新', handler: () => redo(), icon: notDataImg, }); unref(statusMapRef).set(ExceptionEnum.NET_WORK_ERROR, { title: '网络错误', subTitle: '抱歉,您的网络连接已断开,请检查您的网络!', btnText: '刷新', handler: () => redo(), icon: netWorkImg, }); unref(statusMapRef).set(ExceptionEnum.PAGE_TIMEOUT, { title: '页面加载失败', subTitle: '抱歉,您的页面加载出错或者过久未响应,请检查您的网络!', btnText: '刷新', handler: () => redo(), icon: netWorkImg, }); return () => { const { title, subTitle, btnText, icon, handler } = unref(getMapValue) || {}; return ( {{ extra: () => btnText && ( ), icon: () => icon && , }} ); }; }, });