Merge branch 'main' into dev_20260130_RemoveRedis

This commit is contained in:
longguancheng 2026-02-04 11:16:24 +08:00
commit c1575d47dd
12 changed files with 659 additions and 782 deletions

View File

@ -7,6 +7,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import java.io.File;
@EnableScheduling @EnableScheduling
@MapperScan("com.zhangy.skyeye.**.mapper") @MapperScan("com.zhangy.skyeye.**.mapper")
@SpringBootApplication(scanBasePackages = "com.zhangy.**") @SpringBootApplication(scanBasePackages = "com.zhangy.**")
@ -18,6 +20,20 @@ import org.springframework.scheduling.annotation.EnableScheduling;
public class SEApplication { public class SEApplication {
public static void main(String[] args) { public static void main(String[] args) {
String projectRoot = System.getProperty("user.dir");
// String libPath = projectRoot + "/library/logisen/GMTI";
// System.setProperty("jna.library.path", libPath);
// 1. GMTI 路径
String gmtiPath = projectRoot + "/library/logisen/GMTI";
// 2. OpenCV 路径 (根据您的目录名: opencv-4.11.0-windows)
String opencvPath = projectRoot + "/library/opencv-4.11.0-windows";
// 使用 File.pathSeparator (Windows是分号; Linux是冒号:) 连接多个路径
String combinedPath = gmtiPath + File.pathSeparator + opencvPath;
System.setProperty("jna.library.path", combinedPath);
// 如果 OpenCV 使用的是标准 JNI (System.loadLibrary)可能还需要设置 java.library.path
System.setProperty("java.library.path", opencvPath);
SpringApplication.run(SEApplication.class, args); SpringApplication.run(SEApplication.class, args);
} }
} }

View File

