Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-live
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-live
Commits
75df9a65
提交
75df9a65
authored
5月 27, 2021
作者:
pengxiaohui
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
直播中台v2.2优化
上级
02124433
显示空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
907 行增加
和
242 行删除
+907
-242
system.js
src/api/system.js
+26
-4
tencent.js
src/api/tencent.js
+32
-0
index.vue
src/components/UserSearch/index.vue
+96
-0
index.vue
src/components/layout/Sidebar/index.vue
+17
-2
index.vue
src/components/layout/index.vue
+2
-2
MeetingForm.vue
src/pages/meeting/tencent-meeting/components/MeetingForm.vue
+51
-32
meeting-update.vue
src/pages/meeting/tencent-meeting/meeting-update.vue
+12
-2
index.vue
src/pages/system/account/index.vue
+204
-156
index.vue
src/pages/system/role/index.vue
+95
-30
index.vue
src/pages/tencent/account/index.vue
+354
-0
routes.js
src/router/routes.js
+15
-0
user.js
src/store/modules/user.js
+0
-13
style.scss
src/style.scss
+3
-0
beforeEnter.js
src/utils/beforeEnter.js
+0
-1
没有找到文件。
src/api/system.js
浏览文件 @
75df9a65
...
@@ -17,6 +17,8 @@ export function operateLog(params) {
...
@@ -17,6 +17,8 @@ export function operateLog(params) {
export
function
searchUserList
(
params
)
{
export
function
searchUserList
(
params
)
{
return
httpRequest
.
get
(
'/api/live/common/v1/sso-user/search'
,
{
params
})
return
httpRequest
.
get
(
'/api/live/common/v1/sso-user/search'
,
{
params
})
}
}
/* ----------------------------系统用户管理---------------------------- */
/**
/**
* 获取当前用户的角色
* 获取当前用户的角色
*/
*/
...
@@ -32,8 +34,8 @@ export function createRole(data) {
...
@@ -32,8 +34,8 @@ export function createRole(data) {
/**
/**
* 更新角色
* 更新角色
*/
*/
export
function
updateRole
(
params
)
{
export
function
updateRole
(
id
,
params
)
{
return
httpRequest
.
get
(
`/api/live/admin/v2/role/
${
params
.
role_id
}
/update`
,
{
params
}
)
return
httpRequest
.
put
(
`/api/live/admin/v2/role/
${
id
}
/update`
,
params
)
}
}
/**
/**
* 获取角色详情
* 获取角色详情
...
@@ -44,8 +46,8 @@ export function getRoleDetails(params) {
...
@@ -44,8 +46,8 @@ export function getRoleDetails(params) {
/**
/**
* 删除
* 删除
*/
*/
export
function
deleteRole
(
params
)
{
export
function
deleteRole
(
id
)
{
return
httpRequest
.
get
(
`/api/live/admin/v2/role/
${
params
.
role_id
}
/delete`
,
{
params
}
)
return
httpRequest
.
delete
(
`/api/live/admin/v2/role/
${
id
}
/delete`
)
}
}
/**
/**
* 获取角色列表
* 获取角色列表
...
@@ -83,3 +85,23 @@ export function getPermissions(params) {
...
@@ -83,3 +85,23 @@ export function getPermissions(params) {
export
function
permissionToRole
(
data
)
{
export
function
permissionToRole
(
data
)
{
return
httpRequest
.
post
(
'/api/live/admin/v2/assign/permission-to-role'
,
data
)
return
httpRequest
.
post
(
'/api/live/admin/v2/assign/permission-to-role'
,
data
)
}
}
/* ----------------------------系统用户管理---------------------------- */
/**
* 创建系统用户
*/
export
function
createAccount
(
data
)
{
return
httpRequest
.
post
(
'/api/live/admin/v2/user/create'
,
data
)
}
/**
* 删除系统用户
*/
export
function
deleteAccount
(
data
)
{
return
httpRequest
.
post
(
'/api/live/admin/v2/user/batch-delete'
,
data
)
}
/**
* 获取系统用户列表(分页)
*/
export
function
getAccountList
(
params
)
{
return
httpRequest
.
get
(
'/api/live/admin/v2/users'
,
{
params
})
}
src/api/tencent.js
0 → 100644
浏览文件 @
75df9a65
import
httpRequest
from
'@/utils/axios'
/**
* 创建腾讯用户
*/
export
function
createTxAccount
(
data
)
{
return
httpRequest
.
post
(
'/api/live/admin/v2-2/tencent/user/create'
,
data
)
}
/**
* 更新腾讯用户
*/
export
function
updateTxAccount
(
id
,
data
)
{
return
httpRequest
.
put
(
`/api/live/admin/v2-2/tencent/user/
${
id
}
/update`
,
data
)
}
/**
* 删除腾讯用户
*/
export
function
deleteTxAccount
(
data
)
{
return
httpRequest
.
post
(
'/api/live/admin/v2-2/tencent/user/batch-delete'
,
data
)
}
/**
* 获取腾讯用户列表(分页)
*/
export
function
getTxAccountList
(
params
)
{
return
httpRequest
.
get
(
'/api/live/admin/v2-2/tencent/users'
,
{
params
})
}
/**
* 获取所有腾讯用户列表(分页)
*/
export
function
getAllTxAccountList
(
params
)
{
return
httpRequest
.
get
(
'/api/live/admin/v2-2/tencent/user/list'
,
{
params
})
}
\ No newline at end of file
src/components/UserSearch/index.vue
0 → 100644
浏览文件 @
75df9a65
<
template
>
<el-select
v-model=
"userId"
v-bind=
"options"
placeholder=
"输入邮箱/手机号码搜索"
filterable
remote
:remote-method=
"fetchUserList"
:loading=
"searchUsersloading"
@
change=
"handleChange"
>
<el-option
:label=
"user.real_name || user.nickname "
:value=
"user.id"
v-for=
"user in userList"
:key=
"user.id"
>
<span
style=
"float: left"
>
{{
user
.
real_name
||
user
.
nickname
}}
<template
v-if=
"user.mobile"
>
(手机号:
{{
user
.
mobile
}}
)
</
template
>
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-if=
"user.email"
>
邮箱:{{ user.email }}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-else
>
ID:{{ user.id }}
</span>
</el-option>
</el-select>
</template>
<
script
>
const
MOBILE_REG
=
/^1
(
3
[
0-9
]
|4
[
01456879
]
|5
[
0-35-9
]
|6
[
2567
]
|7
[
0-8
]
|8
[
0-9
]
|9
[
0-35-9
])\d{4,8}
$/
const
EMAIL_REG
=
/^
[
A-Za-z0-9
]
+
([
_.
\\
-
][
A-Za-z0-9
]
+
)
*@
[
A-Za-z0-9-.
]
+$/
export
default
{
props
:
{
value
:
{
type
:
[
Array
,
String
]
},
defaultList
:
{
type
:
Array
,
default
:
[]
},
fetchApi
:
{
type
:
Function
,
require
:
true
},
options
:
{
type
:
Object
,
default
:
()
=>
{
return
{}
}
}
},
data
()
{
return
{
userId
:
this
.
value
,
searchUsersloading
:
false
,
userList
:
[]
}
},
watch
:
{
value
:
{
handler
:
function
(
nv
)
{
this
.
userId
=
nv
},
immediate
:
true
,
deep
:
true
},
defaultList
:
{
handler
:
function
(
nv
)
{
this
.
userList
=
nv
},
immediate
:
true
,
deep
:
true
}
},
methods
:
{
handleChange
()
{
const
selectedUser
=
this
.
userList
.
find
(
item
=>
item
.
id
===
this
.
userId
)
this
.
$emit
(
'input'
,
this
.
userId
)
this
.
$emit
(
'select'
,
selectedUser
)
},
fetchUserList
(
val
)
{
let
searchType
=
'username'
if
(
EMAIL_REG
.
test
(
val
))
{
searchType
=
'email'
}
else
if
(
MOBILE_REG
.
test
(
val
))
{
searchType
=
'mobile'
}
if
(
!
val
)
return
false
else
{
const
params
=
{
[
searchType
]:
val
}
this
.
searchUsersloading
=
true
this
.
fetchApi
(
params
)
.
then
(
res
=>
{
this
.
searchUsersloading
=
false
if
(
res
.
data
&&
Array
.
isArray
(
res
.
data
.
items
))
{
this
.
userList
=
res
.
data
.
items
}
})
.
catch
(()
=>
{})
}
}
}
}
</
script
>
<
style
scoped
>
.el-select
{
width
:
100%
;
}
</
style
>
\ No newline at end of file
src/components/layout/Sidebar/index.vue
浏览文件 @
75df9a65
...
@@ -49,12 +49,27 @@ const defaultMenu = [
...
@@ -49,12 +49,27 @@ const defaultMenu = [
path
:
'/system/role'
path
:
'/system/role'
},
},
{
{
title
:
'
账号
管理'
,
title
:
'
用户
管理'
,
icon
:
'el-icon-key'
,
icon
:
'el-icon-key'
,
path
:
'/system/account'
path
:
'/system/account'
}
}
]
]
},
},
{
title
:
'腾讯会议设置'
,
icon
:
'el-icon-message'
,
path
:
'/tencent'
,
meta
:
{
roles
:
[
'administrator'
]
},
children
:
[
{
title
:
'腾讯账号管理'
,
icon
:
''
,
path
:
'/tencent/account'
}
]
},
{
{
title
:
'个人设置'
,
title
:
'个人设置'
,
icon
:
'el-icon-user'
,
icon
:
'el-icon-user'
,
...
@@ -137,7 +152,7 @@ export default {
...
@@ -137,7 +152,7 @@ export default {
<
style
scoped
>
<
style
scoped
>
.logo
{
.logo
{
height
:
48px
;
height
:
48px
;
width
:
1
66
px
;
width
:
1
70
px
;
background
:
#fff
;
background
:
#fff
;
padding-top
:
4px
;
padding-top
:
4px
;
transition
:
width
0.295s
ease-in-out
;
transition
:
width
0.295s
ease-in-out
;
...
...
src/components/layout/index.vue
浏览文件 @
75df9a65
...
@@ -35,7 +35,7 @@ export default {
...
@@ -35,7 +35,7 @@ export default {
}
}
.sidebar-container
{
.sidebar-container
{
/* transition: width 0.28s; */
/* transition: width 0.28s; */
width
:
1
66
px
;
width
:
1
80
px
;
height
:
100%
;
height
:
100%
;
position
:
fixed
;
position
:
fixed
;
font-size
:
0px
;
font-size
:
0px
;
...
@@ -52,7 +52,7 @@ export default {
...
@@ -52,7 +52,7 @@ export default {
min-height
:
100%
;
min-height
:
100%
;
-webkit-transition
:
margin-left
0.28s
;
-webkit-transition
:
margin-left
0.28s
;
transition
:
margin-left
0.28s
;
transition
:
margin-left
0.28s
;
margin-left
:
1
66
px
;
margin-left
:
1
80
px
;
position
:
relative
;
position
:
relative
;
}
}
.sidebar-collapse
.main-container
{
.sidebar-collapse
.main-container
{
...
...
src/pages/meeting/tencent-meeting/components/MeetingForm.vue
浏览文件 @
75df9a65
...
@@ -67,7 +67,7 @@
...
@@ -67,7 +67,7 @@
<el-form-item
label=
"指定会议管理员"
>
<el-form-item
label=
"指定会议管理员"
>
<p
style=
"line-height:24px;font-size:12px;"
>
(会议管理员有修改会议,复制、取消会议等所有管理本次会议的权限)
</p>
<p
style=
"line-height:24px;font-size:12px;"
>
(会议管理员有修改会议,复制、取消会议等所有管理本次会议的权限)
</p>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-select
style=
"width: 100%"
v-model=
"form.managers"
placeholder=
"输入邮箱/手机号码搜索"
size=
"small"
multiple
filterable
remote
:remote-method=
"fetchUserList"
:loading=
"searchUsersloading"
clearable
>
<
!--
<
el-select
style=
"width: 100%"
v-model=
"form.managers"
placeholder=
"输入邮箱/手机号码搜索"
size=
"small"
multiple
filterable
remote
:remote-method=
"fetchUserList"
:loading=
"searchUsersloading"
clearable
>
<el-option
:label=
"user.real_name || user.nickname "
:value=
"user.id"
v-for=
"user in userList"
:key=
"user.id"
>
<el-option
:label=
"user.real_name || user.nickname "
:value=
"user.id"
v-for=
"user in userList"
:key=
"user.id"
>
<span
style=
"float: left"
>
<span
style=
"float: left"
>
{{
user
.
real_name
||
user
.
nickname
}}
{{
user
.
real_name
||
user
.
nickname
}}
...
@@ -76,9 +76,21 @@
...
@@ -76,9 +76,21 @@
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-if=
"user.email"
>
邮箱:{{ user.email }}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-if=
"user.email"
>
邮箱:{{ user.email }}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-else
>
ID:{{ user.id }}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-else
>
ID:{{ user.id }}
</span>
</el-option>
</el-option>
</el-select>
</el-select>
-->
<user-search
v-model=
"form.managers"
:fetchApi=
"fetchApiSearch"
:defaultList=
"userList"
:options=
"{ size: 'small', multiple: true, clearable: true }"
/>
</el-col>
</el-col>
</el-form-item>
</el-form-item>
<el-form-item
label=
"会议主持人"
>
<el-select
style=
"width: 100%"
v-model=
"form.hosts"
placeholder=
"请选择腾讯会议用户,支持关键字搜索"
size=
"small"
multiple
filterable
remote
:remote-method=
"fetchTxAccountList"
:loading=
"searchLoading"
clearable
>
<el-option
:label=
"user.username"
:value=
"user.userid"
v-for=
"user in txAccountList"
:key=
"user.id"
>
<span
style=
"float: left"
>
{{ user.username }}
<
template
v-if=
"user.phone"
>
(手机号:
{{
user
.
phone
}}
)
</
template
>
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-if=
"user.email"
>
邮箱:{{ user.email }}
</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"会议设置"
style=
"margin-bottom:2px;"
>
<el-form-item
label=
"会议设置"
style=
"margin-bottom:2px;"
>
<el-col
:span=
"10"
>
<el-col
:span=
"10"
>
<el-checkbox
style=
"width: 120px"
v-model=
"form.hasPwd"
>
开启会议密码
</el-checkbox>
<el-checkbox
style=
"width: 120px"
v-model=
"form.hasPwd"
>
开启会议密码
</el-checkbox>
...
@@ -131,24 +143,34 @@
...
@@ -131,24 +143,34 @@
</el-form>
</el-form>
</template>
</template>
<
script
>
<
script
>
import
UserSearch
from
'@/components/UserSearch/index'
import
{
timeTrans
,
dateFormat
,
getYMDByDate
,
getTimestampYMD
,
getCurHalfHour
,
computedDateByRateTimes
,
computedTimesByRateDate
}
from
'@/utils/dateAlgs'
import
{
timeTrans
,
dateFormat
,
getYMDByDate
,
getTimestampYMD
,
getCurHalfHour
,
computedDateByRateTimes
,
computedTimesByRateDate
}
from
'@/utils/dateAlgs'
import
{
searchUserList
}
from
'@api/common'
import
{
searchUserList
}
from
'@api/common'
import
{
getTxAccountList
}
from
'@api/tencent'
import
{
mapGetters
}
from
'vuex'
import
{
mapGetters
}
from
'vuex'
// import _ from 'lodash'
// import _ from 'lodash'
const
DAY_TIMESTAMP
=
8.64e7
const
DAY_TIMESTAMP
=
8.64e7
const
MOBILE_REG
=
/^1
(
3
[
0-9
]
|4
[
01456879
]
|5
[
0-35-9
]
|6
[
2567
]
|7
[
0-8
]
|8
[
0-9
]
|9
[
0-35-9
])\d{4,8}
$/
const
EMAIL_REG
=
/^
[
A-Za-z0-9
]
+
([
_.
\\
-
][
A-Za-z0-9
]
+
)
*@
[
A-Za-z0-9-.
]
+$/
export
default
{
export
default
{
components
:
{
UserSearch
},
props
:
{
props
:
{
data
:
{
data
:
{
type
:
Object
type
:
Object
},
},
users
:
{
users
:
{
type
:
Array
type
:
Array
,
default
:
()
=>
{
return
[]
}
},
},
isReviewRecurring
:
{
isReviewRecurring
:
{
type
:
Boolean
,
type
:
Boolean
,
default
:
false
default
:
false
},
reviewList
:
{
type
:
Object
,
default
:
()
=>
{
return
{}
}
}
}
},
},
data
()
{
data
()
{
...
@@ -241,19 +263,15 @@ export default {
...
@@ -241,19 +263,15 @@ export default {
enable_live_password
:
false
,
enable_live_password
:
false
,
live_password
:
''
,
live_password
:
''
,
enable_live_im
:
false
enable_live_im
:
false
}
},
managers
:
[],
hosts
:
[]
},
},
recurringTypeOptions
:
[
'每天'
,
'每个工作日'
,
'每周'
,
'每两周'
,
'每月'
],
recurringTypeOptions
:
[
'每天'
,
'每个工作日'
,
'每周'
,
'每两周'
,
'每月'
],
userList
:
[],
userList
:
[],
searchType
:
'username'
,
txAccountList
:
[],
searchTypeOptions
:
{
searchLoading
:
false
,
username
:
'通过用户名搜索'
,
fetchApiSearch
:
searchUserList
,
nickname
:
'通过昵称搜索'
,
email
:
'通过邮箱搜索'
,
mobile
:
'通过手机号搜索'
,
id
:
'通过ID搜索'
},
searchUsersloading
:
false
,
rules
:
{
rules
:
{
subject
:
[{
required
:
true
,
message
:
'请填写会议主题'
,
trigger
:
'blur'
}],
subject
:
[{
required
:
true
,
message
:
'请填写会议主题'
,
trigger
:
'blur'
}],
startDate
:
[
startDate
:
[
...
@@ -423,7 +441,9 @@ export default {
...
@@ -423,7 +441,9 @@ export default {
data
:
{
data
:
{
handler
:
function
(
val
)
{
handler
:
function
(
val
)
{
if
(
val
&&
val
.
startDate
)
{
if
(
val
&&
val
.
startDate
)
{
this
.
userList
=
this
.
users
console
.
log
(
this
.
reviewList
)
this
.
userList
=
this
.
reviewList
.
userList
this
.
txAccountList
=
this
.
reviewList
.
accountList
this
.
deepSet
(
this
.
form
,
val
)
this
.
deepSet
(
this
.
form
,
val
)
// if (val.meeting_type === 1) {
// if (val.meeting_type === 1) {
// val.recurring_rule.until_type === 0 ? this.setUntilCount() : this.setUntilDate()
// val.recurring_rule.until_type === 0 ? this.setUntilCount() : this.setUntilDate()
...
@@ -435,6 +455,9 @@ export default {
...
@@ -435,6 +455,9 @@ export default {
}
}
},
},
created
()
{
created
()
{
if
(
this
.
$route
.
name
!==
'MeetingUpdate'
)
{
this
.
fetchTxAccountList
()
}
this
.
setUntilDate
()
this
.
setUntilDate
()
},
},
methods
:
{
methods
:
{
...
@@ -536,6 +559,9 @@ export default {
...
@@ -536,6 +559,9 @@ export default {
enable_live
:
form
.
enable_live
,
enable_live
:
form
.
enable_live
,
managers
:
form
.
managers
.
length
>
0
?
form
.
managers
:
[
this
.
user
.
id
]
managers
:
form
.
managers
.
length
>
0
?
form
.
managers
:
[
this
.
user
.
id
]
}
}
if
(
form
.
hosts
.
length
>
0
)
{
params
.
hosts
=
form
.
hosts
}
if
(
form
.
hasPwd
)
params
.
password
=
form
.
password
if
(
form
.
hasPwd
)
params
.
password
=
form
.
password
const
settings
=
{
...
form
.
settings
}
const
settings
=
{
...
form
.
settings
}
if
(
!
form
.
auto_record
)
{
if
(
!
form
.
auto_record
)
{
...
@@ -563,30 +589,23 @@ export default {
...
@@ -563,30 +589,23 @@ export default {
}
}
return
params
return
params
},
},
fetchUserList
(
val
)
{
fetchTxAccountList
(
val
)
{
let
searchType
=
'username'
if
(
EMAIL_REG
.
test
(
val
))
{
searchType
=
'email'
}
else
if
(
MOBILE_REG
.
test
(
val
))
{
searchType
=
'mobile'
}
if
(
!
val
)
return
false
else
{
const
params
=
{
const
params
=
{
[
searchType
]:
val
page
:
1
,
limit
:
100
}
}
this
.
searchUsersloading
=
true
if
(
val
)
params
.
search
=
val
searchUserList
(
params
)
this
.
searchLoading
=
true
getTxAccountList
(
params
)
.
then
(
res
=>
{
.
then
(
res
=>
{
this
.
searchUsersl
oading
=
false
this
.
searchL
oading
=
false
if
(
res
.
data
&&
Array
.
isArray
(
res
.
data
.
items
))
{
if
(
res
.
data
&&
Array
.
isArray
(
res
.
data
.
data
))
{
this
.
userList
=
res
.
data
.
items
this
.
txAccountList
=
res
.
data
.
data
}
}
})
})
.
catch
(()
=>
{})
.
catch
(()
=>
{})
}
}
}
}
}
}
}
</
script
>
</
script
>
<
style
scoped
>
<
style
scoped
>
...
...
src/pages/meeting/tencent-meeting/meeting-update.vue
浏览文件 @
75df9a65
<
template
>
<
template
>
<div
class=
"meeting-update"
>
<div
class=
"meeting-update"
>
<div
class=
"inner"
>
<div
class=
"inner"
>
<meeting-form
:data=
"reviewData"
:isReviewRecurring=
"isReviewRecurring"
:users=
"userList"
@
submitForm=
"handleSubmit"
></meeting-form>
<meeting-form
:data=
"reviewData"
:isReviewRecurring=
"isReviewRecurring"
:users=
"userList"
:reviewList=
"reviewList"
@
submitForm=
"handleSubmit"
></meeting-form>
</div>
</div>
<meeting-success-dialog
:dialogVisible
.
sync=
"dialogVisible"
:details=
"details"
/>
<meeting-success-dialog
:dialogVisible
.
sync=
"dialogVisible"
:details=
"details"
/>
</div>
</div>
...
@@ -19,7 +19,11 @@ export default ({
...
@@ -19,7 +19,11 @@ export default ({
reviewData
:
{},
reviewData
:
{},
userList
:
[],
userList
:
[],
dialogVisible
:
false
,
dialogVisible
:
false
,
details
:
{}
details
:
{},
reviewList
:
{
userList
:
[],
accountList
:
[]
}
}
}
},
},
computed
:
{
computed
:
{
...
@@ -122,6 +126,12 @@ export default ({
...
@@ -122,6 +126,12 @@ export default ({
const
_managers
=
details
.
managers
.
map
(
it
=>
it
.
user_id
)
const
_managers
=
details
.
managers
.
map
(
it
=>
it
.
user_id
)
reviewData
.
managers
=
_managers
;
reviewData
.
managers
=
_managers
;
this
.
userList
=
details
.
managers
this
.
userList
=
details
.
managers
this
.
reviewList
.
userList
=
details
.
managers
}
if
(
Array
.
isArray
(
details
.
hosts
)
&&
details
.
hosts
.
length
>
0
)
{
const
_hosts
=
details
.
hosts
.
map
(
it
=>
it
.
userid
)
reviewData
.
hosts
=
_hosts
;
this
.
reviewList
.
accountList
=
details
.
hosts
}
}
this
.
reviewData
=
reviewData
this
.
reviewData
=
reviewData
// console.log(reviewData)
// console.log(reviewData)
...
...
src/pages/system/account/index.vue
浏览文件 @
75df9a65
<
template
>
<
template
>
<div
class=
"account"
>
<div
class=
"account"
>
<h5>
账号管理
<el-button
style=
"float:right;margin:12px 30px 0 0"
size=
"mini"
type=
"primary"
plain
@
click=
"handleAdd"
v-if=
"isSuperAdmin"
>
添加账号
</el-button></h5>
<h5>
用户管理
<el-button
style=
"float:right;margin:12px 30px 0 0"
size=
"mini"
type=
"primary"
plain
@
click=
"handleAdd"
v-if=
"isSuperAdmin"
>
新增用户
</el-button></h5>
<div
class=
"inner"
>
<div
class=
"inner"
>
<el-table
:data=
"listData"
style=
"width: 100%"
height=
"calc(100% - 32px)"
v-loading=
"loading"
>
<div
class=
"search-filter"
>
<el-table-column
prop=
"userid"
label=
"ID"
min-width=
"120"
></el-table-column>
<div
class=
"filter-item"
>
<el-table-column
prop=
"username"
label=
"名称"
min-width=
"120"
></el-table-column>
<label>
姓名
</label>
<el-table-column
prop=
"phone"
label=
"手机号码"
min-width=
"120"
></el-table-column>
<div
class=
"filter-select"
>
<el-table-column
prop=
"email"
label=
"邮箱"
min-width=
"140"
></el-table-column>
<user-search
v-model=
"filter.sso_id"
@
select=
"handleSelect"
:fetchApi=
"fetchApiSearch"
:options=
"
{ size: 'mini', clearable: true }"/>
<el-table-column
label=
"操作"
min-width=
"60"
v-if=
"isSuperAdmin"
>
</div>
</div>
<div
class=
"filter-item"
>
<label>
角色
</label>
<div
class=
"filter-select"
>
<el-select
v-model=
"filter.role_id"
placeholder=
"请选择角色"
size=
"mini"
>
<el-option
v-for=
"item in roleList"
:label=
"item.display_name"
:value=
"item.id"
:key=
"item.id"
>
</el-option>
</el-select>
</div>
</div>
<div
class=
"filter-item"
>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"fetchAccountList"
>
查询
</el-button>
<el-button
icon=
"el-icon-refresh-left"
size=
"mini"
@
click=
"reset"
>
重置
</el-button>
</div>
</div>
<div
class=
"delete-bar"
>
<i
class=
"el-icon-warning"
></i>
已选择
<span
class=
"num"
>
{{
selection
.
length
||
0
}}
</span>
项
<el-button
type=
"text"
size=
"m"
:disabled=
"!selection.length"
@
click=
"handleDelete('')"
style=
"margin-left:15px;"
>
删除
</el-button>
</div>
<div
class=
"table-container"
>
<el-table
:data=
"listData"
style=
"width: 100%;"
height=
"100%"
v-loading=
"loading"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"45"
/>
<el-table-column
prop=
"sso_user.nickname"
label=
"姓名"
min-width=
"100"
/>
<el-table-column
label=
"手机号码"
min-width=
"100"
>
<template
slot-scope=
"
{ row }">
<span>
{{
row
.
sso_user
.
mobile
||
'-'
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"邮箱"
min-width=
"140"
>
<
template
slot-scope=
"{ row }"
>
<span>
{{
row
.
sso_user
.
email
||
'-'
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"角色"
min-width=
"80"
>
<
template
slot-scope=
"{ row }"
>
<span
v-for=
"(item, index) in row.roles"
:key=
"item.name"
>
{{
index
>
0
?
'、'
:
''
}}{{
item
.
display_name
}}
</span>
<span
v-if=
"!row.roles || !row.roles.length"
>
-
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"最后登录时间"
min-width=
"120"
>
<
template
slot-scope=
"{ row }"
>
<span>
{{
row
.
last_login_time
||
'-'
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
min-width=
"80"
v-if=
"isSuperAdmin"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleDelete(scope.row.userid)"
>
删除
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleDelete(scope.row.userid)"
>
删除
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleEdit(scope.row)"
>
配置权限
</el-button>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
<el-pagination
:current-page
.
sync=
"curPage"
:page-size=
"pageSize"
layout=
"total, prev, pager, next, jumper"
:total=
"total"
@
current-change=
"pageChange"
style=
"float:right;"
></el-pagination>
</div>
<div
class=
"footer-bar"
>
<el-pagination
:current-page
.
sync=
"curPage"
:page-size
.
sync=
"pageSize"
:page-sizes=
"[10, 20, 50, 100]"
layout=
"total, prev, pager, next, sizes, jumper"
:total=
"total"
@
current-change=
"pageChange"
@
size-change=
"pageChange"
style=
"text-align:right;"
></el-pagination>
</div>
</div>
<el-dialog
:title=
"domicTitle"
:visible
.
sync=
"dialogVisible"
width=
"420px"
center
>
<el-dialog
:title=
"domicTitle"
:visible
.
sync=
"dialogVisible"
width=
"420px"
center
>
<el-form
:model=
"form"
:rules=
"rules"
ref=
"ruleForm"
label-width=
"70px"
class=
"demo-ruleForm"
v-show=
"dialogType === 'add' || dialogType === 'edit'"
>
<el-form
:model=
"form"
:rules=
"rules"
ref=
"ruleForm"
label-width=
"70px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"ID"
prop=
"userid"
v-if=
"dialogType === 'edit'"
>
<
template
v-if=
"dialogType === 'add'"
>
<el-input
v-model=
"form.userid"
size=
"small"
disabled
></el-input>
<el-form-item
label=
"ID"
prop=
"userid"
>
<user-search
v-model=
"form.user_id"
@
select=
"handleSelect"
:fetchApi=
"fetchApiSearch"
:options=
"
{ size: 'small' }"/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"ID"
prop=
"userid"
v-else
>
<el-form-item
label=
"名称"
>
<el-select
v-model=
"form.userid"
placeholder=
"输入邮箱/手机号码搜索"
size=
"small"
filterable
remote
:remote-method=
"fetchUserList"
:loading=
"searchUsersloading"
style=
"width:310px;"
>
<el-input
v-model=
"form.username"
size=
"small"
disabled
></el-input>
<el-option
:label=
"user.real_name || user.nickname "
:value=
"user.id"
v-for=
"user in userList"
:key=
"user.id"
>
<span
style=
"float: left"
>
{{ user.real_name || user.nickname }}
<
template
v-if=
"user.mobile"
>
(手机号:
{{
user
.
mobile
}}
)
</
template
>
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-if=
"user.email"
>
邮箱:{{ user.email }}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
v-else
>
ID:{{ user.id }}
</span>
</el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"
名称"
prop=
"username
"
>
<el-form-item
label=
"
手机号
"
>
<el-input
v-model=
"form.
username"
size=
"small"
></el-input>
<el-input
v-model=
"form.
phone"
size=
"small"
disabled
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"
手机号"
prop=
"phone
"
>
<el-form-item
label=
"
邮箱
"
>
<el-input
v-model=
"form.
phone"
size=
"small"
></el-input>
<el-input
v-model=
"form.
email"
size=
"small"
disabled
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"邮箱"
prop=
"email"
>
</
template
>
<el-input
v-model=
"form.email"
size=
"small"
></el-input>
<
template
v-else
>
<el-form-item
label=
"角色"
prop=
"role_id"
>
<el-select
v-model=
"form.role_id"
placeholder=
"请选择角色"
size=
"mini"
style=
"width:100%;"
>
<el-option
v-for=
"item in roleList"
:label=
"item.display_name"
:value=
"item.id"
:key=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-form-item>
</
template
>
</el-form>
</el-form>
<p
v-show=
"dialogType === 'delete'"
>
删除此账号,与其相关的会议将被同时删除,确认删除此账号吗?
</p>
<span
slot=
"footer"
class=
"dialog-footer"
>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"handleBtn"
size=
"mini"
>
确 定
</el-button>
<el-button
type=
"primary"
@
click=
"handleBtn"
size=
"mini"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
size=
"mini"
>
取 消
</el-button>
<el-button
@
click=
"dialogVisible = false"
size=
"mini"
>
取 消
</el-button>
</span>
</span>
</el-dialog>
</el-dialog>
</div>
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
{
getAccountList
,
searchUserList
,
createAccount
,
updateAccount
,
deleteAccount
,
operateLog
}
from
'@api/common'
import
UserSearch
from
'@/components/UserSearch/index'
import
{
searchUserList
,
operateLog
}
from
'@api/common'
import
{
createAccount
,
getAccountList
,
deleteAccount
,
getRoles
,
roleToUser
}
from
'@api/system'
import
{
mapGetters
}
from
'vuex'
import
{
mapGetters
}
from
'vuex'
import
_
from
'lodash'
const
defaultForm
=
{
const
MOBILE_REG
=
/^1
(
3
[
0-9
]
|4
[
01456879
]
|5
[
0-35-9
]
|6
[
2567
]
|7
[
0-8
]
|8
[
0-9
]
|9
[
0-35-9
])\d{4,8}
$/
user_id
:
''
,
const
EMAIL_REG
=
/^
[
A-Za-z0-9
]
+
([
_.
\\
-
][
A-Za-z0-9
]
+
)
*@
[
A-Za-z0-9-.
]
+$/
username
:
''
,
phone
:
''
,
email
:
''
,
role_id
:
''
}
export
default
{
export
default
{
components
:
{
UserSearch
},
data
()
{
data
()
{
const
phoneReg
=
/^1
(
3
[
0-9
]
|4
[
01456879
]
|5
[
0-35-9
]
|6
[
2567
]
|7
[
0-8
]
|8
[
0-9
]
|9
[
0-35-9
])\d{8}
$/
const
checkMobile
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
)
{
if
(
!
phoneReg
.
test
(
value
))
{
callback
(
new
Error
(
'手机号格式错误'
));
}
else
{
callback
()
}
}
}
const
emailReg
=
/^
[
A-Za-z0-9
]
+
([
_.
\\
-
][
A-Za-z0-9
]
+
)
*@
([
A-Za-z0-9-
]
+
\.)
+
[
A-Za-z
]{2,6}
$/
const
checkEmail
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
)
{
if
(
!
emailReg
.
test
(
value
))
{
callback
(
new
Error
(
'邮箱格式错误'
));
}
else
{
callback
()
}
}
}
return
{
return
{
filter
:
{
sso_id
:
''
,
role_id
:
''
},
isCollapse
:
false
,
listData
:
[],
listData
:
[],
curPage
:
1
,
curPage
:
1
,
pageSize
:
20
,
pageSize
:
20
,
total
:
0
,
total
:
0
,
selection
:
[],
dialogVisible
:
false
,
dialogVisible
:
false
,
dialogType
:
'add'
,
dialogType
:
'add'
,
form
:
{
form
:
Object
.
assign
({},
defaultForm
),
userid
:
''
,
username
:
''
,
phone
:
''
,
email
:
''
},
rules
:
{
rules
:
{
userid
:
[{
required
:
true
,
message
:
'请选择ID'
,
trigger
:
'change'
}],
user_id
:
[{
required
:
true
,
message
:
'请选择ID'
,
trigger
:
'change'
}],
username
:
[{
required
:
true
,
message
:
'请输入名称'
,
trigger
:
'blur'
}],
role_id
:
[{
required
:
true
,
message
:
'请选择角色'
,
trigger
:
'change'
}]
phone
:
[
{
required
:
true
,
message
:
'请输入手机号'
,
trigger
:
'blur'
},
{
validator
:
checkMobile
,
trigger
:
'blur'
}
],
email
:
[
{
required
:
true
,
message
:
'请输入邮箱'
,
trigger
:
'blur'
},
{
validator
:
checkEmail
,
trigger
:
'blur'
}
]
},
},
searchType
:
'username'
,
loading
:
false
,
searchTypeOptions
:
{
fetchApiSearch
:
searchUserList
,
username
:
'用户名'
,
roleList
:
[]
nickname
:
'昵称'
,
email
:
'邮箱'
,
mobile
:
'手机号'
,
id
:
'ID'
},
searchUsersloading
:
false
,
userList
:
[],
deleteId
:
''
,
loading
:
false
}
}
},
},
computed
:
{
computed
:
{
...
mapGetters
([
'isSuperAdmin'
,
'user'
]),
...
mapGetters
([
'isSuperAdmin'
,
'user'
]),
domicTitle
()
{
domicTitle
()
{
let
title
=
'新增'
let
title
=
'新增
用户
'
switch
(
this
.
dialogType
)
{
switch
(
this
.
dialogType
)
{
case
'edit'
:
case
'permissions'
:
title
=
'编辑'
title
=
'配置权限'
break
case
'delete'
:
title
=
'删除'
break
break
}
}
return
title
+
'账号'
return
title
}
}
},
},
created
()
{
created
()
{
this
.
fetchAccountList
()
this
.
fetchAccountList
()
this
.
fetchRoleList
()
},
},
methods
:
{
methods
:
{
handleSelectionChange
(
val
)
{
this
.
selection
=
val
},
handleSelect
(
val
)
{
this
.
form
.
username
=
val
.
username
this
.
form
.
email
=
val
.
email
this
.
form
.
phone
=
val
.
mobile
},
reset
()
{
Object
.
keys
(
this
.
filter
).
map
(
key
=>
{
this
.
filter
[
key
]
=
''
})
this
.
fetchAccountList
()
},
handleEdit
(
data
)
{
handleEdit
(
data
)
{
this
.
form
=
_
.
cloneDeep
(
data
)
this
.
form
.
user_id
=
data
.
user_id
this
.
dialogType
=
'edit'
this
.
form
.
role_id
=
data
.
roles
[
0
].
id
this
.
dialogType
=
'permissions'
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
},
},
handleAdd
()
{
handleAdd
()
{
...
@@ -150,54 +174,35 @@ export default {
...
@@ -150,54 +174,35 @@ export default {
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
},
},
handleDelete
(
id
)
{
handleDelete
(
id
)
{
this
.
dialogType
=
'delete'
const
ids
=
id
?
[
id
]
:
this
.
selection
.
map
(
item
=>
item
.
user_id
)
this
.
dialogVisible
=
true
this
.
$confirm
(
'此操作将删除所选中项的数据, 是否继续执行?'
,
'提示'
,
{
this
.
deleteId
=
id
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
}).
then
(()
=>
{
this
.
fetchDeleteAccount
(
ids
)
}).
catch
(()
=>
{});
},
},
pageChange
()
{
pageChange
()
{
this
.
fetchAccountList
()
this
.
fetchAccountList
()
},
},
handleBtn
()
{
handleBtn
()
{
if
(
this
.
dialogType
===
'delete'
)
{
this
.
fetchDeleteAccount
()
this
.
dialogVisible
=
false
}
else
{
this
.
$refs
.
ruleForm
.
validate
((
valid
)
=>
{
this
.
$refs
.
ruleForm
.
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
valid
)
{
this
.
dialogType
===
'add'
?
this
.
fetchCreateAccount
()
:
this
.
fetchUpdateAccount
()
this
.
dialogType
===
'add'
?
this
.
fetchCreateAccount
()
:
this
.
fetchRoleToUser
()
this
.
dialogVisible
=
false
this
.
dialogVisible
=
false
}
}
});
});
}
},
fetchUserList
(
val
)
{
let
searchType
=
'username'
if
(
EMAIL_REG
.
test
(
val
))
{
searchType
=
'email'
}
else
if
(
MOBILE_REG
.
test
(
val
))
{
searchType
=
'mobile'
}
if
(
!
val
)
return
false
else
{
const
params
=
{
[
searchType
]:
val
}
this
.
searchUsersloading
=
true
searchUserList
(
params
)
.
then
(
res
=>
{
this
.
searchUsersloading
=
false
if
(
res
.
data
&&
Array
.
isArray
(
res
.
data
.
items
))
{
this
.
userList
=
res
.
data
.
items
}
})
.
catch
(()
=>
{})
}
},
},
fetchAccountList
()
{
fetchAccountList
()
{
const
params
=
{
const
params
=
{
page
:
this
.
curPage
,
page
:
this
.
curPage
,
limit
:
this
.
pageSize
limit
:
this
.
pageSize
,
sso_id
:
this
.
filter
.
sso_id
,
role_id
:
this
.
filter
.
role_id
}
}
Object
.
keys
(
params
).
forEach
(
key
=>
{
if
(
params
[
key
]
===
''
)
delete
params
[
key
]
})
this
.
loading
=
true
this
.
loading
=
true
getAccountList
(
params
).
then
((
res
)
=>
{
getAccountList
(
params
).
then
((
res
)
=>
{
this
.
loading
=
false
this
.
loading
=
false
...
@@ -210,52 +215,55 @@ export default {
...
@@ -210,52 +215,55 @@ export default {
fetchCreateAccount
()
{
fetchCreateAccount
()
{
const
form
=
this
.
form
const
form
=
this
.
form
const
params
=
{
const
params
=
{
userid
:
form
.
userid
,
sso_id
:
form
.
user_id
username
:
form
.
username
,
phone
:
form
.
phone
,
email
:
form
.
email
,
type
:
1
}
}
createAccount
(
params
).
then
((
res
)
=>
{
createAccount
(
params
).
then
((
res
)
=>
{
if
(
res
.
code
===
0
&&
res
.
data
.
id
)
{
if
(
res
.
code
===
0
&&
res
.
data
.
sso_
id
)
{
this
.
$message
.
success
(
'创建
账
户成功'
)
this
.
$message
.
success
(
'创建
用
户成功'
)
this
.
fetchAccountList
()
this
.
fetchAccountList
()
operateLog
({
type
:
`创建
腾讯账号,被创建账户userid:
${
form
.
userid
}
`
,
user
:
this
.
user
})
operateLog
({
type
:
`创建
系统用户,被创建账户userid:
${
form
.
userid
}
`
,
user
:
this
.
user
.
nickname
})
}
else
{
}
else
{
this
.
$message
.
error
(
res
.
message
||
'创建账户失败'
)
this
.
$message
.
error
(
res
.
message
||
'创建账户失败'
)
}
}
})
})
},
},
fetchUpdateAccount
()
{
fetchDeleteAccount
(
ids
)
{
const
form
=
this
.
form
deleteAccount
({
sso_ids
:
ids
}).
then
((
res
)
=>
{
const
params
=
{
userid
:
form
.
userid
,
username
:
form
.
username
,
phone
:
form
.
phone
,
email
:
form
.
email
}
updateAccount
(
params
).
then
((
res
)
=>
{
if
(
res
.
code
===
0
&&
res
.
data
.
status
===
true
)
{
if
(
res
.
code
===
0
&&
res
.
data
.
status
===
true
)
{
this
.
$message
.
success
(
'
更新
账户成功'
)
this
.
$message
.
success
(
'
删除
账户成功'
)
this
.
fetchAccountList
()
this
.
fetchAccountList
()
operateLog
({
type
:
`更新腾讯账号,被更新账户userid:
${
form
.
userid
}
`
,
user
:
this
.
user
})
operateLog
({
type
:
`删除系统用户,被删除账户userid:
${
ids
.
join
(
','
)}
`
,
user
:
this
.
user
})
this
.
deleteId
=
''
}
else
{
}
else
{
this
.
$message
.
error
(
res
.
message
||
'
更新
账户失败'
)
this
.
$message
.
error
(
res
.
message
||
'
删除
账户失败'
)
}
}
})
})
},
},
fetch
DeleteAccoun
t
()
{
fetch
RoleLis
t
()
{
const
params
=
{
const
params
=
{
userid
:
this
.
deleteId
page
:
1
,
limit
:
100
}
}
deleteAccount
(
params
).
then
((
res
)
=>
{
getRoles
(
params
).
then
((
res
)
=>
{
if
(
res
.
code
===
0
&&
res
.
data
.
status
===
true
)
{
if
(
res
.
code
===
0
&&
res
.
data
.
data
)
{
this
.
$message
.
success
(
'删除账户成功'
)
this
.
roleList
=
res
.
data
.
data
}
})
},
fetchRoleToUser
()
{
const
form
=
this
.
form
const
params
=
{
role_id
:
form
.
role_id
,
sso_ids
:
form
.
user_id
}
console
.
log
(
this
.
form
)
roleToUser
(
params
).
then
(
res
=>
{
if
(
res
.
code
===
0
&&
res
.
data
&&
res
.
data
.
status
)
{
this
.
$message
.
success
(
'配置权限成功'
)
this
.
fetchAccountList
()
this
.
fetchAccountList
()
operateLog
({
type
:
`删除腾讯账号,被删除账户userid:
${
this
.
deleteId
}
`
,
user
:
this
.
user
})
operateLog
({
type
:
`配置权限,被操作用户sso_id:
${
form
.
user_id
}
`
,
user
:
this
.
user
})
this
.
deleteId
=
''
}
else
{
}
else
{
this
.
$message
.
error
(
res
.
message
||
'
删除账户
失败'
)
this
.
$message
.
error
(
res
.
message
||
'
配置权限
失败'
)
}
}
})
})
}
}
...
@@ -270,17 +278,44 @@ h5{
...
@@ -270,17 +278,44 @@ h5{
font-size
:
16px
;
font-size
:
16px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
color
:
#333
;
color
:
#333
;
font-weight
:
4
00
;
font-weight
:
5
00
;
line-height
:
50px
;
line-height
:
50px
;
text-indent
:
4
0px
;
text-indent
:
2
0px
;
}
}
.inner
{
.inner
{
height
:
calc
(
100%
-
50px
-
1
0
px
);
height
:
calc
(
100%
-
50px
-
1
5
px
);
background
:
#FFFFFF
;
background
:
#FFFFFF
;
border-radius
:
10px
;
border-radius
:
10px
;
margin
:
0
16px
;
margin
:
0
16px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
padding
:
14px
14px
6px
;
padding
:
14px
14px
6px
;
display
:
flex
;
flex-direction
:
column
;
}
.table-container
{
flex
:
1
;
}
.search-filter
{
display
:
flex
;
flex-wrap
:
wrap
;
padding
:
10px
;
}
.search-filter
.filter-item
{
width
:
33.33%
;
margin-bottom
:
15px
;
}
.filter-item
.filter-select
{
width
:
220px
;
display
:
inline-block
;
}
.filter-item
.filter-select
.el-select
{
width
:
100%
;
}
.search-filter
label
{
display
:
inline-block
;
width
:
60px
;
text-align
:
right
;
padding-right
:
10px
;
}
}
.search-keywords-checked
{
.search-keywords-checked
{
color
:
#F56C6C
;
color
:
#F56C6C
;
...
@@ -291,6 +326,19 @@ h5{
...
@@ -291,6 +326,19 @@ h5{
top
:
100%
;
top
:
100%
;
right
:
0
;
right
:
0
;
}
}
.footer-bar
{
padding
:
8px
0
4px
;
}
.delete-bar
{
padding
:
0
20px
;
background
:
#ecf5ff
;
border
:
#b3d8ff
1px
solid
;
border-radius
:
4px
;
margin-bottom
:
15px
;
}
.delete-bar
i
,
.delete-bar
.num
{
color
:
#409EFF
;
}
.account
::v-deep
.el-dialog__header
{
.account
::v-deep
.el-dialog__header
{
padding-top
:
14px
;
padding-top
:
14px
;
}
}
...
...
src/pages/system/role/index.vue
浏览文件 @
75df9a65
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
<div
class=
"account"
>
<div
class=
"account"
>
<h5>
<h5>
角色管理
角色管理
<
!--
<el-button
style=
"float: right; margin: 12px 30px 0 0"
size=
"mini"
type=
"primary"
plain
@
click=
"handleAdd"
>
添加角色
</el-button>
--
>
<
el-button
style=
"float: right; margin: 12px 30px 0 0"
size=
"mini"
type=
"primary"
plain
@
click=
"handleAdd"
>
添加角色
</el-button
>
</h5>
</h5>
<div
class=
"inner"
>
<div
class=
"inner"
>
<el-table
:data=
"listData"
style=
"width: 100%"
height=
"calc(100% - 32px)"
v-loading=
"loading"
>
<el-table
:data=
"listData"
style=
"width: 100%"
height=
"calc(100% - 32px)"
v-loading=
"loading"
>
...
@@ -10,51 +10,67 @@
...
@@ -10,51 +10,67 @@
<el-table-column
prop=
"display_name"
label=
"角色名称"
min-width=
"120"
></el-table-column>
<el-table-column
prop=
"display_name"
label=
"角色名称"
min-width=
"120"
></el-table-column>
<el-table-column
prop=
"description"
label=
"角色描述"
min-width=
"120"
></el-table-column>
<el-table-column
prop=
"description"
label=
"角色描述"
min-width=
"120"
></el-table-column>
<el-table-column
prop=
"updated_at"
label=
"创建时间"
min-width=
"120"
></el-table-column>
<el-table-column
prop=
"updated_at"
label=
"创建时间"
min-width=
"120"
></el-table-column>
<
!--
<
el-table-column
label=
"操作"
min-width=
"140"
>
<el-table-column
label=
"操作"
min-width=
"140"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"handleUsers(scope.row)"
>
分配用户
</el-button>
<!--
<el-button
type=
"text"
size=
"small"
@
click=
"handlePermission(scope.row)"
>
设置权限
</el-button>
-->
<el-button
type=
"text"
size=
"small"
@
click=
"handlePermission(scope.row)"
>
设置权限
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleDelete(scope.row
.userid
)"
>
删除
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button>
</
template
>
</
template
>
</el-table-column>
-->
</el-table-column>
</el-table>
</el-table>
<el-pagination
:current-page
.
sync=
"curPage"
:page-size=
"pageSize"
layout=
"total, prev, pager, next, jumper"
:total=
"total"
@
current-change=
"pageChange"
style=
"float:right;"
></el-pagination>
<el-pagination
:current-page
.
sync=
"curPage"
:page-size=
"pageSize"
layout=
"total, prev, pager, next, jumper"
:total=
"total"
@
current-change=
"pageChange"
style=
"float:right;"
></el-pagination>
</div>
</div>
<el-dialog
:title=
"domicTitle"
:visible
.
sync=
"dialogVisible"
width=
"420px"
center
>
<el-form
:model=
"form"
:rules=
"rules"
ref=
"ruleForm"
label-width=
"80px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"角色名称"
prop=
"display_name"
>
<el-input
v-model=
"form.display_name"
size=
"small"
></el-input>
</el-form-item>
<el-form-item
label=
"角色key"
prop=
"name"
>
<el-input
v-model=
"form.name"
size=
"small"
></el-input>
</el-form-item>
<el-form-item
label=
"角色描述"
prop=
"description"
>
<el-input
v-model=
"form.description"
size=
"small"
></el-input>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"handleEnter"
size=
"mini"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
size=
"mini"
>
取 消
</el-button>
</span>
</el-dialog>
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
{
getRoles
}
from
'@api/system'
import
{
getRoles
,
createRole
,
operateLog
,
deleteRole
,
updateRole
}
from
'@api/system'
import
{
mapGetters
}
from
'vuex'
import
{
mapGetters
}
from
'vuex'
const
defaultForm
=
{
name
:
''
,
display_name
:
''
,
description
:
''
,
id
:
''
}
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
listData
:
[
listData
:
[],
{
id
:
2
,
name
:
'general_admin'
,
display_name
:
'普通管理员'
,
description
:
'拥有超级管理员下的最高权限'
,
created_at
:
'2021-04-01 09:38:25'
,
updated_at
:
'2021-04-01 09:38:25'
},
{
id
:
1
,
name
:
'administrator'
,
display_name
:
'超级管理员'
,
description
:
'拥有所有的权限'
,
created_at
:
'2021-04-01 09:29:41'
,
updated_at
:
'2021-04-01 09:29:41'
}
],
curPage
:
1
,
curPage
:
1
,
pageSize
:
20
,
pageSize
:
20
,
total
:
0
,
total
:
0
,
loading
:
false
loading
:
false
,
dialogVisible
:
false
,
dialogType
:
'add'
,
form
:
Object
.
assign
({},
defaultForm
),
rules
:
{
name
:
{
required
:
true
,
message
:
'请输入角色key'
,
trigger
:
'blur'
},
display_name
:
{
required
:
true
,
message
:
'请输入角色名称'
,
trigger
:
'blur'
},
description
:
{
required
:
true
,
message
:
'请输入角色描述'
,
trigger
:
'blur'
}
}
}
}
},
},
computed
:
{
computed
:
{
...
mapGetters
([
'isSuperAdmin'
])
...
mapGetters
([
'isSuperAdmin'
]),
domicTitle
()
{
return
this
.
dialogType
===
'add'
?
'新增角色'
:
'编辑角色'
}
},
},
created
()
{
created
()
{
this
.
fetchRoleList
()
this
.
fetchRoleList
()
...
@@ -67,12 +83,30 @@ export default {
...
@@ -67,12 +83,30 @@ export default {
console
.
log
(
val
)
console
.
log
(
val
)
},
},
handleEdit
(
val
)
{
handleEdit
(
val
)
{
console
.
log
(
val
)
this
.
form
=
Object
.
assign
({},
val
)
this
.
dialogVisible
=
true
this
.
dialogType
=
'edit'
},
},
handleDelete
(
val
)
{
handleDelete
(
val
)
{
console
.
log
(
val
)
this
.
$confirm
(
'删除此角色将导致相关联的用户不可用, 是否继续执行?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
}).
then
(()
=>
{
this
.
fetchDeleteRole
(
val
.
id
)
}).
catch
(()
=>
{})
},
handleAdd
()
{
this
.
dialogVisible
=
true
this
.
dialogType
=
'add'
},
handleEnter
()
{
this
.
$refs
.
ruleForm
.
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
dialogType
===
'add'
?
this
.
fetchCreateRole
()
:
this
.
fetchUpdateRole
()
this
.
dialogVisible
=
false
}
})
},
},
handleAdd
()
{},
pageChange
()
{
pageChange
()
{
this
.
fetchRoleList
()
this
.
fetchRoleList
()
},
},
...
@@ -89,6 +123,37 @@ export default {
...
@@ -89,6 +123,37 @@ export default {
this
.
total
=
res
.
data
.
total
this
.
total
=
res
.
data
.
total
}
}
})
})
},
fetchCreateRole
()
{
createRole
(
this
.
form
).
then
((
res
)
=>
{
this
.
loading
=
false
if
(
res
.
code
===
0
&&
res
.
data
.
id
)
{
this
.
$message
.
success
(
'创建角色成功'
)
this
.
fetchRoleList
()
operateLog
({
type
:
'创建角色'
,
user
:
this
.
user
})
}
})
},
fetchUpdateRole
()
{
updateRole
(
this
.
form
.
id
,
this
.
form
).
then
((
res
)
=>
{
if
(
res
.
code
===
0
&&
res
.
data
.
status
)
{
this
.
$message
.
success
(
'更新角色成功'
)
this
.
fetchRoleList
()
operateLog
({
type
:
'更新角色'
,
user
:
this
.
user
})
}
})
},
fetchDeleteRole
(
id
)
{
deleteRole
(
id
).
then
((
res
)
=>
{
if
(
res
.
code
===
0
&&
res
.
data
.
status
===
true
)
{
this
.
$message
.
success
(
'删除角色成功'
)
this
.
fetchRoleList
()
operateLog
({
type
:
`删除角色,被删除角色id:
${
id
}
`
,
user
:
this
.
user
})
this
.
deleteId
=
''
}
else
{
this
.
$message
.
error
(
res
.
message
||
'删除角色失败'
)
}
})
}
}
}
}
}
}
...
...
src/pages/tencent/account/index.vue
0 → 100644
浏览文件 @
75df9a65
<
template
>
<div
class=
"account"
>
<h5>
账号管理
<el-button
style=
"float:right;margin:12px 30px 0 0"
size=
"mini"
type=
"primary"
plain
@
click=
"handleAdd"
v-if=
"isSuperAdmin"
>
新增账号
</el-button></h5>
<div
class=
"inner"
>
<div
class=
"search-filter"
>
<div
class=
"filter-item"
>
<label>
姓名
</label>
<el-input
placeholder=
"请输入姓名"
v-model=
"filter.username"
size=
"mini"
clearable
></el-input>
</div>
<div
class=
"filter-item"
>
<label>
手机号
</label>
<el-input
placeholder=
"请输入手机号"
v-model=
"filter.phone"
size=
"mini"
clearable
></el-input>
</div>
<div
class=
"filter-item"
v-if=
"isCollapse"
>
<label>
邮箱
</label>
<el-input
placeholder=
"请输入邮箱"
v-model=
"filter.email"
size=
"mini"
clearable
></el-input>
</div>
<div
class=
"filter-item"
v-if=
"isCollapse"
>
<label>
用户ID
</label>
<el-input
placeholder=
"请输入用户ID"
v-model=
"filter.userid"
size=
"mini"
clearable
></el-input>
</div>
<div
class=
"filter-item"
>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"fetchAccountList"
>
查询
</el-button>
<el-button
icon=
"el-icon-refresh-left"
size=
"mini"
@
click=
"reset"
>
重置
</el-button>
<el-button
type=
"text"
size=
"mini"
@
click=
"isCollapse = !isCollapse"
>
{{
isCollapse
?
'收起'
:
'展开'
}}
</el-button>
</div>
</div>
<div
class=
"delete-bar"
>
<i
class=
"el-icon-warning"
></i>
已选择
<span
class=
"num"
>
{{
selection
.
length
||
0
}}
</span>
项
<el-button
type=
"text"
size=
"m"
:disabled=
"!selection.length"
@
click=
"handleDelete('')"
style=
"margin-left:15px;"
>
删除
</el-button>
</div>
<el-table
:data=
"listData"
style=
"width: 100%;flex:1;"
v-loading=
"loading"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"45"
/>
<el-table-column
prop=
"username"
label=
"姓名"
min-width=
"120"
/>
<el-table-column
prop=
"phone"
label=
"手机号码"
min-width=
"80"
/>
<el-table-column
prop=
"email"
label=
"邮箱"
min-width=
"140"
/>
<el-table-column
prop=
"userid"
label=
"用户ID"
min-width=
"120"
/>
<el-table-column
label=
"用户类型"
min-width=
"80"
>
<template
slot-scope=
"
{ row }">
<span
v-if=
"row.type === 2"
>
普通用户
</span>
<span
v-else
>
虚拟会议室
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
min-width=
"80"
v-if=
"isSuperAdmin"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleDelete(scope.row.userid)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<div
class=
"footer-bar"
>
<el-pagination
:current-page
.
sync=
"curPage"
:page-size
.
sync=
"pageSize"
:page-sizes=
"[10, 20, 50, 100]"
layout=
"total, prev, pager, next, sizes, jumper"
:total=
"total"
@
current-change=
"pageChange"
@
size-change=
"pageChange"
style=
"text-align:right;"
></el-pagination>
</div>
</div>
<el-dialog
:title=
"domicTitle"
:visible
.
sync=
"dialogVisible"
width=
"420px"
center
>
<el-form
:model=
"form"
:rules=
"rules"
ref=
"ruleForm"
label-width=
"70px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"ID"
prop=
"userid"
v-if=
"dialogType === 'edit'"
>
<el-input
v-model=
"form.userid"
size=
"small"
disabled
></el-input>
</el-form-item>
<el-form-item
label=
"ID"
prop=
"userid"
v-else
>
<user-search
v-model=
"form.userid"
@
select=
"handleSelect"
:fetchApi=
"fetchApiSearch"
:options=
"{ size: 'small' }"
/>
</el-form-item>
<el-form-item
label=
"名称"
prop=
"username"
>
<el-input
v-model=
"form.username"
size=
"small"
></el-input>
</el-form-item>
<el-form-item
label=
"手机号"
prop=
"phone"
>
<el-input
v-model=
"form.phone"
size=
"small"
></el-input>
</el-form-item>
<el-form-item
label=
"邮箱"
prop=
"email"
>
<el-input
v-model=
"form.email"
size=
"small"
></el-input>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"handleBtn"
size=
"mini"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
size=
"mini"
>
取 消
</el-button>
</span>
</el-dialog>
</div>
</template>
<
script
>
import
UserSearch
from
'@/components/UserSearch/index'
import
{
searchUserList
,
operateLog
}
from
'@api/common'
import
{
createTxAccount
,
getTxAccountList
,
updateTxAccount
,
deleteTxAccount
}
from
'@api/tencent'
import
{
mapGetters
}
from
'vuex'
import
_
from
'lodash'
export
default
{
components
:
{
UserSearch
},
data
()
{
const
phoneReg
=
/^1
(
3
[
0-9
]
|4
[
01456879
]
|5
[
0-35-9
]
|6
[
2567
]
|7
[
0-8
]
|8
[
0-9
]
|9
[
0-35-9
])\d{8}
$/
const
checkMobile
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
)
{
if
(
!
phoneReg
.
test
(
value
))
{
callback
(
new
Error
(
'手机号格式错误'
));
}
else
{
callback
()
}
}
}
const
emailReg
=
/^
[
A-Za-z0-9
]
+
([
_.
\\
-
][
A-Za-z0-9
]
+
)
*@
([
A-Za-z0-9-
]
+
\.)
+
[
A-Za-z
]{2,6}
$/
const
checkEmail
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
)
{
if
(
!
emailReg
.
test
(
value
))
{
callback
(
new
Error
(
'邮箱格式错误'
));
}
else
{
callback
()
}
}
}
return
{
filter
:
{
username
:
''
,
phone
:
''
,
email
:
''
,
userid
:
''
},
isCollapse
:
false
,
listData
:
[],
curPage
:
1
,
pageSize
:
20
,
total
:
0
,
selection
:
[],
dialogVisible
:
false
,
dialogType
:
'add'
,
form
:
{
userid
:
''
,
username
:
''
,
phone
:
''
,
email
:
''
},
rules
:
{
userid
:
[{
required
:
true
,
message
:
'请选择ID'
,
trigger
:
'change'
}],
username
:
[{
required
:
true
,
message
:
'请输入名称'
,
trigger
:
'blur'
}],
phone
:
[
{
required
:
true
,
message
:
'请输入手机号'
,
trigger
:
'blur'
},
{
validator
:
checkMobile
,
trigger
:
'blur'
}
],
email
:
[
{
required
:
true
,
message
:
'请输入邮箱'
,
trigger
:
'blur'
},
{
validator
:
checkEmail
,
trigger
:
'blur'
}
]
},
loading
:
false
,
fetchApiSearch
:
searchUserList
}
},
computed
:
{
...
mapGetters
([
'isSuperAdmin'
,
'user'
]),
domicTitle
()
{
let
title
=
'新增'
switch
(
this
.
dialogType
)
{
case
'edit'
:
title
=
'编辑'
break
}
return
title
+
'账号'
}
},
created
()
{
this
.
fetchAccountList
()
},
methods
:
{
handleSelectionChange
(
val
)
{
this
.
selection
=
val
},
handleSelect
(
val
)
{
this
.
form
.
username
=
val
.
username
this
.
form
.
email
=
val
.
email
this
.
form
.
phone
=
val
.
mobile
},
reset
()
{
Object
.
keys
(
this
.
filter
).
map
(
key
=>
{
this
.
filter
[
key
]
=
''
})
this
.
fetchAccountList
()
},
handleEdit
(
data
)
{
this
.
form
=
_
.
cloneDeep
(
data
)
this
.
dialogType
=
'edit'
this
.
dialogVisible
=
true
},
handleAdd
()
{
for
(
const
key
in
this
.
form
)
{
this
.
form
[
key
]
=
''
}
this
.
dialogType
=
'add'
this
.
dialogVisible
=
true
},
handleDelete
(
id
)
{
const
ids
=
id
?
[
id
]
:
this
.
selection
.
map
(
item
=>
item
.
userid
)
this
.
$confirm
(
'此操作将删除所选中项的数据, 是否继续执行?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
}).
then
(()
=>
{
this
.
fetchDeleteAccount
(
ids
)
}).
catch
(()
=>
{});
},
pageChange
()
{
this
.
fetchAccountList
()
},
handleBtn
()
{
this
.
$refs
.
ruleForm
.
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
dialogType
===
'add'
?
this
.
fetchCreateAccount
()
:
this
.
fetchUpdateAccount
()
this
.
dialogVisible
=
false
}
});
},
fetchAccountList
()
{
const
params
=
{
page
:
this
.
curPage
,
limit
:
this
.
pageSize
,
username
:
this
.
filter
.
username
,
phone
:
this
.
filter
.
phone
}
if
(
this
.
isCollapse
)
{
params
.
email
=
this
.
filter
.
email
params
.
userid
=
this
.
filter
.
userid
}
Object
.
keys
(
params
).
forEach
(
key
=>
{
if
(
params
[
key
]
===
''
)
delete
params
[
key
]
})
this
.
loading
=
true
getTxAccountList
(
params
).
then
((
res
)
=>
{
this
.
loading
=
false
if
(
res
.
code
===
0
&&
res
.
data
.
data
)
{
this
.
listData
=
res
.
data
.
data
this
.
total
=
res
.
data
.
total
}
})
},
fetchCreateAccount
()
{
const
form
=
this
.
form
const
params
=
{
userid
:
form
.
userid
,
username
:
form
.
username
,
phone
:
form
.
phone
,
email
:
form
.
email
}
createTxAccount
(
params
).
then
((
res
)
=>
{
if
(
res
.
code
===
0
&&
res
.
data
.
id
)
{
this
.
$message
.
success
(
'创建账户成功'
)
this
.
fetchAccountList
()
operateLog
({
type
:
`创建腾讯账号,被创建账户userid:
${
form
.
userid
}
`
,
user
:
this
.
user
})
}
else
{
this
.
$message
.
error
(
res
.
message
||
'创建账户失败'
)
}
})
},
fetchUpdateAccount
()
{
const
{
userid
,
username
,
phone
,
email
}
=
this
.
form
const
params
=
{
username
,
phone
,
email
}
updateTxAccount
(
userid
,
params
).
then
((
res
)
=>
{
if
(
res
.
code
===
0
&&
res
.
data
.
status
===
true
)
{
this
.
$message
.
success
(
'更新账户成功'
)
this
.
fetchAccountList
()
operateLog
({
type
:
`更新腾讯账号,被更新账户userid:
${
userid
}
`
,
user
:
this
.
user
})
}
else
{
this
.
$message
.
error
(
res
.
message
||
'更新账户失败'
)
}
})
},
fetchDeleteAccount
(
userids
)
{
deleteTxAccount
({
userids
}).
then
((
res
)
=>
{
if
(
res
.
code
===
0
&&
res
.
data
.
status
===
true
)
{
this
.
$message
.
success
(
'删除账户成功'
)
this
.
fetchAccountList
()
operateLog
({
type
:
`删除腾讯账号,被删除账户userid:
${
userids
.
join
(
','
)}
`
,
user
:
this
.
user
})
this
.
deleteId
=
''
}
else
{
this
.
$message
.
error
(
res
.
message
||
'删除账户失败'
)
}
})
}
}
}
</
script
>
<
style
scoped
>
.account
{
height
:
100%
;
}
h5
{
font-size
:
16px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
color
:
#333
;
font-weight
:
500
;
line-height
:
50px
;
text-indent
:
20px
;
}
.inner
{
height
:
calc
(
100%
-
50px
-
15px
);
background
:
#FFFFFF
;
border-radius
:
10px
;
margin
:
0
16px
;
box-sizing
:
border-box
;
padding
:
14px
14px
6px
;
display
:
flex
;
flex-direction
:
column
;
}
.search-filter
{
display
:
flex
;
flex-wrap
:
wrap
;
padding
:
10px
;
}
.search-filter
.filter-item
{
width
:
33.33%
;
margin-bottom
:
15px
;
}
.search-filter
label
{
display
:
inline-block
;
width
:
60px
;
text-align
:
right
;
padding-right
:
10px
;
}
.search-filter
::v-deep
.el-input
{
width
:
calc
(
100%
-
120px
);
}
.search-keywords-checked
{
color
:
#F56C6C
;
font-size
:
12px
;
line-height
:
1
;
padding-top
:
4px
;
position
:
absolute
;
top
:
100%
;
right
:
0
;
}
.footer-bar
{
padding
:
8px
0
4px
;
}
.delete-bar
{
padding
:
0
20px
;
background
:
#ecf5ff
;
border
:
#b3d8ff
1px
solid
;
border-radius
:
4px
;
margin-bottom
:
15px
;
}
.delete-bar
i
,
.delete-bar
.num
{
color
:
#409EFF
;
}
.account
::v-deep
.el-dialog__header
{
padding-top
:
14px
;
}
.account
::v-deep
.el-dialog__headerbtn
{
top
:
12px
;
right
:
12px
;
}
.account
::v-deep
.el-dialog__body
{
padding
:
10px
20px
}
.account
::v-deep
.el-dialog__footer
{
padding-bottom
:
16px
;
}
</
style
>
\ No newline at end of file
src/router/routes.js
浏览文件 @
75df9a65
...
@@ -81,6 +81,21 @@ export default [
...
@@ -81,6 +81,21 @@ export default [
}
}
]
]
},
},
{
path
:
'/tencent'
,
component
:
Layout
,
redirect
:
'/tencent/account'
,
name
:
'System'
,
meta
:
{
title
:
'腾讯会议管理'
,
icon
:
'el-icon-setting'
},
children
:
[
{
path
:
'account'
,
name
:
'Account'
,
component
:
()
=>
import
(
'@/pages/tencent/account/index'
),
meta
:
{
title
:
'账号管理'
,
icon
:
'el-icon-key'
}
}
]
},
{
{
path
:
'/my'
,
path
:
'/my'
,
component
:
Layout
,
component
:
Layout
,
...
...
src/store/modules/user.js
浏览文件 @
75df9a65
...
@@ -33,19 +33,6 @@ const user = {
...
@@ -33,19 +33,6 @@ const user = {
commit
(
'setUser'
,
response
)
commit
(
'setUser'
,
response
)
})
})
},
},
setUserRoles
({
commit
})
{
getUserRoles
().
then
(
res
=>
{
const
roles
=
res
.
data
.
roles
let
isSuperAdmin
=
false
if
(
roles
&&
Array
.
isArray
(
roles
))
{
roles
.
forEach
(
it
=>
{
if
(
it
.
name
===
'administrator'
)
isSuperAdmin
=
true
})
commit
(
'setRoles'
,
roles
)
commit
(
'setSuperAdmin'
,
isSuperAdmin
)
}
})
},
// 退出登录
// 退出登录
logout
({
commit
})
{
logout
({
commit
})
{
return
logout
().
then
(
response
=>
{
return
logout
().
then
(
response
=>
{
...
...
src/style.scss
浏览文件 @
75df9a65
...
@@ -113,3 +113,6 @@ body {
...
@@ -113,3 +113,6 @@ body {
font-family
:
'PingFang SC'
,
'PingFangSC-Regular'
,
'Source Han Sans CN'
,
-
apple-system
,
'Microsoft YaHei'
,
'Helvetica'
,
'Arial'
,
Verdana
,
font-family
:
'PingFang SC'
,
'PingFangSC-Regular'
,
'Source Han Sans CN'
,
-
apple-system
,
'Microsoft YaHei'
,
'Helvetica'
,
'Arial'
,
Verdana
,
'Hiragino Sans GB'
,
'Wenquanyi Micro Hei'
,
sans-serif
;
'Hiragino Sans GB'
,
'Wenquanyi Micro Hei'
,
sans-serif
;
}
}
.app-main
.el-table
th
:first-child
.cell
{
padding-left
:
14px
;
}
src/utils/beforeEnter.js
浏览文件 @
75df9a65
...
@@ -33,7 +33,6 @@ export default class BeforeEnter {
...
@@ -33,7 +33,6 @@ export default class BeforeEnter {
}
}
next
()
next
()
}
}
store
.
dispatch
(
'setUserRoles'
)
next
()
next
()
}
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论