提交 bca6ff51 作者: 梁启东

Merge branch 'v4' of http://git.mmcuav.cn/root/mmc-stl-vue2 into v4

...@@ -6,44 +6,20 @@ ...@@ -6,44 +6,20 @@
<div class="header__column status">状态</div> <div class="header__column status">状态</div>
<div class="header__column flex2">操作</div> <div class="header__column flex2">操作</div>
</div> </div>
<div <div class="timed-task-main" v-loading="loading" element-loading-background="rgba(0, 0, 0, 0.8)">
class="timed-task-main" <div class="row" :class="{ single: i % 2 != 0 }" v-for="(item, i) in taskListAll" :key="item.id">
v-loading="loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<div
class="row"
:class="{ single: i % 2 != 0 }"
v-for="(item, i) in taskListAll"
:key="item.id"
>
<div class="row__column flex2"> <div class="row__column flex2">
<el-tooltip <el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
class="item"
effect="dark"
:content="item.name"
placement="top-start"
>
<span class="f12">{{ item.name }}</span> <span class="f12">{{ item.name }}</span>
</el-tooltip> </el-tooltip>
</div> </div>
<div class="row__column flex2 col-2"> <div class="row__column flex2 col-2">
<el-tooltip <el-tooltip class="item" effect="dark" :content="item.taskStartTime" placement="top-start">
class="item"
effect="dark"
:content="item.taskStartTime"
placement="top-start"
>
<span class="f9">{{ item.taskStartTime }}</span> <span class="f9">{{ item.taskStartTime }}</span>
</el-tooltip> </el-tooltip>
</div> </div>
<div class="row__column status" style="color: rgb(255, 189, 54)"> <div class="row__column status" style="color: rgb(255, 189, 54)">
<el-tooltip <el-tooltip class="item" effect="dark" :content="item.status" placement="top-start">
class="item"
effect="dark"
:content="item.status"
placement="top-start"
>
<span class="f12">{{ item.status }}</span> <span class="f12">{{ item.status }}</span>
</el-tooltip> </el-tooltip>
</div> </div>
...@@ -55,17 +31,14 @@ ...@@ -55,17 +31,14 @@
<i class="el-icon-date" @click="onOpenPlan(item)"></i> <i class="el-icon-date" @click="onOpenPlan(item)"></i>
</el-tooltip> </el-tooltip>
<el-tooltip content="编辑" placement="top" v> <el-tooltip content="编辑" placement="top" v>
<i <i class="el-icon-edit" @click="onOpenEdit(item)" v-if="item.status !== '执行中' && item.status !== '已完成'"></i>
class="el-icon-edit"
@click="onOpenEdit(item)"
v-if="item.status !== '执行中' && item.status !== '已完成'"
></i>
</el-tooltip> </el-tooltip>
<!-- <el-tooltip content="开关" placement="top"> <!-- <el-tooltip content="开关" placement="top">
<i class="el-icon-turn-off"></i> <i class="el-icon-turn-off"></i>
</el-tooltip> --> </el-tooltip> -->
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<i v-if="item.status !== '执行中' && item.status !== '已完成'" class="el-icon-delete" @click="onDelAirway(item)"></i> <i v-if="item.status !== '执行中' && item.status !== '已完成'" class="el-icon-delete"
@click="onDelAirway(item)"></i>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
...@@ -74,18 +47,9 @@ ...@@ -74,18 +47,9 @@
<div class="task-add__btn" @click="showFlightPlan = true">创建定时任务</div> <div class="task-add__btn" @click="showFlightPlan = true">创建定时任务</div>
</div>--> </div>-->
<FlightPlan <FlightPlan v-if="showFlightPlan" :taskId="selectedTask.id" :taskList="taskListAll" @close="showFlightPlan = false">
v-if="showFlightPlan"
:taskId="selectedTask.id"
:taskList="taskListAll"
@close="showFlightPlan = false"
>
</FlightPlan> </FlightPlan>
<FlightEdit <FlightEdit v-if="showFlightEdit" :task="selectedTask" @close="showFlightEdit = false"></FlightEdit>
v-if="showFlightEdit"
:task="selectedTask"
@close="showFlightEdit = false"
></FlightEdit>
</div> </div>
</template> </template>
...@@ -140,6 +104,24 @@ export default { ...@@ -140,6 +104,24 @@ export default {
this.getTaskList(); this.getTaskList();
}, },
}, },
showFlightEdit: {
handler(val) {
if (!val && !this.showFlightPlan) {
this.changeflyLogStatus(false)
}else{
this.changeflyLogStatus(true)
}
}
},
showFlightPlan: {
handler(val) {
if (!val&&!this.showFlightEdit) {
this.changeflyLogStatus(false)
} else {
this.changeflyLogStatus(true)
}
}
}
}, },
created() { created() {
this.timeHandle = setInterval(() => { this.timeHandle = setInterval(() => {
...@@ -155,6 +137,13 @@ export default { ...@@ -155,6 +137,13 @@ export default {
"createAirwayEntities", "createAirwayEntities",
"clearAirwayEntities", "clearAirwayEntities",
]), ]),
// 改变飞行日志弹框状态
changeflyLogStatus(falg) {
this.$store.commit("MMCFlightControlCenter/setState", {
key: "flyLogStatus",
value: falg,
});
},
/** /**
* 更新任务列表 * 更新任务列表
*/ */
...@@ -224,13 +213,17 @@ export default { ...@@ -224,13 +213,17 @@ export default {
onOpenPlan(item) { onOpenPlan(item) {
this.selectedTask = item; this.selectedTask = item;
this.showFlightPlan = true; this.showFlightPlan = true;
this.showFlightEdit = false;
this.changeflyLogStatus(false)
}, },
/** /**
* 打开飞行编辑 * 打开飞行编辑
*/ */
onOpenEdit(item) { onOpenEdit(item) {
this.selectedTask = item; this.selectedTask = item;
this.showFlightPlan = false;
this.showFlightEdit = true; this.showFlightEdit = true;
this.changeflyLogStatus(false)
}, },
}, },
}; };
......
<template> <template>
<ControlRight <ControlRight ref="controlRight" isHangar @switchCallback="showHangar = false; showMonitor = false;">
ref="controlRight" <div slot="hangar" class="control-item" :class="showHangar ? 'active' : ''" @click="onSwitchShow('showHangar')">
isHangar
@switchCallback="showHangar = false; showMonitor = false;"
>
<div
slot="hangar"
class="control-item"
:class="showHangar ? 'active' : ''"
@click="onSwitchShow('showHangar')"
>
<img src="./assets/images/hangar.svg" /> <img src="./assets/images/hangar.svg" />
<span class="dib">机库</span> <span class="dib">机库</span>
</div> </div>
...@@ -21,25 +12,16 @@ ...@@ -21,25 +12,16 @@
<span class="dialog-header__close" @click="showHangar = false;">关闭</span> <span class="dialog-header__close" @click="showHangar = false;">关闭</span>
</div> </div>
<div class="hangar-ctrl-list"> <div class="hangar-ctrl-list">
<div <div class="hangar-ctrl-item" v-for="(item, i) in ctrlList" :key="i" @click="onClickCMD(i)">
class="hangar-ctrl-item"
v-for="(item, i) in ctrlList"
:key="i"
@click="onClickCMD(i)"
>
<SymbolIcon v-if="item.icon" :icon="item.icon" class="hangar-ctrl-item__icon" /> <SymbolIcon v-if="item.icon" :icon="item.icon" class="hangar-ctrl-item__icon" />
<img v-else :src="item.img" class="hangar-ctrl-item__icon" /> <img v-else :src="item.img" class="hangar-ctrl-item__icon" />
<div class="hangar-ctrl-item__title">{{item.label}}</div> <div class="hangar-ctrl-item__title">{{ item.label }}</div>
</div> </div>
</div> </div>
</div> </div>
<Logger class="logger" @exit="showLogger = false" v-if="showLogger"></Logger> <Logger class="logger" @exit="showLogger = false" v-if="showLogger"></Logger>
<HangarMonitor <HangarMonitor :uavMsg="uavRealTimeData.msg" :weatherStation="hangarRealTimeData.weatherStation"
:uavMsg="uavRealTimeData.msg" :hangarData="hangarRealTimeData" v-if="showMonitor"></HangarMonitor>
:weatherStation="hangarRealTimeData.weatherStation"
:hangarData="hangarRealTimeData"
v-if="showMonitor"
></HangarMonitor>
</div> </div>
</ControlRight> </ControlRight>
</template> </template>
...@@ -120,11 +102,21 @@ export default { ...@@ -120,11 +102,21 @@ export default {
}; };
}, },
computed: { computed: {
...mapState("MMCFlightControlCenter", ["showAirwayEdit"]), ...mapState("MMCFlightControlCenter", ["showAirwayEdit", "flyLogStatus"]),
...mapState("MMCFlightControlCenter/uav", ["uavRealTimeData"]), ...mapState("MMCFlightControlCenter/uav", ["uavRealTimeData"]),
...mapState("MMCFlightControlCenter/hangar", ["hangarRealTimeData"]), ...mapState("MMCFlightControlCenter/hangar", ["hangarRealTimeData"]),
}, },
watch: { watch: {
flyLogStatus: {
handler(val) {
if (val) {
this.showLogger = false
} else {
this.showLogger = true
}
},
immediate: true,
},
// 打开航线编辑时关闭所有窗口 // 打开航线编辑时关闭所有窗口
showAirwayEdit(newVal) { showAirwayEdit(newVal) {
if (newVal) { if (newVal) {
...@@ -150,7 +142,7 @@ export default { ...@@ -150,7 +142,7 @@ export default {
* 切换展示 * 切换展示
*/ */
async onSwitchShow(key) { async onSwitchShow(key) {
if(!await this.isTakeOver()){ if (!await this.isTakeOver()) {
this.$message.warning("请先接管设备"); this.$message.warning("请先接管设备");
return; return;
} }
...@@ -163,7 +155,7 @@ export default { ...@@ -163,7 +155,7 @@ export default {
* @param {number} i this.ctrlList被点击元素的索引 * @param {number} i this.ctrlList被点击元素的索引
*/ */
async onClickCMD(i) { async onClickCMD(i) {
if(!await this.isTakeOver()){ if (!await this.isTakeOver()) {
this.$message.warning("请先接管设备"); this.$message.warning("请先接管设备");
return; return;
} }
...@@ -221,8 +213,7 @@ export default { ...@@ -221,8 +213,7 @@ export default {
justify-content: space-between; justify-content: space-between;
height: 32px; height: 32px;
.hangar-ctrl-header__title { .hangar-ctrl-header__title {}
}
.hangar-ctrl-header__close { .hangar-ctrl-header__close {
font-size: 14px; font-size: 14px;
...@@ -234,6 +225,7 @@ export default { ...@@ -234,6 +225,7 @@ export default {
align-items: center; align-items: center;
} }
} }
.hangar-ctrl-list { .hangar-ctrl-list {
box-sizing: border-box; box-sizing: border-box;
padding: 8px 16px 14px; padding: 8px 16px 14px;
......
...@@ -85,6 +85,9 @@ export default { ...@@ -85,6 +85,9 @@ export default {
}, },
"manualControlStatus": { "manualControlStatus": {
handler(val) { handler(val) {
if (val) {
this.$message.success("手动模式已开启");
}
this.$store.commit("MMCFlightControlCenter/joystick/setState", { this.$store.commit("MMCFlightControlCenter/joystick/setState", {
key: "manualControlStatus", key: "manualControlStatus",
value: val, value: val,
...@@ -185,8 +188,11 @@ export default { ...@@ -185,8 +188,11 @@ export default {
this.$message.warning("请先接管设备"); this.$message.warning("请先接管设备");
return; return;
} }
this.$message.success("切换手动模式中请稍后!");
this.$store.dispatch("MMCFlightControlCenter/uav/modeManual", { this.$store.dispatch("MMCFlightControlCenter/uav/modeManual", {
callback: (isOk) => { callback: (isOk) => {
if (isOk) { }
isOk && (this.controlType = 1); isOk && (this.controlType = 1);
}, },
}); });
......
...@@ -110,10 +110,11 @@ ...@@ -110,10 +110,11 @@
<script> <script>
import dayjs from "dayjs"; import dayjs from "dayjs";
import { mapState } from "vuex"; import { mapState, mapActions } from "vuex";
import TakeOverRecords from "./components/takeOverRecords"; import TakeOverRecords from "./components/takeOverRecords";
import { System } from "../../../../../../api"; import { System } from "../../../../../../api";
export default { export default {
name: "ControlTop", name: "ControlTop",
components: { components: {
...@@ -339,6 +340,7 @@ export default { ...@@ -339,6 +340,7 @@ export default {
clearInterval(this.timeWeather); clearInterval(this.timeWeather);
}, },
methods: { methods: {
...mapActions("MMCFlightControlCenter/hangar", ["isTakeOver"]),
updateTime() { updateTime() {
this.date = dayjs().format("YYYY/MM/DD"); this.date = dayjs().format("YYYY/MM/DD");
this.time = dayjs().format("HH:mm:ss"); this.time = dayjs().format("HH:mm:ss");
...@@ -391,11 +393,8 @@ export default { ...@@ -391,11 +393,8 @@ export default {
*/ */
async onModeChange(data, flag) { async onModeChange(data, flag) {
// 查看是否有权限接管无人机 // 查看是否有权限接管无人机
let res = await this.$store.dispatch( if (!(await this.isTakeOver())) {
"MMCFlightControlCenter/uav/isTakeOver" this.$message.warning("请先接管设备");
);
// 判断当前状态 true为一接管
if (res == false) {
return; return;
} }
if (this.flightMode == "离线状态") { if (this.flightMode == "离线状态") {
......
...@@ -101,6 +101,14 @@ export default { ...@@ -101,6 +101,14 @@ export default {
}; };
}, },
watch: { watch: {
'scene': {
handler(newVal) {
if(newVal){
this.reset()
}
},
},
userInfo: { userInfo: {
immediate: true, immediate: true,
handler() { handler() {
...@@ -217,12 +225,12 @@ export default { ...@@ -217,12 +225,12 @@ export default {
} }
// 连接ws监听接管请求数据 // 连接ws监听接管请求数据
let url = Control_API.getWebsocketUrl(); let url = this.url.wsUrl
const socket = new WebSocket(url); let token = this.$store.state.MMCFlightControlCenter.token
const socket = new WebSocket(`${url}?token=${token}`);
this.ws = socket; this.ws = socket;
socket.onopen = function () { socket.onopen = function () {
console.log("Connected to WebSocket server");
}; };
socket.onmessage = (event) => { socket.onmessage = (event) => {
...@@ -254,7 +262,7 @@ export default { ...@@ -254,7 +262,7 @@ export default {
} else { } else {
this.$message.warning("操作失败"); this.$message.warning("操作失败");
} }
} catch (e) {} } catch (e) { }
}) })
.catch(async () => { .catch(async () => {
await Control_API.updateControlUav({ await Control_API.updateControlUav({
...@@ -308,7 +316,33 @@ export default { ...@@ -308,7 +316,33 @@ export default {
beforeDestroy() { beforeDestroy() {
this.ws.close(); this.ws.close();
}, },
methods: {}, methods: {
reset() {
let cesiumEl = document.querySelector(".cesium-viewer");
// 判断cesium的父元素是否是layer-container来确定当前是否已经切换, 未切换就退出
if(cesiumEl.parentElement.id === 'layer-container'){
return;
}
let cesiumParentEl = document.querySelector("#layer-container");
let uavParentEl = document.querySelector("#playerUavParent");
let uavEl = document.querySelector("#playerUav");
let innerParentEl = document.querySelector("#playInnerParent");
let innerEl = document.querySelector("#playInner");
let outParentEl = document.querySelector("#playOutParent");
let outEl = document.querySelector("#playerOuter");
cesiumParentEl.innerHTML = "";
uavParentEl.innerHTML = "";
innerParentEl.innerHTML = "";
outParentEl.innerHTML = "";
cesiumParentEl.append(cesiumEl);
uavParentEl.append(uavEl);
innerParentEl.append(innerEl);
outParentEl.append(outEl);
},
},
}; };
</script> </script>
...@@ -361,15 +395,18 @@ export default { ...@@ -361,15 +395,18 @@ export default {
color: #fff; color: #fff;
} }
} }
.el-dialog__body { .el-dialog__body {
color: #fff; color: #fff;
} }
} }
* { * {
/* 滚动条整体样式 */ /* 滚动条整体样式 */
&::-webkit-scrollbar { &::-webkit-scrollbar {
width: 4px; /* 滚动条宽度 */ width: 4px;
/* 滚动条宽度 */
} }
//滚动条轨道 //滚动条轨道
...@@ -387,6 +424,7 @@ export default { ...@@ -387,6 +424,7 @@ export default {
background: #222222; background: #222222;
border-radius: 10px 10px 0px 0px; border-radius: 10px 10px 0px 0px;
border: 0; border: 0;
.hd { .hd {
box-sizing: border-box; box-sizing: border-box;
padding-left: 0px; padding-left: 0px;
...@@ -408,6 +446,7 @@ export default { ...@@ -408,6 +446,7 @@ export default {
z-index: 1; z-index: 1;
background: #222222; background: #222222;
border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px;
.dialog-header { .dialog-header {
box-sizing: border-box; box-sizing: border-box;
padding-left: 32px; padding-left: 32px;
...@@ -438,14 +477,12 @@ export default { ...@@ -438,14 +477,12 @@ export default {
align-items: center; align-items: center;
font-size: 20px; font-size: 20px;
font-family: YouSheBiaoTiHei; font-family: YouSheBiaoTiHei;
background-image: -webkit-linear-gradient( background-image: -webkit-linear-gradient(right,
right, #e3aa77,
#e3aa77, #f5cda9,
#f5cda9, #f9ecd3,
#f9ecd3, #fcdbb1,
#fcdbb1, #edb07a);
#edb07a
);
-webkit-background-clip: text; -webkit-background-clip: text;
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
letter-spacing: 0; letter-spacing: 0;
...@@ -545,6 +582,7 @@ export default { ...@@ -545,6 +582,7 @@ export default {
} }
.el-input-number { .el-input-number {
.el-input-number__decrease, .el-input-number__decrease,
.el-input-number__increase { .el-input-number__increase {
bottom: 1px; bottom: 1px;
...@@ -572,6 +610,7 @@ export default { ...@@ -572,6 +610,7 @@ export default {
.popper__arrow::after { .popper__arrow::after {
border-bottom-color: #161d2d; border-bottom-color: #161d2d;
} }
// 所有下拉选择框样式 // 所有下拉选择框样式
&.el-select-dropdown { &.el-select-dropdown {
border: none; border: none;
...@@ -584,18 +623,17 @@ export default { ...@@ -584,18 +623,17 @@ export default {
.option.hover, .option.hover,
.option:hover { .option:hover {
background-image: linear-gradient( background-image: linear-gradient(90deg,
90deg, rgba(44, 135, 176, 0.7) 0%,
rgba(44, 135, 176, 0.7) 0%, rgba(26, 100, 139, 0.37) 51%,
rgba(26, 100, 139, 0.37) 51%, rgba(7, 61, 98, 0.7) 100%);
rgba(7, 61, 98, 0.7) 100%
);
font-family: MicrosoftYaHei; font-family: MicrosoftYaHei;
font-size: 12px; font-size: 12px;
color: #00f5ff; color: #00f5ff;
letter-spacing: 0; letter-spacing: 0;
font-weight: 400; font-weight: 400;
} }
.el-select-dropdown__item { .el-select-dropdown__item {
color: #fff; color: #fff;
...@@ -649,6 +687,7 @@ export default { ...@@ -649,6 +687,7 @@ export default {
&:not(.is-disabled):hover { &:not(.is-disabled):hover {
background: #4b4b4b; background: #4b4b4b;
} }
&:not(.is-disabled):focus { &:not(.is-disabled):focus {
background: #4b4b4b; background: #4b4b4b;
} }
...@@ -670,6 +709,7 @@ export default { ...@@ -670,6 +709,7 @@ export default {
.el-popper { .el-popper {
background: #222222; background: #222222;
} }
// 日期选择器组件 // 日期选择器组件
&.el-time-range-picker, &.el-time-range-picker,
&.el-date-range-picker, &.el-date-range-picker,
...@@ -756,6 +796,7 @@ export default { ...@@ -756,6 +796,7 @@ export default {
.el-pagination { .el-pagination {
text-align: center; text-align: center;
.el-pager li { .el-pager li {
background: transparent !important; background: transparent !important;
} }
......
...@@ -7,6 +7,7 @@ import { Utils } from "../lib/cesium"; ...@@ -7,6 +7,7 @@ import { Utils } from "../lib/cesium";
export default { export default {
namespaced: true, namespaced: true,
state: { state: {
flyLogStatus: false, //飞行日志状态
devMode: false, //开发模式, 使用开发环境接口 devMode: false, //开发模式, 使用开发环境接口
token: "", //登录token token: "", //登录token
TenantId: "", //租户id TenantId: "", //租户id
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论