Merge branch 'zyl' of http://xny.yj-3d.com:3000/zhouyulong/electron-4 into zyl
This commit is contained in:
60
electron.vite.config.1764295754509.mjs
Normal file
60
electron.vite.config.1764295754509.mjs
Normal file
@ -0,0 +1,60 @@
|
||||
// electron.vite.config.ts
|
||||
import { resolve } from "path";
|
||||
import { defineConfig, externalizeDepsPlugin } from "electron-vite";
|
||||
import vue from "@vitejs/plugin-vue";
|
||||
import AutoImport from "unplugin-auto-import/vite";
|
||||
import Components from "unplugin-vue-components/vite";
|
||||
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
|
||||
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
|
||||
import path from "path";
|
||||
var electron_vite_config_default = defineConfig({
|
||||
main: {
|
||||
plugins: [externalizeDepsPlugin()]
|
||||
},
|
||||
preload: {
|
||||
plugins: [externalizeDepsPlugin()]
|
||||
},
|
||||
renderer: {
|
||||
resolve: {
|
||||
alias: {
|
||||
"@renderer": resolve("src/renderer/src"),
|
||||
"@": resolve("src/renderer/src")
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
vue(),
|
||||
AutoImport({
|
||||
imports: ["vue"],
|
||||
dts: "src/auto-imports.d.ts",
|
||||
// 自动生成类型声明文件
|
||||
resolvers: [ElementPlusResolver()]
|
||||
}),
|
||||
Components({
|
||||
resolvers: [ElementPlusResolver()]
|
||||
}),
|
||||
// SVG图标插件配置
|
||||
// 配置SVG图标插件
|
||||
createSvgIconsPlugin({
|
||||
iconDirs: [path.resolve(process.cwd(), "src/renderer/src/icons/svg")],
|
||||
symbolId: "icon-[name]",
|
||||
// 自动清除 SVG 中的 fill 和 stroke 属性
|
||||
svgoOptions: {
|
||||
plugins: [{ name: "removeAttrs", params: { attrs: ["fill", "stroke", "stroke-width"] } }]
|
||||
}
|
||||
})
|
||||
]
|
||||
/*server: {
|
||||
port: 8848,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: localStorage.getItem('ip') || 'http://127.0.0.1:8848',
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api/, '')
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
});
|
||||
export {
|
||||
electron_vite_config_default as default
|
||||
};
|
||||
@ -33,7 +33,7 @@
|
||||
>搜索
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="treeBox">
|
||||
<div class="treeBox custom_scroll_bar_ts">
|
||||
<ul id="treeDemos" class="ztree"></ul>
|
||||
<rightMenuTs ref="rightMenuRef" class="absolute zIndex99"></rightMenuTs>
|
||||
</div>
|
||||
@ -336,6 +336,10 @@ const onMouseDown = (event: MouseEvent, treeId: string, treeNode: any) => {
|
||||
}
|
||||
}
|
||||
let rightClick = (event: MouseEvent, treeId: string, treeNode: any) => {
|
||||
if (window['tsObj']._Clock._status == 'play') {
|
||||
ElMessage({message: "态势推演中,暂停或停止后再试"})
|
||||
return;
|
||||
}
|
||||
let selectNodes = getSelectedNodes(treeObj.value)
|
||||
let isnewSelect = true //是否为新选中
|
||||
selectNodes.forEach((item: any) => {
|
||||
@ -462,6 +466,7 @@ defineExpose({
|
||||
.treeBox {
|
||||
//border: 1px solid red;
|
||||
flex: auto;
|
||||
overflow-y: auto;
|
||||
|
||||
.ztree {
|
||||
height: 100%;
|
||||
|
||||
@ -4,14 +4,12 @@
|
||||
<div v-for="item in columns" :style="item.style">{{ item.name }}</div>
|
||||
</div>
|
||||
<div class="grid-body">
|
||||
<template v-for="item in 10">
|
||||
<div :class="['row',(eventObj&&event.id==eventObj.id)?'selectedRow':'']" :style="getStyle"
|
||||
v-for="(event) in eventList" @click.right="(e)=>{rightClick(e,event)}">
|
||||
<span v-for="item in columns" :class="item.key" :style="item.style">{{
|
||||
format(item.key, event[item.key])
|
||||
}}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div :style="style">
|
||||
<!--aa-->
|
||||
@ -137,9 +135,9 @@ const rightClick = (e, eventObj) => {
|
||||
nextTick(() => {
|
||||
let parentHeight = parseInt(window.getComputedStyle($(".grid-body")[0]).height)//203
|
||||
let height = parseInt(window.getComputedStyle($(".gridRightMenu")[0]).height)//65
|
||||
|
||||
let maxTop = parentHeight - height//138
|
||||
$(".gridRightMenu")[0].style.top = e.layerY > maxTop ? maxTop : e.layerY + "px"
|
||||
let offset = e.layerY > maxTop ? maxTop : e.layerY
|
||||
$(".gridRightMenu")[0].style.top = offset + "px"
|
||||
$(".gridRightMenu")[0].style.left = e.layerX + "px"
|
||||
})
|
||||
} else {
|
||||
|
||||
@ -66,10 +66,10 @@ export const useRightOperate = () => {
|
||||
// @ts-ignore
|
||||
let name = getLastPathComponent(item, ['clt', 'json', 'pak', 'kml', 'kmz', 'shp', 'geojson', 'geoJson', 'czml', 'jct', 'mif', 'tab', 'csv']);
|
||||
let sourceType = "layer";
|
||||
if (item.endsWith(".clt") || item.endsWith(".json")) {
|
||||
/* if (item.endsWith(".clt") || item.endsWith(".json")) {
|
||||
sourceType = "tileset";
|
||||
} else if (item.endsWith(".pak")) {
|
||||
sourceType = "Terrain";
|
||||
sourceType = "terrain";
|
||||
} else if (item.endsWith(".kml") || item.endsWith(".kmz")) {
|
||||
sourceType = "kml";
|
||||
} else if (item.endsWith(".shp")) {
|
||||
@ -86,7 +86,7 @@ export const useRightOperate = () => {
|
||||
sourceType = "shp";
|
||||
} else if (item.endsWith(".csv")) {
|
||||
sourceType = "csv";
|
||||
}
|
||||
}*/
|
||||
// 获取最后一个点的位置
|
||||
const lastDotIndex = filePaths[0].lastIndexOf('.');
|
||||
|
||||
@ -135,6 +135,7 @@ export const useRightOperate = () => {
|
||||
|
||||
let selectedNode = window.treeObj.getNodeByParam('id', parentId)
|
||||
//
|
||||
console.log("添加到树上")
|
||||
cusAddNodes(window.treeObj, selectedNode, [res.data], true)
|
||||
})
|
||||
}
|
||||
|
||||
@ -18,16 +18,18 @@
|
||||
<el-icon :size="20" @click="stopCallBack('stop')">
|
||||
<RefreshLeft/>
|
||||
</el-icon>
|
||||
<!--:before-show="handleBeforeShow"-->
|
||||
<el-popover
|
||||
ref="multiplierPopover"
|
||||
placement="top"
|
||||
:width="92"
|
||||
trigger="click"
|
||||
trigger="manual"
|
||||
:teleported="false"
|
||||
v-model:visible="isPopoverShow"
|
||||
popper-style="background: transparent !important;color:#fff;padding:0;min-width:50px"
|
||||
>
|
||||
<template #reference>
|
||||
<span class="">{{ TSOBJ._Store._multiplier }}×</span>
|
||||
<span class="" @click="handleReferenceClick">{{ TSOBJ._Store._multiplier }}×</span>
|
||||
</template>
|
||||
<div class="multiplierBox">
|
||||
<span v-for="item in multipliers"
|
||||
@ -89,7 +91,7 @@ import Grid from "./components/grid.vue"
|
||||
import TimeScale from "./components/timeScale.vue"
|
||||
import Chart from "./components/chart.vue"
|
||||
import {ref, onBeforeUnmount, getCurrentInstance} from "vue"
|
||||
import {ElPopover} from 'element-plus'; // 确保导入ElPopover(按需导入时)
|
||||
import {ElMessage, ElPopover} from 'element-plus'; // 确保导入ElPopover(按需导入时)
|
||||
// import {dragElement} from "./util/drag.js";
|
||||
import dragLeftRight from './util/dragLeftRight.js';
|
||||
|
||||
@ -103,7 +105,10 @@ if (instance) {
|
||||
}
|
||||
// 注册拖拽指令
|
||||
// 1. 创建ref引用,绑定到el-popover组件
|
||||
const multiplierPopover = ref<InstanceType<typeof ElPopover> | null>(null);
|
||||
// const multiplierPopover = ref<InstanceType<typeof ElPopover> | null>(null);
|
||||
const multiplierPopover = ref(null);
|
||||
// 控制 popover 显示/隐藏的核心变量(替代实例方法)
|
||||
const isPopoverShow = ref(false);
|
||||
let multipliers = [16, 8, 4, 2, 1, 0.5, 0.25]
|
||||
let currentStamp = ref(window['tsObj']._Store._startTimestamp)
|
||||
let maxLevel = ref(24)
|
||||
@ -148,6 +153,21 @@ let handleMultiplierChange = (multiplier) => {
|
||||
props.TSOBJ._Store._multiplier = multiplier
|
||||
multiplierPopover.value?.hide();
|
||||
}
|
||||
|
||||
const handleReferenceClick = async () => {
|
||||
// 执行校验逻辑(支持同步/异步)
|
||||
const canShow = window['tsObj']._Clock._status !== 'play';
|
||||
console.log(multiplierPopover.value)
|
||||
if (canShow) {
|
||||
// 校验通过:手动显示 popover
|
||||
isPopoverShow.value = true; // 校验通过:显示
|
||||
} else {
|
||||
// 校验不通过:提示或不操作
|
||||
ElMessage.warning("态势推演中,暂停或停止后再试");
|
||||
// 可选:如果之前显示了,手动隐藏
|
||||
isPopoverShow.value = false; // 校验通过:显示
|
||||
}
|
||||
};
|
||||
let formatTime = (timeStamp) => {
|
||||
return props.TSOBJ.parseTime(timeStamp)
|
||||
}
|
||||
@ -337,7 +357,10 @@ const handleDrag = (newLeft: number) => {
|
||||
};
|
||||
let add = (num) => {
|
||||
// 大格12个取值,小格间距3个取值,level,8-1
|
||||
|
||||
if (window['tsObj']._Clock._status == 'play') {
|
||||
ElMessage({message: "态势推演中,暂停或停止后再试"})
|
||||
return;
|
||||
}
|
||||
let res = level.value + num
|
||||
if (res <= maxLevel.value && res >= minLevel.value) {
|
||||
level.value += num
|
||||
@ -352,6 +375,7 @@ let add = (num) => {
|
||||
onBeforeUnmount(() => {
|
||||
// props.TSOBJ._Clock.stopAnimation()
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@ -486,7 +510,7 @@ onBeforeUnmount(() => {
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
border-radius: 1em;
|
||||
background-color: rgb(0 255 255 / 100%);
|
||||
background-color: rgba(0, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel">
|
||||
<div class="treeOrList" :style="currentTypeId!=''?'height: calc(100% - 300px);':''">
|
||||
<div class="treeOrList custom_scroll_bar_ts" :style="currentTypeId!=''?'height: calc(100% - 300px);':''">
|
||||
<template v-if="dataType=='tree'">
|
||||
<el-tree
|
||||
:data="treeData"
|
||||
@ -44,7 +44,7 @@
|
||||
</template>
|
||||
|
||||
</div>
|
||||
<div class="list" v-if="currentTypeId!=''">
|
||||
<div class="list custom_scroll_bar_ts" v-if="currentTypeId!=''">
|
||||
<div v-for="item in elementList" class="itemBox" @click="addMarker(item)">
|
||||
<div class="imgbg">
|
||||
<img :src="service + (item.posterDataUrl||item.militaryDataUrl)"/>
|
||||
@ -72,6 +72,7 @@ import {GraphApi} from "../../api/graphLabel";
|
||||
|
||||
import {addMapSource} from "./entity";
|
||||
import {useTreeNode} from "../components/tree/hooks/treeNode";
|
||||
import {ElMessage} from "element-plus";
|
||||
|
||||
const {getSelectedNodes} = useTreeNode()
|
||||
const service = ref(localStorage.getItem('ip'))
|
||||
@ -185,6 +186,10 @@ let getGraphTypeList = async () => {
|
||||
}
|
||||
// 添加标绘
|
||||
let addMarker = (item) => {
|
||||
if (window['tsObj']._Clock._status == 'play') {
|
||||
ElMessage({message: "态势推演中,暂停或停止后再试"})
|
||||
return;
|
||||
}
|
||||
let nodes = getSelectedNodes(window['treeObj'])
|
||||
console.log("绘制", item)
|
||||
console.log("获取选中的节点", nodes)
|
||||
|
||||
@ -42,6 +42,7 @@ export function initMapData(type, data, cb: any = null) {
|
||||
case 'terrain':
|
||||
data.host = baseURL
|
||||
entityObject = new YJ.Obj.Terrain(window['earth_ts'], data)
|
||||
cb && cb(entityObject)
|
||||
break
|
||||
case 'tileset':
|
||||
data.host = baseURL
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
</el-form>
|
||||
<div class="optionbtn">
|
||||
<el-button @click="addEvent">确定</el-button>
|
||||
<el-button @click="isShowPup=false">取消</el-button>
|
||||
<el-button @click="()=>{isShowPup=false,reset()}">取消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -150,7 +150,7 @@ const defaultProps = {
|
||||
}
|
||||
const handleNodeClick = (data: Tree, node, TreeNode, event) => {
|
||||
console.log(data)
|
||||
reset()
|
||||
reset(true)
|
||||
currentKey.value = data.id; // data.id 为节点的唯一 key(需与 tree 的 node-key 对应)
|
||||
form.name = data.name + '-' + zNode.value.sourceName
|
||||
}
|
||||
@ -165,17 +165,32 @@ const addEvent = () => {
|
||||
let startTime = form.datetime.getTime()
|
||||
let obj: any = {}
|
||||
let duration_S = (hour.value * 3600 + minute.value * 60 + second.value) * 1
|
||||
|
||||
// 数据是否合法有效
|
||||
let isRight = true
|
||||
let errorFields = []//数据错误的字段
|
||||
let minPositionLength = 2
|
||||
switch (currentKey.value) {
|
||||
case 'flicker':
|
||||
|
||||
if (duration_S == 0) {
|
||||
isRight = false
|
||||
errorFields.push("持续时间")
|
||||
}
|
||||
if (obj.numbers == 0) {
|
||||
isRight = false
|
||||
errorFields.push("闪烁次数")
|
||||
}
|
||||
if (isRight) {
|
||||
obj.numbers = numbers.value
|
||||
obj.times = Number((duration_S / obj.numbers).toFixed(2))
|
||||
}
|
||||
break
|
||||
case 'move':
|
||||
let detail = typeof zNode.value.detail == 'string' ? JSON.parse(zNode.value.detail) : JSON.parse(JSON.stringify(zNode.value.detail))
|
||||
let position = [...positions.value]
|
||||
if (isContainModelPosition.value) {
|
||||
position.unshift(detail.positions || detail.position || detail.center)
|
||||
minPositionLength = 3
|
||||
}
|
||||
positions.value = position;
|
||||
obj = {
|
||||
@ -190,13 +205,27 @@ const addEvent = () => {
|
||||
},
|
||||
isContainModelPosition: isContainModelPosition.value
|
||||
}
|
||||
if (!obj.line['positions'] || (obj.line['positions'] && obj.line['positions'].length < minPositionLength)) {
|
||||
// ElMessage({message: "机动事件的路径不合法", type: "warning"})
|
||||
isRight = false
|
||||
errorFields.push("路径点位")
|
||||
}
|
||||
if (duration_S == 0) {
|
||||
isRight = false
|
||||
errorFields.push("持续时间")
|
||||
}
|
||||
break
|
||||
}
|
||||
// 当事件为机动事件且轨迹点的长度为0时,终止
|
||||
if (obj['positions'] && obj['positions'].length == 0) {
|
||||
ElMessage({message: "机动事件的路径不合法", type: "warning"})
|
||||
return
|
||||
|
||||
|
||||
if (!isRight) {
|
||||
// ElMessage({message: "机动事件的路径不合法", type: "warning"})
|
||||
let eventType = form.name.split("-")[0] + "事件"
|
||||
|
||||
ElMessage({message: eventType + errorFields.join("、") + "数据不合法", type: "warning"})
|
||||
return;
|
||||
}
|
||||
// console.log("数据校验通过")
|
||||
|
||||
let dbParams = {
|
||||
id: new YJ.Tools().randomString(),
|
||||
@ -237,7 +266,7 @@ const addEvent = () => {
|
||||
})
|
||||
console.log(dbParams)
|
||||
}
|
||||
const reset = () => {
|
||||
const reset = (changeEventType = false) => {
|
||||
hour.value = 0
|
||||
minute.value = 0
|
||||
second.value = 0
|
||||
@ -248,7 +277,27 @@ const reset = () => {
|
||||
|
||||
form['datetime'] = new Date(window['tsObj']._Store._currentTimestamp)
|
||||
currentKey.value = "flicker"
|
||||
console.log("changeEventType", changeEventType)
|
||||
if (!changeEventType)
|
||||
eventTree.value = [
|
||||
{
|
||||
id: "normal",
|
||||
label: '常用推演事件',
|
||||
children: [
|
||||
{
|
||||
id: "display",
|
||||
label: '显示事件',
|
||||
name: '显示'
|
||||
},
|
||||
{
|
||||
id: "hide",
|
||||
label: '隐藏事件',
|
||||
name: '隐藏'
|
||||
},
|
||||
|
||||
],
|
||||
}
|
||||
]
|
||||
}
|
||||
eventBus.on('openAddEvent', (data, cb, type) => {
|
||||
if (['point', "model", "military"].includes(data.sourceType))
|
||||
@ -262,8 +311,8 @@ eventBus.on('openAddEvent', (data, cb, type) => {
|
||||
label: '机动事件',
|
||||
name: '机动'
|
||||
},]
|
||||
console.log("openAddEvent", data)
|
||||
console.log("openAddEvent", eventTree.value[0].children[0])
|
||||
// console.log("openAddEvent", data)
|
||||
// console.log("openAddEvent", eventTree.value[0].children[0])
|
||||
// selectCallback = cb
|
||||
// addType.value = type
|
||||
zNode.value = data
|
||||
|
||||
Reference in New Issue
Block a user