Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
ai-yunshou-vue
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
AI云守
ai-yunshou-vue
Commits
64b3652e
Commit
64b3652e
authored
Sep 03, 2024
by
胡占生
🇨🇳
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 日志管理接口对接联调,优化项目结构,解决项目bug
parent
b7f2ce3b
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
313 additions
and
235 deletions
+313
-235
src/api/logControl/index.js
src/api/logControl/index.js
+92
-0
src/views/alarmControl/components/form.vue
src/views/alarmControl/components/form.vue
+1
-1
src/views/alarmControl/index.vue
src/views/alarmControl/index.vue
+1
-1
src/views/algorithmList/components/details.vue
src/views/algorithmList/components/details.vue
+9
-9
src/views/logControl/index.vue
src/views/logControl/index.vue
+178
-192
src/views/videoControl/videoPreview/index.vue
src/views/videoControl/videoPreview/index.vue
+32
-32
No files found.
src/api/logControl/index.js
0 → 100644
View file @
64b3652e
/**
* 查询算法日志信息列表
* @param {string} algorrithmName
* @param {string} cameraNo
* @param {string} costTime
* @param {string} createBy
* @param {string} createTime
* @param {string} jsonResult
* @param {string} operId
* @param {string} operParam
* @param {string} operTime
* @param {string} params
* @param {string} remark
* @param {string} searchValue
* @param {string} status
* @param {string} updateBy
* @param {string} updateTime
* @returns
*/
import
request
from
'
@/utils/request
'
// 查询摄像头日志列表
export
function
listCameraLog
(
query
)
{
return
request
({
url
:
'
/test/cameraLog/list
'
,
method
:
'
get
'
,
params
:
query
})
}
// 查询算法日志列表
export
function
listAlgLog
(
query
)
{
return
request
({
url
:
'
/test/algorithmLog/list
'
,
method
:
'
get
'
,
params
:
query
})
}
// 查询算法日志列表x详情
export
function
detailAlgLog
(
id
)
{
return
request
({
url
:
`/test/algorithmLog/
${
id
}
`
,
method
:
'
get
'
,
})
}
// 修改算法日志状态
export
function
updateStatusAlgLog
(
query
)
{
return
request
({
url
:
`/test/algorithmLog/updateStatus`
,
method
:
'
get
'
,
params
:
query
})
}
// 新增算法日志列表
export
function
addAlgLog
(
data
)
{
return
request
({
url
:
'
/test/algorithmLog
'
,
method
:
'
post
'
,
data
:
data
})
}
// 修改算法日志列表
export
function
updateAlgLog
(
data
)
{
return
request
({
url
:
'
/test/algorithmLog
'
,
method
:
'
put
'
,
data
:
data
})
}
// 删除算法日志列表
export
function
deleteAlgLog
(
ids
)
{
return
request
({
url
:
`/test/algorithmLog/
${
ids
}
`
,
method
:
'
delete
'
})
}
// 导出算法日志列表
export
function
exportAlgLog
(
data
)
{
return
request
({
url
:
`/test/algorithmLog/export`
,
method
:
'
post
'
,
data
:
data
})
}
src/views/alarmControl/components/form.vue
View file @
64b3652e
...
...
@@ -18,7 +18,7 @@
预警等级
</div>
</
template
>
{{form.alarmLevel
Id
}}
{{form.alarmLevel
Name
}}
</el-descriptions-item>
<el-descriptions-item>
<
template
#label
>
...
...
src/views/alarmControl/index.vue
View file @
64b3652e
...
...
@@ -74,7 +74,7 @@
<div
style=
"width: 100%;overflow: hidden;"
>
<ImagePreview
style=
"width: 100%;"
:src=
"item.alarmImg"
/>
</div>
<h2>
{{
item
.
alarmType
}}
</h2>
<h2
:style=
"
{color:item.alarmLevelColor}"
>
{{
item
.
alarmType
}}
</h2>
<p
style=
"color: #999999;font-size: 12px;"
>
{{
parseTime
(
item
.
alarmTime
)
}}
</p>
...
...
src/views/algorithmList/components/details.vue
View file @
64b3652e
...
...
@@ -78,10 +78,6 @@
:isShowTip=
"false"
@
update:modelObj=
"getImgObj"
/>
<div
v-else
style=
"position: absolute;bottom: 5px;left: 26%;"
class=
"text-style"
>
请开启算法
</div>
<!-- <ImageUpload :limit='1' :fileSize="5" :isShowTip="false" @update:modelObj="getImgObj"/> -->
</div>
</el-card>
<el-card
>
...
...
@@ -116,7 +112,7 @@
<div
style=
"display: flex;justify-content: space-between;margin: 10px 0;"
>
<!-- <el-button type="primary" plain>重置区域</el-button> -->
<div></div>
<
el-button
type=
"primary"
plain
@
click=
"downVideo"
>
下载识别视频
</el-button
>
<
!-- <el-button type="primary" plain @click="downVideo">下载识别视频</el-button> --
>
<!-- <el-button v-if="getFileType(outFilePath)=='1'" type="primary" plain @click="downVideo">下载识别视频</el-button> -->
</div>
</el-card>
...
...
@@ -136,7 +132,7 @@
</div>
<el-divider
/>
<div
class=
"img-box gird-layout"
>
<div
class=
"img-item"
v-for=
"item in
effective
List"
:key=
"item.id"
>
<div
class=
"img-item"
v-for=
"item in
invalidImg
List"
:key=
"item.id"
>
<ImagePreview
style=
"height: 100%;"
:src=
"item.caseFile"
/>
</div>
</div>
...
...
@@ -155,10 +151,10 @@
</div>
<el-divider
/>
<div
class=
"img-box gird-layout"
>
<div
class=
"img-item"
v-for=
"item in invalidList"
:key=
"item.id"
>
<ImagePreview
style=
"height: 100%;"
:src=
"item.caseFile"
/>
<div
class=
"img-item"
v-for=
"item in invalidImgList"
:key=
"item.id"
>
<ImagePreview
style=
"height: 100%;"
:src=
"item.caseFile"
/>
</div>
</div>
</div>
<img
class=
"top-tip"
src=
"@/assets/images/close.png"
alt=
""
>
</div>
...
...
@@ -191,6 +187,8 @@ const backVideo = ref({})
const
applicationList
=
ref
([])
const
effectiveList
=
ref
([])
const
invalidList
=
ref
([])
const
invalidImgList
=
ref
([])
const
effectiveImgList
=
ref
([])
const
imgVideoData
=
ref
([])
const
nowText
=
ref
(
'
算法详情
'
)
const
baseUrl
=
'
http://192.168.3.82
'
...
...
@@ -228,6 +226,8 @@ function getDetials(){
listBoundary
({
algorithmId
:
roleId
}).
then
(
res
=>
{
effectiveList
.
value
=
res
.
rows
.
filter
(
item
=>
item
.
caseType
===
'
0
'
)
invalidList
.
value
=
res
.
rows
.
filter
(
item
=>
item
.
caseType
===
'
1
'
)
invalidImgList
.
value
=
res
.
rows
.
filter
(
item
=>
item
.
caseType
===
'
1
'
&&
item
.
caseFile
)
effectiveImgList
.
value
=
res
.
rows
.
filter
(
item
=>
item
.
caseType
===
'
0
'
&&
item
.
caseFile
)
})
}
/** 查询案例文件列表 */
...
...
src/views/logControl/index.vue
View file @
64b3652e
...
...
@@ -4,149 +4,130 @@
<el-card
class=
"left-list"
>
<el-tabs
v-model=
"activeName"
class=
"demo-tabs"
@
tab-click=
"handleClick"
>
<el-tab-pane
label=
"摄像头日志"
name=
"摄像头日志"
></el-tab-pane>
<el-tab-pane
label=
"算法日志"
name=
"算法日志"
></el-tab-pane>
<el-tab-pane
label=
"操作日志"
name=
"操作日志"
></el-tab-pane>
</el-tabs>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
v-show=
"showSearch"
>
<el-form-item
label=
"日志时间"
prop=
"name"
>
<el-date-picker
v-model=
"dateRange"
value-format=
"YYYY-MM-DD"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"摄像头"
prop=
"deptName"
>
<el-select
v-model=
"queryParams.deptName"
placeholder=
"请选择摄像头"
clearable
style=
"width: 200px"
>
<el-option
v-for=
"dict in sys_job_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"Refresh"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-table
v-loading=
"loading"
:data=
"jobList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
<el-table-column
label=
"姓名"
width=
"100"
align=
"center"
prop=
"jobId"
/>
<el-table-column
label=
"手机号"
align=
"center"
prop=
"jobName"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"身份证号"
align=
"center"
prop=
"jobGroup"
>
<template
#default
="
scope
"
>
<dict-tag
:options=
"sys_job_group"
:value=
"scope.row.jobGroup"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"所属部门"
align=
"center"
prop=
"invokeTarget"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"cronExpression"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"操作人"
align=
"center"
>
<
template
#default
="
scope
"
>
<el-switch
v-model=
"scope.row.status"
active-value=
"0"
inactive-value=
"1"
@
change=
"handleStatusChange(scope.row)"
></el-switch>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"200"
class-name=
"small-padding fixed-width"
>
<
template
#default
="
scope
"
>
<el-tooltip
content=
"修改"
placement=
"top"
>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
v-hasPermi=
"['monitor:job:edit']"
></el-button>
</el-tooltip>
<el-tooltip
content=
"删除"
placement=
"top"
>
<el-button
link
type=
"primary"
icon=
"Delete"
@
click=
"handleDelete(scope.row)"
v-hasPermi=
"['monitor:job:remove']"
></el-button>
</el-tooltip>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total > 0"
:total=
"total"
v-model:page=
"queryParams.pageNum"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</el-card>
<!-- 添加或修改定时任务对话框 -->
<el-dialog
:title=
"title"
v-model=
"open"
width=
"820px"
append-to-body
>
<el-form
ref=
"jobRef"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"任务名称"
prop=
"jobName"
>
<el-input
v-model=
"form.jobName"
placeholder=
"请输入任务名称"
/>
<el-tab-pane
label=
"摄像头日志"
name=
"摄像头日志"
>
<div>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
v-show=
"showSearch"
>
<el-form-item
label=
"日志时间"
prop=
"name"
>
<el-date-picker
v-model=
"dateRange"
value-format=
"YYYY-MM-DD"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"任务分组"
prop=
"jobGroup"
>
<el-select
v-model=
"form.jobGroup"
placeholder=
"请选择"
>
<el-option
v-for=
"dict in sys_job_group"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
></el-option>
<el-form-item
label=
"摄像头"
prop=
"deptName"
>
<el-select
v-model=
"queryParams.deptName"
placeholder=
"请选择摄像头"
clearable
style=
"width: 200px"
>
<el-option
v-for=
"dict in sys_job_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
prop=
"invokeTarget"
>
<
template
#label
>
<span>
调用方法
<el-tooltip
placement=
"top"
>
<template
#content
>
<div>
Bean调用示例:ryTask.ryParams('ry')
<br
/>
Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
<br
/>
参数说明:支持字符串,布尔类型,长整型,浮点型,整型
</div>
</
template
>
<el-icon><question-filled
/></el-icon>
</el-tooltip>
</span>
</template>
<el-input
v-model=
"form.invokeTarget"
placeholder=
"请输入调用目标字符串"
/>
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"Refresh"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"cron表达式"
prop=
"cronExpression"
>
<el-input
v-model=
"form.cronExpression"
placeholder=
"请输入cron执行表达式"
>
<
template
#append
>
<el-button
type=
"primary"
@
click=
"handleShowCron"
>
生成表达式
<i
class=
"el-icon-time el-icon--right"
></i>
</el-button>
</
template
>
</el-input>
</el-form>
<el-table
v-loading=
"loading"
:data=
"CameraLogList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
label=
"摄像头名称"
width=
"200"
align=
"center"
prop=
"areaBelong"
/>
<el-table-column
label=
"算法编号"
align=
"center"
prop=
"cameraNo"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"日志详情"
align=
"center"
prop=
"logDesc"
:show-overflow-tooltip=
"true"
>
</el-table-column>
<!--
<el-table-column
label=
"检测结果"
align=
"center"
prop=
"operParam"
:show-overflow-tooltip=
"true"
>
</el-table-column>
<el-table-column
label=
"检测时间"
align=
"center"
prop=
"operTime"
:show-overflow-tooltip=
"true"
/>
-->
</el-table>
</div>
</el-tab-pane>
<el-tab-pane
label=
"算法日志"
name=
"算法日志"
>
<div>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
v-show=
"showSearch"
>
<el-form-item
label=
"日志时间"
prop=
"name"
>
<el-date-picker
v-model=
"dateRange"
value-format=
"YYYY-MM-DD"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"24"
v-if=
"form.jobId !== undefined"
>
<el-form-item
label=
"状态"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
v-for=
"dict in sys_job_status"
:key=
"dict.value"
:value=
"dict.value"
>
{{ dict.label
}}
</el-radio>
</el-radio-group>
<el-form-item
label=
"摄像头"
prop=
"deptName"
>
<el-select
v-model=
"queryParams.deptName"
placeholder=
"请选择摄像头"
clearable
style=
"width: 200px"
>
<el-option
v-for=
"dict in sys_job_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"执行策略"
prop=
"misfirePolicy"
>
<el-radio-group
v-model=
"form.misfirePolicy"
>
<el-radio-button
value=
"1"
>
立即执行
</el-radio-button>
<el-radio-button
value=
"2"
>
执行一次
</el-radio-button>
<el-radio-button
value=
"3"
>
放弃执行
</el-radio-button>
</el-radio-group>
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"Refresh"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"是否并发"
prop=
"concurrent"
>
<el-radio-group
v-model=
"form.concurrent"
>
<el-radio-button
value=
"0"
>
允许
</el-radio-button>
<el-radio-button
value=
"1"
>
禁止
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<
template
#footer
>
<div
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</
template
>
</el-dialog>
</el-form>
<el-table
v-loading=
"loading"
:data=
"AlgLogList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
label=
"算法名称"
width=
"200"
align=
"center"
prop=
"algorrithmName"
/>
<el-table-column
label=
"算法编号"
align=
"center"
prop=
"cameraNo"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"返回结果"
align=
"center"
prop=
"jsonResult"
:show-overflow-tooltip=
"true"
>
</el-table-column>
<el-table-column
label=
"检测结果"
align=
"center"
prop=
"operParam"
:show-overflow-tooltip=
"true"
>
</el-table-column>
<el-table-column
label=
"检测时间"
align=
"center"
prop=
"operTime"
:show-overflow-tooltip=
"true"
/>
<!--
<el-table-column
label=
"操作人"
align=
"center"
>
<template
#default
="
scope
"
>
<el-switch
v-model=
"scope.row.status"
active-value=
"0"
inactive-value=
"1"
@
change=
"handleStatusChange(scope.row)"
></el-switch>
</
template
>
</el-table-column>
-->
<!-- <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['monitor:job:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['monitor:job:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column> -->
</el-table>
</div>
</el-tab-pane>
<el-tab-pane
label=
"操作日志"
name=
"操作日志"
>
<div>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
v-show=
"showSearch"
>
<el-form-item
label=
"日志时间"
prop=
"name"
>
<el-date-picker
v-model=
"dateRange"
value-format=
"YYYY-MM-DD"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"Refresh"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-table
v-loading=
"loading"
:data=
"OperateLogList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
label=
"日志编号"
align=
"center"
prop=
"operId"
/>
<el-table-column
label=
"系统模块"
align=
"center"
prop=
"title"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"操作类型"
align=
"center"
prop=
"businessType"
>
<
template
#default
="
scope
"
>
<dict-tag
:options=
"sys_oper_type"
:value=
"scope.row.businessType"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"操作人员"
align=
"center"
width=
"110"
prop=
"operName"
:show-overflow-tooltip=
"true"
sortable=
"custom"
:sort-orders=
"['descending', 'ascending']"
/>
<el-table-column
label=
"操作地址"
align=
"center"
prop=
"operIp"
width=
"130"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"操作状态"
align=
"center"
prop=
"status"
>
<
template
#default
="
scope
"
>
<dict-tag
:options=
"sys_common_status"
:value=
"scope.row.status"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"操作日期"
align=
"center"
prop=
"operTime"
width=
"180"
sortable=
"custom"
:sort-orders=
"['descending', 'ascending']"
>
<
template
#default
="
scope
"
>
<span>
{{
parseTime
(
scope
.
row
.
operTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"消耗时间"
align=
"center"
prop=
"costTime"
width=
"110"
:show-overflow-tooltip=
"true"
sortable=
"custom"
:sort-orders=
"['descending', 'ascending']"
>
<
template
#default
="
scope
"
>
<span>
{{
scope
.
row
.
costTime
}}
毫秒
</span>
</
template
>
</el-table-column>
</el-table>
</div>
</el-tab-pane>
</el-tabs>
<el-dialog
title=
"Cron表达式生成器"
v-model=
"openCron"
append-to-body
destroy-on-close
>
<crontab
ref=
"crontabRef"
@
hide=
"openCron = false"
@
fill=
"crontabFill"
:expression=
"expression"
></crontab>
</el-dialog>
<pagination
v-show=
"total > 0"
:total=
"total"
v-model:page=
"queryParams.pageNum"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getAllList"
/>
</el-card>
<!-- 任务日志详细 -->
<el-dialog
title=
"任务详细"
v-model=
"openView"
width=
"700px"
append-to-body
>
...
...
@@ -211,26 +192,22 @@
</template>
<
script
setup
name=
"Job"
>
import
{
listJob
,
getJob
,
delJob
,
addJob
,
updateJob
,
runJob
,
changeJobStatus
,
}
from
"
@/api/monitor/job
"
;
import
Crontab
from
"
@/components/Crontab
"
;
import
{
listAlgLog
,
listCameraLog
}
from
"
@/api/logControl/index
"
;
import
{
list
,
}
from
"
@/api/monitor/operlog
"
;
import
{
get
}
from
"
@vueuse/core
"
;
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
();
const
{
sys_job_group
,
sys_job_status
}
=
proxy
.
useDict
(
const
{
sys_job_group
,
sys_job_status
,
sys_oper_type
,
sys_common_status
}
=
proxy
.
useDict
(
"
sys_job_group
"
,
"
sys_job_status
"
"
sys_job_status
"
,
"
sys_oper_type
"
,
"
sys_common_status
"
);
const
nowText
=
ref
(
"
日志管理
"
);
const
activeName
=
ref
(
"
摄像头日志
"
);
const
jobList
=
ref
([]);
const
AlgLogList
=
ref
([]);
const
CameraLogList
=
ref
([]);
const
OperateLogList
=
ref
([]);
const
open
=
ref
(
false
);
const
loading
=
ref
(
true
);
const
showSearch
=
ref
(
true
);
...
...
@@ -266,14 +243,47 @@ const data = reactive({
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
);
function
handleClick
()
{
}
function
handleClick
(
val
)
{
activeName
.
value
=
val
.
props
.
name
console
.
log
(
"
🚀 ~ handleClick ~ activeName.value:
"
,
activeName
.
value
)
getAllList
()
}
/** 查询定时任务列表 */
function
getList
()
{
function
getAllList
(){
if
(
activeName
.
value
==
'
摄像头日志
'
)
getCameraLogList
()
if
(
activeName
.
value
==
'
算法日志
'
)
getAlgLogList
()
if
(
activeName
.
value
==
'
操作日志
'
)
getOperateLogList
()
}
/** 查询算法日志列表 */
function
getAlgLogList
()
{
loading
.
value
=
true
;
listAlgLog
(
proxy
.
addDateRange
(
queryParams
.
value
,
dateRange
.
value
)).
then
(
(
response
)
=>
{
AlgLogList
.
value
=
response
.
rows
;
total
.
value
=
response
.
total
;
loading
.
value
=
false
;
}
);
}
/** 查询摄像头日志列表 */
function
getCameraLogList
()
{
loading
.
value
=
true
;
list
Job
(
proxy
.
addDateRange
(
queryParams
.
value
,
dateRange
.
value
)).
then
(
list
CameraLog
(
proxy
.
addDateRange
(
queryParams
.
value
,
dateRange
.
value
)).
then
(
(
response
)
=>
{
jobList
.
value
=
response
.
rows
;
CameraLogList
.
value
=
response
.
rows
;
total
.
value
=
response
.
total
;
loading
.
value
=
false
;
}
);
}
/** 查询操作日志列表 */
function
getOperateLogList
()
{
loading
.
value
=
true
;
list
(
proxy
.
addDateRange
(
queryParams
.
value
,
dateRange
.
value
)).
then
(
(
response
)
=>
{
OperateLogList
.
value
=
response
.
rows
;
total
.
value
=
response
.
total
;
loading
.
value
=
false
;
}
...
...
@@ -309,7 +319,7 @@ function reset() {
/** 搜索按钮操作 */
function
handleQuery
()
{
queryParams
.
value
.
pageNum
=
1
;
getList
();
get
All
List
();
}
/** 重置按钮操作 */
...
...
@@ -344,18 +354,18 @@ function handleCommand(command, row) {
// 任务状态修改
function
handleStatusChange
(
row
)
{
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停用
"
;
proxy
.
$modal
.
confirm
(
'
确认要"
'
+
text
+
'
""
'
+
row
.
jobName
+
'
"任务吗?
'
)
.
then
(
function
()
{
return
changeJobStatus
(
row
.
jobId
,
row
.
status
);
})
.
then
(()
=>
{
proxy
.
$modal
.
msgSuccess
(
text
+
"
成功
"
);
})
.
catch
(
function
()
{
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
;
});
//
let text = row.status === "0" ? "启用" : "停用";
//
proxy.$modal
//
.confirm('确认要"' + text + '""' + row.jobName + '"任务吗?')
//
.then(function () {
//
return changeJobStatus(row.jobId, row.status);
//
})
//
.then(() => {
//
proxy.$modal.msgSuccess(text + "成功");
//
})
//
.catch(function () {
//
row.status = row.status === "0" ? "1" : "0";
//
});
}
/* 立即执行一次 */
...
...
@@ -385,10 +395,6 @@ function handleShowCron() {
openCron
.
value
=
true
;
}
/** 确定后回传值 */
function
crontabFill
(
value
)
{
form
.
value
.
cronExpression
=
value
;
}
/** 任务日志列表查询 */
function
handleJobLog
(
row
)
{
...
...
@@ -414,26 +420,6 @@ function handleUpdate(row) {
});
}
/** 提交按钮 */
function
submitForm
()
{
proxy
.
$refs
[
"
jobRef
"
].
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
form
.
value
.
jobId
!=
undefined
)
{
updateJob
(
form
.
value
).
then
((
response
)
=>
{
proxy
.
$modal
.
msgSuccess
(
"
修改成功
"
);
open
.
value
=
false
;
getList
();
});
}
else
{
addJob
(
form
.
value
).
then
((
response
)
=>
{
proxy
.
$modal
.
msgSuccess
(
"
新增成功
"
);
open
.
value
=
false
;
getList
();
});
}
}
});
}
/** 删除按钮操作 */
function
handleDelete
(
row
)
{
...
...
@@ -444,7 +430,7 @@ function handleDelete(row) {
return
delJob
(
jobIds
);
})
.
then
(()
=>
{
getList
();
get
AlgLog
List
();
proxy
.
$modal
.
msgSuccess
(
"
删除成功
"
);
})
.
catch
(()
=>
{
});
...
...
@@ -461,7 +447,7 @@ function handleExport() {
);
}
getList
();
get
All
List
();
</
script
>
<
style
scoped
lang=
"scss"
>
.left-list
{
...
...
src/views/videoControl/videoPreview/index.vue
View file @
64b3652e
...
...
@@ -54,7 +54,7 @@
>
<
template
v-slot:default
>
<!--
<img
src=
"@/assets/images/picStream.png"
style=
"width: 100%"
/>
-->
<canvas
id=
"video"
style=
"width: 100%
"
></canvas>
<canvas
id=
"video"
:style=
"
{width: '100%', maxHeight: (globalScreenHeight-120)+'px'}
" >
</canvas>
</
template
>
</el-card>
</div>
...
...
@@ -84,7 +84,7 @@
<el-form-item
label=
"预警区域:"
>
{{
form
.
title
}}
</el-form-item>
-->
<el-form-item
label=
"预警类型:"
>
{{
item
.
alarmType
}}
</el-form-item>
<el-form-item
label=
"预警时间:"
>
{{
parseTime
(
item
.
alarmTime
)
}}
</el-form-item>
<el-form-item
label=
"预警等级:"
><el-tag
:
type=
"'danger'"
effect=
"dark"
>
{{
item
.
alarmLevelId
+
'
级
预警
'
}}
</el-tag></el-form-item>
<el-form-item
label=
"预警等级:"
><el-tag
:
color=
"item.alarmLevelColor"
type=
"info"
effect=
"dark"
>
{{
item
.
alarmLevelName
+
'
预警
'
}}
</el-tag></el-form-item>
</el-form>
</
template
>
</el-card>
...
...
@@ -135,67 +135,67 @@ const data = reactive({
});
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
);
/** 通过条件过滤节点 */
onMounted
(()
=>
{
// player.value.play()//播放
getTreeData
()
getWaringData
()
getVideos
()
})
onDeactivated
(()
=>
{
player
.
value
.
destroy
();
player
.
value
=
null
;
})
watch
(
deptName
,
(
val
)
=>
{
deptTreeRef
.
value
.
filter
(
val
)
})
const
filterNode
=
(
value
,
data
)
=>
{
if
(
!
value
)
return
true
;
return
data
.
label
.
indexOf
(
value
)
!==
-
1
;
};
function
getTreeData
()
{
videoTreeListManage
().
then
((
res
)
=>
{
console
.
log
(
"
🚀 ~ videoTreeListManage ~ res:
"
,
res
)
deptOptions
.
value
=
res
.
data
})
}
function
getWaringData
()
{
listAlarm
().
then
((
res
)
=>
{
listAlarm
(
queryParams
.
value
).
then
((
res
)
=>
{
algorithmList
.
value
=
res
.
rows
})
}
getTreeData
()
getWaringData
()
function
getVideos
(
str
){
let
canvas
=
document
.
getElementById
(
'
video
'
)
let
url
=
str
?
str
:
'
rtsp://192.168.20.211:554/av0_0
'
if
(
player
.
value
)
{
player
.
value
.
destroy
();
player
.
value
=
null
;
}
player
.
value
=
new
JSMpeg
.
Player
(
"
ws://192.168.4.232:9999/rtsp?url=
"
+
btoa
(
url
),
{
canvas
:
canvas
})
player
.
value
.
play
()
}
// // 当需要重新加载视频流时,可以调用以下函数
// function reloadVideoStream(str) {
// let canvas = document.getElementById('video')
// var ctx = canvas.getContext('2d');
// ctx.clearRect(0, 0, canvas.width, canvas.height);
// // 更新视频流URL
// player.value = new JSMpeg.Player("ws://192.168.4.232:9999/rtsp?url="+btoa(str), {canvas: canvas})
// // 开始解码新的视频流
// player.value.play();
// }
onMounted
(()
=>
{
// player.value.play()//播放
getVideos
()
})
watch
(
deptName
,
(
val
)
=>
{
deptTreeRef
.
value
.
filter
(
val
)
})
}
function
handleNodeClick
(
row
)
{
const
treeType
=
row
.
id
.
split
(
"
-
"
)[
0
];
const
treeID
=
row
.
id
.
split
(
"
-
"
)[
1
];
if
(
treeType
==
'
点位
'
){
handlvideoPath
(
treeID
)
queryParams
.
value
.
locationId
=
treeID
;
queryParams
.
value
.
regionId
=
null
;
}
else
{
queryParams
.
value
.
regionId
=
treeID
;
queryParams
.
value
.
locationId
=
null
;
}
}
getWaringData
()
}
function
handAdd
(
row
)
{
algFormRef
.
value
.
handleAdd
();
}
function
handleSetSize
(
row
)
{
}
function
handleUpdate
(
row
)
{
}
function
handlvideoPath
(
id
)
{
idDevice
(
id
).
then
((
res
)
=>
{
getVideos
(
res
.
data
.
videoUrl
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment