controller.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vitalapp/architecture/defines.dart';
  5. import 'package:vitalapp/architecture/utils/common_util.dart';
  6. import 'package:vitalapp/managers/interfaces/account.dart';
  7. import 'package:vitalapp/pages/controllers/home_nav_mixin.dart';
  8. import 'package:vitalapp/pages/home/models/menu.dart';
  9. import 'package:vitalapp/store/store.dart';
  10. import 'state.dart';
  11. class HomeController extends FControllerBase with HomeNavMixin {
  12. static Widget _buildImgIcon(String assetName) {
  13. return ClipRect(
  14. child: SizedBox(
  15. height: 34,
  16. child: Image.asset(
  17. "assets/images/home/$assetName",
  18. width: 46,
  19. height: 46,
  20. fit: BoxFit.fitWidth,
  21. ),
  22. ),
  23. );
  24. }
  25. final state = HomeState();
  26. /// 当前选中路由
  27. int currentIndex = -1;
  28. List<HomeMenuItem> homeMenuItems = [
  29. HomeMenuItem(
  30. key: 'ZY',
  31. title: "主页",
  32. routeName: "/dashboard",
  33. iconData: Icons.home_outlined,
  34. // isSelected: true,
  35. ),
  36. HomeMenuItem(
  37. key: 'JKDA',
  38. title: "健康档案",
  39. routeName: "/patient/detail",
  40. iconWidget: _buildImgIcon('healthRecord.png'),
  41. ),
  42. HomeMenuItem(
  43. key: 'YSQY',
  44. title: "医生签约",
  45. routeName: "/contract/package_list",
  46. iconWidget: _buildImgIcon('doctorSigning.png'),
  47. ),
  48. HomeMenuItem(
  49. key: 'JKTJ',
  50. title: "健康体检",
  51. routeName: "/check/form",
  52. iconWidget: _buildImgIcon('healthCheckup.png'),
  53. ),
  54. HomeMenuItem(
  55. key: 'RQSF',
  56. title: "人群随访",
  57. routeName: "/check/follow_up",
  58. iconWidget: _buildImgIcon('populationFollowUp.png'),
  59. ),
  60. HomeMenuItem(
  61. key: 'JKJC',
  62. title: "健康检测",
  63. routeName: "/medical",
  64. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  65. isSelected: true,
  66. ),
  67. HomeMenuItem(
  68. key: 'SZZX',
  69. title: "设置中心",
  70. routeName: "/settings",
  71. iconData: Icons.settings,
  72. ),
  73. ];
  74. /// 登出
  75. Future<void> logOut() async {
  76. final result = await Get.find<IAccountManager>().logout();
  77. if (result) {
  78. Get.offAllNamed("/login");
  79. }
  80. }
  81. @override
  82. void onInit() {
  83. initMenus();
  84. super.onInit();
  85. }
  86. /// 切换活动菜单
  87. void switchActiveMenu(HomeMenuItem data) {
  88. CommonUtil.throttle(() {
  89. switchNavByName(data.routeName);
  90. });
  91. // final index =
  92. // state.menuItems.indexWhere((e) => e.routeName == data.routeName);
  93. // if (index < 0) return;
  94. // final array = state.menuItems;
  95. // array.firstWhereOrNull((e) => e.isSelected)?.isSelected = false;
  96. // array[index].isSelected = true;
  97. // state.menuItems = array;
  98. // Get.offAllNamed(data.routeName, id: 1001);
  99. }
  100. void switchNavByName(String name) {
  101. final index = state.menuItems.indexWhere((e) => e.routeName == name);
  102. final array = state.menuItems;
  103. array.firstWhereOrNull((e) => e.isSelected)?.isSelected = false;
  104. array[index].isSelected = true;
  105. if (index < 0 || currentIndex == index) return;
  106. state.menuItems = array;
  107. currentIndex = index;
  108. Get.offAllNamed(name, id: 1001);
  109. }
  110. void initMenus() {
  111. state.menuItems = [
  112. // HomeMenuItem(
  113. // key: 'ZY',
  114. // title: "主页",
  115. // routeName: "/dashboard",
  116. // iconData: Icons.home_outlined,
  117. // isSelected: true,
  118. // ),
  119. HomeMenuItem(
  120. key: 'JKJC',
  121. title: "健康检测",
  122. routeName: "/medical",
  123. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  124. isSelected: true,
  125. ),
  126. HomeMenuItem(
  127. key: 'SZZX',
  128. title: "设置中心",
  129. routeName: "/settings",
  130. iconData: Icons.settings,
  131. ),
  132. ];
  133. }
  134. /// TODO 需要变更
  135. void updateMenus() {
  136. if (Store.user.menuPermissionList?.isNotEmpty ?? false) {
  137. List<HomeMenuItem> menuItems = [];
  138. print(Store.user.menuPermissionList);
  139. Store.user.menuPermissionList?.forEach((element) {
  140. print(element.toJson());
  141. for (var item in homeMenuItems) {
  142. if (item.key == element.code) {
  143. menuItems.add(item);
  144. }
  145. }
  146. });
  147. state.menuItems = menuItems;
  148. } else {
  149. // state.menuItems = homeMenuItems;
  150. state.menuItems = [
  151. // HomeMenuItem(
  152. // key: 'ZY',
  153. // title: "主页",
  154. // routeName: "/dashboard",
  155. // iconData: Icons.home_outlined,
  156. // isSelected: true,
  157. // ),
  158. HomeMenuItem(
  159. key: 'JKJC',
  160. title: "健康检测",
  161. routeName: "/medical",
  162. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  163. ),
  164. HomeMenuItem(
  165. key: 'SZZX',
  166. title: "设置中心",
  167. routeName: "/settings",
  168. iconData: Icons.settings,
  169. ),
  170. ];
  171. }
  172. }
  173. }