提交 22b730b2 作者: 温凯

fix:切换摇杆为手动时,权限变成内场权限

上级 281fe7c3
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<span class="dib">任务结束</span> <span class="dib">任务结束</span>
</div> </div>
<template v-if="uav.network === 2"> <template v-if="uav.network === 2">
<div v-if="controlType === 0" class="control-bottom-item" @click="onModeManual"> <div v-if="controlType === 0" class="control-bottom-item" @click="onInfieldControl">
<img src="./assets/images/auto.svg" /> <img src="./assets/images/auto.svg" />
<span class="dib">自动</span> <span class="dib">自动</span>
</div> </div>
...@@ -44,6 +44,20 @@ ...@@ -44,6 +44,20 @@
</template> </template>
<!-- 键盘控制 --> <!-- 键盘控制 -->
<KeyControl v-if="controlType === 2" @close="onModeAuto"></KeyControl> <KeyControl v-if="controlType === 2" @close="onModeAuto"></KeyControl>
<!-- 强制切换外场权限 -->
<el-dialog title :visible.sync="showInfieldControlDialog" width="30%" :append-to-body="true" custom-class="mmc"
style="margin-top: 20vh">
<div class="endrenwu">
<div class="tishiyu">温馨提示</div>
<div class="queding" v-if="!isAcceleratorMedian">
当前油门值为
<span style="color: red">{{ throttleValue.toFixed(2) || 0 }}</span>,请调到中位(470-530)
</div>
<div class="queding" v-if="isAcceleratorMedian">
摇杆已处于中位,即将切换内场权限
</div>
</div>
</el-dialog>
</div> </div>
</template> </template>
...@@ -69,17 +83,65 @@ export default { ...@@ -69,17 +83,65 @@ export default {
}, },
data() { data() {
return { return {
showInfieldControlDialog: false, //强制切换状态为内场权限 提示框
isAcceleratorMedian: false, //油门是否在中位
YGPermissionsSend: false, //摇杆权限更改中
// 摇杆手动控制状态 // 摇杆手动控制状态
manualControlStatus: false, manualControlStatus: false,
controlType: 0, //控制类型, 0: 自动 1: 摇杆 2: 键盘 controlType: 0, //控制类型, 0: 自动 1: 摇杆 2: 键盘
}; };
}, },
watch: { watch: {
// 状态改变时摇杆会切换为手动模式 // 状态改变时摇杆会切换为手动模式并且抢权限
"onModeManualState": { "onInfieldControlFn": {
handler(val) { handler(val) {
if (val) { if (val) {
this.onModeManual() this.onInfieldControl()
}
}
},
throttleValue(val) {
// val = -1 代表摇杆已经建立连接 ,rcState为0 代表当前权限在外场需要去展示摇杆油门值
if (val == -1 &&this.uavRealTimeData.rcState == 0) {
this.showInfieldControlDialog = true;
}
// 判断是否为外场权限
if (this.uavRealTimeData.rcState == 0) {
// 判断油门是否处于中位
if (val >= 470 && val <= 530) {
console.log(this.uavRealTimeData, val, 'val');
this.isAcceleratorMedian = true;
if (!this.YGPermissionsSend) {
this.YGPermissionsSend = true;
// 发送抢权限指令
this.$store.dispatch(
"MMCFlightControlCenter/uav/changeYGPermissions",
{
callback: () => { },
}
);
setTimeout(() => {
if (this.uavRealTimeData.rcState == 1) {
// 摇杆切换为手动模式
if (!this.manualControlStatus) {
this.$message.success("已切换内场权限,摇杆即将切换为手动模式!");
// 切换为是手动模式
this.onModeManual();
} else {
this.$message.success("已切换内场权限,请使用摇杆控制!");
}
this.showInfieldControlDialog = false;
} else {
// this.$message.error("摇杆权限切换失败");
console.log("摇杆权限切换失败");
}
this.YGPermissionsSend = false;
}, 2000);
}
} else {
this.isAcceleratorMedian = false;
} }
} }
}, },
...@@ -97,10 +159,51 @@ export default { ...@@ -97,10 +159,51 @@ export default {
immediate: true, immediate: true,
}, },
computed: { computed: {
...mapState("MMCFlightControlCenter/uav", ["uav", "airlineData"]), ...mapState("MMCFlightControlCenter/uav", ["uav", "airlineData", "uavRealTimeData"]),
...mapState("MMCFlightControlCenter/joystick", ["onModeManualState"]), ...mapState("MMCFlightControlCenter/joystick", ["onInfieldControlFn", "throttleValue"]),
}, },
methods: { methods: {
network() {
let { uavRealTimeData } = this;
let name = null;
if (uavRealTimeData && uavRealTimeData.link) {
for (let i = 0; i < uavRealTimeData.link.length; i++) {
const k = uavRealTimeData.link[i];
if (k.priority == 2 && k.using) {
return "专网";
} else if (k.priority == 3 && k.using) {
return "公网";
} else if (k.priority == 1 && k.using) {
return "图传";
}
}
}
return name || "离线";
},
async onInfieldControl() {
// 判断是否已接管
if (!(await this.isTakeOver())) {
this.$message.warning("请先接管设备");
return;
}
let networkType = this.network()
if (networkType == '离线') {
return this.$message.info('无人机不在线!');
}
// 如果是内场权限 且摇杆为手动模式就提示用户使用
if (this.uavRealTimeData.rcState == 1 && this.manualControlStatus) {
this.$message.success("当前处于内场模式,请使用摇杆控制!");
} else {
// 否则如果摇杆是手动模式没内场权限,则展示油门弹窗,油门值为中位时发起抢权限指令
if (this.manualControlStatus) {
this.showInfieldControlDialog = true;
} else {
this.$message.success("摇杆即将切换为手动模式,请稍等!");
// 切换为手动模式
this.onModeManual();
}
}
},
/** /**
* 接管判断, 机库模块中不需要判断接管 * 接管判断, 机库模块中不需要判断接管
*/ */
...@@ -189,7 +292,6 @@ export default { ...@@ -189,7 +292,6 @@ export default {
return; return;
} }
this.$message.success("切换手动模式中请稍后!");
this.$store.dispatch("MMCFlightControlCenter/uav/modeManual", { this.$store.dispatch("MMCFlightControlCenter/uav/modeManual", {
callback: (isOk) => { callback: (isOk) => {
if (isOk) { } if (isOk) { }
...@@ -344,4 +446,43 @@ export default { ...@@ -344,4 +446,43 @@ export default {
} }
} }
} }
.el-dialog__header {
margin-left: 0;
padding: 0;
background: #3c3c3c;
}
.el-dialog__body {
padding: 0;
z-index: 2023 !important;
}
.el-dialog {
z-index: 2022 !important;
background: transparent !important;
}
.endrenwu {
width: 100%;
height: 177px;
border: 1px solid #70daf9;
background: rgba(9, 32, 87, 0.7) !important;
}
.tishiyu {
color: #92d9ff;
font-size: 18px;
margin: 30px 0 0 0;
text-align: center;
width: 100%;
}
.queding {
color: #92d9ff;
text-align: center;
width: 100%;
font-size: 14px;
margin: 30px 0 0 0;
}
</style> </style>
\ No newline at end of file
...@@ -73,27 +73,7 @@ ...@@ -73,27 +73,7 @@
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<!-- 强制切换外场权限 -->
<el-dialog
title
:visible.sync="showInfieldControlDialog"
width="30%"
:append-to-body="true"
custom-class="mmc"
style="margin-top: 20vh"
>
<div class="endrenwu">
<div class="tishiyu">温馨提示</div>
<div class="queding" v-if="!isAcceleratorMedian">
当前油门值为
<span style="color: red">{{ throttleValue.toFixed(2) || 0 }}</span
>,请调到中位(470-530)
</div>
<div class="queding" v-if="isAcceleratorMedian">
摇杆已处于中位,即将切换内场权限
</div>
</div>
</el-dialog>
<el-dialog <el-dialog
title title
:visible.sync="guideFlightShow" :visible.sync="guideFlightShow"
...@@ -159,11 +139,11 @@ export default { ...@@ -159,11 +139,11 @@ export default {
}, },
data() { data() {
return { return {
isAcceleratorMedian: false, //油门是否在中位 // isAcceleratorMedian: false, //油门是否在中位
YGPermissionsSend: false, //摇杆权限更改中 // YGPermissionsSend: false, //摇杆权限更改中
safetyNotice: false, //安全降落弹框 safetyNotice: false, //安全降落弹框
chargerPower: true, chargerPower: true,
showInfieldControlDialog: false, //强制切换状态为内场权限 提示框
flySpeed: 6, //指点飞行设置 flySpeed: 6, //指点飞行设置
maxSpeed: false, maxSpeed: false,
showLogger: false, //显示日志 showLogger: false, //显示日志
...@@ -182,53 +162,9 @@ export default { ...@@ -182,53 +162,9 @@ export default {
]), ]),
...mapState("MMCFlightControlCenter", ["userInfo", "cesiumViewer"]), ...mapState("MMCFlightControlCenter", ["userInfo", "cesiumViewer"]),
...mapState("MMCFlightControlCenter/joystick", [ ...mapState("MMCFlightControlCenter/joystick", [
"throttleValue",
"manualControlStatus", "manualControlStatus",
]), ]),
}, },
watch: {
throttleValue(val) {
if (val == -1) {
this.showInfieldControlDialog = true;
}
// 判断是否为外场权限
if (this.uavRealTimeData.rcState == 0) {
// 判断油门是否处于中位
if (val >= 470 && val <= 530) {
this.isAcceleratorMedian = true;
if (!this.YGPermissionsSend) {
this.YGPermissionsSend = true;
// 发送抢权限指令
this.$store.dispatch(
"MMCFlightControlCenter/uav/changeYGPermissions",
{
callback: () => {},
}
);
setTimeout(() => {
if (this.uavRealTimeData.rcState == 1) {
// 摇杆切换为手动模式
if (!this.manualControlStatus) {
this.$message.success("已切换内场权限,摇杆即将切换为手动模式!");
this.changeModeManualState();
}else{
this.$message.success("已切换内场权限,请使用摇杆控制!");
}
this.showInfieldControlDialog = false;
} else {
// this.$message.error("摇杆权限切换失败");
console.log("摇杆权限切换失败");
}
this.YGPermissionsSend = false;
}, 2000);
}
} else {
this.isAcceleratorMedian = false;
}
}
},
},
beforeDestroy() { beforeDestroy() {
if (Point) { if (Point) {
window.viewer.entities.remove(Point); window.viewer.entities.remove(Point);
...@@ -313,9 +249,9 @@ export default { ...@@ -313,9 +249,9 @@ export default {
this.safetyNotice = false; this.safetyNotice = false;
this.land(); this.land();
}, },
changeModeManualState() { changeOnInfieldControlFn() {
this.$store.commit("MMCFlightControlCenter/joystick/setState", { this.$store.commit("MMCFlightControlCenter/joystick/setState", {
key: "onModeManualState", key: "onInfieldControlFn",
value: new Date().getTime(), value: new Date().getTime(),
}); });
}, },
...@@ -323,24 +259,7 @@ export default { ...@@ -323,24 +259,7 @@ export default {
* 内场控制 * 内场控制
*/ */
async onInfieldControl() { async onInfieldControl() {
// 判断是否已接管 this.changeOnInfieldControlFn()
if (!(await this.isTake())) {
return;
}
if (this.online === 0)
return this.$message.warning("处于离线状态,不可操作!");
// 自动切换摇杆权限
if (this.uavRealTimeData.rcState == 1) {
this.$message.success("当前处于内场模式,请使用摇杆控制!");
} else {
// 如果摇杆是手动模式,则展示油门弹窗
if (this.manualControlStatus) {
this.showInfieldControlDialog = true;
} else {
this.$message.success("摇杆即将切换为手动模式,请稍等!");
this.changeModeManualState();
}
}
}, },
/** /**
* cesium添加目标点 * cesium添加目标点
......
const state = { const state = {
throttleValue: 0, //油门值 throttleValue: 0, //油门值
manualControlStatus: false, //是否手动控制 manualControlStatus: false, //是否手动控制
onModeManualState:null, //状态改变时摇杆会切换为手动模式 onInfieldControlFn:null, //状态改变时摇杆会切换为手动模式并抢权限
}; };
const mutations = { const mutations = {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论