Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-live
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-live
Commits
30d81e78
提交
30d81e78
authored
5月 11, 2021
作者:
pengxiaohui
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
用户搜索支持邮箱手机号自动匹配;菜单系统管理只有管理员可见
上级
4d7e508c
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
108 行增加
和
90 行删除
+108
-90
index.vue
src/components/layout/Sidebar/index.vue
+78
-35
MeetingForm.vue
src/pages/meeting/tencent-meeting/components/MeetingForm.vue
+11
-24
index.vue
src/pages/system/account/index.vue
+19
-31
没有找到文件。
src/components/layout/Sidebar/index.vue
浏览文件 @
30d81e78
...
@@ -28,48 +28,79 @@
...
@@ -28,48 +28,79 @@
<
script
>
<
script
>
import
{
mapGetters
}
from
'vuex'
import
{
mapGetters
}
from
'vuex'
import
MenuItem
from
'./MenuItem'
import
MenuItem
from
'./MenuItem'
const
defaultMenu
=
[
{
title
:
'直播日历'
,
icon
:
'el-icon-date'
,
path
:
'/calendar'
,
meta
:
{}
},
{
title
:
'系统管理'
,
icon
:
'el-icon-setting'
,
path
:
'/system'
,
meta
:
{
roles
:
[
'administrator'
]
},
children
:
[
{
title
:
'角色管理'
,
icon
:
'el-icon-s-check'
,
path
:
'/system/role'
},
{
title
:
'账号管理'
,
icon
:
'el-icon-key'
,
path
:
'/system/account'
}
]
},
{
title
:
'个人设置'
,
icon
:
'el-icon-user'
,
path
:
'/my'
}
]
/**
* Use meta.role to determine if the current user has permission
* @param roles
* @param route
*/
function
hasPermission
(
roles
,
route
)
{
if
(
route
.
meta
&&
route
.
meta
.
roles
)
{
return
roles
.
some
(
role
=>
route
.
meta
.
roles
.
includes
(
role
))
}
else
{
return
true
}
}
/**
* Filter asynchronous routing tables by recursion
* @param routes asyncRoutes
* @param roles
*/
export
function
filterAsyncRoutes
(
routes
,
roles
)
{
const
res
=
[]
routes
.
forEach
(
route
=>
{
const
tmp
=
{
...
route
}
if
(
hasPermission
(
roles
,
tmp
))
{
if
(
tmp
.
children
)
{
tmp
.
children
=
filterAsyncRoutes
(
tmp
.
children
,
roles
)
}
res
.
push
(
tmp
)
}
})
return
res
}
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
defaultActive
:
'/calendar'
,
defaultActive
:
'/calendar'
,
menu
:
[
menu
:
[]
// {
// title: '创建直播',
// icon: 'el-icon-video-camera',
// path: '/create-live'
// },
{
title
:
'直播日历'
,
icon
:
'el-icon-date'
,
path
:
'/calendar'
},
{
title
:
'系统管理'
,
icon
:
'el-icon-setting'
,
path
:
'/system'
,
children
:
[
{
title
:
'角色管理'
,
icon
:
'el-icon-s-check'
,
path
:
'/system/role'
},
{
title
:
'账号管理'
,
icon
:
'el-icon-key'
,
path
:
'/system/account'
}
]
},
{
title
:
'个人设置'
,
icon
:
'el-icon-user'
,
path
:
'/my'
}
]
}
}
},
},
computed
:
{
computed
:
{
...
mapGetters
([
'sidebar'
]),
...
mapGetters
([
'sidebar'
,
'roles'
]),
isCollapse
()
{
isCollapse
()
{
return
!
this
.
sidebar
.
opened
return
!
this
.
sidebar
.
opened
}
}
...
@@ -82,6 +113,18 @@ export default {
...
@@ -82,6 +113,18 @@ export default {
else
this
.
defaultActive
=
''
else
this
.
defaultActive
=
''
},
},
immediate
:
true
immediate
:
true
},
roles
:
{
handler
:
function
(
nv
)
{
let
roleList
if
(
Array
.
isArray
(
nv
))
{
roleList
=
nv
.
map
(
item
=>
item
.
name
)
}
const
menus
=
filterAsyncRoutes
(
defaultMenu
,
roleList
)
this
.
menu
=
menus
},
immediate
:
true
,
deep
:
true
}
}
},
},
methods
:
{
methods
:
{
...
...
src/pages/meeting/tencent-meeting/components/MeetingForm.vue
浏览文件 @
30d81e78
...
@@ -65,20 +65,10 @@
...
@@ -65,20 +65,10 @@
</el-form-item>
</el-form-item>
<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=
"8"
>
<el-dropdown
style=
"width:100%;"
@
command=
"(val) => searchType = val"
>
<el-button
size=
"small"
style=
"width:calc(100% - 5px);"
>
{{
searchTypeOptions
[
searchType
]
}}
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
</el-button>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
:command=
"key"
v-for=
"(value, key) in searchTypeOptions"
:key=
"key"
>
{{
value
}}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-col>
-->
<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"
>
<el-select
style=
"width: 100%"
v-model=
"form.managers"
placeholder=
"输入关键字搜索"
size=
"small"
multiple
filterable
remote
:remote-method=
"fetchUserList"
:loading=
"searchUsersloading"
>
<el-option
:label=
"user.username"
:value=
"user.id"
v-for=
"user in userList"
:key=
"user.id"
>
<el-option
:label=
"user.username"
:value=
"user.id"
v-for=
"user in userList"
:key=
"user.id"
>
<span
style=
"float: left"
>
{{
user
.
user
name
}}
</span>
<span
style=
"float: left"
>
{{
user
.
real_name
||
user
.
nick
name
}}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
>
{{
user
.
id
}}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;"
>
{{
user
.
id
}}
</span>
</el-option>
</el-option>
</el-select>
</el-select>
...
@@ -254,7 +244,6 @@ export default {
...
@@ -254,7 +244,6 @@ export default {
mobile
:
'通过手机号搜索'
,
mobile
:
'通过手机号搜索'
,
id
:
'通过ID搜索'
id
:
'通过ID搜索'
},
},
searchKeywordsCheckMsg
:
''
,
searchUsersloading
:
false
,
searchUsersloading
:
false
,
rules
:
{
rules
:
{
subject
:
[{
required
:
true
,
message
:
'请填写会议主题'
,
trigger
:
'blur'
}],
subject
:
[{
required
:
true
,
message
:
'请填写会议主题'
,
trigger
:
'blur'
}],
...
@@ -566,19 +555,17 @@ export default {
...
@@ -566,19 +555,17 @@ export default {
return
params
return
params
},
},
fetchUserList
(
val
)
{
fetchUserList
(
val
)
{
this
.
searchKeywordsCheckMsg
=
''
let
searchType
=
'username'
if
(
!
val
)
return
if
(
EMAIL_REG
.
test
(
val
))
{
if
(
this
.
searchType
===
'email'
&&
!
EMAIL_REG
.
test
(
val
))
{
searchType
=
'email'
this
.
searchKeywordsCheckMsg
=
'邮箱格式错误'
}
else
if
(
MOBILE_REG
.
test
(
val
))
{
this
.
userList
=
[]
searchType
=
'mobile'
}
else
if
(
this
.
searchType
===
'mobile'
&&
!
MOBILE_REG
.
test
(
val
))
{
}
this
.
searchKeywordsCheckMsg
=
'手机号格式错误'
if
(
!
val
)
return
false
this
.
userList
=
[]
else
{
}
else
{
const
params
=
{
const
params
=
{
[
this
.
searchType
]:
val
[
searchType
]:
val
};
}
this
.
searchKeywordsCheckMsg
=
''
this
.
searchUsersloading
=
true
this
.
searchUsersloading
=
true
searchUserList
(
params
)
searchUserList
(
params
)
.
then
(
res
=>
{
.
then
(
res
=>
{
...
...
src/pages/system/account/index.vue
浏览文件 @
30d81e78
...
@@ -20,22 +20,13 @@
...
@@ -20,22 +20,13 @@
<el-form-item
label=
"ID"
prop=
"userid"
v-if=
"dialogType === 'edit'"
>
<el-form-item
label=
"ID"
prop=
"userid"
v-if=
"dialogType === 'edit'"
>
<el-input
v-model=
"form.userid"
size=
"small"
disabled
></el-input>
<el-input
v-model=
"form.userid"
size=
"small"
disabled
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"ID"
prop=
"userid"
v-else
style=
"position:relative;"
>
<el-form-item
label=
"ID"
prop=
"userid"
v-else
>
<!-- <el-dropdown @command="(val) => searchType = val">
<el-button style="width:85px;" size="small">
{{searchTypeOptions[searchType]}}<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="key" v-for="(value, key) in searchTypeOptions" :key="key">{{value}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown> -->
<el-select
v-model=
"form.userid"
placeholder=
"输入关键字搜索"
size=
"small"
filterable
remote
:remote-method=
"fetchUserList"
:loading=
"searchUsersloading"
style=
"width:310px;"
>
<el-select
v-model=
"form.userid"
placeholder=
"输入关键字搜索"
size=
"small"
filterable
remote
:remote-method=
"fetchUserList"
:loading=
"searchUsersloading"
style=
"width:310px;"
>
<el-option
:label=
"user.username"
:value=
"user.id"
v-for=
"user in userList"
:key=
"user.id"
>
<el-option
:label=
"user.username"
:value=
"user.id"
v-for=
"user in userList"
:key=
"user.id"
>
<span
style=
"float: left"
>
{{ user.
user
name }}
</span>
<span
style=
"float: left"
>
{{ user.
real_name || user.nick
name }}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin-left:10px;"
>
{{ user.id }}
</span>
<span
style=
"float: right; color: #8492a6; font-size: 13px; margin-left:10px;"
>
{{ user.id }}
</span>
</el-option>
</el-option>
</el-select>
</el-select>
<p
class=
"search-keywords-checked"
v-if=
"searchKeywordsCheckMsg"
>
{{searchKeywordsCheckMsg}}
</p>
</el-form-item>
</el-form-item>
<el-form-item
label=
"名称"
prop=
"username"
>
<el-form-item
label=
"名称"
prop=
"username"
>
<el-input
v-model=
"form.username"
size=
"small"
></el-input>
<el-input
v-model=
"form.username"
size=
"small"
></el-input>
...
@@ -115,7 +106,6 @@ export default {
...
@@ -115,7 +106,6 @@ export default {
mobile
:
'手机号'
,
mobile
:
'手机号'
,
id
:
'ID'
id
:
'ID'
},
},
searchKeywordsCheckMsg
:
''
,
searchUsersloading
:
false
,
searchUsersloading
:
false
,
userList
:
[],
userList
:
[],
deleteId
:
''
,
deleteId
:
''
,
...
@@ -175,28 +165,26 @@ export default {
...
@@ -175,28 +165,26 @@ export default {
}
}
},
},
fetchUserList
(
val
)
{
fetchUserList
(
val
)
{
if
(
val
)
{
let
searchType
=
'username'
if
(
this
.
searchType
===
'email'
&&
!
EMAIL_REG
.
test
(
val
))
{
if
(
EMAIL_REG
.
test
(
val
))
{
this
.
searchKeywordsCheckMsg
=
'邮箱格式错误
'
searchType
=
'email
'
this
.
userList
=
[]
}
else
if
(
MOBILE_REG
.
test
(
val
))
{
}
else
if
(
this
.
searchType
===
'mobile'
&&
!
MOBILE_REG
.
test
(
val
))
{
searchType
=
'mobile'
this
.
searchKeywordsCheckMsg
=
'手机号格式错误'
}
this
.
userList
=
[]
if
(
!
val
)
return
false
}
else
{
else
{
const
params
=
{
const
params
=
{
[
this
.
searchType
]:
val
[
searchType
]:
val
}
}
this
.
searchKeywordsCheckMsg
=
''
this
.
searchUsersloading
=
true
this
.
searchUsersloading
=
true
;
searchUserList
(
params
)
searchUserList
(
params
).
then
((
res
)
=>
{
.
then
(
res
=>
{
this
.
searchUsersloading
=
false
;
this
.
searchUsersloading
=
false
if
(
res
.
data
&&
Array
.
isArray
(
res
.
data
.
items
))
{
if
(
res
.
data
&&
Array
.
isArray
(
res
.
data
.
items
))
{
this
.
userList
=
res
.
data
.
items
this
.
userList
=
res
.
data
.
items
}
}
}).
catch
(()
=>
{})
})
}
.
catch
(()
=>
{})
}
else
{
this
.
searchKeywordsCheckMsg
=
''
}
}
},
},
fetchAccountList
()
{
fetchAccountList
()
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论