From 1148e3368dbfd237de2e81a1d411c38ced39b5e6 Mon Sep 17 00:00:00 2001
From: wangys <3401275564@qq.com>
Date: Sun, 28 Dec 2025 10:51:39 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=9A=E8=AE=AE=E7=8A=B6=E6=80=81=E9=97=AE?=
=?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ChatRoom/MeetingCard/MeetingCard.vue | 52 ++++++++++++++++---
.../meeting/meetingCard/MeetingCard.uvue | 52 ++++++++++++++++---
2 files changed, 88 insertions(+), 16 deletions(-)
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 @@
@@ -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 @@
@@ -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) {