forked from wangziqi/gongxue-base
UX 缺陷修复: - 校验失败不再卡死弹窗按钮(Users/Roles/Bills) - 押金收取/批量收取/添加分期防重复提交;切换房型重置勾选 - AI 表单/批量确认不再出现"假成功" - Dashboard 各数据模块独立加载,单接口失败不再整页清零 - 房间可视化加载失败显示错误态而非永久转圈 - 学生编辑表单回填前重置,避免字段残留污染 - 覆盖式导入增加二次确认;恢复默认考勤时段确认并同步表单 - 金数据匹配关闭前确认,同步中禁止误关 体验提升: - 新增统一 QueryErrorState/QueryEmpty,20+ 页面加载失败显示错误态与重试 - 全局 ErrorBoundary + RouteKeeper 逐页兜底 - 新增 usePageVisible/useVisibleRefetch,保活页面切回自动刷新数据 - 新增首次登录角色引导 RoleTour 与业务闭环 NextStepHint 引导卡 - 重构 A2UI:useSubmissionState/useXCardSurface 收敛状态与命令生命周期, ArtifactErrorBoundary 渲染降级,图表空数据占位 - AI 助手欢迎语与建议话术按角色定制,会话列表空态引导 - 更新 a2ui-contract.md 契约文档说明实现现状
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import React from 'react';
|
|
import { Alert } from 'antd';
|
|
|
|
interface ArtifactErrorBoundaryProps {
|
|
children: React.ReactNode;
|
|
/** 制品标题(用于错误提示文案) */
|
|
title?: string;
|
|
}
|
|
|
|
interface ArtifactErrorBoundaryState {
|
|
hasError: boolean;
|
|
}
|
|
|
|
/**
|
|
* A2UI 制品(表单/审查卡/图表)渲染错误兜底:单个制品渲染失败只降级为
|
|
* 错误占位卡片,不影响同气泡内其他消息与制品。
|
|
*/
|
|
export class ArtifactErrorBoundary extends React.Component<
|
|
ArtifactErrorBoundaryProps,
|
|
ArtifactErrorBoundaryState
|
|
> {
|
|
state: ArtifactErrorBoundaryState = { hasError: false };
|
|
|
|
static getDerivedStateFromError(): ArtifactErrorBoundaryState {
|
|
return { hasError: true };
|
|
}
|
|
|
|
componentDidCatch(error: Error, info: React.ErrorInfo): void {
|
|
console.error('[ArtifactErrorBoundary] 制品渲染异常:', error, info.componentStack);
|
|
}
|
|
|
|
render(): React.ReactNode {
|
|
if (this.state.hasError) {
|
|
return (
|
|
<Alert
|
|
type="warning"
|
|
showIcon
|
|
title={this.props.title ? `${this.props.title}渲染失败` : '此内容渲染失败'}
|
|
description="请让 AI 重新生成,或刷新后重试。"
|
|
/>
|
|
);
|
|
}
|
|
return this.props.children;
|
|
}
|
|
}
|
|
|
|
export default ArtifactErrorBoundary;
|