Files
pj_supermarket_cloud/lib/pages/login/controller.dart
T
2025-05-07 20:31:12 +08:00

179 lines
5.1 KiB
Dart

import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:forui/forui.dart';
import 'package:get/get.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
class LoginController extends GetxController {
static const String _tag = "登录页面 Controller";
late SysSetting sysSetting;
late UserSetting userSetting;
Rx<SysType> sysType = SysType.CANTEEN.obs;
RxList<ServiceTenant> tenantList = <ServiceTenant>[].obs;
final tenantC = FRadioSelectGroupController<String>();
ServiceTenant currentTenant = ServiceTenant();
// 用户名
final usernameC = TextEditingController();
// 密码
final passwordC = TextEditingController();
_initData() {
update(["login"]);
}
@override
void onInit() async {
super.onInit();
sysSetting = await AppSettingTool.getSysSetting();
userSetting = await AppSettingTool.getUserSetting();
sysType.value = sysSetting.sysType;
await getTenantList();
await autoLogin();
tenantC.addValueListener((v) async {
final target = tenantList.firstWhereOrNull((i) => i.code == v.first);
if (target == null) return;
EasyLoading.show(
status: '切换中...',
maskType: EasyLoadingMaskType.black,
);
currentTenant = target;
userSetting.tenantId = target.id;
await AppSettingTool.setUserSetting(userSetting);
EasyLoading.dismiss();
});
}
@override
void onReady() {
super.onReady();
_initData();
}
Future<void> doLogin(bool visibleMsg) async {
if (!_validateForm()) return;
SysSetting sysSetting = await AppSettingTool.getSysSetting();
final pa = <String, dynamic>{
'username': usernameC.value.text,
'password': passwordC.value.text,
'sysType': sysSetting.sysType.name,
"grant_type": 'password',
"scope": 'server',
};
if (visibleMsg) {
EasyLoading.show(
status: '登录中...',
maskType: EasyLoadingMaskType.black,
);
}
try {
await AppSettingTool.setUserSetting(UserSetting());
final data = await UserApi.login(pa);
if (data == null) {
if (visibleMsg) EasyLoading.dismiss();
return;
}
userSetting.userId = data['user_id'];
userSetting.accessToken = data['access_token'];
userSetting.refreshToken = data['refresh_token'];
userSetting.expiresTime = int.tryParse("${data['exp']}");
userSetting.sysType = sysSetting.sysType;
userSetting.username = usernameC.value.text;
userSetting.password = passwordC.value.text;
userSetting.tenantId = currentTenant.code;
await AppSettingTool.setUserSetting(userSetting);
await TtsManage.speak("登录成功");
if (visibleMsg) {
Toast.success(msg: "登录成功");
EasyLoading.dismiss();
}
Get.offAndToNamed(RouteNames.panel);
_clearForm();
} catch (e) {
logger.e("|$_tag|登录错误error:|$e|");
EasyLoading.dismiss();
}
}
Future<void> autoLogin() async {
if (ObjectUtil.isEmpty(userSetting.username) ||
ObjectUtil.isEmpty(userSetting.password) ||
ObjectUtil.isEmpty(userSetting.sysType?.name)) {
return;
}
final sysSetting = await AppSettingTool.getSysSetting();
usernameC.text = userSetting.username!;
passwordC.text = userSetting.password!;
// 无网络并且绑定过直接使用
final isNetwork = AppNetworkTool.isAutoNetwork();
final serviceId = sysSetting.serviceId;
if (!isNetwork && serviceId != null) {
Toast.success(msg: "登录成功");
EasyLoading.dismiss();
Get.offAndToNamed(RouteNames.panel);
_clearForm();
return;
}
if (!isNetwork && serviceId == null) {
Toast.error(msg: "未绑定机器,不能开启离线模式");
return;
}
await doLogin(true);
}
bool _validateForm() {
final username = usernameC.value.text;
final password = passwordC.value.text;
if (ObjectUtil.isEmpty(username)) {
Toast.error(msg: "请输入账号");
return false;
}
if (ObjectUtil.isEmpty(password)) {
Toast.error(msg: "请输入密码");
return false;
}
return true;
}
Future<void> getTenantList() async {
try {
final isNetwork = AppNetworkTool.isAutoNetwork();
List<ServiceTenant>? list = [];
if (isNetwork) {
list = await UserApi.getTenantList();
} else {
sysSetting = await AppSettingTool.getSysSetting();
list = sysSetting.tenantList;
}
if (list == null) return;
tenantList.value = list;
if (ObjectUtil.isNotEmpty(userSetting.tenantId)) {
tenantC.value = {userSetting.tenantId!};
} else {
if (!ObjectUtil.isEmptyList(list)) {
tenantC.value = {list.first.code!};
}
}
// 存储租户列表
sysSetting.tenantList = list;
await AppSettingTool.setSysSetting(sysSetting);
} catch (e) {
logger.e("|$_tag|获取租户列表错误error:|$e|");
}
}
void _clearForm() {
usernameC.clear();
passwordC.clear();
}
}