Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
9
91isoft_web_vue3
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
张伯涛
91isoft_web_vue3
Commits
cd0c2a66
Commit
cd0c2a66
authored
Feb 19, 2024
by
张毅辰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
操作日志
parent
1a16cc22
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
471 additions
and
17 deletions
+471
-17
index.ts
src/api/dict/index.ts
+5
-5
index.vue
src/views/monitor/loginInfo/index.vue
+10
-12
index.vue
src/views/monitor/operLog/index.vue
+456
-0
No files found.
src/api/dict/index.ts
View file @
cd0c2a66
...
@@ -24,7 +24,7 @@ export function getDictTypePage(
...
@@ -24,7 +24,7 @@ export function getDictTypePage(
});
});
}
}
/** 查询字典数据列表*/
/** 查询字典数据列表*/
export
function
listData
(
query
)
{
export
function
listData
(
query
:
any
)
{
return
request
({
return
request
({
url
:
"/system/dict/data/list"
,
url
:
"/system/dict/data/list"
,
method
:
"get"
,
method
:
"get"
,
...
@@ -32,7 +32,7 @@ export function listData(query) {
...
@@ -32,7 +32,7 @@ export function listData(query) {
});
});
}
}
export
function
listType
(
query
)
{
export
function
listType
(
query
:
any
)
{
return
request
({
return
request
({
url
:
"/system/dict/type/list"
,
url
:
"/system/dict/type/list"
,
method
:
"get"
,
method
:
"get"
,
...
@@ -40,7 +40,7 @@ export function listType(query) {
...
@@ -40,7 +40,7 @@ export function listType(query) {
});
});
}
}
/** 获取字典选择框列表*/
/** 获取字典选择框列表*/
export
function
selectDictType
(
dictType
)
{
export
function
selectDictType
(
dictType
:
any
)
{
return
request
({
return
request
({
url
:
"/system/dict/data/type/"
+
dictType
,
url
:
"/system/dict/data/type/"
+
dictType
,
method
:
"get"
,
method
:
"get"
,
...
@@ -57,7 +57,7 @@ export function exportType(queryParams: DictTypeQuery) {
...
@@ -57,7 +57,7 @@ export function exportType(queryParams: DictTypeQuery) {
}
}
/** 修改字典类型*/
/** 修改字典类型*/
export
function
updateType
(
data
)
{
export
function
updateType
(
data
:
any
)
{
const
businessId
=
data
.
businessId
;
const
businessId
=
data
.
businessId
;
return
request
({
return
request
({
url
:
"/system/dict/type/update/"
+
businessId
,
url
:
"/system/dict/type/update/"
+
businessId
,
...
@@ -67,7 +67,7 @@ export function updateType(data) {
...
@@ -67,7 +67,7 @@ export function updateType(data) {
});
});
}
}
/** 新增字典类型*/
/** 新增字典类型*/
export
function
addType
(
data
)
{
export
function
addType
(
data
:
any
)
{
return
request
({
return
request
({
url
:
"/system/dict/type/add"
,
url
:
"/system/dict/type/add"
,
method
:
"post"
,
method
:
"post"
,
...
...
src/views/monitor/loginInfo/index.vue
View file @
cd0c2a66
...
@@ -35,12 +35,12 @@ const queryParams = reactive({
...
@@ -35,12 +35,12 @@ const queryParams = reactive({
username
:
""
,
username
:
""
,
loginTime
:
""
,
loginTime
:
""
,
});
});
const
clearF
ro
m
=
reactive
({});
const
clearF
or
m
=
reactive
({});
const
exportRule
=
reactive
({
const
exportRule
=
reactive
({
month
:
[{
required
:
true
,
message
:
"请选择月份"
,
trigger
:
"change"
}],
month
:
[{
required
:
true
,
message
:
"请选择月份"
,
trigger
:
"change"
}],
});
});
const
clearF
ro
mRef
=
ref
(
ElForm
);
const
clearF
or
mRef
=
ref
(
ElForm
);
const
exportFromRef
=
ref
(
ElForm
);
const
exportFromRef
=
ref
(
ElForm
);
onMounted
(()
=>
{
onMounted
(()
=>
{
...
@@ -109,7 +109,6 @@ function handleDelete(data) {
...
@@ -109,7 +109,6 @@ function handleDelete(data) {
type
:
"warning"
,
type
:
"warning"
,
})
})
.
then
(()
=>
{
.
then
(()
=>
{
// const id = this.ids.join(',')
const
id
=
data
;
const
id
=
data
;
const
query
=
{
const
query
=
{
deleteIds
:
id
,
deleteIds
:
id
,
...
@@ -117,7 +116,7 @@ function handleDelete(data) {
...
@@ -117,7 +116,7 @@ function handleDelete(data) {
return
delLogininfo
(
query
);
return
delLogininfo
(
query
);
})
})
.
then
(()
=>
{
.
then
(()
=>
{
this
.
getList
();
getList
();
ElMessage
.
success
(
"删除成功"
);
ElMessage
.
success
(
"删除成功"
);
ids
.
value
=
[];
ids
.
value
=
[];
multiple
.
value
=
true
;
multiple
.
value
=
true
;
...
@@ -126,11 +125,11 @@ function handleDelete(data) {
...
@@ -126,11 +125,11 @@ function handleDelete(data) {
}
}
function
clear
()
{
function
clear
()
{
clearF
ro
mRef
.
value
.
validate
((
valid
)
=>
{
clearF
or
mRef
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
valid
)
{
const
query
=
{
const
query
=
{
beginTime
:
clearF
ro
m
.
month
[
0
],
beginTime
:
clearF
or
m
.
month
[
0
],
endTime
:
clearF
ro
m
.
month
[
1
],
endTime
:
clearF
or
m
.
month
[
1
],
};
};
cleanLogininfo
(
query
).
then
((
res
)
=>
{
cleanLogininfo
(
query
).
then
((
res
)
=>
{
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
...
@@ -148,7 +147,7 @@ function clear() {
...
@@ -148,7 +147,7 @@ function clear() {
/** 清空按钮操作 */
/** 清空按钮操作 */
function
handleClean
()
{
function
handleClean
()
{
clearVisible
.
value
=
true
;
clearVisible
.
value
=
true
;
Object
.
assign
(
clearF
ro
m
,
{});
Object
.
assign
(
clearF
or
m
,
{});
}
}
function
exportSubmit
()
{
function
exportSubmit
()
{
...
@@ -169,7 +168,6 @@ function exportSubmit() {
...
@@ -169,7 +168,6 @@ function exportSubmit() {
document
.
body
.
removeChild
(
downloadElement
);
// 下载完成移除元素
document
.
body
.
removeChild
(
downloadElement
);
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
);
// 释放掉blob对象
window
.
URL
.
revokeObjectURL
(
href
);
// 释放掉blob对象
exportVisible
.
value
=
false
;
exportVisible
.
value
=
false
;
// this.download(response.msg)
});
});
}
}
});
});
...
@@ -311,14 +309,14 @@ function handleExport() {
...
@@ -311,14 +309,14 @@ function handleExport() {
<!-- 清空弹窗-->
<!-- 清空弹窗-->
<el-dialog
<el-dialog
title=
"选择清空月份"
title=
"选择清空月份"
v-model
:visible
=
"clearVisible"
v-model=
"clearVisible"
width=
"30%"
width=
"30%"
:before-close=
"handleClose"
:before-close=
"handleClose"
>
>
<el-form
ref=
"clearF
romRef"
:model=
"clearFro
m"
:rules=
"clearRule"
>
<el-form
ref=
"clearF
ormRef"
:model=
"clearFor
m"
:rules=
"clearRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
<el-date-picker
v-model=
"clearF
ro
m.month"
v-model=
"clearF
or
m.month"
type=
"monthrange"
type=
"monthrange"
range-separator=
"至"
range-separator=
"至"
start-placeholder=
"开始月份"
start-placeholder=
"开始月份"
...
...
src/views/monitor/operLog/index.vue
0 → 100644
View file @
cd0c2a66
<
script
setup
lang=
"ts"
>
const
route
=
useRoute
();
import
{
list
,
delOperLog
,
cleanOperLog
,
exportOperLog
,
}
from
"@/api/monitor/operLog"
;
import
{
getDataCache
,
setDataCache
}
from
"@/assets/js/filterData"
;
defineOptions
({
name
:
"Operlog"
,
inheritAttrs
:
false
,
});
const
{
proxy
}
=
getCurrentInstance
();
const
endDatePicker
=
ref
<
Boolean
>
(
handelFixDate
);
const
clearVisible
=
ref
<
Boolean
>
(
false
);
const
exportVisible
=
ref
<
Boolean
>
(
false
);
const
open
=
ref
<
Boolean
>
(
false
);
const
exportFrom
=
ref
({});
const
loading
=
ref
<
Boolean
>
(
true
);
const
multiple
=
ref
<
Boolean
>
(
true
);
const
ids
=
ref
<
number
[]
|
undefined
>
([]);
const
total
=
ref
(
0
);
const
tableList
=
ref
([]);
const
dateRange
=
ref
([]);
const
queryParams
=
reactive
({
page
:
1
,
rows
:
10
,
username
:
""
,
loginTime
:
""
,
});
const
form
=
reactive
({});
const
clearForm
=
reactive
({});
const
exportRule
=
reactive
({
month
:
[{
required
:
true
,
message
:
"请选择月份"
,
trigger
:
"change"
}],
});
const
fromRef
=
ref
(
ElForm
);
const
clearFormRef
=
ref
(
ElForm
);
const
exportFromRef
=
ref
(
ElForm
);
onMounted
(()
=>
{
Object
.
assign
(
queryParams
,
JSON
.
parse
(
getDataCache
(
route
.
path
)));
getList
();
});
// 清空和导出弹出框的日期选择器禁用当前月份之后的月份
function
handelFixDate
()
{
return
{
disabledDate
(
time
)
{
// 如果想蕴含本月本月 - 8.64e7 * t 就不须要了,
// 如果想之前的不能抉择把 > 换成
<
return
time
.
getTime
()
>
Date
.
now
();
},
};
}
/** 查询登录日志列表 */
function
getList
()
{
loading
.
value
=
true
;
list
(
proxy
.
$addDateRange
(
queryParams
,
dateRange
.
value
)).
then
((
response
)
=>
{
tableList
.
value
=
response
.
rows
;
total
.
value
=
response
.
total
;
loading
.
value
=
false
;
});
}
function
handleClose
()
{
clearVisible
.
value
=
false
;
exportVisible
.
value
=
false
;
}
function
timechange
(
e
)
{
exportFrom
.
month
=
e
;
}
/** 查询按钮操作 */
function
handleQuery
()
{
queryParams
.
page
=
1
;
getList
();
}
/** 重置按钮操作 */
function
resetQuery
()
{
Object
.
assign
(
dateRange
,
[]);
Object
.
assign
(
queryParams
,
{
page
:
1
,
rows
:
10
,
username
:
""
,
loginTime
:
""
,
});
handleQuery
();
}
// 多选框选中数据
function
handleSelectionChange
(
selection
)
{
ids
.
value
=
selection
.
map
((
item
)
=>
item
.
businessId
);
multiple
.
value
=
!
selection
.
length
;
}
/** 删除按钮操作 */
function
handleDelete
(
data
)
{
ElMessageBox
.
confirm
(
"是否确认操作?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
const
id
=
data
;
const
query
=
{
deleteIds
:
id
,
};
return
delOperLog
(
query
);
})
.
then
(()
=>
{
getList
();
ElMessage
.
success
(
"删除成功"
);
ids
.
value
=
[];
multiple
.
value
=
true
;
})
.
catch
(
function
()
{});
}
function
clear
()
{
clearFormRef
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
const
query
=
{
beginTime
:
clearForm
.
month
[
0
],
endTime
:
clearForm
.
month
[
1
],
};
cleanOperLog
(
query
).
then
((
res
)
=>
{
if
(
res
.
code
===
200
)
{
getList
();
ElMessage
.
success
(
"清空成功"
);
clearVisible
.
value
=
false
;
}
else
{
ElMessage
.
error
(
res
.
message
);
}
});
}
});
}
/** 清空按钮操作 */
function
handleClean
()
{
clearVisible
.
value
=
true
;
Object
.
assign
(
clearForm
,
{});
}
function
exportSubmit
()
{
exportFromRef
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
const
query
=
{
beginTime
:
exportFrom
.
month
[
0
],
endTime
:
exportFrom
.
month
[
1
],
};
return
exportOperLog
(
query
).
then
((
response
)
=>
{
const
blob
=
new
Blob
([
response
]);
const
downloadElement
=
document
.
createElement
(
"a"
);
const
href
=
window
.
URL
.
createObjectURL
(
blob
);
// 创建下载的链接
downloadElement
.
href
=
href
;
downloadElement
.
download
=
"登录日志"
+
".xls"
;
// 下载后文件名
document
.
body
.
appendChild
(
downloadElement
);
downloadElement
.
click
();
// 点击下载
document
.
body
.
removeChild
(
downloadElement
);
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
);
// 释放掉blob对象
exportVisible
.
value
=
false
;
});
}
});
}
function
handleView
(
row
)
{
open
.
value
=
true
;
Object
.
assign
(
form
,
row
);
}
/** 导出按钮操作 */
function
handleExport
()
{
exportVisible
.
value
=
true
;
Object
.
assign
(
exportFrom
,
{});
}
</
script
>
<
template
>
<div
class=
"app-container"
>
<div
class=
"search-container"
>
<el-form
ref=
"queryForm"
style=
"padding: 0 0 0 10px"
:model=
"queryParams"
:inline=
"true"
label-width=
"auto"
>
<el-form-item
label=
"系统模块"
prop=
"title"
>
<el-input
v-model=
"queryParams.title"
placeholder=
"请输入系统模块"
clearable
style=
"width: 140px"
:maxlength=
"30"
@
keyup
.
enter=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"用户名称"
prop=
"operName"
>
<el-input
v-model=
"queryParams.operName"
placeholder=
"请输入用户名称"
clearable
:maxlength=
"30"
style=
"width: 140px"
@
keyup
.
enter=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"操作月份"
prop=
"operTime"
>
<el-date-picker
v-model=
"queryParams.operTime"
type=
"month"
style=
"width: 140px"
value-format=
"YYYY-MM"
placeholder=
"请选择月份"
/>
</el-form-item>
<el-form-item>
<el-button
class=
"queryBtn"
type=
"primary"
@
click=
"handleQuery"
><i-ep-search
/>
查询
</el-button
>
<el-button
class=
"resetBtn"
@
click=
"resetQuery"
><i-ep-refresh
/>
重置
</el-button
>
</el-form-item>
<div
style=
"float: right"
>
<el-form-item>
<el-button
class=
"clearBtn"
type=
"danger"
@
click=
"handleClean"
><i-ep-Delete
/>
清空
</el-button
>
<el-button
class=
"exportBtn"
type=
"success"
@
click=
"handleExport"
><i-ep-download
/>
导出
</el-button
>
</el-form-item>
</div>
</el-form>
</div>
<el-card
shadow=
"never"
class=
"table-container"
>
<template
#
header
>
<div
class=
"tableTitle"
>
操作日志列表
</div>
</
template
>
<el-table
v-loading=
"loading"
border
:data=
"tableList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"index"
width=
"55"
label=
"序号"
align=
"center"
/>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"系统模块"
align=
"center"
prop=
"systemMode"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
systemMode
||
"-"
}}
</
template
>
</el-table-column>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"操作信息"
align=
"center"
prop=
"optionName"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
optionName
||
"-"
}}
</
template
>
</el-table-column>
<el-table-column
label=
"请求地址"
align=
"center"
:show-overflow-tooltip=
"true"
prop=
"operLocation"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
operLocation
||
"-"
}}
</
template
>
</el-table-column>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"请求方式"
align=
"center"
prop=
"requestMethod"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
requestMethod
||
"-"
}}
</
template
>
</el-table-column>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"用户名称"
align=
"center"
prop=
"operName"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
operName
||
"-"
}}
</
template
>
</el-table-column>
<el-table-column
label=
"操作时间"
align=
"center"
prop=
"operTime"
width=
"180"
show-overflow-tooltip
>
<
template
#
default=
"scope"
>
<span>
{{
$transformDateByFormat
(
scope
.
row
.
operTime
,
"YYYY-MM"
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
#
default=
"scope"
>
<el-button
class=
"delBtn"
size=
"mini"
type=
"text"
@
click=
"handleView(scope.row, scope.index)"
>
查看
</el-button
>
<el-button
class=
"delBtn"
type=
"text"
size=
"mini"
@
click=
"handleDelete(scope.row.businessId)"
>
删除
</el-button
>
</
template
>
</el-table-column>
</el-table>
<pagination
style=
"float: right"
v-show=
"total > 0"
:total=
"total"
v-model:page=
"queryParams.page"
v-model:limit=
"queryParams.rows"
@
pagination=
"getList"
/>
</el-card>
<el-dialog
title=
"操作日志信息"
v-model=
"open"
width=
"700px"
append-to-body
>
<el-form
ref=
"formRef"
:model=
"form"
label-width=
"100px"
size=
"mini"
>
<el-row>
<el-col
:span=
"24"
>
<el-form-item
label=
"系统模块:"
>
{{
form.systemMode || "-"
}}
</el-form-item>
<el-form-item
label=
"操作信息:"
>
{{
form.optionName || "-"
}}
</el-form-item>
<el-form-item
label=
"请求地址:"
>
{{
form.operUrl || "-"
}}
</el-form-item>
<el-form-item
label=
"请求方式:"
>
{{
form.requestMethod || "-"
}}
</el-form-item>
<el-form-item
label=
"操作时间:"
>
{{
$parseTime(form.operTime) ? $parseTime(form.operTime) : "-"
}}
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"操作方法:"
>
{{
form.method || "-"
}}
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"请求参数:"
>
{{
form.operParam || "-"
}}
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"返回参数:"
>
{{
form.jsonResult || "-"
}}
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-dialog>
<!-- 清空弹窗-->
<el-dialog
title=
"选择清空月份"
v-model=
"clearVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-form
ref=
"clearFormRef"
:model=
"clearForm"
:rules=
"clearRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
v-model=
"clearForm.month"
type=
"monthrange"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
value-format=
"YYYY_MM"
:picker-options=
"endDatePicker"
@
change=
"timechange"
/>
</el-form-item>
</el-form>
<
template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
class=
"cancelBtn"
@
click=
"clearVisible = false"
>
取 消
</el-button
>
<el-button
class=
"submitBtn"
type=
"primary"
@
click=
"clear"
>
确 定
</el-button
>
</div>
</
template
>
</el-dialog>
<!-- 导出弹窗-->
<el-dialog
title=
"选择导出月份"
v-model=
"exportVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-form
ref=
"exportFromRef"
:model=
"exportFrom"
:rules=
"exportRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
v-model=
"exportFrom.month"
type=
"monthrange"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
value-format=
"YYYY_MM"
:picker-options=
"endDatePicker"
@
change=
"timechange"
/>
</el-form-item>
</el-form>
<
template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
@
click=
"exportVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"exportSubmit"
>
确 定
</el-button>
</div>
</
template
>
</el-dialog>
</div>
</template>
<
style
scoped
lang=
"scss"
></
style
>
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