diff --git a/ln_jq_app/lib/pages/c_page/reservation/controller.dart b/ln_jq_app/lib/pages/c_page/reservation/controller.dart index da3ac1e..e53e6c5 100644 --- a/ln_jq_app/lib/pages/c_page/reservation/controller.dart +++ b/ln_jq_app/lib/pages/c_page/reservation/controller.dart @@ -290,6 +290,9 @@ class C_ReservationController extends GetxController with BaseControllerMixin { ); } + // 用于存储上一次成功预约的信息 + ReservationModel? lastSuccessfulReservation; + /// 提交预约 void submitReservation() async { if (plateNumber.isEmpty) { @@ -301,10 +304,31 @@ class C_ReservationController extends GetxController with BaseControllerMixin { showToast("请输入需要预约的氢量"); return; } + double ampuntDouble = (double.tryParse(ampuntStr) ?? 0.0); + if (ampuntDouble == 0) { + showToast("请输入需要预约的氢量"); + return; + } + if (ampuntDouble > (double.tryParse(difference) ?? 0.0)) { + showToast('当前最大可预约氢量为${difference}(KG)'); + return; + } + if (selectedStationId.value == null || selectedStationId.value!.isEmpty) { showToast("请先选择加氢站"); return; } + + final dateStr = formattedDate; + final startTimeStr = '$dateStr ${formattedStartTime}:00'; + if (lastSuccessfulReservation != null && + lastSuccessfulReservation!.id == selectedStationId.value && + lastSuccessfulReservation!.hydAmount == ampuntStr && + lastSuccessfulReservation!.startTime == startTimeStr) { + showToast("请勿重复提交相同的预约"); + return; + } + // 将选择的日期和时间组合成一个完整的 DateTime 对象 final reservationStartDateTime = DateTime( selectedDate.value.year, @@ -355,6 +379,27 @@ class C_ReservationController extends GetxController with BaseControllerMixin { if (result.code == 0) { showSuccessToast("预约成功"); + // 预约成功后,保存当前预约信息 + lastSuccessfulReservation = ReservationModel( + id: selectedStationId.value!, + hydAmount: ampuntStr, + startTime: startTimeStr, + endTime: endTimeStr, + stationName: selectedStation.name, + plateNumber: '', + amount: '', + time: '', + contactPerson: '', + contactPhone: '', + contacts: '', + phone: '', + date: '', + state: '', + stateName: '', + addStatus: '', + addStatusName: '', + ); + //打开预约列表 Future.delayed(const Duration(milliseconds: 800), () { getReservationList(); @@ -581,12 +626,14 @@ class C_ReservationController extends GetxController with BaseControllerMixin { ); } - String leftHydrogen = "0"; String workEfficiency = "0"; String fillingWeight = "0"; String fillingTimes = "0"; String plateNumber = ""; String vin = ""; + String leftHydrogen = "0"; + num maxHydrogen = 0; + String difference = ""; @override bool get listenLifecycleEvent => true; @@ -607,6 +654,7 @@ class C_ReservationController extends GetxController with BaseControllerMixin { plateNumber = bean.plateNumber; vin = bean.vin; plateNumberController = TextEditingController(text: plateNumber); + maxHydrogen = bean.maxHydrogen; getCatinfo(); getJqinfo(); } @@ -665,6 +713,9 @@ class C_ReservationController extends GetxController with BaseControllerMixin { leftHydrogen = result.data["leftHydrogen"].toString(); workEfficiency = result.data["workEfficiency"].toString(); + final leftHydrogenNum = double.tryParse(leftHydrogen) ?? 0.0; + difference = (maxHydrogen - leftHydrogenNum).toStringAsFixed(2); + updateUi(); } catch (e) { } finally { diff --git a/ln_jq_app/lib/pages/c_page/reservation/view.dart b/ln_jq_app/lib/pages/c_page/reservation/view.dart index b2a45ae..7b8bfb9 100644 --- a/ln_jq_app/lib/pages/c_page/reservation/view.dart +++ b/ln_jq_app/lib/pages/c_page/reservation/view.dart @@ -270,9 +270,9 @@ class ReservationPage extends GetView { onTap: () => controller.pickTime(context, false), ), _buildTextField( - label: '预约氢量(kg)', + label: '预约氢量(KG)', controller: controller.amountController, - hint: '请输入氢量(kg)', + hint: '当前最大可预约氢量${controller.difference}(KG)', keyboardType: TextInputType.number, ), _buildTextField(