announcement.dart 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /// 公告列表项 — POST uc/announcement/page 返回的 content 数组元素
  2. class AnnouncementContent {
  3. final String id;
  4. final String title;
  5. final String content;
  6. final String createTime;
  7. final int announcementClassification;
  8. final String imgUrl;
  9. final bool isShow;
  10. final String isTop;
  11. final int sort;
  12. const AnnouncementContent({
  13. this.id = '',
  14. this.title = '',
  15. this.content = '',
  16. this.createTime = '',
  17. this.announcementClassification = 0,
  18. this.imgUrl = '',
  19. this.isShow = true,
  20. this.isTop = '',
  21. this.sort = 0,
  22. });
  23. factory AnnouncementContent.fromJson(Map<String, dynamic> json) {
  24. return AnnouncementContent(
  25. id: json['id']?.toString() ?? '',
  26. title: json['title']?.toString() ?? '',
  27. content: json['content']?.toString() ?? '',
  28. createTime: json['createTime']?.toString() ?? '',
  29. announcementClassification:
  30. json['announcementClassification'] as int? ?? 0,
  31. imgUrl: json['imgUrl']?.toString() ?? '',
  32. isShow: json['isShow'] as bool? ?? true,
  33. isTop: json['isTop']?.toString() ?? '',
  34. sort: json['sort'] as int? ?? 0,
  35. );
  36. }
  37. }
  38. /// 系统弹窗公告 — GET uc/announcement/system / GET uc/announcement/popups
  39. class AnnouncementBean {
  40. final String id;
  41. final String title;
  42. final String content;
  43. final String createTime;
  44. final String imgUrl;
  45. final bool isShow;
  46. final String isTop;
  47. final int sort;
  48. final int announcementClassification;
  49. const AnnouncementBean({
  50. this.id = '',
  51. this.title = '',
  52. this.content = '',
  53. this.createTime = '',
  54. this.imgUrl = '',
  55. this.isShow = false,
  56. this.isTop = '',
  57. this.sort = 0,
  58. this.announcementClassification = 0,
  59. });
  60. factory AnnouncementBean.fromJson(Map<String, dynamic> json) {
  61. return AnnouncementBean(
  62. id: json['id']?.toString() ?? '',
  63. title: json['title']?.toString() ?? '',
  64. content: json['content']?.toString() ?? '',
  65. createTime: json['createTime']?.toString() ?? '',
  66. imgUrl: json['imgUrl']?.toString() ?? '',
  67. isShow: json['isShow'] as bool? ?? false,
  68. isTop: json['isTop']?.toString() ?? '',
  69. sort: json['sort'] as int? ?? 0,
  70. announcementClassification:
  71. json['announcementClassification'] as int? ?? 0,
  72. );
  73. }
  74. }
  75. /// 公告详情 / 帮助详情 共用模型 — GET uc/announcement/{id} 或 POST uc/ancillary/more/help/detail
  76. class WebInfoContent {
  77. final String id;
  78. final String title;
  79. final String content;
  80. final String createTime;
  81. final String imgUrl;
  82. final String isTop;
  83. const WebInfoContent({
  84. this.id = '',
  85. this.title = '',
  86. this.content = '',
  87. this.createTime = '',
  88. this.imgUrl = '',
  89. this.isTop = '',
  90. });
  91. /// isTop == "0" 表示置顶
  92. bool get isPinned => isTop == '0';
  93. factory WebInfoContent.fromJson(Map<String, dynamic> json) {
  94. return WebInfoContent(
  95. id: json['id']?.toString() ?? '',
  96. title: json['title']?.toString() ?? '',
  97. content: json['content']?.toString() ?? '',
  98. createTime: json['createTime']?.toString() ?? '',
  99. imgUrl: json['imgUrl']?.toString() ?? '',
  100. isTop: json['isTop']?.toString() ?? '',
  101. );
  102. }
  103. }
  104. /// 帮助中心分组 — POST uc/ancillary/more/help
  105. ///
  106. /// 分组标题:服务端随请求体/Header 中的 `lang` 返回本地化文案。
  107. /// JSON 字段名为历史遗留:[titleCN] 实为「当前 lang 下的标题」(日/韩/英等均可能在此;`lang=en_US` 时常与 [titleEN] 相同)。
  108. class HelpInfo {
  109. final String cate;
  110. final String titleEN;
  111. final String titleCN;
  112. final List<WebInfoContent> items;
  113. const HelpInfo({
  114. this.cate = '',
  115. this.titleEN = '',
  116. this.titleCN = '',
  117. this.items = const [],
  118. });
  119. /// 列表展示用标题(与 Web 一致:优先本地化字段 [titleCN])。
  120. String get localizedGroupTitle =>
  121. titleCN.isNotEmpty ? titleCN : titleEN;
  122. factory HelpInfo.fromJson(Map<String, dynamic> json) {
  123. final contentList = json['content'];
  124. return HelpInfo(
  125. cate: json['cate']?.toString() ?? '',
  126. titleEN: json['titleEN']?.toString() ?? '',
  127. titleCN: json['titleCN']?.toString() ?? '',
  128. items: contentList is List
  129. ? contentList
  130. .whereType<Map<String, dynamic>>()
  131. .map((e) => WebInfoContent.fromJson(e))
  132. .toList()
  133. : const [],
  134. );
  135. }
  136. }