Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-live
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-live
Commits
0dbb9095
提交
0dbb9095
authored
7月 22, 2024
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: 新增会议管理员
上级
35439386
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
113 行增加
和
54 行删除
+113
-54
dev.ezijing.com.key
build/dev.ezijing.com.key
+25
-26
dev.ezijing.com.pem
build/dev.ezijing.com.pem
+0
-0
common.js
src/api/common.js
+14
-0
Manager.vue
src/components/TableHandles/Manager.vue
+39
-0
index.vue
src/components/TableHandles/index.vue
+16
-18
index.vue
src/components/UserSearch/index.vue
+19
-10
没有找到文件。
build/dev.ezijing.com.key
浏览文件 @
0dbb9095
-----BEGIN RSA PRIVATE KEY-----
MIIE
owIBAAKCAQEAn0EINdIXTDCzmR7J5FOjOV+PbXt7GNO6fanoCGe2O0CPRlNf
2Ea/wv6SlRtJPd0ohmnKqZdUbBpAsiV4ggOdOqeEB6utVYQWY/zhXRKYeRjN/iDu
WCRY5S+eRVkSzVOJP9DlBn6dnHSsWj55h1PrkIac8B862F/cVno/Wk5dqU55ZUoN
wHGw5Goz3R37w+Q0C9HRS5mrmPqI+Ogy8TJrIRxw9YAj5OlvuqBAeYAW1sNdEfsi
mMB0H2fbbXqEL4AsipE5ppP7Ij3vxVpxvmnl/SO7N6+Fit6r25VeFSvplK+PIV3c
UsK3PCKV2sOo0BDWtWFQh5hW3fK5RYjLpNDHCwIDAQABAoIBAEkiBDMzF5/VfaSD
jxNblUlzqNoOKqlsEehDblrtxbHQI/uXrhwT4VwarBXtQeU2+rU/P+JBrHM4Wx10
N7L9FecppmgfXqo2zlF8f8HOGFcEHRTm6o1vo6McCwKttQS1qAG2XHZvDtIagkuv
BQAwea0VJFzg+pUC8JyF5zIBauGkfk8eHTLFVuIEJoSJbPWBYzp7Vf1SCjXqs3YY
aZ5QkOqY7S81D2EULFAWiMIMdY/PVT5DSXxsjaJFkvxjDedA4jNCplyODBKdpnB
b
kfoJTJ7qsSnqgJ2y2xRdRlvZalE49lr2MkW254s5GH35+hMYam0bffgLXdPz6RIs
7X0atYECgYEA1A9G+0+uYlyxddyR54QlWGK7L3wP+REMXultudT9rq4S6qkHoOgP
rhi2kvZOqA0sMR7XMVz5nw0ouUMUVfW0YzudgAK99tdIuk6dP6VqVo9T4kqa0rXi
3ZKD51qGXbF22SndEWV68QEPzMCbf0E+kXl5MGGNnFtjZ5nxTGS+uH8CgYEAwECs
0T36EnLOCXZoi3rTeHr2pSO20VuFSgljnHA6Ups9Chu6h/iZ8t0XVNb8J14q7lFi
NY6b4D3FR/vwO3nFt7dvFYNFaFGuFrkAaH002p8EYWSckhlGcucBuKivBVUbhXuM
HMGmqGhAnnGCvCj/v4n5/wv3wtFYfzYWnYPHC3UCgYBZgbFGNhW28sT8qIL1I3PX
4KR9oHHlgOqlzQVBYMNKzbKyVXIg2pJzu36kfU4p5JV4jjnqXgIGvjkoKUYWGkVv
dSQ/eejQnYHXEYOR77H4ozqW00KSGa+OMl92cWExfsxZUTA8PYcs3nPayplXlyRf
ptQeNa7eBjzo57NPuV4+5QKBgQCrJihzUlBYshmYNPBXE25FOHpwgz3SXT5orbk
e
4I4bUhXh9NN3DqrGmWqW3Zi2108ywALFGQLNe1AwiCnSWNLafZOHvEhC2Uw48FNb
sfMmmR/GMFJugc/EpMBUit7cyWppx5XxV7gs/jpgkz7GkV00P/ntwtK7fbDh9t3l
NhYxrQKBgDVE4HSDqOvZOaXGRoM0pJ3uYRTTSIDGVNMZ9t2C/t3uwoyFBe+Om2t+
G6w2Gr+Dck1v+zizU3khbAHvE67rYoUtrDvae41bmLuVcnYh4UsXfhB6BWOSaQ+l
l8aQwTfmV74szsEDcFkg038zQ6Q4c8iiurYp29nwEM7/mayBGOcv
MIIE
pQIBAAKCAQEAwZGHX8Zg+EP5uwnEBWkQazq8DMnKz3QfcNRUjFsxsZjM/98r
oYYp+K6/i/b8JXAVMqjC9+X/ZajgbDPLTrgDJ4TQ70ajdusqG3swNqG0qLUogNgU
PcgVRKr2Pk+m79GD/nnxFgeaG6eBfLsb73G2cQUwsgi3bjf6mX6b9bjxjqzwX0PW
es27yyqdS9uQFzV5KLTA2FJJjGGbg54ZLxVc01aVXx2gG0eLnOFcDSmgXUN4hBmN
gYF4FYHhOVXdMl2+yGGp6IvtIIrt+cp2/TQePnxB2QYwrlDMajHrKp0x7LsqWwZT
jepPgGWWDssiSgTCYVaPx28ESbotpzR7D+LlHQIDAQABAoIBAQCCvXGrHcmXRgph
62mrodgGJQioto82aZ9mzPNCTcIVyzgDRtAoa/7jSdx0g+CwxLB8pAH0ADPtjQ/v
5VfXlnAC/DFGu/Zittmc8CqTa8si/CEcTVX2mLLMy5BAa/o8Fs5JTkGo+H99WDkc
byCiLLLmSXQne72xQzwO+rYKVN1K2JUfzch5wpv86IgfJm0gNEOOvtToeNeMbOWj
7AFfpqq7bRMIdZZZhm2n33duSCSnAO7/OuKHY2/RUkc6FvamAth/ME5S2eHrB7y
b
KOMZTJH73xnZc3gmsBiIfC1BsqzV/37Ptd7ncTxuK5YZPXIyJ/BjnDTe712LAz+r
f3FEmtJdAoGBAOdPpbT1ylZKinxEIP4sUPUUrrlXqQxYn2xTOCSBz1dB7OpeqiD+
OBa6ur5Sh0+Ot/VRqV2MbXaGee/qqBiziFH23wKoFc6kxeH8RCv247y89yOHqpCP
SM4I7d10RpPh/POU0apGNOP4HOLOMY4V11u68em9hQDeN6oUBWKvDWTPAoGBANY6
mZ/EWKOFJSPfJNNtfXDO27P12ENsa9UvDv7f+FrcPqGkJq1qFBr3ySBjUE7hTv1e
jedRHtBg5Y038vj/MTofEPSaa5POFgzwfG5TPYCcrZkDoLosnuQ92yafMxZPAf16
Nt3vimpxV2Hwf1Nl3IAU/BavngdohWJkO+yOuupTAoGBAMxkTrJmdhJl75T6xoSS
OD83tWTFFvV34fdgWb24jrQ15tj6KS7aNEmxWo4Ocs5T+C1nqVamXZtcHKdpHHwn
OA/lKw435H0ikFCuDrcig/4ko+TbXlY6pkSZE0aaFjtad5/tIo9pVhcTCMNJG/TH
S/Mcb+LwunQX5+v7oP6gXB91AoGAFDbjWBgG5ScjIgdkSi8CrypVwN1p0rLgWfV
e
zN4FaU1u+4GpxKNF0mWfLNcyNL893NqXOUSGS9NY1cJ5wtURqBJWXz5S+Fdx7Tak
ByUDoKcoGlAlUmvzckYD79kF0Q0Tev+VPcvkm7amMC+pVA1AiTVxtBJOLxTFwUsD
/IZbTNECgYEA5uwkBWpb/2yYk86cfuUWJjZ0k8jZPrdG4d9gTdD1Fj4abS3FniKM
x9eN8BcnH0j4raRo+MESzYf5hLbfHRG01oRtBQFZXEM0k/zkkRYdKWG1Ulg1+iZR
ZG/lblczYEUW/IOPYZKMX8c5nq7F6huLsioIvsYOdCGjLZbyRHjEPv8=
-----END RSA PRIVATE KEY-----
build/dev.ezijing.com.pem
浏览文件 @
0dbb9095
差异被折叠。
点击展开。
src/api/common.js
浏览文件 @
0dbb9095
...
...
@@ -100,3 +100,17 @@ export function getMeetingCount(params) {
export
function
getMeetingRecords
(
params
)
{
return
httpRequest
.
get
(
`/api/live/admin/v3/tencent/meeting/
${
params
.
meeting_id
}
/records`
,
{
params
})
}
/**
* 获取会议管理员列表
*/
export
function
getMeetingManagers
(
params
)
{
return
httpRequest
.
get
(
`/api/live/admin/v3/tencent/meeting/
${
params
.
meeting_id
}
/managers`
,
{
params
})
}
/**
* 保存会议管理员列表
*/
export
function
saveMeetingManagers
(
data
)
{
return
httpRequest
.
put
(
`/api/live/admin/v3/tencent/meeting/
${
data
.
meeting_id
}
/save-managers`
,
data
)
}
src/components/TableHandles/Manager.vue
0 → 100644
浏览文件 @
0dbb9095
<
template
>
<el-dialog
title=
"会议管理员"
v-bind=
"$attrs"
v-on=
"$listeners"
width=
"400px"
>
<user-search
v-model=
"ssoIds"
:defaultList=
"userList"
:options=
"
{ size: 'small', multiple: true, clearable: true }" />
<template
#
footer
>
<el-button
type=
"primary"
@
click=
"save"
>
保存
</el-button>
</
template
>
</el-dialog>
</template>
<
script
>
import
UserSearch
from
'@/components/UserSearch/index'
import
{
getMeetingManagers
,
saveMeetingManagers
}
from
'@/api/common'
export
default
{
props
:
{
data
:
Object
},
components
:
{
UserSearch
},
data
()
{
return
{
ssoIds
:
[],
userList
:
[]
}
},
methods
:
{
async
fetchList
()
{
const
res
=
await
getMeetingManagers
({
meeting_id
:
this
.
data
.
meeting_id
})
this
.
userList
=
res
.
data
.
items
this
.
ssoIds
=
res
.
data
.
items
.
map
(
item
=>
item
.
id
)
},
async
save
()
{
await
saveMeetingManagers
({
meeting_id
:
this
.
data
.
meeting_id
,
sso_ids
:
this
.
ssoIds
})
this
.
$message
.
success
(
'保存成功'
)
this
.
$emit
(
'update:visible'
,
false
)
}
},
mounted
()
{
this
.
fetchList
()
}
}
</
script
>
src/components/TableHandles/index.vue
浏览文件 @
0dbb9095
...
...
@@ -15,15 +15,9 @@
<el-button
type=
"text"
size=
"small"
v-else
@
click=
"handleDetails"
>
查看
</el-button>
</
template
>
<
template
v-if=
"status === 2"
>
<el-button
type=
"text"
size=
"small"
v-if=
"operatable && hasJoin && isFuture"
@
click=
"handleJoin"
>
进入会议
</el-button
>
<el-button
type=
"text"
size=
"small"
v-if=
"operatable && hasUpdate && isFuture"
@
click=
"handleUpdate"
>
更新
</el-button
>
<el-button
type=
"text"
size=
"small"
v-if=
"(operatable && hasDownload) || hasManage"
@
click=
"handleRecord"
>
下载回放
</el-button
>
<el-button
type=
"text"
size=
"small"
v-if=
"operatable && hasJoin && isFuture"
@
click=
"handleJoin"
>
进入会议
</el-button>
<el-button
type=
"text"
size=
"small"
v-if=
"operatable && hasUpdate && isFuture"
@
click=
"handleUpdate"
>
更新
</el-button>
<el-button
type=
"text"
size=
"small"
v-if=
"(operatable && hasDownload) || hasManage"
@
click=
"handleRecord"
>
下载回放
</el-button>
<el-button
type=
"text"
size=
"small"
v-if=
"operatable && hasDelete"
@
click=
"handleDelete"
>
删除
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"handleDetails"
>
查看
</el-button>
</
template
>
...
...
@@ -31,17 +25,14 @@
<el-button
type=
"text"
size=
"small"
@
click=
"handleDetails"
>
查看
</el-button>
<!--
<el-button
type=
"text"
size=
"small"
v-if=
"operatable"
@
click=
"handleDelete"
>
删除
</el-button>
-->
</
template
>
<el-button
type=
"text"
size=
"small"
v-if=
"operatable"
@
click=
"managerVisible = true"
>
会议管理员
</el-button>
<el-dialog
:title=
"domicTitle"
:visible
.
sync=
"dialogVisible"
width=
"520px"
center
class=
"my-dialog"
>
<div
slot=
"title"
class=
"dialog-header"
>
<p
class=
"meeting-status"
v-show=
"dialogType === 'details'"
>
会议{{ rowData.status | statusFilter }}
</p>
<p
class=
"title"
>
{{ domicTitle }}
</p>
</div>
<dialog-details
:rowData=
"rowData"
:details=
"details"
v-show=
"dialogType === 'details'"
:operatable=
"operatable"
/>
<dialog-details
:rowData=
"rowData"
:details=
"details"
v-show=
"dialogType === 'details'"
:operatable=
"operatable"
/>
<dialog-copy-invite
:rowData=
"rowData"
:details=
"details"
v-show=
"dialogType === 'copy'"
/>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
size=
"mini"
v-show=
"dialogType === 'copy'"
@
click=
"copyLink"
>
复制
</el-button>
...
...
@@ -50,17 +41,20 @@
</el-dialog>
<!-- 下载 -->
<DownloadVideo
:data=
"rowData"
:visible
.
sync=
"downloadVisible"
v-if=
"downloadVisible"
></DownloadVideo>
<!-- 会议管理员 -->
<Manager
:data=
"rowData"
:visible
.
sync=
"managerVisible"
v-if=
"managerVisible"
></Manager>
</div>
</template>
<
script
>
import
DialogDetails
from
'./DialogDetails.vue'
import
DialogCopyInvite
from
'./DialogCopyInvite'
import
DownloadVideo
from
'./DownloadVideo'
import
Manager
from
'./Manager'
import
{
mapGetters
}
from
'vuex'
import
{
getMeetingDetails
,
stopMeeting
,
cancelMeeting
,
getMeetingRecordAddr
}
from
'@api/common'
import
{
timeTrans
}
from
'@/utils/dateAlgs'
export
default
{
components
:
{
DialogDetails
,
DialogCopyInvite
,
DownloadVideo
},
components
:
{
DialogDetails
,
DialogCopyInvite
,
DownloadVideo
,
Manager
},
props
:
{
rowData
:
{}
},
...
...
@@ -69,7 +63,8 @@ export default {
dialogVisible
:
false
,
dialogType
:
'copy'
,
details
:
''
,
downloadVisible
:
false
downloadVisible
:
false
,
managerVisible
:
false
}
},
computed
:
{
...
...
@@ -184,7 +179,10 @@ export default {
handleUpdate
()
{
this
.
$router
.
push
({
path
:
'/meeting-update'
,
query
:
{
meeting_id
:
this
.
rowData
.
meeting_id
,
sub_meeting_id
:
this
.
rowData
.
sub_meeting_id
}
query
:
{
meeting_id
:
this
.
rowData
.
meeting_id
,
sub_meeting_id
:
this
.
rowData
.
sub_meeting_id
}
})
},
handleCancel
()
{
...
...
src/components/UserSearch/index.vue
浏览文件 @
0dbb9095
<
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"
>
<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
>
<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>
...
...
@@ -11,6 +20,7 @@
</el-select>
</template>
<
script
>
import
{
searchUserList
}
from
'@api/common'
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
{
...
...
@@ -26,7 +36,7 @@ export default {
},
fetchApi
:
{
type
:
Function
,
require
:
true
default
:
searchUserList
},
options
:
{
type
:
Object
,
...
...
@@ -44,14 +54,14 @@ export default {
},
watch
:
{
value
:
{
handler
:
function
(
nv
)
{
handler
:
function
(
nv
)
{
this
.
userId
=
nv
},
immediate
:
true
,
deep
:
true
},
defaultList
:
{
handler
:
function
(
nv
)
{
handler
:
function
(
nv
)
{
this
.
userList
=
nv
},
immediate
:
true
,
...
...
@@ -91,7 +101,7 @@ export default {
}
</
script
>
<
style
scoped
>
.el-select
{
width
:
100%
;
.el-select
{
width
:
100%
;
}
</
style
>
\ No newline at end of file
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论