diff --git a/pages/message/index.vue b/pages/message/index.vue
index d74ca56..a2fac16 100644
--- a/pages/message/index.vue
+++ b/pages/message/index.vue
@@ -769,6 +769,13 @@ onShow(() => {
checkLoginAndInitTIM();
} else if (timChatManager.tim && !timChatManager.isLoggedIn) {
timChatManager.ensureIMConnection();
+ } else if (timChatManager.tim && timChatManager.isLoggedIn && chatInfo.value.conversationID) {
+ // 页面从后台返回时,重新加载消息列表
+ console.log("页面从后台返回,重新加载消息列表");
+ messageList.value = [];
+ isCompleted.value = false;
+ lastFirstMessageId.value = "";
+ loadMessageList();
}
startIMMonitoring(30000);
diff --git a/pages/message/message.vue b/pages/message/message.vue
index bfd156a..5adc1f9 100644
--- a/pages/message/message.vue
+++ b/pages/message/message.vue
@@ -67,10 +67,7 @@
医生信息未获取,请稍后重试
@@ -165,12 +162,78 @@ const handleAddPatient = withInfo(() => {
});
});
+// 立即更新未读徽章
+const updateUnreadBadgeImmediately = async () => {
+ try {
+ if (!globalTimChatManager || !globalTimChatManager.tim) {
+ console.warn("TIM实例不存在,无法更新徽章");
+ return;
+ }
+
+ const response = await globalTimChatManager.tim.getConversationList();
+
+ if (!response || !response.data || !response.data.conversationList) {
+ console.warn("获取会话列表返回数据异常");
+ return;
+ }
+
+ // 计算群聊总未读数
+ const totalUnreadCount = response.data.conversationList
+ .filter(
+ (conv) => conv.conversationID && conv.conversationID.startsWith("GROUP")
+ )
+ .reduce((sum, conv) => sum + (conv.unreadCount || 0), 0);
+
+ // 更新 tabBar 徽章 - 添加错误处理,防止在非TabBar页面调用时出错
+ try {
+ if (totalUnreadCount > 0) {
+ uni.setTabBarBadge({
+ index: 1,
+ text: totalUnreadCount > 99 ? "99+" : String(totalUnreadCount),
+ });
+ console.log("已更新 tabBar 徽章:", totalUnreadCount);
+ } else {
+ uni.removeTabBarBadge({
+ index: 1,
+ });
+ console.log("已移除 tabBar 徽章");
+ }
+ } catch (badgeError) {
+ // 在非TabBar页面上调用时会出错,这是正常的,不需要处理
+ if (badgeError.errMsg && badgeError.errMsg.includes("not TabBar page")) {
+ console.log("当前不是TabBar页面,跳过徽章更新");
+ } else {
+ console.error("更新TabBar徽章失败:", badgeError);
+ }
+ }
+ } catch (error) {
+ console.error("更新未读徽章失败:", error);
+ }
+};
+
// 初始化IM
const initIM = async () => {
- if (!isIMInitialized.value) {
+ // 关键修复:不仅检查 isIMInitialized,还要检查实际连接状态
+ const needsInit =
+ !isIMInitialized.value ||
+ !globalTimChatManager ||
+ !globalTimChatManager.isLoggedIn;
+
+ if (needsInit) {
uni.showLoading({
title: "连接中...",
});
+
+ // 如果已初始化但连接断开,先清理旧实例
+ if (
+ isIMInitialized.value &&
+ globalTimChatManager &&
+ !globalTimChatManager.isLoggedIn
+ ) {
+ console.log("IM已初始化但连接已断开,清理旧实例后重新初始化");
+ await globalTimChatManager.cleanupOldInstance();
+ }
+
const success = await initIMAfterLogin();
uni.hideLoading();
@@ -191,30 +254,6 @@ const initIM = async () => {
});
return false;
}
- } else if (globalTimChatManager && !globalTimChatManager.isLoggedIn) {
- uni.showLoading({
- title: "重连中...",
- });
- const reconnected = await globalTimChatManager.ensureIMConnection();
- uni.hideLoading();
-
- if (!reconnected) {
- // 显示重试提示
- uni.showModal({
- title: "IM连接失败",
- content:
- "连接失败,请检查网络后重试。如果IM连接失败,请重新登陆IM再连接",
- confirmText: "重新登陆",
- cancelText: "取消",
- success: (res) => {
- if (res.confirm) {
- // 重新登陆
- handleReloginIM();
- }
- },
- });
- return false;
- }
}
return true;
};
@@ -281,7 +320,7 @@ const loadConversationList = async () => {
}
}
- // 检查是否已登录
+ // 检查是否已登录 - 这是关键检查
if (!globalTimChatManager.isLoggedIn) {
console.warn("IM未登录,尝试重新连接");
const reconnected = await globalTimChatManager.ensureIMConnection();
@@ -294,7 +333,19 @@ const loadConversationList = async () => {
throw new Error("IM管理器方法不可用");
}
- const result = await globalTimChatManager.getGroupList();
+ // 添加超时控制,防止永久等待
+ const timeoutPromise = new Promise((_, reject) => {
+ setTimeout(
+ () => reject(new Error("加载会话列表超时,请检查网络连接")),
+ 35000
+ );
+ });
+
+ const result = await Promise.race([
+ globalTimChatManager.getGroupList(),
+ timeoutPromise,
+ ]);
+
if (result && result.success && result.groupList) {
// 合并后端群组详细信息(已包含格式化和排序)
conversationList.value = await mergeConversationWithGroupDetails(
@@ -317,17 +368,26 @@ const loadConversationList = async () => {
);
} else {
console.error("加载群聊列表失败:", result);
- uni.showToast({
- title: "加载失败,请重试",
- icon: "none",
- });
+ throw new Error(result?.message || "加载失败,请重试");
}
} catch (error) {
console.error("加载会话列表失败:", error);
- uni.showToast({
- title: error.message || "加载失败,请重试",
- icon: "none",
- });
+
+ // 如果是超时或连接错误,提示用户重试
+ if (
+ error.message &&
+ (error.message.includes("超时") || error.message.includes("连接"))
+ ) {
+ uni.showToast({
+ title: "网络连接不稳定,请重试",
+ icon: "none",
+ });
+ } else {
+ uni.showToast({
+ title: error.message || "加载失败,请重试",
+ icon: "none",
+ });
+ }
} finally {
loading.value = false;
}
@@ -605,7 +665,7 @@ onShow(async () => {
// 加载团队列表
await getTeams();
- // 初始化IM
+ // 初始化IM - 关键修复:确保IM连接状态正确
const imReady = await initIM();
if (!imReady) {
console.error("IM初始化失败");
diff --git a/pages/work/team/invite/invite-teammate.vue b/pages/work/team/invite/invite-teammate.vue
index 73ad092..363b906 100644
--- a/pages/work/team/invite/invite-teammate.vue
+++ b/pages/work/team/invite/invite-teammate.vue
@@ -1,118 +1,141 @@
-
-
-
-
- {{ team.name }}
-
-
- 成员邀请码
-
-
-
-
-
- 微信扫一扫上面的二维码
-
-
- 加入我的团队,协同开展患者管理服务
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/utils/tim-chat.js b/utils/tim-chat.js
index 158e904..14d8ed4 100644
--- a/utils/tim-chat.js
+++ b/utils/tim-chat.js
@@ -1032,6 +1032,8 @@ class TimChatManager {
return new Promise((resolve, reject) => {
// 检查userId是否存在,不存在则不需要初始化
if (!this.currentUserID) {
+ console.error('currentUserID不存在,无法获取群聊列表')
+ reject(new Error('用户ID不存在'))
return
}
@@ -1076,12 +1078,13 @@ class TimChatManager {
if (timeoutHandle) clearTimeout(timeoutHandle)
this.getGroupListInternal().then(resolve).catch(reject)
} else if (waitTime >= maxWaitTime) {
- console.error('等待SDK就绪超时')
+ console.error('等待SDK就绪超时,当前isLoggedIn:', this.isLoggedIn)
if (timeoutHandle) clearTimeout(timeoutHandle)
+ // 超时时返回错误而不是继续等待
reject(new Error('SDK初始化超时,请检查网络连接'))
} else {
waitTime += checkInterval
- console.log(`等待SDK就绪... (${Math.floor(waitTime / 1000)}/${Math.floor(maxWaitTime / 1000)}秒)`)
+ console.log(`等待SDK就绪... (${Math.floor(waitTime / 1000)}/${Math.floor(maxWaitTime / 1000)}秒, isLoggedIn: ${this.isLoggedIn})`)
timeoutHandle = setTimeout(checkSDKReady, checkInterval)
}
}
@@ -2758,6 +2761,7 @@ class TimChatManager {
// 标记会话为已读
markConversationAsRead(conversationID) {
+
if (!this.tim || !this.isLoggedIn) {
console.log('⚠️ TIM未初始化或未登录,无法标记会话已读');
return;
@@ -2777,6 +2781,7 @@ class TimChatManager {
}
}
+
// 更新会话列表
updateConversationListOnNewMessage(message) {
try {