Files
Migu2.0/frontends/apps/simple-platform-vue/src/api/ota.ts
T
wei.wu 1f72488a8d 新增车辆表及OTA权限与逻辑优化
新增车辆任务与报警表,完善实体与DbContext配置。细化OTA权限校验,增强回传会话IP安全。优化OTA上传与设置面板,调度器支持重启恢复。报警采集逻辑支持历史分段。
2026-07-27 15:12:14 +08:00

122 lines
3.7 KiB
TypeScript

import http from './http'
import type {
OtaJob,
OtaPackageInfo,
OtaSettings,
OtaTarget,
OtaVehicleRow
} from '@/types/ota'
export async function getOtaSettings(): Promise<OtaSettings> {
const { data } = await http.get<OtaSettings>('/ota/settings')
return data
}
export async function putOtaSettings(settings: OtaSettings): Promise<OtaSettings> {
const { data } = await http.put<OtaSettings>('/ota/settings', settings)
return data
}
export async function getOtaTarget(): Promise<{ target: OtaTarget | null; summary?: Record<string, string> }> {
const { data } = await http.get<{ target: OtaTarget | null; summary?: Record<string, string> }>('/ota/target')
return data
}
export async function listOtaPackages(): Promise<OtaPackageInfo[]> {
const { data } = await http.get<OtaPackageInfo[]>('/ota/packages')
return data
}
export async function activateOtaPackage(id: string, name?: string): Promise<OtaTarget> {
const { data } = await http.post<OtaTarget>(`/ota/packages/${encodeURIComponent(id)}/activate`, null, {
params: name ? { name } : undefined
})
return data
}
export async function deleteOtaPackage(id: string): Promise<void> {
await http.delete(`/ota/packages/${encodeURIComponent(id)}`)
}
export async function pullOtaPackage(carId: string): Promise<OtaPackageInfo> {
const { data } = await http.post<OtaPackageInfo>('/ota/packages/pull', { carId }, { timeout: 120000 })
return data
}
export async function uploadOtaPackage(file: File): Promise<OtaPackageInfo> {
const form = new FormData()
form.append('file', file)
const { data } = await http.post<OtaPackageInfo>('/ota/packages/upload', form, {
timeout: 300000
})
return data
}
export async function listOtaVehicles(latency?: boolean): Promise<OtaVehicleRow[]> {
const { data } = await http.get<OtaVehicleRow[]>('/ota/vehicles', {
params: latency === undefined ? undefined : { latency },
timeout: 60000
})
return data
}
export async function listOtaJobs(take = 100): Promise<OtaJob[]> {
const { data } = await http.get<OtaJob[]>('/ota/jobs', { params: { take } })
return data
}
export async function getOtaJob(id: string): Promise<OtaJob> {
const { data } = await http.get<OtaJob>(`/ota/jobs/${encodeURIComponent(id)}`)
return data
}
export async function createOtaSyncJob(body: {
carIds: string[]
components?: string[]
requireLatencyCheck?: boolean
}): Promise<OtaJob> {
const { data } = await http.post<OtaJob>('/ota/jobs', body)
return data
}
export async function cancelOtaJob(id: string): Promise<void> {
await http.post(`/ota/jobs/${encodeURIComponent(id)}/cancel`)
}
export async function retryOtaJob(id: string): Promise<OtaJob> {
const { data } = await http.post<OtaJob>(`/ota/jobs/${encodeURIComponent(id)}/retry`)
return data
}
export async function getOtaConfig(carId: string, app: string): Promise<{ json: string }> {
const { data } = await http.get<{ json: string }>(`/ota/config/${encodeURIComponent(carId)}/${encodeURIComponent(app)}`)
return data
}
export async function pushOtaConfig(body: {
carIds: string[]
app: string
json: string
requireLatencyCheck?: boolean
}): Promise<OtaJob> {
const { data } = await http.post<OtaJob>('/ota/config/push', body)
return data
}
export async function pushOtaCustomFile(opts: {
carIds: string[]
remotePath: string
restartOps: number[]
files: File[]
}): Promise<OtaJob> {
const form = new FormData()
form.append('carIds', JSON.stringify(opts.carIds))
form.append('remotePath', opts.remotePath)
form.append('restartOps', JSON.stringify(opts.restartOps.length ? opts.restartOps : [-1]))
for (const f of opts.files) form.append('files', f)
const { data } = await http.post<OtaJob>('/ota/custom-file', form, {
timeout: 300000
})
return data
}