import FullScreenFrame from '@/components/FullScreenFrame'; import { getKnowledgeGraphUrl, getLabelStudioUrl } from '@/services/developmentEnvironment'; import Loading from '@/utils/loading'; import { to } from '@/utils/promise'; import SessionStorage from '@/utils/sessionStorage'; import { FloatButton } from 'antd'; import classNames from 'classnames'; import { useEffect, useState } from 'react'; import './index.less'; export enum IframePageType { DatasetAnnotation = 'DatasetAnnotation', // 数据标注 AppDevelopment = 'AppDevelopment', // 应用开发 DevEnv = 'DevEnv', // 开发环境 GitLink = 'GitLink', // git link Aim = 'Aim', // 实验对比 Knowledge = 'Knowledge', // 知识图谱 TensorBoard = 'TensorBoard', // 可视化结果 } const getRequestAPI = (type: IframePageType): (() => Promise) => { switch (type) { case IframePageType.DatasetAnnotation: // 数据标注 return getLabelStudioUrl; case IframePageType.AppDevelopment: // 应用开发 return () => Promise.resolve({ code: 200, data: 'http://172.20.32.197:30080/' }); case IframePageType.DevEnv: // 开发环境 return () => Promise.resolve({ code: 200, data: SessionStorage.getItem(SessionStorage.editorUrlKey) || '', }); case IframePageType.GitLink: // git link return () => Promise.resolve({ code: 200, data: 'http://172.20.32.201:4000' }); case IframePageType.Aim: // Aim return () => Promise.resolve({ code: 200, data: SessionStorage.getItem(SessionStorage.aimUrlKey), }); case IframePageType.Knowledge: // 知识图谱 return getKnowledgeGraphUrl; case IframePageType.TensorBoard: // TensorBoard return () => Promise.resolve({ code: 200, data: SessionStorage.getItem(SessionStorage.tensorBoardUrlKey), }); } }; type IframePageProps = { /** 子系统 */ type?: IframePageType; /** url */ url?: string; /** 是否可以在页签上打开 */ openInTab?: boolean; /** 是否显示加载 */ showLoading?: boolean; /** 自定义样式类名 */ className?: string; /** 自定义样式 */ style?: React.CSSProperties; }; /** 系统内嵌 iframe,目前系统有数据标注、应用开发、开发环境、GitLink 四个子系统,使用时可以添加其他子系统 */ function IframePage({ type, url, showLoading = true, openInTab = false, className, style, }: IframePageProps) { const [iframeUrl, setIframeUrl] = useState(''); // const [loading, setLoading] = useState(false); useEffect(() => { const requestIframeUrl = async (type: IframePageType) => { if (showLoading) { Loading.show(); } const [res] = await to(getRequestAPI(type)()); if (res && res.data) { setIframeUrl(res.data); } else { if (showLoading) { Loading.hide(); } } }; if (type) { requestIframeUrl(type); } else if (url) { if (showLoading) { Loading.show(); } setIframeUrl(url); } }, [type, url, showLoading]); const handleLoad = () => { if (showLoading) { Loading.hide(); } }; const handleError = (error?: React.SyntheticEvent) => { console.log('error', error); if (showLoading) { Loading.hide(); } }; return (
{/* {loading && createPortal(, document.body)} */} {iframeUrl && } {openInTab && window.open(iframeUrl, '_blank')} />}
); } export default IframePage;