import { renderIcon, setQueryParam } from '@/utils/webutils.ts' import { defineMenu } from '@/runtime/DefineMenu.ts' import SvgCode from '@/components/icons/SvgCode' import { createVNode, nextTick } from 'vue' import type Viewport from '@/core/engine/Viewport.ts' import DataForm from '@/components/data-form/DataForm.vue' import OpenProject from '../OpenProject.vue' import { Request } from '@ease-forge/shared' function addProject(successful?: Function) { const data = { server: window.location.origin, }; system.showDialog(createVNode(DataForm, { style: { paddingRight: "12px", }, data: data, formFields: [ { dataPath: 'projectUuid', label: '项目编号', input: 'Input', inputProps: { placeholder: '请输入项目唯一编号', }, }, { dataPath: 'projectLabel', label: '项目标题', input: 'Input', inputProps: { placeholder: '请输入项目标题', }, }, ], columnCount: 1, labelWidth: "80px", }), { title: '创建项目', width: 480, height: 200, showClose: true, showMax: false, showCancelButton: true, showOkButton: true, okButtonText: "创建", cancelButtonText: "取消", }).then(() => { Request.request.post("/api/workbench/LccModelManager@addProject", data).then(()=> { system.msg("创建成功"); successful?.(); }) }).finally(); } export default defineMenu((menus) => { menus.insertChildren('file', { name: 'file', label: '模型', icon: renderIcon('ModelFile'), order: 1, disabled: false }, [ { name: 'open', label: '打开', icon: SvgCode.open, order: 1, tip: 'Ctrl+O', click: async () => { worldModel.state.isOpened = false worldModel.state.isDraft = false worldModel.state.catalog = [] worldModel.state.catalogCode = '' worldModel.state.stateManagerId = '' setQueryParam('store', '') system.showLoading() try { await nextTick() const res = await import('@/example/example1') worldModel.state.isDraft = false await worldModel.loadWorldFromRemoting(res.default) } finally { system.clearLoading() } }, click2: async () => { let dialog: any = null; system.showDialog(createVNode(OpenProject, { onCancel: () => dialog?.onClose(), onOpen: async row => { dialog?.onClose(); const veryBigData = JSON.parse(row.otherData); veryBigData.catalog = JSON.parse(row.directoryData); veryBigData.items = []; worldModel.state.isOpened = false worldModel.state.isDraft = false worldModel.state.catalog = [] worldModel.state.catalogCode = '' worldModel.state.stateManagerId = '' setQueryParam('store', '') system.showLoading() try { await nextTick() worldModel.state.isDraft = false await worldModel.loadWorldFromRemoting(veryBigData) } finally { system.clearLoading() } }, onAdd: that => { addProject(() => that.loadData()); }, }), { title: '打开项目', width: 1500, height: 500, showClose: true, showMax: true, showCancelButton: false, showOkButton: false, okButtonText: "创建", cancelButtonText: "取消", onMounted: d => dialog = d, }).finally(); } }, { name: 'save', label: '保存', icon: SvgCode.save, order: 2, tip: 'Ctrl+S', click: async () => { const viewport: Viewport = window['viewport'] const vdata: any = await viewport.stateManager.save() console.log(system.json5.stringify(vdata.items)) } }, { name: 'saveAs', label: '新建项目', icon: renderIcon('ModelFile'), order: 3, click: () => { addProject(); } } ] ) })