This commit is contained in:
wyf
2025-05-15 13:57:42 +08:00
parent fb5c3864a3
commit 75ddfca402
51 changed files with 2451 additions and 1233 deletions

View File

@@ -0,0 +1,59 @@
import 'package:ef/ef.dart';
class CalendarController extends GetControllerEx {
Rx<DateTime> displayedMonth = DateTime.now().obs;
Rx<DateTime?> selectedDate = Rx<DateTime?>(null);
List<DateTime> getDaysInMonth() {
DateTime firstDayOfMonth =
DateTime(displayedMonth.value.year, displayedMonth.value.month, 1);
DateTime lastDayOfMonth =
DateTime(displayedMonth.value.year, displayedMonth.value.month + 1, 0);
List<DateTime> days = [];
for (int i = 0; i < lastDayOfMonth.day; i++) {
days.add(firstDayOfMonth.add(Duration(days: i)));
}
return days;
}
List<List<DateTime>> getCalendarRows(List<DateTime> daysInMonth) {
List<List<DateTime>> calendarRows = [];
int firstWeekday = daysInMonth.first.weekday;
int emptyDays = (firstWeekday == 7 ? 6 : firstWeekday - 1);
List<DateTime> row = [];
for (int i = 0; i < emptyDays; i++) {
row.add(DateTime(0));
}
for (var day in daysInMonth) {
row.add(day);
if (row.length == 7) {
calendarRows.add(List.from(row));
row.clear();
}
}
if (row.isNotEmpty) {
while (row.length < 7) {
row.add(DateTime(0));
}
calendarRows.add(List.from(row));
}
return calendarRows;
}
void previousMonth() {
displayedMonth.value =
DateTime(displayedMonth.value.year, displayedMonth.value.month - 1, 1);
}
void nextMonth() {
displayedMonth.value =
DateTime(displayedMonth.value.year, displayedMonth.value.month + 1, 1);
}
void selectDate(DateTime date) {
selectedDate.value = date;
}
}

View File

