Files
pj_supermarket_cloud/lib/pages/setting/controller.dart
T
2025-03-16 18:01:05 +08:00

290 lines
7.8 KiB
Dart

import 'package:common_utils/common_utils.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 SettingController extends GetxController {
static const String _tag = "设置 Controller";
final appC = Get.find<AppControl>();
Rx<SysSetting?> sysSetting = Rx(null);
Rx<UserSetting?> userSetting = Rx(null);
// 全局文字大小
var globalFontSizeC = FRadioSelectGroupController<String>(
value: SettingGlobalFontSize.xl3.code,
);
// 付款方式
var globalPayTableC = FMultiSelectGroupController<String>(
values: {},
);
// 默认付款方式
var defaultGlobalPayTableC = FRadioSelectGroupController<String>();
_initData() {
update(["setting"]);
getSetting();
}
RxList<SettingMenu> menuList = <SettingMenu>[
SettingMenu(
prefixIcon: FAssets.icons.bookCopy,
title: "基本信息",
type: SettingMenuType.baseInfo,
),
SettingMenu(
prefixIcon: FAssets.icons.databaseBackup,
title: "资源备份",
type: SettingMenuType.backup,
),
SettingMenu(
prefixIcon: FAssets.icons.refreshCw,
title: "同步设置",
type: SettingMenuType.syncSetting,
),
SettingMenu(
prefixIcon: FAssets.icons.japaneseYen,
title: "支付设置",
type: SettingMenuType.paySetting,
),
SettingMenu(
prefixIcon: FAssets.icons.scanFace,
title: "人脸管理",
type: SettingMenuType.faceSetting,
),
SettingMenu(
prefixIcon: FAssets.icons.shoppingCart,
title: "商品管理",
type: SettingMenuType.productSetting,
),
].obs;
Rx<SettingMenuType> cuurentMenuType = SettingMenuType.baseInfo.obs;
@override
void onInit() async {
super.onInit();
globalFontSizeC.addValueListener((v) {
final fontSizeType = SettingGlobalFontSize.values.fromCode(
v.first,
);
if (fontSizeType == null) return;
final appTheme = Get.find<AppThemeControl>();
appTheme.setSizeScalar(fontSizeType);
});
globalPayTableC.addValueListener((v) async {
List<OrderPayDisplayType> usePayList = [];
for (final i in v) {
final payType = OrderPayDisplayType.values.fromCode(
i,
);
if (payType == null) continue;
usePayList.add(payType);
}
usePayList.sort((pren, next) => pren.code.compareTo(next.code));
sysSetting.value?.usePayDisplayType = usePayList;
await AppSettingTool.setSysSetting(sysSetting.value!);
});
defaultGlobalPayTableC.addValueListener((v) async {
final payType = OrderPayDisplayType.values.fromCode(
v.first,
);
if (payType == null) return;
sysSetting.value?.defaultPayDisplayType = payType;
await AppSettingTool.setSysSetting(sysSetting.value!);
});
}
@override
void onReady() {
super.onReady();
_initData();
}
@override
void onClose() {
super.onClose();
globalFontSizeC.dispose();
globalPayTableC.dispose();
defaultGlobalPayTableC.dispose();
}
void doMenu(SettingMenu v) {
if (v.type == cuurentMenuType.value) {
return;
}
cuurentMenuType.value = v.type;
menuList.refresh();
}
// 同步设置
void syncConfig() async {
final isNetwork = AppNetworkTool.isAutoNetworkMsg();
if (!isNetwork) return;
EasyLoading.show(
status: '同步中...',
maskType: EasyLoadingMaskType.black,
);
try {
final setting = await SyncConfigTool.autoSyncSysInfo();
if (setting != null) sysSetting.value = setting;
Toast.success(msg: "同步设备信息成功");
EasyLoading.dismiss();
} catch (e, stack) {
Toast.error(msg: "同步设备信息错误");
logger.e("|$_tag|同步设备信息error:|$e|stack:|$stack|");
EasyLoading.dismiss();
}
}
// 重新连接长链接
void syncMq() async {
final isNetwork = AppNetworkTool.isAutoNetworkMsg();
if (!isNetwork) return;
EasyLoading.show(
status: '同步中...',
maskType: EasyLoadingMaskType.black,
);
try {
await AppMqTool.mqRefresh();
Toast.success(msg: "同步长连接成功");
EasyLoading.dismiss();
} catch (e, stack) {
Toast.error(msg: "同步长连接错误");
logger.e("|$_tag|同步长连接error:|$e|stack:|$stack|");
EasyLoading.dismiss();
}
}
// 同步分类
void syncClassify() async {
final isNetwork = AppNetworkTool.isAutoNetworkMsg();
if (!isNetwork) return;
EasyLoading.show(
status: '同步中...',
maskType: EasyLoadingMaskType.black,
);
try {
await SyncProductTool.syncClassify();
Toast.success(msg: "同步分类成功");
EasyLoading.dismiss();
} catch (e, stack) {
Toast.error(msg: "同步分类错误");
logger.e("|$_tag|同步分类error:|$e|stack:|$stack|");
EasyLoading.dismiss();
}
}
// 同步商品
void syncProduct() async {
final isNetwork = AppNetworkTool.isAutoNetworkMsg();
if (!isNetwork) return;
EasyLoading.show(
status: '同步中...',
maskType: EasyLoadingMaskType.black,
);
try {
await SyncProductTool.syncProduct();
EasyLoading.dismiss();
Toast.success(msg: "同步商品成功");
EasyLoading.dismiss();
} catch (e, stack) {
Toast.error(msg: "同步商品错误");
logger.e("|$_tag|同步商品error:|$e|stack:|$stack|");
EasyLoading.dismiss();
}
}
// 同步离线订单
void syncOfflineOrder() async {
final isNetwork = AppNetworkTool.isAutoNetworkMsg();
if (!isNetwork) return;
EasyLoading.show(
status: '同步中...',
maskType: EasyLoadingMaskType.black,
);
try {
await SyncOrderTool.syncOfflineOrder();
Toast.success(msg: "同步离线订单成功");
EasyLoading.dismiss();
} catch (e) {
Toast.error(msg: "同步离线订单错误");
logger.e("|$_tag|同步离线订单error:|$e|");
EasyLoading.dismiss();
}
}
// 备份sql
void backupsSql() async {
EasyLoading.show(
status: '备份中...',
maskType: EasyLoadingMaskType.black,
);
try {
final bool = await AppFileTool.backupSqlFile();
if (!bool) throw Error();
EasyLoading.dismiss();
Toast.success(msg: "备份中sql成功");
EasyLoading.dismiss();
} catch (e) {
Toast.error(msg: "备份中sql失败");
logger.e("|$_tag|备份中sqlerror:|$e|");
EasyLoading.dismiss();
}
}
// 备份日志
void backupsLog() async {
Toast.success(msg: "当前日志为实时备份");
}
// sql恢复
Future<void> recoverSql() async {
EasyLoading.show(
status: '恢复中...',
maskType: EasyLoadingMaskType.black,
);
try {
await AppFileTool.useLastBackDatabase();
EasyLoading.dismiss();
Toast.success(msg: "sql恢复成功");
EasyLoading.dismiss();
} catch (e) {
Toast.error(msg: "sql恢复失败");
logger.e("|$_tag|sql恢复失败error:|$e|");
EasyLoading.dismiss();
}
}
Future<void> getSetting() async {
sysSetting.value = await AppSettingTool.getSysSetting();
if (sysSetting.value!.globalFontSize != null) {
globalFontSizeC.value = {sysSetting.value!.globalFontSize!.code};
}
if (!ObjectUtil.isEmptyList(sysSetting.value!.usePayDisplayType)) {
globalPayTableC.value =
sysSetting.value!.usePayDisplayType!.map((v) => v.code).toSet();
}
if (sysSetting.value!.defaultPayDisplayType != null) {
defaultGlobalPayTableC.value = {
sysSetting.value!.defaultPayDisplayType!.code
};
}
}
Future<bool> checkIsBind() async {
final sysSetting = await AppSettingTool.getSysSetting();
final id = sysSetting.serviceMerchantId;
if (ObjectUtil.isEmpty(id)) {
return false;
}
return true;
}
}