import React from 'react'; import { Modal, message, Form, Input } from 'antd'; import { AssetTypeEnum, AssetFromTypeEnum, EasyTwinRenderer, AssetInfo } from '@easytwin/core'; import { AssetTypeInfos } from '@/constants'; import { initStateData } from '@/server'; import { useAsset } from '@/pages/AssetManage/module'; import PointForm from './PointForm'; const ConatinerId = 'scene-editor-asset-preview'; export interface CreateAssetModalProp { assetType: AssetTypeEnum; onOk?: () => void; onCancel?: () => void; } const CreateAssetModal: React.FC = function ({ assetType, onOk, onCancel }) { const [easyTwinRenderer, setEasyTwinRenderer] = React.useState(); React.useEffect(() => { const containerDom = document.getElementById(ConatinerId); if (containerDom !== null && !easyTwinRenderer) { const renderer = new EasyTwinRenderer({ containerId: ConatinerId, viewHelper: { enable: false, }, sceneOption: { baseMap: { id: '', gridDivisions: 10, gridSize: 100, }, }, }); // renderer.setViewMode('preview'); renderer.setViewPortAttr({ position: { x: 9.210537265932397, y: 53.52942999449814, z: 113.4078818177321, }, target: { x: -0.44100432190687655, y: 0.07331391781344612, z: 0.034559999988506264, }, }); setEasyTwinRenderer(renderer); } return () => { if (easyTwinRenderer) { easyTwinRenderer.disposeViewport(); setEasyTwinRenderer(undefined); } }; }, [easyTwinRenderer]); const assetSuffix = React.useMemo( () => AssetTypeInfos.find((i) => i.type === assetType)?.label, [assetType], ); const [form] = Form.useForm(); const [baseFormData, setBaseFormData] = React.useState>(); const { createAsset } = useAsset(); const [createAssetData, setCreateAssetData] = React.useState>(); const formRender = () => { const props = { initData: initStateData[assetType], easyTwinRenderer, onValuesChanges: setCreateAssetData, }; switch (assetType) { case AssetTypeEnum.POINT: return ; default: return null; } }; const handleOk = async () => { if (!baseFormData?.name || !createAssetData) return; await createAsset({ name: `${baseFormData.name}${assetSuffix}`, type: assetType, config: createAssetData.config, description: '', thumb: '', // TODO: 需要获取 categoryId categoryId: '', }); message.success('新建成功,可前往数字要素使用!'); onOk?.(); }; return ( i.type === assetType)?.label}`} width={800} zIndex={10001} okButtonProps={{ disabled: !baseFormData?.name || !createAssetData, }} maskClosable={false} onOk={handleOk} onCancel={onCancel}>
{/* */}
{/* */} {formRender()}
); }; export default CreateAssetModal;