This commit is contained in:
2025-12-03 10:23:18 +08:00
parent 0951e13eb2
commit 8d2a2eef97
9 changed files with 175 additions and 63 deletions

View File

@ -1,7 +1,7 @@
server:
host: 127.0.0.1
port: 8848
path: C:\Users\takeshita\AppData\Roaming\dzsp_shijingjun_offline_Y_save
path: C:\Users\Administrator\AppData\Roaming\dzsp_shijingjun_offline_Y_save
poi:
global:
enabled: false

View File

@ -1,4 +1,4 @@
import { app, shell, BrowserWindow, ipcMain, globalShortcut, dialog } from 'electron'
import { app, shell, BrowserWindow, ipcMain, globalShortcut, dialog, session } from 'electron'
import path, { join } from 'path'
import { electronApp, optimizer, is } from '@electron-toolkit/utils'
import icon from '../../resources/earth.png?asset'
@ -376,21 +376,90 @@ function createWindow(): void {
let _winMap = new Map();
// 监听渲染进程创建新窗口的请求
function createTempSession() {
// 生成唯一会话名称(避免冲突)
const sessionName = `temp-session-${Date.now()}-${Math.random().toString(36).slice(2)}`;
// 创建独立会话(基于默认分区,但命名唯一)
const tempSession = session.fromPartition(sessionName, {
cache: true, // 允许缓存,但会话独立
persistent: false // 非持久化,关闭后自动清理
});
// 清空会话初始缓存(确保无残留)
tempSession.clearStorageData({
storages: [
'appcache', 'cookies', 'localstorage', 'sessionstorage',
'indexdb', 'cachestorage', 'websql'
]
}).catch(err => console.error('清空临时会话缓存失败:', err));
return tempSession;
}
// @ts-ignore
ipcMain.handle('create-new-window', async (event, params, url, option, id) => {
// try {
// console.log('create-new-window', params, url, option, id)
// const newWindow = await new BrowserWindow(params)
// if (url) {
// await newWindow.loadURL(url)
// await newWindow.webContents.send("data", option)
// newWindow.on('closed', () => {
// _winMap.delete(id);
// // a.delete(newWindow.id)
// // closeCB(newWindow.id)
// });
// }
// _winMap.set(id, newWindow.id);
// return _winMap
// } catch (error) {
// console.error('创建窗口失败:', error);
// throw error; // 抛出错误以便渲染进程捕获
// }
try {
const newWindow = await new BrowserWindow(params)
// 1. 创建独立临时会话
const tempSession = createTempSession();
// 2. 合并窗口配置:注入独立会话
const windowConfig = {
...params,
webPreferences: {
...params.webPreferences,
session: tempSession, // 关键:使用独立会话
nodeIntegration: true,
contextIsolation: false,
devTools: true,
webSecurity: false,
allowRunningInsecureContent: true
}
};
// 3. 创建新窗口
const newWindow = new BrowserWindow(windowConfig);
// 4. 加载URL并发送初始化数据
if (url) {
await newWindow.loadURL(url)
await newWindow.webContents.send("data", option)
newWindow.on('closed', () => {
_winMap.delete(id);
// a.delete(newWindow.id)
// closeCB(newWindow.id)
});
await newWindow.loadURL(url);
await newWindow.webContents.send("data", option);
}
// 5. 窗口关闭时清理会话和映射
newWindow.on('closed', async () => {
_winMap.delete(id);
// 清空会话缓存并销毁
await tempSession.clearStorageData({
storages: ['all'] // 清空所有存储
});
// 解除会话引用触发GC
tempSession.clearCache();
session.removePartition(tempSession.getPartition());
});
// 6. 记录窗口映射
_winMap.set(id, newWindow.id);
return _winMap
return _winMap;
} catch (error) {
console.error('创建窗口失败:', error);
throw error; // 抛出错误以便渲染进程捕获

View File

@ -79,7 +79,7 @@
<template #icon>
<svg-icon name="POI" />
</template>
<span>POI导入</span>
<span>POIL导入</span>
</el-button>
</div>
<div class="fileList" v-if="poiList.length">

View File

@ -2,17 +2,6 @@
<div class="model-management-container">
<div class="equipment_title" style="margin-bottom: 10px">
<div>
<el-button
color="#004b4b"
style="border: 1px solid rgba(var(--color-base1), 0.5)"
@click="importModelDB"
>
<template #icon>
<svg-icon name="select" />
</template>
<span>选择军标库</span>
</el-button>
<el-button
color="#004b4b"
style="border: 1px solid rgba(var(--color-base1), 0.5)"
@ -23,6 +12,16 @@
</template>
<span>创建军标库</span>
</el-button>
<el-button
color="#004b4b"
style="border: 1px solid rgba(var(--color-base1), 0.5)"
@click="importModelDB"
>
<template #icon>
<svg-icon name="select" />
</template>
<span>选择军标库</span>
</el-button>
</div>
<el-input

View File

@ -2,17 +2,6 @@
<div class="model-management-container">
<div class="equipment_title" style="margin-bottom: 10px">
<div>
<el-button
color="#004b4b"
style="border: 1px solid rgba(var(--color-base1), 0.5)"
@click="importModelDB"
>
<template #icon>
<svg-icon name="select" />
</template>
<span>选择图标库</span>
</el-button>
<el-button
color="#004b4b"
style="border: 1px solid rgba(var(--color-base1), 0.5)"
@ -23,6 +12,16 @@
</template>
<span>创建图标库</span>
</el-button>
<el-button
color="#004b4b"
style="border: 1px solid rgba(var(--color-base1), 0.5)"
@click="importModelDB"
>
<template #icon>
<svg-icon name="select" />
</template>
<span>选择图标库</span>
</el-button>
</div>
<el-input
v-model="photoName"

View File

@ -658,7 +658,7 @@ const intoBack = async () => {
let _winMap = await ipcRenderer.invoke('get-_winMap')
if (!_winMap.has(id)) {
try {
const windowId = await ipcRenderer.invoke(
let windowId = await ipcRenderer.invoke(
'create-new-window',
{
title: '后台管理',
@ -683,10 +683,11 @@ const intoBack = async () => {
devTools: true
}
},
`http://localhost:${availablePort}/backManage/index.html#/login`,
`http://localhost:${availablePort}/backManage/index.html#/login?timestamp=${Date.now()}`,
{},
id
)
console.log('windowId', windowId, id)
} catch (error) {
console.error('创建窗口失败:', error)
}

View File

@ -63,6 +63,7 @@
:min="0"
:max="maxNum"
placement="bottom"
style="max-width: 100%"
@change="precisionInput"
:show-tooltip="false"
popper-class="custom-tooltip"
@ -156,6 +157,7 @@ const precisionInput = () => {
// precision.value = dom.max * 1
// }
visibility.precisions = precision.value
console.log('precision.value', visibility.precisions, precision.value)
}
const precisionChange = () => {}
const draw = (e) => {
@ -167,6 +169,7 @@ const draw = (e) => {
//滑块
var maxNum: any = ref(100)
var maxNumBar: any = ref(100)
const updateDataAttr = async () => {
await nextTick()
const sliderButton = document.querySelector('.el-slider__button-wrapper')
@ -176,6 +179,7 @@ const updateDataAttr = async () => {
}
const precisionMaxInput = () => {
let dom: any = document.getElementById('precision')
console.log('maxNum.value', maxNum.value, dom.min, dom.max)
if (maxNum.value < dom.min * 1) {
maxNum.value = dom.min * 1
} else if (maxNum.value > dom.max * 1) {
@ -183,7 +187,19 @@ const precisionMaxInput = () => {
}
// cutFill.heights = maxNum.value
}
watch(
() => maxNum.value,
(x, j) => {
console.log('maxNum.value11111', 'x:' + x, 'y:' + j)
if (!x) {
maxNum.value = 1
}
// if (precision.value != x) {
// visibility.precisions = x
// precision.value = x
// }
}
)
defineExpose({
open
})

View File

@ -191,6 +191,14 @@ const precisionMaxInput = () => {
}
// cutFill.heights = height.value
}
watch(
() => maxNum.value,
(x, j) => {
if (!x) {
maxNum.value = 1
}
}
)
const precisionInput = () => {
// let dom = document.getElementById('precision')
// if (precision.value < dom.min * 1) {

View File

@ -14,7 +14,7 @@
<el-input
v-model="modelName"
class="w-50 m-2"
placeholder="请输入图标类型进行搜索"
placeholder="请输入图标名称进行搜索"
:suffix-icon="Search"
/>
</div>
@ -205,9 +205,11 @@ let observer: IntersectionObserver | null = null
const treeRef: any = ref('')
watch(modelName, (val) => {
if (treeRef.value && treeRef.value !== '') {
treeRef.value?.filter(val)
}
// if (treeRef.value && treeRef.value !== '') {
// treeRef.value?.filter(val)
// }
getModelList()
// categories.value = []
})
watch(isShowPup, (val) => {
if (!val) {
@ -349,7 +351,6 @@ let typeArr = {
const modelClick = (index, row) => {
activeIndex.value = index
isShowPup.value = false
console.log(index, row)
let selectedImg
if (selectCallback) {
if (butActiveIndex.value === 0) {
@ -369,12 +370,21 @@ const modelClick = (index, row) => {
const getModelListByType = (id) => {
if (butActiveIndex.value === 0) {
categories.value = [...threePhoto]
let arr = threePhoto.filter((item) => {
return item.iconName.indexOf(modelName.value) > -1
})
// categories.value = [...threePhoto]
categories.value = arr
} else if (butActiveIndex.value === 1) {
categories.value = [...ordinaryPhoto]
let arr = ordinaryPhoto.filter((item) => {
return item.iconName.indexOf(modelName.value) > -1
})
// categories.value = [...ordinaryPhoto]
categories.value = arr
} else {
let formData = new FormData()
formData.append('iconTypeId', id)
formData.append('name', modelName.value)
PhotoApi.showModelByType(formData).then((res) => {
categories.value = res.data
})
@ -391,13 +401,23 @@ const getModelList = async () => {
}
]
if (butActiveIndex.value == 0) {
categories.value = [...threePhoto]
let arr = threePhoto.filter((item) => {
return item.iconName.indexOf(modelName.value) > -1
})
// categories.value = [...threePhoto]
categories.value = arr
}
if (butActiveIndex.value == 1) {
categories.value = [...ordinaryPhoto]
let arr = ordinaryPhoto.filter((item) => {
return item.iconName.indexOf(modelName.value) > -1
})
// categories.value = [...ordinaryPhoto]
categories.value = arr
}
} else {
const res: any = await PhotoApi.modelTypeList()
const params = new URLSearchParams()
params.append('iconName', modelName.value)
const res: any = await PhotoApi.modelTypeList(params)
if (res.code == 0 || res.code == 200) {
let data = transformNestedJson(res.data, 'name', 'label')
typeTreeData.value = data
@ -503,8 +523,11 @@ defineExpose({
// height: 50vh;
:deep(.el-dialog) {
background:
linear-gradient(180deg, rgba(var(--color-base1), 0.2) 0%, rgba(var(--color-base1), 0) 100%),
background: linear-gradient(
180deg,
rgba(var(--color-base1), 0.2) 0%,
rgba(var(--color-base1), 0) 100%
),
rgba(0, 0, 0, 0.6);
border: 1px solid var(--color-border1);
padding-left: 0 !important;
@ -561,22 +584,22 @@ defineExpose({
// height: 50vh;
:deep(
.el-tabs--left .el-tabs__active-bar.is-left,
.el-tabs--left .el-tabs__active-bar.is-right,
.el-tabs--right .el-tabs__active-bar.is-left,
.el-tabs--right .el-tabs__active-bar.is-right
) {
.el-tabs--left .el-tabs__active-bar.is-left,
.el-tabs--left .el-tabs__active-bar.is-right,
.el-tabs--right .el-tabs__active-bar.is-left,
.el-tabs--right .el-tabs__active-bar.is-right
) {
width: 3px;
background: rgba(var(--color-base1), 1);
height: 40px !important;
}
:deep(
.el-tabs--left .el-tabs__nav-wrap.is-left::after,
.el-tabs--left .el-tabs__nav-wrap.is-right::after,
.el-tabs--right .el-tabs__nav-wrap.is-left::after,
.el-tabs--right .el-tabs__nav-wrap.is-right::after
) {
.el-tabs--left .el-tabs__nav-wrap.is-left::after,
.el-tabs--left .el-tabs__nav-wrap.is-right::after,
.el-tabs--right .el-tabs__nav-wrap.is-left::after,
.el-tabs--right .el-tabs__nav-wrap.is-right::after
) {
width: 3px;
}
@ -915,10 +938,7 @@ defineExpose({
width: 90px;
height: 32px;
opacity: 1;
border-radius:
0px 4px,
4px,
0px;
border-radius: 0px 4px, 4px, 0px;
background: rgba(var(--color-base1), 0.2);
border: 1px solid rgba(var(--color-base1), 0.1);
display: flex;