@ -346,6 +346,15 @@ public class JmJobServiceImpl implements JmJobService {
// SarBackImageFrameDTO.i = 1; // SarBackImageFrameDTO.i = 1;
// 校验无人机载荷 // 校验无人机载荷
jobStatusService.checkDeviceForNewJob(job.getUavList()); jobStatusService.checkDeviceForNewJob(job.getUavList());
JmJobUav uav = job.getUavList().get(0);
List<JmAirline> airlineList = uav.getAirlineList();
for(JmAirline airline:airlineList) {
log.info("we are going to start job {}", job.getId());
log.info("airline origin status is {}, set to {}", airline.getStatus(), ExecStatusEnum.NOT);
airline.setStatus(ExecStatusEnum.NOT.getValue());
}
// 保存任务状态 // 保存任务状态
job.setStatus(ExecStatusEnum.PROCESSING.getValue()); job.setStatus(ExecStatusEnum.PROCESSING.getValue());
job.setBeginTime(DateUtil.date()); job.setBeginTime(DateUtil.date());

View File

@ -1,120 +1,148 @@
; (function (win, lib) {
;(function(win, lib) { var doc = win.document
var doc = win.document; var docEl = doc.documentElement
var docEl = doc.documentElement; var metaEl = doc.querySelector('meta[name="viewport"]')
var metaEl = doc.querySelector('meta[name="viewport"]'); var flexibleEl = doc.querySelector('meta[name="flexible"]')
var flexibleEl = doc.querySelector('meta[name="flexible"]'); var dpr = 0
var dpr = 0; var scale = 0
var scale = 0; var tid
var tid; var flexible = lib.flexible || (lib.flexible = {})
var flexible = lib.flexible || (lib.flexible = {});
if (metaEl) { if (metaEl) {
console.warn('将根据已有的meta标签来设置缩放比例'); console.warn('将根据已有的meta标签来设置缩放比例')
var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/); var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/)
if (match) { if (match) {
scale = parseFloat(match[1]); scale = parseFloat(match[1])
dpr = parseInt(1 / scale); dpr = parseInt(1 / scale)
} }
} else if (flexibleEl) { } else if (flexibleEl) {
var content = flexibleEl.getAttribute('content'); var content = flexibleEl.getAttribute('content')
if (content) { if (content) {
var initialDpr = content.match(/initial\-dpr=([\d\.]+)/); var initialDpr = content.match(/initial\-dpr=([\d\.]+)/)
var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/); var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/)
if (initialDpr) { if (initialDpr) {
dpr = parseFloat(initialDpr[1]); dpr = parseFloat(initialDpr[1])
scale = parseFloat((1 / dpr).toFixed(2)); scale = parseFloat((1 / dpr).toFixed(2))
} }
if (maximumDpr) { if (maximumDpr) {
dpr = parseFloat(maximumDpr[1]); dpr = parseFloat(maximumDpr[1])
scale = parseFloat((1 / dpr).toFixed(2)); scale = parseFloat((1 / dpr).toFixed(2))
} }
} }
} }
if (!dpr && !scale) { if (!dpr && !scale) {
var isAndroid = win.navigator.appVersion.match(/android/gi); var isAndroid = win.navigator.appVersion.match(/android/gi)
var isIPhone = win.navigator.appVersion.match(/iphone/gi); var isIPhone = win.navigator.appVersion.match(/iphone/gi)
var devicePixelRatio = win.devicePixelRatio; var devicePixelRatio = win.devicePixelRatio
if (isIPhone) { if (isIPhone) {
// iOS下对于2和3的屏用2倍的方案其余的用1倍方案 // iOS下对于2和3的屏用2倍的方案其余的用1倍方案
if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
dpr = 3; dpr = 3
} else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){ } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {
dpr = 2; dpr = 2
} else { } else {
dpr = 1; dpr = 1
} }
} else { } else {
// 其他设备下仍旧使用1倍的方案 // 其他设备下仍旧使用1倍的方案
dpr = 1; dpr = 1
} }
scale = 1 / dpr; scale = 1 / dpr
} }
docEl.setAttribute('data-dpr', dpr); docEl.setAttribute('data-dpr', dpr)
if (!metaEl) { if (!metaEl) {
metaEl = doc.createElement('meta'); metaEl = doc.createElement('meta')
metaEl.setAttribute('name', 'viewport'); metaEl.setAttribute('name', 'viewport')
metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no'); metaEl.setAttribute(
'content',
'initial-scale=' +
scale +
', maximum-scale=' +
scale +
', minimum-scale=' +
scale +
', user-scalable=no'
)
if (docEl.firstElementChild) { if (docEl.firstElementChild) {
docEl.firstElementChild.appendChild(metaEl); docEl.firstElementChild.appendChild(metaEl)
} else { } else {
var wrap = doc.createElement('div'); var wrap = doc.createElement('div')
wrap.appendChild(metaEl); wrap.appendChild(metaEl)
doc.write(wrap.innerHTML); doc.write(wrap.innerHTML)
} }
} }
function refreshRem(){ function refreshRem() {
var width = docEl.getBoundingClientRect().width; var width = docEl.getBoundingClientRect().width
if (width / dpr < 1980) { if (width / dpr <= 1366) {
width = 1980 * dpr; width = 1366 * dpr
} else if (width / dpr <= 1440) {
width = 1440 * dpr
} else if (width / dpr <= 1600) {
width = 1600 * dpr
} else if (width / dpr <= 1680) {
width = 1680 * dpr
} else if (width / dpr <= 1768) {
width = 1768 * dpr
} else if (width / dpr <= 1980) {
width = 1980 * dpr
} else if (width / dpr > 5760) { } else if (width / dpr > 5760) {
width = 5760 * dpr; width = 5760 * dpr
} }
var rem = width / 10; var rem = width / 10
docEl.style.fontSize = rem + 'px'; docEl.style.fontSize = rem + 'px'
flexible.rem = win.rem = rem; flexible.rem = win.rem = rem
} }
win.addEventListener('resize', function() { win.addEventListener(
clearTimeout(tid); 'resize',
tid = setTimeout(refreshRem, 300); function () {
}, false); clearTimeout(tid)
win.addEventListener('pageshow', function(e) { tid = setTimeout(refreshRem, 300)
},
false
)
win.addEventListener(
'pageshow',
function (e) {
if (e.persisted) { if (e.persisted) {
clearTimeout(tid); clearTimeout(tid)
tid = setTimeout(refreshRem, 300); tid = setTimeout(refreshRem, 300)
} }
}, false); },
false
)
if (doc.readyState === 'complete') { if (doc.readyState === 'complete') {
doc.body.style.fontSize = 12 * dpr + 'px'; doc.body.style.fontSize = 12 * dpr + 'px'
} else { } else {
doc.addEventListener('DOMContentLoaded', function(e) { doc.addEventListener(
doc.body.style.fontSize = 12 * dpr + 'px'; 'DOMContentLoaded',
}, false); function (e) {
doc.body.style.fontSize = 12 * dpr + 'px'
},
false
)
} }
refreshRem()
refreshRem(); flexible.dpr = win.dpr = dpr
flexible.refreshRem = refreshRem
flexible.dpr = win.dpr = dpr; flexible.rem2px = function (d) {
flexible.refreshRem = refreshRem; var val = parseFloat(d) * this.rem
flexible.rem2px = function(d) {
var val = parseFloat(d) * this.rem;
if (typeof d === 'string' && d.match(/rem$/)) { if (typeof d === 'string' && d.match(/rem$/)) {
val += 'px'; val += 'px'
} }
return val; return val
} }
flexible.px2rem = function(d) { flexible.px2rem = function (d) {
var val = parseFloat(d) / this.rem; var val = parseFloat(d) / this.rem
if (typeof d === 'string' && d.match(/px$/)) { if (typeof d === 'string' && d.match(/px$/)) {
val += 'rem'; val += 'rem'
} }
return val; return val
} }
})(window, window['lib'] || (window['lib'] = {}))
})(window, window['lib'] || (window['lib'] = {}));

View File

