290 lines
7.8 KiB
Dart
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;
|
|
}
|
|
}
|