会议状态问题
This commit is contained in:
@@ -7,9 +7,9 @@
|
||||
<div class="meeting-card-header">
|
||||
<div class="meeting-card-title">{{ meeting.meetingName }}</div>
|
||||
<div class="meeting-card-status">
|
||||
<span v-if="meeting.status === 'scheduled'" class="status-badge status-scheduled">预定</span>
|
||||
<span v-if="isMeetingEnded" class="status-badge status-ended">已结束</span>
|
||||
<span v-else-if="meeting.status === 'ongoing'" class="status-badge status-ongoing">进行中</span>
|
||||
<span v-else-if="meeting.status === 'ended'" class="status-badge status-ended">已结束</span>
|
||||
<span v-else-if="meeting.status === 'scheduled'" class="status-badge status-scheduled">预定</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="meeting-card-time">
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user