diff --git a/src/core/manager/EnvManager.ts b/src/core/manager/EnvManager.ts index 43464e9..fdd3301 100644 --- a/src/core/manager/EnvManager.ts +++ b/src/core/manager/EnvManager.ts @@ -133,7 +133,7 @@ export default class EnvManager { system.showErrorDialog('EnvManager is already running, cannot start again.') return } - const payload = env.env_payload + const payload = env.envConfig const brokerUrl = payload?.mqtt?.websocket const username = payload?.mqtt?.username const password = payload?.mqtt?.password @@ -205,15 +205,11 @@ export default class EnvManager { } - static CURRENT_ALL_ENV: EnvInfo[] - /** * 创建运行环境 * @param worldId 世界ID - * @param envName 运行环境名称 - * @param isVirtual 是否是虚拟环境 */ - static async createEnv(worldId: string, envName: string, isVirtual: boolean) { + static async createEnv(worldId: string) { throw new Error('Method not implemented.') } @@ -228,25 +224,8 @@ export default class EnvManager { const res = await Request.request.post('/api/workbench/EnvController@getAllEnv', { worldId: worldId }) - if (res.success) { - EnvManager.CURRENT_ALL_ENV = res.data - for (const env of res.data) { - // payload 转换为 json 数据 - if (env.env_payload) { - try { - env.env_payload = JSON.parse(env.env_payload) - } catch (e) { - console.error('解析环境负载失败:', e) - env.env_payload = {} - } - } - } - - return res - } - EnvManager.CURRENT_ALL_ENV = [] - return res + return res.data } /** diff --git a/src/core/manager/WorldModel.ts b/src/core/manager/WorldModel.ts index 0eab99b..ea98dcd 100644 --- a/src/core/manager/WorldModel.ts +++ b/src/core/manager/WorldModel.ts @@ -1,6 +1,6 @@ import _ from 'lodash' import { reactive } from 'vue' -import { Request } from "@ease-forge/shared"; +import { Request } from '@ease-forge/shared' import EventBus from '@/runtime/EventBus' import StateManager from '@/core/manager/StateManager.ts' import { getQueryParams, setQueryParam } from '@/utils/webutils.ts' @@ -15,6 +15,7 @@ export interface WorldModelState { catalog: Catalog // 当前世界模型目录数据 server: string // 当前楼层服务器地址 project_uuid: string // 当前楼层所在项目ID + project_label: string // 项目名称 catalogCode: string // 当前楼层的目录代码 stateManagerId: string // 当前楼层的状态管理器id @@ -163,12 +164,10 @@ export default class WorldModel { /** * 从远程服务器读取世界地图数据目录 */ - async loadWorldFromRemoting(veryBigData) { - const worldData = veryBigData - const catalog = veryBigData.catalog - const items = veryBigData.items - delete veryBigData.catalog - delete veryBigData.items + async loadWorldFromRemoting(lccModelWorld) { + const worldData = lccModelWorld + const catalog = lccModelWorld.directoryData + delete lccModelWorld.directoryData this.state.isOpened = true this.state.worldData = worldData @@ -176,65 +175,33 @@ export default class WorldModel { // 没有打开楼层,不加载 this.state.infos // 没有打开楼层,不加载 this.state.isChanged this.state.catalog = catalog - this.state.server = veryBigData.server - this.state.project_uuid = veryBigData.project_uuid + this.state.server = lccModelWorld.server + this.state.project_uuid = lccModelWorld.projectUuid // 没有打开楼层,不加载 this.state.catalogCode this.state.isDraft = false - - await localforage.setItem('_____veryBigItemsData', items) } /** * 从服务器获取当前目录楼层的所有数据 */ async getCatalogData(catalogCode: string): Promise { - if(true) { - const res = await Request.request.get("/api/workbench/LccModelManager@getFloor", { params: {catalogCode,project_uuid:this.state.project_uuid} }); - let items :Array=[]; - if(res?.items) items = JSON.parse(res.items) ?? []; - const vdata: any = { - items: items as ItemJson[], - infos: {catalogCode, t: "floor" }, - isChanged: false, - catalog: _.cloneDeep(this.state.catalog), - server: this.state.server, - project_uuid: this.state.project_uuid, - catalogCode: catalogCode, - worldData: _.cloneDeep(this.state.worldData) - } - return Promise.resolve(vdata) - } - const _____veryBigItemsData: any = await localforage.getItem('_____veryBigItemsData') - if (!_____veryBigItemsData) { - return Promise.reject('楼层数据未加载, catalogCode=' + catalogCode) + const items = await Request.request.get('/api/workbench/LccModelManager@getFloor', { params: { catalogCode, project_uuid: this.state.project_uuid } }) + if (!items) { + system.showErrorDialog('can\'t get floor data') + return Promise.reject('can\'t get floor data') } - - const floor = _.find(_____veryBigItemsData, r => r.catalogCode === this.state.catalogCode && r.t === 'floor') - if (floor) { - if (!floor.items) { - floor.items = [] - } - - const items = _.cloneDeep(floor.items) - delete floor.items - console.log("floor", floor); - //@ts-ignore - const vdata: VData = { - items: items as ItemJson[], - infos: floor, - isChanged: false, - catalog: _.cloneDeep(this.state.catalog), - server: this.state.server, - project_uuid: this.state.project_uuid, - catalogCode: catalogCode, - worldData: _.cloneDeep(this.state.worldData) - } - - console.log('从服务器返回数据, 一共' + vdata.items.length + '个') - return Promise.resolve(vdata) + const vdata: any = { + items: items as ItemJson[], + infos: { catalogCode, t: 'floor' }, + isChanged: false, + catalog: _.cloneDeep(this.state.catalog), + server: this.state.server, + project_uuid: this.state.project_uuid, + catalogCode: catalogCode, + worldData: _.cloneDeep(this.state.worldData) } - return Promise.reject('楼层不存在, catalogCode=' + catalogCode) + return Promise.resolve(vdata) } clear() { diff --git a/src/editor/ModelMain.vue b/src/editor/ModelMain.vue index 1514f02..027399c 100644 --- a/src/editor/ModelMain.vue +++ b/src/editor/ModelMain.vue @@ -11,11 +11,11 @@
- - + @@ -32,12 +32,12 @@ v-if="!worldModelState.runState.isRunning" :disabled="!worldModelState.runState.currentEnvId" :loading="worldModelState.runState.isLoading" - @click="startEnv">启动仿真 + @click="startEnv">启动服务 停止仿真 + @click="stopEnv">停止服务
@@ -302,7 +302,7 @@ export default { renderIcon, getWidgetBySide, startEnv() { - const env = this.envList.find(env => env.env_id === this.worldModelState.runState.currentEnvId) + const env = this.envList.find(env => env.envId === this.worldModelState.runState.currentEnvId) if (env) { this.currentViewport.envManager.start(env) } @@ -310,10 +310,15 @@ export default { stopEnv() { this.currentViewport.envManager.stop() }, + createEnv() { + EnvManager.createEnv(this.worldModelState.project_uuid).then(() => { + this.reloadEnvList() + }) + }, reloadEnvList() { EnvManager.getAllEnv(this.worldModelState.project_uuid) - .then(res => { - this.envList = res.data + .then(envList => { + this.envList = envList }) }, toHome() { diff --git a/src/editor/OpenProject.vue b/src/editor/OpenProject.vue index b2cde84..a43026e 100644 --- a/src/editor/OpenProject.vue +++ b/src/editor/OpenProject.vue @@ -50,14 +50,8 @@ const data: OpenProjectData = { // 选择行配置 rowSelection: 'single', columnDefs: [ - { field: 'id', headerName: 'id', editable: false }, - { field: 'projectUuid', headerName: '项目编号', editable: false }, - { field: 'projectLabel', headerName: '项目标题', editable: false }, - { field: 'projectVersion', headerName: '项目版本', editable: false }, - { field: 'createAt', headerName: '创建时间', editable: false }, - { field: 'createBy', headerName: '创建人', editable: false }, - { field: 'updateAt', headerName: '最后更新时间', editable: false }, - { field: 'updateBy', headerName: '更新人', editable: false } + { field: 'projectUuid', headerName: '项目编号', editable: false, flex: 1 }, + { field: 'projectLabel', headerName: '项目标题', editable: false, flex: 1 } ], onGridReady(event: GridReadyEvent) { data.api = event.api @@ -69,7 +63,7 @@ onMounted(loadData) function loadData() { Request.request.post('/api/workbench/LccModelManager@projectList').then(res => { - state.grid1Data = res.records + state.grid1Data = res.data }) } diff --git a/src/editor/menus/FileMenu.ts b/src/editor/menus/FileMenu.ts index 15d3369..e89664c 100644 --- a/src/editor/menus/FileMenu.ts +++ b/src/editor/menus/FileMenu.ts @@ -60,35 +60,12 @@ export default defineMenu((menus) => { [ { name: 'open', label: '打开', icon: SvgCode.open, order: 1, tip: 'Ctrl+O', - click2: 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() - } - }, click: async () => { let dialog: any = null system.showDialog(createVNode(OpenProject, { onCancel: () => dialog?.onClose(), - onOpen: async row => { + onOpen: async lccModelWorld => { dialog?.onClose() - const veryBigData = JSON.parse(row.otherData) - veryBigData.catalog = JSON.parse(row.directoryData) - if (!veryBigData.items) veryBigData.items = [] worldModel.state.isOpened = false worldModel.state.isDraft = false worldModel.state.catalog = [] @@ -99,7 +76,7 @@ export default defineMenu((menus) => { try { await nextTick() worldModel.state.isDraft = false - await worldModel.loadWorldFromRemoting(veryBigData) + await worldModel.loadWorldFromRemoting(lccModelWorld) } finally { system.clearLoading() } @@ -124,22 +101,35 @@ export default defineMenu((menus) => { { name: 'save', label: '保存', icon: SvgCode.save, order: 2, tip: 'Ctrl+S', click: async () => { + if (!worldModel.state.runState.currentEnvId) { + system.showErrorDialog('请先选择环境') + return + } + + system.showLoading('正在保存模型数据...') const viewport: Viewport = window['viewport'] const vdata: any = await viewport.stateManager.save() - console.log(system.json5.stringify(vdata.items)) - system.showLoading('正在保存模型数据...') + + for (const item of vdata.items) { + // 将 items 中的 _rid 属性删除 + if (item._rid) { + delete item._rid + } + } + try { await Request.request.post('/api/workbench/LccModelManager@addOrUpdateFloor', { projectUuid: worldModel.state.project_uuid, catalogCode: worldModel.state.catalogCode, - envId: 1, - items: JSON.stringify(vdata.items) + envId: worldModel.state.runState.currentEnvId, + items: JSON.stringify(vdata.items, null, 2) }) // console.log(JSON.stringify(worldModel.state)); await Request.request.post('/api/workbench/LccModelManager@addOrUpdateWorld', { projectUuid: worldModel.state.project_uuid, + projectLabel: worldModel.state.project_label, directoryData: JSON.stringify(worldModel.state.catalog), - envId: 1, + envId: worldModel.state.runState.currentEnvId, otherData: JSON.stringify(worldModel.state.worldData) }) system.msg('保存成功', 'success') diff --git a/src/types/Model.d.ts b/src/types/Model.d.ts index c3cab85..898ecb2 100644 --- a/src/types/Model.d.ts +++ b/src/types/Model.d.ts @@ -212,11 +212,10 @@ declare function msg(str: string, type: MSG_TYPE = 1): void * 环境信息 */ interface EnvInfo { - env_id: number - world_id: string - env_name: string - is_virtual: boolean - env_payload: any + envId: number + envName: string + isVirtual: boolean + envConfig: any }