Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
so-manage-ui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
smart-operation
so-manage-ui
Commits
84d1a5ba
Commit
84d1a5ba
authored
Jul 10, 2023
by
李鹏
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
日志管理接口联调
parent
53337b81
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
70 additions
and
125 deletions
+70
-125
src/components/menu.js
src/components/menu.js
+25
-5
src/page/main/system-admin/log/system-log/index.vue
src/page/main/system-admin/log/system-log/index.vue
+18
-18
src/page/main/system-admin/log/userAccount/index.vue
src/page/main/system-admin/log/userAccount/index.vue
+12
-44
src/page/main/system-admin/log/userBehavior/detail/index.vue
src/page/main/system-admin/log/userBehavior/detail/index.vue
+1
-6
src/page/main/system-admin/log/userBehavior/index.vue
src/page/main/system-admin/log/userBehavior/index.vue
+14
-52
No files found.
src/components/menu.js
View file @
84d1a5ba
...
...
@@ -949,18 +949,38 @@ export const menuData = {
menuName
:
"
用户行为审计
"
,
dict_group_id
:
"
64c156e0-bfff-4bfc-a63a-56effe130a25
"
,
menuType
:
1
,
path
:
"
/system-admin/log/user
Account
"
,
path
:
"
/system-admin/log/user
Behavior
"
,
parentPath
:
"
/system-admin/log
"
,
icon
:
""
,
menu_id
:
"
185558e4-afc4-44b0-ba9e-12e11cad25ef
"
,
p_menu_id
:
"
224f73fd-f095-40ff-b1dd-6d094cf59280
"
,
source
:
""
,
children
:
null
,
children
:
[
{
id
:
778
,
level
:
5
,
sort
:
1
,
menuName
:
"
详情
"
,
dict_group_id
:
"
64c156e0-bfff-4bfc-a63a-56effe130a25
"
,
menuType
:
2
,
path
:
"
/system-admin/log/userBehavior/detail
"
,
parentPath
:
"
/system-admin/log/userBehavior
"
,
icon
:
""
,
menu_id
:
"
a7f9bb86-f9b2-4bf6-a201-d7edb937f639
"
,
p_menu_id
:
"
185558e4-afc4-44b0-ba9e-12e11cad25ef
"
,
source
:
""
,
children
:
null
,
system_type
:
""
,
new_window
:
0
,
remark
:
""
,
built_in
:
0
,
},
],
system_type
:
""
,
new_window
:
0
,
remark
:
""
,
built_in
:
0
,
name
:
"
system-admin-log-user
Account
"
,
name
:
"
system-admin-log-user
Behavior
"
,
rowPath
:
"
.3.4.1
"
,
},
{
...
...
@@ -970,7 +990,7 @@ export const menuData = {
menuName
:
"
用户账户审计
"
,
dict_group_id
:
"
64c156e0-bfff-4bfc-a63a-56effe130a25
"
,
menuType
:
1
,
path
:
"
/system-admin/log/user
Behavior
"
,
path
:
"
/system-admin/log/user
Account
"
,
parentPath
:
"
/system-admin/log
"
,
icon
:
""
,
menu_id
:
"
84f732d7-574b-4f66-9ef0-2aad4cdc353c
"
,
...
...
@@ -981,7 +1001,7 @@ export const menuData = {
new_window
:
0
,
remark
:
""
,
built_in
:
0
,
name
:
"
system-admin-log-user
Behavior
"
,
name
:
"
system-admin-log-user
Account
"
,
rowPath
:
"
.3.4.2
"
,
},
],
...
...
src/page/main/system-admin/log/system-log/index.vue
View file @
84d1a5ba
...
...
@@ -8,7 +8,7 @@
style=
"width: 100%"
type=
"date"
value-format=
"YYYY-MM-DD"
v-model=
"
dat
e"
v-model=
"
logTim
e"
placeholder=
"请选择日期"
/>
<div
class=
"type_station bg-scroll"
>
...
...
@@ -18,8 +18,8 @@
@click="nodeClick(item)"
v-for="(item, index) in containerList"
:key="index"
:title="item
.name
">
{{
item
.
name
}}
:title="item">
{{
item
}}
</div>
</div>
</div>
...
...
@@ -28,10 +28,10 @@
<div
class=
"form-filter"
>
<el-form
:model=
"filterForm"
inline
>
<el-form-item
label=
"级别"
>
<el-select
placeholder=
"全部"
style=
"width: 160px"
v-model=
"filterForm.level"
>
<el-option
label=
"
info"
value=
"info
"
>
</el-option>
<el-option
label=
"
warning"
value=
"warning
"
>
</el-option>
<el-option
label=
"
error"
value=
"error
"
>
</el-option>
<el-select
placeholder=
"全部"
style=
"width: 160px"
v-model=
"filterForm.l
ogL
evel"
>
<el-option
label=
"
INFO"
value=
"INFO
"
>
</el-option>
<el-option
label=
"
WARNING"
value=
"WARNING
"
>
</el-option>
<el-option
label=
"
ERROR"
value=
"ERROR
"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"关键字"
>
...
...
@@ -63,37 +63,37 @@ import { ElMessage } from "element-plus";
import
axios
from
"
@/request/http.js
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
const
state
=
reactive
({
dat
e
:
""
,
logTim
e
:
""
,
containerList
:
[],
// 容器数据
selectedNodeContainer
:
""
,
filterForm
:
{
level
:
""
,
l
ogL
evel
:
""
,
search
:
""
,
},
logList
:
[],
});
watch
(
()
=>
state
.
dat
e
,
()
=>
state
.
logTim
e
,
(
val
)
=>
{
state
.
selectedNodeContainer
=
""
;
getContainerList
();
}
);
const
nodeClick
=
(
item
)
=>
{
state
.
selectedNodeContainer
=
item
.
value
;
state
.
selectedNodeContainer
=
item
;
reset
();
};
// 获取容器列表
const
getContainerList
=
()
=>
{
let
params
=
{
date
:
state
.
dat
e
,
logTime
:
state
.
logTim
e
,
};
axios
.
get
(
"
/
apaas/system/v5/log/system/tree
"
,
{
params
})
.
get
(
"
/
v1/api/log/system/list
"
,
{
params
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
containerList
=
res
.
data
.
data
||
[];
state
.
selectedNodeContainer
=
state
.
containerList
.
length
?
state
.
containerList
[
0
]
.
value
:
""
;
state
.
selectedNodeContainer
=
state
.
containerList
.
length
?
state
.
containerList
[
0
]
:
""
;
state
.
selectedNodeContainer
?
reset
()
:
(
state
.
logList
=
[]);
}
else
{
ElMessage
.
error
(
res
.
data
.
data
);
...
...
@@ -106,11 +106,11 @@ const getContainerList = () => {
//查询
const
search
=
()
=>
{
let
params
=
{
index
:
state
.
selectedNodeContainer
,
name
:
state
.
selectedNodeContainer
,
...
state
.
filterForm
,
};
axios
.
get
(
"
/
apaas/system/v5
/log/system/log
"
,
{
params
})
.
get
(
"
/
v1/api
/log/system/log
"
,
{
params
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
logList
=
(
res
.
data
.
data
||
[]).
map
((
item
)
=>
JSON
.
stringify
(
item
));
...
...
@@ -126,7 +126,7 @@ const search = () => {
//重置
const
reset
=
()
=>
{
state
.
filterForm
=
{
level
:
""
,
l
ogL
evel
:
""
,
search
:
""
,
};
search
();
...
...
@@ -135,7 +135,7 @@ onBeforeMount(() => {
getContainerList
();
});
const
{
dat
e
,
containerList
,
selectedNodeContainer
,
filterForm
,
logList
}
=
toRefs
(
state
);
const
{
logTim
e
,
containerList
,
selectedNodeContainer
,
filterForm
,
logList
}
=
toRefs
(
state
);
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
src/page/main/system-admin/log/userAccount/index.vue
View file @
84d1a5ba
...
...
@@ -2,16 +2,11 @@
<div
class=
"page_container"
>
<bg-breadcrumb></bg-breadcrumb>
<div
class=
"main_container"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.search"
placeholder=
"请输入账号、手机号和所属组织"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.search"
placeholder=
"请输入账号、手机号和所属组织"
>
<template
v-slot:left_action
>
<div
class=
"apaas_button"
>
<el-button
type=
"primary"
@
click=
"exportFile"
>
<bg-icon
style=
"font-size: 12px; color: #fff; margin-right: 8px"
icon=
"#bg-ic-file-send"
></bg-icon>
<bg-icon
style=
"font-size: 12px; color: #fff; margin-right: 8px"
icon=
"#bg-ic-file-send"
></bg-icon>
导出
</el-button>
<el-popconfirm
...
...
@@ -36,17 +31,6 @@
<
template
v-slot:filter_group
>
<div
class=
"left-filter filter_list"
>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
用户类型
</span>
<el-select
v-model=
"filter.is_admin"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in userTypeList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
上次访问时间
</span>
<el-date-picker
...
...
@@ -61,22 +45,14 @@
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
活跃度
</span>
<el-select
v-model=
"filter.active"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in activeOptions"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
<el-option
v-for=
"(item, index) in activeOptions"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
密码强度
</span>
<el-select
v-model=
"filter.pwd_level"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in pwdLevelList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
<el-option
v-for=
"(item, index) in pwdLevelList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
...
...
@@ -137,7 +113,7 @@
</bg-table>
<bg-pagination
:page=
"filter.page"
:size=
"filter.
limit
"
:size=
"filter.
page_size
"
:total=
"filter.total"
@
change-page=
"changePage"
@
change-size=
"changeSize"
>
...
...
@@ -168,12 +144,11 @@ const accountTable = ref(null);
const
state
=
reactive
({
filter
:
{
search
:
""
,
is_admin
:
""
,
time
:
[],
active
:
0
,
pwd_level
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
},
activeOptions
:
[
...
...
@@ -200,11 +175,6 @@ const state = reactive({
prop
:
"
contact_phone
"
,
// minWidth: 360,
},
{
label
:
"
用户类型
"
,
prop
:
"
is_admin
"
,
// width: 200,
},
{
label
:
"
所属组织
"
,
prop
:
"
name
"
,
...
...
@@ -252,14 +222,13 @@ const exportFile = () => {
params
.
end_at
=
params
.
time
?
params
.
time
[
1
]
||
""
:
""
;
delete
params
.
time
;
axios
.
get
(
`/
apaas/system/v5
/log/userAccountAudit/list/export`
,
{
.
get
(
`/
v1/api
/log/userAccountAudit/list/export`
,
{
params
,
responseType
:
"
blob
"
,
})
.
then
((
res
)
=>
{
if
(
res
.
status
===
200
)
{
const
type
=
"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
"
;
const
type
=
"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
"
;
downloadBlob
(
res
.
data
,
type
);
}
else
{
ElMessage
.
error
(
res
.
statusText
);
...
...
@@ -273,7 +242,7 @@ const forceModifyPwd = () => {
const
selectedRows
=
Object
.
values
(
selectedObj
);
if
(
!
selectedRows
.
length
)
return
ElMessage
.
warning
(
"
请先选择修改项
"
);
const
ids
=
selectedRows
.
map
((
item
)
=>
item
.
id
);
axios
.
post
(
"
/
apaas/system/v5/user/resetp
wd
"
,
{
ids
}).
then
((
res
)
=>
{
axios
.
post
(
"
/
v1/api/user/resetP
wd
"
,
{
ids
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
===
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
cleanSelected
();
...
...
@@ -301,7 +270,7 @@ const getTableRows = () => {
params
.
end_at
=
params
.
time
?
params
.
time
[
1
]
||
""
:
""
;
delete
params
.
time
;
axios
.
get
(
`/
apaas/system/v5
/log/userAccountAudit/list`
,
{
.
get
(
`/
v1/api
/log/userAccountAudit/list`
,
{
params
,
})
.
then
((
res
)
=>
{
...
...
@@ -317,18 +286,17 @@ const filterAction = () => {
changePage
(
1
);
};
const
changeSize
=
(
size
)
=>
{
state
.
filter
.
limit
=
size
;
state
.
filter
.
page_size
=
size
;
changePage
(
1
);
};
const
filterClear
=
()
=>
{
state
.
filter
=
{
search
:
""
,
is_admin
:
""
,
time
:
[],
active
:
0
,
pwd_level
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
};
changePage
(
1
);
...
...
src/page/main/system-admin/log/userBehavior/detail/index.vue
View file @
84d1a5ba
...
...
@@ -45,11 +45,6 @@ const instanceData = reactive({
label
:
"
手机号
"
,
value
:
""
,
},
{
key
:
"
user_type
"
,
label
:
"
用户类型
"
,
value
:
""
,
},
{
key
:
"
org_name
"
,
label
:
"
所属组织
"
,
...
...
@@ -121,7 +116,7 @@ onBeforeMount(() => {
});
const
getDetailInfo
=
()
=>
{
axios
.
get
(
`/
apaas/system/v5
/log/userBehavior/detail/
${
route
.
query
.
id
}
`
)
.
get
(
`/
v1/api
/log/userBehavior/detail/
${
route
.
query
.
id
}
`
)
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
const
result
=
res
.
data
.
data
||
{};
...
...
src/page/main/system-admin/log/userBehavior/index.vue
View file @
84d1a5ba
...
...
@@ -2,16 +2,11 @@
<div
class=
"page_container"
>
<bg-breadcrumb></bg-breadcrumb>
<div
class=
"main_container"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.search"
placeholder=
"请输入账号、手机号和所属组织"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.search"
placeholder=
"请输入账号、手机号和所属组织"
>
<template
v-slot:left_action
>
<div
class=
"apaas_button"
>
<el-button
type=
"primary"
@
click=
"exportFile"
>
<bg-icon
style=
"font-size: 12px; color: #fff; margin-right: 8px"
icon=
"#bg-ic-file-send"
></bg-icon>
<bg-icon
style=
"font-size: 12px; color: #fff; margin-right: 8px"
icon=
"#bg-ic-file-send"
></bg-icon>
导出
</el-button>
<el-button
@
click=
"deleteBatch"
>
批量删除
</el-button>
...
...
@@ -25,17 +20,6 @@
<
template
v-slot:filter_group
>
<div
class=
"left-filter filter_list"
>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
用户类型
</span>
<el-select
v-model=
"filter.is_admin"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in userTypeList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
操作时间
</span>
<el-date-picker
...
...
@@ -61,11 +45,7 @@
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
请求方式
</span>
<el-select
v-model=
"filter.req_method"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in reqMethodList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
<el-option
v-for=
"(item, index) in reqMethodList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
...
...
@@ -88,16 +68,7 @@
</
template
>
</bg-filter-group>
<div
class=
"table_container"
>
<bg-table
ref=
"userTable"
:headers=
"headers"
:rows=
"tableRows"
:stripe=
"true"
select
@
selectAc=
"selectChange"
>
<
template
v-slot:is_admin=
"{ row }"
>
<span>
{{
userTypeConfig
[
row
.
is_admin
]
}}
</span>
</
template
>
<bg-table
ref=
"userTable"
:headers=
"headers"
:rows=
"tableRows"
:stripe=
"true"
select
@
selectAc=
"selectChange"
>
<
template
v-slot:operate_type=
"{ row }"
>
<span>
{{
filterOperateType
(
row
.
operate_type
)
}}
</span>
</
template
>
...
...
@@ -118,7 +89,7 @@
</bg-table>
<bg-pagination
:page=
"filter.page"
:size=
"filter.
limit
"
:size=
"filter.
page_size
"
:total=
"filter.total"
@
change-page=
"changePage"
@
change-size=
"changeSize"
>
...
...
@@ -163,13 +134,12 @@ const userTypeList = computed(() => {
const
state
=
reactive
({
filter
:
{
search
:
""
,
is_admin
:
""
,
time
:
[],
operate_type
:
""
,
req_method
:
""
,
operate_status
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
},
operateStatusList
:
[
...
...
@@ -184,11 +154,6 @@ const state = reactive({
prop
:
"
system_account
"
,
// minWidth: 280,
},
{
label
:
"
用户类型
"
,
prop
:
"
is_admin
"
,
// minWidth: 360,
},
{
label
:
"
系统模块
"
,
prop
:
"
system_module
"
,
...
...
@@ -259,8 +224,7 @@ const state = reactive({
deleteTips
:
""
,
});
const
{
filter
,
operateStatusList
,
headers
,
selectedNum
,
tableRows
,
deleteDialog
,
deleteTips
}
=
toRefs
(
state
);
const
{
filter
,
operateStatusList
,
headers
,
selectedNum
,
tableRows
,
deleteDialog
,
deleteTips
}
=
toRefs
(
state
);
//导出
const
exportFile
=
()
=>
{
let
params
=
{
...
state
.
filter
};
...
...
@@ -269,14 +233,13 @@ const exportFile = () => {
delete
params
.
time
;
delete
params
.
total
;
axios
.
get
(
`/
apaas/system/v5
/log/userBehavior/list/export`
,
{
.
get
(
`/
v1/api
/log/userBehavior/list/export`
,
{
params
,
responseType
:
"
blob
"
,
})
.
then
((
res
)
=>
{
if
(
res
.
status
===
200
)
{
const
type
=
"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
"
;
const
type
=
"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
"
;
downloadBlob
(
res
.
data
,
type
);
}
else
{
ElMessage
.
error
(
res
.
statusText
);
...
...
@@ -316,7 +279,7 @@ const deleteCurrent = (row) => {
const
confirmDelete
=
()
=>
{
const
ids
=
state
.
selectedRows
.
map
((
item
)
=>
item
.
id
);
axios
.
delete
(
`/
apaas/system/v5
/log/userBehavior/delete?ids=
${
ids
.
join
(
"
,
"
)}
`
)
.
delete
(
`/
v1/api
/log/userBehavior/delete?ids=
${
ids
.
join
(
"
,
"
)}
`
)
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
===
200
)
{
ElMessage
.
success
(
res
.
data
.
data
);
...
...
@@ -348,7 +311,7 @@ const getTableRows = () => {
params
.
end_at
=
params
.
time
?
params
.
time
[
1
]
||
""
:
""
;
delete
params
.
time
;
axios
.
get
(
`/
apaas/system/v5
/log/userBehavior/list`
,
{
.
get
(
`/
v1/api
/log/userBehavior/list`
,
{
params
,
})
.
then
((
res
)
=>
{
...
...
@@ -364,19 +327,18 @@ const filterAction = () => {
changePage
(
1
);
};
const
changeSize
=
(
size
)
=>
{
state
.
filter
.
limit
=
size
;
state
.
filter
.
page_size
=
size
;
changePage
(
1
);
};
const
filterClear
=
()
=>
{
state
.
filter
=
{
search
:
""
,
is_admin
:
""
,
time
:
[],
operate_type
:
""
,
req_method
:
""
,
operate_status
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
};
changePage
(
1
);
...
...
@@ -384,7 +346,7 @@ const filterClear = () => {
const
goDetail
=
(
row
)
=>
{
router
.
push
({
path
:
"
/log/userBehavior/detail
"
,
path
:
"
/
system-admin/
log/userBehavior/detail
"
,
query
:
{
id
:
row
.
id
,
},
...
...
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