Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fns_backend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Zhang Xiaojie
fns_backend
Commits
88b5b090
Commit
88b5b090
authored
Sep 15, 2021
by
Zhang Xiaojie
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' of gitlab.33.cn:CassiniatSaturn/fns_backend into dev
parents
838c98df
63d5edf2
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
462 additions
and
178 deletions
+462
-178
addSuperManagerModal.vue
src/components/UserManage/addSuperManagerModal.vue
+3
-1
superManagerTable.vue
src/components/UserManage/superManagerTable.vue
+29
-12
topBar.vue
src/components/UserManage/topBar.vue
+1
-0
bannerColumns.ts
src/const/columns/bannerColumns.ts
+18
-19
upload.ts
src/const/config/upload.ts
+13
-0
index.ts
src/filter/index.ts
+37
-8
index.ts
src/service/BannerManagementService/index.ts
+16
-9
types.ts
src/service/BannerManagementService/types.ts
+9
-0
index.ts
src/service/FileService/index.ts
+44
-0
index.ts
src/service/StaffService/index.ts
+9
-2
index.ts
src/service/UserManagementService/index.ts
+2
-2
index.ts
src/service/index.ts
+2
-2
banner.ts
src/types/banner.ts
+21
-9
role.ts
src/types/role.ts
+1
-1
user.ts
src/types/user.ts
+11
-4
index.vue
src/views/Login/index.vue
+0
-11
index.vue
src/views/Root/Banner/index.vue
+245
-97
index.vue
src/views/Root/index.vue
+1
-1
No files found.
src/components/UserManage/addSuperManagerModal.vue
View file @
88b5b090
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
<a-form-model-item
label=
"手机号"
prop=
"tel"
>
<a-form-model-item
label=
"手机号"
prop=
"tel"
>
<a-input
<a-input
v-model=
"form.tel"
v-model=
"form.tel"
:maxLength=
"11"
placeholder=
"请输入手机号"
placeholder=
"请输入手机号"
style=
"width: 200px;"
style=
"width: 200px;"
/>
/>
...
@@ -93,7 +94,7 @@ export default Vue.extend({
...
@@ -93,7 +94,7 @@ export default Vue.extend({
{
required
:
true
,
message
:
'请输入名称'
,
max
:
6
,
trigger
:
'blur'
},
{
required
:
true
,
message
:
'请输入名称'
,
max
:
6
,
trigger
:
'blur'
},
],
],
tel
:
[
tel
:
[
{
required
:
true
,
message
:
'请输入手机号'
,
max
:
11
,
trigger
:
'blur'
},
{
required
:
true
,
message
:
'请输入手机号'
,
len
:
11
,
trigger
:
'blur'
},
],
],
bank
:
[{
required
:
true
,
message
:
'请输入所属银行'
,
trigger
:
'blur'
}],
bank
:
[{
required
:
true
,
message
:
'请输入所属银行'
,
trigger
:
'blur'
}],
}
}
...
@@ -142,6 +143,7 @@ export default Vue.extend({
...
@@ -142,6 +143,7 @@ export default Vue.extend({
)
)
if
(
ret
&&
ret
.
code
===
200
)
{
if
(
ret
&&
ret
.
code
===
200
)
{
message
.
success
(
'发布成功'
)
message
.
success
(
'发布成功'
)
this
.
$store
.
dispatch
(
'platformUserManagement/query'
)
}
}
}
else
{
}
else
{
return
false
return
false
...
...
src/components/UserManage/superManagerTable.vue
View file @
88b5b090
...
@@ -8,29 +8,40 @@
...
@@ -8,29 +8,40 @@
style=
"text-align: center;"
style=
"text-align: center;"
bordered
bordered
>
>
<span
slot=
"level"
>
超级
管理员
</span>
<span
slot=
"level"
>
银行
管理员
</span>
<template
#
created_at=
"text"
>
<template
#
created_at=
"text"
>
{{
text
|
formatDate
}}
{{
text
|
formatDate
}}
</
template
>
</
template
>
<
template
#
status=
"text"
>
<
template
#
status=
"text"
>
{{
text
|
filterUserStatus
}}
{{
text
|
platform
filterUserStatus
}}
</
template
>
</
template
>
<div
slot=
"action"
slot-scope=
"text, record"
>
<div
slot=
"action"
slot-scope=
"text, record"
>
<a
<a
:class=
"record.status == eUserStatus.enable ? 'undeleteable' : ' '"
:class=
"
record.status == eUserResStatus.enable_notOnPosition ||
record.status === eUserResStatus.enable_onPosition
? 'undeleteable'
: ' '
"
@
click=
"showModal(record, 0)"
@
click=
"showModal(record, 0)"
>
>
删除
删除
</a>
</a>
<a-divider
type=
"vertical"
/>
<a-divider
type=
"vertical"
/>
<a
<a
v-if=
"record.status == eUserStatus.disable"
v-if=
"
record.status == eUserResStatus.disable_noPosition ||
record.status === eUserResStatus.disable_notOnPosition
"
@
click=
"showModal(record, 1)"
@
click=
"showModal(record, 1)"
>
>
启用
启用
</a>
</a>
<a
<a
v-else-if=
"eUserStatus.enable === record.status"
v-else-if=
"
record.status === eUserResStatus.enable_notOnPosition ||
eUserResStatus.enable_onPosition
"
@
click=
"showModal(record, 2)"
@
click=
"showModal(record, 2)"
>
>
禁用
禁用
...
@@ -65,7 +76,7 @@ import { modalType } from './const'
...
@@ -65,7 +76,7 @@ import { modalType } from './const'
import
{
getPlatformUserManagementTableColumns
}
from
'@/const/columns/superManagerColumn'
import
{
getPlatformUserManagementTableColumns
}
from
'@/const/columns/superManagerColumn'
import
{
mapActions
,
mapMutations
,
mapState
}
from
'vuex'
import
{
mapActions
,
mapMutations
,
mapState
}
from
'vuex'
import
StaffService
from
'@/service/StaffService'
import
StaffService
from
'@/service/StaffService'
import
{
eUserStatus
}
from
'@/types/user'
import
{
eUser
ReqStatus
,
eUserRes
Status
}
from
'@/types/user'
export
default
Vue
.
extend
({
export
default
Vue
.
extend
({
computed
:
{
computed
:
{
...
@@ -90,7 +101,8 @@ export default Vue.extend({
...
@@ -90,7 +101,8 @@ export default Vue.extend({
show
:
false
,
show
:
false
,
content
:
''
,
content
:
''
,
title
:
''
,
title
:
''
,
eUserStatus
,
eUserReqStatus
,
eUserResStatus
,
}
}
},
},
methods
:
{
methods
:
{
...
@@ -121,19 +133,24 @@ export default Vue.extend({
...
@@ -121,19 +133,24 @@ export default Vue.extend({
}
}
this
.
show
=
true
this
.
show
=
true
},
},
handleOk
()
{
async
handleOk
()
{
if
(
this
.
type
==
modalType
.
delete
)
{
if
(
this
.
type
==
modalType
.
delete
)
{
await
StaffService
.
getInstance
().
deleteStaff
(
this
.
uuid
)
}
else
if
(
this
.
type
==
modalType
.
on
)
{
}
else
if
(
this
.
type
==
modalType
.
on
)
{
StaffService
.
getInstance
().
modifyStaffStatus
({
await
StaffService
.
getInstance
().
modifyStaffStatus
({
uuid
:
this
.
uuid
,
uuid
:
this
.
uuid
,
status
:
eUserStatus
.
enable
,
status
:
eUser
Req
Status
.
enable
,
})
})
}
else
if
(
this
.
type
==
modalType
.
off
)
{
}
else
if
(
this
.
type
==
modalType
.
off
)
{
StaffService
.
getInstance
().
modifyStaffStatus
({
await
StaffService
.
getInstance
().
modifyStaffStatus
({
uuid
:
this
.
uuid
,
uuid
:
this
.
uuid
,
status
:
eUserStatus
.
disable
,
status
:
eUser
Req
Status
.
disable
,
})
})
}
}
this
.
$store
.
commit
(
'/platformUserManagement/save'
,
{
page
:
1
,
})
this
.
$store
.
dispatch
(
'/platformUserManagement/query'
)
this
.
show
=
false
this
.
show
=
false
},
},
},
},
...
...
src/components/UserManage/topBar.vue
View file @
88b5b090
...
@@ -42,6 +42,7 @@
...
@@ -42,6 +42,7 @@
class=
"my-1"
class=
"my-1"
:is=
"type == 1 ? 'addNormalManagerModal' : 'addSuperManagerModal'"
:is=
"type == 1 ? 'addNormalManagerModal' : 'addSuperManagerModal'"
ref=
"addrModal"
ref=
"addrModal"
:userType=
"type"
:level=
"level"
:level=
"level"
/>
/>
</div>
</div>
...
...
src/const/columns/bannerColumns.ts
View file @
88b5b090
import
{
column
}
from
"@/types/column"
import
{
column
}
from
'@/types/column'
const
columns
:
Array
<
column
>=
const
columns
:
Array
<
column
>
=
[
[
{
{
title
:
'发布时间'
,
title
:
'发布时间'
,
align
:
'center'
,
align
:
'center'
,
dataIndex
:
'time'
,
dataIndex
:
'created_at'
,
scopedSlots
:
{
customRender
:
'created_at'
},
},
},
{
{
title
:
'banner名称'
,
title
:
'banner名称'
,
align
:
'center'
,
align
:
'center'
,
dataIndex
:
'
nam
e'
,
dataIndex
:
'
titl
e'
,
},
},
{
{
title
:
'banner位置'
,
title
:
'banner位置'
,
align
:
'center'
,
align
:
'center'
,
dataIndex
:
'location'
,
dataIndex
:
'location'
,
scopedSlots
:
{
customRender
:
'location'
},
},
},
{
{
title
:
'图片'
,
title
:
'图片'
,
align
:
'center'
,
align
:
'center'
,
dataIndex
:
'
path
'
,
dataIndex
:
'
file_name
'
,
scopedSlots
:
{
customRender
:
'
path
'
},
scopedSlots
:
{
customRender
:
'
file_name
'
},
},
},
{
{
title
:
'状态'
,
title
:
'状态'
,
align
:
'center'
,
align
:
'center'
,
dataIndex
:
'state'
,
dataIndex
:
'banner_status'
,
scopedSlots
:
{
customRender
:
'banner_status'
},
},
},
{
{
title
:
'操作'
,
title
:
'操作'
,
align
:
'center'
,
align
:
'center'
,
key
:
'action'
,
key
:
'action'
,
scopedSlots
:
{
customRender
:
'action'
},
scopedSlots
:
{
customRender
:
'action'
},
}
}
,
]
]
export
{
export
{
columns
}
columns
}
\ No newline at end of file
src/const/config/upload.ts
0 → 100644
View file @
88b5b090
export
const
ACCEPT_IMAGE_TYPE
=
'.jpg,.jpep,.png'
export
function
isAcceptImageType
(
file
:
File
)
{
const
isCorrectType
=
file
.
name
.
match
(
/
(\.
jpg|
\.
jpep|
\.
png
)
$/
)
return
!!
isCorrectType
}
export
const
TOAST_TEXT
=
'请上传jpg或jpep或png文件'
// 最大上传大小 40M
export
const
MAX_IMAGE_SIZE
=
1024
*
1024
*
40
export
const
TOAST_TEXT2
=
'请上传小于40M的图片'
src/filter/index.ts
View file @
88b5b090
import
{
eUserStatus
}
from
'@/types/user'
import
{
eBannerLocation
,
eBannerStatus
}
from
'@/types/banner'
import
{
eUserResStatus
}
from
'@/types/user'
import
moment
from
'moment'
import
moment
from
'moment'
export
default
{
export
default
{
...
@@ -10,16 +11,44 @@ export default {
...
@@ -10,16 +11,44 @@ export default {
return
''
return
''
}
}
},
},
filterUserStatus
(
status
:
eUserStatus
)
{
filterUserStatus
(
status
:
eUser
Res
Status
)
{
switch
(
status
)
{
switch
(
status
)
{
case
eUser
Status
.
disable
:
case
eUser
ResStatus
.
disable_noPosition
:
return
'禁用'
return
'禁用'
case
eUserStatus
.
enable
:
case
eUserResStatus
.
disable_notOnPosition
:
return
'禁用'
case
eUserResStatus
.
enable_notOnPosition
:
return
'启用/不在岗'
case
eUserResStatus
.
enable_onPosition
:
return
'启用/在岗'
}
},
platformfilterUserStatus
(
status
:
eUserResStatus
)
{
switch
(
status
)
{
case
eUserResStatus
.
disable_noPosition
:
return
'禁用'
case
eUserResStatus
.
disable_notOnPosition
:
return
'禁用'
case
eUserResStatus
.
enable_notOnPosition
:
return
'启用'
case
eUserResStatus
.
enable_onPosition
:
return
'启用'
return
'启用'
case
eUserStatus
.
onPosition
:
}
return
'在岗'
},
case
eUserStatus
.
notOnPosition
:
filterBannerLocation
(
status
:
eBannerLocation
)
{
return
'不在岗'
switch
(
status
)
{
case
eBannerLocation
.
home
:
return
'首页'
}
},
filtereBannerStatus
(
status
:
eBannerStatus
)
{
switch
(
status
)
{
case
eBannerStatus
.
editable
:
return
'未发布'
case
eBannerStatus
.
delete
:
return
'删除'
case
eBannerStatus
.
published
:
return
'已发布'
}
}
},
},
}
as
{
}
as
{
...
...
src/service/BannerManagementService/index.ts
View file @
88b5b090
import
baseAxios
from
'../index'
import
baseAxios
from
'../index'
import
{
banner_status
}
from
'@/views/Root/Banner/const'
import
{
banner_status
}
from
'@/views/Root/Banner/const'
import
{
iBannerItem
}
from
'./types'
import
{
eBannerStatus
}
from
'@/types/banner'
const
prefix
=
'/banner/admin'
const
prefix
=
'/banner/admin'
// 新增banner信息
// 新增banner信息
...
@@ -17,12 +19,18 @@ export function bannerAdd(data: {
...
@@ -17,12 +19,18 @@ export function bannerAdd(data: {
// 查询banner列表
// 查询banner列表
export
function
bannerQuery
(
data
:
{
export
function
bannerQuery
(
data
:
{
banner_status
:
0
banner_status
:
eBannerStatus
location
:
0
location
:
number
end_time
:
number
end_time
?:
number
start_time
:
number
start_time
?:
number
limit
?:
number
offset
?:
number
})
{
})
{
return
baseAxios
({
return
baseAxios
<
{
count
:
number
items
:
iBannerItem
[]
total
:
number
}
>
({
url
:
prefix
+
'/list'
,
url
:
prefix
+
'/list'
,
method
:
'POST'
,
method
:
'POST'
,
data
,
data
,
...
@@ -31,12 +39,12 @@ export function bannerQuery(data: {
...
@@ -31,12 +39,12 @@ export function bannerQuery(data: {
// 修改banner状态
// 修改banner状态
export
function
bannerModify
(
data
:
{
export
function
bannerModify
(
data
:
{
banner_status
:
banner_s
tatus
banner_status
:
eBannerS
tatus
uuid
:
string
uuid
:
string
})
{
})
{
return
baseAxios
({
return
baseAxios
({
url
:
prefix
+
'/modify'
,
url
:
prefix
+
'/modify'
,
method
:
'POST'
,
method
:
'POST'
,
data
,
data
,
})
})
}
}
\ No newline at end of file
src/service/BannerManagementService/types.ts
0 → 100644
View file @
88b5b090
export
interface
iBannerItem
{
banner_status
:
number
created_at
:
number
file_name
:
string
location
:
number
title
:
string
update_at
:
number
uuid
:
string
}
src/service/FileService/index.ts
0 → 100644
View file @
88b5b090
import
baseAxios
from
'../index'
export
default
class
FileService
{
static
instance
:
FileService
static
getInstance
()
{
if
(
!
FileService
.
instance
)
{
FileService
.
instance
=
new
FileService
()
}
return
FileService
.
instance
}
download
(
file_hash
:
string
)
{
return
(
baseAxios
({
method
:
'get'
,
url
:
'/image/download'
,
params
:
{
file_hash
,
},
})
as
unknown
)
as
Promise
<
File
>
}
getImageSrc
(
file_hash
:
string
)
{
return
`/proxyApi/api/v1/image/show?file_hash=
${
file_hash
}
`
}
showImage
(
file_hash
:
string
)
{
return
(
baseAxios
({
method
:
'get'
,
url
:
'/image/show'
,
params
:
{
file_hash
,
},
})
as
unknown
)
as
Promise
<
File
>
}
uploadImage
(
uploadFile
:
File
)
{
const
fd
=
new
FormData
()
fd
.
append
(
'uploadFile'
,
uploadFile
)
return
baseAxios
<
string
>
({
method
:
'post'
,
url
:
'/image/upload'
,
data
:
fd
,
})
}
}
src/service/StaffService/index.ts
View file @
88b5b090
import
{
eUserStatus
}
from
'@/types/user'
import
{
eUser
Req
Status
}
from
'@/types/user'
import
baseAxios
from
'../index'
import
baseAxios
from
'../index'
export
default
class
StaffService
{
export
default
class
StaffService
{
...
@@ -10,11 +10,18 @@ export default class StaffService {
...
@@ -10,11 +10,18 @@ export default class StaffService {
return
StaffService
.
instance
return
StaffService
.
instance
}
}
modifyStaffStatus
(
data
:
{
status
:
eUserStatus
;
uuid
:
string
})
{
modifyStaffStatus
(
data
:
{
status
:
eUser
Req
Status
;
uuid
:
string
})
{
return
baseAxios
({
return
baseAxios
({
url
:
'/staff/modifyStatus'
,
url
:
'/staff/modifyStatus'
,
method
:
'PUT'
,
method
:
'PUT'
,
data
,
data
,
})
})
}
}
deleteStaff
(
uuid
:
string
)
{
return
baseAxios
({
url
:
'/staff/'
+
uuid
,
method
:
'delete'
,
})
}
}
}
src/service/UserManagementService/index.ts
View file @
88b5b090
import
{
eLevel
}
from
'@/types/level'
import
{
eLevel
}
from
'@/types/level'
import
{
eNewRoleRelatedToBackEnd
}
from
'@/types/role'
import
{
eNewRoleRelatedToBackEnd
}
from
'@/types/role'
import
{
eUserStatus
}
from
'@/types/user'
import
{
eUser
Req
Status
}
from
'@/types/user'
import
{
eUserType
}
from
'@/types/userType'
import
{
eUserType
}
from
'@/types/userType'
import
baseAxios
from
'../index'
import
baseAxios
from
'../index'
...
@@ -142,7 +142,7 @@ export default class UserService {
...
@@ -142,7 +142,7 @@ export default class UserService {
role
:
string
role
:
string
second_branch
:
string
second_branch
:
string
second_sub_branch
:
string
second_sub_branch
:
string
status
:
eUserStatus
status
:
eUser
Req
Status
user_name
:
string
user_name
:
string
uuid
:
string
uuid
:
string
}[]
}[]
...
...
src/service/index.ts
View file @
88b5b090
...
@@ -14,8 +14,8 @@ const baseAxios = axios.create({
...
@@ -14,8 +14,8 @@ const baseAxios = axios.create({
baseAxios
.
interceptors
.
response
.
use
(
baseAxios
.
interceptors
.
response
.
use
(
(
value
:
AxiosResponse
<
iRet
>
)
=>
{
(
value
:
AxiosResponse
<
iRet
>
)
=>
{
const
ret
=
value
.
data
const
ret
=
value
.
data
if
(
ret
.
code
!==
200
)
{
if
(
ret
.
code
!==
undefined
&&
ret
.
code
!==
200
)
{
if
(
ret
.
code
===
504
)
{
if
(
ret
.
code
===
504
)
{
// deleteUserMsg();
// deleteUserMsg();
}
}
message
.
error
(
ret
.
msg
)
message
.
error
(
ret
.
msg
)
...
...
src/types/banner.ts
View file @
88b5b090
export
interface
banner
{
export
interface
banner
{
key
:
string
key
:
string
time
:
string
,
time
:
string
name
:
string
,
name
:
string
location
:
string
,
location
:
string
path
:
string
,
path
:
string
state
:
string
state
:
string
}
}
\ No newline at end of file
export
enum
eBannerLocation
{
all
=
0
,
home
=
1
,
}
// 0:全部状态,1:可编辑,2:已发布,3:删除
export
enum
eBannerStatus
{
all
=
0
,
editable
=
1
,
published
=
2
,
delete
=
3
,
}
src/types/role.ts
View file @
88b5b090
export
enum
eRole
{
export
enum
eRole
{
platform_management
,
// 平台管理员
platform_management
,
// 平台管理员
superManager
,
// 超级管理员 也
叫 银行管理员
superManager
,
// 超级管理员 也叫 银行管理员
firstLevel_branch
,
// 一级分行管理员
firstLevel_branch
,
// 一级分行管理员
secondary_branch
,
// 二级分行管理员
secondary_branch
,
// 二级分行管理员
...
...
src/types/user.ts
View file @
88b5b090
...
@@ -7,9 +7,16 @@ export interface user {
...
@@ -7,9 +7,16 @@ export interface user {
note
?:
string
note
?:
string
}
}
export
enum
eUserStatus
{
export
enum
eUser
Req
Status
{
disable
=
0
,
disable
=
1
,
enable
=
1
,
enable
=
2
,
onPosition
=
2
,
onPosition
=
3
,
notOnPosition
=
4
,
notOnPosition
=
4
,
}
}
export
enum
eUserResStatus
{
disable_notOnPosition
=
0
,
disable_noPosition
=
1
,
enable_notOnPosition
=
2
,
enable_onPosition
=
3
,
}
src/views/Login/index.vue
View file @
88b5b090
...
@@ -235,8 +235,6 @@ export default Vue.extend({
...
@@ -235,8 +235,6 @@ export default Vue.extend({
this
.
$router
.
push
({
this
.
$router
.
push
({
name
:
"home"
,
name
:
"home"
,
});
});
}
else
{
message
.
warn
(
ret
.
msg
);
}
}
},
},
async
handleClickLogin
()
{
async
handleClickLogin
()
{
...
@@ -256,15 +254,6 @@ export default Vue.extend({
...
@@ -256,15 +254,6 @@ export default Vue.extend({
console
.
log
(
err
);
console
.
log
(
err
);
}
}
this
.
loading
=
false
;
this
.
loading
=
false
;
// setUserMsg({
// userInfo: 'lakds',
// token: 'aldksfj',
// role: eRole.superManager,
// })
// this.$router.push({
// name: 'home'
// })
}
else
{
}
else
{
return
false
;
return
false
;
}
}
...
...
src/views/Root/Banner/index.vue
View file @
88b5b090
<
template
>
<
template
>
<div>
<div>
<p
class=
"
text-2xl font-bold mb-5"
>
Banner管理
</p>
<p
class=
"text-2xl font-bold mb-5"
>
Banner管理
</p>
<!-- timepicker -->
<!-- timepicker -->
<span
class=
" font-semibold"
>
发布时间:
</span>
<span
class=
"font-semibold"
>
发布时间:
</span>
<timerange
class=
" mr-3"
<timerange
@
getNewTime=
"getNewTime"
/>
class=
"mr-3"
<a-button
type=
"primary"
style=
" margin-right:10px;"
@
click=
"query"
>
查询
</a-button>
@
getNewTime=
"getNewTime"
:startTime=
"queryParam.startTime"
:endTime=
"queryParam.endTime"
/>
<a-button
type=
"primary"
style=
"margin-right: 10px;"
@
click=
"fetchList"
>
查询
</a-button>
<!-- 新增 -->
<!-- 新增 -->
<a-button
type=
"primary"
@
click=
"showModal"
>
新增
</a-button>
<a-button
type=
"primary"
@
click=
"showModal"
>
新增
</a-button>
<!-- 上传弹窗 -->
<!-- 上传弹窗 -->
<a-modal
<a-modal
:afterClose=
"afterAddNewBannerModalClose"
title=
"新增"
title=
"新增"
v-model=
"visible"
v-model=
"visible"
:centered=
"true"
:centered=
"true"
footer=
""
footer=
""
:closable=
"false"
:closable=
"false"
>
>
<a-form-model
:model=
"form"
<a-form-model
:label-col=
"
{ span: 5 }"
:model=
"form"
:wrapper-col=" { span: 10 }"
:label-col=
"
{ span: 5 }"
ref="ruleForm"
:wrapper-col="{ span: 10 }"
:rules="rules">
ref="ruleForm"
:rules="rules"
>
<a-form-model-item
label=
"Banner名称"
prop=
"name"
>
<a-form-model-item
label=
"Banner名称"
prop=
"name"
>
<a-input
style=
"width:200px"
v-model=
"form.name"
placeholder=
"请输入名称"
/>
<a-input
style=
"width: 200px;"
v-model=
"form.name"
placeholder=
"请输入名称"
/>
</a-form-model-item>
</a-form-model-item>
<a-form-model-item
label=
"Banner位置"
>
<a-form-model-item
label=
"Banner位置"
>
<span
class=
"
text-sm text-black"
>
首页
</span>
<span
class=
"text-sm text-black"
>
首页
</span>
</a-form-model-item>
</a-form-model-item>
<a-form-model-item
label=
"上传图片"
:required=
"true"
prop=
"file"
>
<a-form-model-item
label=
"上传图片"
:required=
"true"
prop=
"file
List
"
>
<a-upload
<a-upload
name=
"file"
:beforeUpload=
"beforeUpload"
action=
"#"
name=
"uploadFile"
accept=
"image/*"
action=
"/proxyApi/api/v1/image/upload"
:accept=
"ACCEPT_IMAGE_TYPE"
:file-list=
"form.fileList"
@
change=
"handleChange"
@
change=
"handleChange"
required
required
>
>
<a-button
style=
"width:200px"
>
<a-icon
type=
"upload"
/>
点击上传
</a-button>
<a-button
style=
"width: 200px;"
:disabled=
"alreadlyHasOneImage"
>
<a-icon
type=
"upload"
/>
点击上传
</a-button>
</a-upload>
</a-upload>
</a-form-model-item>
</a-form-model-item>
<a-form-model-item
:wrapper-col=
"
{ span: 9, offset: 5 }">
<a-form-model-item
:wrapper-col=
"
{ span: 9, offset: 5 }">
<a-button
type=
"primary"
@
click=
"onSubmit"
>
发布
</a-button>
<a-button
type=
"primary"
@
click=
"onSubmit"
>
发布
</a-button>
<a-button
style=
"margin-left: 10px;"
@
click=
"visible=false"
>
取消
</a-button>
<a-button
style=
"margin-left: 10px;"
@
click=
"visible = false"
>
取消
</a-button>
</a-form-model-item>
</a-form-model-item>
</a-form-model>
</a-form-model>
</a-modal>
</a-modal>
<!-- banner列表 -->
<!-- banner列表 -->
<a-table
:columns=
"columns"
<a-table
:data-source=
"list"
:columns=
"columns"
style=
" text-align: center; margin-top:40px;"
:data-source=
"bannerList"
bordered
>
:loading=
"tableLoading"
<span
slot=
"path"
slot-scope=
"text,record"
>
:pagination=
"false"
<a-icon
type=
"picture"
@
click=
"preview(record.path)"
theme=
"twoTone"
style=
"fontSize:20px"
/>
style=
"text-align: center; margin-top: 40px;"
bordered
>
<template
#
created_at=
"text"
>
{{
text
|
formatDate
}}
</
template
>
<
template
#
banner_status=
"text"
>
{{
text
|
filtereBannerStatus
}}
</
template
>
<
template
#
location=
"text"
>
{{
text
|
filterBannerLocation
}}
</
template
>
<span
slot=
"file_name"
slot-scope=
"text, record"
>
<a-icon
type=
"picture"
@
click=
"preview(record.file_name)"
theme=
"twoTone"
style=
"fontsize: 20px;"
/>
<el-image-viewer
<el-image-viewer
v-if=
"showViewer"
v-if=
"showViewer"
fit=
"scale-down"
fit=
"scale-down"
:on-close=
"closeViewer"
:on-close=
"closeViewer"
:url-list=
"[url]"
/>
:url-list=
"[url]"
/>
</span>
</span>
<span
slot=
"action"
slot-scope=
"text,record"
>
<span
slot=
"action"
slot-scope=
"text,
record"
>
<span
v-if=
"record.
state=='下架'
"
>
<span
v-if=
"record.
banner_status == eBannerStatus.editable
"
>
<a
@
click=
"addBanner"
>
上架
</a>
<a
@
click=
"addBanner
(record)
"
>
上架
</a>
<a-divider
type=
"vertical"
/>
<a-divider
type=
"vertical"
/>
<a
@
click=
"deleteBanner"
>
删除
</a>
<a
@
click=
"deleteBanner
(record)
"
>
删除
</a>
</span>
</span>
<a
v-else
<a
@
click=
"removeBanner"
>
下架
</a>
v-else-if=
"(record.banner_status == eBannerStatus.published)"
@
click=
"removeBanner(record)"
>
下架
</a>
</span>
</span>
</a-table>
</a-table>
<a-pagination
class=
"text-right mt-4"
:current=
"current"
:total=
"total"
@
change=
"handlePaginationChange"
></a-pagination>
<!-- 操作Modal -->
<!-- 操作Modal -->
<a-modal
<a-modal
:title=
"title"
:title=
"title"
v-model=
"show"
v-model=
"show"
:centered=
"true"
:centered=
"true"
:closable=
"false"
:closable=
"false"
:confirmLoading=
"modalLoading"
@
ok=
"handleOk"
@
ok=
"handleOk"
@
cancle=
"show = false"
@
cancle=
"show = false"
>
>
<p
class=
"
text-center"
>
{{
text
}}
</p>
<p
class=
"
text-center"
>
{{ text
}}
</p>
</a-modal>
</a-modal>
</div>
</div>
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
>
import
Vue
from
"vue"
import
Vue
from
'vue'
import
{
FormModel
}
from
'ant-design-vue'
import
{
FormModel
,
message
}
from
'ant-design-vue'
import
timerange
from
'@/components/TimePicker/index.vue'
import
timerange
from
'@/components/TimePicker/index.vue'
import
{
bannerList
}
from
'@/mock/index'
import
{
bannerList
}
from
'@/mock/index'
import
{
columns
}
from
'@/const/columns/bannerColumns'
import
{
columns
}
from
'@/const/columns/bannerColumns'
import
{
modalType
}
from
'./const'
import
{
modalType
}
from
'./const'
import
{
bannerQuery
}
from
'@/service/BannerManagementService/index'
import
{
bannerQuery
,
bannerModify
,
}
from
'@/service/BannerManagementService/index'
import
{
ACCEPT_IMAGE_TYPE
,
isAcceptImageType
,
TOAST_TEXT
,
TOAST_TEXT2
,
MAX_IMAGE_SIZE
,
}
from
'@/const/config/upload'
import
{
bannerAdd
}
from
'@/service/BannerManagementService/index'
import
{
PAGE_SIZE
}
from
'@/const/config/page'
import
{
iBannerItem
}
from
'@/service/BannerManagementService/types'
import
{
eBannerStatus
}
from
'@/types/banner'
import
FileService
from
'@/service/FileService/index'
export
default
Vue
.
extend
({
export
default
Vue
.
extend
({
components
:{
components
:
{
'el-image-viewer'
:()
=>
import
(
'element-ui/packages/image/src/image-viewer.vue'
),
'el-image-viewer'
:
()
=>
timerange
import
(
'element-ui/packages/image/src/image-viewer.vue'
),
timerange
,
},
},
computed
:{
computed
:
{
columns
(){
columns
()
{
return
columns
return
columns
}
},
current
():
number
{
return
this
.
queryParam
.
offset
/
this
.
queryParam
.
limit
+
1
},
alreadlyHasOneImage
():
boolean
{
return
this
.
form
.
fileList
.
length
==
1
},
},
mounted
()
{
this
.
fetchList
()
},
},
data
()
{
data
()
{
let
list
=
bannerList
let
list
=
bannerList
return
{
return
{
uuid
:
''
,
eBannerStatus
,
ACCEPT_IMAGE_TYPE
,
visible
:
false
,
visible
:
false
,
show
:
false
,
show
:
false
,
title
:
''
,
modalLoading
:
false
,
text
:
''
,
title
:
''
,
modalType
:
modalType
.
on
,
text
:
''
,
queryParam
:{
modalType
:
modalType
.
on
,
startTime
:
0
,
queryParam
:
{
endTime
:
0
startTime
:
undefined
as
undefined
|
number
,
endTime
:
undefined
as
undefined
|
number
,
limit
:
PAGE_SIZE
,
offset
:
0
,
location
:
0
,
},
},
tableLoading
:
false
,
bannerList
:
[]
as
iBannerItem
[],
total
:
0
,
form
:
{
form
:
{
name
:
''
,
name
:
''
,
file_hash
:
''
,
fileList
:
[],
},
},
rules
:{
rules
:
{
name
:
[{
required
:
true
,
message
:
'请输入名称'
,
trigger
:
'blur'
}],
name
:
[{
required
:
true
,
message
:
'请输入名称'
,
trigger
:
'blur'
}],
file
:
[{
required
:
true
,
message
:
'请上传文件'
,
trigger
:
'change'
}],
fileList
:
[
{
required
:
true
,
message
:
'请上传文件'
,
trigger
:
'change'
},
],
},
},
showViewer
:
false
,
showViewer
:
false
,
url
:
''
,
url
:
''
,
list
,
list
,
img
:
require
(
'../../../assets/pic.png'
),
img
:
require
(
'../../../assets/pic.png'
),
}
}
},
},
methods
:{
methods
:
{
getNewTime
(
startTime
:
number
,
endTime
:
number
){
handlePaginationChange
(
current
:
number
)
{
this
.
queryParam
.
offset
=
(
current
-
1
)
*
this
.
queryParam
.
limit
this
.
fetchList
()
},
async
fetchList
()
{
this
.
tableLoading
=
true
const
ret
=
await
bannerQuery
({
end_time
:
this
.
queryParam
.
endTime
,
start_time
:
this
.
queryParam
.
startTime
,
limit
:
this
.
queryParam
.
limit
,
offset
:
this
.
queryParam
.
offset
,
location
:
this
.
queryParam
.
location
,
banner_status
:
0
,
})
if
(
ret
.
code
===
200
)
{
this
.
bannerList
=
ret
.
data
.
items
this
.
total
=
ret
.
data
.
total
this
.
tableLoading
=
false
}
},
afterAddNewBannerModalClose
()
{
const
ref
=
this
.
$refs
.
ruleForm
as
FormModel
ref
.
resetFields
()
},
getNewTime
(
startTime
:
number
,
endTime
:
number
)
{
this
.
queryParam
.
startTime
=
startTime
this
.
queryParam
.
startTime
=
startTime
this
.
queryParam
.
endTime
=
endTime
this
.
queryParam
.
endTime
=
endTime
},
},
async
query
(){
addBanner
(
record
:
any
)
{
const
ret
=
await
bannerQuery
(
this
.
uuid
=
record
.
uuid
{
banner_status
:
0
,
location
:
0
,
start_time
:
this
.
queryParam
.
startTime
,
end_time
:
this
.
queryParam
.
endTime
}
)
console
.
log
(
ret
)
},
addBanner
(
record
:
any
){
this
.
modalType
=
modalType
.
on
this
.
modalType
=
modalType
.
on
this
.
show
=
true
this
.
show
=
true
this
.
title
=
'上架Banner'
this
.
title
=
'上架Banner'
this
.
text
=
'确定上架该Banner吗?'
this
.
text
=
'确定上架该Banner吗?'
},
},
removeBanner
(
record
:
any
){
removeBanner
(
record
:
any
)
{
this
.
uuid
=
record
.
uuid
this
.
modalType
=
modalType
.
off
this
.
modalType
=
modalType
.
off
this
.
show
=
true
this
.
show
=
true
this
.
title
=
'下架Banner'
this
.
title
=
'下架Banner'
this
.
text
=
'确定下架该Banner吗?'
this
.
text
=
'确定下架该Banner吗?'
},
},
deleteBanner
(
record
:
any
){
deleteBanner
(
record
:
any
)
{
this
.
uuid
=
record
.
uuid
this
.
modalType
=
modalType
.
delete
this
.
modalType
=
modalType
.
delete
this
.
show
=
true
this
.
show
=
true
this
.
title
=
'删除Banner'
this
.
title
=
'删除Banner'
this
.
text
=
'确定删除该Banner吗?'
this
.
text
=
'确定删除该Banner吗?'
},
},
handleOk
(
record
:
any
){
async
handleOk
(
record
:
any
)
{
if
(
this
.
modalType
==
modalType
.
on
){
this
.
modalLoading
=
true
try
{
}
else
if
(
this
.
modalType
==
modalType
.
off
){
if
(
this
.
modalType
==
modalType
.
on
)
{
await
bannerModify
({
}
else
if
(
this
.
modalType
==
modalType
.
delete
){
banner_status
:
eBannerStatus
.
published
,
uuid
:
this
.
uuid
,
})
}
else
if
(
this
.
modalType
==
modalType
.
off
)
{
await
bannerModify
({
banner_status
:
eBannerStatus
.
editable
,
uuid
:
this
.
uuid
,
})
}
else
if
(
this
.
modalType
==
modalType
.
delete
)
{
await
bannerModify
({
banner_status
:
eBannerStatus
.
delete
,
uuid
:
this
.
uuid
,
})
}
this
.
show
=
false
this
.
fetchList
()
}
catch
(
err
)
{}
this
.
modalLoading
=
false
},
beforeUpload
(
file
:
File
)
{
const
isAccpet
=
isAcceptImageType
(
file
)
if
(
!
isAccpet
)
{
message
.
error
(
TOAST_TEXT
)
}
}
const
isLt4M
=
file
.
size
<
MAX_IMAGE_SIZE
if
(
!
isLt4M
)
{
message
.
error
(
TOAST_TEXT2
)
}
console
.
log
(
isAccpet
&&
isLt4M
)
this
.
show
=
false
return
isAccpet
&&
isLt4M
},
},
handleChange
(
info
:
any
)
{
handleChange
(
info
:
any
)
{
console
.
log
(
info
,
'show info'
)
const
fileList
=
(
info
.
fileList
||
[]).
filter
((
item
:
any
)
=>
{
return
item
.
status
!==
undefined
})
this
.
form
.
fileList
=
fileList
if
(
info
.
file
.
status
!==
'uploading'
)
{
if
(
info
.
file
.
status
!==
'uploading'
)
{
console
.
log
(
info
.
file
,
info
.
fileList
);
}
}
if
(
info
.
file
.
status
===
'done'
)
{
if
(
info
.
file
.
status
===
'done'
)
{
console
.
log
(
`
${
info
.
file
.
name
}
file uploaded successfully`
);
if
(
info
.
file
.
response
.
code
===
200
)
{
this
.
form
.
file_hash
=
info
.
file
.
response
.
data
}
}
else
if
(
info
.
file
.
status
===
'error'
)
{
}
else
if
(
info
.
file
.
status
===
'error'
)
{
console
.
log
(
`
${
info
.
file
.
name
}
file upload failed.`
);
}
}
},
},
showModal
()
{
showModal
()
{
this
.
visible
=
true
;
this
.
visible
=
true
},
},
preview
(
src
:
string
)
{
preview
(
file_name
:
string
)
{
this
.
showViewer
=
true
this
.
showViewer
=
true
const
src
=
FileService
.
getInstance
().
getImageSrc
(
file_name
)
this
.
url
=
src
this
.
url
=
src
},
},
closeViewer
(){
closeViewer
()
{
this
.
showViewer
=
false
this
.
showViewer
=
false
},
},
handleCancel
(
e
:
Event
)
{
handleCancel
(
e
:
Event
)
{
this
.
visible
=
false
;
this
.
visible
=
false
},
},
onSubmit
()
{
onSubmit
()
{
(
this
.
$refs
.
ruleForm
as
FormModel
).
validate
(
valid
=>
{
;(
this
.
$refs
.
ruleForm
as
FormModel
).
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
valid
)
{
this
.
visible
=
false
this
.
visible
=
false
bannerAdd
({
file_name
:
this
.
form
.
file_hash
,
location
:
1
,
title
:
this
.
form
.
name
,
}).
then
((
ret
)
=>
{
if
(
ret
.
code
===
200
)
{
this
.
fetchList
()
message
.
success
(
'发布成功'
)
}
})
}
else
{
}
else
{
console
.
log
(
'error submit!!'
)
;
console
.
log
(
'error submit!!'
)
return
false
;
return
false
}
}
})
})
},
},
}
}
,
})
;
})
</
script
>
</
script
>
src/views/Root/index.vue
View file @
88b5b090
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
<div>
<div>
<a-layout
id=
"components-layout-demo-fixed-sider"
>
<a-layout
id=
"components-layout-demo-fixed-sider"
>
<a-layout-sider
width=
"256"
style=
"background: white"
>
<a-layout-sider
width=
"256"
style=
"background: white"
>
<div
class=
"text-center text-lg my-3"
>
合同
后台
</div>
<div
class=
"text-center text-lg my-3"
>
普惠金融
后台
</div>
<a-menu
<a-menu
style=
"width: 256px"
style=
"width: 256px"
:open-keys
.
sync=
"openKeys"
:open-keys
.
sync=
"openKeys"
...
...
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