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

修复周期会议取消/删除就删掉全部的bug;修复修改会议开始时间和结束时间可选范围不正确的bug

上级 5ae997ee
...@@ -216,8 +216,12 @@ export default { ...@@ -216,8 +216,12 @@ export default {
}) })
}, },
fetchCancelMeeting(type) { fetchCancelMeeting(type) {
const row = this.rowData
const params = { const params = {
meeting_id: this.rowData.meeting_id meeting_id: row.meeting_id
}
if (row.meeting_type === 1) {
params.sub_meeting_id = row.sub_meeting_id
} }
const msg = type === 'cancel' ? '会议取消' : '会议删除' const msg = type === 'cancel' ? '会议取消' : '会议删除'
cancelMeeting(params).then(res => { cancelMeeting(params).then(res => {
......
...@@ -34,11 +34,11 @@ ...@@ -34,11 +34,11 @@
<el-form-item label="会议直播" style="margin-bottom:12px;"> <el-form-item label="会议直播" style="margin-bottom:12px;">
<el-checkbox v-model="form.enable_live" @change="updatePopper">开启会议直播(用于分享给观看直播的用户)</el-checkbox> <el-checkbox v-model="form.enable_live" @change="updatePopper">开启会议直播(用于分享给观看直播的用户)</el-checkbox>
</el-form-item> </el-form-item>
<el-form-item v-if="form.enable_live" label="直播主题" :required="form.enable_live" prop="liveTheme"> <el-form-item v-if="form.enable_live" label="直播主题" :required="form.enable_live" prop="live_subject">
<el-input v-model="form.liveTheme" size="small" /> <el-input v-model="form.live_subject" size="small" />
</el-form-item> </el-form-item>
<el-form-item v-if="form.enable_live" label="直播简介" :required="form.enable_live" prop="liveDesc"> <el-form-item v-if="form.enable_live" label="直播简介" :required="form.enable_live" prop="live_summary">
<el-input type="textarea" v-model="form.liveDesc"></el-input> <el-input type="textarea" v-model="form.live_subject"></el-input>
</el-form-item> </el-form-item>
<el-form-item style="text-align:center;"> <el-form-item style="text-align:center;">
<el-button @click="more" size="mini">更多选项</el-button> <el-button @click="more" size="mini">更多选项</el-button>
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
</template> </template>
<script> <script>
import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index' import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index'
import { timeTrans, dateFormat, getTimestampYMD, getCurHalfHour } from '@/utils/dateAlgs' import { dateFormat, getTimestampYMD, getCurHalfHour } from '@/utils/dateAlgs'
import { createMeeting, operateLog, getMeetingDetails } from '@api/common' import { createMeeting, operateLog, getMeetingDetails } from '@api/common'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
const DAY_TIMESTAMP = 8.64e7 const DAY_TIMESTAMP = 8.64e7
...@@ -89,15 +89,15 @@ export default { ...@@ -89,15 +89,15 @@ export default {
} }
// 当开启会议直播时,启用验证,处理callback // 当开启会议直播时,启用验证,处理callback
const validateErrMsg = (rule, value, callback) => { const validateErrMsg = (rule, value, callback) => {
if (this.form.isLive) { if (this.form.enable_live && !value) {
const errMsg = rule.field === 'liveTheme' ? '请输入直播主题' : '请输入直播简介' const errMsg = rule.field === 'live_subject' ? '请输入直播主题' : '请输入直播简介'
callback(new Error(errMsg)); callback(new Error(errMsg));
} else { } else {
callback(); callback();
} }
}; };
return { return {
timerClear: true, timerClear: false,
form: { form: {
subject: '', subject: '',
startDate: this.date, startDate: this.date,
...@@ -125,21 +125,21 @@ export default { ...@@ -125,21 +125,21 @@ export default {
live_subject: [{ validator: validateErrMsg }], live_subject: [{ validator: validateErrMsg }],
live_summary: [{ validator: validateErrMsg }] live_summary: [{ validator: validateErrMsg }]
}, },
startDateOptions: { // startDateOptions: {
disabledDate(time) { // disabledDate(time) {
return time.getTime() < Date.now() - DAY_TIMESTAMP; // return time.getTime() < Date.now() - DAY_TIMESTAMP;
} // }
}, // },
startTimeOptions: { // startTimeOptions: {
start: getCurHalfHour('start'), // start: getCurHalfHour('start'),
step: '00:30', // step: '00:30',
end: '23:30' // end: '23:30'
}, // },
endTimeOptions: { // endTimeOptions: {
start: getCurHalfHour('end'), // start: getCurHalfHour('end'),
step: '00:30', // step: '00:30',
end: '23:30' // end: '23:30'
}, // },
details: {}, details: {},
dialogVisible: false dialogVisible: false
} }
...@@ -152,6 +152,25 @@ export default { ...@@ -152,6 +152,25 @@ export default {
endTimestamp() { endTimestamp() {
return this.getFullDateTime(this.form.endDate, this.form.endTime).getTime() return this.getFullDateTime(this.form.endDate, this.form.endTime).getTime()
}, },
startDateOptions() {
return {
disabledDate(time) {
return time.getTime() < Date.now() - DAY_TIMESTAMP
}
}
},
startTimeOptions() {
const date = this.form.startDate
const options = {
start: '00:00',
step: '00:30',
end: '23:30'
}
if (date.getTime() <= Date.now()) {
options.start = getCurHalfHour('start')
}
return options
},
endDateOptions() { endDateOptions() {
const _startDate = this.form.startDate; const _startDate = this.form.startDate;
return { return {
...@@ -159,6 +178,27 @@ export default { ...@@ -159,6 +178,27 @@ export default {
return getTimestampYMD(time) < getTimestampYMD(_startDate) || getTimestampYMD(time) > getTimestampYMD(_startDate) + DAY_TIMESTAMP; return getTimestampYMD(time) < getTimestampYMD(_startDate) || getTimestampYMD(time) > getTimestampYMD(_startDate) + DAY_TIMESTAMP;
} }
} }
},
endTimeOptions() {
const { startDate, endDate, startTime } = this.form
const fullDate = this.getFullDateTime(startDate, startTime)
let options
if (this.isSameDate(startDate, endDate)) {
const startTime = getCurHalfHour('end', fullDate)
options = {
start: startTime,
step: '00:30',
end: '23:30'
}
} else {
const endTime = getCurHalfHour('start', fullDate)
options = {
start: '00:00',
step: '00:30',
end: endTime
}
}
return options
} }
}, },
watch: { watch: {
...@@ -183,45 +223,22 @@ export default { ...@@ -183,45 +223,22 @@ export default {
this.$emit('refreshPopover', Date.now()) this.$emit('refreshPopover', Date.now())
}, },
startDateChange(val) { startDateChange(val) {
this.form.endDate = val; this.form.endDate = val
const _startDate = timeTrans(this.form.startDate); this.startTimeChange()
if (Date.parse(_startDate) > Date.now()) { if (this.showSchedule) {
this.startTimeOptions = { this.fetchMeetingList()
start: '00:00',
step: '00:30',
end: '23:30'
}
} else {
this.startTimeOptions = {
start: getCurHalfHour('start'),
step: '00:30',
end: '23:30'
}
} }
}, },
startTimeChange(val) { startTimeChange() {
const { startDate, endDate } = this.form const { startDate, endDate } = this.form
const fullDate = this.getFullDateTime(startDate, val)
if (this.isSameDate(startDate, endDate)) { if (this.isSameDate(startDate, endDate)) {
const startTime = getCurHalfHour('end', fullDate) this.form.endTime = this.endTimeOptions.start
this.form.endTime = startTime
this.endTimeOptions = {
start: startTime,
step: '00:30',
end: '23:30'
}
} else { } else {
const endTime = getCurHalfHour('start', fullDate) this.form.endTime = this.endTimeOptions.end
this.form.endTime = endTime;
this.endTimeOptions = {
start: '00:00',
step: '00:30',
end: endTime
}
} }
}, },
endDateChange() { endDateChange() {
this.startTimeChange(this.form.startTime) this.startTimeChange()
}, },
getFullDateTime(date, timeStr) { getFullDateTime(date, timeStr) {
const hmArr = timeStr.split(':'); const hmArr = timeStr.split(':');
...@@ -293,6 +310,8 @@ export default { ...@@ -293,6 +310,8 @@ export default {
this.$message.success('创建腾讯会议成功') this.$message.success('创建腾讯会议成功')
this.fetchMeetingDetails({ meeting_type: form.meeting_type, meeting_id: res.data.meeting_id }) this.fetchMeetingDetails({ meeting_type: form.meeting_type, meeting_id: res.data.meeting_id })
this.$emit('refreshData') this.$emit('refreshData')
} else {
this.$message.error(res.message || res.msg || '创建腾讯会议失败')
} }
}) })
}, },
......
...@@ -93,7 +93,7 @@ export default { ...@@ -93,7 +93,7 @@ export default {
const eVal = value[1] const eVal = value[1]
const sDateFormat = dateFormat(sVal, '{y}年{m}月{d}日') const sDateFormat = dateFormat(sVal, '{y}年{m}月{d}日')
if (isSameDate(sVal, eVal)) { if (isSameDate(sVal, eVal)) {
res = sDateFormat res = sDateFormat + ' ' + dateFormat(eVal, '星期{a}')
} else if (dateFormat(sVal, '{y}年{m}') === dateFormat(eVal, '{y}年{m}')) { } else if (dateFormat(sVal, '{y}年{m}') === dateFormat(eVal, '{y}年{m}')) {
res = sDateFormat + ' - ' + dateFormat(eVal, '{d}日') res = sDateFormat + ' - ' + dateFormat(eVal, '{d}日')
} else if (dateFormat(sVal, '{y}年') === dateFormat(eVal, '{y}年')) { } else if (dateFormat(sVal, '{y}年') === dateFormat(eVal, '{y}年')) {
......
<template>
<el-form label-width="140px">
<el-form-item label="会议主题:">
{{details.subject}}
</el-form-item>
<el-form-item label="会议时间:">
{{details.start_time | dateFormat}} - {{details.end_time | dateFormat('{h}:{i}')}}GMT+08:00)
</el-form-item>
<el-form-item label="会议链接:">
{{details.join_url}}
</el-form-item>
<el-form-item label="会议号:">
{{details.meeting_code}}
</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="false">
<p>+8675536550000,,526430840#(中国大陆)</p>
<p>+85230018898,,526430840#(中国香港)</p>
</el-form-item>
<el-form-item label="根据您的位置拨号:" v-if="false">
<p>+8675536550000(中国大陆)</p>
<p>++85230018898(中国香港)</p>
</el-form-item>
</el-form>
</template>
<script>
import { dateFormat } from '@/utils/dateAlgs'
export default {
props: {
rowData: {},
details: {}
},
computed: {
hasLive() {
return this.rowData.hasLive || false
}
},
filters: {
dateFormat(value, fmt) {
return dateFormat(value, fmt || '{y}年{m}月{d}日 {h}:{i}')
}
}
}
</script>
<style scoped>
::v-deep.el-form-item{
margin:0;
}
</style>
\ No newline at end of file
<template>
<el-form label-width="140px">
<el-form-item label="会议主题:">
{{details.subject}}
</el-form-item>
<el-form-item label="会议时间:">
{{details.start_time | dateFormat}} - {{details.end_time | dateFormat('{h}:{i}')}}GMT+08:00)
</el-form-item>
<el-form-item label="会议号:">
{{details.meeting_code}}
</el-form-item>
<el-form-item label="会议创建者:">
{{rowData.sso_user.nickname}}
</el-form-item>
<el-form-item label="会议主持人:">
<span v-for="(it, index) in details.hosts" :key="it.userid">{{it.username}}{{index > 0 ? '、' : ''}}</span>
</el-form-item>
<el-form-item label="会议管理员:">
<span v-for="(it, index) in details.managers" :key="it.userid">{{it.nickname}}{{index > 0 ? '、' : ''}}</span>
</el-form-item>
<el-form-item label="会议直播主题:" v-if="details.enable_live === 1">
{{details.live_config.live_subject}}
</el-form-item>
<el-form-item label="会议直播简介:" v-if="details.enable_live === 1">
<p style="line-height:26px;padding:7px 10px 7px 0">{{details.live_config.live_summary}}</p>
</el-form-item>
<el-form-item label="参会成员:" v-if="rowData.status === 2">
<el-button type="text" @click="handleExport">导出excel</el-button>
</el-form-item>
<el-form-item label="回放:" v-if="rowData.status === 2">
<el-button type="text" v-if="hasRecord" @click="handleDownload">下载</el-button>
<el-button type="text" v-else disabled>暂无回放</el-button>
</el-form-item>
</el-form>
</template>
<script>
import { dateFormat } from '@/utils/dateAlgs'
import { exportParticipants, getMeetingRecordAddr } from '@api/common'
export default {
props: {
details: {},
rowData: {},
dialogType: {}
},
computed: {
hasRecord() {
if (this.rowData.record_file_ids && Array.isArray(this.rowData.record_file_ids) && this.rowData.record_file_ids.length > 0) {
return true
} else {
return false
}
},
nowFormat() {
const now = Date.now()
const _format = dateFormat(now, '{y}{m}{d}{h}{i}{s}')
const nowStr = now.toString()
return _format + nowStr.substr(10, 12)
}
},
filters: {
dateFormat(value, fmt) {
return dateFormat(value, fmt || '{y}年{m}月{d}日 {h}:{i}')
}
},
methods: {
handleExport() {
const row = this.rowData
const params = {
meeting_id: row.meeting_id
}
if (row.meeting_type === 1) {
params.sub_meeting_id = row.sub_meeting_id
}
exportParticipants(params).then((res) => {
if (res && res.type === 'text/xlsx') {
const url = URL.createObjectURL(res)
// const elink = document.createElement('a')// 创建一个a标签
// elink.download = `参会人员表_${this.nowFormat}.xlsx`;// 设置a标签的下载属性
// elink.style.display = 'none';// 将a标签设置为隐藏
// elink.href = URL.createObjectURL(blob);// 把之前处理好的地址赋给a标签的href
// document.body.appendChild(elink);// 将a标签添加到body中
// elink.click();// 执行a标签的点击方法
// URL.revokeObjectURL(elink.href) // 下载完成释放URL 对象
// document.body.removeChild(elink)// 移除a标签
this.funDownload(url, `参会人员表_${this.nowFormat}.xlsx`)
}
})
},
async handleDownload() {
const list = await this.fetchMeetingRecordAddr()
if (list && Array.isArray(list)) {
list.forEach(it => {
if (it.download_address) {
// window.open(it.download_address, '_blank')
this.funDownload(it.download_address, it.download_address)
}
})
}
},
funDownload(fileUrl, fileName) {
const elink = document.createElement('a')// 创建一个a标签
elink.download = fileName;// 设置a标签的下载属性
elink.style.display = 'none';// 将a标签设置为隐藏
elink.href = fileUrl;// 把之前处理好的地址赋给a标签的href
document.body.appendChild(elink);// 将a标签添加到body中
elink.click();// 执行a标签的点击方法
URL.revokeObjectURL(elink.href) // 下载完成释放URL 对象
document.body.removeChild(elink)// 移除a标签
},
fetchMeetingRecordAddr() {
const params = {
meeting_id: this.rowData.meeting_id,
record_file_ids: this.rowData.record_file_ids
}
return new Promise((resolve, reject) => {
getMeetingRecordAddr(params).then(res => {
if (res.code === 0 && res.data.files) {
resolve(res.data.files)
} else {
reject(res)
}
}).catch((err) => reject(err))
})
}
}
}
</script>
<style scoped>
::v-deep.el-form-item{
margin:0;
}
</style>
\ No newline at end of file
<template>
<div class="btns">
<template v-if="status === 1">
<el-button type="text" size="small" v-if="operatable" @click="handleJoin">进入会议</el-button>
<el-button type="text" size="small" v-if="operatable && hasLive" @click="handleLive">观看直播</el-button>
<el-button type="text" size="small" v-if="operatable" @click="handleCopy">复制邀请</el-button>
<el-button type="text" size="small" v-if="operatable" @click="handleStop">终止</el-button>
<el-button type="text" size="small" v-if="!operatable" @click="handleDetails">查看</el-button>
</template>
<template v-if="status === 0">
<el-button type="text" size="small" v-if="operatable" @click="handleJoin">进入会议</el-button>
<el-button type="text" size="small" v-if="operatable" @click="handleCopy">复制邀请</el-button>
<el-button type="text" size="small" v-if="operatable && !isCycle">修改</el-button>
<el-dropdown v-if="operatable && isCycle">
<span class="dropdown-link">
修改<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>修改本次会议</el-dropdown-item>
<el-dropdown-item>修改周期会议</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-button type="text" size="small" v-if="operatable" @click="handleCancel">取消</el-button>
<el-button type="text" size="small" v-if="!operatable" @click="handleDetails">查看</el-button>
</template>
<template v-if="status === 2">
<el-button type="text" size="small" v-if="operatable" @click="handleRecord">看回放</el-button>
<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-dialog :title="domicTitle" :visible.sync="dialogVisible" width="520px" center>
<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'" />
<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>
<el-button @click="dialogVisible = false" size="mini">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import DialogDetails from './DialogDetails.vue'
import DialogCopyInvite from './DialogCopyInvite'
import { mapGetters } from 'vuex'
import { getMeetingDetails, stopMeeting, cancelMeeting, getMeetingRecordAddr } from '@api/common'
export default {
props: {
rowData: {}
},
data() {
return {
userId: '1234',
roleName: '', // general_admin
dialogVisible: false,
dialogType: 'copy',
details: ''
}
},
computed: {
...mapGetters(['isSuperAdmin', 'user']),
domicTitle() {
let title = ''
switch (this.dialogType) {
case 'copy':
title = '复制邀请'
break
case 'details':
title = '会议详情'
break
}
return title
},
status() {
return this.rowData.status
},
isCycle() {
return this.rowData.meeting_type === 1
},
isMyself() {
return this.rowData.sso_id === this.user.id
},
isGeneralAdmin() {
const admins = this.rowData.manage_ids
let flag = false
for (let i = 0; i < admins.length; i++) {
if (admins[i] === this.user.id) {
flag = true
break
}
}
return flag
},
hasLive() {
return this.rowData.enable_live || false
},
operatable() {
return this.isMyself || this.isSuperAdmin || this.isGeneralAdmin
}
},
filters: {
statusFilter(val) {
let result = ''
switch (val) {
case 0:
result = '未开始'
break
case 1:
result = '进行中'
break
case 2:
result = '已结束'
break
}
return result
}
},
components: { DialogDetails, DialogCopyInvite },
created() {
},
methods: {
handleCopy() {
this.fetchMeetingDetails()
this.dialogVisible = true
this.dialogType = 'copy'
},
handleDetails() {
this.dialogVisible = true
this.dialogType = 'details'
this.fetchMeetingDetails()
},
handleLive() {
window.open(this.live_config.live_addr, '_blank');
},
handleCancel() {
this.$confirm('此操作将取消这场会议, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
this.fetchCancelMeeting('cancel')
}).catch(() => {})
},
handleStop() {
this.$confirm('此操作将终止正在进行中的会议, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
this.fetchStopMeeting()
}).catch(() => {})
},
handleDelete() {
this.$confirm('此操作将删除这场会议, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
this.fetchCancelMeeting('delete')
}).catch(() => {})
},
handleJoin() {
window.open(this.rowData.join_url, '_blank');
},
copyLink() {
const dom = document.createElement('input')
document.body.appendChild(dom)
dom.value = this.rowData.join_url
dom.select(); // 选择对象
document.execCommand('Copy');
this.$message({
message: '复制成功!',
type: 'success'
})
document.body.removeChild(dom)
},
async handleRecord() {
if (this.rowData.record_file_ids.length === 0) {
this.$message.error('该会议没有回放')
} else {
const list = await this.fetchMeetingRecordAddr()
if (list && Array.isArray(list)) {
if (list.length === 1) {
window.open(list[0].view_address, '_blank')
}
}
}
},
fetchStopMeeting() {
const params = {
meeting_id: this.rowData.meeting_id
}
stopMeeting(params).then(res => {
if (res.code === 0 && res.data.status) {
this.$message.success('会议终止成功')
this.$emit('refresh')
} else {
this.$message.error(res.msg || '会议终止失败')
}
})
},
fetchCancelMeeting(type) {
const params = {
meeting_id: this.rowData.meeting_id
}
const msg = type === 'cancel' ? '会议取消' : '会议删除'
cancelMeeting(params).then(res => {
if (res.code === 0 && res.data.status) {
this.$message.success(msg + '成功')
this.$emit('refresh')
} else {
this.$message.error(res.msg || msg + '失败')
}
})
},
fetchMeetingDetails() {
const row = this.rowData
const params = {
meeting_id: row.meeting_id
}
if (row.meeting_type === 1) {
params.sub_meeting_id = row.sub_meeting_id
}
getMeetingDetails(params).then(res => {
if (res.code === 0 && res.data.id) {
this.details = res.data
}
})
},
fetchMeetingRecordAddr() {
const params = {
meeting_id: this.rowData.meeting_id,
record_file_ids: this.rowData.record_file_ids
}
return new Promise((resolve, reject) => {
getMeetingRecordAddr(params).then(res => {
if (res.code === 0 && res.data.files) {
resolve(res.data.files)
} else {
reject(res)
}
}).catch((err) => reject(err))
})
}
}
}
</script>
<style scoped>
.dropdown-link{
cursor: pointer;
color: #409EFF;
font-size:12px;
}
::v-deep.el-icon-arrow-down {
font-size: 12px;
}
.btns ::v-deep.el-dialog__header{
padding-top:14px;
}
.btns ::v-deep.el-dialog__headerbtn{
top:12px;
right:12px;
}
.btns ::v-deep.el-dialog__body{
padding:10px 0;
margin:0 20px;
border: 1px solid #DBDBDB;
}
.btns ::v-deep.el-dialog__footer{
padding-bottom:16px;
}
.dialog-header .meeting-status{
text-align:left;
}
.dialog-header .title{
font-size:16px;
}
</style>
\ No newline at end of file
...@@ -251,7 +251,7 @@ export default { ...@@ -251,7 +251,7 @@ export default {
const validateErrMsg = (rule, value, callback) => { const validateErrMsg = (rule, value, callback) => {
// 当开启会议直播时,启用验证,处理callback // 当开启会议直播时,启用验证,处理callback
if (this.form.enable_live && !value) { if (this.form.enable_live && !value) {
const errMsg = rule.field === 'liveTheme' ? '请输入直播主题' : '请输入直播简介' const errMsg = rule.field === 'live_subject' ? '请输入直播主题' : '请输入直播简介'
callback(new Error(errMsg)) callback(new Error(errMsg))
} else { } else {
callback() callback()
...@@ -303,22 +303,6 @@ export default { ...@@ -303,22 +303,6 @@ export default {
live_subject: [{ validator: validateErrMsg }], live_subject: [{ validator: validateErrMsg }],
live_summary: [{ 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'
},
monthMaxDay: 28,
cycleMeetingEndDateOptions: { cycleMeetingEndDateOptions: {
disabledDate: time => { disabledDate: time => {
let flag = false let flag = false
...@@ -424,6 +408,25 @@ export default { ...@@ -424,6 +408,25 @@ export default {
this.form.until_count = times this.form.until_count = times
} }
}, },
startDateOptions() {
return {
disabledDate(time) {
return time.getTime() < Date.now() - DAY_TIMESTAMP
}
}
},
startTimeOptions() {
const date = this.form.startDate
const options = {
start: '00:00',
step: '00:30',
end: '23:30'
}
if (date.getTime() <= Date.now()) {
options.start = getCurHalfHour('start')
}
return options
},
endDateOptions() { endDateOptions() {
const _startDate = this.form.startDate const _startDate = this.form.startDate
return { return {
...@@ -434,6 +437,27 @@ export default { ...@@ -434,6 +437,27 @@ export default {
) )
} }
} }
},
endTimeOptions() {
const { startDate, endDate, startTime } = this.form
const fullDate = this.getFullDateTime(startDate, startTime)
let options
if (this.isSameDate(startDate, endDate)) {
const startTime = getCurHalfHour('end', fullDate)
options = {
start: startTime,
step: '00:30',
end: '23:30'
}
} else {
const endTime = getCurHalfHour('start', fullDate)
options = {
start: '00:00',
step: '00:30',
end: endTime
}
}
return options
} }
}, },
filters: { filters: {
...@@ -454,9 +478,8 @@ export default { ...@@ -454,9 +478,8 @@ export default {
immediate: true immediate: true
}, },
$route: { $route: {
handler: function (nv, ov) { handler: function () {
const query = this.$route.query const query = this.$route.query
console.log(query)
if (query.type === '1') { if (query.type === '1') {
this.showSchedule = true this.showSchedule = true
this.form.startDate = getYMDByDate(query.start) this.form.startDate = getYMDByDate(query.start)
...@@ -489,47 +512,21 @@ export default { ...@@ -489,47 +512,21 @@ export default {
methods: { methods: {
startDateChange(val) { startDateChange(val) {
this.form.endDate = val this.form.endDate = val
const _startDate = timeTrans(this.form.startDate) this.startTimeChange()
if (Date.parse(_startDate) > Date.now()) {
this.startTimeOptions = {
start: '00:00',
step: '00:30',
end: '23:30'
}
} else {
this.startTimeOptions = {
start: getCurHalfHour('start'),
step: '00:30',
end: '23:30'
}
}
if (this.showSchedule) { if (this.showSchedule) {
this.fetchMeetingList() this.fetchMeetingList()
} }
}, },
startTimeChange(val) { startTimeChange() {
const { startDate, endDate } = this.form const { startDate, endDate } = this.form
const fullDate = this.getFullDateTime(startDate, val)
if (this.isSameDate(startDate, endDate)) { if (this.isSameDate(startDate, endDate)) {
const startTime = getCurHalfHour('end', fullDate) this.form.endTime = this.endTimeOptions.start
this.form.endTime = startTime
this.endTimeOptions = {
start: startTime,
step: '00:30',
end: '23:30'
}
} else { } else {
const endTime = getCurHalfHour('start', fullDate) this.form.endTime = this.endTimeOptions.end
this.form.endTime = endTime
this.endTimeOptions = {
start: '00:00',
step: '00:30',
end: endTime
}
} }
}, },
endDateChange() { endDateChange() {
this.startTimeChange(this.form.startTime) this.startTimeChange()
}, },
repaeatRateChange(val) { repaeatRateChange(val) {
if (val === 'everyworkday' && this.form.endType === 'endOneday') { if (val === 'everyworkday' && this.form.endType === 'endOneday') {
...@@ -740,11 +737,10 @@ export default { ...@@ -740,11 +737,10 @@ export default {
spinner: 'el-icon-loading', spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)' background: 'rgba(0, 0, 0, 0.7)'
}) })
console.log(params)
updateMeeting(params).then(res => { updateMeeting(params).then(res => {
loading.close() loading.close()
if (res.code === 0 && res.data.status) { if (res.code === 0 && res.data && res.data.status) {
operateLog({ type: `修改会议,被修改会议meeting_code:${res.data.meeting_code}`, user: this.user }) operateLog({ type: `修改会议,被修改会议meeting_code:${this.details.meeting_code}`, user: this.user })
this.$message.success('修改腾讯会议成功') this.$message.success('修改腾讯会议成功')
this.dialogVisible = true this.dialogVisible = true
} else { } else {
......
...@@ -45,8 +45,9 @@ ...@@ -45,8 +45,9 @@
<span style="font-size: 18px; color: #606266">{{ scope.row.start_time | dateFormat('{d}') }}</span> <span style="font-size: 18px; color: #606266">{{ scope.row.start_time | dateFormat('{d}') }}</span>
{{ scope.row.start_time | dateFormat('{m}月') }} {{ scope.row.start_time | dateFormat('周{a}') }} {{ scope.row.start_time | dateFormat('{m}月') }} {{ scope.row.start_time | dateFormat('周{a}') }}
<span style="font-size: 16px; color: #606266">{{ scope.row.start_time | dateFormat('{h}:{i}') }}</span> <span style="font-size: 16px; color: #606266">{{ scope.row.start_time | dateFormat('{h}:{i}') }}</span>
<span v-if="isSameDate(scope.row.start_time, scope.row.end_time)" style="font-size: 16px; color: #606266"> - {{ scope.row.end_time | dateFormat('{h}:{i}') }}</span>
</p> </p>
<p style="color: #aeaeae"> <p style="color: #aeaeae" v-if="!isSameDate(scope.row.start_time, scope.row.end_time)">
<span style="font-size: 18px; color: #606266">{{ scope.row.end_time | dateFormat('{d}') }}</span> <span style="font-size: 18px; color: #606266">{{ scope.row.end_time | dateFormat('{d}') }}</span>
{{ scope.row.end_time | dateFormat('{m}月') }} {{ scope.row.end_time | dateFormat('周{a}') }} {{ scope.row.end_time | dateFormat('{m}月') }} {{ scope.row.end_time | dateFormat('周{a}') }}
<span style="font-size: 16px; color: #606266">{{ scope.row.end_time | dateFormat('{h}:{i}') }}</span> <span style="font-size: 16px; color: #606266">{{ scope.row.end_time | dateFormat('{h}:{i}') }}</span>
...@@ -153,6 +154,9 @@ export default { ...@@ -153,6 +154,9 @@ export default {
this.fetchMeetingList() this.fetchMeetingList()
}, },
methods: { methods: {
isSameDate(start, end) {
return dateFormat(start, '{y}-{m}-{d}') === dateFormat(end, '{y}-{m}-{d}')
},
reset() { reset() {
Object.keys(this.filter).map(key => { this.filter[key] = '' }) Object.keys(this.filter).map(key => { this.filter[key] = '' })
this.fetchMeetingList() this.fetchMeetingList()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论