Compare commits

..

No commits in common. "c1575d47ddb76d97e51199baabe650165ce5ffe8" and "f34844f110b0095bf90dd0066965c716a1d731cd" have entirely different histories.

12 changed files with 783 additions and 660 deletions

View File

@ -7,8 +7,6 @@ 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.**")
@ -20,20 +18,6 @@ import java.io.File;
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,15 +346,6 @@ 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,148 +1,120 @@
;(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( metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
'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 <= 1366) { if (width / dpr < 1980) {
width = 1366 * dpr width = 1980 * 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( win.addEventListener('resize', function() {
'resize', clearTimeout(tid);
function () { tid = setTimeout(refreshRem, 300);
clearTimeout(tid) }, false);
tid = setTimeout(refreshRem, 300) win.addEventListener('pageshow', function(e) {
},
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( doc.addEventListener('DOMContentLoaded', function(e) {
'DOMContentLoaded', doc.body.style.fontSize = 12 * dpr + 'px';
function (e) { }, false);
doc.body.style.fontSize = 12 * dpr + 'px'
},
false
)
} }
refreshRem()
flexible.dpr = win.dpr = dpr refreshRem();
flexible.refreshRem = refreshRem
flexible.dpr = win.dpr = dpr;
flexible.refreshRem = refreshRem;
flexible.rem2px = function(d) { flexible.rem2px = function(d) {
var val = parseFloat(d) * this.rem 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="top-part"> <div class="left-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,13 +41,14 @@
</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-->
@ -58,6 +59,18 @@
<!-- <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,9 +876,7 @@ export default {
if (name === '执行中') { if (name === '执行中') {
return '#6ae965' return '#6ae965'
} else if (name === '已完成') { } else if (name === '已完成') {
return '#0f8cc7' return '#336dff'
} else if (name === '未执行') {
return '#b2ff38'
} }
}, },
getUavList() { getUavList() {
@ -987,15 +985,6 @@ 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,
@ -1005,8 +994,6 @@ 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,35 +26,122 @@
} }
.task-item { .task-item {
height: 40px;
box-sizing: border-box; box-sizing: border-box;
width: calc(100% - 5px); width: 100%;
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;
padding: 8px 15px;
box-sizing: border-box;
border-radius: 6px;
background-color: $--color-black-3-alpha;
&:hover { .left-part {
background-color: $--color-black-3; padding: 0 8px;
background: rgba(51, 51, 51, 0.6);
border-radius: 4px;
flex: 1;
height: 100%;
position: relative;
box-sizing: border-box;
display: flex;
justify-content: space-between;
align-items: center;
.task-progress-bar {
position: absolute;
height: 100%;
left: 0;
top: 0;
border-radius: 4px;
background: #43522c;
//z-index: -1;
} }
>p { .execute-info {
line-height: 24px; z-index: 1;
color: $--color-text-2; display: flex;
padding-left: 3px; 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: 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;
position: absolute; width: 50px;
bottom: 0; display: flex;
right: 0; justify-content: flex-start;
background-color: $--color-black-2; align-items: center;
padding: 4px 15px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
>i { >i {
font-size: 16px; font-size: 16px;
@ -76,9 +163,46 @@
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);
@ -89,6 +213,12 @@
} }
} }
//.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;
@ -423,115 +553,3 @@
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,9 +30,8 @@
:key="item.id" :key="item.id"
class="task-item" class="task-item"
> >
<div class="top-part"> <div class="left-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"
@ -41,8 +40,20 @@
></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="top-part__right"> <div class="task-time">{{ item.beginTime }}</div>
</div>
<div class="right-part">
<el-tooltip <el-tooltip
effect="dark" effect="dark"
:content="item.check ? '隐藏' : '显示'" :content="item.check ? '隐藏' : '显示'"
@ -89,16 +100,21 @@
<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>
</div> <!-- <el-tooltip effect="dark" content="修改名称" placement="top">
</div> <i
<p>无人机名称: {{ item.uav }}</p> class="el-icon-edit-outline"
<p>雷达名称: {{ item.sar }}</p> @click.stop="editTaskName(item)"
<p>开始时间{{ item.beginTime }}</p> ></i>
<div </el-tooltip>
class="task-info" <el-tooltip effect="dark" content="复制" placement="top">
:style="{ color: dealStatusColor(item.statusName) }" <i class="ri-file-copy-2-line" @click.stop="copyTask(item)"></i>
> </el-tooltip>
{{ item.statusName }} <el-tooltip effect="dark" content="删除" placement="top">
<i
class="el-icon-close delete-task"
@click.stop="deleteTask(item)"
></i>
</el-tooltip> -->
</div> </div>
</div> </div>
</div> </div>

View File

@ -1085,7 +1085,6 @@ 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
@ -1097,15 +1096,6 @@ 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,
@ -1115,8 +1105,6 @@ 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]
@ -2619,10 +2607,6 @@ 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')
@ -2632,9 +2616,6 @@ 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)
@ -2797,7 +2778,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 + '')
@ -3006,12 +2987,9 @@ 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,34 +48,122 @@
} }
.task-item { .task-item {
height: 40px;
box-sizing: border-box; box-sizing: border-box;
width: calc(100% - 5px); width: 100%;
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;
padding: 8px 15px;
box-sizing: border-box;
border-radius: 6px;
background-color: $--color-black-3-alpha;
&:hover { .left-part {
background-color: $--color-black-3; padding: 0 8px;
background: rgba(51, 51, 51, 0.6);
border-radius: 4px;
flex: 1;
height: 100%;
position: relative;
box-sizing: border-box;
display: flex;
justify-content: space-between;
align-items: center;
.task-progress-bar {
position: absolute;
height: 100%;
left: 0;
top: 0;
border-radius: 4px;
background: #43522c;
//z-index: -1;
} }
>p { .execute-info {
color: $--color-text-2; z-index: 1;
line-height: 24px; 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: 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;
position: absolute; width: 50px;
bottom: 0; display: flex;
right: 0; justify-content: flex-start;
background-color: $--color-black-2; align-items: center;
padding: 4px 15px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
>i { >i {
font-size: 16px; font-size: 16px;
@ -97,6 +185,36 @@
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;
}
}
} }
} }
@ -290,9 +408,9 @@
.detail-uav-wrap { .detail-uav-wrap {
width: 430px; width: 430px;
position: fixed; position: fixed;
top: 60px; bottom: 5px;
right: 10px; right: 10px;
height: calc(100vh - 220px); height: calc(100vh - 60px);
} }
.detail-info { .detail-info {
@ -968,6 +1086,35 @@
} }
} }
.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;
@ -1036,7 +1183,13 @@
.detail-uav { .detail-uav {
width: 410px; width: 410px;
height: calc(100vh - 220px); // position: fixed;
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;
@ -1106,6 +1259,66 @@
} }
} }
.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;
@ -1202,114 +1415,3 @@
::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,9 +75,8 @@
class="task-item" class="task-item"
@click="openSarStatusDetail(item)" @click="openSarStatusDetail(item)"
> >
<div class="top-part"> <div class="left-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"
@ -86,8 +85,15 @@
></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="top-part__right"> <div class="task-time">{{ item.beginTime }}</div>
</div>
<div class="right-part">
<el-tooltip <el-tooltip
effect="dark" effect="dark"
:content="item.check ? '隐藏' : '显示'" :content="item.check ? '隐藏' : '显示'"
@ -98,6 +104,17 @@
@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="结束任务"
@ -109,16 +126,17 @@
@click.stop="stopTask(item, index)" @click.stop="stopTask(item, index)"
></i> ></i>
</el-tooltip> </el-tooltip>
</div> <!-- <el-tooltip
</div> effect="dark"
<p>无人机名称: {{ item.uav }}</p> content="重新执行"
<p>雷达名称: {{ item.sar }}</p> placement="top"
<p>开始时间{{ item.beginTime }}</p> v-if="item.status === 2"
<div
class="task-info"
:style="{ color: dealStatusColor(item.statusName) }"
> >
{{ item.statusName }} <i
class="ri-restart-line"
@click.stop="reRunTask(item, index)"
></i>
</el-tooltip> -->
</div> </div>
</div> </div>
</template> </template>
@ -274,6 +292,50 @@
<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'
] // ]
}) // })
] // ]
} }
} }
} }