import { message } from 'ant-design-vue' import request, { IPage, IWorkspaceResponse, IListWorkspaceResponse } from '/@/api/http/request' import { TaskType, TaskStatus, OutOfControlAction } from '/@/types/task' import { WaylineType } from '/@/types/wayline' const HTTP_PREFIX = '/wayline/api/v1' // Get Wayline Files export const getWaylineFiles = async function (wid: string, body: {}): Promise> { const url = `${HTTP_PREFIX}/workspaces/${wid}/waylines?order_by=${body.order_by}&page=${body.page}&page_size=${body.page_size}` const result = await request.get(url) return result.data } // Download Wayline File export const downloadWaylineFile = async function (workspaceId: string, waylineId: string): Promise { const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/waylines/${waylineId}/url` const result = await request.get(url, { responseType: 'blob' }) if (result.data.type === 'application/json') { const reader = new FileReader() reader.onload = function (e) { const text = reader.result as string const result = JSON.parse(text) message.error(result.message) } reader.readAsText(result.data, 'utf-8') } else { return result.data } } // Delete Wayline File export const deleteWaylineFile = async function (workspaceId: string, waylineId: string): Promise> { const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/waylines/${waylineId}` const result = await request.delete(url) return result.data } export interface CreatePlan { name: string, file_id: string, dock_sn: string, task_type: TaskType, // 任务类型 wayline_type: WaylineType, // 航线类型 task_days: number[] // 执行任务的日期(秒) task_periods: number[][] // 执行任务的时间点(秒) rth_altitude: number // 相对机场返航高度 20 - 500 out_of_control_action: OutOfControlAction // 失控动作 min_battery_capacity?: number, // The minimum battery capacity of aircraft. min_storage_capacity?: number, // The minimum storage capacity of dock and aircraft. } // Create Wayline Job export const createPlan = async function (workspaceId: string, plan: CreatePlan): Promise> { const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/flight-tasks` const result = await request.post(url, plan) return result.data } export interface Task { job_id: string, job_name: string, task_type: TaskType, // 任务类型 file_id: string, // 航线文件id file_name: string, // 航线名称 wayline_type: WaylineType, // 航线类型 dock_sn: string, dock_name: string, workspace_id: string, username: string, begin_time: string, end_time: string, execute_time: string, completed_time: string, status: TaskStatus, // 任务状态 progress: number, // 执行进度 code: number, // 错误码 rth_altitude: number // 相对机场返航高度 20 - 500 out_of_control_action: OutOfControlAction // 失控动作 media_count: number // 媒体数量 uploading:boolean // 是否正在上传媒体 uploaded_count: number // 已上传媒体数量 } // Get Wayline Jobs export const getWaylineJobs = async function (workspaceId: string, page: IPage): Promise> { const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/jobs?page=${page.page}&page_size=${page.page_size}` const result = await request.get(url) return result.data } export interface DeleteTaskParams { job_id: string } // 删除机场任务 export async function deleteTask (workspaceId: string, params: DeleteTaskParams): Promise> { const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/jobs` const result = await request.delete(url, { params: params }) return result.data } export enum UpdateTaskStatus { Suspend = 0, // 暂停 Resume = 1, // 恢复 } export interface UpdateTaskStatusBody { job_id: string status: UpdateTaskStatus } // 更新机场任务状态 export async function updateTaskStatus (workspaceId: string, body: UpdateTaskStatusBody): Promise> { const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/jobs/${body.job_id}` const result = await request.put(url, { status: body.status }) return result.data } // Upload Wayline file export const importKmzFile = async function (workspaceId: string, file: {}): Promise> { const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/waylines/file/upload` const result = await request.post(url, file, { headers: { 'Content-Type': 'multipart/form-data', } }) return result.data } // 媒体立即上传 export const uploadMediaFileNow = async function (workspaceId: string, jobId: string): Promise> { const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/jobs/${jobId}/media-highest` const result = await request.post(url) return result.data }