123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- import 'dart:async';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:vitalapp/architecture/defines.dart';
- import 'package:vitalapp/architecture/network_connectivity.dart';
- import 'package:vitalapp/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/global.dart';
- import 'package:vitalapp/helper/goto_helper.dart';
- import 'package:vitalapp/managers/interfaces/account.dart';
- import 'package:vitalapp/pages/controllers/home_nav_mixin.dart';
- import 'package:vitalapp/pages/home/models/menu.dart';
- import 'package:vitalapp/store/store.dart';
- import 'state.dart';
- class HomeController extends FControllerBase with HomeNavMixin {
- /// 仅支持在线模式的菜单路由
- static final _onlineOnlyMenuRouteNames = <String>[
- "/contract/package_list",
- "/check/form",
- ];
- static Widget _buildImgIcon(String assetName) {
- return ClipRect(
- child: SizedBox(
- height: 34,
- child: Image.asset(
- "assets/images/home/$assetName",
- width: 46,
- height: 46,
- fit: BoxFit.fitWidth,
- ),
- ),
- );
- }
- final state = HomeState();
- /// 当前选中路由
- int currentIndex = -1;
- List<HomeMenuItem> homeMenuItems = [
- HomeMenuItem(
- key: 'ZY',
- title: "主页",
- routeName: "/dashboard",
- iconData: Icons.home_outlined,
- ),
- HomeMenuItem(
- key: 'XJDA',
- title: "新建档案",
- routeName: "/patient/create",
- // TODO: 图addHealthRecord.png 不太合适,先层叠这样显示
- iconWidget: _PatientAddIconProxyWidget(
- baseIcon: _buildImgIcon('healthRecord.png'),
- ),
- ),
- HomeMenuItem(
- key: 'JKDA',
- title: "健康档案",
- routeName: "/patient/detail",
- iconWidget: _buildImgIcon('healthRecord.png'),
- ),
- HomeMenuItem(
- key: 'JMLB',
- title: "居民列表",
- routeName: "/patient/list",
- iconWidget: _buildImgIcon('patientList.png'),
- ),
- HomeMenuItem(
- key: 'YSQY',
- title: "医生签约",
- routeName: "/contract/package_list",
- iconWidget: _buildImgIcon('doctorSigning.png'),
- ),
- HomeMenuItem(
- key: 'JKTJ',
- title: "健康体检",
- routeName: "/check/form",
- iconWidget: _buildImgIcon('healthCheckup.png'),
- ),
- HomeMenuItem(
- key: 'RQSF',
- title: "人群随访",
- routeName: "/check/follow_up",
- iconWidget: _buildImgIcon('populationFollowUp.png'),
- ),
- HomeMenuItem(
- key: 'JKJC',
- title: "健康检测",
- routeName: "/medical",
- iconWidget: _buildImgIcon('diagnosisDisplay.png'),
- isSelected: true,
- ),
- HomeMenuItem(
- title: "中医体质",
- routeName: "/TraditionalChineseMedicineConstitution",
- key: "TZBS",
- iconWidget: _buildImgIcon("medicineConstitution.png"),
- isSelected: true,
- ),
- HomeMenuItem(
- key: 'SZZX',
- title: "设置中心",
- routeName: "/settings",
- iconData: Icons.settings,
- ),
- ];
- /// 登出
- Future<void> logOut() async {
- final result = await Get.find<IAccountManager>().logout();
- if (result) {
- Get.offAllNamed("/login");
- }
- }
- Future<void> changeMedical() async {
- try {
- Get.offAllNamed("/medical", id: 1001);
- } catch (e) {}
- }
- void onlineChanged(_, bool isOnline) {
- state.isOnline = isOnline;
- }
- @override
- void onInit() {
- initMenus();
- super.onInit();
- }
- initAddListener() {
- netChecker.onlineChangedEvent.addListener(onlineChanged);
- }
- netCheckerRemoveListener() {
- netChecker.onlineChangedEvent.removeListener(onlineChanged);
- }
- /// 切换活动菜单
- void switchActiveMenu(HomeMenuItem data) async {
- if (!kIsOnline) {
- // 无网络时,根据仅在线支持的菜单名单判断,进行阻断和提示
- if (_onlineOnlyMenuRouteNames.contains(data.routeName)) {
- PromptBox.toast("请检查网络连接");
- return;
- }
- }
- if (state.currentSelectMenu != data.routeName) {
- switchNavByName(data.routeName);
- }
- }
- void switchNavByName(String name, [Map? patientInfo]) {
- state.currentSelectMenu = name;
- NavGotoHelper.goto(name, patientInfo);
- }
- void initMenus() {
- state.menuItems = [
- // HomeMenuItem(
- // key: 'ZY',
- // title: "主页",
- // routeName: "/dashboard",
- // iconData: Icons.home_outlined,
- // isSelected: true,
- // ),
- HomeMenuItem(
- key: 'XJDA',
- title: "新建档案",
- routeName: "/patient/create",
- // TODO: 图addHealthRecord.png 不太合适,先层叠这样显示
- iconWidget: _PatientAddIconProxyWidget(
- baseIcon: _buildImgIcon('healthRecord.png'),
- ),
- ),
- HomeMenuItem(
- key: 'JMLB',
- title: "居民列表",
- routeName: "/patient/list",
- iconWidget: _buildImgIcon('patientList.png'),
- ),
- HomeMenuItem(
- key: 'JKJC',
- title: "健康检测",
- routeName: "/medical",
- iconWidget: _buildImgIcon('diagnosisDisplay.png'),
- isSelected: true,
- ),
- // HomeMenuItem(
- // title: "中医体质",
- // routeName: "/TraditionalChineseMedicineConstitution",
- // key: "TZBS",
- // iconWidget: _buildImgIcon("medicineConstitution.png"),
- // isSelected: true,
- // ),
- HomeMenuItem(
- key: 'SZZX',
- title: "设置中心",
- routeName: "/settings",
- iconData: Icons.settings,
- ),
- ];
- }
- void updateMenus() {
- if (Store.user.menuPermissionList?.isNotEmpty ?? false) {
- List<HomeMenuItem> menuItems = [];
- Store.user.menuPermissionList?.forEach((element) {
- for (var item in homeMenuItems) {
- if (item.key == element.code) {
- menuItems.add(item);
- }
- }
- });
- // menuItems.add(homeMenuItems.firstWhere((x) => x.key == "ZYTZ"));
- state.menuItems = menuItems;
- } else {
- // state.menuItems = homeMenuItems;
- state.menuItems = [
- // HomeMenuItem(
- // key: 'ZY',
- // title: "主页",
- // routeName: "/dashboard",
- // iconData: Icons.home_outlined,
- // isSelected: true,
- // ),
- HomeMenuItem(
- key: 'XJDA',
- title: "新建档案",
- routeName: "/patient/create",
- // TODO: 图addHealthRecord.png 不太合适,先层叠这样显示
- iconWidget: _PatientAddIconProxyWidget(
- baseIcon: _buildImgIcon('healthRecord.png'),
- ),
- ),
- HomeMenuItem(
- key: 'JMLB',
- title: "居民列表",
- routeName: "/patient/list",
- iconWidget: _buildImgIcon('patientList.png'),
- ),
- HomeMenuItem(
- key: 'JKDA',
- title: "健康档案",
- routeName: "/patient/detail",
- iconWidget: _buildImgIcon('healthRecord.png'),
- ),
- HomeMenuItem(
- key: 'JKJC',
- title: "健康检测",
- routeName: "/medical",
- iconWidget: _buildImgIcon('diagnosisDisplay.png'),
- ),
- HomeMenuItem(
- key: 'SZZX',
- title: "设置中心",
- routeName: "/settings",
- iconData: Icons.settings,
- ),
- ];
- }
- }
- }
- class _PatientAddIconProxyWidget extends StatelessWidget {
- final Widget baseIcon;
- const _PatientAddIconProxyWidget({
- Key? key,
- required this.baseIcon,
- }) : super(key: key);
- @override
- Widget build(BuildContext context) {
- return Stack(
- children: [
- baseIcon,
- const Positioned(
- right: 0,
- top: 0,
- child: Icon(
- Icons.add,
- size: 16,
- color: Colors.white,
- ),
- )
- ],
- );
- }
- }
|