123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:intl/intl.dart';
- import 'package:vitalapp/components/table/table_column.dart';
- import 'package:vitalapp/pages/medical_checkup_station/appointment/controller.dart';
- import 'package:vitalapp/pages/medical_checkup_station/appointment/state/list.dart';
- import 'package:vitalapp/pages/medical_checkup_station/appointment/widgets/medical_examiner.dart';
- import 'package:vitalapp/pages/medical_checkup_station/appointment/widgets/share_qr_code.dart';
- import '../widgets/form.dart';
- class AppointmentListController {
- final state = ListState();
- late final AppointmentController appointmentController;
- AppointmentListController(AppointmentController controller) {
- appointmentController = controller;
- }
- Future<void> getHealthExamBookingPageAsync({
- int? pageSize = 10,
- int? pageIndex = 1,
- String? keyword = "",
- }) async {
- appointmentController.tableLoading = true;
- appointmentController.currPageIndex = pageIndex!;
- var result = await appointmentController.appointmentManager
- .getHealthExamBookingPageAsync(
- pageSize: pageSize,
- pageIndex: pageIndex,
- keyword: keyword,
- );
- List<AppointmentModel> _appointmentModelList = [];
- if (result?.pageData != null) {
- for (HealthExamBookingDTO i in result!.pageData!) {
- _appointmentModelList.add(
- AppointmentModel(
- appointmentAddress: i.location ?? '',
- appointmentObject: i.subject,
- appointmentDescription: i.description,
- appointmentName: i.name ?? '',
- appointmentStartTime: i.startDate?.toLocal() ?? DateTime.now(),
- appointmentEndTime: i.endDate?.toLocal() ?? DateTime.now(),
- appointmentCode: i.code,
- appointmentExamItems: i.examItems,
- appointPersons: i.persons,
- ),
- );
- }
- appointmentController.appointmentModelListLength = result.totalCount;
- }
- appointmentController.appointmentModelList = _appointmentModelList;
- appointmentController.tableLoading = false;
- appointmentController.update(["appointment_table"]);
- appointmentController.update(["appointment_table_pagination"]);
- }
- /// 登记列表表头
- List<TableColumn<AppointmentModel>> buildTableColumns() {
- var textStyle = TextStyle(
- fontSize: 16,
- overflow: TextOverflow.ellipsis,
- );
- return <TableColumn<AppointmentModel>>[
- TableColumn<AppointmentModel>(
- headerText: "体检名称",
- maxWidth: 150,
- render: (rowData, index) => Container(
- padding: const EdgeInsets.symmetric(vertical: 16),
- child: Text(
- rowData.appointmentName,
- style: textStyle,
- ),
- ),
- ),
- TableColumn<AppointmentModel>(
- headerText: "体检地点",
- maxWidth: 160,
- render: (rowData, index) => Text(
- rowData.appointmentAddress,
- style: textStyle,
- ),
- ),
- TableColumn<AppointmentModel>(
- headerText: "体检时间",
- maxWidth: 200,
- render: (rowData, index) => Text(
- rowData.appointmentStartTime != null
- ? getStartAndEndTime(
- rowData.appointmentStartTime,
- rowData.appointmentEndTime,
- )
- : "",
- style: textStyle,
- ),
- ),
- TableColumn<AppointmentModel>(
- headerText: "体检对象",
- maxWidth: 160,
- render: (rowData, index) => Text(
- rowData.appointmentObject ?? "",
- style: textStyle,
- ),
- ),
- TableColumn<AppointmentModel>(
- headerText: "包含项目",
- // maxWidth: 150,
- render: (rowData, index) {
- List<String> examItems = [];
- rowData.appointmentExamItems?.forEach((element) {
- examItems.add(element.name!);
- });
- return Text(
- examItems.join('、'),
- style: textStyle,
- );
- },
- ),
- TableColumn<AppointmentModel>(
- headerText: "预约人数",
- // maxWidth: 150,
- render: (rowData, index) {
- return Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- TextButton(
- onPressed: () async {
- AppointmentModel appointment = await appointmentController
- .detailController
- .getHealthExamBookingAsync(
- appointmentController
- .appointmentModelList[index].appointmentCode!,
- );
- Get.dialog(MedicalExaminer(
- examiner: appointment,
- ));
- },
- child: Text(
- "${rowData.appointPersons?.length ?? 0}",
- style: textStyle,
- ),
- ),
- ],
- );
- },
- ),
- TableColumn<AppointmentModel>(
- headerText: "操作",
- maxWidth: 150,
- render: (rowData, index) => Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- TextButton(
- onPressed: () async {
- AppointmentModel appointment = await appointmentController
- .detailController
- .getHealthExamBookingAsync(
- rowData.appointmentCode!,
- );
- Get.dialog(
- ShareQrCode(
- shareUrl: appointment.appointmentUrl!,
- ),
- );
- },
- child: Text(
- "分享",
- style: textStyle,
- ),
- ),
- TextButton(
- onPressed: () async {
- AppointmentModel appointment = await appointmentController
- .detailController
- .getHealthExamBookingAsync(
- rowData.appointmentCode!,
- );
- await Get.dialog<AppointmentModel>(
- AppointmentFormDialog(
- appointment: appointment,
- isEdit: true,
- ),
- barrierDismissible: false,
- );
- },
- child: Text(
- "编辑",
- style: textStyle,
- ),
- ),
- ],
- ),
- ),
- // TableColumn<AppointmentModel>(
- // headerText: "姓名",
- // maxWidth: 150,
- // render: (rowData, index) => const Text(
- // "",
- // style: TextStyle(
- // fontSize: 16,
- // ),
- // ),
- // ),
- ];
- }
- String getStartAndEndTime(DateTime? startTime, DateTime? endTime) {
- if (startTime == null) {
- startTime = DateTime.now();
- }
- if (endTime == null) {
- endTime = DateTime.now();
- }
- return DateFormat('yyyy-MM-dd HH:mm').format(startTime) +
- '-' +
- DateFormat('HH:mm').format(endTime);
- }
- }
|