375 lines
14 KiB
Dart
375 lines
14 KiB
Dart
import 'package:EasyDartModule/EasyDartModule.dart';
|
||
import 'package:dio/dio.dart' as dio;
|
||
import 'package:ef/ef.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutterflow_ui/flutterflow_ui.dart';
|
||
import 'package:fluwx/fluwx.dart';
|
||
import 'package:get_storage/get_storage.dart';
|
||
import 'package:img_picker/img_picker.dart';
|
||
import 'package:json_annotation/json_annotation.dart';
|
||
import 'package:vbvs_app/common/color/ServiceConstant.dart';
|
||
import 'package:vbvs_app/common/color/appConstants.dart';
|
||
import 'package:vbvs_app/common/color/app_uri_status.dart';
|
||
import 'package:vbvs_app/common/util/DailyLogUtils.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/device/body_device_controller.dart';
|
||
import 'package:vbvs_app/controller/home/home_controller.dart';
|
||
import 'package:vbvs_app/controller/login/login_controller.dart';
|
||
import 'package:vbvs_app/controller/message/message_controller.dart';
|
||
import 'package:vbvs_app/controller/time/countdown_controller.dart';
|
||
import 'package:vbvs_app/enum/APPPackageType.dart';
|
||
import 'package:vbvs_app/model/api_response.dart';
|
||
import 'package:vbvs_app/model/user_data.dart';
|
||
import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart';
|
||
import 'package:vbvs_app/pages/mh_page/user/controller/mht_login_controller.dart';
|
||
|
||
part 'user_info_controller.g.dart';
|
||
|
||
@JsonSerializable()
|
||
class UserInfoModel {
|
||
int? message = 0; //消息数量
|
||
|
||
UserModel? user; //用户信息
|
||
String? token; //token值
|
||
String? runSystem; //运行系统
|
||
String? phoneVersion; //手机版本
|
||
String? deviceId; //手机唯一
|
||
String? deviceModel; //设备可见型号(如 "iPhone","iPad")
|
||
String? appVersion; //app版本信息
|
||
|
||
@JsonKey(ignore: true)
|
||
// Session? superbase_session;
|
||
@JsonKey(ignore: true)
|
||
// User? superbase_user;
|
||
|
||
String? img_bucket = 'user';
|
||
int? login = 0; //0未登录 1 登录
|
||
|
||
int? deviceBindNum = 0; //绑定设备数量
|
||
|
||
int? loginPhone = 0; //0 本机号码 1其他手机号
|
||
|
||
// String? nickname; //修改昵称
|
||
// String? avatar; //修改头像地址
|
||
bool isProgrammaticPop = false; // 标记变量
|
||
|
||
UserInfoModel();
|
||
static UserInfoModel fromJson(Map<String, dynamic> json) =>
|
||
_$UserInfoModelFromJson(json);
|
||
Map<String, dynamic> toJson() => _$UserInfoModelToJson(this);
|
||
}
|
||
|
||
class UserInfoController extends GetControllerEx<UserInfoModel> {
|
||
// 初始化实例
|
||
UserInfoController() {
|
||
attr = GetModel(UserInfoModel()).obs;
|
||
}
|
||
|
||
RxDouble textHalfWidth = 0.0.obs;
|
||
List device_bind_status = [];
|
||
int device_bind_flag = 0; //0。未初始化 1.已初始化
|
||
int initLocationpermission = 0; //未初始化
|
||
FluwxCancelable? fluwxCancelable;
|
||
final Fluwx fluwx = Fluwx();
|
||
|
||
Future<ApiResponse> uploadImg() async {
|
||
EasyDartModule.logger.info("请求上传图片");
|
||
DailyLogUtils.writeLog("请求上传图片");
|
||
final ImagePicker picker = ImagePicker();
|
||
final XFile? image = await picker.pickImage(source: ImageSource.gallery);
|
||
try {
|
||
ApiResponse apiResponse = ApiResponse(code: -1, msg: "头像上传失败".tr);
|
||
if (image != null) {
|
||
int fileSize = await image.length(); // 获取图片大小,单位为字节
|
||
if (fileSize > 1048576 * 5) {
|
||
apiResponse.msg = "头像限制".tr;
|
||
return apiResponse;
|
||
}
|
||
String serviceAddress = ServiceConstant.service_address;
|
||
String serviceName = ServiceConstant.server_service;
|
||
String serviceApi = ServiceConstant.upload_file;
|
||
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";
|
||
}
|
||
}
|
||
var formData = dio.FormData.fromMap({
|
||
"type": 1,
|
||
"file": await dio.MultipartFile.fromFile(
|
||
image.path, // 确保 image 是 File 类型
|
||
filename: image.path.split('/').last,
|
||
),
|
||
});
|
||
var response = await EasyDartModule.dio.post(queryUrl, data: formData);
|
||
if (response != null) {
|
||
var responseData = response.data is String
|
||
? jsonDecode(response.data)
|
||
: response.data;
|
||
ApiResponse res =
|
||
ApiResponse.fromJson(responseData, (object) => object);
|
||
MyUtils.formatResponse(res, "上传成功".tr, "头像上传失败".tr);
|
||
model.user!.tmpHead = res.data['path'];
|
||
updateAll();
|
||
return res;
|
||
} else {
|
||
return ApiResponse(code: -1, msg: "服务器失败".tr);
|
||
}
|
||
} else {
|
||
apiResponse.msg = "未选择图片".tr;
|
||
return apiResponse;
|
||
}
|
||
} catch (e) {
|
||
EasyDartModule.logger.error("上传图片失败->$e");
|
||
DailyLogUtils.writeError("上传图片失败->$e");
|
||
return ApiResponse(code: -1, msg: "服务器失败".tr);
|
||
}
|
||
}
|
||
|
||
//更新用户信息
|
||
Future<ApiResponse> updateData({
|
||
String? phone,
|
||
String? email,
|
||
String? code,
|
||
}) async {
|
||
EasyDartModule.logger.info("更新用户资料");
|
||
DailyLogUtils.writeLog("更新用户资料");
|
||
try {
|
||
LoginController loginController = Get.find();
|
||
ApiResponse apiResponse = ApiResponse(code: -1, msg: "保存失败".tr);
|
||
UserModel user = model.user!;
|
||
final bool hasContactUpdate = (phone != null && phone.isNotEmpty) ||
|
||
(email != null && email.isNotEmpty);
|
||
|
||
/// 只有在【没有更新 phone/email】时,才要求昵称不为空
|
||
if (!hasContactUpdate &&
|
||
(user.tmpNickName == null || user.tmpNickName!.isEmpty)) {
|
||
apiResponse.msg = "昵称为空".tr;
|
||
return apiResponse;
|
||
}
|
||
if ((phone != null && phone.isNotEmpty) ||
|
||
(email != null && email.isNotEmpty)) {
|
||
if (loginController.model.updateCode == null ||
|
||
loginController.model.updateCode!.isEmpty) {
|
||
apiResponse.msg = "请输验证码".tr;
|
||
return apiResponse;
|
||
}
|
||
}
|
||
String serviceAddress = ServiceConstant.service_address;
|
||
String serviceName = ServiceConstant.server_service;
|
||
String serviceApi = ServiceConstant.user_info;
|
||
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
|
||
String? language = "";
|
||
if (AppConstants().ent_type == APPPackageType.MHT.code) {
|
||
if (mhLanguageController.selectLanguage != null) {
|
||
language = mhLanguageController.selectLanguage.value!.language_code;
|
||
}
|
||
} else {
|
||
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 = {
|
||
"nickName": user.tmpNickName,
|
||
if (user.tmpHead != null && user.tmpHead!.isNotEmpty)
|
||
"avatar": user.tmpHead,
|
||
if (phone != null && phone.isNotEmpty) "phone": phone,
|
||
if (email != null && email.isNotEmpty) "email": email,
|
||
if (loginController.model.updateCode != null &&
|
||
loginController.model.updateCode!.isNotEmpty)
|
||
"verify": loginController.model.updateCode,
|
||
if (code != null && code.isNotEmpty) "wxCode": code,
|
||
if (code != null && code.isNotEmpty) "khCode": "theh",
|
||
"merge": true,
|
||
};
|
||
var response =
|
||
await EasyDartModule.dio.put(queryUrl, data: jsonEncode(data));
|
||
if (apiResponse != null) {
|
||
var responseData =
|
||
response.data is String ? jsonDecode(response.data) : response.data;
|
||
ApiResponse res =
|
||
ApiResponse.fromJson(responseData, (object) => object);
|
||
MyUtils.formatResponse(res, "保存成功".tr, "保存失败".tr);
|
||
await getUserInfo();
|
||
model.user!.tmpNickName = model.user!.nick_name;
|
||
model.user!.tmpHead = model.user!.avatar;
|
||
updateAll();
|
||
return res;
|
||
} else {
|
||
return ApiResponse(code: -1, msg: "服务器失败".tr);
|
||
}
|
||
} catch (e) {
|
||
EasyDartModule.logger.info("更新用户资料失败->$e");
|
||
DailyLogUtils.writeLog("更新用户资料失败->$e");
|
||
return ApiResponse(code: -1, msg: "服务器失败".tr);
|
||
}
|
||
}
|
||
|
||
//查询用户信息
|
||
Future<ApiResponse> getUserInfo() async {
|
||
EasyDartModule.logger.info("查询用户资料");
|
||
DailyLogUtils.writeLog("查询用户资料");
|
||
try {
|
||
ApiResponse apiResponse = ApiResponse(code: -1, msg: "查询失败".tr);
|
||
String serviceAddress = ServiceConstant.service_address;
|
||
String serviceName = ServiceConstant.server_service;
|
||
String serviceApi = ServiceConstant.user_info;
|
||
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
|
||
String? language = "";
|
||
if (AppConstants().ent_type == APPPackageType.MHT.code) {
|
||
if (mhLanguageController.selectLanguage != null) {
|
||
language = mhLanguageController.selectLanguage.value!.language_code;
|
||
}
|
||
} else {
|
||
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 ? jsonDecode(response.data) : response.data;
|
||
ApiResponse res =
|
||
ApiResponse.fromJson(responseData, (object) => object);
|
||
MyUtils.formatResponse(apiResponse, "保存成功".tr, "保存失败".tr);
|
||
if (res.code == HttpStatusCodes.ok) {
|
||
UserInfoController userInfoController = Get.find();
|
||
if (res.data['test'] != null && res.data['test'] == true) {
|
||
AppConstants.is_test_account = true;
|
||
} else {
|
||
AppConstants.is_test_account = false;
|
||
}
|
||
userInfoController.model.user = UserModel.fromJson(res.data);
|
||
final box = GetStorage();
|
||
box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息
|
||
userInfoController.updateAll();
|
||
}
|
||
return res;
|
||
} else {
|
||
return ApiResponse(code: -1, msg: "失败".tr);
|
||
}
|
||
} catch (e) {
|
||
EasyDartModule.logger.info("更新用户资料失败->$e");
|
||
DailyLogUtils.writeLog("更新用户资料失败->$e");
|
||
return ApiResponse(code: -1, msg: "服务器失败".tr);
|
||
}
|
||
}
|
||
|
||
ApiResponse logOut() {
|
||
updateAppSystemNotify(false);
|
||
int code = AppConstants().ent_type;
|
||
if (APPPackageType.MHT.code == code) {
|
||
MHTHomeController mhtHomeController = Get.find();
|
||
mhtHomeController.personnelList.value = [];
|
||
}
|
||
ApiResponse apiResponse = ApiResponse(code: 1, msg: "退出成功".tr);
|
||
EasyDartModule.logger.info("退出登录");
|
||
DailyLogUtils.writeLog("退出登录");
|
||
model.login = 0;
|
||
EasyDartModule.dio.token = null;
|
||
final box = GetStorage();
|
||
box.remove("user");
|
||
box.remove("token");
|
||
BodyDeviceController bodyDeviceController = Get.find();
|
||
bodyDeviceController.bindDeviceNum.value = 0;
|
||
HomeController homeController = Get.find();
|
||
homeController.sleepNum.value = 0;
|
||
LoginController loginController = Get.find();
|
||
loginController.model.register_agree = null;
|
||
bodyDeviceController.sleepReportData.value = {};
|
||
MessageController messageController = Get.find();
|
||
messageController.model.body_message_read = 0;
|
||
messageController.model.system_message_read = 0;
|
||
CountdownController countdownController = Get.find();
|
||
countdownController.countdown.value = 0;
|
||
|
||
return apiResponse;
|
||
}
|
||
|
||
ApiResponse deleteAccount() {
|
||
MHTHomeController mhtHomeController = Get.find();
|
||
ApiResponse apiResponse = ApiResponse(code: 1, msg: "注销成功".tr);
|
||
EasyDartModule.logger.info("注销账号");
|
||
DailyLogUtils.writeLog("注销账号");
|
||
|
||
model.login = 0;
|
||
EasyDartModule.dio.token = null;
|
||
final box = GetStorage();
|
||
box.remove("user");
|
||
box.remove("token");
|
||
BodyDeviceController bodyDeviceController = Get.find();
|
||
bodyDeviceController.bindDeviceNum.value = 0;
|
||
HomeController homeController = Get.find();
|
||
homeController.sleepNum.value = 0;
|
||
LoginController loginController = Get.find();
|
||
loginController.model.register_agree = null;
|
||
bodyDeviceController.sleepReportData.value = {};
|
||
MessageController messageController = Get.find();
|
||
messageController.model.body_message_read = 0;
|
||
messageController.model.system_message_read = 0;
|
||
CountdownController countdownController = Get.find();
|
||
countdownController.countdown.value = 0;
|
||
mhtHomeController.personnelList.value = [];
|
||
|
||
return apiResponse;
|
||
}
|
||
|
||
//解除微信绑定
|
||
unBindWx(BuildContext context) async {
|
||
String serviceAddress = ServiceConstant.service_address;
|
||
String serviceName = ServiceConstant.server_service;
|
||
String serviceApi = ServiceConstant.user_info;
|
||
String queryUrl = "${serviceAddress}${serviceName}${serviceApi}";
|
||
try {
|
||
final data = {
|
||
"wxCode": "",
|
||
"khCode": "",
|
||
"merge": true,
|
||
};
|
||
final res = await requestWithLog(
|
||
logTitle: "解除微信绑定",
|
||
method: MyHttpMethod.put,
|
||
queryUrl: queryUrl,
|
||
data: data,
|
||
onSuccess: (res) {
|
||
TopSlideNotification.show(
|
||
context,
|
||
text: res.msg!,
|
||
);
|
||
},
|
||
onFailure: (res) {
|
||
TopSlideNotification.show(
|
||
context,
|
||
text: res.msg!,
|
||
textColor: themeController.currentColor.sc9,
|
||
);
|
||
},
|
||
);
|
||
} catch (e) {
|
||
ef.log("微信解绑失败-》$e");
|
||
}
|
||
}
|
||
}
|