forked from drone/command-center-dashboard

罗广辉
2025-04-09 4a82a5d060f96bb24433367ee3d5532f34ed88d6
feat: 智引即飞80%
1 files modified
83 ■■■■ changed files
src/views/Home/AINowFly.vue 83 ●●●● patch | view | raw | blame | history
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),