diff --git a/resources/java/app/yjearth.jar b/resources/java/app/yjearth.jar index e2aabaf..b54f3e4 100644 Binary files a/resources/java/app/yjearth.jar and b/resources/java/app/yjearth.jar differ diff --git a/src/renderer/src/api/ts/index.ts b/src/renderer/src/api/ts/index.ts index 7592f87..0d80b49 100644 --- a/src/renderer/src/api/ts/index.ts +++ b/src/renderer/src/api/ts/index.ts @@ -33,6 +33,13 @@ export const TsApi = { data }) }, + // /tsSource/delete + deleteTsModelSource: async (data: any) => { + return await request.post({ + url: '/tsSource/delete', + data + }) + }, queryTsSource: async (data: any) => { return await request.post({ url: '/tsSource/query', diff --git a/src/renderer/src/views/TS/cabin.vue b/src/renderer/src/views/TS/cabin.vue index a28bd0e..f1dddaa 100644 --- a/src/renderer/src/views/TS/cabin.vue +++ b/src/renderer/src/views/TS/cabin.vue @@ -50,9 +50,15 @@ const initTreeCallBack = () => { if (res.code == 200) { for (let i = res.data.length - 1; i >= 0; i--) { res.data[i].svg = await cusNodeIcon(res.data[i]); + } zNodes.value = res.data - console.log("data", zNodes.value) + /*zNodes.value.forEach(item => { + if (typeof item.detail == 'string') { + item.detail = JSON.parse(item.detail) + } + })*/ + console.log("zNodes.value", zNodes.value) treeObj.value = $.fn.zTree.init($(`#treeDemos`), setting, zNodes.value) window.treeObj = treeObj.value } @@ -73,8 +79,8 @@ const initTreeCallBack = () => { if (arr[i].sourceType === 'directory') { continue } - let detail = JSON.parse(arr[i].detail || '{}') - let params = JSON.parse(arr[i].params || '{}') + let detail = typeof arr[i].detail == 'string' ? JSON.parse(arr[i].detail || '{}') : arr[i].detail + let params = typeof arr[i].params == 'string' ? JSON.parse(arr[i].params || '{}') : arr[i].params if (!detail.name) { detail.name = arr[i].sourceName } @@ -89,10 +95,29 @@ const initTreeCallBack = () => { } ) } else { + console.log({...detail, ...params}) initMapData(arr[i].sourceType, {...detail, ...params}) + } } + //gis实例渲染后,查找是否有相关的轨迹运动对象,有则渲染 + let guijiEvents = window['tsObj']._Store.getTaskByProperty("move", "callback") + guijiEvents.forEach(event => { + let detail = typeof event.detail == 'string' ? JSON.parse(event.detail) : JSON.parse(JSON.stringify(event.detail)) + let duration_S = (event.endTime - event.startTime) / 1000 + let distance = new YJ.Tools().computeDistance2(detail.line.positions); + let speed = (distance / duration_S) * window['tsObj']._Store._multiplier + detail.speed = speed + console.log("event的detail", detail) + initMapData("guiji", detail, (TrajectoryMotionObject) => { + TrajectoryMotionObject.state = false + TrajectoryMotionObject.oldSpeed = (distance / duration_S) * window['tsObj']._Store._multiplier + (window as any)._entityMap.set(event.id + event.callback + event.sourceId, TrajectoryMotionObject) + let tsEntitys = (window as any)._entityMap.get(event.sourceId); + TrajectoryMotionObject.moveCallBack(tsEntitys) + }) + }) layers.sort((obj1, obj2) => { return obj1.detail.layerIndex - obj2.detail.layerIndex; }); diff --git a/src/renderer/src/views/TS/components/eventParams.vue b/src/renderer/src/views/TS/components/eventParams.vue index b9e2aa4..bcb7090 100644 --- a/src/renderer/src/views/TS/components/eventParams.vue +++ b/src/renderer/src/views/TS/components/eventParams.vue @@ -42,12 +42,15 @@ const numbers = ref(0) const detail = ref({}) const eventBus: any = inject('bus') -let eventObj:any = ref(null) +let eventObj: any = ref(null) eventBus.on('click-event-show-plane', (params) => { console.log('兄弟 B 的方法被触发了!', params) eventObj.value = (params ? params : null) if (eventObj.value) { - let details = JSON.parse(eventObj.value.detail) + let details = eventObj.value.detail + if (typeof details == 'string') { + details = JSON.parse(eventObj.value.detail) + } switch (params.callback) { case 'flicker': // times.value = detail.times diff --git a/src/renderer/src/views/TS/components/grid.vue b/src/renderer/src/views/TS/components/grid.vue index fb9c3a1..b314fec 100644 --- a/src/renderer/src/views/TS/components/grid.vue +++ b/src/renderer/src/views/TS/components/grid.vue @@ -58,24 +58,35 @@ const props = defineProps(['eventList',]) const menus = ref([ { name: "删除", - fun: () => { - let param = new FormData - param.append("id", rightClickEvent.value.id) - TsApi.delEvent(param).then(res => { - if (res.code == 200) { - eventBus.emit('delete-event', rightClickEvent.value.id) + fun: + () => { + delEvent([rightClickEvent.value.id], () => { ElMessage({message: "操作成功", type: "success"}) rightClickEvent.value = null - } - }) - } + + }) + + } }, { name: '定位', fun: () => { let entity = window['earth_ts'].entityMap.get(rightClickEvent.value.sourceId) entity && entity.flyTo() } - },]) + },] +) const clicked = ref(false) +const delEvent = (ids, cb) => { + TsApi.delEvent(ids).then(res => { + if (res.code == 200) { + eventBus.emit('delete-event', ids) + cb() + } + }) +} +eventBus.on("del-event-by-source", ids => { + delEvent(ids, () => { + }) +}) function onCancel() { clicked.value = true diff --git a/src/renderer/src/views/TS/components/rightOperate.ts b/src/renderer/src/views/TS/components/rightOperate.ts index 415b9a1..69e2380 100644 --- a/src/renderer/src/views/TS/components/rightOperate.ts +++ b/src/renderer/src/views/TS/components/rightOperate.ts @@ -2,10 +2,10 @@ import {$changeComponentPop} from "../../../utils/communication"; import {ipcRenderer} from "electron"; import {addMapSource, initMapData} from "../entity"; import {TsApi} from "../../../api/ts"; -import {ElMessage} from "element-plus"; +import {ElMessage, ElMessageBox} from "element-plus"; import {useTreeNode} from "../../components/tree/hooks/treeNode"; -const {cusAddNodes} = useTreeNode() +const {cusAddNodes, getSelectedNodes, cusRemoveNode} = useTreeNode() function getLastPathComponent(path, extensionsToRemove = []) { // 处理路径分隔符 @@ -139,8 +139,46 @@ export const useRightOperate = () => { } }) } - const delNode = () => { - console.log("删除节点") + const delNode = (node, eventBus) => { + console.log("删除节点", eventBus) + ElMessageBox.confirm('此操作将永久删除节点及所有子节点, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let selectNodes = getSelectedNodes(window.treeObj) + let source_ids = cusRemoveNode(window.treeObj, selectNodes) + console.log(source_ids) + TsApi.deleteTsModelSource(source_ids).then(res => { + if (res.code == 0 || res.code == 200) { + ElMessage({ + message: '删除成功', + type: 'success' + }) + let eventIds = [] + source_ids.forEach(item => { + let entity = (window as any).earth_ts.entityMap.get(item) + if (entity) { + entity.remove(); + (window as any)._entityMap.delete(entity.options.id) + } + //关闭资源的编辑框,删除相关的事件 + // eventBus.emit("destroyComponent", item); + let arr = window['tsObj']._Store.getTaskByProperty(item, "sourceId", "id") + eventIds = eventIds.concat(arr) + }); + eventBus.emit("del-event-by-source", eventIds) + } + }) + }).catch(() => { + // 用户点击取消,不执行任何操作 + }) + /*let formData = new FormData() + formData.append("id", "") + TsApi.deleteTsModelSource(formData).then(res => { + + })*/ } const editNode = () => { console.log("编辑节点") diff --git a/src/renderer/src/views/TS/deduction.vue b/src/renderer/src/views/TS/deduction.vue index 4008c4b..9ed6c4a 100644 --- a/src/renderer/src/views/TS/deduction.vue +++ b/src/renderer/src/views/TS/deduction.vue @@ -5,20 +5,20 @@