import FullScreenFrame from '@/components/FullScreenFrame'; import KFSpin from '@/components/KFSpin'; import { getLabelStudioUrl } from '@/services/developmentEnvironment'; import { generateSign } from '@/utils'; import { to } from '@/utils/promise'; import SessionStorage from '@/utils/sessionStorage'; import { useModel } from '@umijs/max'; import classNames from 'classnames'; import { useEffect, useState } from 'react'; import { createPortal } from 'react-dom'; import './index.less'; export enum IframePageType { DatasetAnnotation = 'DatasetAnnotation', // 数据标注 AppDevelopment = 'AppDevelopment', // 应用开发 DevEnv = 'DevEnv', // 开发环境 GitLink = 'GitLink', } const getRequestAPI = (type: IframePageType, loginName: string): (() => Promise) => { switch (type) { case IframePageType.DatasetAnnotation: return getLabelStudioUrl; case IframePageType.AppDevelopment: { // return () => Promise.resolve({ code: 200, data: 'http://172.20.32.185:30080/' }); const sign = generateSign(loginName); return () => Promise.resolve({ code: 200, data: `http://10.43.107.27:24078/uap/nudt/sso/login?name=${loginName}&sign=${sign}`, }); } case IframePageType.DevEnv: return () => Promise.resolve({ code: 200, data: SessionStorage.getItem(SessionStorage.editorUrlKey) || '', }); case IframePageType.GitLink: return () => Promise.resolve({ code: 200, data: 'http://172.20.32.201:4000' }); } }; type IframePageProps = { type: IframePageType; className?: string; style?: React.CSSProperties; }; function IframePage({ type, className, style }: IframePageProps) { const [iframeUrl, setIframeUrl] = useState(''); const [loading, setLoading] = useState(false); const { initialState } = useModel('@@initialState'); const { currentUser } = initialState || {}; useEffect(() => { requestIframeUrl(); return () => { if (type === IframePageType.DevEnv) { SessionStorage.removeItem(SessionStorage.editorUrlKey); } }; }, []); const requestIframeUrl = async () => { setLoading(true); const [res] = await to(getRequestAPI(type, currentUser?.userName || '')()); if (res && res.data) { setIframeUrl(res.data); } else { setLoading(false); } }; const hideLoading = () => { setLoading(false); }; return (
{loading && createPortal(, document.body)}
); } export default IframePage;