提交 6a04cad8 作者: 翁进城

feat: 增加任务库

上级 fdc94ed2
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
:scene="scene" :scene="scene"
:useSTLAirway="useSTLAirway" :useSTLAirway="useSTLAirway"
:useTimedTask="useTimedTask" :useTimedTask="useTimedTask"
:useAirway="useAirway" :useTask="useTask"
@tokenInvalid="dispatchEvent('tokenInvalid')" @tokenInvalid="dispatchEvent('tokenInvalid')"
@refreshToken="dispatchEvent('refreshToken', $event)" @refreshToken="dispatchEvent('refreshToken', $event)"
@uavChange="dispatchEvent('uavChange', $event)" @uavChange="dispatchEvent('uavChange', $event)"
...@@ -50,7 +50,7 @@ export default { ...@@ -50,7 +50,7 @@ export default {
airwayPageChangeCB: null, //航线翻页时回调 airwayPageChangeCB: null, //航线翻页时回调
airwayGetCB: null, //获取航线数据回调 airwayGetCB: null, //获取航线数据回调
taskListGetCB: null, //获取任务数据回调 taskListGetCB: null, //获取任务数据回调
useAirway: true, //使用航线而不使用任务起飞 useTask: false, //使用任务进行航线选择
callbackList: {}, callbackList: {},
}; };
}, },
......
<template> <template>
<div class="taskListBox"> <div class="taskListBox">
<el-form class="task-main" label-width="70px"> <el-form class="task-main" label-width="70px">
<el-form-item label="任务库" v-if="useTask">
<el-select v-model="selectedTaskId" clearable>
<el-option v-for="(item , i) in taskList" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="航线选择"> <el-form-item label="航线选择">
<el-select v-model="selectedAirwayId"> <el-select v-model="selectedAirwayId">
<el-option v-for="(item , i) in airwayList" :label="item.name" :value="item.id"></el-option> <el-option v-for="(item , i) in airwayList" :label="item.name" :value="item.id"></el-option>
...@@ -32,16 +37,31 @@ export default { ...@@ -32,16 +37,31 @@ export default {
inject: ["rootNode", "bus"], inject: ["rootNode", "bus"],
data() { data() {
return { return {
//航线列表 airwayList: [], //航线列表
airwayList: [], selectedAirwayId: "", // 选择的航线
// 选择的航线 taskList: [], //任务列表
selectedAirwayId: "", selectedTaskId: "", //选择的任务
airwaySelectDisabled: false, //选择任务后, 禁用航线选择
}; };
}, },
computed: { computed: {
...mapState("MMCFlightControlCenter", ["cesiumViewer", "useSTLAirway"]), ...mapState("MMCFlightControlCenter", ["cesiumViewer", "useSTLAirway", "useTask"]),
...mapState("MMCFlightControlCenter/uav", ["uav", "uavRealTimeData"]), ...mapState("MMCFlightControlCenter/uav", ["uav", "uavRealTimeData"]),
...mapState("MMCFlightControlCenter/hangar", ["hangar"]), ...mapState("MMCFlightControlCenter/hangar", ["hangar"]),
// 选择的任务
selectedTask() {
let find = this.taskList.find((item) => {
return item.id == this.selectedTaskId;
});
if (find) {
return find;
} else {
return {
name: "",
id: -1,
};
}
},
showAirwayEdit: { showAirwayEdit: {
get() { get() {
return this.$store.state.MMCFlightControlCenter.showAirwayEdit; return this.$store.state.MMCFlightControlCenter.showAirwayEdit;
...@@ -69,6 +89,15 @@ export default { ...@@ -69,6 +89,15 @@ export default {
}, },
}, },
watch: { watch: {
selectedTask() {
if (this.selectedTask.id !== -1) {
this.airwaySelectDisabled = true;
} else {
this.airwaySelectDisabled = false;
}
// 任务改变则修改航线选择为任务中的航线
this.selectedAirwayId = this.selectedTask?.airwayId;
},
selectedAirway() { selectedAirway() {
this.clearAirwayEntities(); this.clearAirwayEntities();
if (this.selectedAirway.id !== -1) { if (this.selectedAirway.id !== -1) {
...@@ -81,55 +110,18 @@ export default { ...@@ -81,55 +110,18 @@ export default {
} catch (e) { } catch (e) {
console.log("绘制航线失败", e); console.log("绘制航线失败", e);
} }
} else {
if (this.selectedTaskId && this.selectedAirwayId == "") {
this.$message.warning("未找到相应的航线");
}
this.selectedAirwayId = "";
this.airwaySelectDisabled = false;
} }
}, },
}, },
async created() { async created() {
this.bus.$on("startTask", this.onStartTask); this.bus.$on("startTask", this.onStartTask);
/* if (this.useSTLAirway) { await this.getTaskList();
let res = await Control_API.getUavRouteList({
pageNo: 1,
pageSize: 100,
nestId: this.hangar.id,
});
if (res?.code === 0) {
let airwayList = [];
for (let i = 0; i < res.data.list.length; i++) {
let item = res.data.list[i];
let flightCourseJson;
try {
flightCourseJson = JSON.parse(item.flightCourseJson);
} catch (e) {
console.log(e);
}
// 转换成飞控中心能接受的数据协议
let content = flightCourseJson
? await this.$store.dispatch(
"MMCFlightControlCenter/apiPointsToFKZXPoints",
{
list: flightCourseJson?.linePointSaveReqVOS || [],
actionListKey: "pointActionSaveReqVOS",
}
)
: null;
airwayList.push({
name: item.flightName,
id: item.id,
content: content,
});
}
this.airwayList = airwayList;
}
} else {
this.rootNode.$emit("airwayListGet", {
pageNo: this.airwayData.pageNo,
pageSize: this.airwayData.pageSize,
callback: (data) => {
this.airwayList = airwayData?.records || [];
},
});
} */
await this.getAirwayList(); await this.getAirwayList();
// 获取正在飞行的航线 // 获取正在飞行的航线
console.log('当前飞行状态', this.uavRealTimeData?.isFlying); console.log('当前飞行状态', this.uavRealTimeData?.isFlying);
...@@ -154,7 +146,31 @@ export default { ...@@ -154,7 +146,31 @@ export default {
]), ]),
...mapActions("MMCFlightControlCenter/hangar", ["isTakeOver"]), ...mapActions("MMCFlightControlCenter/hangar", ["isTakeOver"]),
/** /**
* 更新任务列表 * 获取任务列表
*/
getTaskList(id) {
return new Promise((resolve) => {
console.log("getTaskList", this.taskListAll);
this.rootNode.$emit("taskListGet", {
pageNo: 1,
pageSize: 100,
type: 0,
isHangar: true,
hangar: null,
callback: (res) => {
this.taskList = res?.records || [];
this.$nextTick(() => {
if (id) {
this.selectedTaskId = id;
}
resolve();
});
},
});
});
},
/**
* 获取航线列表
*/ */
getAirwayList(id) { getAirwayList(id) {
return new Promise((resolve) => { return new Promise((resolve) => {
......
...@@ -21,7 +21,24 @@ ...@@ -21,7 +21,24 @@
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
:picker-options="pickerOptions" :picker-options="pickerOptions"
></el-date-picker> ></el-date-picker>
<el-select v-model="item.airwayId" size="mini" popper-class="mmc" placeholder="请选择航线"> <el-select
v-model="item.taskId"
clearable
size="mini"
popper-class="mmc"
@change="onTaskChange(item)"
placeholder="请选择任务"
v-if="useTask"
>
<el-option v-for="(item , i) in taskList" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select
v-model="item.airwayId"
size="mini"
popper-class="mmc"
placeholder="请选择航线"
:disabled="!!item.taskId"
>
<el-option :label="item1.name" :value="item1.id" v-for="(item1, index) in airwayList"></el-option> <el-option :label="item1.name" :value="item1.id" v-for="(item1, index) in airwayList"></el-option>
</el-select> </el-select>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
...@@ -57,7 +74,8 @@ export default { ...@@ -57,7 +74,8 @@ export default {
list: [ list: [
/* { /* {
time: '', time: '',
airwayId: '' airwayId: '',
taskId: '',
} */ } */
], ],
showMore: false, showMore: false,
...@@ -69,11 +87,12 @@ export default { ...@@ -69,11 +87,12 @@ export default {
}, },
airwayList: [], //航线列表 airwayList: [], //航线列表
confirmLoading: false, confirmLoading: false,
taskList: [], //任务列表
}; };
}, },
computed: { computed: {
...mapState("MMCFlightControlCenter/hangar", ["hangar"]), ...mapState("MMCFlightControlCenter/hangar", ["hangar"]),
...mapState("MMCFlightControlCenter", ["airwayEntities"]), ...mapState("MMCFlightControlCenter", ["airwayEntities", "useTask"]),
}, },
mounted() { mounted() {
this.rootNode.$emit("airwayListGet", { this.rootNode.$emit("airwayListGet", {
...@@ -84,6 +103,17 @@ export default { ...@@ -84,6 +103,17 @@ export default {
this.airwayList = data?.records || []; this.airwayList = data?.records || [];
}, },
}); });
this.rootNode.$emit("taskListGet", {
pageNo: 1,
pageSize: 100,
type: 1,
isHangar: true,
hangar: null,
callback: (res) => {
this.taskList = res?.records || [];
},
});
}, },
methods: { methods: {
...mapActions("MMCFlightControlCenter", [ ...mapActions("MMCFlightControlCenter", [
...@@ -168,6 +198,29 @@ export default { ...@@ -168,6 +198,29 @@ export default {
}); // 根节点发送机库任务新增事件 }); // 根节点发送机库任务新增事件
} }
}, },
/**
* 任务更改事件
*/
onTaskChange(item) {
let find = this.taskList.find((item1) => {
return item1.id == item.taskId;
});
if (find) {
let findAirway = this.airwayList.find((item1) => {
return item1.id === find.airwayId;
});
if (findAirway) {
item.airwayId = find.airwayId;
return;
}
}
// 找不到航线
item.airwayId = "";
item.taskId = "";
this.$message.warning("未找到相应的航线");
},
}, },
}; };
</script> </script>
...@@ -178,7 +231,7 @@ export default { ...@@ -178,7 +231,7 @@ export default {
position: absolute; position: absolute;
top: -5px; top: -5px;
left: 550px; left: 550px;
width: 520px; min-width: 520px;
z-index: 1; z-index: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
......
...@@ -7,8 +7,13 @@ ...@@ -7,8 +7,13 @@
</div> </div>
</div> </div>
<el-form class="task-main" label-width="70px"> <el-form class="task-main" label-width="70px">
<el-form-item label="任务库" v-if="useTask">
<el-select v-model="selectedTaskId" clearable>
<el-option v-for="(item , i) in taskList" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="航线选择"> <el-form-item label="航线选择">
<el-select v-model="selectedAirwayId"> <el-select v-model="selectedAirwayId" :disabled="airwaySelectDisabled" clearable>
<el-option v-for="(item , i) in airwayList" :label="item.name" :value="item.id"></el-option> <el-option v-for="(item , i) in airwayList" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -38,15 +43,30 @@ export default { ...@@ -38,15 +43,30 @@ export default {
inject: ["rootNode", "bus"], inject: ["rootNode", "bus"],
data() { data() {
return { return {
//航线列表 airwayList: [], //航线列表
airwayList: [], selectedAirwayId: "", // 选择的航线
// 选择的航线 taskList: [], //任务列表
selectedAirwayId: "", selectedTaskId: "", //选择的任务
airwaySelectDisabled: false, //选择任务后, 禁用航线选择
}; };
}, },
computed: { computed: {
...mapState("MMCFlightControlCenter", ["cesiumViewer", "useSTLAirway"]), ...mapState("MMCFlightControlCenter", ["cesiumViewer", "useSTLAirway", "useTask"]),
...mapState("MMCFlightControlCenter/uav", ["uav"]), ...mapState("MMCFlightControlCenter/uav", ["uav"]),
// 选择的任务
selectedTask() {
let find = this.taskList.find((item) => {
return item.id == this.selectedTaskId;
});
if (find) {
return find;
} else {
return {
name: "",
id: -1,
};
}
},
// 选择的航线 // 选择的航线
selectedAirway() { selectedAirway() {
let find = this.airwayList.find((item) => { let find = this.airwayList.find((item) => {
...@@ -91,6 +111,15 @@ export default { ...@@ -91,6 +111,15 @@ export default {
this.listCollapse = true; this.listCollapse = true;
} }
}, },
selectedTask() {
if (this.selectedTask.id !== -1) {
this.airwaySelectDisabled = true;
} else {
this.airwaySelectDisabled = false;
}
// 任务改变则修改航线选择为任务中的航线
this.selectedAirwayId = this.selectedTask?.airwayId;
},
selectedAirway() { selectedAirway() {
this.clearAirwayEntities(); this.clearAirwayEntities();
if (this.selectedAirway.id !== -1) { if (this.selectedAirway.id !== -1) {
...@@ -104,15 +133,23 @@ export default { ...@@ -104,15 +133,23 @@ export default {
} catch (e) { } catch (e) {
console.log("绘制航线失败", e); console.log("绘制航线失败", e);
} }
} else {
if (this.selectedTaskId && this.selectedAirwayId == "") {
this.$message.warning("未找到相应的航线");
}
this.selectedAirwayId = "";
this.airwaySelectDisabled = false;
} }
}, },
}, },
async created() { async created() {
this.bus.$on("startTask", this.onStartTask); this.bus.$on("startTask", this.onStartTask);
this.bus.$on("refreshAirway", this.getAirwayList); this.bus.$on("refreshAirway", this.getAirwayList);
await this.getTaskList();
await this.getAirwayList(); await this.getAirwayList();
// 获取正在飞行的航线 // 获取正在飞行的航线
console.log("当前飞行状态", this.uavRealTimeData?.isFlying); console.log("当前飞行状态", this.uavRealTimeData?.isFlying);
console.log(this.useTask);
if (this.uav && this.uavRealTimeData?.isFlying) { if (this.uav && this.uavRealTimeData?.isFlying) {
let res = await TaskInfo.getTaskInfoRecord({ let res = await TaskInfo.getTaskInfoRecord({
deviceId: this.uav.deviceId, deviceId: this.uav.deviceId,
...@@ -142,7 +179,28 @@ export default { ...@@ -142,7 +179,28 @@ export default {
]), ]),
...mapActions("MMCFlightControlCenter/uav", ["isTakeOver"]), ...mapActions("MMCFlightControlCenter/uav", ["isTakeOver"]),
/** /**
* 更新任务列表 * 获取任务列表
*/
getTaskList(id) {
return new Promise((resolve) => {
console.log("getTaskList", this.taskListAll);
this.rootNode.$emit("taskListGet", {
pageNo: 1,
pageSize: 100,
callback: (res) => {
this.taskList = res?.records || [];
this.$nextTick(() => {
if (id) {
this.selectedTaskId = id;
}
resolve();
});
},
});
});
},
/**
* 获取航线列表
*/ */
getAirwayList(id) { getAirwayList(id) {
return new Promise((resolve) => { return new Promise((resolve) => {
...@@ -209,7 +267,7 @@ export default { ...@@ -209,7 +267,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.taskListBox { .taskListBox {
height: 200px; min-height: 200px;
width: 416px; width: 416px;
background: #222222; background: #222222;
border-radius: 12px; border-radius: 12px;
......
...@@ -4,28 +4,24 @@ ...@@ -4,28 +4,24 @@
<img class="left-bar-item__icon" src="./assets/images/task.svg" /> <img class="left-bar-item__icon" src="./assets/images/task.svg" />
<div class="left-bar-item__text">任务</div> <div class="left-bar-item__text">任务</div>
</div> </div>
<TaskList class="task-list" v-if="!useAirway && openTask"></TaskList> <AirwayList class="task-list"></AirwayList>
<AirwayList class="task-list" v-if="useAirway && openTask"></AirwayList>
<VideoMapSwitch ref="videoMapSwitch"></VideoMapSwitch> <VideoMapSwitch ref="videoMapSwitch"></VideoMapSwitch>
</div> </div>
</template> </template>
<script> <script>
import { mapState } from "vuex"; import { mapState } from "vuex";
import TaskList from "./components/taskList";
import AirwayList from "./components/airwayList"; import AirwayList from "./components/airwayList";
import VideoMapSwitch from './components/videoMapSwitch'; import VideoMapSwitch from './components/videoMapSwitch';
export default { export default {
name: "ControlLeft", name: "ControlLeft",
components: { components: {
TaskList,
AirwayList, AirwayList,
VideoMapSwitch VideoMapSwitch
}, },
data() { data() {
return { return {
openTask: true, //打开任务
openAIList: false, //打开AI列表 openAIList: false, //打开AI列表
openTraffic: false, //打开交通指引 openTraffic: false, //打开交通指引
openFace: false, //打开人脸识别 openFace: false, //打开人脸识别
...@@ -34,7 +30,7 @@ export default { ...@@ -34,7 +30,7 @@ export default {
}; };
}, },
computed: { computed: {
...mapState("MMCFlightControlCenter", ["useAirway"]), ...mapState("MMCFlightControlCenter", []),
...mapState("MMCFlightControlCenter/uav", ["uav"]), ...mapState("MMCFlightControlCenter/uav", ["uav"]),
// 收起列表按钮 // 收起列表按钮
listCollapse: { listCollapse: {
......
...@@ -68,10 +68,11 @@ export default { ...@@ -68,10 +68,11 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
// 使用航线而不使用任务起飞 // useAirway
useAirway: { // 使用任务
useTask: {
type: Boolean, type: Boolean,
default: true, default: false,
}, },
userInfo: { userInfo: {
type: Object, type: Object,
...@@ -170,11 +171,11 @@ export default { ...@@ -170,11 +171,11 @@ export default {
}); });
}, },
}, },
useAirway: { useTask: {
immediate: true, immediate: true,
handler(newVal) { handler(newVal) {
this.$store.commit("MMCFlightControlCenter/setState", { this.$store.commit("MMCFlightControlCenter/setState", {
key: "useAirway", key: "useTask",
value: newVal, value: newVal,
}); });
}, },
...@@ -520,7 +521,7 @@ export default { ...@@ -520,7 +521,7 @@ export default {
.el-select-dropdown__empty { .el-select-dropdown__empty {
background: #02173d; background: #02173d;
border: 1px solid #315ec7; border: 1px solid #4b4b4b;
} }
} }
......
...@@ -24,17 +24,16 @@ export default { ...@@ -24,17 +24,16 @@ export default {
return this.mountCtrlList[this.selectMount?.gimbalName]; return this.mountCtrlList[this.selectMount?.gimbalName];
}, },
}, },
inject: ["uav_mqtt_fn"],
watch: { watch: {
str: function (val) { str: function (val) {
this.uav_mqtt_fn( this.$store.dispatch("MMCMQTT/publish", {
{ topic: "PX4/OBTAIN/" + this.uav.deviceId,
data: {
type: 513, type: 513,
data: val, data: val,
}, },
"wrj", callback() {},
this.uav.control.device });
);
}, },
}, },
beforeDestroy() { beforeDestroy() {
...@@ -51,9 +50,7 @@ export default { ...@@ -51,9 +50,7 @@ export default {
let topic = `${uavCate}/OBTAIN/${this.uav.deviceId}`; let topic = `${uavCate}/OBTAIN/${this.uav.deviceId}`;
this.wsJoystick = new WebSocket("ws://127.0.0.1:8802"); this.wsJoystick = new WebSocket("ws://127.0.0.1:8802");
this.wsJoystick.onopen = () => { this.wsJoystick.onopen = () => {
console.log( console.log("joystick.js 连接上 ws://127.0.0.1:8802");
"joystick.js 连接上 ws://127.0.0.1:8802"
);
this.wsJoystick.send( this.wsJoystick.send(
JSON.stringify({ JSON.stringify({
type: 2003, type: 2003,
...@@ -75,17 +72,14 @@ export default { ...@@ -75,17 +72,14 @@ export default {
if (obj.type == 518) { if (obj.type == 518) {
} }
let data = JSON.parse(event.currentTarget.result).data; let data = JSON.parse(event.currentTarget.result).data;
window.$log( window.$log("joystick.js message", data);
"joystick.js message",
data
);
let y = data.channel03; //油门值 0-1000 let y = data.channel03; //油门值 0-1000
// console.log(data.channel03,data,"yyyyyyyy"); // console.log(data.channel03,data,"yyyyyyyy");
if (y || y == 0) { if (y || y == 0) {
this.$store.commit("MMCFlightControlCenter/joystick/setState", { this.$store.commit("MMCFlightControlCenter/joystick/setState", {
key: 'throttleValue', key: "throttleValue",
value: y value: y,
}); });
} }
if (this.mountCtrl) { if (this.mountCtrl) {
......
...@@ -41,7 +41,7 @@ export default { ...@@ -41,7 +41,7 @@ export default {
airwayEntities: [], //航线实体集合, 元素为new Cesium.EntityCollection()创建 airwayEntities: [], //航线实体集合, 元素为new Cesium.EntityCollection()创建
useSTLAirway: true, //是否使用标准航线库 useSTLAirway: true, //是否使用标准航线库
useTimedTask: false, //是否使用定时任务 useTimedTask: false, //是否使用定时任务
useAirway: true, //使用航线而不使用任务起飞 useTask: false, //使用任务进行航线选择
baseUrl: '', //api请求的base url baseUrl: '', //api请求的base url
wsUrl: '', //websocket的url wsUrl: '', //websocket的url
mqttUrl: '', //无人机的mqtt地址 mqttUrl: '', //无人机的mqtt地址
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论