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 = '/api/drone'
|
|
// Get Wayline Files
|
export const getWaylineFiles = async function (params:any): Promise<IWorkspaceResponse<any>> {
|
const url = `${HTTP_PREFIX}/waylineFile/getList`
|
const result = await request.get(url, { params })
|
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 waylineJob {
|
name: string
|
fileId: string
|
waylineId:string
|
dockSn: string
|
workspaceId: string
|
taskType: TaskType
|
executeSingleTime?: string
|
repeatExecuteTimeArr?: string[]
|
executeStartTime?: string
|
executeEndTime?: string
|
executeRepeatTime?: string[]
|
frequencyValue?: number
|
frequencyType?: number
|
repeatRuleType?: number
|
repeatRuleValueDay?: number[]
|
repeatRuleValueWeek?: number[]
|
startPower: number
|
rthAltitude: number
|
outOfControl: number
|
finishAction: number
|
breakContinue: number
|
}
|
|
// 新增计划
|
export const createPlan = async function (plan:any): Promise<IWorkspaceResponse<any>> {
|
const url = `${HTTP_PREFIX}/waylineJob/add`
|
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 // 已上传媒体数量
|
}
|
|
// 获取计划列表(分页)
|
export const getWaylineJobs = async function (workspaceId: string, page: IPage): Promise<IListWorkspaceResponse<Task>> {
|
const url = `${HTTP_PREFIX}/waylineJob/getPage`
|
const result = await request.get(url, { params: { workspaceId } })
|
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}/waylineFile/upload`
|
const result = await request.post(url, file, {
|
params: {
|
projectId: workspaceId
|
},
|
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
|
}
|