@ -29,7 +29,7 @@
<!-- </template>--> <!-- </template>-->
<div class="task-list__content"> <div class="task-list__content">
<div v-for="item in taskList.data" :key="item.id" class="task-item"> <div v-for="item in taskList.data" :key="item.id" class="task-item">
<div class="left-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="execute-info" @click="openTaskLineDetail(item)"> <div class="execute-info" @click="openTaskLineDetail(item)">
<span <span
@ -41,14 +41,13 @@
</div> </div>
<div class="task-info"> <div class="task-info">
{{ item.statusName }} {{ item.statusName }}
<!-- <i class="el-icon-camera"></i>-->
<!-- <span class="task-name">{{ item.name }}</span>-->
<!-- <span :class="{ 'task-finish': item.isFinish }">{{-->
<!-- item.taskProgressName-->
<!-- }}</span>-->
</div> </div>
<div class="task-time">{{ item.beginTime }}</div>
<!-- <div class="task-time">{{ item.beginTime }}</div> -->
</div> </div>
<p>无人机名称: 无人机1</p>
<p>雷达名称: SAR1</p>
<p>开始时间{{ item.beginTime }}</p>
<div class="right-part"> <div class="right-part">
<!-- <i class="el-icon-edit-outline edit-task" @click.stop="editTask(item)"></i>--> <!-- <i class="el-icon-edit-outline edit-task" @click.stop="editTask(item)"></i>-->
<!-- <el-tooltip--> <!-- <el-tooltip-->
@ -59,18 +58,6 @@
<!-- <i class="ri-repeat-line" @click.stop="reRunTask(item)"></i>--> <!-- <i class="ri-repeat-line" @click.stop="reRunTask(item)"></i>-->
<!-- </el-tooltip>--> <!-- </el-tooltip>-->
<el-tooltip effect="dark" content="修改名称" placement="right">
<i
class="el-icon-edit-outline"
@click.stop="editTaskName(item)"
></i>
</el-tooltip>
<el-tooltip effect="dark" content="删除" placement="right">
<i
class="el-icon-close delete-task"
@click.stop="deleteTask(item)"
></i>
</el-tooltip>
</div> </div>
</div> </div>
</div> </div>

View File

