解绑后通知所分享人员 日报周报月报说明弹窗点击范围 注销账号

This commit is contained in:
czz
2025-08-08 18:16:10 +08:00
parent 48d8645fd9
commit 0db455258a
31 changed files with 398 additions and 92 deletions

View File

@@ -183,15 +183,105 @@ Timer? _messageTimer;
// }
// });
// }
void startMessagePolling(int ent_type) {
Future<void> startMessagePolling(int ent_type) async {
Get.put(MhMessageController());
MhMessageController messageController = Get.find();
final Set<String> _poppedMessageIds = {}; // 本地已弹窗的消息 ID无论是否已读成功
final Set<String> _readMessageIds = {};
final controller = Get.find<MhMessageController>();
_messageTimer?.cancel();
if (ent_type == APPPackageType.MHT.code) {
if (Get.isRegistered<MhMessageController>()) {
Get.find<MhMessageController>().getMessageStatus();
await controller.getMessageStatus();
if (controller.model.system_message_read == 1) {
await controller.getMessageList("app_system");
final unhandledShareMessages =
controller.systemMessageList.where((item) {
final data = item['data'];
final id = item['_id']?.toString();
return data is Map &&
data['type'] == 'share' &&
id != null &&
!_poppedMessageIds.contains(id) &&
(item['read_time'] == null);
}).toList();
// if (unhandledShareMessages.isNotEmpty) {
// for (final message in unhandledShareMessages) {
// final messageId = message['_id']?.toString();
// if (messageId == null || _poppedMessageIds.contains(messageId))
// continue;
// // 新增:如果当前页面是消息页,则跳过弹窗
// if (Get.currentRoute == '/messagePage') {
// continue;
// }
// _poppedMessageIds.add(messageId);
// try {
// await controller.updateMessageReadStatus(Get.context!, messageId);
// } catch (e) {
// print("标记消息 $messageId 为已读失败: $e");
// }
// final result = await showMessageConfirmDialog(title: '设备分享提醒'.tr);
// if (result == 'confirm') {
// Get.toNamed('/messageDetail', arguments: message);
// }
// }
// }
if (unhandledShareMessages.isNotEmpty) {
for (final message in unhandledShareMessages) {
final messageId = message['_id']?.toString();
if (messageId == null || _poppedMessageIds.contains(messageId))
continue;
// 新增:如果当前页面是消息页,则跳过弹窗
if (Get.currentRoute == '/messagePage') {
continue;
}
final data = message['data'] as Map<String, dynamic>;
final valList = data['val'] as List<dynamic>;
final messageType = data['type'];
// Extract device ID
final deviceIdEntry = valList.firstWhere(
(item) => item['k'] == '设备ID',
orElse: () => null,
);
final mac = deviceIdEntry?['v'] as String?;
_poppedMessageIds.add(messageId);
try {
await controller.updateMessageReadStatus(
Get.context!, message['type'],
mid: messageId);
} catch (e) {
print("标记消息 $messageId 为已读失败: $e");
}
String dialogTitle;
String msg;
if (messageType == 'share') {
dialogTitle = '设备分享提醒'.tr; // "Device Sharing Notification"
final result = await showMessageConfirmDialog(title: dialogTitle);
if (result == 'confirm') {
Get.toNamed('/messageDetail', arguments: message);
}
} else {
dialogTitle = '设备解绑提醒'.tr;
showUnShareMessageDialog(title: dialogTitle, mac: mac!);
}
}
}
}
}
} else {
if (Get.isRegistered<MessageController>()) {
@@ -203,18 +293,16 @@ void startMessagePolling(int ent_type) {
try {
if (ent_type == APPPackageType.MHT.code) {
if (Get.isRegistered<MhMessageController>()) {
final controller = Get.find<MhMessageController>();
await controller.getMessageStatus();
if (controller.model.system_message_read == 1) {
await controller.getMessageList("app_system");
final unhandledShareMessages =
controller.systemMessageList.where((item) {
final data = item['data'];
final id = item['_id']?.toString();
return data is Map &&
data['type'] == 'share' &&
(data['type'] == 'share' || data['type'] == 'unShare') &&
id != null &&
!_poppedMessageIds.contains(id) &&
(item['read_time'] == null);
@@ -223,6 +311,7 @@ void startMessagePolling(int ent_type) {
if (unhandledShareMessages.isNotEmpty) {
for (final message in unhandledShareMessages) {
final messageId = message['_id']?.toString();
if (messageId == null || _poppedMessageIds.contains(messageId))
continue;
@@ -231,19 +320,39 @@ void startMessagePolling(int ent_type) {
continue;
}
final data = message['data'] as Map<String, dynamic>;
final valList = data['val'] as List<dynamic>;
final messageType = data['type'];
// Extract device ID
final deviceIdEntry = valList.firstWhere(
(item) => item['k'] == '设备ID',
orElse: () => null,
);
final mac = deviceIdEntry?['v'] as String?;
_poppedMessageIds.add(messageId);
try {
await controller.updateMessageReadStatus(
Get.context!, messageId);
Get.context!, message['type'],
mid: messageId);
} catch (e) {
print("标记消息 $messageId 为已读失败: $e");
}
final result =
await showMessageConfirmDialog(title: '设备分享提醒'.tr);
if (result == 'confirm') {
Get.toNamed('/messageDetail', arguments: message);
String dialogTitle;
String msg;
if (messageType == 'share') {
dialogTitle = '设备分享提醒'.tr; // "Device Sharing Notification"
final result =
await showMessageConfirmDialog(title: dialogTitle);
if (result == 'confirm') {
Get.toNamed('/messageDetail', arguments: message);
}
} else {
dialogTitle = '设备解绑提醒'.tr;
showUnShareMessageDialog(title: dialogTitle, mac: mac!);
}
}
}