view.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vitalapp/components/button.dart';
  5. import 'package:vitalapp/components/side_nav/defines.dart';
  6. import 'package:vitalapp/components/side_nav/side_nav.dart';
  7. import 'package:vitalapp/pages/contract/package_list/widgets/capture_portrait.dart';
  8. import 'package:vitalapp/pages/contract/package_list/widgets/family_doctor_service_package.dart';
  9. import 'package:vitalapp/pages/contract/package_list/widgets/personal_information.dart';
  10. import 'package:vitalapp/pages/contract/package_list/widgets/service_information.dart';
  11. import 'package:vitalapp/pages/contract/package_list/widgets/signing_status.dart';
  12. import 'controller.dart';
  13. class ServicePackageContractPage
  14. extends GetView<ServicePackageContractController> {
  15. const ServicePackageContractPage({super.key});
  16. static const double labelSize = 20;
  17. @override
  18. Widget build(BuildContext context) {
  19. return Scaffold(
  20. backgroundColor: Colors.white,
  21. // appBar: VAppBar(
  22. // titleWidget: const Text(
  23. // "签约",
  24. // style: TextStyle(fontSize: 24),
  25. // ),
  26. // ),
  27. body: Stack(
  28. children: [
  29. VSideNavView(
  30. // navId: NavIds.CONTRACT,
  31. items: _buildItems(),
  32. ),
  33. Positioned(
  34. bottom: 8,
  35. left: 200,
  36. right: 200,
  37. child: Row(
  38. mainAxisAlignment: MainAxisAlignment.spaceAround,
  39. children: [
  40. Obx(
  41. () => controller.state.signingStatus == '签约'
  42. ? VButton(
  43. label: "下一步",
  44. onTap: () {
  45. Get.toNamed(
  46. "/contract/contract_template",
  47. parameters: {
  48. "templateCode": controller.templateCode,
  49. "patientInfo":
  50. json.encode(controller.patient.toJson()),
  51. "servicePackageCodes":
  52. controller.state.selectedServicePackageCode,
  53. "servicePackageNames":
  54. controller.state.selectedServicePackageName,
  55. "serviceTime":
  56. controller.state.serviceTime.toString(),
  57. "serviceStartDate": controller
  58. .state.serviceStartDate
  59. .toString(),
  60. "base64Image": controller.state.userImage ?? '',
  61. "notes": controller.state.notes,
  62. },
  63. );
  64. },
  65. )
  66. : VButton(
  67. label: "提交",
  68. onTap: () {
  69. controller.submitContract();
  70. },
  71. ),
  72. ),
  73. ],
  74. ),
  75. ),
  76. // const FloatingWindow(),
  77. ],
  78. ),
  79. );
  80. }
  81. List<VSideNavMenuItem> _buildItems() {
  82. final items = <VSideNavMenuItem>[];
  83. items.add(_buildCapturePortrait());
  84. items.add(_buildPersonalInformation());
  85. items.add(_buildServiceInformation());
  86. items.add(_buildFamilyDoctorServicePackage());
  87. items.add(_buildSigningStatusItem());
  88. return items;
  89. }
  90. VSideNavMenuItem _buildCapturePortrait() {
  91. return VSideNavMenuItem(
  92. title: "人像采集",
  93. icon: Icon(Icons.edit_document, color: Colors.grey.shade700),
  94. pageBuilder: (context) {
  95. return const CapturePortraitPage();
  96. },
  97. );
  98. }
  99. VSideNavMenuItem _buildServiceInformation() {
  100. return VSideNavMenuItem(
  101. title: "服务信息",
  102. icon: Icon(Icons.edit_document, color: Colors.grey.shade700),
  103. pageBuilder: (context) {
  104. return const ServiceInformationPage();
  105. },
  106. );
  107. }
  108. VSideNavMenuItem _buildFamilyDoctorServicePackage() {
  109. return VSideNavMenuItem(
  110. title: "家庭医生服务包",
  111. icon: Icon(Icons.edit_document, color: Colors.grey.shade700),
  112. pageBuilder: (context) {
  113. return const FamilyDoctorServicePackagePage();
  114. },
  115. );
  116. }
  117. VSideNavMenuItem _buildPersonalInformation() {
  118. return VSideNavMenuItem(
  119. title: "个人信息",
  120. icon: Icon(Icons.edit_document, color: Colors.grey.shade700),
  121. pageBuilder: (context) {
  122. return const PersonalInformationPage();
  123. },
  124. );
  125. }
  126. VSideNavMenuItem _buildSigningStatusItem() {
  127. return VSideNavMenuItem(
  128. title: "签约状态",
  129. isRequired: true,
  130. icon: Icon(Icons.edit_document, color: Colors.grey.shade700),
  131. pageBuilder: (context) {
  132. return const SigningStatusPage();
  133. },
  134. );
  135. }
  136. }