You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
4.8 KiB
139 lines
4.8 KiB
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<IWorkspaceResponse<any>> { |
|
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<any> { |
|
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<IWorkspaceResponse<any>> { |
|
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<IWorkspaceResponse<any>> { |
|
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<IListWorkspaceResponse<Task>> { |
|
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<IWorkspaceResponse<{}>> { |
|
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<IWorkspaceResponse<{}>> { |
|
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<IWorkspaceResponse<any>> { |
|
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<IWorkspaceResponse<{}>> { |
|
const url = `${HTTP_PREFIX}/workspaces/${workspaceId}/jobs/${jobId}/media-highest` |
|
const result = await request.post(url) |
|
return result.data |
|
}
|
|
|