站点样式
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -33,6 +35,9 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
final TextEditingController broadcastContentController = TextEditingController();
|
||||
final RxInt selectedTabIndex = 0.obs;
|
||||
|
||||
@override
|
||||
bool get listenLifecycleEvent => true;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
@@ -40,6 +45,39 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
customStartTime = DateTime.now();
|
||||
customEndTime = customStartTime!.add(const Duration(days: 1));
|
||||
renderData();
|
||||
_msgNotice(); // 红点消息
|
||||
startAutoRefresh();
|
||||
}
|
||||
|
||||
@override
|
||||
void onPaused() {
|
||||
stopAutoRefresh();
|
||||
super.onPaused();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
stopAutoRefresh();
|
||||
broadcastTitleController.dispose();
|
||||
broadcastContentController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
void startAutoRefresh() {
|
||||
// 先停止已存在的定时器,防止重复启动
|
||||
stopAutoRefresh();
|
||||
|
||||
// 创建一个每5分钟执行一次的周期性定时器
|
||||
_refreshTimer = Timer.periodic(const Duration(minutes: 5), (timer) {
|
||||
renderData();
|
||||
});
|
||||
}
|
||||
|
||||
///停止定时器的方法
|
||||
void stopAutoRefresh() {
|
||||
// 如果定时器存在并且是激活状态,就取消它
|
||||
_refreshTimer?.cancel();
|
||||
_refreshTimer = null; // 置为null,方便判断
|
||||
}
|
||||
|
||||
String name = "";
|
||||
@@ -56,6 +94,8 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
String jobTipStr = "";
|
||||
String jobDetailsStr = "";
|
||||
String jobId = "";
|
||||
Timer? _refreshTimer;
|
||||
bool isNotice = false;
|
||||
|
||||
Future<void> renderData() async {
|
||||
showLoading("加载中");
|
||||
@@ -65,11 +105,16 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
if (jobData != null) {
|
||||
final jobDataResult = BaseModel.fromJson(jobData.data);
|
||||
if (jobDataResult.code == 0) {
|
||||
try{
|
||||
jobId = jobDataResult.data["id"] ?? "";
|
||||
String endTime = jobDataResult.data["endTime"] ?? "";
|
||||
String beginTime = jobDataResult.data["beginTime"] ?? "";
|
||||
String hydStatus = jobDataResult.data["hydStatus"] ?? "";
|
||||
try {
|
||||
final List<dynamic> dataList = jobDataResult.data is List
|
||||
? jobDataResult.data
|
||||
: [];
|
||||
final firstJob = dataList[0];
|
||||
|
||||
jobId = firstJob["id"] ?? "";
|
||||
String endTime = firstJob["endTime"] ?? "";
|
||||
String beginTime = firstJob["beginTime"] ?? "";
|
||||
String hydStatus = firstJob["hydStatus"].toString() ?? "";
|
||||
String hydStatusStr = "";
|
||||
if (hydStatus == "0") {
|
||||
hydStatusStr = "营运中";
|
||||
@@ -81,28 +126,52 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
hydStatusStr = "暂停营业";
|
||||
}
|
||||
|
||||
jobDetailsStr = "当前站点已设置$beginTime-$endTime为$hydStatusStr状态";
|
||||
//现在的时间晚于开始时间就不显示文案
|
||||
bool isJobStarted = false;
|
||||
try {
|
||||
if (beginTime.isNotEmpty) {
|
||||
DateTime beginDateTime = DateTime.parse(beginTime);
|
||||
if (DateTime.now().isAfter(beginDateTime)) {
|
||||
isJobStarted = true;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
print("开始时间解析失败: $e");
|
||||
}
|
||||
if (isJobStarted) {
|
||||
jobTipStr = "";
|
||||
}
|
||||
|
||||
//结束时间
|
||||
if (endTime.isNotEmpty) {
|
||||
try {
|
||||
// 解析时间字符串
|
||||
DateTime endDateTime = DateTime.parse(endTime);
|
||||
DateTime beginDateTime = DateTime.parse(beginTime);
|
||||
DateTime now = DateTime.now(); // 2. 计算时间差 (endTime - now)
|
||||
DateTime now = DateTime.now(); //计算时间差 (endTime - now)
|
||||
Duration diff = endDateTime.difference(now);
|
||||
|
||||
// 计算小时数 (允许小数,例如 0.5)
|
||||
// inMinutes / 60 可以得到更精确的小数小时
|
||||
double hoursLeft = diff.inMinutes / 60.0;
|
||||
|
||||
if (hoursLeft > 0) {
|
||||
//计算当前时间-开始时间
|
||||
Duration startDiff = beginDateTime.difference(now);
|
||||
double hoursUntilStart = startDiff.inMinutes / 60.0;
|
||||
|
||||
|
||||
// 只有在【当前时间早于开始时间】且【剩余时间大于0】时才显示文案
|
||||
if (now.isBefore(beginDateTime) && hoursLeft > 0) {
|
||||
// 如果是正数,表示还有多久结束
|
||||
String timeTip = "${hoursLeft.toStringAsFixed(1)}小时后";
|
||||
String timeTip = " ${hoursUntilStart.toStringAsFixed(2)}小时后";
|
||||
jobTipStr = "$timeTip$hydStatusStr";
|
||||
} else {
|
||||
jobTipStr = "";
|
||||
}
|
||||
|
||||
jobDetailsStr =
|
||||
"当前站点已设置$beginTime至$endTime,共${hoursLeft.toStringAsFixed(2)}小时,为$hydStatusStr状态";
|
||||
|
||||
// 如果是处于非营运状态,自动回填开始和结束时间
|
||||
// 假设 customStartTime 是现在,customEndTime 是接口返回的结束时间
|
||||
customStartTime = beginDateTime;
|
||||
@@ -111,8 +180,10 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
print("时间解析失败: $e");
|
||||
}
|
||||
}
|
||||
}catch (e){
|
||||
Logger.d("解析失败: $e");
|
||||
} catch (e) {
|
||||
Logger.d("解析失败或者没返回信息: $e");
|
||||
|
||||
jobTipStr = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -141,7 +212,7 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
|
||||
var customerPriceTemp = result.data["customerPrice"];
|
||||
customerPrice =
|
||||
(customerPriceTemp != null && customerPriceTemp.toString().isNotEmpty)
|
||||
(customerPriceTemp != null && customerPriceTemp.toString().isNotEmpty)
|
||||
? "$customerPriceTemp"
|
||||
: "暂无价格";
|
||||
|
||||
@@ -177,6 +248,26 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _msgNotice() async {
|
||||
final Map<String, dynamic> requestData = {
|
||||
'appFlag': 1,
|
||||
'isRead': 1,
|
||||
'pageNum': 1,
|
||||
'pageSize': 5,
|
||||
};
|
||||
final response = await HttpService.to.get(
|
||||
'appointment/unread_notice/page',
|
||||
params: requestData,
|
||||
);
|
||||
if (response != null) {
|
||||
final result = BaseModel.fromJson(response.data);
|
||||
if (result.code == 0 && result.data != null) {
|
||||
String total = result.data["total"].toString();
|
||||
isNotice = int.parse(total) > 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void onOperationStatusChanged(String? newValue) {
|
||||
if (newValue != null) {
|
||||
selectedOperationStatus = newValue;
|
||||
@@ -282,6 +373,7 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
'appointment/station/updateStationStatus',
|
||||
data: {
|
||||
'hydrogenId': hydrogenId,
|
||||
'name': name,
|
||||
'siteStatus': selectedOperationStatus == "营运中"
|
||||
? "0"
|
||||
: selectedOperationStatus == "维修中"
|
||||
@@ -309,6 +401,9 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
var result = BaseModel.fromJson(responseData.data);
|
||||
if (result.code == 0) {
|
||||
showSuccessToast("保存成功,已同步通知对应司机");
|
||||
|
||||
//重新刷新页面
|
||||
renderData();
|
||||
}
|
||||
dismissLoading();
|
||||
} catch (e) {
|
||||
@@ -325,10 +420,7 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
|
||||
DialogX.to.showConfirmDialog(
|
||||
title: '当前设置详情',
|
||||
content: Text(
|
||||
jobDetailsStr,
|
||||
style: const TextStyle(fontSize: 15, height: 1.5),
|
||||
),
|
||||
content: Text(jobDetailsStr, style: const TextStyle(fontSize: 15, height: 1.5)),
|
||||
confirmText: '好的',
|
||||
cancelText: '取消设置',
|
||||
onCancel: () {
|
||||
@@ -342,9 +434,7 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
void _cancelJob() async {
|
||||
showLoading("正在取消...");
|
||||
try {
|
||||
var response = await HttpService.to.delete(
|
||||
'appointment/job/hyd/$jobId',
|
||||
);
|
||||
var response = await HttpService.to.delete('appointment/job/hyd/$jobId');
|
||||
|
||||
dismissLoading();
|
||||
if (response != null) {
|
||||
@@ -404,11 +494,4 @@ class ReservationController extends GetxController with BaseControllerMixin {
|
||||
await StorageService.to.clearLoginInfo();
|
||||
Get.offAll(() => LoginPage());
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
broadcastTitleController.dispose();
|
||||
broadcastContentController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user