提交 0bbc187f authored 作者: pengxiaohui's avatar pengxiaohui

修改bug

上级 b8ed77c9
......@@ -3,7 +3,7 @@ import httpRequest from '@/utils/axios'
* 操作日志
*/
export function operateLog(params) {
const logMsg = `操作人:${params.user.nickname},操作人id:${params.user.id},操作${params.type}`
const logMsg = `操作人:${params.user.nickname},操作:${params.type}`
const data = {
detail: logMsg
}
......
......@@ -3,7 +3,7 @@ import httpRequest from '@/utils/axios'
* 操作日志
*/
export function operateLog(params) {
const logMsg = `操作人:${params.user.nickname},操作人id:${params.user.id},操作${params.type}`
const logMsg = `操作人:${params.user.nickname},操作:${params.type}`
const data = {
detail: logMsg
}
......
<template>
<el-dialog :title="`会议号${details.meeting_code ? ':' + details.meeting_code : ''}`" :visible="dialogVisible" width="520" :close-on-click-modal="false" append-to-body center @close="dialogClose">
<el-form class="dialog-meeting-details" label-width="90px" ref="details">
<el-dialog class="meeting-success-dialog" :title="`会议号${details.meeting_code ? ':' + details.meeting_code : ''}`" :visible="dialogVisible" width="520" :close-on-click-modal="false" center @close="dialogClose">
<p style="padding-left:28px;margin-bottom:10px;" v-if="details.sso_user">{{details.sso_user.username}}邀请您参加腾讯会议</p>
<el-form class="dialog-meeting-details" label-width="100px" ref="details">
<el-form-item label="会议主题:">
{{details.subject}}
</el-form-item>
<el-form-item label="会议时间:">
{{details.start_time | timeFormat('{y}-{m}-{d} {h}:{i}')}} - {{details.end_time | timeFormat('{h}:{i}')}}GMT+08:00)
{{details.start_time | timeFormat('{y}-{m}-{d} {h}:{i}')}} - {{details.end_time | timeFormat('{h}:{i}')}}GMT+08:00)中国标准时间 - 北京
<template v-if="details.meeting_type === 1">
, {{details.recurring_rule.recurring_type | recurringTypeFilter}}
<template v-if="details.recurring_rule.recurring_type > 1">{{recurringDateShow}}</template>
</template>
</el-form-item>
<el-form-item label="会议链接:">
{{details.join_url}}
......@@ -13,9 +18,15 @@
<el-form-item label="会议号:">
{{details.meeting_code}}
</el-form-item>
<el-form-item label="会议密码:" v-if="details.password">
{{details.password}}
</el-form-item>
<el-form-item label="会议直播:" v-if="details.enable_live === 1">
{{details.live_config.live_addr}}
</el-form-item>
<el-form-item label="会议直播密码:" v-if="details.enable_live === 1 && details.live_config.live_password">
{{details.live_config.live_password}}
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="mini" @click="copyText">复制文字</el-button>
......@@ -38,10 +49,40 @@ export default {
default: false
}
},
computed: {
recurringDateShow() {
if (this.details.recurring_rule.recurring_type === 4) {
return dateFormat(this.details.start_time, '({d}日)')
} else {
return dateFormat(this.details.start_time, '(周{a})')
}
}
},
filters: {
timeFormat(val, fmt) {
fmt = fmt || '{y}年{m}月{d}日'
return dateFormat(val, fmt)
},
recurringTypeFilter(val) {
let result = ''
switch (val) {
case 0:
result = '每天'
break
case 1:
result = '每个工作日'
break
case 2:
result = '每周'
break
case 3:
result = '每两周'
break
case 4:
result = '每月'
break
}
return result
}
},
methods: {
......@@ -78,22 +119,21 @@ export default {
}
</script>
<style scoped>
::v-deep.el-dialog__header{
.meeting-success-dialog ::v-deep.el-dialog__header{
padding-top:14px;
}
::v-deep.el-dialog__headerbtn{
.meeting-success-dialog ::v-deep.el-dialog__headerbtn{
top:12px;
right:12px;
}
::v-deep.el-dialog__body{
.meeting-success-dialog ::v-deep.el-dialog__body{
padding:10px 0;
margin:0 20px;
border: 1px solid #DBDBDB;
}
::v-deep.el-dialog__footer{
.meeting-success-dialog ::v-deep.el-dialog__footer{
padding-bottom:16px;
}
::v-deep.el-dialog .el-form-item{
margin:0;
.meeting-success-dialog ::v-deep.el-dialog .el-form-item{
margin-bottom:10px;
}
</style>
\ No newline at end of file
......@@ -369,10 +369,13 @@ export default {
}
.time-now span{
color:#FD1E1E;
background-color:#fff;
padding:5px 0;
}
.time-now ::v-deep.el-divider{
background-color:#FD0000;
margin:0
margin:0;
width:calc(100% + 2px);
}
.newPopoverBtn{
position:fixed;
......
......@@ -12,9 +12,15 @@
<el-form-item label="会议号:">
{{details.meeting_code}}
</el-form-item>
<el-form-item label="会议密码:" v-if="details.password">
{{details.password}}
</el-form-item>
<el-form-item label="会议直播:" v-if="details.enable_live === 1">
{{details.live_config.live_addr}}
</el-form-item>
<el-form-item label="会议直播密码:" v-if="details.enable_live === 1 && details.live_config.live_password">
{{details.live_config.live_password}}
</el-form-item>
<el-form-item label="手机拨号入会:" v-if="false">
<p>+8675536550000,,526430840#(中国大陆)</p>
<p>+85230018898,,526430840#(中国香港)</p>
......
......@@ -85,7 +85,6 @@ export default {
if (list && Array.isArray(list)) {
list.forEach((it, index) => {
if (it.download_address) {
console.log(it.download_address)
// window.open(it.download_address, '_blank')
setTimeout(() => {
this.funDownload(it.download_address, it.download_address)
......@@ -95,7 +94,7 @@ export default {
}
},
funDownload(fileUrl, fileName) {
console.log(fileUrl)
// console.log(fileUrl)
const elink = document.createElement('a')// 创建一个a标签
elink.download = fileName;// 设置a标签的下载属性
elink.style.display = 'none';// 将a标签设置为隐藏
......
......@@ -133,10 +133,10 @@ export default {
this.fetchMeetingDetails()
},
handleLive() {
window.open(this.live_config.live_addr, '_blank');
window.open(this.rowData.live_config.live_addr, '_blank');
},
handleUpdate() {
this.$router.push({ path: '/meeting', query: { type: '2', meeting_id: this.rowData.meeting_id, sub_meeting_id: this.rowData.sub_meeting_id } })
this.$router.push({ path: '/meeting-update', query: { meeting_id: this.rowData.meeting_id, sub_meeting_id: this.rowData.sub_meeting_id } })
},
handleCancel() {
this.$confirm('此操作将取消这场会议, 是否继续?', '提示', {
......@@ -183,10 +183,12 @@ export default {
} else {
const list = await this.fetchMeetingRecordAddr()
if (list && Array.isArray(list)) {
list.forEach(it => {
list.forEach((it, index) => {
if (it.download_address) {
// window.open(it.download_address, '_blank')
this.funDownload(it.download_address, it.download_address)
setTimeout(() => {
this.funDownload(it.download_address, it.download_address)
}, index * 1000)
}
})
}
......@@ -199,7 +201,7 @@ export default {
elink.href = fileUrl;// 把之前处理好的地址赋给a标签的href
document.body.appendChild(elink);// 将a标签添加到body中
elink.click();// 执行a标签的点击方法
URL.revokeObjectURL(elink.href) // 下载完成释放URL 对象
// URL.revokeObjectURL(elink.href) // 下载完成释放URL 对象
document.body.removeChild(elink)// 移除a标签
},
fetchStopMeeting() {
......
......@@ -48,7 +48,7 @@ export default {
this.$store.dispatch('app/toggleSideBar')
},
toMeeting() {
this.$router.push('/meeting')
this.$router.push('/meeting-create')
},
async logout() {
await this.$store.dispatch('logout')
......
......@@ -125,21 +125,6 @@ export default {
live_subject: [{ validator: validateErrMsg }],
live_summary: [{ validator: validateErrMsg }]
},
// startDateOptions: {
// disabledDate(time) {
// return time.getTime() < Date.now() - DAY_TIMESTAMP;
// }
// },
// startTimeOptions: {
// start: getCurHalfHour('start'),
// step: '00:30',
// end: '23:30'
// },
// endTimeOptions: {
// start: getCurHalfHour('end'),
// step: '00:30',
// end: '23:30'
// },
details: {},
dialogVisible: false
}
......@@ -275,7 +260,20 @@ export default {
});
},
more() {
this.$router.push({ path: '/meeting', query: { type: '1', account: this.data.accountId, start: this.startTimestamp, end: this.endTimestamp } })
const query = {
account: this.data.accountId,
start: this.startTimestamp,
end: this.endTimestamp
}
if (this.form.subject) {
query.subject = this.form.subject
}
if (this.form.enable_live) {
query.enable_live = 1
this.form.live_subject && (query.live_subject = this.form.live_subject)
this.form.live_summary && (query.live_summary = this.form.live_summary)
}
this.$router.push({ path: '/meeting-account-create', query: query })
},
fetchCreateMeeting() {
const form = this.form
......
......@@ -13,10 +13,10 @@
</div>
<div class="status-filter">
<el-radio-group v-model="filter.status">
<el-radio :label="9999">全部</el-radio>
<el-radio :label="1">进行中</el-radio>
<el-radio :label="0">未开始</el-radio>
<el-radio :label="2">已完成</el-radio>
<!-- <el-radio :label="9999" class="all">全部</el-radio> -->
<el-radio :label="1" class="start">进行中</el-radio>
<el-radio :label="0" class="not-started">未开始</el-radio>
<el-radio :label="2" class="end">已完成</el-radio>
</el-radio-group>
</div>
</div>
......@@ -210,29 +210,29 @@ h5{
display:block;
margin-bottom:10px;
}
.status-filter ::v-deep.el-radio:first-child .el-radio__input.is-checked .el-radio__inner{
.status-filter ::v-deep.el-radio.all .el-radio__input.is-checked .el-radio__inner{
border-color:#636363;
background:#636363;
}
.status-filter ::v-deep.el-radio:nth-child(2) .el-radio__input.is-checked .el-radio__inner{
.status-filter ::v-deep.el-radio.start .el-radio__input.is-checked .el-radio__inner{
border-color:#409eff;
background:#409eff;
}
.status-filter ::v-deep.el-radio:nth-child(3) .el-radio__input.is-checked .el-radio__inner{
.status-filter ::v-deep.el-radio.not-started.el-radio__input.is-checked .el-radio__inner{
border-color:#52B837;
background:#52B837;
}
.status-filter ::v-deep.el-radio:last-child .el-radio__input.is-checked .el-radio__inner{
.status-filter ::v-deep.el-radio.end.el-radio__input.is-checked .el-radio__inner{
border-color:#BFBFBF;
background:#BFBFBF;
}
.status-filter ::v-deep.el-radio:first-child .el-radio__input + .el-radio__label{
.status-filter ::v-deep.el-radio.all .el-radio__input + .el-radio__label{
color:#636363;
}
.status-filter ::v-deep.el-radio:nth-child(2) .el-radio__input + .el-radio__label{
.status-filter ::v-deep.el-radio.start .el-radio__input + .el-radio__label{
color:#409eff;
}
.status-filter ::v-deep.el-radio:nth-child(3) .el-radio__input + .el-radio__label{
.status-filter ::v-deep.el-radio.not-started .el-radio__input + .el-radio__label{
color:#52B837;
}
.status-filter ::v-deep.el-radio:last-child .el-radio__input + .el-radio__label{
......
<template>
<div class="list">
<el-table :data="listData" style="width: 100%" height="calc(100% - 32px)" v-loading="loading">
<el-table-column label="会议时间" min-width="215" align="center">
<el-table-column label="会议时间" min-width="220" align="center">
<template slot-scope="scope">
<p style="color: #aeaeae">
<span style="font-size: 18px; color: #606266">{{ scope.row.start_time | dateFormat('{d}') }}</span>
......@@ -53,7 +53,7 @@
</template>
</el-table-column>
<el-table-column prop="sso_user.nickname" label="创建人" min-width="100" align="center"></el-table-column>
<el-table-column label="操作" width="220" align="center">
<el-table-column label="操作" width="240" align="center">
<template slot-scope="scope">
<table-handles :rowData="scope.row" @refresh="fetchMeetingList"/>
</template>
......@@ -110,7 +110,7 @@ export default {
result = '进行中'
break
case 2:
result = '已结束'
result = '已完成'
break
}
return result
......
......@@ -6,18 +6,18 @@
<!-- <el-radio-button label="week"></el-radio-button>
<el-radio-button label="month"></el-radio-button> -->
</el-radio-group>
<tencent-meeting-test />
<tencent-meeting v-if="tabActive === 'tx'" />
</div>
</template>
<script>
import TencentMeetingTest from './tencent-meeting-test/index.vue'
import TencentMeeting from './tencent-meeting/index.vue'
export default {
data() {
return {
tabActive: 'tx'
}
},
components: { TencentMeetingTest }
components: { TencentMeeting }
}
</script>
<style scope>
......
<template>
<div class="create-meeting">
<div class="meeting">
<el-radio-group v-model="tabActive" size="mini" style="margin:14px 0 10px 40px;">
<el-radio-button label="tx">腾讯</el-radio-button>
<el-radio-button label="cc">cc</el-radio-button>
<!-- <el-radio-button label="week"></el-radio-button>
<el-radio-button label="month"></el-radio-button> -->
</el-radio-group>
<tencent-meeting v-if="tabActive === 'tx'" />
<tencent-meeting v-if="tabActive === 'tx'"/>
</div>
</template>
<script>
......@@ -21,7 +21,7 @@ export default {
}
</script>
<style scope>
.create-meeting{
.meeting{
height:100%;
}
</style>
\ No newline at end of file
<template>
<component v-bind:is="currentPage"></component>
</template>
<script>
import PageCreate from './page-create'
import PageAccountCreate from './page-account-create'
import PageUpdate from './page-update'
export default {
data () {
return {
currentPage: 'PageCreate'
}
},
components: { PageCreate, PageAccountCreate, PageUpdate },
watch: {
$route: {
handler: function (nv, ov) {
const query = this.$route.query
console.log(query)
if (query.type === '1') {
this.currentPage = 'PageAccountCreate'
} else if (query.type === '2') {
console.log('edit')
this.currentPage = 'PageUpdate'
} else {
this.currentPage = 'PageCreate'
}
},
immediate: true
}
}
}
</script>
\ No newline at end of file
<template>
<div>同一账号下创建</div>
</template>
<script>
export default ({
data () {
return {}
}
})
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="create">
<div class="inner">
<meeting-form></meeting-form>
</div>
</div>
</template>
<script>
import MeetingForm from './components/MeetingForm'
export default ({
data () {
return {}
},
components: { MeetingForm }
})
</script>
<style scoped>
.create{
overflow-y: auto;
height: calc(100% - 52px);
}
.inner {
background: #fff;
margin: 0 15px;
border-radius: 4px;
padding-bottom:10px;
}
</style>
<template>
<div>修改</div>
</template>
<script>
export default {
data() {
return {
obj: {
timestamp: 1618998029,
nonce: 'rgHMrr7Bg',
signature: 'UG7wBenexQhiuD2wpCwuxkU0jqcj006d',
instanceid: 1,
userid: '6653195831513972736',
subject: 'sewe',
start_time: '2021-04-21 17:30:00',
end_time: '2021-04-21 18:00:00',
password: '',
meeting_type: 1,
recurring_rule: {
recurring_type: 0,
until_type: 1,
until_count: 2
},
settings: {
mute_enable_join: false,
auto_in_waiting_room: false,
allow_in_before_host: true,
auto_record_type: 'none'
},
enable_live: 0,
live_config: {
live_subject: '',
live_summary: '',
enable_live_password: false,
enable_live_im: false
},
managers: ['6775725014348988416'],
meeting_id: '8343776720283269132'
}
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="meeting-account-create">
<div class="inner">
<meeting-form :data="reviewData" :users="userList" @submitForm="handleSubmit" @dateChange="handleDateChange"></meeting-form>
<div class="right-container">
<div class="title">{{ reviewData.startDate | timeFormat }} {{ reviewData.startDate | timeFormat('星期{a}') }}</div>
<schedule :options="options" :data="schedule" :date="reviewData.startDate" />
<div class="pre-time-range" :style="{ top: getTop, height: getHeight }"></div>
</div>
</div>
<meeting-success-dialog :dialogVisible.sync="dialogVisible" :details="details"/>
</div>
</template>
<script>
import Schedule from '@/components/Schedule'
import MeetingForm from './components/MeetingForm'
import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index'
import { createMeeting, operateLog, getMeetingDetails, getNonpagedMeetingList } from '@api/common'
import { timeTrans, getYMDByDate, dateFormat, isSameDate } from '@/utils/dateAlgs'
import { mapGetters } from 'vuex'
export default ({
data () {
return {
dialogVisible: false,
reviewData: {
startDate: '',
startTime: '',
endDate: '',
endTime: ''
},
userList: [],
details: {},
userid: '',
options: {
multi: false, // 是否为多日程
start: 0, // init number 0-23
end: 24, // init number 1-24且end>start
step: 60, // 只接收15, 30, 60三种步伐
lineHeight: 40, // init number 时间线间的高度
nowBeforeDisabled: true,
readonly: true,
popoverPos: 'bottom'
},
schedule: {
userid: '',
events: []
}
}
},
computed: {
...mapGetters(['user']),
startTimestamp() {
return this.getFullDateTime(this.reviewData.startDate, this.reviewData.startTime).getTime()
},
endTimestamp() {
return this.getFullDateTime(this.reviewData.endDate, this.reviewData.endTime).getTime()
},
getTop() {
const timeRange = this.startTimestamp - this.startDotTimestamp
const top = timeRange / ((60 * 1000 * this.options.step) / this.options.lineHeight)
return top + 56 + 'px'
},
getHeight() {
const start = timeTrans(this.startTimestamp)
let end = timeTrans(this.endTimestamp)
if (!isSameDate(start, end)) {
end = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 24, 0, 0)
}
const timeRange = end.getTime() - start.getTime()
const h = timeRange / ((60 * 1000 * this.options.step) / this.options.lineHeight)
return h - 2 + 'px'
},
startDotTimestamp() {
const date = this.reviewData.startDate
const startHour = parseInt(this.options.start)
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), startHour, 0, 0).getTime()
}
},
filters: {
timeFormat(val, fmt) {
fmt = fmt || '{y}年{m}月{d}日'
return dateFormat(val, fmt)
}
},
components: { Schedule, MeetingForm, MeetingSuccessDialog },
created() {
const query = this.$route.query
console.log(query)
if (query.account) {
this.userid = query.account
const review = {}
review.subject = query.subject
review.startDate = getYMDByDate(query.start)
review.startTime = dateFormat(query.start, '{h}:{i}')
review.endDate = getYMDByDate(query.end)
review.endTime = dateFormat(query.end, '{h}:{i}')
if (query.enable_live === '1') {
review.enable_live = true
review.live_config = {
live_subject: query.live_subject || '',
live_summary: query.live_summary || ''
}
}
this.reviewData = review
}
this.fetchMeetingList()
},
watch: {
dialogVisible: {
handler: function (nv) {
if (!nv) {
this.goList()
}
}
}
},
methods: {
handleSubmit(params) {
this.fetchCreateMeeting(params)
},
handleDateChange(val) {
let refreshList = false
if (!isSameDate(val.startDate, this.reviewData.startDate)) {
refreshList = true
}
this.reviewData.startDate = val.startDate
this.reviewData.startTime = val.startTime
this.reviewData.endDate = val.endDate
this.reviewData.endTime = val.endTime
refreshList && this.fetchMeetingList()
},
getFullDateTime(date, timeStr) {
const hmArr = timeStr.split(':')
const h = parseInt(hmArr[0])
const s = parseInt(hmArr[1])
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), h, s, 0)
},
goList() {
this.$router.push('/calendar')
},
async showMeetingDetails(obj) {
const loading = this.$loading({
lock: true,
text: '获取腾讯会议详情,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
const params = {
meeting_id: obj.meeting_id
}
if (Array.isArray(obj.sub_meetings) && obj.sub_meetings.length > 0) {
params.sub_meeting_id = obj.sub_meetings[0].sub_meeting_id
}
const details = await this.fetchMeetingDetails(params)
loading.close()
this.details = details
this.dialogVisible = true
},
fetchCreateMeeting(params) {
const loading = this.$loading({
lock: true,
text: '创建腾讯会议中,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
params.userid = this.userid
createMeeting(params).then(res => {
loading.close()
if (res.code === 0 && res.data.id) {
operateLog({ type: `创建会议,被创建会议meeting_code:${res.data.meeting_code}`, user: this.user })
this.$message.success('创建腾讯会议成功')
this.showMeetingDetails(res.data)
} else {
this.$message.error(res.message || res.msg || '创建腾讯会议失败')
}
})
},
fetchMeetingDetails(params) {
return new Promise((resolve, reject) => {
getMeetingDetails(params).then(res => {
if (res.code === 0 && res.data.id) {
resolve(res.data)
} else {
reject(res)
}
}).catch((err) => reject(err))
})
},
fetchMeetingList() {
const date = this.reviewData.startDate
const start = dateFormat(date)
const end = dateFormat(new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1))
const params = {
userid: this.userid,
start_time: start,
end_time: end
}
getNonpagedMeetingList(params).then((res) => {
if (res.code === 0 && res.data && res.data.list) {
console.log(res.data.list)
this.schedule.events = res.data.list
} else {
}
}).catch()
}
}
})
</script>
<style scoped>
.meeting-account-create{
overflow-y: auto;
height: calc(100% - 52px);
}
.inner {
display: flex;
background: #fff;
margin: 0 15px;
border-radius: 4px;
padding-bottom:10px;
}
.right-container {
position: relative;
width: 45%;
box-sizing: border-box;
padding-left: 20px;
}
.right-container .title {
position: absolute;
left: 0;
top: 0;
width: 100%;
line-height: 50px;
font-size: 16px;
text-align: center;
}
.pre-time-range {
position: absolute;
left: 70px;
width: calc(100% - 70px);
background: #52b837;
}
.search-keywords-checked{
color: #F56C6C;
font-size: 12px;
line-height: 1;
padding-top: 4px;
position: absolute;
top: 100%;
right: 0;
}
.right-container .el-scrollbar ::v-deep.el-scrollbar__wrap {
/* overflow:hidden; */
}
.tx-meeting-container ::v-deep.el-dialog__header{
padding-top:14px;
}
.tx-meeting-container ::v-deep.el-dialog__headerbtn{
top:12px;
right:12px;
}
.tx-meeting-container ::v-deep.el-dialog__body{
padding:10px 0;
margin:0 20px;
border: 1px solid #DBDBDB;
}
.tx-meeting-container ::v-deep.el-dialog__footer{
padding-bottom:16px;
}
.tx-meeting-container ::v-deep.el-dialog .el-form-item{
margin:0;
}
</style>
<template>
<div class="meeting-create">
<div class="inner">
<meeting-form @submitForm="handleSubmit"></meeting-form>
</div>
<meeting-success-dialog :dialogVisible.sync="dialogVisible" :details="details"/>
</div>
</template>
<script>
import MeetingForm from './components/MeetingForm'
import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index'
import { createMeeting, operateLog, getMeetingDetails } from '@api/common'
import { mapGetters } from 'vuex'
export default ({
data () {
return {
dialogVisible: false,
details: {}
}
},
computed: {
...mapGetters(['user'])
},
components: { MeetingForm, MeetingSuccessDialog },
watch: {
dialogVisible: {
handler: function (nv) {
if (!nv) {
this.goList()
}
}
}
},
methods: {
handleSubmit(params) {
console.log(params)
this.fetchCreateMeeting(params)
},
goList() {
this.$router.push('/calendar')
},
async showMeetingDetails(obj) {
const loading = this.$loading({
lock: true,
text: '获取腾讯会议详情,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
const params = {
meeting_id: obj.meeting_id
}
if (Array.isArray(obj.sub_meetings) && obj.sub_meetings.length > 0) {
params.sub_meeting_id = obj.sub_meetings[0].sub_meeting_id
}
const details = await this.fetchMeetingDetails(params)
loading.close()
this.details = details
this.dialogVisible = true
},
fetchCreateMeeting(params) {
const loading = this.$loading({
lock: true,
text: '创建腾讯会议中,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
createMeeting(params).then(res => {
loading.close()
if (res.code === 0 && res.data.id) {
operateLog({ type: `创建会议,被创建会议meeting_code:${res.data.meeting_code}`, user: this.user })
this.$message.success('创建腾讯会议成功')
this.showMeetingDetails(res.data)
} else {
this.$message.error(res.message || res.msg || '创建腾讯会议失败')
}
})
},
fetchMeetingDetails(params) {
return new Promise((resolve, reject) => {
getMeetingDetails(params).then(res => {
if (res.code === 0 && res.data.id) {
console.log(res.data)
resolve(res.data)
} else {
reject(res)
}
}).catch((err) => reject(err))
})
}
}
})
</script>
<style scoped>
.meeting-create{
overflow-y: auto;
height: calc(100% - 52px);
}
.inner {
background: #fff;
margin: 0 15px;
border-radius: 4px;
padding-bottom:10px;
}
</style>
<template>
<div class="meeting-update">
<div class="inner">
<meeting-form :data="reviewData" :users="userList" @submitForm="handleSubmit"></meeting-form>
</div>
<meeting-success-dialog :dialogVisible.sync="dialogVisible" :details="details"/>
</div>
</template>
<script>
import MeetingForm from './components/MeetingForm'
import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index'
import { updateMeeting, operateLog, getMeetingDetails } from '@api/common'
import { timeTrans, dateFormat, getYMDByDate } from '@/utils/dateAlgs'
import { mapGetters } from 'vuex'
const DAY_TIMESTAMP = 8.64e7
export default ({
data () {
return {
reviewData: {},
userList: [],
dialogVisible: false,
details: {}
}
},
computed: {
...mapGetters(['user'])
},
components: { MeetingForm, MeetingSuccessDialog },
watch: {
dialogVisible: {
handler: function (nv) {
if (!nv) {
this.goList()
}
}
}
},
created() {
this.reviewMeeting()
},
methods: {
handleSubmit(params) {
this.fetchUpdateMeeting(params)
},
goList() {
this.$router.push('/calendar')
},
async reviewMeeting() {
const params = {
meeting_id: this.$route.query.meeting_id
}
if (this.$route.query.sub_meeting_id) {
params.sub_meeting_id = this.$route.query.sub_meeting_id
}
const details = await this.fetchMeetingDetails(params)
const reviewData = {}
this.details = details
const start = timeTrans(details.start_time)
const end = timeTrans(details.end_time)
this.userid = details.userid
reviewData.subject = details.subject
reviewData.startDate = getYMDByDate(start)
reviewData.startTime = dateFormat(start, '{h}:{i}')
reviewData.endDate = getYMDByDate(end)
reviewData.endTime = dateFormat(end, '{h}:{i}')
reviewData.meeting_type = details.meeting_type
if (details.meeting_type === 1) {
const recurringRule = details.recurring_rule
reviewData.recurring_rule = {
recurring_type: recurringRule.recurring_type,
until_type: recurringRule.until_type
}
if (recurringRule.until_type === 0) {
reviewData.recurring_rule.until_date = timeTrans(recurringRule.until_date) - DAY_TIMESTAMP
} else {
reviewData.recurring_rule.until_count = recurringRule.until_count
}
}
if (details.password) {
reviewData.password = details.password
reviewData.hasPwd = true
}
const settings = details.settings
reviewData.settings = {
auto_in_waiting_room: settings.auto_in_waiting_room,
allow_in_before_host: settings.allow_in_before_host,
auto_record_type: settings.auto_record_type,
mute_enable_join: settings.mute_enable_join
}
if (settings.auto_record_type !== 'none') {
reviewData.auto_record = true
}
if (details.enable_live === 1) {
const liveConfig = details.live_config
reviewData.live_config = {
live_subject: liveConfig.live_subject || '',
live_summary: liveConfig.live_summary || '',
enable_live_password: Boolean(liveConfig.live_password),
live_password: liveConfig.live_password || '',
enable_live_im: liveConfig.enable_live_im
}
reviewData.enable_live = true
} else {
reviewData.enable_live = false
}
if (Array.isArray(details.managers) && details.managers.length > 0) {
const _managers = details.managers.map(it => it.user_id)
reviewData.managers = _managers;
this.userList = details.managers
}
this.reviewData = reviewData
// console.log(reviewData)
},
async showMeetingDetails(obj) {
const loading = this.$loading({
lock: true,
text: '获取腾讯会议详情,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
const params = {
meeting_id: obj.meeting_id
}
if (Array.isArray(obj.sub_meetings) && obj.sub_meetings.length > 0) {
params.sub_meeting_id = obj.sub_meetings[0].sub_meeting_id
}
const details = await this.fetchMeetingDetails(params)
loading.close()
this.details = details
this.dialogVisible = true
},
fetchUpdateMeeting(params) {
const loading = this.$loading({
lock: true,
text: '修改腾讯会议中,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
params.meeting_id = this.$route.query.meeting_id
params.userid = this.userid
updateMeeting(params).then(res => {
loading.close()
if (res.code === 0 && res.data.id) {
operateLog({ type: `修改会议,被修改会议meeting_code:${res.data.meeting_code}`, user: this.user })
this.$message.success('修改腾讯会议成功')
this.showMeetingDetails(res.data)
} else {
this.$message.error(res.message || res.msg || '修改腾讯会议失败')
}
})
},
fetchMeetingDetails(params) {
return new Promise((resolve, reject) => {
getMeetingDetails(params).then(res => {
if (res.code === 0 && res.data.id) {
resolve(res.data)
} else {
reject(res)
}
}).catch((err) => reject(err))
})
}
}
})
</script>
<style scoped>
.meeting-update{
overflow-y: auto;
height: calc(100% - 52px);
}
.inner {
background: #fff;
margin: 0 15px;
border-radius: 4px;
padding-bottom:10px;
}
</style>
\ No newline at end of file
......@@ -24,8 +24,11 @@
<el-row>
<el-col :span="8">
<label>会议创建人</label>
<el-select v-model="filter.userid" placeholder="搜索用户" size="mini" filterable remote :remote-method="fetchUserList" :loading="searchUsersloading">
<el-option :label="user.nickname" :value="user.id" v-for="user in userList" :key="user.id" />
<el-select v-model="filter.userid" placeholder="输入关键字搜索" size="mini" filterable remote :remote-method="fetchUserList" :loading="searchUsersloading">
<el-option :label="user.username" :value="user.id" v-for="user in userList" :key="user.id" >
<span style="float: left">{{ user.username }}</span>
<span style="float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;">{{ user.id }}</span>
</el-option>
</el-select>
</el-col>
<el-col :span="11">
......@@ -39,7 +42,8 @@
</el-row>
</div>
<el-table :data="listData" style="width: 100%" height="calc(100% - 116px)" v-loading="loading">
<el-table-column label="会议时间" min-width="160" align="center">
<el-table-column prop="meeting_code" label="会议号" width="120"></el-table-column>
<el-table-column label="会议时间" min-width="220" align="center">
<template slot-scope="scope">
<p style="color: #aeaeae">
<span style="font-size: 18px; color: #606266">{{ scope.row.start_time | dateFormat('{d}') }}</span>
......@@ -76,7 +80,6 @@
</el-popover>
</template>
</el-table-column>
<!-- <el-table-column prop="resource" label="会议来源" width="80"></el-table-column> -->
<el-table-column prop="resource" label="会议状态" min-width="80" align="center">
<template slot-scope="scope">
<p
......@@ -194,7 +197,7 @@ export default {
fetchUserList(val) {
if (val) {
const params = {
nickname: val
username: val
}
this.searchUsersloading = true;
searchUserList(params).then((res) => {
......
......@@ -7,10 +7,10 @@
<el-table-column prop="username" label="名称" min-width="120"></el-table-column>
<el-table-column prop="phone" label="手机号码" min-width="120"></el-table-column>
<el-table-column prop="email" label="邮箱" min-width="140"></el-table-column>
<el-table-column label="操作" min-width="60">
<el-table-column label="操作" min-width="60" 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)" v-if="isSuperAdmin">删除</el-button>
<el-button type="text" size="small" @click="handleDelete(scope.row.userid)">删除</el-button>
</template>
</el-table-column>
</el-table>
......@@ -21,17 +21,17 @@
<el-input v-model="form.userid" size="small" disabled></el-input>
</el-form-item>
<el-form-item label="ID" prop="userid" v-else style="position:relative;">
<el-dropdown @command="(val) => searchType = val">
<!-- <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:220px;">
<el-option :label="user.nickname" :value="user.id" v-for="user in userList" :key="user.id" >
<span style="float: left">{{ user.nickname }}</span>
</el-dropdown> -->
<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" >
<span style="float: left">{{ user.username }}</span>
<span style="float: right; color: #8492a6; font-size: 13px; margin-left:10px;">{{ user.id }}</span>
</el-option>
</el-select>
......@@ -96,7 +96,7 @@ export default {
email: ''
},
rules: {
userid: [{ required: true, message: '请输入ID', trigger: 'blur' }],
userid: [{ required: true, message: '请选择ID', trigger: 'blur' }],
username: [{ required: true, message: '请输入名称', trigger: 'blur' }],
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
......
......@@ -7,29 +7,53 @@ export default [
redirect: '/calendar'
},
{
path: '/meeting',
path: '/meeting-old',
component: Layout,
children: [
{
path: '',
component: () => import('@/pages/meeting/index.vue'),
component: () => import('@/pages/meeting/index-old.vue'),
name: 'CreateLive',
meta: { title: '创建直播', affix: true }
}
]
},
{
path: '/meeting-test',
path: '/meeting-create',
component: Layout,
children: [
{
path: '',
component: () => import('@/pages/meeting/index-test.vue'),
component: () => import('@/pages/meeting/index.vue'),
name: 'MeetingCreate',
meta: { title: '创建直播', affix: true }
}
]
},
{
path: '/meeting-update',
component: Layout,
children: [
{
path: '',
component: () => import('@/pages/meeting/index.vue'),
name: 'MeetingUpdate',
meta: { title: '创建直播', affix: true }
}
]
},
{
path: '/meeting-account-create',
component: Layout,
children: [
{
path: '',
component: () => import('@/pages/meeting/index.vue'),
name: 'MeetingAccountCreate',
meta: { title: '创建直播', affix: true }
}
]
},
{
path: '/calendar',
component: Layout,
......
......@@ -108,3 +108,8 @@ body {
opacity: 0;
transform: translateX(30px);
}
/* element input,textarea font-family */
.el-input__inner, .el-textarea__inner{
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;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论