@ -90,7 +90,6 @@ function coordinate(value, min, max) {
// 指令标题 → 后端指令 type
// 指令标题 → 后端指令 type
const COMMANDS = {
const COMMANDS = {
'一键起飞' : 'workflow.one_key_takeoff' ,
'一键起飞' : 'workflow.one_key_takeoff' ,
'一键降落' : 'workflow.one_key_land' ,
'起飞准备' : 'dock.prepare_takeoff' ,
'起飞准备' : 'dock.prepare_takeoff' ,
'起飞准备完成' : 'dock.complete_takeoff' ,
'起飞准备完成' : 'dock.complete_takeoff' ,
'降落准备' : 'dock.prepare_landing' ,
'降落准备' : 'dock.prepare_landing' ,
@ -116,6 +115,12 @@ const COMMANDS = {
'取消任务' : 'drone.mission_cancel'
'取消任务' : 'drone.mission_cancel'
}
}
// 同名指令在机巢/无人机上语义不同:机巢「一键返航」走 workflow 编排(返航+降落),
// 无人机「一键返航」是 drone.return 直达指令
const DOCK_COMMANDS = {
'一键返航' : 'workflow.one_key_landing'
}
// 经纬度 → 地图百分比坐标(按设备经纬范围动态投影,北向上)
// 经纬度 → 地图百分比坐标(按设备经纬范围动态投影,北向上)
function project ( lon , lat , bounds ) {
function project ( lon , lat , bounds ) {
const lonSpan = bounds . maxLon - bounds . minLon || 1
const lonSpan = bounds . maxLon - bounds . minLon || 1
@ -158,12 +163,13 @@ export const useDeviceStore = defineStore('devices', () => {
return docks . value . find ( ( d ) => d . id === key ) || drones . value . find ( ( d ) => d . id === key ) || null
return docks . value . find ( ( d ) => d . id === key ) || drones . value . find ( ( d ) => d . id === key ) || null
}
}
function commandType ( title ) {
function commandType ( title , kind = '' ) {
if ( kind === 'dock' && DOCK_COMMANDS [ title ] ) return DOCK_COMMANDS [ title ]
return COMMANDS [ title ] || ''
return COMMANDS [ title ] || ''
}
}
async function sendCommand ( rec , title , params = { } ) {
async function sendCommand ( rec , title , params = { } ) {
const type = COMMANDS [ title ]
const type = commandType ( title , rec . kind )
if ( ! type ) throw new Error ( '未知指令' )
if ( ! type ) throw new Error ( '未知指令' )
if ( rec . kind === 'dock' ) {
if ( rec . kind === 'dock' ) {
return request . post ( urls . DOCK_COMMAND ( rec . id ) , { type , params } )
return request . post ( urls . DOCK_COMMAND ( rec . id ) , { type , params } )