From 4a82a5d060f96bb24433367ee3d5532f34ed88d6 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Wed, 09 Apr 2025 17:57:29 +0800
Subject: [PATCH] feat: 智引即飞80%

---
 src/views/Home/AINowFly.vue |   83 +++++++++++++++++++++++++++++++----------
 1 files changed, 62 insertions(+), 21 deletions(-)

diff --git a/src/views/Home/AINowFly.vue b/src/views/Home/AINowFly.vue
index b4f4d3e..a11981f 100644
--- a/src/views/Home/AINowFly.vue
+++ b/src/views/Home/AINowFly.vue
@@ -1,32 +1,35 @@
 <template>
 	<div class="AINowFly">
 		<div>智引即飞</div>
-		<div>
-			任务名称
-			<el-input type="text" v-model="params.taskName" />
-		</div>
-		<div>
-			关联算法:
-			<el-select v-model="params.ai_types" placeholder="请选择">
-				<el-option v-for="item in taskAlgorithm" :key="item.id" :label="item.dictValue" :value="item.dictKey" />
-			</el-select>
-		</div>
-		<div>
-			地址:
-			<el-input type="text" v-model="params.dz" />
-		</div>
-		<el-table :data="list">
+		<el-form ref="ruleFormRef" :model="params" :rules="rules" label-width="auto" size="small" status-icon>
+			<el-form-item label="任务名称" prop="taskName">
+				<el-input v-model="params.taskName" />
+			</el-form-item>
+			<el-form-item label="关联算法" prop="ai_types">
+				<el-select v-model="params.ai_types" placeholder="请选择">
+					<el-option v-for="item in taskAlgorithm" :key="item.id" :label="item.dictValue" :value="item.dictKey" />
+				</el-select>
+			</el-form-item>
+			<el-form-item label="地址" >
+				<el-input disabled type="text" v-model="di" />
+			</el-form-item>
+		</el-form>
+
+		<div>可用机巢列表</div>
+		<el-table :data="list" @selection-change="handleSelectionChange">
+			<el-table-column type="selection" width="55" />
 			<el-table-column type="index" label="序号" />
 			<el-table-column prop="nickname" label="机巢名称" />
 			<el-table-column prop="minute" label="预计飞行时长(分钟)" />
 			<el-table-column prop="exe_distance" label="预计飞行距离(m)" />
 		</el-table>
+		<el-button type="primary" @click="nowFly">迅速起飞</el-button>
 	</div>
 </template>
 <script setup>
 import { getMultipleDictionary } from '@/api/system/dictbiz'
 import * as Cesium from 'cesium'
-import { getFlyingNestBy } from '@/api/home/task'
+import { createTask, getFlyingNestBy } from '@/api/home/task'
 import { cartesian3Convert } from '@/utils/cesium/mapUtil'
 import { Cartesian3 } from 'cesium'
 import uavImg from '@/assets/images/home/useUavHome/uavImg.png'
@@ -34,18 +37,54 @@
 import lineImg from '@/assets/images/arrow-right-blue.png'
 import _ from 'lodash'
 import { ElMessage } from 'element-plus'
+import dayjs from 'dayjs'
+import { useStore } from 'vuex'
 
-const params = ref({
-	taskName: '',
+
+
+const now = dayjs().format('YYYY/MM/DD HH:mm')
+
+const paramsInit = {
+	taskName: `智引即飞 ${now}`,
 	ai_types: '',
-	dz: '',
+	longitude: '',
+	latitude: '',
+	dock_sns: [],
+}
+const params = ref(_.cloneDeep(paramsInit))
+const di = computed(() => params.value.longitude + ',' + params.value.latitude)
+
+
+const rules = ref({
+	taskName: [
+		{ required: true, message: '请输入任务名称', trigger: 'blur' },
+		{ min: 3, max: 50, message: '长度在 3 到 20 个字符', trigger: 'blur' },
+	],
+	ai_types: [{ required: true, message: '请选择算法', trigger: 'change' }],
 })
+
+const ruleFormRef = ref(null)
 let handler = null
 const taskAlgorithm = ref([])
 
 let viewer
 const list = ref([])
 let eventPoint = {}
+const store = useStore()
+const handleSelectionChange = val => {
+	params.value.dock_sns = val.map(item => item.device_sn)
+}
+
+const nowFly = async () => {
+	await ruleFormRef.value.validate()
+	if (!params.value.dock_sns.length) return ElMessage.warning('请选择将要飞行的机巢')
+	if (!params.value.longitude) return ElMessage.warning('请选择飞行的点')
+	if (params.value.dock_sns.length === 1){
+		store.commit('setSingleUavHome', { device_sn: params.value.dock_sns[0]})
+	}else{
+		store.commit('setFootActiveIndex', 0)
+	}
+}
 
 const renderingLine = () => {
 	const { longitude, latitude } = eventPoint
@@ -119,6 +158,7 @@
 	})
 	const { longitude, latitude } = cartesian3Convert(earthPosition, viewer)
 	eventPoint = { longitude, latitude }
+	params.value = {...params.value,longitude, latitude}
 	getFJList()
 }
 
@@ -133,8 +173,9 @@
 
 // 获取飞机列表
 const getFJList = async () => {
-	const params = { ...eventPoint, page: 1, limit: 9999, type: 1 }
-	const res = await getFlyingNestBy(params)
+	params.value.dock_sns = []
+	const getListParams = { ...eventPoint, page: 1, limit: 9999, type: 1 }
+	const res = await getFlyingNestBy(getListParams)
 	list.value = (res.data?.data || []).map(item => ({
 		...item,
 		minute: _.round(item.estimated_arrival_time / 60, 0),

--
Gitblit v1.9.3