Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mmc-stl-vue2
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
mmc-stl-vue2
Commits
b9563e0c
提交
b9563e0c
authored
8月 23, 2024
作者:
王梅颖
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'v4' of
http://git.mmcuav.cn/root/mmc-stl-vue2
into v4
上级
e724c9a7
257afc37
隐藏空白字符变更
内嵌
并排
正在显示
18 个修改的文件
包含
337 行增加
和
674 行删除
+337
-674
index.vue
...onents/MMCDataTransferPanel/components/obstacle/index.vue
+4
-5
index.js
src/components/MMCFlightControlCenter/api/index.js
+1
-2
air-line.js
...components/MMCFlightControlCenter/api/modules/air-line.js
+0
-187
airLine.js
src/components/MMCFlightControlCenter/api/modules/airLine.js
+17
-0
flightTask.js
...mponents/MMCFlightControlCenter/api/modules/flightTask.js
+0
-265
uav_control.js
...ponents/MMCFlightControlCenter/api/modules/uav_control.js
+9
-141
index.vue
...ist/components/normalTask/components/airwayEdit/index.vue
+57
-11
index.vue
...ayList/components/periodTask/components/taskAdd/index.vue
+4
-4
index.vue
...eft/components/airwayList/components/periodTask/index.vue
+36
-3
index.vue
...Left/components/airwayList/components/timedTask/index.vue
+42
-4
index.vue
.../components/controlPanel/components/controlLeft/index.vue
+2
-2
index.vue
...Panel/components/controlRight/components/logger/index.vue
+6
-2
index.vue
...eft/components/airwayList/components/airwayEdit/index.vue
+43
-4
index.vue
.../components/controlPanel/components/controlLeft/index.vue
+2
-11
takeOverRecords.vue
...anel/components/controlTop/components/takeOverRecords.vue
+30
-6
uav.js
src/components/MMCFlightControlCenter/store/uav.js
+79
-27
store.js
src/plugins/MMCGroundStation/store.js
+3
-0
store.js
src/plugins/MMCMQTT/store.js
+2
-0
没有找到文件。
src/components/MMCDataTransferPanel/components/obstacle/index.vue
浏览文件 @
b9563e0c
...
...
@@ -25,16 +25,15 @@ export default {
uavData
:
{
type
:
Object
,
default
:
()
=>
{},
},
obstacle
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{};
},
computed
:
{
obstacle
()
{
return
this
.
uavData
?.
obstacle
;
},
/**
* 触发方向列表
*/
...
...
@@ -53,7 +52,7 @@ export default {
return
{
angle
:
i
*
10
,
//角度
distance
:
distance
,
//距离
spotPos
:
distance
/
this
.
$store
.
state
.
fckernel
.
obstacle
.
obsDistance
spotPos
:
distance
/
this
.
obstacle
.
obsDistance
}
})
...
...
src/components/MMCFlightControlCenter/api/index.js
浏览文件 @
b9563e0c
export
{
default
as
Control_API
}
from
'./modules/uav_control'
;
export
{
default
as
flightTaskAPI
}
from
'./modules/flightTask'
;
export
{
default
as
AirLine
}
from
'./modules/air-line'
;
export
{
default
as
AirLine
}
from
'./modules/airLine'
;
export
{
default
as
Map
}
from
'./modules/map'
;
export
{
default
as
AI_API
}
from
'./modules/ai'
;
export
{
default
as
ViewLibrary
}
from
'./modules/viewLibrary'
;
...
...
src/components/MMCFlightControlCenter/api/modules/air-line.js
deleted
100644 → 0
浏览文件 @
e724c9a7
import
request
from
"../request"
;
class
AirLine
{
/**
* 航线列表
* @param {*} params
* @returns
*/
static
lineList
(
params
)
{
return
request
({
url
:
"/dms/route/page"
,
method
:
"get"
,
params
,
});
}
/**
* 航线规划
* @param {*} data
* @returns
*/
static
Edit
(
data
)
{
return
request
({
url
:
"/dms/route/add"
,
method
:
"post"
,
data
,
});
}
static
routeDelete
(
id
)
{
return
request
({
url
:
`/dms/route/delete/
${
id
}
`
,
method
:
"delete"
,
});
}
/**
* 航线修改
* @param {*} data
* @returns
*/
static
Change
(
data
)
{
return
request
({
url
:
"/dms/route/update"
,
method
:
"put"
,
data
,
});
}
/**
* 航线详情
* @param {*} data
* @returns
*/
static
details
(
params
)
{
return
request
({
url
:
`/tmj/route/getRouteDetail/
${
params
}
`
,
method
:
"get"
,
params
,
});
}
/**
* 上传航线
* @param {*} data
* @returns
*/
static
upload
(
data
)
{
return
request
({
headers
:
{
"Content-Type"
:
"multipart/form-data"
,
},
url
:
"/dms/route/upload"
,
method
:
"post"
,
data
,
});
}
/**
* 上传航线
* @param {*} data
* @returns
*/
static
uploadFile
(
data
)
{
return
request
({
headers
:
{
"Content-Type"
:
"multipart/form-data"
,
},
url
:
"/crm/dimensionMark/uploadFile"
,
method
:
"post"
,
data
,
});
}
/**
* 上传多条航线
* @param {*} data
* @returns
*/
static
uploadRoutes
(
data
)
{
return
request
({
headers
:
{
"Content-Type"
:
"multipart/form-data"
,
},
url
:
"/dms/route/upload"
,
method
:
"post"
,
data
,
});
}
/**
* 航线删除
* @param {*} data
* @returns
*/
static
deleteRoute
(
params
)
{
return
request
({
url
:
`/dms/route/delete/
${
params
}
`
,
method
:
"delete"
,
});
}
/**
* 航线详情
* @param {*} params
* @returns
*/
static
routeDetail
(
params
)
{
return
request
({
url
:
"/admin-api/uas/flight-line/get"
,
method
:
"get"
,
params
,
}).
then
(
async
(
res
)
=>
{
let
content
=
await
window
.
$mmc
.
$store
.
dispatch
(
"MMCFlightControlCenter/apiPointsToFKZXPoints"
,
{
list
:
res
.
data
.
linePointRespVOS
,
actionListKey
:
"pointActionRespVOS"
,
});
res
.
data
=
{
id
:
res
.
data
.
id
,
name
:
res
.
data
.
flightName
,
organizationName
:
"无"
,
status
:
"可用"
,
//空域状态
safe
:
res
.
data
.
safe
?
1
:
0
,
// 安全状态1: 安全 , 0: 待确定,
labelName
:
"无"
,
//航线数据
content
,
};
return
res
;
});
}
/**
* 飞行日志
* @param {*} params
* @returns
*/
static
getSorties
(
params
)
{
return
request
({
url
:
"/dms/route/id"
,
method
:
"get"
,
params
,
});
}
/**
* 飞行日志-历史视频
* @param {*} params
* @returns
*/
static
getSortiesHistoryVideo
(
params
)
{
return
request
({
url
:
"/dms/sortie/history-video"
,
method
:
"get"
,
params
,
});
}
/**
* 飞行日志-架次-历史轨迹
* @param {*} params
* @returns
*/
static
getSortiesTrajectory
(
params
)
{
return
request
({
url
:
"/dms/sortie/data"
,
method
:
"get"
,
params
,
});
}
}
export
default
AirLine
;
src/components/MMCFlightControlCenter/api/modules/airLine.js
0 → 100644
浏览文件 @
b9563e0c
import
request
from
"../request"
;
// 创建视图数据
export
default
class
AirLine
{
/**
* 添加航线
* @param {*} data
* @returns
*/
static
add
(
data
)
{
return
request
({
url
:
'/admin-api/uas/flight-line/create'
,
method
:
"post"
,
data
});
}
}
src/components/MMCFlightControlCenter/api/modules/flightTask.js
deleted
100644 → 0
浏览文件 @
e724c9a7
import
request
from
'../request'
;
class
flightTaskAPI
{
/**
* 飞行任务列表 1
* @param {*} data
* @returns
*/
static
getFlightList
(
data
)
{
return
request
({
url
:
`/tmj/task/getTaskList`
,
method
:
'post'
,
data
});
}
/**
* 飞行任务列表 3 期
* @param {*} data
* @returns
*/
static
tssTaskPage
(
data
)
{
return
request
({
url
:
`/tss/task/web/page`
,
method
:
'post'
,
data
});
}
/**
* 流程选择 3 期
* @param {*} projectId
* @returns
*/
static
processProcessBoxProjectId
(
projectId
)
{
return
request
({
url
:
`/tss/process/processBox/
${
projectId
}
`
,
method
:
'get'
});
}
/**
* 创建飞行任务 3 期
* @param {*} data
* @returns
*/
static
tssTask
(
data
)
{
return
request
({
url
:
`/tss/task`
,
method
:
'POST'
,
data
});
}
// 编辑航线 3 期修改航线
static
editFlight
(
data
)
{
return
request
({
url
:
`/tss/task`
,
method
:
'put'
,
data
});
}
static
reCreateTask
(
data
)
{
return
request
({
url
:
`/tss/task/reCreate`
,
method
:
'post'
,
data
});
}
// 获取无人机列表
static
getUav
(
params
)
{
return
request
({
url
:
`/tmj/device/getDeviceSelect`
,
method
:
'get'
,
params
});
}
// 获取无任务无人机列表
static
getUnbindUav
(
params
)
{
return
request
({
url
:
`/tmj/device/getDeviceSelect`
,
method
:
'get'
,
params
});
}
// 飞行任务创建任务获取无人机列表
static
getUavflyList
(
params
)
{
return
request
({
url
:
`/dms/uav/page`
,
method
:
'get'
,
params
});
}
// 获取组织列表
static
getCompany
(
data
)
{
return
request
({
url
:
`/crm/organization/getOrganizationSelect`
,
method
:
'get'
,
data
});
}
// 获取航线
static
getflight
(
data
)
{
return
request
({
url
:
`/tmj/route/getRouteSelect`
,
method
:
'get'
,
data
});
}
// 新增航线
static
createTask
(
data
)
{
return
request
({
url
:
`/tmj/task/createTask`
,
method
:
'post'
,
data
});
}
/**
* 新增航线
* @param {*} data
* @returns
*/
static
addFlight
(
data
)
{
return
request
({
url
:
'/dms/route/add'
,
method
:
'post'
,
data
});
}
// 编辑航线
static
changeFlight
(
data
)
{
return
request
({
url
:
`/dms/route/update`
,
method
:
'put'
,
data
});
}
// 设备在线状态
static
getDeviceOnlineState
(
data
)
{
return
request
({
url
:
`/tmj/device/deviceIsOnline`
,
method
:
'post'
,
data
});
}
// 设备任务状态
static
isDeviceHaveTask
(
data
)
{
return
request
({
url
:
`/tmj/device/deviceHaveTask`
,
method
:
'post'
,
data
});
}
// 获取单个无人机数据最后一次上传
static
deviceData
(
data
)
{
const
formData
=
new
FormData
();
Object
.
keys
(
data
).
forEach
((
key
)
=>
{
formData
.
append
(
key
,
data
[
key
]);
});
return
request
({
url
:
`/tmj/device/deviceData`
,
method
:
'post'
,
data
:
formData
});
}
// 任务列表
static
getTaskSelect
(
data
)
{
return
request
({
url
:
`/tmj/task/getTaskSelect`
,
method
:
'get'
,
data
});
}
// 任务开始
static
taskStart
(
params
)
{
return
request
({
url
:
`/tmj/task/startTask`
,
method
:
'get'
,
params
});
}
// 任务完成
static
taskEnd
(
params
)
{
return
request
({
url
:
`/tmj/task/endTask`
,
method
:
'get'
,
params
});
}
// 图片查询
static
getTaskImages
(
params
)
{
return
request
({
url
:
`/tmj/task/getPhotograph`
,
method
:
'get'
,
params
});
}
// 保存图片
static
savaTaskImages
(
data
)
{
return
request
({
// headers: {
// "Content-Type": "multipart/form-data",
// },
url
:
`/tmj/task/photograph`
,
method
:
'post'
,
data
});
}
// 导出报告
static
getExportToWord
(
params
)
{
return
request
({
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
},
responseType
:
'blob'
,
url
:
`/tmj/taskPointExportToWordV1`
,
method
:
'GET'
,
params
});
}
// 开始任务
static
startTask
(
params
)
{
return
request
({
url
:
'/tmj/task/startTask'
,
method
:
'GET'
,
params
});
}
// 删除任务
static
deleteTask
(
data
)
{
return
request
({
url
:
`/tss/task/
${
data
}
`
,
method
:
'DELETE'
});
}
// 审批任务
static
approveTask
(
data
)
{
return
request
({
url
:
`/tss/task/approve`
,
method
:
'post'
,
data
});
}
}
export
default
flightTaskAPI
;
src/components/MMCFlightControlCenter/api/modules/uav_control.js
浏览文件 @
b9563e0c
...
...
@@ -13,15 +13,6 @@ class Control_API {
});
}
// 获取无人机列表
static
getUavDataList
(
params
)
{
return
request
({
url
:
"/dms/uav/page"
,
method
:
"get"
,
params
,
});
}
// 获取航线列表
static
getUavRouteList
(
params
)
{
return
request
({
...
...
@@ -32,40 +23,6 @@ class Control_API {
});
}
// 获取架次号
static
getFlightSortic
({
taskId
,
deviceHardId
})
{
return
request
({
url
:
`/tss/task/getFlightSortic/
${
taskId
}
/
${
deviceHardId
}
`
,
method
:
"get"
,
});
}
// 无人机详情
static
uavDetail
(
params
)
{
return
request
({
url
:
`/dms/uav/detail/
${
params
.
id
}
`
,
method
:
"get"
,
});
}
// 飞行日志
static
getFlightLog
(
data
)
{
return
request
({
url
:
`/dms/sortie/flightLog`
,
method
:
"post"
,
data
,
});
}
// 保存图片
static
addPhoto
(
data
)
{
return
request
({
url
:
`/dms/sortie-image/add`
,
method
:
"post"
,
data
,
});
}
static
uploadFile
(
data
){
return
request
({
url
:
`/admin-api/infra/file/upload`
,
...
...
@@ -73,29 +30,6 @@ class Control_API {
data
,
});
}
// 保存AI图片
// static addAiPhoto(data) {
// return request({
// url: `/dms/sortie-image/addAi`,
// method: "post",
// data
// });
// }
// 获取所有机构列表
static
getAllOrg
()
{
return
request
({
url
:
`/crm/organization/tree`
,
method
:
"get"
,
});
}
// 获取所有无人机操作日志
static
getUavAllLog
(
params
)
{
return
request_uav
({
url
:
`/api/log/selectUavCmdLikeList`
,
method
:
"get"
,
params
,
});
}
// 获取1小时短时天气预报
static
getUavShortForEcast
(
params
)
{
return
request_uav
({
...
...
@@ -112,84 +46,9 @@ class Control_API {
params
,
});
}
// 获取树结构-鹰巢
static
getUavNestList
(
params
)
{
return
request
({
url
:
`/dms/nest/getNestList`
,
method
:
"get"
,
params
,
});
}
// 获取任务库列表
static
getTaskList
(
data
)
{
return
request
({
url
:
`/tss/task/list`
,
method
:
"post"
,
data
,
});
}
// 获取任务库内的任务详情
static
getTaskDetails
(
params
)
{
return
request
({
url
:
`/tss/task/
${
params
.
id
}
`
,
method
:
"get"
,
});
}
// 鹰巢-定时,周期自启动
static
startUavNest
=
(
data
)
=>
request
({
url
:
"/tss/task/start"
,
method
:
"POST"
,
data
,
});
// 鹰巢-运行日志
static
getUavNestLog
=
(
params
)
=>
request_uav
({
url
:
`api/log/selectProcessLikeList`
,
method
:
"get"
,
params
,
});
// 获取架次列表
static
getSortie
(
params
)
{
return
request
({
url
:
"/dms/sortie/page"
,
method
:
"get"
,
params
,
});
}
// 获取架次图片列表
static
getSortieImage
(
params
)
{
return
request
({
url
:
"/dms/sortie-image/page"
,
method
:
"get"
,
params
,
});
}
// 获取架次视频列表
static
getSortieVideo
(
params
)
{
return
request
({
url
:
"/dms/sortie/history-video"
,
method
:
"get"
,
params
,
});
}
// 导出成果
static
getExportToWordForSortie
(
params
)
{
return
request
({
headers
:
{
"Content-Type"
:
"application/x-www-form-urlencoded"
,
},
responseType
:
"blob"
,
url
:
`/dms/sortie/export-word`
,
method
:
"GET"
,
params
,
});
}
// 接管无人机
static
setUavControlOn
(
params
)
{
return
request
({
// url: `/dms/uav/takeOver/${params.id}`,
url
:
`/admin-api/uas/device/controlUav`
,
method
:
'post'
,
params
...
...
@@ -228,6 +87,15 @@ class Control_API {
});
}
// 获得接管记录
static
getTakeRecord
(
params
){
return
request
({
url
:
`/admin-api/uas/device/getTakeRecord`
,
method
:
"get"
,
params
});
}
}
export
default
Control_API
;
src/components/MMCFlightControlCenter/components/hangar/components/controlPanel/components/controlLeft/components/airwayList/components/normalTask/components/airwayEdit/index.vue
浏览文件 @
b9563e0c
...
...
@@ -64,7 +64,7 @@
<el-form-item
label=
"预计飞行时间"
>
{{time}}
</el-form-item>
</el-form>
<div
class=
"ae-btns"
>
<el-button
type=
"primary"
@
click=
"onSave"
>
保存
</el-button>
<el-button
type=
"primary"
@
click=
"onSave"
:loading=
"saveLoading"
>
保存
</el-button>
<el-button
type=
"danger"
@
click=
"onDel"
>
删除航点
</el-button>
</div>
</div>
...
...
@@ -78,7 +78,7 @@
</template>
<
script
>
import
{
Map
}
from
"../../../../../../../../../../../../api"
;
import
{
Map
,
AirLine
}
from
"../../../../../../../../../../../../api"
;
import
{
mapState
}
from
"vuex"
;
import
Utils
from
"../../../../../../../../../../../../components/cesiumLayer/lib/cesium/utils"
;
import
{
nanoid
}
from
"nanoid"
;
...
...
@@ -124,10 +124,11 @@ export default {
positions
:
[],
//航点坐标集合
isPickAddress
:
false
,
//是否通过目标位置对地理信息
showActions
:
false
,
// 打开航点动作
saveLoading
:
false
,
};
},
computed
:
{
...
mapState
(
"MMCFlightControlCenter"
,
[
"cesiumViewer"
]),
...
mapState
(
"MMCFlightControlCenter"
,
[
"cesiumViewer"
,
"userInfo"
]),
...
mapState
(
"MMCFlightControlCenter/hangar"
,
[
"hangar"
]),
// 当前的表单
curForm
()
{
...
...
@@ -189,15 +190,19 @@ export default {
this
.
onPickPoint
,
Cesium
.
ScreenSpaceEventType
.
LEFT_DOWN
);
// 直接销毁会报错
this
.
$nextTick
(()
=>
{
this
.
cesiumViewer
.
dataSources
.
remove
(
this
.
dataSource
);
});
// todo 连续两次创建航线后销毁cesium会崩溃, 原因未知, 改为隐藏
/* this.$nextTick(() => {
let list = this.cesiumViewer?.dataSources?.getByName(this.dataSourceName);
for (let i = 0; i < list.length; i++) {
let dataSource = list[i];
this.cesiumViewer.dataSources.remove(dataSource);
}
}); */
this
.
dataSource
.
show
=
false
;
},
methods
:
{
// 保存航线
onSave
()
{
async
onSave
()
{
if
(
!
this
.
name
)
{
this
.
$message
.
warning
(
"请输入航线名称"
);
return
;
...
...
@@ -238,7 +243,47 @@ export default {
waypointActions
:
actions
,
};
});
this
.
rootNode
.
$emit
(
"airwayAdd"
,
{
//标准化里创建
let
airway
=
{
content
:
waypoints
,
distance
:
this
.
distance
,
dutyOrganizationId
:
""
,
name
:
this
.
name
,
speed
:
this
.
form
[
0
].
speed
,
};
try
{
let
res
=
await
AirLine
.
add
({
flightName
:
airway
.
name
||
`
${
this
.
userInfo
.
username
}
-巡查}`
,
pointCount
:
airway
.
content
.
length
,
distance
:
airway
.
distance
,
sourceType
:
1
,
linePointSaveReqVOS
:
airway
.
content
.
map
((
point
)
=>
({
latitude
:
point
.
coordinate
.
latitude
,
longitude
:
point
.
coordinate
.
longitude
,
altitude
:
point
.
altitude
,
speed
:
point
.
speed
,
pointActionSaveReqVOS
:
point
.
waypointActions
.
map
((
action
)
=>
{
let
actionValue
=
[];
actionValue
.
push
(
`param1:
${
action
.
param1
||
""
}
`
);
actionValue
.
push
(
`param2:
${
action
.
param2
||
""
}
`
);
actionValue
.
push
(
`param3:
${
action
.
param3
||
""
}
`
);
actionValue
.
push
(
`param4:
${
action
.
param4
||
""
}
`
);
return
{
actionType
:
action
.
actionType
,
actionValue
:
actionValue
.
join
(
";"
),
};
}),
})),
nestId
:
this
.
hangar
.
id
,
});
this
.
$message
.
success
(
"创建航线成功"
);
this
.
$emit
(
"addDone"
,
res
.
data
);
this
.
$emit
(
"close"
);
}
catch
(
e
)
{}
this
.
saveLoading
=
false
;
// 通过事件创建会出现重复创建的情况, 改为标准化里创建
/* this.rootNode.$emit("airwayAdd", {
airway: {
content: waypoints,
distance: this.distance,
...
...
@@ -251,7 +296,7 @@ export default {
this.$emit("addDone", data.id);
this.$emit("close");
},
});
});
*/
},
/**
* 动作保存
...
...
@@ -563,6 +608,7 @@ export default {
position
:
absolute
;
top
:
-50px
;
width
:
450px
;
z-index
:
2
;
.dialog-content
{
display
:
flex
;
...
...
src/components/MMCFlightControlCenter/components/hangar/components/controlPanel/components/controlLeft/components/airwayList/components/periodTask/components/taskAdd/index.vue
浏览文件 @
b9563e0c
<
template
>
<div
class=
"task-add dialog1027"
v-interact
>
<div
class=
"dialog-header"
>
<div
class=
"dialog-header__title"
>
定时
任务
</div>
<div
class=
"dialog-header__title"
>
周期
任务
</div>
<div
class=
"dialog-header__close"
@
click=
"$emit('close')"
>
关闭
</div>
</div>
<div
class=
"dialog-content"
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"100px"
>
<el-form-item
label=
"执行日期"
prop=
"date"
required
>
<el-form-item
label=
"执行日期"
prop=
"date"
>
<el-date-picker
v-model=
"form.date"
type=
"daterange"
...
...
@@ -19,7 +19,7 @@
:picker-options=
"pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"执行时间"
prop=
"time"
required
>
<el-form-item
label=
"执行时间"
prop=
"time"
>
<el-time-picker
is-range
v-model=
"form.time"
...
...
@@ -32,7 +32,7 @@
value-format=
"HH:mm:ss"
></el-time-picker>
</el-form-item>
<el-form-item
label=
"航线名称"
required
>
<el-form-item
label=
"航线名称"
prop=
"airwayId"
>
<el-select
v-model=
"form.airwayId"
size=
"mini"
popper-class=
"mmc"
style=
"width:100%"
>
<el-option
:label=
"item.name"
:value=
"item.id"
v-for=
"(item, index) in airwayList"
></el-option>
</el-select>
...
...
src/components/MMCFlightControlCenter/components/hangar/components/controlPanel/components/controlLeft/components/airwayList/components/periodTask/index.vue
浏览文件 @
b9563e0c
...
...
@@ -70,6 +70,7 @@ export default {
return
{
showTaskAdd
:
false
,
taskListAll
:
[],
lastMsg
:
null
}
;
}
,
computed
:
{
...
...
@@ -79,6 +80,30 @@ export default {
"hangar"
,
]),
}
,
watch
:
{
"hangarRealTimeData.msgList"
:
{
immediate
:
false
,
handler
(
msgList
)
{
// 起飞后执行刷新任务列表, 获取最新状态
if
(
msgList
.
length
>
0
)
{
let
msg
=
msgList
[
msgList
.
length
-
1
];
let
keyword
=
"开始上传航线到无人机"
;
if
(
msg
)
{
if
(
!
this
?.
lastMsg
?.
text
?.
includes
(
keyword
)
&&
msg
.
text
.
includes
(
keyword
)
)
{
this
.
getTaskList
();
}
this
.
lastMsg
=
msg
;
}
}
}
,
}
,
}
,
created
()
{
this
.
rootNode
.
$emit
(
"hangarTaskTabChange"
,
{
type
:
3
,
...
...
@@ -131,18 +156,22 @@ export default {
}
,
async
onDelAirway
(
item
)
{
try
{
if
(
item
.
loading
)
{
return
;
}
await
this
.
$confirm
(
"请确认是否删除该任务?"
,
"安全确认"
,
{
cancelButtonText
:
"取消"
,
confirmButtonText
:
"确定"
,
customClass
:
"uav_controlPane"
,
showClose
:
false
,
}
);
item
.
loading
=
true
;
this
.
rootNode
.
$emit
(
"taskDel"
,
{
task
:
item
,
type
:
3
,
// 1: 日常任务 2: 定时任务 3:周期任务
callback
:
()
=>
{
this
.
getTaskList
();
}
}
,
}
);
}
catch
(
e
)
{
console
.
log
(
e
);
...
...
@@ -151,9 +180,9 @@ export default {
onTaskAddClose
()
{
this
.
showTaskAdd
=
false
;
}
,
onAddDone
(){
onAddDone
()
{
this
.
getTaskList
();
}
}
,
}
,
}
;
<
/script
>
...
...
@@ -228,6 +257,10 @@ export default {
.
icon
{
cursor
:
pointer
;
&
.
loading
{
opacity
:
0.5
;
}
}
}
}
...
...
src/components/MMCFlightControlCenter/components/hangar/components/controlPanel/components/controlLeft/components/airwayList/components/timedTask/index.vue
浏览文件 @
b9563e0c
...
...
@@ -14,7 +14,12 @@
</el-tooltip>
</div>
<div
class=
"row__column flex2"
>
<el-tooltip
class=
"item"
effect=
"dark"
:content=
"item.taskStartTime"
placement=
"top-start"
>
<el-tooltip
class=
"item"
effect=
"dark"
:content=
"item.taskStartTime"
placement=
"top-start"
>
<span>
{{
item
.
taskStartTime
}}
</span>
</el-tooltip>
</div>
...
...
@@ -65,6 +70,7 @@ export default {
return
{
showTaskAdd
:
false
,
taskListAll
:
[],
lastMsg
:
null
,
};
},
computed
:
{
...
...
@@ -75,6 +81,30 @@ export default {
"taskList"
,
]),
},
watch
:
{
"hangarRealTimeData.msgList"
:
{
immediate
:
false
,
handler
(
msgList
)
{
// 起飞后执行刷新任务列表, 获取最新状态
if
(
msgList
.
length
>
0
)
{
let
msg
=
msgList
[
msgList
.
length
-
1
];
let
keyword
=
"开始上传航线到无人机"
;
if
(
msg
)
{
if
(
!
this
?.
lastMsg
?.
text
?.
includes
(
keyword
)
&&
msg
.
text
.
includes
(
keyword
)
)
{
this
.
getTaskList
();
}
this
.
lastMsg
=
msg
;
}
}
},
},
},
created
()
{
this
.
rootNode
.
$emit
(
"hangarTaskTabChange"
,
{
type
:
2
,
...
...
@@ -127,18 +157,22 @@ export default {
},
async
onDelAirway
(
item
)
{
try
{
if
(
item
.
loading
)
{
return
;
}
await
this
.
$confirm
(
"请确认是否删除该任务?"
,
"安全确认"
,
{
cancelButtonText
:
"取消"
,
confirmButtonText
:
"确定"
,
customClass
:
"uav_controlPane"
,
showClose
:
false
,
});
item
.
loading
=
true
;
this
.
rootNode
.
$emit
(
"taskDel"
,
{
task
:
item
,
type
:
2
,
// 1: 日常任务 2: 定时任务 3:周期任务
callback
:
()
=>
{
this
.
getTaskList
();
}
}
,
});
}
catch
(
e
)
{
console
.
log
(
e
);
...
...
@@ -147,9 +181,9 @@ export default {
onTaskAddClose
()
{
this
.
showTaskAdd
=
false
;
},
onAddDone
(){
onAddDone
()
{
this
.
getTaskList
();
}
}
,
},
};
</
script
>
...
...
@@ -224,6 +258,10 @@ export default {
.icon
{
cursor
:
pointer
;
&.loading
{
opacity
:
0.5
;
}
}
}
}
...
...
src/components/MMCFlightControlCenter/components/hangar/components/controlPanel/components/controlLeft/index.vue
浏览文件 @
b9563e0c
...
...
@@ -5,7 +5,7 @@
<div
class=
"left-bar-item__text"
>
任务
</div>
</div>
<AirwayList
class=
"task-list"
v-if=
"openTask"
></AirwayList>
<div
class=
"left-bar-item item"
@
click=
"onClickAI"
>
<
!--
<
div
class=
"left-bar-item item"
@
click=
"onClickAI"
>
<img
class=
"left-bar-item__icon"
src=
"./assets/images/ai.svg"
/>
<div
class=
"left-bar-item__text"
>
智能识别
</div>
</div>
...
...
@@ -27,7 +27,7 @@
@
close=
"openTraffic = false"
/>
<Jm
v-if=
"openModeling"
:device=
"device"
class=
"jm-dialog"
@
close=
"openModeling = false"
></Jm>
</div>
</div>
-->
<!-- 展示视频 -->
<div
class=
"left-video"
:class=
"
{collapse: playerCollapse}" v-if="hangar
&&
showPanel
&&
listCollapse">
...
...
src/components/MMCFlightControlCenter/components/hangar/components/controlPanel/components/controlRight/components/logger/index.vue
浏览文件 @
b9563e0c
...
...
@@ -4,7 +4,7 @@
<div
class=
"title"
>
<img
src=
"../../../../../../../../assets/images/mount_head.png"
/>
<div
class=
"dialog-header__title"
>
运行监控日志
</div>
<div
effect=
"dark"
class=
"status"
>
{{
get
p
rocessStatus
(
hangarRealTimeData
.
processStatus
)
}}
</div>
<div
effect=
"dark"
class=
"status"
>
{{
get
P
rocessStatus
(
hangarRealTimeData
.
processStatus
)
}}
</div>
</div>
<div
style=
"display: flex"
>
<div
class=
"icon-box"
@
click=
"onClear"
>
...
...
@@ -153,7 +153,7 @@ export default {
},
});
},
get
p
rocessStatus
(
val
)
{
get
P
rocessStatus
(
val
)
{
let
title
=
""
;
if
(
val
==
0
)
{
title
=
"待机中"
;
...
...
@@ -175,6 +175,10 @@ export default {
title
=
"正在执行电池检查流程"
;
}
else
if
(
val
==
9
)
{
title
=
"正在执行关仓流程"
;
}
else
if
(
val
==
10
)
{
title
=
"正在执行回中器操作"
;
}
else
if
(
val
==
99
)
{
title
=
"正在执行飞行任务"
;
}
else
{
title
=
"暂无"
;
}
...
...
src/components/MMCFlightControlCenter/components/uavApplications/components/controlPanel/components/controlLeft/components/airwayList/components/airwayEdit/index.vue
浏览文件 @
b9563e0c
...
...
@@ -86,7 +86,7 @@
</template>
<
script
>
import
{
Map
}
from
"../../../../../../../../../../api"
;
import
{
Map
,
AirLine
}
from
"../../../../../../../../../../api"
;
import
{
mapState
}
from
"vuex"
;
import
Utils
from
"../../../../../../../../../../components/cesiumLayer/lib/cesium/utils"
;
import
{
nanoid
}
from
"nanoid"
;
...
...
@@ -220,7 +220,7 @@ export default {
})
},
// 保存航线
onSave
()
{
async
onSave
()
{
if
(
!
this
.
name
)
{
this
.
$message
.
warning
(
"请输入航线名称"
);
return
;
...
...
@@ -264,7 +264,46 @@ export default {
};
});
this
.
rootNode
.
$emit
(
"airwayAdd"
,
{
//标准化里创建
let
airway
=
{
content
:
waypoints
,
distance
:
this
.
distance
,
dutyOrganizationId
:
""
,
name
:
this
.
name
,
speed
:
this
.
form
[
0
].
speed
,
};
try
{
let
res
=
await
AirLine
.
add
({
flightName
:
airway
.
name
||
`
${
this
.
userInfo
.
username
}
-巡查}`
,
pointCount
:
airway
.
content
.
length
,
distance
:
airway
.
distance
,
sourceType
:
1
,
linePointSaveReqVOS
:
airway
.
content
.
map
((
point
)
=>
({
latitude
:
point
.
coordinate
.
latitude
,
longitude
:
point
.
coordinate
.
longitude
,
altitude
:
point
.
altitude
,
speed
:
point
.
speed
,
pointActionSaveReqVOS
:
point
.
waypointActions
.
map
((
action
)
=>
{
let
actionValue
=
[];
actionValue
.
push
(
`param1:
${
action
.
param1
||
""
}
`
);
actionValue
.
push
(
`param2:
${
action
.
param2
||
""
}
`
);
actionValue
.
push
(
`param3:
${
action
.
param3
||
""
}
`
);
actionValue
.
push
(
`param4:
${
action
.
param4
||
""
}
`
);
return
{
actionType
:
action
.
actionType
,
actionValue
:
actionValue
.
join
(
";"
),
};
}),
})),
});
this
.
$message
.
success
(
"创建航线成功"
);
this
.
$emit
(
"addDone"
,
res
.
data
);
this
.
$emit
(
"close"
);
}
catch
(
e
)
{}
this
.
saveLoading
=
false
;
// 通过事件创建会出现重复创建的情况, 改为标准化里创建
/* this.rootNode.$emit("airwayAdd", {
airway: {
content: waypoints,
distance: this.distance,
...
...
@@ -280,7 +319,7 @@ export default {
}
this.saveLoading = false;
},
});
});
*/
},
/**
* 动作保存
...
...
src/components/MMCFlightControlCenter/components/uavApplications/components/controlPanel/components/controlLeft/index.vue
浏览文件 @
b9563e0c
...
...
@@ -6,7 +6,7 @@
</div>
<TaskList
class=
"task-list"
v-if=
"!useAirway && openTask"
></TaskList>
<AirwayList
class=
"task-list"
v-if=
"useAirway && openTask"
></AirwayList>
<div
class=
"left-bar-item item"
@
click=
"onClickAI"
>
<!--
<div
class=
"left-bar-item item"
@
click=
"onClickAI"
>
<img
class=
"left-bar-item__icon"
src=
"./assets/images/ai.svg"
/>
<div
class=
"left-bar-item__text"
>
智能识别
</div>
</div>
...
...
@@ -19,15 +19,6 @@
<img
class=
"left-bar-item__icon"
src=
"./assets/images/car.svg"
/>
<div
class=
"left-bar-item__text"
>
车辆识别
</div>
</div>
<!--
<div
class=
"left-bar-item item"
@
click
.
stop=
"switchAI(2)"
>
<img
class=
"left-bar-item__icon"
src=
"./assets/images/traffic.png"
/>
<div
class=
"left-bar-item__text"
>
交通指引
</div>
</div>
<div
class=
"left-bar-item item"
@
click
.
stop=
"switchAI(3)"
>
<img
class=
"left-bar-item__icon"
src=
"./assets/images/ksjm.png"
/>
<div
class=
"left-bar-item__text"
>
快速建模
</div>
</div>
-->
<Face
v-if=
"openFace"
class=
"ai-dialog"
:uavId=
"uav.deviceId"
@
close=
"openFace = false"
/>
<Car
v-if=
"openPlate"
class=
"ai-dialog"
:uavId=
"uav.deviceId"
@
close=
"openPlate = false"
/>
<Traffic
...
...
@@ -37,7 +28,7 @@
@
close=
"openTraffic = false"
/>
<Jm
v-if=
"openModeling"
:device=
"device"
class=
"jm-dialog"
@
close=
"openModeling = false"
></Jm>
</div>
</div>
-->
</div>
</
template
>
...
...
src/components/MMCFlightControlCenter/components/uavApplications/components/controlPanel/components/controlTop/components/takeOverRecords.vue
浏览文件 @
b9563e0c
...
...
@@ -7,13 +7,13 @@
</div>
<div
class=
"dialog-content"
>
<el-table
:data=
"list"
>
<el-table-column
label=
"无人机名称"
align=
"center"
prop=
"
n
ame"
></el-table-column>
<el-table-column
label=
"无人机所属单位"
align=
"center"
prop=
"
n
ame"
></el-table-column>
<el-table-column
label=
"接管状态"
align=
"center"
prop=
"
name
"
></el-table-column>
<el-table-column
label=
"当前控制单位"
align=
"center"
prop=
"
n
ame"
></el-table-column>
<el-table-column
label=
"无人机名称"
align=
"center"
prop=
"
deviceN
ame"
></el-table-column>
<el-table-column
label=
"无人机所属单位"
align=
"center"
prop=
"
deviceDeptN
ame"
></el-table-column>
<el-table-column
label=
"接管状态"
align=
"center"
prop=
"
takeStats
"
></el-table-column>
<el-table-column
label=
"当前控制单位"
align=
"center"
prop=
"
takeUserN
ame"
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
prop=
"name"
>
<template
slot-scope=
"scope"
>
<el-button
@
click=
"onExit"
type=
"text"
size=
"small"
>
退出接管
</el-button>
<el-button
@
click=
"onExit
(scope.row)
"
type=
"text"
size=
"small"
>
退出接管
</el-button>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -22,6 +22,8 @@
</template>
<
script
>
import
{
Control_API
}
from
"../../../../../../../api"
;
export
default
{
name
:
"TakeOverRecords"
,
data
()
{
...
...
@@ -29,8 +31,30 @@ export default {
list
:
[],
};
},
mounted
()
{
this
.
init
();
},
methods
:
{
onExit
()
{},
async
init
()
{
let
res
=
await
Control_API
.
getTakeRecord
({});
this
.
list
=
res
.
data
;
console
.
log
(
'接管记录'
,
this
.
list
);
},
onExit
(
item
)
{
this
.
$confirm
(
"确认退出该用户接管?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(
async
()
=>
{
await
Control_API
.
setUavControlOff
({
deviceId
:
item
.
deviceId
,
});
this
.
$message
({
type
:
"success"
,
message
:
"操作完成"
,
});
});
},
},
};
</
script
>
...
...
src/components/MMCFlightControlCenter/store/uav.js
浏览文件 @
b9563e0c
...
...
@@ -173,6 +173,14 @@ function initUavRealTimeData() {
down45Link 4/5G下行速率,单位字节/秒 Long
} */
flightMode
:
"UNKNOWN"
,
uploadAirline
:
{
//上传的航线
finishedAction
:
''
,
//航点任务完成后,飞机将采取的行动
headingMode
:
''
,
//飞机在航点之间移动时的航向模式
isExitMissionOnRCSignalLostEnabled
:
Boolean
,
//飞机在航点之间移动时的航向模式
maxFlightSpeed
:
0
,
//航线飞行最大速度,px4无人机默认最大12m
autoFlightSpeed
:
0
,
//航线飞行速度默认5m
waypointList
:
null
},
};
}
...
...
@@ -197,6 +205,7 @@ const state = {
showPlayer
:
false
,
//显示播放器
showPanel
:
false
,
//显示数据面板
isQingLiu
:
null
,
// 当前视频播放的是否为清流
waitAirlineUpload
:
false
,
//是否正在等待航线上传
};
const
mutations
=
{
...
...
@@ -231,7 +240,10 @@ const actions = {
commit
(
"setState"
,
{
key
:
"mountList"
,
value
:
[]
});
commit
(
"setState"
,
{
key
:
"selectMount"
,
value
:
null
});
commit
(
"setState"
,
{
key
:
"showVideo"
,
value
:
false
});
commit
(
"setState"
,
{
key
:
"uavRealTimeData"
,
value
:
initUavRealTimeData
()
});
commit
(
"setState"
,
{
key
:
"uavRealTimeData"
,
value
:
initUavRealTimeData
(),
});
positions
=
[];
},
...
...
@@ -298,6 +310,7 @@ const actions = {
const
type275
=
data
[
275
]?.
data
;
// 健康管理
const
type270
=
data
[
270
]?.
data
;
// 飞控应答消息
const
type260
=
data
[
260
]?.
data
;
// 无人机提示信息
const
type261
=
data
[
261
]?.
data
;
// 航线上传完成信息
let
msgList
=
state
.
uavRealTimeData
.
msgList
||
[];
...
...
@@ -308,10 +321,10 @@ const actions = {
);
if
(
!
findMsg
)
{
msgList
.
push
({
grade
:
'AUTO'
,
grade
:
"AUTO"
,
text
:
type270
.
text
,
time
:
moment
(
type270
.
timestamp
).
format
(
"YYYY-MM-DD HH:mm:ss"
),
timestamp
:
type270
.
timestamp
timestamp
:
type270
.
timestamp
,
});
}
}
...
...
@@ -322,10 +335,23 @@ const actions = {
);
if
(
!
findMsg
)
{
msgList
.
push
({
grade
:
type260
.
grade
<=
2
?
"[危险]"
:
type260
.
grade
==
3
?
"[错误]"
:
type260
.
grade
==
4
?
"[警告]"
:
type260
.
grade
==
5
?
"[通知]"
:
type260
.
grade
==
6
?
"[正常]"
:
type260
.
grade
==
7
?
"[调试]"
:
"AUTO"
,
grade
:
type260
.
grade
<=
2
?
"[危险]"
:
type260
.
grade
==
3
?
"[错误]"
:
type260
.
grade
==
4
?
"[警告]"
:
type260
.
grade
==
5
?
"[通知]"
:
type260
.
grade
==
6
?
"[正常]"
:
type260
.
grade
==
7
?
"[调试]"
:
"AUTO"
,
text
:
type260
.
msg
,
time
:
moment
(
type260
.
timestamp
).
format
(
"YYYY-MM-DD HH:mm:ss"
),
timestamp
:
type260
.
timestamp
timestamp
:
type260
.
timestamp
,
});
}
}
...
...
@@ -363,6 +389,7 @@ const actions = {
batteryList
,
msg
:
type270
,
msgList
,
uploadAirline
:
type261
,
},
});
...
...
@@ -638,7 +665,7 @@ const actions = {
* 一键起飞
* @param {function} data.callback //完成回调
*/
async
takeOff
({
state
},
data
)
{
async
takeOff
({
state
,
commit
},
data
)
{
console
.
log
(
state
.
airlineData
,
data
);
if
(
state
.
uav
.
network
==
2
)
{
try
{
...
...
@@ -682,24 +709,49 @@ const actions = {
callback
()
{},
});
// 更改任务状态
// 起飞指令
setTimeout
(()
=>
{
window
.
$mmc
.
$store
.
dispatch
(
"MMCMQTT/publish"
,
{
topic
:
"PX4/OBTAIN/"
+
state
.
uav
.
deviceId
,
data
:
{
type
:
window
.
$mmc
.
$store
.
state
.
MMCMQTT
.
orders
.
航线一键起飞
,
commit
(
"setState"
,
{
key
:
"waitAirlineUpload"
,
value
:
true
,
});
let
time
=
setInterval
(()
=>
{
if
(
state
.
uavRealTimeData
.
uploadAirline
)
{
clearInterval
(
time
);
window
.
$mmc
.
$store
.
dispatch
(
"MMCMQTT/publish"
,
{
topic
:
"PX4/OBTAIN/"
+
state
.
uav
.
deviceId
,
data
:
{
taskId
:
state
.
airlineData
.
id
,
seq
:
0
,
type
:
window
.
$mmc
.
$store
.
state
.
MMCMQTT
.
orders
.
航线一键起飞
,
data
:
{
taskId
:
state
.
airlineData
.
id
,
seq
:
0
,
},
},
},
callback
()
{
data
?.
callback
&&
data
.
callback
(
true
,
flightSortieId
.
data
);
},
});
},
3000
);
callback
()
{
data
?.
callback
&&
data
.
callback
(
true
,
flightSortieId
.
data
);
},
});
// 清空261数据
let
dataSet
=
window
.
$mmc
.
$store
.
state
.
MMCMQTT
.
dataSet
;
dataSet
[
state
.
uav
.
deviceId
][
261
]
=
null
;
window
.
$mmc
.
$store
.
commit
(
'MMCMQTT/setSate'
,
{
key
:
'dataSet'
,
value
:
dataSet
})
commit
(
'setState'
,
{
key
:
'uavRealTimeData'
,
value
:
{
...
state
.
uavRealTimeData
,
uploadAirline
:
null
}
})
}
},
1000
);
// 做个保险, 要是因为各种原因导致没飞起, 超过一分钟删除循环定时器
setTimeout
(()
=>
{
clearInterval
(
time
);
},
60000
)
}
catch
(
e
)
{
console
.
log
(
"一键起飞失败"
,
e
);
data
?.
callback
&&
data
.
callback
(
false
);
...
...
@@ -1180,7 +1232,7 @@ const actions = {
data
:
{
// taskID: data.taskID,
videoID
:
1
,
/* name: data.name,
/* name: data.name,
dbID: data.dbID, */
},
},
...
...
@@ -1272,17 +1324,17 @@ const actions = {
},
// 键盘控制
keyControl
({
state
},
data
)
{
console
.
log
(
data
,
'键盘控制'
);
console
.
log
(
data
,
"键盘控制"
);
if
(
state
.
uav
.
network
==
2
)
{
window
.
$mmc
.
$store
.
dispatch
(
'MMCMQTT/publish'
,
{
topic
:
'PX4/OBTAIN/'
+
state
.
uav
.
deviceId
,
window
.
$mmc
.
$store
.
dispatch
(
"MMCMQTT/publish"
,
{
topic
:
"PX4/OBTAIN/"
+
state
.
uav
.
deviceId
,
data
:
{
type
:
538
,
data
:
data
data
:
data
,
},
callback
()
{
data
.
callback
&&
data
.
callback
(
true
);
}
}
,
});
}
},
...
...
src/plugins/MMCGroundStation/store.js
浏览文件 @
b9563e0c
import
orders
from
"./orders"
;
import
dayjs
from
'dayjs'
;
export
default
{
namespaced
:
true
,
...
...
@@ -114,6 +115,8 @@ export default {
if
(
!
state
.
dataSet
[
deviceHardId
])
{
state
.
dataSet
[
deviceHardId
]
=
{};
}
metadata
.
$time
=
Date
.
now
();
// 打上时间戳
metadata
.
$timeStr
=
dayjs
(
data
.
$time
).
format
(
'YYYY-MM-DD hh:mm:ss'
);
state
.
dataSet
[
deviceHardId
]
=
metadata
;
commit
(
"setDataSet"
,
state
.
dataSet
);
}
...
...
src/plugins/MMCMQTT/store.js
浏览文件 @
b9563e0c
import
mqtt
from
"mqtt/dist/mqtt"
;
import
orders
from
"./orders"
;
import
dayjs
from
'dayjs'
;
function
uint8array2json
(
uint8array
)
{
if
(
!
uint8array
||
!
uint8array
.
length
)
{
...
...
@@ -81,6 +82,7 @@ export default {
}
data
.
$time
=
Date
.
now
();
// 打上时间戳
data
.
$timeStr
=
dayjs
(
data
.
$time
).
format
(
'YYYY-MM-DD hh:mm:ss'
);
state
.
dataSet
[
deviceHardId
][
data
.
type
]
=
data
;
commit
(
"setDataSet"
,
state
.
dataSet
);
});
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论