提交 6a04cad8 作者: 翁进城

feat: 增加任务库

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