diff --git a/urbanLifelineWeb/packages/workcase/src/views/public/ChatRoom/MeetingCard/MeetingCard.vue b/urbanLifelineWeb/packages/workcase/src/views/public/ChatRoom/MeetingCard/MeetingCard.vue index b3265f05..139afc60 100644 --- a/urbanLifelineWeb/packages/workcase/src/views/public/ChatRoom/MeetingCard/MeetingCard.vue +++ b/urbanLifelineWeb/packages/workcase/src/views/public/ChatRoom/MeetingCard/MeetingCard.vue @@ -7,9 +7,9 @@
{{ meeting.meetingName }}
- 预定 + 已结束 进行中 - 已结束 + 预定
@@ -117,6 +117,39 @@ function formatDateTime(dateStr?: string): string { return `${month}-${day} ${hour}:${minute}` } +/** + * 判断会议是否已结束 + * 满足以下任一条件即为已结束: + * 1. status是ended状态 + * 2. 超过了endTime + * 3. actualEndTime存在 + */ +const isMeetingEnded = computed(() => { + 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).getTime() + if (!isNaN(endTime) && currentTime.value > endTime) { + return true + } + } + + return false +}) + /** * 计算倒计时文本 */ @@ -125,6 +158,11 @@ const countdownText = computed(() => { return '' } + // 统一判断会议是否已结束 + if (isMeetingEnded.value) { + return '会议已结束' + } + const advanceMinutes = meeting.value.advance || 0 const now = currentTime.value const startTime = new Date(meeting.value.startTime).getTime() @@ -137,10 +175,6 @@ const countdownText = computed(() => { const advanceTime = startTime - advanceMinutes * 60 * 1000 - if (meeting.value.status === 'ended') { - return '会议已结束' - } - if (now < advanceTime) { // 未到提前入会时间 const leftMs = advanceTime - now @@ -180,7 +214,8 @@ const canJoinMeeting = computed(() => { return false } - if (meeting.value.status === 'ended') { + // 统一判断会议是否已结束 + if (isMeetingEnded.value) { return false } @@ -207,7 +242,8 @@ const buttonText = computed(() => { if (!meeting.value) { return '加载中' } - if (meeting.value.status === 'ended') { + // 统一判断会议是否已结束 + if (isMeetingEnded.value) { return '会议已结束' } if (!canJoinMeeting.value) { diff --git a/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/meetingCard/MeetingCard.uvue b/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/meetingCard/MeetingCard.uvue index 459b4376..1758f391 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/meetingCard/MeetingCard.uvue +++ b/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/meetingCard/MeetingCard.uvue @@ -7,9 +7,9 @@ {{ meeting.meetingName || '未命名会议' }} - 预定 + 已结束 进行中 - 已结束 + 预定 @@ -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) {