169 lines
4.7 KiB
Dart
169 lines
4.7 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.id;
|
|
await AppSettingTool.setUserSetting(userSetting);
|
|
if (visibleMsg) {
|
|
Toast.success(msg: "登录成功");
|
|
EasyLoading.dismiss();
|
|
}
|
|
await TtsManage.speak("登录成功");
|
|
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 list = await UserApi.getTenantList();
|
|
if (list == null) return;
|
|
tenantList.value = list;
|
|
if (ObjectUtil.isNotEmpty(userSetting.tenantId)) {
|
|
tenantC.value = {list.first.code!};
|
|
} else {
|
|
if (!ObjectUtil.isEmptyList(list)) {
|
|
tenantC.value = {list.first.code!};
|
|
}
|
|
}
|
|
} catch (e) {
|
|
logger.e("|$_tag|获取租户列表错误error:|$e|");
|
|
}
|
|
}
|
|
|
|
void _clearForm() {
|
|
usernameC.clear();
|
|
passwordC.clear();
|
|
}
|
|
}
|