Merge branch 'refs/heads/main' into dev_20260130_RemoveRedis

This commit is contained in:
longguancheng 2026-02-05 11:44:43 +08:00
commit 75aeed56be
33 changed files with 843205 additions and 154 deletions

View File

@ -33,7 +33,7 @@ public class SEApplication {
System.setProperty("jna.library.path", combinedPath); System.setProperty("jna.library.path", combinedPath);
// 如果 OpenCV 使用的是标准 JNI (System.loadLibrary)可能还需要设置 java.library.path // 如果 OpenCV 使用的是标准 JNI (System.loadLibrary)可能还需要设置 java.library.path
System.setProperty("java.library.path", opencvPath); System.setProperty("opencv.library.path", opencvPath);
SpringApplication.run(SEApplication.class, args); SpringApplication.run(SEApplication.class, args);
} }
} }

View File

@ -12,7 +12,7 @@ import lombok.Getter;
public enum JmJobModeEnum implements CodeEnum<Integer> { public enum JmJobModeEnum implements CodeEnum<Integer> {
QUICK(1, "快速模式"), QUICK(1, "快速模式"),
CRUISE(2, "巡航模式"),
CREATE(3, "航线创建") CREATE(3, "航线创建")
; ;

View File

@ -17,6 +17,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.File;
import java.net.ConnectException; import java.net.ConnectException;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -118,7 +119,22 @@ public class JmImageController {
} }
static { static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME); //System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//加载 OpenCV (强制使用绝对路径加载解决 UnsatisfiedLinkError)
String openCvDll = System.getProperty("opencv.library.path") + File.separator + Core.NATIVE_LIBRARY_NAME + ".dll";
try {
File dllFile = new File(openCvDll);
if (dllFile.exists()) {
// 注意必须使用 System.load() 加载绝对路径
System.load(dllFile.getAbsolutePath());
System.out.println("SUCCESS: OpenCV loaded from -> " + dllFile.getAbsolutePath());
} else {
System.err.println("ERROR: OpenCV DLL not found at -> " + openCvDll);
}
} catch (Throwable e) {
System.err.println("CRITICAL: Failed to load OpenCV: " + e.getMessage());
e.printStackTrace();
}
} }
/*@IgnoreAuth /*@IgnoreAuth

View File

@ -60,7 +60,7 @@ public class JmUavStatusDTO {
private String sarIp; private String sarIp;
/** sar 图片亮度 */ /** sar 图片亮度 */
private Integer sarImageLight; private volatile Integer sarImageLight;
/** /**
* 获取sar当前状态 * 获取sar当前状态

View File

@ -19,6 +19,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.Optional; import java.util.Optional;
import static com.zhangy.skyeye.jm.consts.JmJobModeEnum.CRUISE;
/** /**
* 控制指令 * 控制指令
*/ */
@ -54,7 +56,11 @@ public class SarControlServiceImpl implements ISarControlService {
param.setMoto(sar.getMoto()); param.setMoto(sar.getMoto());
param.setImageBit(sar.getImageBit()); param.setImageBit(sar.getImageBit());
param.setResolution(sar.getResolution()); param.setResolution(sar.getResolution());
param.setControlType(SarControlTypeEnum.AUTO); if (job.getMode().equals(CRUISE.getCode())) {
param.setControlType(SarControlTypeEnum.TURNON);
} else {
param.setControlType(SarControlTypeEnum.AUTO);
}
double startAltitude = uav.getStartAltitude(); double startAltitude = uav.getStartAltitude();
// 高度加上起始高度 // 高度加上起始高度
Optional.ofNullable(param.getAirlineList()) Optional.ofNullable(param.getAirlineList())

View File

@ -1,11 +1,11 @@
const prodPlugins = [] const prodPlugins = []
if (process.env.NODE_ENV === 'production') { if (process.env.NODE_ENV === 'production') {
prodPlugins.push('transform-remove-console') // prodPlugins.push('transform-remove-console')
} }
module.exports = { module.exports = {
presets: [[ presets: [[
"@babel/preset-env", "@babel/preset-env",
{ targets: "> 1% in AU and not dead", shippedProposals: true }, { targets: "> 1% in AU and not dead", shippedProposals: true },
],'@vue/cli-plugin-babel/preset'], ], '@vue/cli-plugin-babel/preset'],
plugins:[...prodPlugins] plugins: [...prodPlugins]
} }

View File

@ -19,6 +19,7 @@
"dependencies": { "dependencies": {
"@turf/turf": "^7.1.0", "@turf/turf": "^7.1.0",
"axios": "^0.21.1", "axios": "^0.21.1",
"babel-plugin-transform-remove-console": "^6.9.4",
"core-js": "^3.6.4", "core-js": "^3.6.4",
"element-ui": "^2.15.6", "element-ui": "^2.15.6",
"js-cookie": "^2.2.1", "js-cookie": "^2.2.1",

View File

@ -0,0 +1,10 @@
<meta charset="utf-8">
<title>dt-chart demo</title>
<script src="./dt-chart.umd.js"></script>
<link rel="stylesheet" href="./dt-chart.css">
<script>
console.log(dt-chart)
</script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"dt-chart.umd.min.js","sources":["webpack://dt-chart/dt-chart.umd.min.js"],"mappings":"AAAA;AA+HA;AAAA;AAqEA;AAAA;AA+HA;AAAA;AA0FA;AAAA;AAsNA;AAAA;AAuEA;AAAA;AAiLA;AAAA;AA0HA;AAAA;AAkGA;AAAA;AA4NA;AAAA;AAyFA;AAAA;AAqFA;AAAA;AAyHA;AAAA;AAqEA;AAAA;AAyEA;AAAA;AAiGA;AAAA;AAqQA;AAAA;AAoMA;AAAA;AA8IA;AAAA;AA8HA;AAAA;AAkYA;AAAA;AA2JA;AAAA;AAqMA;AAAA;AA6LA;AAAA;AA8JA;AAAA;AAuMA;AAAA;AA4IA;AAAA;AA8FA;AAAA;AAmKA;AAAA;AAmHA;AAAA;AAwHA;AAAA;AAgFA;AAAA;AAqFA;AAAA;AAyNA;AAAA;AA0IA;AAAA;AAkHA;AAAA;AA4JA;AAAA;AAiRA;AAAA;AAiJA;AAAA;AAsmBA;AAAA;AAiFA;AAAA;AAyiBA;AAAA;AA4IA;AAAA;AAkHA;AAAA;AAiZA;AAAA;AA0HA;AAAA;AA4HA;AAAA;AAiGA;AAAA;AA6OA;AAAA;AA8JA;AAAA;AA8JA;AAAA;AAuIA;AAAA;AA4GA;AAAA;AAuIA;AAAA;AAqJA;AAAA;AA8HA;AAAA;AAkJA;AAAA;AAmPA;AAAA;AAgIA;AAAA;AA+FA;AAAA;AAiGA;AAAA;AAqLA;AAAA;AA4HA;AAAA;AAiLA;AAAA;AA2EA;AAAA;AAkGA;AAAA;AAiqBA;AAAA;AA6KA;AAAA;AAgFA;AAAA;AAoFA;AAAA;AA4MA;AAAA;AA2GA;AAAA;AA4SA;AAAA;AAsbA;AAAA;AAmFA;AAAA;AAmNA;AAAA;AAyIA;AAAA;AAsKA;AAAA;AAqHA;AAAA;AAyGA;AAAA;AAmMA;AAAA;AA0IA;AAAA;AAwHA;AAAA;AA2JA;AAAA;AAgIA;AAAA;AA2MA;AAAA;AAoJA;AAAA;;AAyHA;AA8PA;AAAA;AA4NA;AAAA;AAmHA;AAAA;AAoGA;AAAA;AAkJA;AAAA;AA0FA;AAAA;AA2QA;AAAA;AA+LA;AAAA;AAylBA;AAAA;AA8JA;AAAA;AA4MA;AAAA;AA6UA;AAAA;AAoFA;AAAA;AA8FA;AAAA;AA4FA;AAAA;AAsEA;AAAA;AA2FA;AAAA;;;;;;;AAqJA;AA++DA;AAAA;AAqFA;AAAA;AA4EA;AAAA;AA4GA;AAAA;AA0HA;AAAA;;;;;AAgEA;;AA++KA;AAwJA;AAAA;AAyIA;AAAA;AAoMA;AAAA;AAwIA;AAAA;AAsGA;AAAA;AA0MA;AAAA;AAuLA;AAAA;AAoOA;AAAA;AAyEA;AAAA;AA4GA;AAAA;AAmPA;AAAA;AA4GA;AAAA;AAmKA;AAAA;AA4SA;AAAA;AAmLA;AAAA;AA8LA;AAAA;AA2KA;AAAA;AA4FA;AAAA;AA6FA;AAAA;AAqFA;AAAA;AAmFA;AAAA;AA8EA;AAAA;AA2KA;AAAA;AA+HA;AAAA;;;;;;;;;;;;;;AAkYA;;;;;;;;;AA6vLA;AAq80KA;AAAA;AA8IA;AAAA","sourceRoot":""}

View File

@ -0,0 +1,10 @@
<meta charset="utf-8">
<title>dt-chart demo</title>
<script src="./dt-chart.umd.js"></script>
<link rel="stylesheet" href="./dt-chart.css">
<script>
console.log(dt-chart)
</script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"dt-chart.umd.min.js","sources":["webpack://dt-chart/dt-chart.umd.min.js"],"mappings":"AAAA;AA+HA;AAAA;AAqEA;AAAA;AA+HA;AAAA;AA0FA;AAAA;AAsNA;AAAA;AAuEA;AAAA;AAiLA;AAAA;AA0HA;AAAA;AAkGA;AAAA;AA4NA;AAAA;AAyFA;AAAA;AAqFA;AAAA;AAyHA;AAAA;AAqEA;AAAA;AAyEA;AAAA;AAiGA;AAAA;AAqQA;AAAA;AAoMA;AAAA;AA8IA;AAAA;AA8HA;AAAA;AAkYA;AAAA;AA2JA;AAAA;AAqMA;AAAA;AA6LA;AAAA;AA8JA;AAAA;AAuMA;AAAA;AA4IA;AAAA;AA8FA;AAAA;AAmKA;AAAA;AAmHA;AAAA;AAwHA;AAAA;AAgFA;AAAA;AAqFA;AAAA;AAyNA;AAAA;AA0IA;AAAA;AAkHA;AAAA;AA4JA;AAAA;AAiRA;AAAA;AAiJA;AAAA;AAsmBA;AAAA;AAiFA;AAAA;AAyiBA;AAAA;AA4IA;AAAA;AAkHA;AAAA;AAiZA;AAAA;AA0HA;AAAA;AA4HA;AAAA;AAiGA;AAAA;AA6OA;AAAA;AA8JA;AAAA;AA8JA;AAAA;AAuIA;AAAA;AA4GA;AAAA;AAuIA;AAAA;AAqJA;AAAA;AA8HA;AAAA;AAkJA;AAAA;AAmPA;AAAA;AAgIA;AAAA;AA+FA;AAAA;AAiGA;AAAA;AAqLA;AAAA;AA4HA;AAAA;AAiLA;AAAA;AA2EA;AAAA;AAkGA;AAAA;AAiqBA;AAAA;AA6KA;AAAA;AAgFA;AAAA;AAoFA;AAAA;AA4MA;AAAA;AA2GA;AAAA;AA4SA;AAAA;AAsbA;AAAA;AAmFA;AAAA;AAmNA;AAAA;AAyIA;AAAA;AAsKA;AAAA;AAqHA;AAAA;AAyGA;AAAA;AAmMA;AAAA;AA0IA;AAAA;AAwHA;AAAA;AA2JA;AAAA;AAgIA;AAAA;AA2MA;AAAA;AAoJA;AAAA;;AAyHA;AA8PA;AAAA;AA4NA;AAAA;AAmHA;AAAA;AAoGA;AAAA;AAkJA;AAAA;AA0FA;AAAA;AA2QA;AAAA;AA+LA;AAAA;AAylBA;AAAA;AA8JA;AAAA;AA4MA;AAAA;AA6UA;AAAA;AAoFA;AAAA;AA8FA;AAAA;AA4FA;AAAA;AAsEA;AAAA;AA2FA;AAAA;;;;;;;AAqJA;AA++DA;AAAA;AAqFA;AAAA;AA4EA;AAAA;AA4GA;AAAA;AA0HA;AAAA;;;;;AAgEA;;AA++KA;AAwJA;AAAA;AAyIA;AAAA;AAoMA;AAAA;AAwIA;AAAA;AAsGA;AAAA;AA0MA;AAAA;AAuLA;AAAA;AAoOA;AAAA;AAyEA;AAAA;AA4GA;AAAA;AAmPA;AAAA;AA4GA;AAAA;AAmKA;AAAA;AA4SA;AAAA;AAmLA;AAAA;AA8LA;AAAA;AA2KA;AAAA;AA4FA;AAAA;AA6FA;AAAA;AAqFA;AAAA;AAmFA;AAAA;AA8EA;AAAA;AA2KA;AAAA;AA+HA;AAAA;;;;;;;;;;;;;;AAkYA;;;;;;;;;AA6vLA;AAq80KA;AAAA;AA8IA;AAAA","sourceRoot":""}

View File

@ -0,0 +1,48 @@
{
"name": "dt-chart",
"version": "0.1.0",
"private": true,
"main": "dist/dt-chart.umd.min.js",
"module": "./packages/index.js",
"exports": {
"./package.json": "./package.json",
".": {
"require": "dist/dt-chart.umd.min.js",
"import": "./packages/index.js"
}
},
"author": {
"name": "Farley"
},
"scripts": {
"serve": "vue-cli-service serve",
"docs": "vuepress dev docs",
"docs:build": "vuepress build docs",
"build": "vue-cli-service build --target lib packages/index.js & vuepress build docs"
},
"dependencies": {
"core-js": "^3.6.5",
"echarts": "^5.1.2",
"echarts-gl": "^2.0.8",
"echarts-liquidfill": "^3.1.0",
"install": "^0.13.0",
"moment": "^2.29.1",
"nanoid": "^3.1.23",
"npm": "^7.20.6",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vuepress": "^1.8.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.5.0",
"@vue/cli-service": "^4.5.0",
"sass": "^1.29.0",
"sass-loader": "^8.0.2",
"vue-template-compiler": "^2.6.11"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

View File

@ -0,0 +1,48 @@
{
"name": "dt-chart",
"version": "0.1.0",
"private": true,
"main": "dist/dt-chart.umd.min.js",
"module": "./packages/index.js",
"exports": {
"./package.json": "./package.json",
".": {
"require": "dist/dt-chart.umd.min.js",
"import": "./packages/index.js"
}
},
"author": {
"name": "Farley"
},
"scripts": {
"serve": "vue-cli-service serve",
"docs": "vuepress dev docs",
"docs:build": "vuepress build docs",
"build": "vue-cli-service build --target lib packages/index.js & vuepress build docs"
},
"dependencies": {
"core-js": "^3.6.5",
"echarts": "^5.1.2",
"echarts-gl": "^2.0.8",
"echarts-liquidfill": "^3.1.0",
"install": "^0.13.0",
"moment": "^2.29.1",
"nanoid": "^3.1.23",
"npm": "^7.20.6",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vuepress": "^1.8.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.5.0",
"@vue/cli-service": "^4.5.0",
"sass": "^1.29.0",
"sass-loader": "^8.0.2",
"vue-template-compiler": "^2.6.11"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

View File

@ -83,3 +83,7 @@ export const pictureAiCheck = params =>
// 开机 // 开机
export const changePayloadRadarOpenState = params => export const changePayloadRadarOpenState = params =>
req('post', '/sar/control/send', params) req('post', '/sar/control/send', params)
export const changeJobStatus = params =>
req('post', '/sar/job/status/', params)

View File

@ -83,7 +83,7 @@
:data="colorStick.colors" :data="colorStick.colors"
></color-stick> ></color-stick>
<!-- 开关 --> <!-- 开关 -->
<dt-loading :visible.sync="loading"></dt-loading> <!-- <dt-loading :visible.sync="loading"></dt-loading> -->
</div> </div>
</template> </template>

View File

@ -134,7 +134,7 @@
@modify="handleCommand('logout')" @modify="handleCommand('logout')"
></change-password> ></change-password>
<dt-loading :visible.sync="loading"></dt-loading> <!-- <dt-loading :visible.sync="loading"></dt-loading> -->
</div> </div>
</template> </template>

View File

@ -35,9 +35,10 @@
box-sizing: border-box; box-sizing: border-box;
border-radius: 6px; border-radius: 6px;
background-color: $--color-black-3-alpha; background-color: $--color-black-3-alpha;
cursor: pointer;
&:hover { &:hover {
background-color: $--color-black-3; background-color: rgba(23, 69, 46, .4);
} }
>p { >p {

View File

@ -29,11 +29,12 @@
v-for="(item, index) in taskList.data" v-for="(item, index) in taskList.data"
:key="item.id" :key="item.id"
class="task-item" class="task-item"
@click="openTaskLineDetail(item)"
> >
<div class="top-part"> <div class="top-part">
<!-- <div class="task-progress-bar" :style="'width: ' + item.uavCompletion +'%;'"></div>--> <!-- <div class="task-progress-bar" :style="'width: ' + item.uavCompletion +'%;'"></div>-->
<div class="top-part__left"> <div class="top-part__left">
<div class="execute-info" @click="openTaskLineDetail(item)"> <div class="execute-info">
<span <span
class="execute-type-icon" class="execute-type-icon"
:class="'execute-state-' + item.status" :class="'execute-state-' + item.status"

View File

@ -1128,8 +1128,15 @@ export default {
// 测试 // 测试
// this.addUavToScene(item) // this.addUavToScene(item)
}) })
this.detailUav.id = data.length ? data[0].id : 1 if (data.length) {
this.detailUav.visible = data.length ? true : false this.detailUav.chart.data[0].data = []
this.detailUav.chart.data[1].data = []
this.detailUav.chart.data[2].data = []
this.detailUav.chart.data[3].data = []
this.detailUav.id = data.length ? data[0].id : 1
this.detailUav.visible = data.length ? true : false
}
taskListResource = data taskListResource = data
this.taskList.data = list this.taskList.data = list
if (this.taskList.data.length) { if (this.taskList.data.length) {
@ -1322,51 +1329,59 @@ export default {
} }
}, },
addJobLine(info, isFinish) { addJobLine(info, isFinish) {
console.log('任务信息', info) // 参数和数据校验
let load = renderTaskInfo[`${info.id}-${info.uavList[0].uavId}`] console.log(info, info.uavList, 777777777777);
if (!info || !Array.isArray(info.uavList) || info.uavList.length === 0) return;
const uav = info.uavList[0];
if (!Array.isArray(uav.airlineList) || uav.airlineList.length === 0) return;
const key = `${info.id}-${uav.uavId}`;
let load = renderTaskInfo[key];
console.log(load, key, 3333333);
if (load) { if (load) {
return return;
} }
let routes = [] let routes = [];
let startHeight = 0 let startHeight = 0;
let endHeight = 0 let endHeight = 0;
info.uavList[0].airlineList.forEach((item, index) => { uav.airlineList.forEach((item, index) => {
if (index === 0) { if (index === 0) {
startHeight = item.flightStartHeight startHeight = item.startHeight;
} }
if (index === info.uavList[0].airlineList.length - 1) { if (index === uav.airlineList.length - 1) {
endHeight = item.flightEndHeight endHeight = item.endHeight;
} }
routes.push([item.flightStartLon, item.flightStartLat, item.flightStartHeight]) routes.push([item.startLon, item.startLat, item.startHeight]);
routes.push([item.flightEndLon, item.flightEndLat, item.flightEndHeight]) routes.push([item.endLon, item.endLat, item.endHeight]);
}) });
routes.unshift([info.uavList[0].startLon, info.uavList[0].startLat, startHeight]) routes.unshift([uav.startLon, uav.startLat, startHeight]);
routes.push([info.uavList[0].endLon, info.uavList[0].endLat, endHeight]) routes.push([uav.endLon, uav.endLat, endHeight]);
let positions = [] let positions = [];
let minLon, maxLon, minLat, maxLat let minLon, maxLon, minLat, maxLat;
routes.forEach((item, index) => { routes.forEach((item, index) => {
if (index === 0) { if (index === 0) {
minLon = item[0] minLon = item[0];
maxLon = item[0] maxLon = item[0];
minLat = item[1] minLat = item[1];
maxLat = item[1] maxLat = item[1];
} else { } else {
minLon = Math.min(minLon, item[0]) minLon = Math.min(minLon, item[0]);
maxLon = Math.max(maxLon, item[0]) maxLon = Math.max(maxLon, item[0]);
minLat = Math.min(minLat, item[1]) minLat = Math.min(minLat, item[1]);
maxLat = Math.max(maxLat, item[1]) maxLat = Math.max(maxLat, item[1]);
} }
positions.push(DT.Cesium.Cartesian3.fromDegrees(item[0], item[1], item[2])) positions.push(DT.Cesium.Cartesian3.fromDegrees(item[0], item[1], item[2]));
}) });
let currentIndex = 0 if (positions.length === 0) return;
let currentPosition = positions[0].clone() let currentIndex = 0;
let currentPosition = positions[0].clone();
if (isFinish) { if (isFinish) {
currentIndex = positions.length - 1 currentIndex = positions.length - 1;
currentPosition = positions[currentIndex].clone() currentPosition = positions[currentIndex].clone();
} }
let pathEntity = new DT.DirectionPath({ let pathEntity = new DT.DirectionPath({
id: `${info.id}-${info.uavList[0].uavId}~baseline`, id: `${key}~baseline`,
positions: positions, positions: positions,
dataFit: false, dataFit: false,
currentPosition: currentPosition, currentPosition: currentPosition,
@ -1394,19 +1409,18 @@ export default {
scale: 0.5, scale: 0.5,
show: true, show: true,
style: DT.Cesium.LabelStyle.FILL_AND_OUTLINE, style: DT.Cesium.LabelStyle.FILL_AND_OUTLINE,
text: info.uavList[0].uavName, text: uav.uavName,
verticalOrigin: DT.Cesium.VerticalOrigin.CENTER, verticalOrigin: DT.Cesium.VerticalOrigin.CENTER,
disableDepthTestDistance: 10000 disableDepthTestDistance: 10000
}, },
billboardConfig: { billboardConfig: {
image: process.env.BASE_URL + 'static/img/icon_wrj.png', image: process.env.BASE_URL + 'static/img/icon_wrj.png',
disableDepthTestDistance: 10000 disableDepthTestDistance: 10000
// enableRotation: true
}, },
enableRepeatAdjust: false, enableRepeatAdjust: false,
}) });
let pathEntity2 = new DT.DirectionPath({ let pathEntity2 = new DT.DirectionPath({
id: `${info.id}-${info.uavList[0].uavId}~baseline`, id: `${key}~baseline-radar`,
positions: positions, positions: positions,
dataFit: false, dataFit: false,
currentPosition: currentPosition, currentPosition: currentPosition,
@ -1434,53 +1448,48 @@ export default {
scale: 0.5, scale: 0.5,
show: true, show: true,
style: DT.Cesium.LabelStyle.FILL_AND_OUTLINE, style: DT.Cesium.LabelStyle.FILL_AND_OUTLINE,
text: info.uavList[0].uavName, text: uav.uavName,
verticalOrigin: DT.Cesium.VerticalOrigin.CENTER, verticalOrigin: DT.Cesium.VerticalOrigin.CENTER,
disableDepthTestDistance: 10000 disableDepthTestDistance: 10000
}, },
billboardConfig: { billboardConfig: {
image: process.env.BASE_URL + 'static/img/icon_wrj.png', image: process.env.BASE_URL + 'static/img/icon_wrj.png',
disableDepthTestDistance: 10000 disableDepthTestDistance: 10000
// enableRotation: true
}, },
enableRepeatAdjust: false, enableRepeatAdjust: false,
}) });
console.log('调用添加方法了吗') lodLayer.add(pathEntity);
lodLayer.add(pathEntity) radarLayer.add(pathEntity2);
radarLayer.add(pathEntity2) renderTaskInfo[key] = {
// 添加图片
renderTaskInfo[`${info.id}-${info.uavList[0].uavId}`] = {
entity: pathEntity, entity: pathEntity,
entity2: pathEntity2, entity2: pathEntity2,
picture: {} picture: {}
} };
info.uavList.forEach(uavItem => {
info.uavList.forEach(uav => { if (uavItem.payloadList && Array.isArray(uavItem.payloadList)) {
uav.payloadList.forEach(payload => { uavItem.payloadList.forEach(payload => {
payload.imageList.forEach(image => { if (payload.imageList && Array.isArray(payload.imageList)) {
this.addMarkPicture2(image) payload.imageList.forEach(image => {
}) this.addMarkPicture2(image);
}) });
}) }
});
}
});
// 适当扩大视角范围 // 适当扩大视角范围
let lonDiff = (maxLon - minLon) / 2 let lonDiff = (maxLon - minLon) / 2;
let latDiff = (maxLat - minLat) / 2 let latDiff = (maxLat - minLat) / 2;
minLon -= lonDiff minLon -= lonDiff;
maxLon += lonDiff maxLon += lonDiff;
minLat -= latDiff minLat -= latDiff;
maxLat += latDiff maxLat += latDiff;
let boundingPosition = [ let boundingPosition = [
DT.Cesium.Cartesian3.fromDegrees(minLon, minLat), DT.Cesium.Cartesian3.fromDegrees(minLon, minLat),
DT.Cesium.Cartesian3.fromDegrees(minLon, maxLat),
DT.Cesium.Cartesian3.fromDegrees(maxLon, minLat), DT.Cesium.Cartesian3.fromDegrees(maxLon, minLat),
DT.Cesium.Cartesian3.fromDegrees(minLon, maxLat),
DT.Cesium.Cartesian3.fromDegrees(maxLon, maxLat), DT.Cesium.Cartesian3.fromDegrees(maxLon, maxLat),
] ];
// console.log('最小最大', minLon, maxLon, minLat, maxLat) viewer.cesiumViewer.camera.flyToBoundingSphere(DT.Cesium.BoundingSphere.fromPoints(boundingPosition), { duration: 0.1 });
viewer.cesiumViewer.camera.flyToBoundingSphere(DT.Cesium.BoundingSphere.fromPoints(boundingPosition), { duration: 0.1 })
}, },
removeJobLine(jobId, uavId) { removeJobLine(jobId, uavId) {
let load = renderTaskInfo[`${jobId}-${uavId}`] let load = renderTaskInfo[`${jobId}-${uavId}`]
@ -2633,7 +2642,7 @@ export default {
stompClientInstance = stompClient stompClientInstance = stompClient
}, },
handleWebsocketGmti(info) { handleWebsocketGmti(info) {
console.log('Gmti信息', info.body) console.log('Gmti信息', JSON.parse(info.body))
}, },
handleWebsocketStatus(info) { handleWebsocketStatus(info) {
console.log('SAR状态信息', info.body) console.log('SAR状态信息', info.body)
@ -2846,76 +2855,75 @@ export default {
// })); // }));
// if (this.tempAdd) return // if (this.tempAdd) return
// this.tempAdd = true // this.tempAdd = true
console.log(data, renderTaskInfo, 'tupiantupian');
let id = `${data.jobId}-${data.uavId}` let id = `${data.jobId}-${data.uavId}`
let target = renderTaskInfo[id] // let target = renderTaskInfo[id]
if (target) { // if (target) {
let cby_bg_data = [ let cby_bg_data = [
data.left1Lon, data.left1Lat, data.left1Lon, data.left1Lat,
data.left2Lon, data.left2Lat, data.left2Lon, data.left2Lat,
data.right2Lon, data.right2Lat, data.right2Lon, data.right2Lat,
data.right1Lon, data.right1Lat, data.right1Lon, data.right1Lat,
] ]
let entity = viewer.entities.add({ let entity = viewer.entities.add({
id: `${data.jobId}-${data.uavId}~${data.fileId}-picture`, id: `${data.jobId}-${data.uavId}~${data.fileId}-picture`,
name: '背景', name: '背景',
polygon: { polygon: {
// hierarchy: DT.Cesium.Cartesian3.fromDegreesArrayHeights(cby_bg_data), hierarchy: DT.Cesium.Cartesian3.fromDegreesArray(cby_bg_data),
hierarchy: DT.Cesium.Cartesian3.fromDegreesArray(cby_bg_data), perPositionHeight: true,
perPositionHeight: true, material: new DT.Cesium.ImageMaterialProperty({
material: new DT.Cesium.ImageMaterialProperty({ image: window.config.imagePath + data.relativePath,
image: window.config.imagePath + data.relativePath, }),
// image: process.env.BASE_URL + 'static/img/ttt.tif', outline: true,
// image: process.env.BASE_URL + 'static/img/pic.png', outlineColor: DT.Cesium.Color.WHITE,
}),//new Cesium.Color(0.29, 0.85, 0.89, 0.5), //Cesium.Color.PALETURQUOISE.withAlpha(0.5), outlineWidth: 2, //很多电脑当宽度>1时没用
outline: true, }
outlineColor: DT.Cesium.Color.WHITE, })
outlineWidth: 2, //很多电脑当宽度>1时没用 let markLineArr = []
} if (data.itemList) {
}) data.itemList.forEach((item) => {
let markLineArr = [] let markId = `${data.jobId}-${data.uavId}-${data.fileId}-${item.id}~mark`
if (data.itemList) { let markPosition = DT.Cesium.Cartesian3.fromDegrees(item.left1Lon, item.left1Lat, 1)
data.itemList.forEach((item) => { let markArr = [
let markId = `${data.jobId}-${data.uavId}-${data.fileId}-${item.id}~mark` item.left1Lon, item.left1Lat, 1,
let markPosition = DT.Cesium.Cartesian3.fromDegrees(item.left1Lon, item.left1Lat, 1) item.left2Lon, item.left2Lat, 1,
let markArr = [ item.right2Lon, item.right2Lat, 1,
item.left1Lon, item.left1Lat, 1, item.right1Lon, item.right1Lat, 1,
item.left2Lon, item.left2Lat, 1, item.left1Lon, item.left1Lat, 1,
item.right2Lon, item.right2Lat, 1, ]
item.right1Lon, item.right1Lat, 1, let markLine = viewer.entities.add({
item.left1Lon, item.left1Lat, 1, id: markId,
] show: false,
let markLine = viewer.entities.add({ position: markPosition,
id: markId, label: {
show: false, text: this.detectType[item.type],
position: markPosition, font: '12px sans-serif',
label: { fillColor: DT.Cesium.Color.RED,
text: this.detectType[item.type], horizontalOrigin: DT.Cesium.HorizontalOrigin.LEFT,
font: '12px sans-serif', verticalOrigin: DT.Cesium.VerticalOrigin.TOP,
fillColor: DT.Cesium.Color.RED, disableDepthTestDistance: 10000,
horizontalOrigin: DT.Cesium.HorizontalOrigin.LEFT, showBackground: false,
verticalOrigin: DT.Cesium.VerticalOrigin.TOP, backgroundColor: DT.Cesium.Color.BLACK,
disableDepthTestDistance: 10000, style: DT.Cesium.LabelStyle.FILL_AND_OUTLINE,
showBackground: false, },
backgroundColor: DT.Cesium.Color.BLACK, polyline: {
style: DT.Cesium.LabelStyle.FILL_AND_OUTLINE, positions: DT.Cesium.Cartesian3.fromDegreesArrayHeights(markArr),
}, // positions: DT.Cesium.Cartesian3.fromDegreesArray(markArr),
polyline: { width: 1,
positions: DT.Cesium.Cartesian3.fromDegreesArrayHeights(markArr), material: DT.Cesium.Color.RED,
// positions: DT.Cesium.Cartesian3.fromDegreesArray(markArr), depthFailMaterial: DT.Cesium.Color.RED,
width: 1, zIndex: 3,
material: DT.Cesium.Color.RED, }
depthFailMaterial: DT.Cesium.Color.RED,
zIndex: 3,
}
})
markLineArr.push(markLine)
}) })
} markLineArr.push(markLine)
target.picture[`${data.fileId}-picture`] = { })
pictureEntity: entity,
markArr: markLineArr
}
} }
// target.picture[`${data.fileId}-picture`] = {
// pictureEntity: entity,
// markArr: markLineArr
// }
// }
}, },
addPictureHandle() { addPictureHandle() {
console.log('双击事件执行了吗', new Date().getTime()) console.log('双击事件执行了吗', new Date().getTime())
@ -3074,6 +3082,10 @@ export default {
//#endregion //#endregion
// 打开状态和波形信息展示 // 打开状态和波形信息展示
openSarStatusDetail(data) { openSarStatusDetail(data) {
this.detailUav.chart.data[0].data = []
this.detailUav.chart.data[1].data = []
this.detailUav.chart.data[2].data = []
this.detailUav.chart.data[3].data = []
this.detailUav.id = data.id this.detailUav.id = data.id
this.detailUav.visible = true this.detailUav.visible = true
}, },

View File

@ -57,9 +57,10 @@
box-sizing: border-box; box-sizing: border-box;
border-radius: 6px; border-radius: 6px;
background-color: $--color-black-3-alpha; background-color: $--color-black-3-alpha;
cursor: pointer;
&:hover { &:hover {
background-color: $--color-black-3; background-color: rgba(23, 69, 46, .4);
} }
>p { >p {
@ -98,6 +99,14 @@
} }
} }
} }
.is-active {
width: calc(100% - 10px);
margin-left: 5px;
padding: 8px 15px 8px 10px;
background-color: rgba(23, 69, 46, .7) !important;
box-shadow: 0 0 15px 3px rgba(23, 69, 46, 0.5)
}
} }
.task-list__large { .task-list__large {

View File

@ -72,7 +72,10 @@
<div <div
v-for="(item, index) in taskList.data" v-for="(item, index) in taskList.data"
:key="item.id" :key="item.id"
class="task-item" :class="{
'task-item': true,
'is-active': detailUav.id === item.id,
}"
@click="openSarStatusDetail(item)" @click="openSarStatusDetail(item)"
> >
<div class="top-part"> <div class="top-part">
@ -114,12 +117,12 @@
<p>无人机名称: {{ item.uav }}</p> <p>无人机名称: {{ item.uav }}</p>
<p>雷达名称: {{ item.sar }}</p> <p>雷达名称: {{ item.sar }}</p>
<p>开始时间{{ item.beginTime }}</p> <p>开始时间{{ item.beginTime }}</p>
<div <!-- <div
class="task-info" class="task-info"
:style="{ color: dealStatusColor(item.statusName) }" :style="{ color: dealStatusColor(item.statusName) }"
> >
{{ item.statusName }} {{ item.statusName }}
</div> </div> -->
</div> </div>
</template> </template>
<div v-else class="task-empty"> <div v-else class="task-empty">