Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
重构 admin 项目为 admin-v2,移除 Next.js 相关代码,添加 Vite 配置和环境变量 删除所有 UI 组件、工具函数、API 客户端和类型定义 新增 ErrorBoundary 组件处理错误边界 调整代理配置支持 SSE 长连接超时设置
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
import { Component, type ReactNode } from 'react'
|
|
import { Result, Button } from 'antd'
|
|
|
|
interface Props {
|
|
children: ReactNode
|
|
}
|
|
|
|
interface State {
|
|
hasError: boolean
|
|
error: Error | null
|
|
}
|
|
|
|
export class ErrorBoundary extends Component<Props, State> {
|
|
constructor(props: Props) {
|
|
super(props)
|
|
this.state = { hasError: false, error: null }
|
|
}
|
|
|
|
static getDerivedStateFromError(error: Error): State {
|
|
return { hasError: true, error }
|
|
}
|
|
|
|
componentDidCatch(error: Error, info: React.ErrorInfo) {
|
|
console.error('[ErrorBoundary] Unhandled error:', error, info.componentStack)
|
|
}
|
|
|
|
private handleReload = () => {
|
|
window.location.reload()
|
|
}
|
|
|
|
private handleReset = () => {
|
|
this.setState({ hasError: false, error: null })
|
|
}
|
|
|
|
render() {
|
|
if (this.state.hasError) {
|
|
return (
|
|
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: '100vh' }}>
|
|
<Result
|
|
status="error"
|
|
title="页面出现错误"
|
|
subTitle={this.state.error?.message ?? '发生了未知错误,请刷新页面重试'}
|
|
extra={[
|
|
<Button key="retry" onClick={this.handleReset}>重试</Button>,
|
|
<Button key="reload" type="primary" onClick={this.handleReload}>刷新页面</Button>,
|
|
]}
|
|
/>
|
|
</div>
|
|
)
|
|
}
|
|
return this.props.children
|
|
}
|
|
}
|