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 @@
-