diff --git a/lib/http/api.dart b/lib/http/api.dart index d9286e47..79b504f8 100644 --- a/lib/http/api.dart +++ b/lib/http/api.dart @@ -555,6 +555,10 @@ class Api { static const String messageSystemAPi = '${HttpString.messageBaseUrl}/x/sys-msg/query_unified_notify'; + /// 系统通知 个人 + static const String userMessageSystemAPi = + '${HttpString.messageBaseUrl}/x/sys-msg/query_user_notify'; + /// 系统通知标记已读 static const String systemMarkRead = '${HttpString.messageBaseUrl}/x/sys-msg/update_cursor'; diff --git a/lib/http/msg.dart b/lib/http/msg.dart index 2de9cd49..869b5a28 100644 --- a/lib/http/msg.dart +++ b/lib/http/msg.dart @@ -330,4 +330,27 @@ class MsgHttp { }; } } + + static Future messageSystemAccount() async { + var res = await Request().get(Api.userMessageSystemAPi, data: { + 'csrf': await Request.getCsrf(), + 'page_size': 20, + 'build': 0, + 'mobi_app': 'web', + }); + if (res.data['code'] == 0) { + try { + return { + 'status': true, + 'data': res.data['data']['system_notify_list'] + .map((e) => MessageSystemModel.fromJson(e)) + .toList(), + }; + } catch (err) { + return {'status': false, 'date': [], 'msg': err.toString()}; + } + } else { + return {'status': false, 'date': [], 'msg': res.data['message']}; + } + } } diff --git a/lib/models/msg/system.dart b/lib/models/msg/system.dart index 20427707..12b1ac77 100644 --- a/lib/models/msg/system.dart +++ b/lib/models/msg/system.dart @@ -5,7 +5,7 @@ class MessageSystemModel { int? cursor; int? type; String? title; - Map? content; + dynamic content; Source? source; String? timeAt; int? cardType; @@ -45,7 +45,9 @@ class MessageSystemModel { cursor: jsons["cursor"], type: jsons["type"], title: jsons["title"], - content: json.decode(jsons["content"]), + content: isValidJson(jsons["content"]) + ? json.decode(jsons["content"]) + : jsons["content"], source: Source.fromJson(jsons["source"]), timeAt: jsons["time_at"], cardType: jsons["card_type"], @@ -75,3 +77,12 @@ class Source { logo: json["logo"], ); } + +bool isValidJson(String str) { + try { + json.decode(str); + } catch (e) { + return false; + } + return true; +} diff --git a/lib/pages/message/system/controller.dart b/lib/pages/message/system/controller.dart index f63a659a..c4731120 100644 --- a/lib/pages/message/system/controller.dart +++ b/lib/pages/message/system/controller.dart @@ -1,3 +1,4 @@ +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:pilipala/http/msg.dart'; import 'package:pilipala/models/msg/system.dart'; @@ -5,18 +6,44 @@ import 'package:pilipala/models/msg/system.dart'; class MessageSystemController extends GetxController { RxList systemItems = [].obs; - Future queryMessageSystem({String type = 'init'}) async { - var res = await MsgHttp.messageSystem(); - if (res['status']) { - if (type == 'init') { - systemItems.value = res['data']; - } else { - systemItems.addAll(res['data']); - } + Future queryAndProcessMessages({String type = 'init'}) async { + // 并行调用两个接口 + var results = await Future.wait([ + queryMessageSystem(type: type), + queryMessageSystemAccount(type: type), + ]); + + // 对返回的数据进行处理 + var systemRes = results[0]; + var accountRes = results[1]; + + if (systemRes['status'] || accountRes['status']) { + // 处理返回的数据 + List combinedData = [ + ...systemRes['data'], + ...accountRes['data'] + ]; + combinedData.sort((a, b) => b.cursor!.compareTo(a.cursor!)); + systemItems.addAll(combinedData); + systemItems.refresh(); if (systemItems.isNotEmpty) { systemMarkRead(systemItems.first.cursor!); } + } else { + SmartDialog.showToast(systemRes['msg'] ?? accountRes['msg']); } + return systemRes; + } + + // 获取系统消息 + Future queryMessageSystem({String type = 'init'}) async { + var res = await MsgHttp.messageSystem(); + return res; + } + + // 获取系统消息 个人 + Future queryMessageSystemAccount({String type = 'init'}) async { + var res = await MsgHttp.messageSystemAccount(); return res; } diff --git a/lib/pages/message/system/view.dart b/lib/pages/message/system/view.dart index f7b94e5a..ee10b639 100644 --- a/lib/pages/message/system/view.dart +++ b/lib/pages/message/system/view.dart @@ -20,7 +20,7 @@ class _MessageSystemPageState extends State { @override void initState() { super.initState(); - _futureBuilderFuture = _messageSystemCtr.queryMessageSystem(); + _futureBuilderFuture = _messageSystemCtr.queryAndProcessMessages(); } @override @@ -31,7 +31,7 @@ class _MessageSystemPageState extends State { ), body: RefreshIndicator( onRefresh: () async { - await _messageSystemCtr.queryMessageSystem(); + await _messageSystemCtr.queryAndProcessMessages(); }, child: FutureBuilder( future: _futureBuilderFuture, @@ -42,7 +42,6 @@ class _MessageSystemPageState extends State { } if (snapshot.data['status']) { final systemItems = _messageSystemCtr.systemItems; - print(systemItems.length); return Obx( () => ListView.separated( controller: scrollController, @@ -115,7 +114,7 @@ class SystemItem extends StatelessWidget { style: TextStyle(color: Theme.of(context).colorScheme.outline), ), const SizedBox(height: 6), - Text(item.content!['web']), + Text(item.content is String ? item.content : item.content!['web']), ], ), );