@@ -22,9 +22,9 @@ class BlueteethBindModel {
double? singal = -70;
@JsonKey(ignore: true)
List<BleDeviceData>? devicelist = [];//蓝牙扫描
List<BleDeviceData>? devicelist = []; //蓝牙扫描
@JsonKey(ignore: true)
List<BleDeviceData>? betDevicelist = [];//网络状态
List<BleDeviceData>? betDevicelist = []; //网络状态
@JsonKey(ignore: true)
List? blelist = [];
@@ -67,6 +67,7 @@ class BlueteethBindController extends GetControllerEx<BlueteethBindModel> {
RxString scanMac = "".obs;
String? currentDeviceMac;
RxString? cid = "".obs ;//校准id
// 安全展示 TopSlideNotification
void safeShowNotification(String msg) {
@@ -162,7 +163,8 @@ class BlueteethBindController extends GetControllerEx<BlueteethBindModel> {
if (response.data['data'] != null && response.data['data'] is List) {
List<dynamic> responseList = response.data['data'];
Map<String, BleDeviceData> deviceMap = {
for (var d in model.devicelist!) if (d.mac != null) d.mac!: d
for (var d in model.devicelist!)
if (d.mac != null) d.mac!: d
};
List<String> slaveMacsToRemove = [];
@@ -190,7 +192,6 @@ class BlueteethBindController extends GetControllerEx<BlueteethBindModel> {
model.betDevicelist = [];
}
updateAll();
return res;
}
@@ -212,16 +213,16 @@ class BlueteethBindController extends GetControllerEx<BlueteethBindModel> {
String serviceApi = ServiceConstant.device_bind;
String queryUrl = "$serviceAddress$serviceName$serviceApi";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
var data = {
"deviceType": 1,
"mac": d.mac,
@@ -267,16 +268,16 @@ class BlueteethBindController extends GetControllerEx<BlueteethBindModel> {
String serviceApi = ServiceConstant.device_bind;
String queryUrl = "$serviceAddress$serviceName$serviceApi";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
var data = {
"deviceType": 1,
"mac": mac,

View File

@@ -52,17 +52,17 @@ class BodyDeviceController extends GetControllerEx<BodyDeviceModel> {
String serviceApi = ServiceConstant.device_list;
String queryUrl =
"${serviceAddress}${serviceName}${serviceApi}?bindNum=1";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
var response = await EasyDartModule.dio.get(queryUrl);
if (response != null) {
var responseData =
@@ -94,17 +94,17 @@ class BodyDeviceController extends GetControllerEx<BodyDeviceModel> {
String serviceApi = ServiceConstant.device_list;
String queryUrl =
"${serviceAddress}${serviceName}${serviceApi}?bindType=${model.type}${key != null ? '&key=$key' : ''}";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
var response = await EasyDartModule.dio.get(queryUrl);
if (response != null) {
var responseData =
@@ -137,16 +137,16 @@ class BodyDeviceController extends GetControllerEx<BodyDeviceModel> {
String serviceApi = ServiceConstant.device_bind;
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
final data = {
"mac": device['mac'],
};
@@ -205,16 +205,16 @@ class BodyDeviceController extends GetControllerEx<BodyDeviceModel> {
try {
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
}
var response = await EasyDartModule.dio.get(queryUrl);
if (response != null) {
var responseData = response.data is String
@@ -273,16 +273,16 @@ class BodyDeviceController extends GetControllerEx<BodyDeviceModel> {
String serviceApi = ServiceConstant.device_show;
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
var data = {
"id": device['_id'],
"show": !device['show'],

View File

@@ -29,4 +29,6 @@ class DeviceCalibrationController
RxInt bed_calibration = 0.obs; //0.未完成 1.完成
RxInt position_calibration = 0.obs; //0.未完成 1.完成
RxInt bed_type = 0.obs; //0.单人 1.双人
RxString tips = "开始校准".tr.obs;
bool complete = false; //校准完成
}

View File

@@ -85,6 +85,7 @@ class DeviceShareController extends GetControllerEx<DeviceShareModel> {
EasyDartModule.logger.info("分享设备");
DailyLogUtils.writeLog("分享设备");
try {
account.value = account.value.trim();
if (account.value == null || account.value.isEmpty) {
apiResponse.msg = "请输入手机号或者邮箱".tr;
return apiResponse;

View File

@@ -11,6 +11,7 @@ import 'package:json_annotation/json_annotation.dart';
import 'package:vbvs_app/common/color/ServiceConstant.dart';
import 'package:vbvs_app/common/color/app_uri_status.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/common/util/requestWithLog.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/time/countdown_controller.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
@@ -125,6 +126,7 @@ class LoginController extends GetControllerEx<LoginModel> {
apiResponse.msg = "其他手机登录页.请输入手机号".tr;
return apiResponse;
}
model.phone = model.phone!.trim();
if (!MyUtils.isValidPhoneNumber(model.phone!) &&
!MyUtils.isValidEmail(model.phone!)) {
apiResponse.msg = '其他手机登录页.不正确手机号'.tr;
@@ -135,16 +137,16 @@ class LoginController extends GetControllerEx<LoginModel> {
String serviceApi = ServiceConstant.send_code;
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
var data = {
"userName": model.phone,
};
@@ -201,7 +203,33 @@ class LoginController extends GetControllerEx<LoginModel> {
});
}
loginByWechatCode(String code) {}
Future<ApiResponse> loginByWechatCode(String code) async {
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.login;
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
String? language = "";
var data = {
"type": 2,
"password": code,
};
ApiResponse apiResponse = await requestWithLog(
logTitle: "微信登录",
method: MyHttpMethod.post,
queryUrl: queryUrl,
data: data);
if (apiResponse.code == HttpStatusCodes.ok) {
UserInfoController userInfoController = Get.find();
userInfoController.model.login = 1;
userInfoController.model.user = UserModel.fromJson(apiResponse.data);
String token = apiResponse.rawResponse.headers['token']!.first;
EasyDartModule.dio.token = token;
final box = GetStorage();
box.write('token', token); // 存储 token
box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息
}
return apiResponse;
}
//退出登录
// Future<void> logout() async {

View File

@@ -56,19 +56,9 @@ class PersonController extends GetControllerEx<PersonModel> {
RxInt gender = 1.obs;
RxString birthday = "".obs;
RxInt weight = 65.obs;
DateTime? dateTime; //选择时间
DateTime? dateTime = DateTime.now(); //选择时间
RxList diseaseList = [].obs;
//保存人员资料
// void savePersonData() {
// print("id->" + currentPersonId.value);
// print("name->" + name.value);
// print("gender->${gender.value}");
// print("生日->${birthday.value}");
// print("体重->${weight.value}");
// print("慢病->${selectedDiseaseIds.value}");
// }
Future<ApiResponse> savePersonData() async {
try {
ApiResponse apiResponse = ApiResponse(code: -1, msg: "蓝牙绑定.绑定失败".tr);
@@ -77,24 +67,24 @@ class PersonController extends GetControllerEx<PersonModel> {
String serviceApi = ServiceConstant.person_info;
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
} else {
queryUrl += "?lang=$language";
}
}
if (name.value.isEmpty) {
apiResponse.msg = "请输入姓名".tr;
return apiResponse;
}
if (birthday.value.isEmpty) {
apiResponse.msg = "请选择生日".tr;
return apiResponse;
}
// if (birthday.value.isEmpty) {
// apiResponse.msg = "请选择生日".tr;
// return apiResponse;
// }
if (weight.value == 0) {
apiResponse.msg = "请输入体重".tr;
return apiResponse;
@@ -104,7 +94,9 @@ class PersonController extends GetControllerEx<PersonModel> {
"id": currentPersonId.value,
"name": name.value,
"gender": gender.value,
"birthday": birthday.value,
"birthday": (birthday.value == null || birthday.value!.isEmpty)
? MyUtils.formatBindTime(dateTime!)
: birthday.value,
"weight": weight.value,
"disease": selectedDiseaseIds.value,
};
@@ -137,7 +129,7 @@ class PersonController extends GetControllerEx<PersonModel> {
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.person_info;
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
String? language = "";
if (languageController.selectLanguage != null) {
language = languageController.selectLanguage.value!.language_code;

View File

@@ -9,10 +9,14 @@ part of 'language_controller.dart';
LanguageModel _$LanguageModelFromJson(Map<String, dynamic> json) =>
LanguageModel()
..filename = json['filename'] as String?
..language_name = json['language_name'] as String?;
..language_name = json['language_name'] as String?
..selected = json['selected'] as bool?
..language_code = json['language_code'] as String?;
Map<String, dynamic> _$LanguageModelToJson(LanguageModel instance) =>
<String, dynamic>{
'filename': instance.filename,
'language_name': instance.language_name,
'selected': instance.selected,
'language_code': instance.language_code,
};

View File

@@ -0,0 +1,33 @@
import 'package:ef/ef.dart';
import 'package:json_annotation/json_annotation.dart';
part 'sleep_report_controller.g.dart'; // 由json_serializable自动生成的部分
@JsonSerializable()
class SleepReportModel {
int? type = 1; //报告类型 1:日报 2.周报 3.月报
SleepReportModel();
// 从JSON反序列化时的异常处理
factory SleepReportModel.fromJson(Map<String, dynamic> json) {
try {
return _$SleepReportModelFromJson(json);
} catch (e) {
// 在实际应用中,应该有更细致的异常处理策略和错误日志
return SleepReportModel(); // 或者返回一个带有错误信息的特定DeviceInfoModel实例
}
}
// 序列化为JSON时的异常处理
Map<String, dynamic> toJson() => _$SleepReportModelToJson(this);
}
class SleepReportController extends GetControllerEx<SleepReportModel> {
Rx<DateTime?> selectedDate = Rx<DateTime?>(null);
SleepReportController() {
attr = GetModel(SleepReportModel()).obs;
}
}

View File

@@ -0,0 +1,15 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'sleep_report_controller.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
SleepReportModel _$SleepReportModelFromJson(Map<String, dynamic> json) =>
SleepReportModel()..type = (json['type'] as num?)?.toInt();
Map<String, dynamic> _$SleepReportModelToJson(SleepReportModel instance) =>
<String, dynamic>{
'type': instance.type,
};