import 'package:common_utils/common_utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:pj_supermarket_cloud/common/index.dart'; class CardActiveController extends GetxController { final appC = Get.find(); SerialCardManage get serialCardManage => appC.serialCardManage; // 语音锁 bool _speechingLock = false; // table RxInt currentPage = 1.obs; RxInt totalPage = 0.obs; RxInt pageSize = 10.obs; RxList tableList = [].obs; // 读卡器 RxString readCardNumber = "未读取".obs; RxBool readLoading = false.obs; // 写卡 RxBool writeLoading = false.obs; _initData() { update(["card_active"]); } @override void onInit() { super.onInit(); _closeStatus(); getTableList(); } @override void onReady() { super.onReady(); _initData(); } @override void onClose() { super.onClose(); _closeStatus(); } Future doPage({int? page}) async { if (page != null) currentPage.value = page; getTableList(); } Future getTableList() async { final appSetting = await AppSettingTool.getSysSetting(); final deptId = appSetting.merchantDeptId; final pa = { "current": currentPage.value, "size": pageSize.value, "deptId": "", "walletTypeId": "", }; final data = await WalletApi.openCardList(pa); if (data == null) return; totalPage.value = data.total; final records = data.records; if (records != null) { tableList.value = records; } } // 写卡 void doWriteCard(ServiceOpenCard v) async { if (v.isActiveHardware == true) { Toast.error(msg: "该卡已经激活,无需重复激活"); return; } if (ObjectUtil.isEmpty(v.cardNumber)) { Toast.error(msg: "没有设置卡号"); return; } try { await serialCardManage.connect(); if (!serialCardManage.isConnect) { Toast.error(msg: "连接读卡器失败"); return; } writeLoading.value = true; // writeCardDialog( // context: Get.context!, // cardNumber: v.cardNumber!, // doCancel: () { // Get.back(); // serialCardManage.readerClose(); // serialCardManage.close(); // _closeWriteStatus(); // }, // ); serialCardManage.callback = (type, status, res) async { switch (status) { case SerialCardResStatus.success: Toast.success(msg: "写入成功"); serialCardManage.readerClose(); serialCardManage.close(); if (ObjectUtil.isNotEmpty(v.id)) { await _getOpenCardSuccess(v.id!); currentPage.value = 1; getTableList(); } Navigator.of(Get.context!).pop(); break; case SerialCardResStatus.warning: break; case SerialCardResStatus.error: _speeching("请在合适区域放置饭卡"); Toast.error(msg: "请在合适区域放置饭卡"); break; } }; _speeching("请在合适区域放置饭卡"); serialCardManage.sendWrite(v.cardNumber!); } catch (e, stack) { logger.d("写卡失败error:|$e|stack:|$stack|"); Toast.error(msg: "写入失败,请重试"); } } // 读卡 void doSelectHorType() async { try { await serialCardManage.connect(); if (!serialCardManage.isConnect) { Toast.error(msg: "连接读卡器失败"); return; } readLoading.value = true; // readCardDialog( // context: Get.context!, // doCancel: () { // serialCardManage.readerClose(); // serialCardManage.close(); // _closeReadStatus(); // Get.back(); // }, // ); serialCardManage.callback = (type, status, res) { switch (status) { case SerialCardResStatus.success: Toast.success(msg: "读取成功"); readLoading.value = false; readCardNumber.value = res; serialCardManage.readerClose(); serialCardManage.close(); break; case SerialCardResStatus.warning: break; case SerialCardResStatus.error: Toast.error(msg: "请在合适区域放置饭卡"); _speeching("请在合适区域放置饭卡"); break; } }; _speeching("请在合适区域放置饭卡"); serialCardManage.sendRead(); } catch (e, stack) { _closeReadStatus(); logger.d("读卡失败error:|$e|stack:|$stack|"); Toast.error(msg: "读取失败,请重试"); } } Future _getOpenCardSuccess(String id) async { try { EasyLoading.show(status: '激活饭卡中...'); final pa = {"id": id}; final data = await WalletApi.openCardSuccess(pa); if (data == false) throw Error(); EasyLoading.dismiss(); _speeching("激活成功"); Toast.success(msg: "激活成功"); } catch (e, stack) { logger.e("激活饭卡请求失败error:|$e|stack:|$stack|"); EasyLoading.dismiss(); Toast.error(msg: "激活失败"); } } // 重新激活 Future doRefreshAvatar(ServiceOpenCard v) async { if (v.isActiveHardware == false) { Toast.error(msg: "该卡为激活状态,不能重新激活"); return; } try { final isSure = await appMessageDialog(Get.context!, "是否重新激活"); if (!isSure) return; final pa = {"id": v.id}; final data = await WalletApi.refreshAvatar(pa); if (data == false) return; getTableList(); } catch (e, stack) { logger.d("重新激活失败error:|$e|stack:|$stack|"); } } Future _speeching(String str) async { if (_speechingLock) return; try { _speechingLock = true; await Future.delayed(const Duration(seconds: 1)); await LocalTtsPlugs.speeching(appId: Constants.ttsId, str: str); await Future.delayed(const Duration(seconds: 2)); } finally { _speechingLock = false; } } void _closeReadStatus() { readLoading.value = false; readCardNumber.value = "未读取"; } // 重置状态 void _closeStatus() { _speechingLock = false; } }