Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
frontend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Redmine
Redmine
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
other-project
frontend
Commits
b9ec3456
Commit
b9ec3456
authored
Feb 06, 2020
by
liuyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加系统操作日志
parent
26154ae9
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
28 additions
and
413 deletions
+28
-413
oss-config.vue
src/views/modules/api/oss/oss-config.vue
+0
-130
oss-uploader.vue
src/views/modules/api/oss/oss-uploader.vue
+0
-87
oss.vue
src/views/modules/api/oss/oss.vue
+0
-183
log.vue
src/views/modules/api/sys/log.vue
+28
-13
No files found.
src/views/modules/api/oss/oss-config.vue
deleted
100644 → 0
View file @
26154ae9
<
template
>
<el-dialog
title=
"云存储配置"
:close-on-click-modal=
"false"
:visible
.
sync=
"visible"
>
<el-form
:model=
"dataForm"
:rules=
"dataRule"
ref=
"dataForm"
@
keyup
.
enter
.
native=
"dataFormSubmit()"
label-width=
"120px"
>
<el-form-item
size=
"mini"
label=
"存储类型"
>
<el-radio-group
v-model=
"dataForm.type"
>
<el-radio
:label=
"1"
>
七牛
</el-radio>
<el-radio
:label=
"2"
>
阿里云
</el-radio>
<el-radio
:label=
"3"
>
腾讯云
</el-radio>
</el-radio-group>
</el-form-item>
<template
v-if=
"dataForm.type === 1"
>
<el-form-item
label=
"域名"
>
<el-input
v-model=
"dataForm.qiniuDomain"
placeholder=
"七牛绑定的域名"
></el-input>
</el-form-item>
<el-form-item
label=
"路径前缀"
>
<el-input
v-model=
"dataForm.qiniuPrefix"
placeholder=
"不设置默认为空"
></el-input>
</el-form-item>
<el-form-item
label=
"AccessKey"
>
<el-input
v-model=
"dataForm.qiniuAccessKey"
placeholder=
"七牛AccessKey"
></el-input>
</el-form-item>
<el-form-item
label=
"SecretKey"
>
<el-input
v-model=
"dataForm.qiniuSecretKey"
placeholder=
"七牛SecretKey"
></el-input>
</el-form-item>
<el-form-item
label=
"空间名"
>
<el-input
v-model=
"dataForm.qiniuBucketName"
placeholder=
"七牛存储空间名"
></el-input>
</el-form-item>
</
template
>
<
template
v-else-if=
"dataForm.type === 2"
>
<el-form-item
label=
"域名"
>
<el-input
v-model=
"dataForm.aliyunDomain"
placeholder=
"阿里云绑定的域名"
></el-input>
</el-form-item>
<el-form-item
label=
"路径前缀"
>
<el-input
v-model=
"dataForm.aliyunPrefix"
placeholder=
"不设置默认为空"
></el-input>
</el-form-item>
<el-form-item
label=
"EndPoint"
>
<el-input
v-model=
"dataForm.aliyunEndPoint"
placeholder=
"阿里云EndPoint"
></el-input>
</el-form-item>
<el-form-item
label=
"AccessKeyId"
>
<el-input
v-model=
"dataForm.aliyunAccessKeyId"
placeholder=
"阿里云AccessKeyId"
></el-input>
</el-form-item>
<el-form-item
label=
"AccessKeySecret"
>
<el-input
v-model=
"dataForm.aliyunAccessKeySecret"
placeholder=
"阿里云AccessKeySecret"
></el-input>
</el-form-item>
<el-form-item
label=
"BucketName"
>
<el-input
v-model=
"dataForm.aliyunBucketName"
placeholder=
"阿里云BucketName"
></el-input>
</el-form-item>
</
template
>
<
template
v-else-if=
"dataForm.type === 3"
>
<el-form-item
label=
"域名"
>
<el-input
v-model=
"dataForm.qcloudDomain"
placeholder=
"腾讯云绑定的域名"
></el-input>
</el-form-item>
<el-form-item
label=
"路径前缀"
>
<el-input
v-model=
"dataForm.qcloudPrefix"
placeholder=
"不设置默认为空"
></el-input>
</el-form-item>
<el-form-item
label=
"AppId"
>
<el-input
v-model=
"dataForm.qcloudAppId"
placeholder=
"腾讯云AppId"
></el-input>
</el-form-item>
<el-form-item
label=
"SecretId"
>
<el-input
v-model=
"dataForm.qcloudSecretId"
placeholder=
"腾讯云SecretId"
></el-input>
</el-form-item>
<el-form-item
label=
"SecretKey"
>
<el-input
v-model=
"dataForm.qcloudSecretKey"
placeholder=
"腾讯云SecretKey"
></el-input>
</el-form-item>
<el-form-item
label=
"BucketName"
>
<el-input
v-model=
"dataForm.qcloudBucketName"
placeholder=
"腾讯云BucketName"
></el-input>
</el-form-item>
<el-form-item
label=
"Bucket所属地区"
>
<el-input
v-model=
"dataForm.qcloudRegion"
placeholder=
"如:sh(可选值 ,华南:gz 华北:tj 华东:sh)"
></el-input>
</el-form-item>
</
template
>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"visible = false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"dataFormSubmit()"
>
确定
</el-button>
</span>
</el-dialog>
</template>
<
script
>
export
default
{
data
()
{
return
{
visible
:
false
,
dataForm
:
{},
dataRule
:
{}
}
},
methods
:
{
init
(
id
)
{
this
.
visible
=
true
this
.
$http
({
url
:
this
.
$http
.
adornUrl
(
'/sys/oss/config'
),
method
:
'get'
,
params
:
this
.
$http
.
adornParams
()
}).
then
(({
data
})
=>
{
this
.
dataForm
=
data
&&
data
.
code
===
200
?
data
.
config
:
[]
})
},
// 表单提交
dataFormSubmit
()
{
this
.
$refs
[
'dataForm'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
$http
({
url
:
this
.
$http
.
adornUrl
(
'/sys/oss/saveConfig'
),
method
:
'post'
,
data
:
this
.
$http
.
adornData
(
this
.
dataForm
)
}).
then
(({
data
})
=>
{
if
(
data
&&
data
.
code
===
200
)
{
this
.
$message
({
message
:
'操作成功'
,
type
:
'success'
,
duration
:
1500
,
onClose
:
()
=>
{
this
.
visible
=
false
}
})
}
else
{
this
.
$message
.
error
(
data
.
msg
)
}
})
}
})
}
}
}
</
script
>
src/views/modules/api/oss/oss-uploader.vue
deleted
100644 → 0
View file @
26154ae9
<
template
>
<div
@
click=
"selectFile"
>
<input
type=
"file"
ref=
"fileInput"
v-show=
"false"
@
change=
"onFileChange"
/>
<div>
{{
uploading
?
infoText
:
'上传文件'
}}
</div>
</div>
</
template
>
<
script
>
var
COS
=
require
(
'cos-js-sdk-v5'
);
var
cos
;
export
default
{
name
:
"oss-uploader"
,
data
()
{
return
{
uploading
:
false
,
infoText
:
"上传中..."
,
cosConfig
:[]
}
},
mounted
(){
this
.
$http
({
url
:
this
.
$http
.
adornUrl
(
'/sys/oss/config'
),
method
:
'get'
,
params
:
this
.
$http
.
adornParams
()
}).
then
(({
data
})
=>
{
if
(
data
&&
data
.
code
===
200
){
this
.
cosConfig
=
data
.
config
cos
=
new
COS
({
SecretId
:
data
.
config
.
qcloudSecretId
,
SecretKey
:
data
.
config
.
qcloudSecretKey
,
});
}
else
{
this
.
$message
.
error
(
'请先配置云存储相关信息!'
)
}
})
},
methods
:
{
selectFile
()
{
//选择文件
if
(
!
this
.
uploading
)
{
this
.
$refs
.
fileInput
.
click
();
}
},
onFileChange
()
{
let
file
=
this
.
$refs
.
fileInput
.
files
[
0
];
this
.
uploading
=
true
;
let
now
=
new
Date
();
let
path
=
now
.
toISOString
().
slice
(
0
,
10
)
+
'/'
+
now
.
getTime
()
+
file
.
name
.
substr
(
file
.
name
.
lastIndexOf
(
'.'
))
cos
.
putObject
({
Bucket
:
this
.
cosConfig
.
qcloudBucketName
,
/* 必须 */
Region
:
this
.
cosConfig
.
qcloudRegion
,
/* 必须 */
Key
:
path
,
/* 必须 */
Body
:
file
,
// 上传文件对象
onProgress
:
(
progressData
)
=>
{
this
.
infoText
=
'上传中:'
+
progressData
.
percent
*
100
+
'%'
}
},
(
err
,
data
)
=>
{
console
.
log
(
err
||
data
);
this
.
uploading
=
false
;
if
(
data
){
this
.
infoText
=
'上传文件'
let
fileUrl
=
'https://'
+
this
.
cosConfig
.
qcloudBucketName
+
'.cos.'
+
this
.
cosConfig
.
qcloudRegion
+
'.myqcloud.com/'
+
path
;
this
.
saveUploadResult
(
fileUrl
)
}
else
{
this
.
$message
.
error
(
'文件上传失败'
,
err
)
}
});
},
saveUploadResult
(
url
){
this
.
$http
({
url
:
this
.
$http
.
adornUrl
(
'/sys/oss/upload'
),
method
:
'post'
,
data
:{
url
:
url
}
}).
then
(({
data
})
=>
{
this
.
$emit
(
'uploaded'
,
url
)
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/modules/api/oss/oss.vue
deleted
100644 → 0
View file @
26154ae9
<
template
>
<div
class=
"mod-oss"
>
<el-form
:inline=
"true"
:model=
"dataForm"
>
<el-form-item>
<el-button
type=
"primary"
@
click=
"configHandle()"
>
云存储配置
</el-button>
<el-button
type=
"primary"
><OssUploader
@
uploaded=
"getDataList"
></OssUploader></el-button>
<el-button
type=
"danger"
@
click=
"deleteHandle()"
:disabled=
"dataListSelections.length
<
=
0
"
>
批量删除
</el-button>
</el-form-item>
</el-form>
<el-table
:data=
"dataList"
border
v-loading=
"dataListLoading"
@
selection-change=
"selectionChangeHandle"
style=
"width: 100%;"
>
<el-table-column
type=
"selection"
header-align=
"center"
align=
"center"
width=
"50"
>
</el-table-column>
<el-table-column
prop=
"id"
header-align=
"center"
align=
"center"
width=
"80"
label=
"ID"
>
</el-table-column>
<el-table-column
prop=
"url"
header-align=
"center"
align=
"center"
label=
"URL地址"
>
<div
slot-scope=
"scope"
>
<img
class=
"image-sm"
v-if=
"isImageUrl(scope.row.url)"
:src=
"scope.row.url"
/>
<a
:href=
"scope.row.url"
target=
"_blank"
v-else
>
{{
scope
.
row
.
url
}}
</a>
</div>
</el-table-column>
<el-table-column
prop=
"createDate"
header-align=
"center"
align=
"center"
width=
"180"
label=
"创建时间"
>
</el-table-column>
<el-table-column
fixed=
"right"
header-align=
"center"
align=
"center"
width=
"150"
label=
"操作"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"deleteHandle(scope.row.id)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<el-pagination
@
size-change=
"sizeChangeHandle"
@
current-change=
"currentChangeHandle"
:current-page=
"pageIndex"
:page-sizes=
"[10, 20, 50, 100]"
:page-size=
"pageSize"
:total=
"totalCount"
layout=
"total, sizes, prev, pager, next, jumper"
>
</el-pagination>
<!-- 弹窗, 云存储配置 -->
<config
v-if=
"configVisible"
ref=
"config"
></config>
<!-- 弹窗, 上传文件 -->
<upload
v-if=
"uploadVisible"
ref=
"upload"
@
refreshDataList=
"getDataList"
></upload>
</div>
</template>
<
script
>
export
default
{
data
()
{
return
{
dataForm
:
{},
dataList
:
[],
pageIndex
:
1
,
pageSize
:
10
,
totalCount
:
0
,
dataListLoading
:
false
,
dataListSelections
:
[],
configVisible
:
false
,
uploadVisible
:
false
}
},
components
:
{
Config
:()
=>
import
(
'./oss-config'
),
OssUploader
:()
=>
import
(
'./oss-uploader'
)
},
activated
()
{
this
.
getDataList
()
},
methods
:
{
// 获取数据列表
getDataList
()
{
this
.
dataListLoading
=
true
this
.
$http
({
url
:
this
.
$http
.
adornUrl
(
'/sys/oss/list'
),
method
:
'get'
,
params
:
this
.
$http
.
adornParams
({
'page'
:
this
.
pageIndex
,
'limit'
:
this
.
pageSize
,
'sidx'
:
'id'
,
'order'
:
'desc'
})
}).
then
(({
data
})
=>
{
if
(
data
&&
data
.
code
===
200
)
{
this
.
dataList
=
data
.
page
.
list
this
.
totalCount
=
data
.
page
.
totalCount
}
else
{
this
.
dataList
=
[]
this
.
totalCount
=
0
}
this
.
dataListLoading
=
false
})
},
// 每页数
sizeChangeHandle
(
val
)
{
this
.
pageSize
=
val
this
.
pageIndex
=
1
this
.
getDataList
()
},
// 当前页
currentChangeHandle
(
val
)
{
this
.
pageIndex
=
val
this
.
getDataList
()
},
// 多选
selectionChangeHandle
(
val
)
{
this
.
dataListSelections
=
val
},
// 云存储配置
configHandle
()
{
this
.
configVisible
=
true
this
.
$nextTick
(()
=>
{
this
.
$refs
.
config
.
init
()
})
},
// 上传文件
uploadHandle
()
{
this
.
uploadVisible
=
true
this
.
$nextTick
(()
=>
{
this
.
$refs
.
upload
.
init
()
})
},
// 删除
deleteHandle
(
id
)
{
var
ids
=
id
?
[
id
]
:
this
.
dataListSelections
.
map
(
item
=>
{
return
item
.
id
})
this
.
$confirm
(
`确定对[id=
${
ids
.
join
(
','
)}
]进行[
${
id
?
'删除'
:
'批量删除'
}
]操作?`
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
this
.
$http
({
url
:
this
.
$http
.
adornUrl
(
'/sys/oss/delete'
),
method
:
'post'
,
data
:
this
.
$http
.
adornData
(
ids
,
false
)
}).
then
(({
data
})
=>
{
if
(
data
&&
data
.
code
===
200
)
{
this
.
$message
({
message
:
'操作成功'
,
type
:
'success'
,
duration
:
1500
,
onClose
:
()
=>
{
this
.
getDataList
()
}
})
}
else
{
this
.
$message
.
error
(
data
.
msg
)
}
})
}).
catch
(()
=>
{})
},
isImageUrl
(
url
){
return
url
&&
/.*
\.(
gif|jpg|jpeg|png|GIF|JPEG|JPG|PNG
)
/
.
test
(
url
)
}
}
}
</
script
>
src/views/modules/api/sys/log.vue
View file @
b9ec3456
...
...
@@ -66,6 +66,7 @@
header-align=
"center"
align=
"center"
width=
"180"
:formatter=
"dateFormat"
label=
"创建时间"
>
</el-table-column>
</el-table>
...
...
@@ -100,27 +101,41 @@
this
.
getDataList
()
},
methods
:
{
dateFormat
(
row
,
column
,
cellValue
,
index
){
const
daterc
=
row
[
column
.
property
]
if
(
daterc
==
undefined
)
{
return
""
;
}
else
{
const
dateMat
=
new
Date
(
daterc
);
const
year
=
dateMat
.
getFullYear
();
const
month
=
dateMat
.
getMonth
()
+
1
;
const
day
=
dateMat
.
getDate
();
const
hh
=
dateMat
.
getHours
();
const
mm
=
dateMat
.
getMinutes
();
const
ss
=
dateMat
.
getSeconds
();
const
timeFormat
=
year
+
"/"
+
month
+
"/"
+
day
+
" "
+
hh
+
":"
+
mm
+
":"
+
ss
;
return
timeFormat
;
}
},
// 获取数据列表
getDataList
()
{
this
.
dataListLoading
=
true
this
.
$http
({
url
:
this
.
$http
.
adornUrl
(
'/sys/log/list'
),
url
:
this
.
$http
.
adornUrl
(
'/
api/
sys/log/list'
),
method
:
'get'
,
params
:
this
.
$http
.
adornParams
({
'page'
:
this
.
pageIndex
,
'limit'
:
this
.
pageSize
,
'key'
:
this
.
dataForm
.
key
,
'sidx'
:
'id'
,
'order'
:
'desc'
'pageIndex'
:
this
.
pageIndex
,
'pageSize'
:
this
.
pageSize
,
'condition'
:
this
.
dataForm
.
key
})
}).
then
(({
data
})
=>
{
if
(
data
&&
data
.
code
===
200
)
{
this
.
dataList
=
data
.
page
.
list
this
.
totalCount
=
data
.
page
.
totalCount
}
else
{
this
.
dataList
=
[]
this
.
totalCount
=
0
}
this
.
dataList
=
data
.
result
this
.
totalCount
=
data
.
total
this
.
dataListLoading
=
false
})
},
...
...
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