From 59eae55426bb258a66c2303eaef3ca14906d7dec Mon Sep 17 00:00:00 2001 From: zh <972939975@qq.com> Date: Fri, 26 Sep 2025 11:37:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/index.ts | 4 + src/renderer/components.d.ts | 2 + .../icon/{annotation.png => splitScreen.png} | Bin src/renderer/src/I18n/zh-CN.ts | 2 +- src/renderer/src/api/gisApi.ts | 10 +- src/renderer/src/api/tree/index.ts | 6 +- .../src/components/dialog/directory.vue | 48 ++-- .../src/components/dialog/directoryEdit.vue | 263 ++++++++++++++++++ .../components/leftSide/leftSideFirst.vue | 11 +- .../components/leftSide/leftSideSecond.vue | 18 +- .../components/propertyBox/labelStyle.vue | 102 ++++++- .../propertyBox/particleEffects.vue | 39 ++- .../tree/components/hooks/rightOperate.ts | 46 +-- .../src/views/components/tree/hooks/tree.ts | 4 +- src/renderer/src/views/home/index.vue | 13 +- 15 files changed, 506 insertions(+), 62 deletions(-) rename src/renderer/public/icon/{annotation.png => splitScreen.png} (100%) create mode 100644 src/renderer/src/components/dialog/directoryEdit.vue diff --git a/src/main/index.ts b/src/main/index.ts index 01b2b6e..3fa7a97 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -113,6 +113,10 @@ function createWindow(): void { allowRunningInsecureContent: true } }) + ipcMain.on("restart", () => { + app.relaunch(); + forceQuit(); + }); // 监听启动页完成的消息 ipcMain.on('splash-completed', () => { // 启动页进度条已完成,可以关闭启动页并显示主窗口 diff --git a/src/renderer/components.d.ts b/src/renderer/components.d.ts index 493dc42..9e3ef8f 100644 --- a/src/renderer/components.d.ts +++ b/src/renderer/components.d.ts @@ -9,7 +9,9 @@ export {} declare module 'vue' { export interface GlobalComponents { BaseDialog: typeof import('./src/components/dialog/baseDialog.vue')['default'] + copy: typeof import('./src/components/dialog/directory copy.vue')['default'] Directory: typeof import('./src/components/dialog/directory.vue')['default'] + DirectoryEdit: typeof import('./src/components/dialog/directoryEdit.vue')['default'] ElButton: typeof import('element-plus/es')['ElButton'] ElCard: typeof import('element-plus/es')['ElCard'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] diff --git a/src/renderer/public/icon/annotation.png b/src/renderer/public/icon/splitScreen.png similarity index 100% rename from src/renderer/public/icon/annotation.png rename to src/renderer/public/icon/splitScreen.png diff --git a/src/renderer/src/I18n/zh-CN.ts b/src/renderer/src/I18n/zh-CN.ts index 16f5c99..a1d57ea 100644 --- a/src/renderer/src/I18n/zh-CN.ts +++ b/src/renderer/src/I18n/zh-CN.ts @@ -119,7 +119,7 @@ export default { coorLocation: "坐标定位", mouseLocation: "鼠标定位", annotationAggregation: "标注点聚合", - annotation: '卷帘对比', + splitScreen: '卷帘对比', screenShot: '屏幕截图', highQuality: '高清出图', videoRecord: '视频录制', diff --git a/src/renderer/src/api/gisApi.ts b/src/renderer/src/api/gisApi.ts index 21dfc79..bf4e5ce 100644 --- a/src/renderer/src/api/gisApi.ts +++ b/src/renderer/src/api/gisApi.ts @@ -14,5 +14,13 @@ export const GisApi = { url: `/source/uploadLocationImage`, data }) - } + }, + + //修改图层层级 + updateLayersIndex: async (data: any) => { + return await request.post({ + url: `/source/updateLevel`, + data + }) + }, } diff --git a/src/renderer/src/api/tree/index.ts b/src/renderer/src/api/tree/index.ts index b29dad0..451cd95 100644 --- a/src/renderer/src/api/tree/index.ts +++ b/src/renderer/src/api/tree/index.ts @@ -62,10 +62,10 @@ export const TreeApi = { data }) }, - //上传或修改树的层级 - updateTree: async (data: any) => { + //修改树层级 + updateTreeIndex: async (data: any) => { return await request.post({ - url: `/yjearth4/api/v1/source/update_treeindex`, + url: `/source/dragSource`, data }) }, diff --git a/src/renderer/src/components/dialog/directory.vue b/src/renderer/src/components/dialog/directory.vue index db9b3cd..286faf5 100644 --- a/src/renderer/src/components/dialog/directory.vue +++ b/src/renderer/src/components/dialog/directory.vue @@ -97,31 +97,31 @@ const add = throttle(async () => { } // console.log(res) }, 3000) -//上传或修改树的层级 -const updateTree = async (newNode: any) => { - const list = newNode.map((item: any) => { - return { - id: item.id, - treeIndex: item.treeIndex, - parentId: item.parentId - } - }) - console.log(list) - const res = await TreeApi.updateTree({ list }) - if (res.code == 0) { - ElMessage({ - message: '添加成功', - type: 'success' - }) +////上传或修改树的层级 +// const updateTree = async (newNode: any) => { +// const list = newNode.map((item: any) => { +// return { +// id: item.id, +// treeIndex: item.treeIndex, +// parentId: item.parentId +// } +// }) +// console.log(list) +// const res = await TreeApi.updateTree({ list }) +// if (res.code == 0) { +// ElMessage({ +// message: '添加成功', +// type: 'success' +// }) - cancel() - } else { - ElMessage({ - message: '添加失败', - type: 'error' - }) - } -} +// cancel() +// } else { +// ElMessage({ +// message: '添加失败', +// type: 'error' +// }) +// } +// } const cancel = () => { $changeComponentPop('.adddirectory', false) diff --git a/src/renderer/src/components/dialog/directoryEdit.vue b/src/renderer/src/components/dialog/directoryEdit.vue new file mode 100644 index 0000000..2597d14 --- /dev/null +++ b/src/renderer/src/components/dialog/directoryEdit.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/src/renderer/src/views/components/leftSide/leftSideFirst.vue b/src/renderer/src/views/components/leftSide/leftSideFirst.vue index f81a1a6..85bcc4f 100644 --- a/src/renderer/src/views/components/leftSide/leftSideFirst.vue +++ b/src/renderer/src/views/components/leftSide/leftSideFirst.vue @@ -140,7 +140,7 @@ const menuList: any = ref([ 'coorLocation', 'mouseLocation', 'annotationAggregation', - 'annotation', + 'splitScreen', 'screenShot', 'highQuality', 'videoRecord', @@ -215,6 +215,15 @@ const handleClick = (item: any, e) => { }) } } + else if (item.key === 'ersanwei') { + if(YJ.Global.multiViewportMode.getSdk().sdkD) { + YJ.Global.multiViewportMode.off(window.earth); + } + else { + eventBus.emit('closeSplitScreen') + YJ.Global.multiViewportMode.on(window.earth); + } + } } const fold = () => { // 如果正在动画中,直接返回 diff --git a/src/renderer/src/views/components/leftSide/leftSideSecond.vue b/src/renderer/src/views/components/leftSide/leftSideSecond.vue index a899e02..ac15a99 100644 --- a/src/renderer/src/views/components/leftSide/leftSideSecond.vue +++ b/src/renderer/src/views/components/leftSide/leftSideSecond.vue @@ -3,7 +3,8 @@
@@ -114,13 +169,16 @@ const props = defineProps({ const entityOptions = ref(props.entityOptions) const fontList = ref(getFontList()) const labelColorRef = ref(null) +const labelLineColorRef = ref(null) +const labelBackgroundColorStartRef = ref(null) +const labelBackgroundColorEndRef = ref(null) const fontChange = (val) => { entityOptions.value.labelFontFamily = val } onMounted(() => { - let labelColorPicker = new (window as any).YJColorPicker({ + new (window as any).YJColorPicker({ el: labelColorRef.value, size: 'mini', //颜色box类型 alpha: true, //是否开启透明度 @@ -134,6 +192,48 @@ onMounted(() => { entityOptions.value.labelColor = 'rgba(255,255,255,1)' } //点击清空按钮事件回调 }) + new (window as any).YJColorPicker({ + el: labelLineColorRef.value, + size: 'mini', //颜色box类型 + alpha: true, //是否开启透明度 + defaultColor: entityOptions.value.labelLineColor, + disabled: false, //是否禁止打开颜色选择器 + openPickerAni: 'opacity', //打开颜色选择器动画 + sure: (color) => { + entityOptions.value.labelLineColor = color + }, //点击确认按钮事件回调 + clear: () => { + entityOptions.value.labelLineColor = 'rgba(255,255,255,1)' + } //点击清空按钮事件回调 + }) + new (window as any).YJColorPicker({ + el: labelBackgroundColorStartRef.value, + size: 'mini', //颜色box类型 + alpha: true, //是否开启透明度 + defaultColor: entityOptions.value.labelBackgroundColorStart, + disabled: false, //是否禁止打开颜色选择器 + openPickerAni: 'opacity', //打开颜色选择器动画 + sure: (color) => { + entityOptions.value.labelBackgroundColorStart = color + }, //点击确认按钮事件回调 + clear: () => { + entityOptions.value.labelBackgroundColorStart = 'rgba(255,255,255,1)' + } //点击清空按钮事件回调 + }) + new (window as any).YJColorPicker({ + el: labelBackgroundColorEndRef.value, + size: 'mini', //颜色box类型 + alpha: true, //是否开启透明度 + defaultColor: entityOptions.value.labelBackgroundColorEnd, + disabled: false, //是否禁止打开颜色选择器 + openPickerAni: 'opacity', //打开颜色选择器动画 + sure: (color) => { + entityOptions.value.labelBackgroundColorEnd = color + }, //点击确认按钮事件回调 + clear: () => { + entityOptions.value.labelBackgroundColorEnd = 'rgba(255,255,255,1)' + } //点击清空按钮事件回调 + }) }) diff --git a/src/renderer/src/views/components/propertyBox/particleEffects.vue b/src/renderer/src/views/components/propertyBox/particleEffects.vue index 4ee6038..230d398 100644 --- a/src/renderer/src/views/components/propertyBox/particleEffects.vue +++ b/src/renderer/src/views/components/propertyBox/particleEffects.vue @@ -52,13 +52,13 @@
最小初速度 - +
最大初速度 - +
@@ -66,13 +66,13 @@
最小存在时间 - +
最大存在时间 - +
@@ -318,6 +318,37 @@ const remove = () => { }) } +const changeMinimumSpeed = (event) => { + let minimumSpeed = Number(event.target.value) + if(minimumSpeed>entityOptions.value.maximumSpeed) { + minimumSpeed = entityOptions.value.maximumSpeed + } + entityOptions.value.minimumSpeed = minimumSpeed +} +const changeMaximumSpeed = (event) => { + let maximumSpeed = Number(event.target.value) + if(maximumSpeed { + let minimumParticleLife = Number(event.target.value) + if(minimumParticleLife>entityOptions.value.maximumParticleLife) { + minimumParticleLife = entityOptions.value.maximumParticleLife + } + entityOptions.value.minimumParticleLife = minimumParticleLife +} +const changeMaximumParticleLife = (event) => { + let maximumParticleLife = Number(event.target.value) + if(maximumParticleLife { entityOptions.value.originalOptions = structuredClone(originalOptions) that.positionEditing = false diff --git a/src/renderer/src/views/components/tree/components/hooks/rightOperate.ts b/src/renderer/src/views/components/tree/components/hooks/rightOperate.ts index 1620ded..076586c 100644 --- a/src/renderer/src/views/components/tree/components/hooks/rightOperate.ts +++ b/src/renderer/src/views/components/tree/components/hooks/rightOperate.ts @@ -450,25 +450,37 @@ export const useRightOperate = () => { let entityOptions = window.earth.entityMap.get(item.id) let layerIndex = entityOptions.layerIndex; layers.push({ id: item.id, layerIndex }); - let params = { - layerIndex: entityOptions.layerIndex, - alpha: entityOptions.alpha, - brightness: entityOptions.brightness, - name: entityOptions.name, - show: entityOptions.show, - id: item.id, - } - let params2 = { - "id": params.id, - "sourceName": params.name, - "params": params, - "isShow": params.show ? 1 : 0 - } - TreeApi.updateDirectoryInfo(params2) - cusUpdateNode({ "id": params.id, "sourceName": params.name, "params": JSON.stringify(params) }) + // let params = { + // layerIndex: entityOptions.layerIndex, + // alpha: entityOptions.alpha, + // brightness: entityOptions.brightness, + // name: entityOptions.name, + // show: entityOptions.show, + // id: item.id, + // } + // let params2 = { + // "id": params.id, + // "sourceName": params.name, + // "params": params, + // "isShow": params.show ? 1 : 0 + // } + // TreeApi.updateDirectoryInfo(params2) + // cusUpdateNode({ "id": params.id, "sourceName": params.name, "params": JSON.stringify(params) }) } }); - console.log('layers', layers) + GisApi.updateLayersIndex(layers).then((res) => { + if (res.code == 0 || res.code == 200) { + ElMessage({ + message: '操作成功', + type: 'success' + }) + } else { + ElMessage({ + message: '操作失败', + type: 'error' + }) + } + }) } // 图片文件上传后续 diff --git a/src/renderer/src/views/components/tree/hooks/tree.ts b/src/renderer/src/views/components/tree/hooks/tree.ts index a3312f0..684cd54 100644 --- a/src/renderer/src/views/components/tree/hooks/tree.ts +++ b/src/renderer/src/views/components/tree/hooks/tree.ts @@ -110,8 +110,8 @@ export const useTree = () => { parentId: item.parentId } }) - const res = await TreeApi.updateTree({ list }) - if (res.code == 0) { + const res = await TreeApi.updateTreeIndex(list) + if (res.code == 0 || res.code == 200) { ElMessage({ message: '操作成功', type: 'success' diff --git a/src/renderer/src/views/home/index.vue b/src/renderer/src/views/home/index.vue index 6ae7df8..9bb0f80 100644 --- a/src/renderer/src/views/home/index.vue +++ b/src/renderer/src/views/home/index.vue @@ -5,6 +5,7 @@ + @@ -50,7 +51,8 @@ import { AuthApi } from '@/api/setting/auth' import { $sendElectronChanel, $recvElectronChanel, - $changeComponentShow + $changeComponentShow, + $changeComponentPop } from '@/utils/communication' import Headers from '../components/headers/index.vue' import Tree from '../components/tree/index.vue' @@ -67,6 +69,7 @@ import groundText from '../components/propertyBox/groundText.vue' import standText from '../components/propertyBox/standText.vue' import circleObject from '../components/propertyBox/circleObject.vue' import addDirectory from '@/components/dialog/directory.vue' +import editDirectory from '@/components/dialog/directoryEdit.vue' import firstMenu from '@/views/components/leftSide/leftSideFirst.vue' import bottomMenu from '@/views/components/bottomSide/bottomSide.vue' import Visibility from '../components/propertyBox/Visibility.vue' @@ -131,6 +134,12 @@ eventBus.on('openDialog', async (sourceType: any, id: any) => { dynamicComponentRef.value.close() } switch (sourceType) { + case 'directory': + $changeComponentPop('.editdirectoryBox', true) + // currentComponent.value = addDirectory + // await nextTick() + // dynamicComponentRef.value?.open() + break case 'addGroundText': currentComponent.value = addGroundText await nextTick() @@ -425,7 +434,7 @@ onMounted(async () => { height: 100%; } -.adddirectoryBox { +.adddirectoryBox, .editdirectoryBox { display: none; } From 334d22c3da25135dedc2957fcb138831623fa2da Mon Sep 17 00:00:00 2001 From: zh <972939975@qq.com> Date: Fri, 26 Sep 2025 19:14:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/index.ts | 11 +- src/renderer/components.d.ts | 1 - src/renderer/src/common/initMapData.ts | 42 +-- .../src/components/dialog/directoryEdit.vue | 70 ++--- src/renderer/src/icons/svg/weather.svg | 1 + .../setPup/components/photoManage.vue | 5 +- .../headers/components/setTool/setTool.vue | 2 +- .../src/views/components/headers/index.vue | 13 +- .../propertyBox/billboardObject.vue | 8 +- .../views/components/propertyBox/photo.vue | 276 +++++++++--------- .../src/views/components/tree/hooks/tree.ts | 45 ++- .../views/components/tree/hooks/treeNode.ts | 1 + src/renderer/src/views/home/index.vue | 20 +- 13 files changed, 256 insertions(+), 239 deletions(-) create mode 100644 src/renderer/src/icons/svg/weather.svg diff --git a/src/main/index.ts b/src/main/index.ts index 3fa7a97..abed924 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -210,16 +210,21 @@ function createWindow(): void { } * */ - console.log('GetHomeDir()', GetHomeDir()) + // console.log('GetHomeDir()', GetHomeDir()) + let prefix = + process.env.NODE_ENV === "development" + ? "src/renderer/public" + : "resources/app.asar/out/renderer"; let data = {}; for (const objKey in obj) { let files = fs.readdirSync( path.join( - global.__static ? global.__static : GetHomeDir() + "/src/renderer/public", + GetHomeDir(), + prefix, obj[objKey] ) ); - console.log(files); + // console.log(files); for (let i = 0; i < files.length; i++) { files[i] = obj[objKey] + "/" + files[i]; } diff --git a/src/renderer/components.d.ts b/src/renderer/components.d.ts index 9e3ef8f..cefa92b 100644 --- a/src/renderer/components.d.ts +++ b/src/renderer/components.d.ts @@ -9,7 +9,6 @@ export {} declare module 'vue' { export interface GlobalComponents { BaseDialog: typeof import('./src/components/dialog/baseDialog.vue')['default'] - copy: typeof import('./src/components/dialog/directory copy.vue')['default'] Directory: typeof import('./src/components/dialog/directory.vue')['default'] DirectoryEdit: typeof import('./src/components/dialog/directoryEdit.vue')['default'] ElButton: typeof import('element-plus/es')['ElButton'] diff --git a/src/renderer/src/common/initMapData.ts b/src/renderer/src/common/initMapData.ts index 5ddb1f1..f0e011d 100644 --- a/src/renderer/src/common/initMapData.ts +++ b/src/renderer/src/common/initMapData.ts @@ -106,7 +106,7 @@ export const initMapData = async (type, data, cd) => { entityObject = new YJ.Obj.RadarScanStereoscopic(window.earth, data) break case 'textBox': - entityObject = new YJ.Obj.TextBox(window.earth, data, ()=>{}) + entityObject = new YJ.Obj.TextBox(window.earth, data, () => { }) break case 'polyhedronObject': entityObject = new YJ.Obj.PolyhedronObject(window.earth, data) @@ -129,7 +129,7 @@ export const initMapData = async (type, data, cd) => { case 'flyLine': entityObject = new YJ.Obj.FlowLine(window.earth, data) break - case 'explosion': + case 'explosion': entityObject = new YJ.Obj.Explosion(window.earth, data) break default: @@ -137,31 +137,37 @@ export const initMapData = async (type, data, cd) => { } if (entityObject) { - options = structuredClone(entityObject.options) - delete options.host - switch (type) { - case 'textBox': - delete options.name - break - case 'fountain': - case 'fire': - case 'smoke': - case 'waterL': - delete options.url - break - default: - break + function getOptions() { + let opt = structuredClone(entityObject.options) + delete opt.host + switch (type) { + case 'textBox': + delete opt.name + break + case 'fountain': + case 'fire': + case 'smoke': + case 'waterL': + delete opt.url + break + default: + break + } + return opt } + options = getOptions() console.log('--------------------onClick') //鼠标左键点击事件 entityObject.onClick = () => { // console.log('onClick') - leftClick(options); + leftClick(getOptions()); }; //鼠标右键点击事件 entityObject.onRightClick = () => { - rightClick(options); + rightClick(getOptions()); }; + + } // options = entityObject return options diff --git a/src/renderer/src/components/dialog/directoryEdit.vue b/src/renderer/src/components/dialog/directoryEdit.vue index 2597d14..f97f192 100644 --- a/src/renderer/src/components/dialog/directoryEdit.vue +++ b/src/renderer/src/components/dialog/directoryEdit.vue @@ -1,5 +1,5 @@