list.dart 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:intl/intl.dart';
  5. import 'package:vitalapp/components/table/table_column.dart';
  6. import 'package:vitalapp/pages/medical_checkup_station/appointment/controller.dart';
  7. import 'package:vitalapp/pages/medical_checkup_station/appointment/state/list.dart';
  8. import 'package:vitalapp/pages/medical_checkup_station/appointment/widgets/medical_examiner.dart';
  9. import 'package:vitalapp/pages/medical_checkup_station/appointment/widgets/share_qr_code.dart';
  10. import '../widgets/form.dart';
  11. class AppointmentListController {
  12. final state = ListState();
  13. late final AppointmentController appointmentController;
  14. AppointmentListController(AppointmentController controller) {
  15. appointmentController = controller;
  16. }
  17. Future<void> getHealthExamBookingPageAsync({
  18. int? pageSize = 10,
  19. int? pageIndex = 1,
  20. String? keyword = "",
  21. }) async {
  22. appointmentController.tableLoading = true;
  23. appointmentController.currPageIndex = pageIndex!;
  24. var result = await appointmentController.appointmentManager
  25. .getHealthExamBookingPageAsync(
  26. pageSize: pageSize,
  27. pageIndex: pageIndex,
  28. keyword: keyword,
  29. );
  30. List<AppointmentModel> _appointmentModelList = [];
  31. if (result?.pageData != null) {
  32. for (HealthExamBookingDTO i in result!.pageData!) {
  33. _appointmentModelList.add(
  34. AppointmentModel(
  35. appointmentAddress: i.location ?? '',
  36. appointmentObject: i.subject,
  37. appointmentDescription: i.description,
  38. appointmentName: i.name ?? '',
  39. appointmentStartTime: i.startDate?.toLocal() ?? DateTime.now(),
  40. appointmentEndTime: i.endDate?.toLocal() ?? DateTime.now(),
  41. appointmentCode: i.code,
  42. appointmentExamItems: i.examItems,
  43. appointPersons: i.persons,
  44. ),
  45. );
  46. }
  47. appointmentController.appointmentModelListLength = result.totalCount;
  48. }
  49. appointmentController.appointmentModelList = _appointmentModelList;
  50. appointmentController.tableLoading = false;
  51. appointmentController.update(["appointment_table"]);
  52. appointmentController.update(["appointment_table_pagination"]);
  53. }
  54. /// 登记列表表头
  55. List<TableColumn<AppointmentModel>> buildTableColumns() {
  56. var textStyle = TextStyle(
  57. fontSize: 16,
  58. overflow: TextOverflow.ellipsis,
  59. );
  60. return <TableColumn<AppointmentModel>>[
  61. TableColumn<AppointmentModel>(
  62. headerText: "体检名称",
  63. maxWidth: 150,
  64. render: (rowData, index) => Container(
  65. padding: const EdgeInsets.symmetric(vertical: 16),
  66. child: Text(
  67. rowData.appointmentName,
  68. style: textStyle,
  69. ),
  70. ),
  71. ),
  72. TableColumn<AppointmentModel>(
  73. headerText: "体检地点",
  74. maxWidth: 160,
  75. render: (rowData, index) => Text(
  76. rowData.appointmentAddress,
  77. style: textStyle,
  78. ),
  79. ),
  80. TableColumn<AppointmentModel>(
  81. headerText: "体检时间",
  82. maxWidth: 200,
  83. render: (rowData, index) => Text(
  84. rowData.appointmentStartTime != null
  85. ? getStartAndEndTime(
  86. rowData.appointmentStartTime,
  87. rowData.appointmentEndTime,
  88. )
  89. : "",
  90. style: textStyle,
  91. ),
  92. ),
  93. TableColumn<AppointmentModel>(
  94. headerText: "体检对象",
  95. maxWidth: 160,
  96. render: (rowData, index) => Text(
  97. rowData.appointmentObject ?? "",
  98. style: textStyle,
  99. ),
  100. ),
  101. TableColumn<AppointmentModel>(
  102. headerText: "包含项目",
  103. // maxWidth: 150,
  104. render: (rowData, index) {
  105. List<String> examItems = [];
  106. rowData.appointmentExamItems?.forEach((element) {
  107. examItems.add(element.name!);
  108. });
  109. return Text(
  110. examItems.join('、'),
  111. style: textStyle,
  112. );
  113. },
  114. ),
  115. TableColumn<AppointmentModel>(
  116. headerText: "预约人数",
  117. // maxWidth: 150,
  118. render: (rowData, index) {
  119. return Row(
  120. mainAxisAlignment: MainAxisAlignment.center,
  121. children: [
  122. TextButton(
  123. onPressed: () async {
  124. AppointmentModel appointment = await appointmentController
  125. .detailController
  126. .getHealthExamBookingAsync(
  127. appointmentController
  128. .appointmentModelList[index].appointmentCode!,
  129. );
  130. Get.dialog(MedicalExaminer(
  131. examiner: appointment,
  132. ));
  133. },
  134. child: Text(
  135. "${rowData.appointPersons?.length ?? 0}",
  136. style: textStyle,
  137. ),
  138. ),
  139. ],
  140. );
  141. },
  142. ),
  143. TableColumn<AppointmentModel>(
  144. headerText: "操作",
  145. maxWidth: 150,
  146. render: (rowData, index) => Row(
  147. mainAxisAlignment: MainAxisAlignment.center,
  148. children: [
  149. TextButton(
  150. onPressed: () async {
  151. AppointmentModel appointment = await appointmentController
  152. .detailController
  153. .getHealthExamBookingAsync(
  154. rowData.appointmentCode!,
  155. );
  156. Get.dialog(
  157. ShareQrCode(
  158. shareUrl: appointment.appointmentUrl!,
  159. ),
  160. );
  161. },
  162. child: Text(
  163. "分享",
  164. style: textStyle,
  165. ),
  166. ),
  167. TextButton(
  168. onPressed: () async {
  169. AppointmentModel appointment = await appointmentController
  170. .detailController
  171. .getHealthExamBookingAsync(
  172. rowData.appointmentCode!,
  173. );
  174. await Get.dialog<AppointmentModel>(
  175. AppointmentFormDialog(
  176. appointment: appointment,
  177. isEdit: true,
  178. ),
  179. barrierDismissible: false,
  180. );
  181. },
  182. child: Text(
  183. "编辑",
  184. style: textStyle,
  185. ),
  186. ),
  187. ],
  188. ),
  189. ),
  190. // TableColumn<AppointmentModel>(
  191. // headerText: "姓名",
  192. // maxWidth: 150,
  193. // render: (rowData, index) => const Text(
  194. // "",
  195. // style: TextStyle(
  196. // fontSize: 16,
  197. // ),
  198. // ),
  199. // ),
  200. ];
  201. }
  202. String getStartAndEndTime(DateTime? startTime, DateTime? endTime) {
  203. if (startTime == null) {
  204. startTime = DateTime.now();
  205. }
  206. if (endTime == null) {
  207. endTime = DateTime.now();
  208. }
  209. return DateFormat('yyyy-MM-dd HH:mm').format(startTime) +
  210. '-' +
  211. DateFormat('HH:mm').format(endTime);
  212. }
  213. }