更新消息设置

This commit is contained in:
wyf
2025-12-05 17:37:01 +08:00
parent 1cc26aa46d
commit db51c42664
44 changed files with 7510 additions and 1059 deletions

View File

@@ -118,14 +118,82 @@ class BodyDeviceController extends GetControllerEx<BodyDeviceModel> {
return ApiResponse(code: -1, msg: "未知错误".tr); // Default return statement
}
Future<ApiResponse> getDeviceList({String? key}) async {
// Future<ApiResponse> getDeviceList({String? key}) async {
// try {
// ApiResponse apiResponse = ApiResponse(code: -1, msg: "设备.设备列表请求失败".tr);
// String serviceAddress = ServiceConstant.service_address;
// String serviceName = ServiceConstant.server_service;
// String serviceApi = ServiceConstant.device_list;
// String queryUrl =
// "${serviceAddress}${serviceName}${serviceApi}?bindType=${model.type}${key != null ? '&key=$key' : ''}";
// 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(res, "设备.设备列表请求成功".tr, "设备.设备列表请求失败".tr);
// if (res.code == HttpStatusCodes.ok) {
// // bindDeviceNum.value = res.total!;
// deviceList.value = res.data!;
// updateAll();
// return res;
// }
// } else {
// return ApiResponse(code: -1, msg: "失败".tr);
// }
// return apiResponse;
// } catch (e) {
// EasyDartModule.logger.info("设备请求列表: $e");
// DailyLogUtils.writeLog("设备请求列表: $e");
// }
// return ApiResponse(code: -1, msg: "未知错误".tr); // Default return statement
// }
Future<ApiResponse> getDeviceList(
{String? key, bool isAllDevice = false}) async {
try {
ApiResponse apiResponse = ApiResponse(code: -1, msg: "设备.设备列表请求失败".tr);
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.device_list;
String queryUrl =
"${serviceAddress}${serviceName}${serviceApi}?bindType=${model.type}${key != null ? '&key=$key' : ''}";
// 构建基础URL
String baseUrl = "${serviceAddress}${serviceName}${serviceApi}";
// 根据 isAllDevice 参数决定是否添加 bindType 参数
String queryParams = "";
if (!isAllDevice) {
queryParams = "?bindType=${model.type}";
}
// 添加 key 参数
if (key != null) {
if (queryParams.isNotEmpty) {
queryParams += "&key=$key";
} else {
queryParams = "?key=$key";
}
}
// 添加语言参数
String? language = "";
if (AppConstants().ent_type == APPPackageType.MHT.code) {
if (mhLanguageController.selectLanguage != null) {
@@ -136,13 +204,18 @@ class BodyDeviceController extends GetControllerEx<BodyDeviceModel> {
language = languageController.selectLanguage.value!.language_code;
}
}
if (language != null && language.isNotEmpty) {
if (queryUrl.contains("?")) {
queryUrl += "&lang=$language";
if (queryParams.isNotEmpty) {
queryParams += "&lang=$language";
} else {
queryUrl += "?lang=$language";
queryParams = "?lang=$language";
}
}
// 拼接完整URL
String queryUrl = baseUrl + queryParams;
var response = await EasyDartModule.dio.get(queryUrl);
if (response != null) {
var responseData =

View File

@@ -43,6 +43,9 @@ class LoginModel {
bool? register_agree = false; //是否同意协议
String? updatePhone; //更新绑定手机号
String? updateCode; //更新绑定验证码
LoginModel();
static LoginModel fromJson(Map<String, dynamic> json) =>
@@ -61,8 +64,6 @@ class LoginController extends GetControllerEx<LoginModel> {
attr = GetModel(LoginModel()).obs;
}
//登录
Future<ApiResponse> login(BuildContext context) async {
ApiResponse apiResponse = ApiResponse(code: -1, msg: "其他手机登录页.登录失败".tr);
@@ -197,8 +198,78 @@ class LoginController extends GetControllerEx<LoginModel> {
}
}
//微信登录
Future<void> wxLoginSendAuth(BuildContext context) async {
Future<ApiResponse> getUpdateTelCode(BuildContext context) async {
ApiResponse apiResponse = ApiResponse(code: -1, msg: "其他手机登录页.发送失败".tr);
try {
if (model.updatePhone == null || model.updatePhone!.isEmpty) {
apiResponse.msg = "其他手机登录页.请输入手机号".tr;
return apiResponse;
}
model.updatePhone = model.updatePhone!.trim();
if (!MyUtils.isValidPhoneNumber(model.updatePhone!) &&
!MyUtils.isValidEmail(model.updatePhone!)) {
apiResponse.msg = '其他手机登录页.不正确手机号'.tr;
return apiResponse;
}
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.send_code;
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 data = {
"userName": model.updatePhone,
"type": 5,
};
if (AppConstants().ent_type == APPPackageType.HUANSHUI.code) {
data['code'] = "hzhskj";
}
var response =
await EasyDartModule.dio.post(queryUrl, data: jsonEncode(data));
if (response != null) {
var responseData =
response.data is String ? jsonDecode(response.data) : response.data;
ApiResponse res =
ApiResponse.fromJson(responseData, (object) => object);
if (res.code != HttpStatusCodes.ok) {
if (res.msg == null || res.msg!.isEmpty) {
res.msg = apiResponse.msg;
}
} else {
if (res.msg == null || res.msg!.isEmpty) {
res.msg = "其他手机登录页.发送成功".tr;
}
}
EasyDartModule.logger.info('msg:发送验证码成功');
return res;
} else {
EasyDartModule.logger.error('msg:发送验证码失败:${response}');
return ApiResponse(code: -1, msg: "失败".tr);
}
} catch (e) {
EasyDartModule.logger.error('msg:发送验证码失败:${e}');
return ApiResponse(code: -1, msg: "失败".tr);
}
}
//微信登录 auth 是否登录
Future<void> wxLoginSendAuth(BuildContext context,
{bool login = true}) async {
/*
1、目前移动应用上微信登录只提供原生的登录方式需要用户安装微信客户端才能配合使用。
2、对于Android应用建议总是显示微信登录按钮当用户手机没有安装微信客户端时请引导用户下载安装微信客户端。
@@ -218,13 +289,14 @@ class LoginController extends GetControllerEx<LoginModel> {
.authBy(
which: NormalAuth(
scope: 'snsapi_userinfo',
state: 'wechat_sdk_theh_wxlogin',
state: 'wechat_sdk_theh_wxlogin' +
'${DateTime.now().millisecondsSinceEpoch}',
))
.then((data) async {
//返回true表示成功或者false表示失败这边没有意义从login_controller页面构造函数监听中去处理
debugPrint('msg:$data');
EasyDartModule.logger.error('msg:$data');
if (data) {
if (data && login) {
//登陆成功
await dealBindProcess();
}
@@ -253,18 +325,29 @@ class LoginController extends GetControllerEx<LoginModel> {
if (apiResponse.code == HttpStatusCodes.ok) {
UserInfoController userInfoController = Get.find();
userInfoController.model.user = UserModel.fromJson(apiResponse.data);
if (userInfoController.model.user!.phone == null ||
userInfoController.model.user!.phone!.isEmpty) {
if (apiResponse.data['test'] != null &&
apiResponse.data['test'] == true) {
AppConstants.is_test_account = true;
} else {
AppConstants.is_test_account = false;
}
if ((userInfoController.model.user!.phone == null ||
userInfoController.model.user!.phone!.isEmpty) &&
(userInfoController.model.user!.email == null ||
userInfoController.model.user!.email!.isEmpty)) {
Map data = {
'img': "assets/img/bgNoImg.png",
};
await Get.toNamed("/auth_bind_tel", arguments: data);
}
if (userInfoController.model.user!.phone == null ||
userInfoController.model.user!.phone!.isEmpty) {
if ((userInfoController.model.user!.phone == null ||
userInfoController.model.user!.phone!.isEmpty) &&
(userInfoController.model.user!.email == null ||
userInfoController.model.user!.email!.isEmpty)) {
userInfoController.model.login = 0;
} else {
userInfoController.model.login = 1;
}
userInfoController.model.login = 1;
String token = apiResponse.rawResponse.headers['token']!.first;
EasyDartModule.dio.token = token;

View File

@@ -17,7 +17,9 @@ LoginModel _$LoginModelFromJson(Map<String, dynamic> json) => LoginModel()
..forceLogin = (json['forceLogin'] as num?)?.toInt()
..isIos = json['isIos'] as bool?
..isWeChatNotInstalled = json['isWeChatNotInstalled'] as bool?
..register_agree = json['register_agree'] as bool?;
..register_agree = json['register_agree'] as bool?
..updatePhone = json['updatePhone'] as String?
..updateCode = json['updateCode'] as String?;
Map<String, dynamic> _$LoginModelToJson(LoginModel instance) =>
<String, dynamic>{
@@ -32,4 +34,6 @@ Map<String, dynamic> _$LoginModelToJson(LoginModel instance) =>
'isIos': instance.isIos,
'isWeChatNotInstalled': instance.isWeChatNotInstalled,
'register_agree': instance.register_agree,
'updatePhone': instance.updatePhone,
'updateCode': instance.updateCode,
};

View File

@@ -10,6 +10,8 @@ class CommonMessageSettingModel {
int? setting = 0; //总设置 0 关闭 1 开启
int? appSetting = 0; //app消息设置
int? serviceSetting = 0; //服务号消息
int? telSetting = 0;//电话语音提醒
int? smsSetting = 0;//短信提醒
int? tipSetting = 0; //设备放置说明
int? deviceUpgradeSetting = 0; //设备升级提示
int? deviceIssueSetting = 0; //设备故障提示

View File

@@ -12,6 +12,8 @@ CommonMessageSettingModel _$CommonMessageSettingModelFromJson(
..setting = (json['setting'] as num?)?.toInt()
..appSetting = (json['appSetting'] as num?)?.toInt()
..serviceSetting = (json['serviceSetting'] as num?)?.toInt()
..telSetting = (json['telSetting'] as num?)?.toInt()
..smsSetting = (json['smsSetting'] as num?)?.toInt()
..tipSetting = (json['tipSetting'] as num?)?.toInt()
..deviceUpgradeSetting = (json['deviceUpgradeSetting'] as num?)?.toInt()
..deviceIssueSetting = (json['deviceIssueSetting'] as num?)?.toInt()
@@ -23,6 +25,8 @@ Map<String, dynamic> _$CommonMessageSettingModelToJson(
'setting': instance.setting,
'appSetting': instance.appSetting,
'serviceSetting': instance.serviceSetting,
'telSetting': instance.telSetting,
'smsSetting': instance.smsSetting,
'tipSetting': instance.tipSetting,
'deviceUpgradeSetting': instance.deviceUpgradeSetting,
'deviceIssueSetting': instance.deviceIssueSetting,

View File

@@ -5,9 +5,10 @@ part 'message_setting_controller.g.dart'; // 由json_serializable自动生成的
@JsonSerializable()
class MessageSettingModel {
int? setting = 0;//总设置 0 关闭 1 开启
int? appSetting = 0;//app消息设置
int? serviceSetting = 0;//服务号消息
int? setting = 0; //总设置 0 关闭 1 开启
int? appSetting = 0; //app消息设置
int? serviceSetting = 0; //服务号消息
List device_type_setting = [];
MessageSettingModel();
@@ -31,4 +32,9 @@ class MessageSettingController extends GetControllerEx<MessageSettingModel> {
attr = GetModel(MessageSettingModel()).obs;
}
RxMap<String, dynamic> messageType = RxMap<String, dynamic>();
}

View File

@@ -1,7 +1,9 @@
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';
@@ -10,6 +12,8 @@ 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';
@@ -67,6 +71,8 @@ class UserInfoController extends GetControllerEx<UserInfoModel> {
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("请求上传图片");
@@ -129,20 +135,29 @@ class UserInfoController extends GetControllerEx<UserInfoModel> {
}
//更新用户信息
Future<ApiResponse> updateData() async {
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!;
if (user.tmpNickName == null || user.tmpNickName!.isEmpty) {
apiResponse.msg = "昵称为空".tr;
return apiResponse;
}
// if (user.tmpNickName!.length >= 9) {
// apiResponse.msg = "最长字符为8个字".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;
@@ -168,8 +183,15 @@ class UserInfoController extends GetControllerEx<UserInfoModel> {
"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) {
@@ -178,6 +200,10 @@ class UserInfoController extends GetControllerEx<UserInfoModel> {
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);
@@ -304,4 +330,40 @@ class UserInfoController extends GetControllerEx<UserInfoModel> {
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");
}
}
}