Toggle navigation
Toggle navigation
This project
Loading...
Sign in
monitor_v3
/
hg-monitor-web
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
0
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Email Patches
Plain Diff
Browse Files
Authored by
zhangtianqi
about a year ago
Commit
cfffe38088170a97de650ce4213d6fc009400910
1 parent
4afeff7a
禅道:漏洞处理页面
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
526 additions
and
0 deletions
hg-monitor-web-base/src/main/resources/static/src/controller/main-biz-card.js
hg-monitor-web-base/src/main/resources/static/src/views/index-biz-card.html
hg-monitor-web-qh/src/main/resources/static/src/views/documentationManagement/vulnerability.html
hg-monitor-web-qh/src/main/resources/static/vue3/src/router/index.js
hg-monitor-web-qh/src/main/resources/static/vue3/src/views/documentationManagement/vulnerability.html
hg-monitor-web-qh/src/main/resources/static/vue3/src/views/documentationManagement/vulnerability.js
hg-monitor-web-qh/src/main/resources/static/vue3/src/views/documentationManagement/vulnerabilityList.html
hg-monitor-web-qh/src/main/resources/static/vue3/src/views/documentationManagement/vulnerabilityList.js
hg-monitor-web-base/src/main/resources/static/src/controller/main-biz-card.js
View file @
cfffe38
...
...
@@ -48,6 +48,114 @@ layui.define(['common', 'swiper', 'admin', 'commonDetail', 'mxClient', 'sessions
});
}
let
list
=
[
{
title
:
'这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称'
,
level
:
'高'
,
time
:
'2023-12-20 18:00:00'
,
},
{
title
:
'这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称'
,
level
:
'高'
,
time
:
'2023-12-20 18:00:00'
,
},
]
vulnerabilityDialog
();
//漏洞处理弹窗
function
vulnerabilityDialog
(){
let
dom
=
`
<
ul
style
=
"padding: 10px 15px;"
>
$
{
list
.
map
(
item
=>
{
return
`
<
li
style
=
"padding: 20px 0px;border-bottom: 2px solid #ccc;"
>
<
span
style
=
"color: #C41011;border-bottom: 1px solid;cursor: pointer;overflow: hidden;
text-overflow: ellipsis;white-space: nowrap;max-width: 100%;display: inline-block;"
class
=
"vulnerability-name"
>
$
{
item
.
title
}
<
/span
>
<
div
style
=
"margin-top: 20px;"
>
<
span
style
=
"margin-right: 30px;"
>
漏洞级别
:
<
span
style
=
"padding: 4px 10px;color: white;background-color: #C41011;border-radius: 4px;"
>
$
{
item
.
level
}
<
/span></
span
>
<
span
>
披露时间:
$
{
item
.
time
}
<
/span
>
<
/div
>
<
/li>
`
}).
join
(
''
)
}
<
/ul
>
`
if
(
list
.
length
>
0
){
layer
.
open
({
title
:
[
'漏洞咨询'
,
'font-size:20px;background-color: #d0ddec;display:flex;align-items: center; justify-content: flex-start;'
],
type
:
1
,
area
:
[
'40%'
,
'60%'
],
closeBtn
:
0
,
id
:
1
,
content
:
dom
,
btn
:
false
,
move
:
false
,
success
:()
=>
{
},
})
}
}
$
(
'.vulnerability-name'
).
unbind
(
"click"
).
click
(()
=>
{
let
detail
=
`
<
form
class
=
"layui-form"
style
=
"margin-top: 15px;"
lay
-
filter
=
"vulnerabilityForm"
>
<
div
class
=
"layui-form-item"
>
<
label
class
=
"layui-form-label"
>
漏洞名称
:
<
/label
>
<
div
class
=
"layui-input-block"
>
这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称
<
/div
>
<
/div
>
<
div
class
=
"layui-form-item"
>
<
label
class
=
"layui-form-label"
>
漏洞详情
:
<
/label
>
<
div
class
=
"layui-input-block"
>
这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称
<
/div
>
<
/div
>
<
div
class
=
"layui-form-item"
>
<
label
class
=
"layui-form-label"
>
影响范围
:
<
/label
>
<
div
class
=
"layui-input-block"
>
这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称
<
/div
>
<
/div
>
<
div
class
=
"layui-form-item"
>
<
label
class
=
"layui-form-label"
>
修复建议
:
<
/label
>
<
div
class
=
"layui-input-block"
>
这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称
<
/div
>
<
/div
>
<
div
class
=
"layui-form-item"
>
<
label
class
=
"layui-form-label"
><
span
style
=
"color: red;"
>*<
/span>阅读状态:</
label
>
<
div
class
=
"layui-input-inline"
>
<
input
type
=
"radio"
name
=
"readStatus"
value
=
"已读"
title
=
"已读"
lay
-
filter
=
"readStatus"
>
<
input
type
=
"radio"
name
=
"readStatus"
value
=
"未读"
title
=
"未读"
lay
-
filter
=
"readStatus"
checked
>
<
/div
>
<
/div
>
<
div
class
=
"layui-form-item"
>
<
label
class
=
"layui-form-label"
><
span
style
=
"color: red;"
>*<
/span>是否涉及:</
label
>
<
div
class
=
"layui-input-inline"
>
<
input
type
=
"radio"
name
=
"whether"
value
=
"是"
title
=
"是"
lay
-
filter
=
"whether"
>
<
input
type
=
"radio"
name
=
"whether"
value
=
"否"
title
=
"否"
lay
-
filter
=
"whether"
checked
>
<
/div
>
<
/div
>
<
/form
>
`
//漏洞处理抽屉
layer
.
open
({
title
:
[
'漏洞咨询'
,
'font-size:20px;background-color: #d0ddec;display:flex;align-items: center; justify-content: flex-start;'
],
type
:
1
,
offset
:
'rb'
,
area
:
[
'30%'
,
'100%'
],
closeBtn
:
0
,
anim
:
3
,
content
:
detail
,
btn
:
[
'确定'
],
move
:
false
,
success
:()
=>
{
form
.
render
();
},
yes
:(
index
)
=>
{
list
.
splice
(
0
,
1
);
layer
.
close
(
index
);
vulnerabilityDialog
();
}
})
})
function
checkPassword
(
pattern
,
oldPwd
)
{
var
msg
=
"密码安全等级过低,请修改密码"
;
var
password
=
localStorage
.
getItem
(
"password"
);
...
...
hg-monitor-web-base/src/main/resources/static/src/views/index-biz-card.html
View file @
cfffe38
<article
class=
"page-container nxIndex index topo topo-index--view"
>
<div
class=
"layui-card"
id=
"layui-card-id"
>
<!-- <iframe src="/vue3/index.html#/vulnerability/list" frameborder="0"></iframe>-->
<!--卡片-->
<div
class=
"index-top"
id=
"biz_card_area"
style=
"padding: 2px;"
>
<div
class=
"index-banner"
>
...
...
hg-monitor-web-qh/src/main/resources/static/src/views/documentationManagement/vulnerability.html
0 → 100644
View file @
cfffe38
<title>
漏洞管理
</title>
<iframe
class=
"layadmin-iframe"
src=
"/vue3/index.html#/vulnerability"
style=
"height: 99.5%!important;"
/>
\ No newline at end of file
...
...
hg-monitor-web-qh/src/main/resources/static/vue3/src/router/index.js
View file @
cfffe38
...
...
@@ -44,6 +44,16 @@ const routes = [{
component
:
()
=>
myImport
(
'views/documentationManagement/index'
)
},
{
path
:
'/vulnerability'
,
name
:
'vulnerability'
,
component
:
()
=>
myImport
(
'views/documentationManagement/vulnerability'
)
},
{
path
:
'/vulnerability/list'
,
name
:
'vulnerability'
,
component
:
()
=>
myImport
(
'views/documentationManagement/vulnerabilityList'
)
},
{
path
:
'/documentRecycle'
,
name
:
'documentRecycle'
,
component
:
()
=>
myImport
(
'views/documentationManagement/documentRecycle'
)
...
...
hg-monitor-web-qh/src/main/resources/static/vue3/src/views/documentationManagement/vulnerability.html
0 → 100644
View file @
cfffe38
<div
class=
"container"
>
<div
class=
"cm-card"
>
<div
class=
"search"
>
<div
class=
"condition esData-conditon"
style=
"justify-content: space-between;width: 100%;"
>
<el-form
:inline=
"true"
>
<el-form-item>
<el-input
clearable
:size=
"$global.elementConfig.size.input"
v-model=
"queryParams.keyWord"
placeholder=
"关键字搜索"
/>
</el-form-item>
<el-form-item>
<el-select
clearable
:size=
"$global.elementConfig.size.input"
v-model=
"queryParams.type"
placeholder=
"漏洞类型"
>
<el-option
:value=
"1"
>
是
</el-option>
<el-option
:value=
"0"
>
否
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select
clearable
:size=
"$global.elementConfig.size.input"
v-model=
"queryParams.enabled"
placeholder=
"是否涉及"
>
<el-option
:value=
"1"
>
是
</el-option>
<el-option
:value=
"0"
>
否
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
:size=
"$global.elementConfig.size.button"
type=
"primary"
>
查询
</el-button>
</el-form-item>
</el-form>
</div>
</div>
<el-row
:gutter=
"20"
style=
"padding: 3px 10px;"
>
<el-col
:span=
"1"
>
<el-button
@
click=
"handleAdd"
type=
"primary"
>
新增
</el-button>
</el-col>
</el-row>
<div
class=
"search-table"
>
<cm-table-page
:columns=
"tableData.columns"
:dataList=
"tableData.dataList"
:height=
"height - 550"
:loading=
"false"
:pageSize=
"queryParams.pageSize"
:showBorder=
"true"
:showIndex=
"true"
:showPage=
"true"
:showSelection=
"false"
:showTools=
"true"
:total=
"queryParams.count"
@
loaddata=
"loaddata"
>
<template
#
default=
"{row,prop,column}"
>
</template>
<template
#
tools=
"{scope}"
>
<div
class=
"list-handle"
>
<span
class=
"icon-bg"
@
click=
"handleFun(scope.row)"
>
<i
class=
"el-icon-document"
title=
"处理"
></i>
</span>
<span
class=
"icon-bg"
@
click=
"handleDetail(scope.row)"
>
<i
class=
"el-icon-document"
title=
"详情"
></i>
</span>
<span
class=
"icon-bg"
@
click=
"handleDel(scope.row)"
>
<i
class=
"el-icon-delete"
></i>
</span>
<span
class=
"icon-bg"
@
click=
"handleDownload(scope.row)"
>
<i
class=
"el-icon-delete"
title=
"下载"
></i>
</span>
</div>
</template>
</cm-table-page>
</div>
</div>
<cm-dialog
:showDialogVisible=
"addDialogVisible"
:showFooter=
"false"
:title=
"addDialogTitle"
@
hidedialog=
"showFolder"
width=
"600px"
>
<template
v-slot
>
<el-form
:model=
"docForm"
:rules=
"docRulesForm"
label-position=
"right"
label-width=
"100px"
ref=
"ruleForm"
>
<el-form-item
label=
"漏洞名称"
prop=
"name"
>
<el-input
:size=
"$global.elementConfig.size.input"
clearable
v-model=
"docForm.name"
></el-input>
</el-form-item>
<el-form-item
label=
"漏洞级别"
prop=
"level"
>
<el-select
v-model=
"docForm.level"
style=
"width: 100%;"
>
<el-option
:value=
"3"
>
高
</el-option>
<el-option
:value=
"2"
>
中
</el-option>
<el-option
:value=
"1"
>
低
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"漏洞详情"
prop=
"detail"
>
<el-input
type=
"textarea"
v-model=
"docForm.detail"
></el-input>
</el-form-item>
<el-form-item
label=
"影响范围"
prop=
"reach"
>
<el-input
type=
"textarea"
v-model=
"docForm.reach"
></el-input>
</el-form-item>
<el-form-item
label=
"修复建议"
prop=
"response"
>
<el-input
type=
"textarea"
v-model=
"docForm.response"
></el-input>
</el-form-item>
<el-form-item
label=
"录入人"
prop=
"createUser"
>
<el-input
v-model=
"docForm.createUser"
></el-input>
</el-form-item>
<el-form-item>
<el-button
:size=
"$global.elementConfig.size.button"
@
click=
"addFolder('ruleForm')"
type=
"primary"
>
保存
</el-button>
<el-button
:size=
"$global.elementConfig.size.button"
@
click=
"showFolder(false)"
>
取消
</el-button>
</el-form-item>
</el-form>
</template>
</cm-dialog>
<cm-dialog
:showDialogVisible=
"handleVisible"
:showFooter=
"false"
title=
"处理"
@
hidedialog=
"showHandleFolder"
width=
"600px"
>
<template
v-slot
>
<el-form
:model=
"handleForm"
:rules=
"handleRulesForm"
label-position=
"right"
label-width=
"100px"
ref=
"handleRefForm"
>
<el-form-item
label=
"厂商"
prop=
"manufacturer"
>
<el-input
:size=
"$global.elementConfig.size.input"
clearable
v-model=
"handleForm.manufacturer"
></el-input>
</el-form-item>
<el-form-item
label=
"处理人"
prop=
"user"
>
<el-select
v-model=
"handleForm.user"
style=
"width: 100%;"
>
<el-option
:value=
"3"
>
高
</el-option>
<el-option
:value=
"2"
>
中
</el-option>
<el-option
:value=
"1"
>
低
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"处理时间"
prop=
"time"
>
<el-date-picker
v-model=
"handleForm.time"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"处理情况"
prop=
"state"
>
<el-select
v-model=
"handleForm.state"
style=
"width: 100%;"
>
<el-option
:value=
"3"
>
高
</el-option>
<el-option
:value=
"2"
>
中
</el-option>
<el-option
:value=
"1"
>
低
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
type=
"textarea"
v-model=
"handleForm.remark"
></el-input>
</el-form-item>
<el-form-item>
<el-button
:size=
"$global.elementConfig.size.button"
@
click=
"addHandelFolder('ruleForm')"
type=
"primary"
>
保存
</el-button>
<el-button
:size=
"$global.elementConfig.size.button"
@
click=
"showHandleFolder(false)"
>
取消
</el-button>
</el-form-item>
</el-form>
</template>
</cm-dialog>
</div>
\ No newline at end of file
...
...
hg-monitor-web-qh/src/main/resources/static/vue3/src/views/documentationManagement/vulnerability.js
0 → 100644
View file @
cfffe38
export
default
{
name
:
'vulnerability'
,
template
:
''
,
setup
(
props
,
{
attrs
,
slots
,
emit
})
{
const
{
proxy
}
=
Vue
.
getCurrentInstance
()
let
height
=
Vue
.
ref
(
window
.
innerHeight
);
let
queryParams
=
Vue
.
ref
({
keyWord
:
''
,
type
:
''
,
enabled
:
''
,
pageNum
:
1
,
pageSize
:
10
,
count
:
0
,
})
let
tableData
=
Vue
.
ref
({
count
:
0
,
dataList
:
[
{
name
:
'测试'
,
level
:
'高'
,
time
:
''
,
admin
:
''
,
busTypeName
:
''
,
}
],
columns
:
[
{
prop
:
'name'
,
label
:
'名称'
,
sortable
:
true
,
align
:
'center'
,
width
:
'200'
,
},
{
prop
:
'level'
,
label
:
'漏洞级别'
,
sortable
:
true
,
align
:
'center'
},
{
prop
:
'time'
,
label
:
'披露时间'
,
sortable
:
true
,
align
:
'center'
,
width
:
'130'
},
{
prop
:
'admin'
,
label
:
'阅读情况'
,
sortable
:
true
,
align
:
'center'
,
width
:
'130'
},
{
prop
:
'busTypeName'
,
label
:
'处理情况'
,
sortable
:
true
,
align
:
'center'
,
width
:
'270'
},
]
})
let
addDialogVisible
=
Vue
.
ref
(
false
)
let
addDialogTitle
=
Vue
.
ref
(
''
)
// 新增按钮
const
handleAdd
=
()
=>
{
addDialogVisible
.
value
=
true
;
addDialogTitle
.
value
=
'新增'
;
}
const
loaddata
=
()
=>
{
}
const
showFolder
=
()
=>
{
addDialogVisible
.
value
=
false
;
docForm
.
value
=
{
name
:
''
,
level
:
''
,
detail
:
''
,
reach
:
''
,
response
:
''
,
createUser
:
''
,
}
}
const
addFolder
=
()
=>
{
ruleForm
.
value
.
validate
((
validate
)
=>
{
if
(
validate
){
}
})
}
let
docForm
=
Vue
.
ref
({
name
:
''
,
level
:
''
,
detail
:
''
,
reach
:
''
,
response
:
''
,
createUser
:
''
,
})
let
docRulesForm
=
Vue
.
ref
({
name
:[
{
required
:
true
,
message
:
'请输入漏洞名称'
,
trigger
:
'blur'
},
],
level
:[
{
required
:
true
,
message
:
'请选择漏洞级别'
,
trigger
:
'blur'
},
],
detail
:[
{
required
:
true
,
message
:
'请输入漏洞详情'
,
trigger
:
'blur'
},
],
reach
:[
{
required
:
true
,
message
:
'请输入影响范围'
,
trigger
:
'blur'
},
],
response
:[
{
required
:
true
,
message
:
'请输入修复建议'
,
trigger
:
'blur'
},
],
createUser
:[
{
required
:
true
,
message
:
'请输入录入人'
,
trigger
:
'blur'
},
]
})
let
ruleForm
=
Vue
.
ref
();
// 处理按钮
let
handleFun
=
()
=>
{
handleVisible
.
value
=
true
;
}
let
handleVisible
=
Vue
.
ref
(
false
);
const
showHandleFolder
=
()
=>
{
handleVisible
.
value
=
false
;
}
let
handleForm
=
Vue
.
ref
({
manufacturer
:
''
,
user
:
''
,
time
:
''
,
state
:
''
,
remark
:
''
,
})
let
handleRulesForm
=
Vue
.
ref
({
manufacturer
:[{
required
:
true
,
message
:
'请输入厂商名称'
,
trigger
:
'blur'
}],
user
:[{
required
:
true
,
message
:
'请输入处理人'
,
trigger
:
'blur'
}],
time
:[{
required
:
true
,
message
:
'请输入处理时间'
,
trigger
:
'blur'
}],
state
:[{
required
:
true
,
message
:
'请输入处理情况'
,
trigger
:
'blur'
}]
})
let
handleRefForm
=
Vue
.
ref
();
const
addHandelFolder
=
()
=>
{
handleRefForm
.
value
.
validate
((
validate
)
=>
{
if
(
validate
){
}
})
}
Vue
.
onMounted
(()
=>
{
})
return
{
height
,
queryParams
,
handleAdd
,
tableData
,
addDialogVisible
,
showFolder
,
addDialogTitle
,
docForm
,
docRulesForm
,
ruleForm
,
addFolder
,
handleFun
,
showHandleFolder
,
handleVisible
,
addHandelFolder
,
handleRefForm
,
handleRulesForm
,
handleForm
,
};
},
}
\ No newline at end of file
...
...
hg-monitor-web-qh/src/main/resources/static/vue3/src/views/documentationManagement/vulnerabilityList.html
0 → 100644
View file @
cfffe38
<div
class=
"cm-card"
style=
"text-align: left;padding: 10px 15px;"
>
<ul>
<li
v-for=
"(item,index) in list"
:key=
"index"
style=
"padding: 20px 0px;border-bottom: 2px solid #ccc;"
>
<span
style=
"color: red;border-bottom: 1px solid;cursor: pointer"
@
click=
"handleDetail"
>
{{item.title}}
</span>
<div
style=
"margin-top: 20px;"
>
<span
style=
"margin-right: 20px;"
>
漏洞级别:
<span
style=
"padding: 2px 4px;color: white;background-color: red;"
>
{{item.level}}
</span></span>
<span>
披露时间:{{item.time}}
</span>
</div>
</li>
</ul>
</div>
<cm-dialog
:showDialogVisible=
"addDialogVisible"
:showFooter=
"false"
:title=
"addDialogTitle"
@
hidedialog=
"showFolder"
width=
"600px"
>
</cm-dialog>
<el-drawer
v-model=
"drawer"
title=
"I am the title"
direction=
"rtl"
>
<span>
Hi, there!
</span>
</el-drawer>
\ No newline at end of file
...
...
hg-monitor-web-qh/src/main/resources/static/vue3/src/views/documentationManagement/vulnerabilityList.js
0 → 100644
View file @
cfffe38
export
default
{
name
:
'vulnerableilityList'
,
template
:
''
,
setup
(
props
,
{
attrs
,
slots
,
emit
})
{
const
{
proxy
}
=
Vue
.
getCurrentInstance
()
let
list
=
Vue
.
ref
([
{
title
:
'这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称'
,
level
:
'高'
,
time
:
'2023-12-20 18:00:00'
,
},
{
title
:
'这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称这是漏洞名称'
,
level
:
'高'
,
time
:
'2023-12-20 18:00:00'
,
},
])
let
drawer
=
Vue
.
ref
(
false
);
const
handleDetail
=
()
=>
{
drawer
.
value
=
true
;
}
Vue
.
onMounted
(()
=>
{
})
return
{
list
,
handleDetail
,
drawer
,
};
},
}
\ No newline at end of file
...
...
Please
register
or
login
to post a comment