// REQ-USR-003: 路由级 ErrorBoundary(子路由渲染抛错兜底 + 返回主页入口,spec § 3 error / D7)。 import { Component, type ErrorInfo, type ReactNode } from 'react'; import { Button, Result } from 'antd'; interface AppErrorBoundaryProps { children: ReactNode; } interface AppErrorBoundaryState { hasError: boolean; } export default class AppErrorBoundary extends Component< AppErrorBoundaryProps, AppErrorBoundaryState > { state: AppErrorBoundaryState = { hasError: false }; static getDerivedStateFromError(): AppErrorBoundaryState { return { hasError: true }; } componentDidCatch(_error: Error, _info: ErrorInfo): void { // 兜底:捕获即进入降级 UI;此处可接入日志上报(MVP 不上报)。 } private handleGoHome = () => { this.setState({ hasError: false }); // 直接回主页(不依赖 hooks,class 组件用 location) window.location.assign('/'); }; render() { if (this.state.hasError) { return ( 返回主页 } /> ); } return this.props.children; } }