会议状态问题

This commit is contained in:
2025-12-28 10:51:39 +08:00
parent 5db025b10f
commit 1148e3368d
2 changed files with 88 additions and 16 deletions

View File

@@ -7,9 +7,9 @@
<view class="meeting-card-header">
<view class="meeting-card-title">{{ meeting.meetingName || '未命名会议' }}</view>
<view class="meeting-card-status">
<text v-if="meeting.status === 'scheduled'" class="status-badge status-scheduled">预定</text>
<text v-if="isMeetingEnded" class="status-badge status-ended">已结束</text>
<text v-else-if="meeting.status === 'ongoing'" class="status-badge status-ongoing">进行中</text>
<text v-else-if="meeting.status === 'ended'" class="status-badge status-ended">已结束</text>
<text v-else-if="meeting.status === 'scheduled'" class="status-badge status-scheduled">预定</text>
</view>
</view>
<view class="meeting-card-time">
@@ -121,6 +121,39 @@ function formatDateTime(dateStr?: string): string {
return `${month}-${day} ${hour}:${minute}`
}
/**
* 判断会议是否已结束
* 满足以下任一条件即为已结束:
* 1. status是ended状态
* 2. 超过了endTime
* 3. actualEndTime存在
*/
const isMeetingEnded = computed((): boolean => {
if (!meeting.value) {
return false
}
// 条件1: status是ended状态
if (meeting.value.status === 'ended') {
return true
}
// 条件3: actualEndTime存在
if (meeting.value.actualEndTime) {
return true
}
// 条件2: 超过了endTime
if (meeting.value.endTime) {
const endTime = new Date(meeting.value.endTime.replace(' ', 'T')).getTime()
if (!isNaN(endTime) && currentTime.value > endTime) {
return true
}
}
return false
})
/**
* 计算倒计时文本
*/
@@ -129,6 +162,11 @@ const countdownText = computed((): string => {
return ''
}
// 统一判断会议是否已结束
if (isMeetingEnded.value) {
return '会议已结束'
}
// advance 默认为 0
const advanceMinutes = meeting.value.advance || 0
@@ -144,10 +182,6 @@ const countdownText = computed((): string => {
const advanceTime = startTime - advanceMinutes * 60 * 1000
if (meeting.value.status === 'ended') {
return '会议已结束'
}
if (now < advanceTime) {
// 未到提前入会时间
const leftMs = advanceTime - now
@@ -187,7 +221,8 @@ const canJoinMeeting = computed((): boolean => {
return false
}
if (meeting.value.status === 'ended') {
// 统一判断会议是否已结束
if (isMeetingEnded.value) {
return false
}
@@ -215,7 +250,8 @@ const buttonText = computed((): string => {
if (!meeting.value) {
return '加载中'
}
if (meeting.value.status === 'ended') {
// 统一判断会议是否已结束
if (isMeetingEnded.value) {
return '会议已结束'
}
if (!canJoinMeeting.value) {