Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
super-hive-web
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
Packages
Packages
Container Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
SuperHive
front-end
super-hive-web
Commits
ff284b93
Commit
ff284b93
authored
Aug 10, 2020
by
huangcb
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into huangcb
parents
82a5b848
6313111e
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
523 additions
and
167 deletions
+523
-167
model-management.js
src/api/data-management/model-management.js
+17
-0
dashboard.js
src/api/data-visible/dashboard.js
+9
-0
index.vue
src/views/data-management/model-management/index.vue
+36
-2
rules.vue
src/views/data-management/model-management/rules.vue
+294
-0
index.vue
src/views/data-visible/dashboard/index.vue
+137
-102
index.vue
src/views/device-alarm/alarm-show/index.vue
+30
-63
No files found.
src/api/data-management/model-management.js
View file @
ff284b93
...
@@ -47,3 +47,20 @@ export function deleteModel(data) {
...
@@ -47,3 +47,20 @@ export function deleteModel(data) {
})
})
}
}
// 保存告警规则
export
function
saveAlarmRule
(
data
)
{
return
request
({
url
:
`
${
baseURL
}
/iot/dataModel/alarmRule/save`
,
method
:
'
post
'
,
data
})
}
// 获取告警规则列表
export
function
listAlarmRule
(
data
)
{
return
request
({
url
:
`
${
baseURL
}
/iot/dataModel/alarmRule/list`
,
method
:
'
post
'
,
data
})
}
src/api/data-visible/dashboard.js
View file @
ff284b93
...
@@ -36,3 +36,12 @@ export function getModelInstanceChart(data) {
...
@@ -36,3 +36,12 @@ export function getModelInstanceChart(data) {
data
data
})
})
}
}
// 根据设备类型ID获取所有设备实例
export
function
getAllInstanceByDeviceTypeId
(
data
)
{
return
request
({
url
:
`
${
baseURL
}
/iot/deviceModel/instance/getInstanceByDeviceTypeId`
,
method
:
'
post
'
,
data
})
}
src/views/data-management/model-management/index.vue
View file @
ff284b93
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
prop=
"name"
prop=
"name"
>
>
<el-input
v-model=
"searchForm.name"
clearable
placeholder=
"模型名称"
>
<el-input
v-model=
"searchForm.name"
clearable
placeholder=
"模型名称"
>
<el-button
slot=
"append"
icon=
"el-icon-search"
@
click=
"listModel(1)"
></el-button
>
<el-button
slot=
"append"
icon=
"el-icon-search"
@
click=
"listModel(1)"
/
>
</el-input>
</el-input>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
...
@@ -44,6 +44,15 @@
...
@@ -44,6 +44,15 @@
prop=
"description"
prop=
"description"
label=
"描述"
label=
"描述"
/>
/>
<el-table-column
label=
"操作"
width=
"140px"
align=
"center"
>
<
template
slot-scope=
"props"
>
<el-button
type=
"text"
@
click=
"showRulesView(props.row)"
>
告警规则
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-table>
<el-pagination
<el-pagination
...
@@ -87,18 +96,34 @@
...
@@ -87,18 +96,34 @@
@
delete=
"onDelete()"
@
delete=
"onDelete()"
/>
/>
</esv-dialog>
</esv-dialog>
<esv-dialog
title=
"告警规则"
:visible.sync=
"rulesDialogVisible"
width=
"60%"
top=
"0"
>
<Rules
v-if=
"rulesDialogVisible"
:id=
"currentRowId"
:add=
"add"
@
cancel=
"rulesDialogVisible = false"
@
confirm=
"onRulesConfirm"
/>
</esv-dialog>
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
Details
from
'
@/views/data-management/model-management/detail
'
import
Details
from
'
@/views/data-management/model-management/detail
'
import
AddOrUpdate
from
'
@/views/data-management/model-management/AddOrUpdate
'
import
AddOrUpdate
from
'
@/views/data-management/model-management/AddOrUpdate
'
import
Rules
from
'
@/views/data-management/model-management/rules
'
import
{
listModel
}
from
'
@/api/data-management/model-management
'
import
{
listModel
}
from
'
@/api/data-management/model-management
'
export
default
{
export
default
{
name
:
'
ObjectModel
'
,
name
:
'
ObjectModel
'
,
components
:
{
components
:
{
Details
,
Details
,
AddOrUpdate
AddOrUpdate
,
Rules
},
},
props
:
{},
props
:
{},
data
()
{
data
()
{
...
@@ -109,6 +134,7 @@ export default {
...
@@ -109,6 +134,7 @@ export default {
add
:
true
,
add
:
true
,
dialogVisible
:
false
,
dialogVisible
:
false
,
detailDialogVisible
:
false
,
detailDialogVisible
:
false
,
rulesDialogVisible
:
false
,
tableData
:
[
tableData
:
[
],
],
addForm
:
{
addForm
:
{
...
@@ -182,9 +208,17 @@ export default {
...
@@ -182,9 +208,17 @@ export default {
this
.
dialogVisible
=
false
this
.
dialogVisible
=
false
this
.
listModel
(
this
.
pageForm
.
pageNum
)
this
.
listModel
(
this
.
pageForm
.
pageNum
)
},
},
onRulesConfirm
()
{
this
.
rulesDialogVisible
=
false
},
onDelete
()
{
onDelete
()
{
this
.
detailDialogVisible
=
false
this
.
detailDialogVisible
=
false
this
.
listModel
(
this
.
pageForm
.
pageNum
)
this
.
listModel
(
this
.
pageForm
.
pageNum
)
},
showRulesView
(
row
)
{
this
.
rulesDialogVisible
=
true
this
.
currentRowId
=
row
.
id
this
.
add
=
false
}
}
}
}
}
}
...
...
src/views/data-management/model-management/rules.vue
0 → 100644
View file @
ff284b93
<
template
>
<div>
<div>
<el-card>
<div
slot=
"header"
class=
"clearfix"
>
<span>
规则列表
</span>
<el-button
style=
"float: right; margin-left: 10px"
type=
"primary"
@
click=
"addRow"
>
添加
</el-button>
</div>
<el-form
ref=
"rulesForm"
:model=
"rulesForm"
class=
"table-form"
>
<el-table
:data=
"rulesForm.alarmRuleItemList"
style=
"width: 100%; height: 260px;"
border
>
<el-table-column
type=
"index"
label=
"序号"
width=
"50px"
align=
"center"
/>
<el-table-column
prop=
"propertyId"
label=
"数据属性"
width=
"155"
>
<template
slot-scope=
"props"
>
<el-form-item
v-if=
"props.row.edit"
:prop=
"`alarmRuleItemList.$
{props.$index}.propertyId`"
label=""
style="margin-bottom: 0px"
>
<el-select
v-model=
"props.row.propertyId"
>
<el-option
v-for=
"(item, index) in modelForm.propertyList"
:key=
"index"
:label=
"item.propertyName"
:value=
"item.id"
/>
</el-select>
</el-form-item>
<div
v-else
>
{{
propertyCodeFormat
(
props
.
row
.
propertyId
)
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"ruleExpression"
label=
"判定规则"
width=
"155"
>
<
template
slot-scope=
"props"
>
<el-form-item
v-if=
"props.row.edit"
:prop=
"`alarmRuleItemList.$
{props.$index}.ruleExpression`"
label=""
style="margin-bottom: 0px"
>
<el-select
v-model=
"props.row.ruleExpression"
>
<el-option
v-for=
"(item, index) in dictionary.expression"
:key=
"index"
:label=
"item.name"
:value=
"item.code"
/>
</el-select>
</el-form-item>
<div
v-else
>
{{
$_dictionaryFormat
(
null
,
null
,
props
.
row
.
ruleExpression
,
null
,
'
expression
'
)
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"threshold"
label=
"判定值"
>
<
template
slot-scope=
"props"
>
<el-form-item
v-if=
"props.row.edit"
:prop=
"`alarmRuleItemList.$
{props.$index}.threshold`"
label=""
style="margin-bottom: 0px"
>
<el-input
v-model=
"props.row.threshold"
/>
</el-form-item>
<div
v-else
>
{{
props
.
row
.
threshold
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"alarmLevel"
label=
"告警等级"
width=
"155"
>
<
template
slot-scope=
"props"
>
<el-form-item
v-if=
"props.row.edit"
:prop=
"`alarmRuleItemList.$
{props.$index}.alarmLevel`"
label=""
style="margin-bottom: 0px"
>
<el-select
v-model=
"props.row.alarmLevel"
>
<el-option
v-for=
"(item, index) in dictionary.alarm_level"
:key=
"index"
:label=
"item.name"
:value=
"item.code"
/>
</el-select>
</el-form-item>
<div
v-else
>
{{
$_dictionaryFormat
(
null
,
null
,
props
.
row
.
alarmLevel
,
null
,
'
alarm_level
'
)
}}
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"140px"
align=
"center"
>
<
template
slot-scope=
"props"
>
<el-button
v-if=
"!props.row.edit"
type=
"text"
style=
"margin-right: 20px"
@
click=
"editItem(props.row)"
>
编辑
</el-button>
<el-button
v-if=
"props.row.edit"
type=
"text"
style=
"margin-right: 20px"
@
click=
"finishItem(props.row)"
>
完成
</el-button>
<el-popconfirm
title=
"确定要删除此条记录吗?"
@
onConfirm=
"deleteItem(props.$index)"
>
<el-button
slot=
"reference"
type=
"text"
>
删除
</el-button>
</el-popconfirm>
</
template
>
</el-table-column>
</el-table>
</el-form>
</el-card>
</div>
<div
class=
"el-dialog__footer"
style=
"margin-top: 20px"
>
<el-button
@
click=
"cancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"confirm"
>
提交
</el-button>
</div>
</div>
</template>
<
script
>
import
dictionary
from
'
@/utils/dictionary
'
import
{
getModelDetail
,
saveAlarmRule
,
listAlarmRule
}
from
'
@/api/data-management/model-management
'
export
default
{
name
:
'
Rules
'
,
mixins
:
[
dictionary
],
props
:
{
add
:
{
type
:
Boolean
,
default
:
true
},
id
:
{
type
:
[
String
,
Number
],
default
:
null
}
},
data
()
{
return
{
rulesForm
:
{
modelId
:
null
,
alarmRuleItemList
:
[]
},
modelForm
:
{
name
:
null
,
description
:
null
,
hasInstance
:
false
,
instanceCount
:
null
,
propertyList
:
[]
}
}
},
computed
:
{
},
created
()
{
if
(
!
this
.
add
)
{
this
.
getModelDetail
()
this
.
listAlarmRule
()
}
},
methods
:
{
getModelDetail
()
{
getModelDetail
({
id
:
this
.
id
})
.
then
(
res
=>
{
this
.
rulesForm
.
modelId
=
this
.
id
this
.
modelForm
=
{
...
res
.
data
}
this
.
modelForm
.
propertyList
=
res
.
data
.
propertyList
.
map
(
v
=>
{
return
{
propertyCode
:
v
.
propertyCode
,
propertyName
:
v
.
propertyName
,
propertyType
:
v
.
propertyType
,
propertyDefaultValue
:
v
.
propertyDefaultValue
,
propertyUnit
:
v
.
propertyUnit
,
id
:
v
.
id
,
edit
:
false
}
})
})
.
catch
(
err
=>
{
console
.
error
(
err
.
message
)
this
.
$message
.
error
(
'
查询遇到问题
'
)
})
},
listAlarmRule
()
{
listAlarmRule
({
modelId
:
this
.
id
})
.
then
(
res
=>
{
this
.
rulesForm
.
alarmRuleItemList
=
res
.
data
.
map
(
v
=>
{
return
{
propertyId
:
v
.
propertyId
,
ruleExpression
:
v
.
ruleExpression
,
threshold
:
v
.
threshold
,
alarmLevel
:
v
.
alarmLevel
,
edit
:
false
}
})
})
.
catch
(
err
=>
{
console
.
error
(
err
.
message
)
this
.
$message
.
error
(
err
.
message
)
})
},
cancel
()
{
this
.
$emit
(
'
cancel
'
)
},
addRow
()
{
this
.
rulesForm
.
alarmRuleItemList
.
push
({
propertyId
:
null
,
ruleExpression
:
null
,
threshold
:
null
,
alarmLevel
:
null
,
edit
:
true
})
if
(
this
.
rulesForm
.
alarmRuleItemList
.
length
>
1
)
{
this
.
rulesForm
.
alarmRuleItemList
[
this
.
rulesForm
.
alarmRuleItemList
.
length
-
2
].
edit
=
false
}
},
validate
()
{
const
p
=
[
this
.
$refs
.
rulesForm
.
validate
()
]
return
Promise
.
all
(
p
)
},
confirm
()
{
this
.
validate
()
.
then
(
_
=>
{
this
.
saveAlarmRule
()
})
.
catch
(
_
=>
{})
},
editItem
(
row
)
{
row
.
edit
=
true
},
finishItem
(
row
)
{
row
.
edit
=
false
},
deleteItem
(
index
)
{
this
.
rulesForm
.
alarmRuleItemList
.
splice
(
index
)
},
propertyCodeFormat
(
propertyId
)
{
const
property
=
this
.
modelForm
.
propertyList
.
find
(
v
=>
v
.
id
===
propertyId
)
return
property
?
property
.
propertyName
:
null
},
saveAlarmRule
()
{
const
params
=
{
modelId
:
this
.
rulesForm
.
modelId
}
params
.
alarmRuleItemList
=
this
.
rulesForm
.
alarmRuleItemList
.
map
(
v
=>
{
return
{
propertyId
:
v
.
propertyId
,
ruleExpression
:
v
.
ruleExpression
,
threshold
:
v
.
threshold
,
alarmLevel
:
v
.
alarmLevel
}
})
saveAlarmRule
(
params
)
.
then
(
_
=>
this
.
$message
.
success
(
'
保存成功
'
))
.
then
(
_
=>
{
this
.
$emit
(
'
confirm
'
)
})
.
catch
(
err
=>
{
console
.
error
(
err
.
message
)
this
.
$message
.
error
(
err
.
message
)
})
}
}
}
</
script
>
<
style
scoped
>
.clearfix
{
line-height
:
36px
;
}
</
style
>
src/views/data-visible/dashboard/index.vue
View file @
ff284b93
This diff is collapsed.
Click to expand it.
src/views/device-alarm/alarm-show/index.vue
View file @
ff284b93
...
@@ -121,71 +121,26 @@
...
@@ -121,71 +121,26 @@
</el-card>
</el-card>
<el-dialog
<el-dialog
:title=
"add ? '增加系统' : '告警详情'
"
title=
"告警详情
"
:visible.sync=
"dialogVisible"
:visible.sync=
"dialogVisible"
width=
"
7
00px"
width=
"
8
00px"
>
>
<el-form
<descriptions
v-if=
"dialogVisible"
label-position=
"top"
:model=
"addForm"
label-width=
"80px"
label-width=
"90px"
>
<el-form-item
label=
"设备类型"
>
{{ detailItem.deviceTypeName }}
</el-form-item>
<el-form-item
label=
"设备名称"
>
{{ detailItem.deviceName }}
</el-form-item>
<el-form-item
label=
"模型名称"
>
{{ detailItem.dataModelName }}
</el-form-item>
<el-form-item
label=
"属性代码"
>
{{ detailItem.propertyCode }}
</el-form-item>
<el-form-item
label=
"属性名称"
>
{{ detailItem.propertyName }}
</el-form-item>
<el-form-item
label=
"判定规则"
>
{{ $_dictionaryFormat(detailItem.ruleExpression, 'expression') }}
</el-form-item>
<el-form-item
label=
"告警等级"
>
{{ $_dictionaryFormat(detailItem.alarmLevel, 'alarm_level') }}
</el-form-item>
<el-form-item
label=
"阈值"
>
{{ detailItem.threshold }}
</el-form-item>
<el-form-item
label=
"上报值"
>
{{ detailItem.reportValue }}
</el-form-item>
<el-form-item
label=
"上报时间"
>
{{ $moment(detailItem.reportTime, 'YYYY-MM-DD HH:mm:ss') }}
</el-form-item>
<el-form-item
label=
"告警时间"
>
>
{{ $moment(detailItem.alarmTime, 'YYYY-MM-DD HH:mm:ss') }}
<descriptions-item
label=
"设备类型"
:value=
"detailItem.deviceTypeName"
/>
</el-form-item>
<descriptions-item
label=
"设备名称"
:value=
"detailItem.deviceName"
/>
</el-form>
<descriptions-item
label=
"模型名称"
:value=
"detailItem.dataModelName"
/>
<descriptions-item
label=
"属性代码"
:value=
"detailItem.propertyCode"
/>
<descriptions-item
label=
"属性名称"
:value=
"detailItem.propertyName"
/>
<descriptions-item
label=
"判定规则"
:value=
"$_dictionaryFormat(detailItem.ruleExpression, 'expression')"
/>
<descriptions-item
label=
"告警等级"
:value=
"$_dictionaryFormat(detailItem.alarmLevel, 'alarm_level')"
/>
<descriptions-item
label=
"阈值"
:value=
"detailItem.threshold"
/>
<descriptions-item
label=
"上报值"
:value=
"detailItem.reportValue"
/>
<descriptions-item
label=
"上报时间"
:value=
"$moment(detailItem.reportTime, 'YYYY-MM-DD HH:mm:ss')"
/>
<descriptions-item
label=
"告警时间"
:value=
"$moment(detailItem.alarmTime, 'YYYY-MM-DD HH:mm:ss')"
/>
</descriptions>
<span
slot=
"footer"
class=
"dialog-footer"
>
<span
slot=
"footer"
class=
"dialog-footer"
>
<!-- <el-button @click="dialogVisible = false">取 消</el-button>-->
<!-- <el-button @click="dialogVisible = false">取 消</el-button>-->
<el-button
type=
"primary"
@
click=
"dialogVisible = false"
>
确 定
</el-button>
<el-button
type=
"primary"
@
click=
"dialogVisible = false"
>
确 定
</el-button>
...
@@ -212,7 +167,19 @@ export default {
...
@@ -212,7 +167,19 @@ export default {
add
:
true
,
add
:
true
,
dialogVisible
:
false
,
dialogVisible
:
false
,
tableData
:
[],
tableData
:
[],
detailItem
:
null
,
detailItem
:
{
deviceTypeName
:
null
,
deviceName
:
null
,
dataModelName
:
null
,
propertyCode
:
null
,
propertyName
:
null
,
ruleExpression
:
null
,
alarmLevel
:
null
,
threshold
:
null
,
reportValue
:
null
,
reportTime
:
null
,
alarmTime
:
null
},
pageForm
:
{
pageForm
:
{
pageSize
:
10
,
pageSize
:
10
,
pageNum
:
1
,
pageNum
:
1
,
...
...
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