diff --git a/src/components/ShowDialogWrap.vue b/src/components/ShowDialogWrap.vue index f2241dc..e67f30a 100644 --- a/src/components/ShowDialogWrap.vue +++ b/src/components/ShowDialogWrap.vue @@ -53,9 +53,11 @@ export default { dialogResolve: { type: Function, required: true }, dialogReject: { type: Function, required: true }, - childCmp: { type: Object, default: undefined, required: false } + childCmp: { type: Object, default: undefined, required: false }, + onMounted: { type: Function, default: undefined, required: false }, }, mounted() { + this.$props.onMounted?.(this); }, data() { return { diff --git a/src/editor/ModelMain.vue b/src/editor/ModelMain.vue index 33df6f5..2040469 100644 --- a/src/editor/ModelMain.vue +++ b/src/editor/ModelMain.vue @@ -52,11 +52,11 @@ - + v-if="isModelOpen" :key="editorHash"> + - + @@ -103,13 +103,12 @@ + + + + \ No newline at end of file diff --git a/src/editor/menus/FileMenu.ts b/src/editor/menus/FileMenu.ts index b26e92a..4c47cb4 100644 --- a/src/editor/menus/FileMenu.ts +++ b/src/editor/menus/FileMenu.ts @@ -1,8 +1,55 @@ import { renderIcon, setQueryParam } from '@/utils/webutils.ts' import { defineMenu } from '@/runtime/DefineMenu.ts' import SvgCode from '@/components/icons/SvgCode' -import { nextTick } from 'vue' +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', @@ -12,25 +59,65 @@ export default defineMenu((menus) => { [ { 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', '') + 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() + system.showLoading() + try { + await nextTick() - const res = await import('@/example/example1') - worldModel.state.isDraft = false - await worldModel.loadWorldFromRemoting(res.default) + const res = await import('@/example/example1') + worldModel.state.isDraft = false + await worldModel.loadWorldFromRemoting(res.default) - } finally { - system.clearLoading() - } + } 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(); } }, { @@ -42,9 +129,9 @@ export default defineMenu((menus) => { } }, { - name: 'saveAs', label: '新建项目111', icon: renderIcon('ModelFile'), order: 3, + name: 'saveAs', label: '新建项目', icon: renderIcon('ModelFile'), order: 3, click: () => { - system.msg('新建项目111') + addProject(); } } ] diff --git a/src/runtime/System.ts b/src/runtime/System.ts index dc6c16b..bae7321 100644 --- a/src/runtime/System.ts +++ b/src/runtime/System.ts @@ -3,10 +3,10 @@ import _ from 'lodash' import localforage from 'localforage' import JSON5 from 'json5' import hotkeys from 'hotkeys-js' -import { defineComponent, h, markRaw, nextTick, reactive, toRaw, unref, type App, createApp, type Component } from 'vue' -import { ElMessage, ElMessageBox, ElNotification } from 'element-plus' +import { type App, type Component, createApp, defineComponent, h, markRaw, nextTick, reactive, toRaw, unref } from 'vue' +import { ElMessage, ElMessageBox } from 'element-plus' import { QuestionFilled } from '@element-plus/icons-vue' -import { renderIcon, createShortUUID, setQueryParam, getQueryParams } from '@/utils/webutils.ts' +import { createShortUUID, getQueryParams, renderIcon, setQueryParam } from '@/utils/webutils.ts' import type { showDialogOption } from '@/SystemOption' import ShowDialogWrap from '@/components/ShowDialogWrap.vue' import LoadingDialog from '@/components/LoadingDialog.vue' @@ -290,4 +290,5 @@ export interface ShowDialogOption { showOkButton?: boolean cancelButtonText?: string okButtonText?: string + onMounted?: (dialog:any)=> void; }