@ -876,7 +876,9 @@ export default {
if (name === '执行中') { if (name === '执行中') {
return '#6ae965' return '#6ae965'
} else if (name === '已完成') { } else if (name === '已完成') {
return '#336dff' return '#0f8cc7'
} else if (name === '未执行') {
return '#b2ff38'
} }
}, },
getUavList() { getUavList() {
@ -985,6 +987,15 @@ export default {
let list = [] let list = []
data.forEach(item => { data.forEach(item => {
item.statusName = this.jobStatus[item.status + ''] item.statusName = this.jobStatus[item.status + '']
console.log(item, 33333333333);
let uav = undefined
let sar = undefined
if (item.uavList.length) {
uav = item.uavList[0].uavName
if (item.uavList[0].payloadList.length) {
sar = item.uavList[0].payloadList[0].payloadName
}
}
list.push({ list.push({
id: item.id, id: item.id,
beginTime: item.beginTime, beginTime: item.beginTime,
@ -994,6 +1005,8 @@ export default {
name: item.name, name: item.name,
status: item.status, status: item.status,
statusName: item.statusName, statusName: item.statusName,
uav,
sar
}) })
this.removeTaskTarget(item.id) this.removeTaskTarget(item.id)
}) })

View File

@ -26,122 +26,35 @@
} }
.task-item { .task-item {
height: 40px;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: calc(100% - 5px);
position: relative; position: relative;
display: flex;
justify-content: space-between;
align-items: center;
margin: 8px 0; margin: 8px 0;
border: 1px solid $--color-border-1;
.left-part { padding: 8px 15px;
padding: 0 8px;
background: rgba(51, 51, 51, 0.6);
border-radius: 4px;
flex: 1;
height: 100%;
position: relative;
box-sizing: border-box; box-sizing: border-box;
display: flex; border-radius: 6px;
justify-content: space-between; background-color: $--color-black-3-alpha;
align-items: center;
.task-progress-bar { &:hover {
position: absolute; background-color: $--color-black-3;
height: 100%;
left: 0;
top: 0;
border-radius: 4px;
background: #43522c;
//z-index: -1;
} }
.execute-info { >p {
z-index: 1; line-height: 24px;
display: flex; color: $--color-text-2;
justify-content: flex-start; padding-left: 3px;
align-items: center;
// width: 150px;
.execute-type-icon {
display: flex;
justify-content: center;
align-items: center;
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 4px;
border: 1px solid $--color-text-1;
>i {
color: $--color-text-1;
font-size: 12px;
}
}
.execute-state-0 {
border: 1px solid #a45d35;
box-shadow: 0 0 5px rgba(164, 93, 53, 0.8),
0 0 10px rgba(164, 93, 53, 0.6),
0 0 20px rgba(164, 93, 53, 0.3);
}
.execute-state-1 {
border: 1px solid #39cf0b;
box-shadow: 0 0 5px rgba(17, 172, 38, 0.8),
0 0 10px rgba(17, 172, 38, 0.6),
0 0 20px rgba(17, 172, 38, 0.3);
}
.execute-state-2 {
border: 1px solid $--color-text-1;
box-shadow: 0 0 2px rgba(250, 250, 250, 0.8),
0 0 6px rgba(250, 250, 250, 0.6),
0 0 14px rgba(250, 250, 250, 0.3);
}
.execute-state-3 {
border: 1px solid #a45d35;
box-shadow: 0 0 5px rgba(164, 93, 53, 0.8),
0 0 10px rgba(164, 93, 53, 0.6),
0 0 20px rgba(164, 93, 53, 0.3);
}
.execute-state-4 {
border: 1px solid #893654;
box-shadow: 0 0 5px rgba(137, 54, 84, 0.8),
0 0 10px rgba(137, 54, 84, 0.6),
0 0 20px rgba(137, 54, 84, 0.3);
}
.execute-state-5 {
border: 1px solid #681c1f;
box-shadow: 0 0 5px rgba(104, 28, 31, 0.8),
0 0 10px rgba(104, 28, 31, 0.6),
0 0 20px rgba(104, 28, 31, 0.3);
}
.task-execute {
color: $--color-text-1;
font-size: 14px;
width: 85px;
margin-left: 5px;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
} }
.task-info { .task-info {
z-index: 1; z-index: 1;
width: 50px; position: absolute;
display: flex; bottom: 0;
justify-content: flex-start; right: 0;
align-items: center; background-color: $--color-black-2;
padding: 4px 15px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
>i { >i {
font-size: 16px; font-size: 16px;
@ -163,46 +76,9 @@
color: $--color-green; color: $--color-green;
} }
} }
.task-time {
z-index: 1;
color: $--color-text-1;
min-width: 140px;
} }
} }
.right-part {
width: 60px;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 5px;
>i {
font-size: 14px;
cursor: pointer;
margin: 2px 0;
}
.edit-task {
color: #ffff00;
}
.delete-task {
color: $--color-red;
}
}
}
}
//.task-list__large {
// height: calc(50vh - 110px);
// left: $--icon-mode-larger-card-left;
// top: $--icon-mode-larger-card-top;
// transition: 0.2s ease-in-out;
//}
.task-form { .task-form {
width: 410px; width: 410px;
height: calc(100vh - 70px); height: calc(100vh - 70px);
@ -213,12 +89,6 @@
} }
} }
//.task-form__large {
// height: calc(100vh - 110px);
// left: $--icon-mode-larger-card-left;
// top: $--icon-mode-larger-card-top;
// transition: 0.2s ease-in-out;
//}
.requirement-form { .requirement-form {
box-sizing: border-box; box-sizing: border-box;
padding-right: 10px; padding-right: 10px;
@ -553,3 +423,115 @@
background-color: #00000052; background-color: #00000052;
} }
} }
.top-part {
display: flex;
justify-content: space-between;
line-height: 24px;
&__left {
flex: 1;
.execute-info {
z-index: 1;
display: flex;
justify-content: flex-start;
align-items: center;
// width: 150px;
.execute-type-icon {
display: flex;
justify-content: center;
align-items: center;
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 4px;
border: 1px solid $--color-text-1;
>i {
color: $--color-text-1;
font-size: 12px;
}
}
.execute-state-0 {
border: 1px solid #a45d35;
box-shadow: 0 0 5px rgba(164, 93, 53, 0.8),
0 0 10px rgba(164, 93, 53, 0.6),
0 0 20px rgba(164, 93, 53, 0.3);
}
.execute-state-1 {
border: 1px solid #39cf0b;
box-shadow: 0 0 5px rgba(17, 172, 38, 0.8),
0 0 10px rgba(17, 172, 38, 0.6),
0 0 20px rgba(17, 172, 38, 0.3);
}
.execute-state-2 {
border: 1px solid $--color-text-1;
box-shadow: 0 0 2px rgba(250, 250, 250, 0.8),
0 0 6px rgba(250, 250, 250, 0.6),
0 0 14px rgba(250, 250, 250, 0.3);
}
.execute-state-3 {
border: 1px solid #a45d35;
box-shadow: 0 0 5px rgba(164, 93, 53, 0.8),
0 0 10px rgba(164, 93, 53, 0.6),
0 0 20px rgba(164, 93, 53, 0.3);
}
.execute-state-4 {
border: 1px solid #893654;
box-shadow: 0 0 5px rgba(137, 54, 84, 0.8),
0 0 10px rgba(137, 54, 84, 0.6),
0 0 20px rgba(137, 54, 84, 0.3);
}
.execute-state-5 {
border: 1px solid #681c1f;
box-shadow: 0 0 5px rgba(104, 28, 31, 0.8),
0 0 10px rgba(104, 28, 31, 0.6),
0 0 20px rgba(104, 28, 31, 0.3);
}
.task-execute {
color: $--color-text-1;
font-size: 14px;
width: calc(100% - 50px);
margin-left: 5px;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
}
}
&__right {
width: 60px;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 5px;
>i {
font-size: 14px;
cursor: pointer;
margin: 2px 0;
}
.edit-task {
color: #ffff00;
}
.delete-task {
color: $--color-red;
}
}
}

View File

@ -30,8 +30,9 @@
:key="item.id" :key="item.id"
class="task-item" class="task-item"
> >
<div class="left-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="execute-info" @click="openTaskLineDetail(item)"> <div class="execute-info" @click="openTaskLineDetail(item)">
<span <span
class="execute-type-icon" class="execute-type-icon"
@ -40,20 +41,8 @@
></span> ></span>
<span class="task-execute">{{ item.name }}</span> <span class="task-execute">{{ item.name }}</span>
</div> </div>
<div
class="task-info"
:style="{ color: dealStatusColor(item.statusName) }"
>
{{ item.statusName }}
<!-- <i class="el-icon-camera"></i>-->
<!-- <span class="task-name">{{ item.name }}</span>-->
<!-- <span :class="{ 'task-finish': item.isFinish }">{{-->
<!-- item.taskProgressName-->
<!-- }}</span>-->
</div> </div>
<div class="task-time">{{ item.beginTime }}</div> <div class="top-part__right">
</div>
<div class="right-part">
<el-tooltip <el-tooltip
effect="dark" effect="dark"
:content="item.check ? '隐藏' : '显示'" :content="item.check ? '隐藏' : '显示'"
@ -100,21 +89,16 @@
<el-dropdown-item command="remove">删除</el-dropdown-item> <el-dropdown-item command="remove">删除</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
<!-- <el-tooltip effect="dark" content="修改名称" placement="top"> </div>
<i </div>
class="el-icon-edit-outline" <p>无人机名称: {{ item.uav }}</p>
@click.stop="editTaskName(item)" <p>雷达名称: {{ item.sar }}</p>
></i> <p>开始时间{{ item.beginTime }}</p>
</el-tooltip> <div
<el-tooltip effect="dark" content="复制" placement="top"> class="task-info"
<i class="ri-file-copy-2-line" @click.stop="copyTask(item)"></i> :style="{ color: dealStatusColor(item.statusName) }"
</el-tooltip> >
<el-tooltip effect="dark" content="删除" placement="top"> {{ item.statusName }}
<i
class="el-icon-close delete-task"
@click.stop="deleteTask(item)"
></i>
</el-tooltip> -->
</div> </div>
</div> </div>
</div> </div>

View File

@ -1085,6 +1085,7 @@ export default {
console.log('任务列表', res.data.data) console.log('任务列表', res.data.data)
let data = res.data.data let data = res.data.data
let list = [] let list = []
data.forEach(item => { data.forEach(item => {
// item.check = item.status === 1 || item.status === 3 // item.check = item.status === 1 || item.status === 3
item.check = false item.check = false
@ -1096,6 +1097,15 @@ export default {
} }
child.jobName = item.name child.jobName = item.name
}) })
let uav = undefined
let sar = undefined
if (item.uavList.length) {
uav = item.uavList[0].uavName
if (item.uavList[0].payloadList.length) {
sar = item.uavList[0].payloadList[0].payloadName
}
}
list.push({ list.push({
id: item.id, id: item.id,
beginTime: item.beginTime, beginTime: item.beginTime,
@ -1105,6 +1115,8 @@ export default {
name: item.name, name: item.name,
status: item.status, status: item.status,
statusName: item.statusName, statusName: item.statusName,
uav,
sar
}) })
// TODO // TODO
// item.pointList = [item.pointList] // item.pointList = [item.pointList]
@ -2607,6 +2619,10 @@ export default {
name: '/topic/jobStatus', name: '/topic/jobStatus',
callback: this.handleWebsocketState callback: this.handleWebsocketState
}, },
{
name: '/topic/gmti',
callback: this.handleWebsocketGmti
},
], ],
success: () => { success: () => {
console.log('自身websocket链接成功2') console.log('自身websocket链接成功2')
@ -2616,6 +2632,9 @@ export default {
socketInstance = socket socketInstance = socket
stompClientInstance = stompClient stompClientInstance = stompClient
}, },
handleWebsocketGmti(info) {
console.log('Gmti信息', info.body)
},
handleWebsocketStatus(info) { handleWebsocketStatus(info) {
console.log('SAR状态信息', info.body) console.log('SAR状态信息', info.body)
let data = JSON.parse(info.body) let data = JSON.parse(info.body)
@ -2778,7 +2797,7 @@ export default {
// console.log('SAR图像', info.body) // console.log('SAR图像', info.body)
let data = JSON.parse(info.body) let data = JSON.parse(info.body)
console.log('SAR图像2', data) console.log('SAR图像2', data)
// this.addMarkPicture2(data) this.addMarkPicture2(data)
// console.log('灭有匹配到吗taskUavCollection', taskUavCollection, taskUavCollection[data.jobId]) // console.log('灭有匹配到吗taskUavCollection', taskUavCollection, taskUavCollection[data.jobId])
if (taskUavCollection[data.jobId]) { if (taskUavCollection[data.jobId]) {
let find = taskUavCollection[data.jobId].find(item => item.uavId + '' === data.uavId + '') let find = taskUavCollection[data.jobId].find(item => item.uavId + '' === data.uavId + '')
@ -2987,9 +3006,12 @@ export default {
// 从执行中变为执行完毕 // 从执行中变为执行完毕
if (this.taskList.data[findIndex].status === 1 && data.jobStatus === 2) { if (this.taskList.data[findIndex].status === 1 && data.jobStatus === 2) {
// 移除任务相关信息 // 移除任务相关信息
console.log('任务变更', this.jobStatus, this.jobStatus[data.jobStatus + '']) // console.log('任务变更', this.jobStatus, this.jobStatus[data.jobStatus + ''])
this.taskList.data[findIndex].statusName = this.jobStatus[data.jobStatus + ''] // this.taskList.data[findIndex].statusName = this.jobStatus[data.jobStatus + '']
taskListResource[findIndex].statusName = this.jobStatus[data.jobStatus + ''] // taskListResource[findIndex].statusName = this.jobStatus[data.jobStatus + '']
taskListResource.splice(findIndex, 1)
this.getTaskList()
this.removeTaskTarget(data.jobId)
} }
if (data.jobStatus === 1 && this.detailUav.id === data.jobId) { if (data.jobStatus === 1 && this.detailUav.id === data.jobId) {
this.updateUavInfo(data.sarStatus) this.updateUavInfo(data.sarStatus)

View File

@ -48,122 +48,34 @@
} }
.task-item { .task-item {
height: 40px;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: calc(100% - 5px);
position: relative; position: relative;
display: flex;
justify-content: space-between;
align-items: center;
margin: 8px 0; margin: 8px 0;
border: 1px solid $--color-border-1;
.left-part { padding: 8px 15px;
padding: 0 8px;
background: rgba(51, 51, 51, 0.6);
border-radius: 4px;
flex: 1;
height: 100%;
position: relative;
box-sizing: border-box; box-sizing: border-box;
display: flex; border-radius: 6px;
justify-content: space-between; background-color: $--color-black-3-alpha;
align-items: center;
.task-progress-bar { &:hover {
position: absolute; background-color: $--color-black-3;
height: 100%;
left: 0;
top: 0;
border-radius: 4px;
background: #43522c;
//z-index: -1;
} }
.execute-info { >p {
z-index: 1; color: $--color-text-2;
display: flex; line-height: 24px;
justify-content: flex-start;
align-items: center;
// width: 150px;
.execute-type-icon {
display: flex;
justify-content: center;
align-items: center;
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 4px;
border: 1px solid $--color-text-1;
>i {
color: $--color-text-1;
font-size: 12px;
}
}
.execute-state-0 {
border: 1px solid #a45d35;
box-shadow: 0 0 5px rgba(164, 93, 53, 0.8),
0 0 10px rgba(164, 93, 53, 0.6),
0 0 20px rgba(164, 93, 53, 0.3);
}
.execute-state-1 {
border: 1px solid #39cf0b;
box-shadow: 0 0 5px rgba(17, 172, 38, 0.8),
0 0 10px rgba(17, 172, 38, 0.6),
0 0 20px rgba(17, 172, 38, 0.3);
}
.execute-state-2 {
border: 1px solid $--color-text-1;
box-shadow: 0 0 2px rgba(250, 250, 250, 0.8),
0 0 6px rgba(250, 250, 250, 0.6),
0 0 14px rgba(250, 250, 250, 0.3);
}
.execute-state-3 {
border: 1px solid #a45d35;
box-shadow: 0 0 5px rgba(164, 93, 53, 0.8),
0 0 10px rgba(164, 93, 53, 0.6),
0 0 20px rgba(164, 93, 53, 0.3);
}
.execute-state-4 {
border: 1px solid #893654;
box-shadow: 0 0 5px rgba(137, 54, 84, 0.8),
0 0 10px rgba(137, 54, 84, 0.6),
0 0 20px rgba(137, 54, 84, 0.3);
}
.execute-state-5 {
border: 1px solid #681c1f;
box-shadow: 0 0 5px rgba(104, 28, 31, 0.8),
0 0 10px rgba(104, 28, 31, 0.6),
0 0 20px rgba(104, 28, 31, 0.3);
}
.task-execute {
color: $--color-text-1;
font-size: 14px;
width: 90px;
margin-left: 5px;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
} }
.task-info { .task-info {
z-index: 1; z-index: 1;
width: 50px; position: absolute;
display: flex; bottom: 0;
justify-content: flex-start; right: 0;
align-items: center; background-color: $--color-black-2;
padding: 4px 15px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
>i { >i {
font-size: 16px; font-size: 16px;
@ -185,36 +97,6 @@
color: $--color-green; color: $--color-green;
} }
} }
.task-time {
z-index: 1;
color: $--color-text-1;
min-width: 140px;
}
}
.right-part {
width: 40px;
height: 100%;
display: flex;
justify-content: space-between;
padding: 0 8px;
align-items: center;
>i {
font-size: 14px;
cursor: pointer;
margin: 2px 0;
}
.edit-task {
color: #ffff00;
}
.delete-task {
color: $--color-red;
}
}
} }
} }
@ -408,9 +290,9 @@
.detail-uav-wrap { .detail-uav-wrap {
width: 430px; width: 430px;
position: fixed; position: fixed;
bottom: 5px; top: 60px;
right: 10px; right: 10px;
height: calc(100vh - 60px); height: calc(100vh - 220px);
} }
.detail-info { .detail-info {
@ -1086,35 +968,6 @@
} }
} }
.task-info {
z-index: 1;
flex: 1;
display: flex;
justify-content: flex-start;
align-items: center;
width: 50px;
>i {
font-size: 16px;
color: #07e5e5;
margin-right: 6px;
}
>span {
color: $--color-orange;
}
.task-name {
color: $--color-text-1;
font-size: 14px;
margin-right: 2px;
}
.task-finish {
color: $--color-green;
}
}
.task-time { .task-time {
z-index: 1; z-index: 1;
color: $--color-text-1; color: $--color-text-1;
@ -1183,13 +1036,7 @@
.detail-uav { .detail-uav {
width: 410px; width: 410px;
// position: fixed; height: calc(100vh - 220px);
top: 60px;
//bottom: 5px;
right: 10px;
//right: 510px;
height: calc(100vh - 70px);
//height: calc(100vh - 620px);
transition: 0.2s ease-in-out; transition: 0.2s ease-in-out;
z-index: 2; z-index: 2;
@ -1259,66 +1106,6 @@
} }
} }
.target-task-item {
height: 40px;
margin: 8px 0;
box-sizing: border-box;
width: 100%;
padding: 0 8px;
background: #333333;
border-radius: 4px;
flex: 1;
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
.task-progress-bar {
position: absolute;
height: 100%;
left: 0;
top: 0;
border-radius: 4px;
background: #43522c;
//z-index: -1;
}
.task-info {
z-index: 1;
flex: 1;
display: flex;
justify-content: flex-start;
align-items: center;
width: 50px;
>i {
font-size: 16px;
color: #07e5e5;
margin-right: 6px;
}
>span {
color: $--color-orange;
}
.task-name {
color: $--color-text-1;
font-size: 14px;
margin-right: 2px;
}
.task-finish {
color: $--color-green;
}
}
.task-time {
z-index: 1;
color: $--color-text-1;
min-width: 140px;
}
}
.uav-span-wrap { .uav-span-wrap {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
@ -1415,3 +1202,114 @@
::v-deep .el-collapse { ::v-deep .el-collapse {
border-top: unset; border-top: unset;
} }
.top-part {
display: flex;
justify-content: space-between;
line-height: 24px;
&__left {
flex: 1;
.execute-info {
z-index: 1;
display: flex;
justify-content: flex-start;
align-items: center;
.execute-type-icon {
display: flex;
justify-content: center;
align-items: center;
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 4px;
border: 1px solid $--color-text-1;
>i {
color: $--color-text-1;
font-size: 12px;
}
}
.execute-state-0 {
border: 1px solid #a45d35;
box-shadow: 0 0 5px rgba(164, 93, 53, 0.8),
0 0 10px rgba(164, 93, 53, 0.6),
0 0 20px rgba(164, 93, 53, 0.3);
}
.execute-state-1 {
border: 1px solid #39cf0b;
box-shadow: 0 0 5px rgba(17, 172, 38, 0.8),
0 0 10px rgba(17, 172, 38, 0.6),
0 0 20px rgba(17, 172, 38, 0.3);
}
.execute-state-2 {
border: 1px solid $--color-text-1;
box-shadow: 0 0 2px rgba(250, 250, 250, 0.8),
0 0 6px rgba(250, 250, 250, 0.6),
0 0 14px rgba(250, 250, 250, 0.3);
}
.execute-state-3 {
border: 1px solid #a45d35;
box-shadow: 0 0 5px rgba(164, 93, 53, 0.8),
0 0 10px rgba(164, 93, 53, 0.6),
0 0 20px rgba(164, 93, 53, 0.3);
}
.execute-state-4 {
border: 1px solid #893654;
box-shadow: 0 0 5px rgba(137, 54, 84, 0.8),
0 0 10px rgba(137, 54, 84, 0.6),
0 0 20px rgba(137, 54, 84, 0.3);
}
.execute-state-5 {
border: 1px solid #681c1f;
box-shadow: 0 0 5px rgba(104, 28, 31, 0.8),
0 0 10px rgba(104, 28, 31, 0.6),
0 0 20px rgba(104, 28, 31, 0.3);
}
.task-execute {
color: $--color-text-1;
font-size: 14px;
width: calc(100% - 50px);
margin-left: 5px;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
}
}
&__right {
width: 40px;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 5px;
>i {
font-size: 14px;
cursor: pointer;
margin: 2px 0;
}
.edit-task {
color: #ffff00;
}
.delete-task {
color: $--color-red;
}
}
}

View File

@ -75,8 +75,9 @@
class="task-item" class="task-item"
@click="openSarStatusDetail(item)" @click="openSarStatusDetail(item)"
> >
<div class="left-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="execute-info"> <div class="execute-info">
<span <span
class="execute-type-icon" class="execute-type-icon"
@ -85,15 +86,8 @@
></span> ></span>
<span class="task-execute">{{ item.name }}</span> <span class="task-execute">{{ item.name }}</span>
</div> </div>
<div
class="task-info"
:style="{ color: dealStatusColor(item.statusName) }"
>
{{ item.statusName }}
</div> </div>
<div class="task-time">{{ item.beginTime }}</div> <div class="top-part__right">
</div>
<div class="right-part">
<el-tooltip <el-tooltip
effect="dark" effect="dark"
:content="item.check ? '隐藏' : '显示'" :content="item.check ? '隐藏' : '显示'"
@ -104,17 +98,6 @@
@click.stop="toggleTaskSceneShow(item, index)" @click.stop="toggleTaskSceneShow(item, index)"
></i> ></i>
</el-tooltip> </el-tooltip>
<!-- <el-tooltip
v-if="item.status === 0"
effect="dark"
content="执行"
placement="top"
>
<i
class="ri-arrow-up-circle-line"
@click.stop="makeTaskUavFly(item, index)"
></i>
</el-tooltip> -->
<el-tooltip <el-tooltip
effect="dark" effect="dark"
content="结束任务" content="结束任务"
@ -126,17 +109,16 @@
@click.stop="stopTask(item, index)" @click.stop="stopTask(item, index)"
></i> ></i>
</el-tooltip> </el-tooltip>
<!-- <el-tooltip </div>
effect="dark" </div>
content="重新执行" <p>无人机名称: {{ item.uav }}</p>
placement="top" <p>雷达名称: {{ item.sar }}</p>
v-if="item.status === 2" <p>开始时间{{ item.beginTime }}</p>
<div
class="task-info"
:style="{ color: dealStatusColor(item.statusName) }"
> >
<i {{ item.statusName }}
class="ri-restart-line"
@click.stop="reRunTask(item, index)"
></i>
</el-tooltip> -->
</div> </div>
</div> </div>
</template> </template>
@ -292,50 +274,6 @@
<i class="el-icon-info device-lock" @click="showUavMore"></i> <i class="el-icon-info device-lock" @click="showUavMore"></i>
</div> </div>
</div> </div>
<!-- <div class="target-task-list">-->
<!-- <div class="target-task-item" v-for="item in detailInfo.taskList" :key="item.id">-->
<!-- <div class="execute-info">-->
<!-- <span class="execute-type-icon" :class="'execute-state-' + item.status"><i class="ri-dv-line"></i></span>-->
<!-- <span class="task-execute">{{ item.name }}</span>-->
<!-- </div>-->
<!-- <div class="task-time">{{item.beginTime}}</div>-->
<!-- </div>-->
<!-- </div>-->
<div class="picture-list">
<div>回传图像</div>
<div
v-for="item in detailInfo.pictureList"
:key="item.createTime"
class="picture-list-item"
>
<div class="picture-item-image">
<el-image
style="width: 40px; height: 40px"
:src="item.url"
:preview-src-list="[item.url]"
>
</el-image>
</div>
<div class="picture-item-info">
<div>
拍摄任务{{ item.taskName }} | 拍摄载荷{{
item.loaderName
}}
</div>
<div>拍摄时间{{ item.createTime }}</div>
</div>
<div class="picture-command">
<i
class="iconfont icon-dt-icon-dingwei"
@click="lockHistoryPicture(item)"
></i>
<i
class="iconfont icon-quanjushijiao-copy"
@click="toggleHistoryPicture(item)"
></i>
</div>
</div>
</div>
</div> </div>
</dt-card> </dt-card>
</right-slide> </right-slide>

View File

@ -1524,7 +1524,7 @@ export default {
}, },
//#endregion //#endregion
sarChange(val) { sarChange(val) {
this.moveInfoBar = val // this.moveInfoBar = val
}, },
//#region ais船 //#region ais船

View File

@ -147,18 +147,18 @@ module.exports = {
css: { css: {
loaderOptions: { loaderOptions: {
postcss: { postcss: {
// plugins: [ plugins: [
// require('postcss-pxtorem')({ require('postcss-pxtorem')({
// rootValue: 192, // 正常适配 rootValue: 192, // 正常适配
// // rootValue: 280, // 3840 * 2160 // rootValue: 280, // 3840 * 2160
// propList: ['*'], // 可以从px更改为rem的属性 propList: ['*'], // 可以从px更改为rem的属性
// selectorBlackList: [ selectorBlackList: [
// // 匹配不被转换为rem的选择器 // 匹配不被转换为rem的选择器
// 'super-cesium-timeline-icon16' 'super-cesium-timeline-icon16'
// // 'card-position' // 'card-position'
// ] ]
// }) })
// ] ]
} }
} }
} }