调试指纹、卡模块接口

This commit is contained in:
魏少阳 2023-09-19 15:20:58 +08:00
parent d680902ae0
commit a074e7acb2
34 changed files with 1543 additions and 261 deletions

View File

@ -404,5 +404,6 @@
"wifiPwd":"WiFi password",
"pleaseEnterWifiPwd":"Please Enter WiFi Password",
"edit":"Edit",
"stressFingerprint":"Stress Fingerprint"
"stressFingerprint":"Stress Fingerprint",
"effectiveDay":"Effective Day"
}

View File

@ -404,6 +404,6 @@
"wifiPwd":"wifiPwd",
"pleaseEnterWifiPwd":"pleaseEnterWifiPwd",
"edit":"edit",
"stressFingerprint":"stressFingerprint"
"stressFingerprint":"stressFingerprint",
"effectiveDay":"effectiveDay"
}

View File

@ -407,5 +407,6 @@
"wifiPwd":"WiFi名字",
"pleaseEnterWifiPwd":"请输入WiFi密码",
"edit":"编辑",
"stressFingerprint":"胁迫指纹"
"stressFingerprint":"胁迫指纹",
"effectiveDay":"有效日"
}

View File

@ -40,7 +40,7 @@
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"

View File

@ -69,6 +69,8 @@ import 'main/lockDetail/lcokSet/wirelessKeyboard/seletWirelessKeyboard/seletWire
import 'main/lockDetail/lcokSet/wirelessKeyboard/wirelessKeyboardList/wirelessKeyboard_page.dart';
import 'main/lockDetail/otherTypeKey/addFingerprint/addFingerprint/addFingerprint_page.dart';
import 'main/lockDetail/otherTypeKey/addFingerprint/addFingerprintTip/addFingerprintTip_page.dart';
import 'main/lockDetail/otherTypeKey/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart';
import 'main/lockDetail/otherTypeKey/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_page.dart';
import 'mine/about/about_page.dart';
import 'mine/addLock/addLock/addLock_page.dart';
import 'main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdminManage/authorizedAdminManage_page.dart';
@ -158,10 +160,10 @@ abstract class Routers {
static const passwordKeyManagePage = '/PasswordKeyManagePage'; //
static const passwordKeyDetailPage = '/PasswordKeyDetailPage'; //
static const otherTypeKeyListPage = '/OtherTypeKeyListPage'; //
static const otherTypeKeyDetailPage =
'/OtherTypeKeyDetailPage'; //
static const otherTypeKeyManagePage =
'/OtherTypeKeyManagePage'; //
static const otherTypeKeyDetailPage = '/OtherTypeKeyDetailPage'; //
static const otherTypeKeyManagePage = '/OtherTypeKeyManagePage'; //
static const otherTypeKeyChangeDatePage = '/OtherTypeKeyChangeDatePage'; //
static const otherTypeKeyChangeValidityDatePage = '/OtherTypeKeyChangeValidityDatePage'; //
static const addFingerprintTipPage = '/AddFingerprintTipPage'; //
static const addFingerprintPage = '/AddFingerprintPage'; //
@ -778,6 +780,12 @@ abstract class AppRouters {
page: () => const AdministratorDetailsPage()),
GetPage(
name: Routers.expireLockListPage,
page: () => const ExpireLockListPage())
page: () => const ExpireLockListPage()),
GetPage(
name: Routers.otherTypeKeyChangeDatePage,
page: () => const OtherTypeKeyChangeDatePage()),
GetPage(
name: Routers.otherTypeKeyChangeValidityDatePage,
page: () => const OtherTypeKeyChangeValidityDatePage())
];
}

View File

@ -36,6 +36,7 @@ class _ElectronicKeyDetailChangeDateState
late List weekDays = [];
late String pwdId = '';
late String lockId = '';
late String fromType = '';// 1
@override
Widget build(BuildContext context) {
@ -49,7 +50,9 @@ class _ElectronicKeyDetailChangeDateState
if (obj != null && (obj["lockId"] != null)) {
lockId = obj["lockId"];
}
if (obj != null && (obj["fromType"] != null)) {
fromType = obj["fromType"];
}
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
@ -64,10 +67,14 @@ class _ElectronicKeyDetailChangeDateState
style: TextStyle(color: Colors.white, fontSize: 24.sp),
),
onPressed: () {
if (lockId.isNotEmpty && pwdId.isNotEmpty) {
updatePwdRequest();
} else {
updateKeyDateRequest();
if(fromType == "1"){
}else{
if (lockId.isNotEmpty && pwdId.isNotEmpty) {
updatePwdRequest();
} else {
updateKeyDateRequest();
}
}
},
),
@ -151,6 +158,7 @@ class _ElectronicKeyDetailChangeDateState
}
}
String intToStr(int v) {
return (v < 10) ? "0$v" : "$v";
}

View File

@ -12,8 +12,10 @@ import '../../../../../blue/io_tool/io_manager.dart';
import '../../../../../blue/io_tool/io_tool.dart';
import '../../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../../blue/sender_manage.dart';
import '../../../../../network/api_repository.dart';
import '../../../../../tools/baseGetXController.dart';
import '../../../../../tools/storage.dart';
import '../../../../../tools/toast.dart';
import 'addFingerprint_state.dart';
class AddFingerprintLogic extends BaseGetXController {
@ -201,6 +203,37 @@ class AddFingerprintLogic extends BaseGetXController {
});
}
//
void addFingerprintsData() async{
var entity = await ApiRepository.to.addFingerprintsData(
lockId: state.lockId.value.toString(),
endDate: state.endDate.value,
addType:state.addType.value,
fingerprintName: state.fingerprintName.value,
fingerprintNumber: "123456",
fingerprintType: state.fingerprintType.value,
isCoerced: state.isCoerced.value,
startDate: state.startDate.value,
weekDay: state.weekDay.value,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "添加成功");
updateFingerprintUserNoLoadData("");
}
}
void updateFingerprintUserNoLoadData(String fingerprintId) async{
var entity = await ApiRepository.to.updateFingerprintUserNoLoadData(
fingerprintId: fingerprintId,
lockId: state.lockId.value.toString(),
fingerprintUserNo: "0",
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "添加成功");
Get.close(3);
}
}
@override
void onReady() {
// TODO: implement onReady

View File

@ -4,4 +4,27 @@ import 'package:get/get.dart';
class AddFingerprintState{
var ifConnectScuess = false.obs;
var addFingerprintProcessNumber = 0.obs;
final lockId = 0.obs;
final endDate = "".obs;
final addType = "".obs;
final fingerprintName = "".obs;
final fingerprintNumber = "".obs;
final fingerprintType = "".obs;
final isCoerced = "".obs;
final startDate = "".obs;
final weekDay = [].obs;
AddFingerprintState() {
Map map = Get.arguments;
lockId.value = map["lockId"];
endDate.value = map["endDate"];
addType.value = map["addType"];
fingerprintName.value = map["fingerprintName"];
fingerprintNumber.value = map["fingerprintNumber"];
fingerprintType.value = map["fingerprintType"];
isCoerced.value = map["isCoerced"];
startDate.value = map["startDate"];
lockId.value = map["lockId"];
weekDay.value = map["weekDay"];
}
}

View File

@ -0,0 +1,9 @@
import 'package:star_lock/tools/baseGetXController.dart';
import 'addFingerprintTip_state.dart';
class AddFingerprintTipLogic extends BaseGetXController{
AddFingerprintTipState state = AddFingerprintTipState();
}

View File

@ -8,6 +8,7 @@ import '../../../../../app_settings/app_colors.dart';
import '../../../../../tools/submitBtn.dart';
import '../../../../../tools/titleAppBar.dart';
import '../../../../../translations/trans_lib.dart';
import 'addFingerprintTip_logic.dart';
class AddFingerprintTipPage extends StatefulWidget {
const AddFingerprintTipPage({Key? key}) : super(key: key);
@ -17,6 +18,9 @@ class AddFingerprintTipPage extends StatefulWidget {
}
class _AddFingerprintTipPageState extends State<AddFingerprintTipPage> {
final logic = Get.put(AddFingerprintTipLogic());
final state = Get.find<AddFingerprintTipLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
@ -66,7 +70,17 @@ class _AddFingerprintTipPageState extends State<AddFingerprintTipPage> {
btnName: "开始添加",//TranslationLoader.lanKeys!.next!.tr,
borderRadius: 20.w,
onClick: () {
Get.toNamed(Routers.addFingerprintPage);
Get.toNamed(Routers.addFingerprintPage, arguments: {
"lockId": state.lockId.value,
"endDate": state.endDate.value,
"addType": state.addType.value,
"fingerprintName": state.fingerprintName.value,
"fingerprintNumber": state.fingerprintNumber.value,
"fingerprintType": state.fingerprintType.value,
"isCoerced": state.isCoerced.value,
"startDate": state.startDate.value,
"weekDay": state.weekDay.value,
});
}),
),
],

View File

@ -0,0 +1,28 @@
import 'package:get/get.dart';
class AddFingerprintTipState{
final lockId = 0.obs;
final endDate = "".obs;
final addType = "".obs;
final fingerprintName = "".obs;
final fingerprintNumber = "".obs;
final fingerprintType = "".obs;
final isCoerced = "".obs;
final startDate = "".obs;
final weekDay = [].obs;
AddFingerprintTipState() {
Map map = Get.arguments;
lockId.value = map["lockId"];
endDate.value = map["endDate"];
addType.value = map["addType"];
fingerprintName.value = map["fingerprintName"];
fingerprintNumber.value = map["fingerprintNumber"];
fingerprintType.value = map["fingerprintType"];
isCoerced.value = map["isCoerced"];
startDate.value = map["startDate"];
lockId.value = map["lockId"];
weekDay.value = map["weekDay"];
}
}

View File

@ -1,6 +1,9 @@
import 'dart:math';
import 'package:get/get.dart';
import '../../../../appRouters.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../../tools/toast.dart';
@ -9,24 +12,126 @@ import 'otherTypeAddKey_state.dart';
class OtherTypeAddKeyLogic extends BaseGetXController {
OtherTypeAddKeyState state = OtherTypeAddKeyState();
//
//
void addFingerprintsData() async{
var fingerprintType = 0;// :1;23:4
var startDate = "";
var endDate = "";
if(state.seletType.value == "0"){
fingerprintType = 1;
}else if(state.seletType.value == "1"){
fingerprintType = 2;
if(state.beginTimeTimestamp.value.isEmpty){
Toast.show(msg: "请选择开始时间");
return;
}
if(state.endTimeTimestamp.value.isEmpty){
Toast.show(msg: "请选择开始时间");
return;
}
var entity = await ApiRepository.to.addFingerprintsData(
lockId: state.lockId.value.toString(),
endDate: state.fromType.value == 0 ? "0" : state.endTimeTimestamp.toString(),
addType:"1",
fingerprintName: state.nameController.text,
fingerprintNumber: "123456",
fingerprintType: state.fromType.value == 2 ? "4" : "1",
isCoerced: state.isStressFingerprint.value ? "1" : "0",
startDate: state.fromType.value == 0 ? "0" : state.beginTimeTimestamp.toString(),
cyclicConfig: '',
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "添加成功");
Get.back(result: "addScuess");
// if(DateTime.now().millisecondsSinceEpoch > int.parse(state.beginTimeTimestamp.value)){
// Toast.show(msg: "生效时间要大于当前时间");
// return;
// }
print("fasdfasdfasdf:${int.parse(state.beginTimeTimestamp.value)} == ${int.parse(state.endTimeTimestamp.value)}");
if(int.parse(state.beginTimeTimestamp.value) >= int.parse(state.endTimeTimestamp.value)){
Toast.show(msg: "失效时间要大于生效时间");
return;
}
startDate = state.beginTimeTimestamp.value;
endDate = state.endTimeTimestamp.value;
}else if(state.seletType.value == "2"){
if(state.effectiveDateTime.value <= 0){
Toast.show(msg: "请选择生效时间");
return;
}
if(state.failureDateTime.value <= 0){
Toast.show(msg: "请选择失效时间");
return;
}
if(state.weekdaysList.value.isEmpty){
Toast.show(msg: "请选择有效日");
return;
}
// if(DateTime.now().millisecondsSinceEpoch >= state.effectiveDateTime.value){
// Toast.show(msg: "生效时间要大于当前时间");
// return;
// }
if(state.effectiveDateTime.value >= state.failureDateTime.value){
Toast.show(msg: "失效时间要大于生效时间");
return;
}
startDate = state.effectiveDateTime.value.toString();
endDate = state.failureDateTime.value.toString();
fingerprintType = 4;
}
// if(state.fromType.value == 1){
// Get.toNamed(Routers.addFingerprintTipPage, arguments: {
// "lockId": state.lockId.value,
// "endDate": endDate,
// "addType": "1",
// "fingerprintName": state.nameController.text,
// "fingerprintNumber": "123456",
// "fingerprintType": fingerprintType.toString(),
// "isCoerced": state.isStressFingerprint.value ? "1" : "2",
// "startDate": startDate,
// "weekDay": state.weekdaysList.value,
// });
// }
switch (state.fromType.value) {
case 0:
//
var entity = await ApiRepository.to.addICCardData(
lockId: state.lockId.value.toString(),
endDate: endDate,
cardName: state.nameController.text,
cardNumber: (Random().nextInt(100000000) + 10000000).floor().toString(),
cardType: fingerprintType.toString(),
addType:"1",
startDate: startDate,
isCoerced: state.isStressFingerprint.value ? "1" : "2",
weekDay: state.weekdaysList.value,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "添加成功");
Get.back(result: "addScuess");
}
break;
case 1:
//
var entity = await ApiRepository.to.addFingerprintsData(
lockId: state.lockId.value.toString(),
endDate: endDate,
addType:"1",
fingerprintName: state.nameController.text,
fingerprintNumber: (Random().nextInt(100000000) + 10000000).floor().toString(),
fingerprintType: fingerprintType.toString(),
isCoerced: state.isStressFingerprint.value ? "1" : "2",
startDate: startDate,
weekDay: state.weekdaysList.value,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "添加成功");
Get.back(result: "addScuess");
}
break;
case 2:
//
break;
default:
break;
}
}
@override

View File

@ -4,6 +4,7 @@ import 'package:flutter_pickers/pickers.dart';
import 'package:flutter_pickers/time_picker/model/date_mode.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:star_lock/appRouters.dart';
import '../../../../app_settings/app_colors.dart';
@ -16,7 +17,7 @@ import 'otherTypeAddKey_logic.dart';
class OtherTypeAddKeyPage extends StatefulWidget {
final String seletType;
final int lockType; // 0 1 2
final int lockId; // 0 1 2
final int lockId;
const OtherTypeAddKeyPage(
{Key? key, required this.seletType, required this.lockType, required this.lockId}) : super(key: key);
@ -30,6 +31,10 @@ class _OtherTypeAddKeyPageState extends State<OtherTypeAddKeyPage> {
@override
Widget build(BuildContext context) {
state.seletType.value = widget.seletType;
state.fromType.value = widget.lockType;
state.lockId.value = widget.lockId;
return indexChangeWidget();
}
@ -68,17 +73,15 @@ class _OtherTypeAddKeyPageState extends State<OtherTypeAddKeyPage> {
perpetualKeyWidget(TranslationLoader.lanKeys!.name!.tr,
TranslationLoader.lanKeys!.pleaseEnter!.tr, state.nameController),
CommonItem(
leftTitel: TranslationLoader.lanKeys!.failureTime!.tr,
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
rightTitle: "",
isHaveDirection: true,
action: () {
// Map result = await Get.toNamed(Routers.electronicKeyPeriodValidityPage);
// // result as Map<String, dynamic>;
// weekdaysList = result['validityValue'];
// _effectiveDateTime = result['starDate'];
// _failureDateTime = result['endDate'];
// print(
// '得到的有效期数据:$weekdaysList $_effectiveDateTime $_failureDateTime');
action: () async {
Map result = await Get.toNamed(Routers.electronicKeyPeriodValidityPage);
state.weekdaysList.value = result['validityValue'];
state.effectiveDateTime.value = result['starDate'].millisecondsSinceEpoch;
state.failureDateTime.value = result['endDate'].millisecondsSinceEpoch;
print('得到的有效期数据:${state.weekdaysList.value} == ${state.effectiveDateTime.value} == ${state.failureDateTime.value}');
}),
SizedBox(height: 10.h),
keyBottomWidget()
@ -121,14 +124,14 @@ class _OtherTypeAddKeyPageState extends State<OtherTypeAddKeyPage> {
setState(() {
setState(() {
state.beginTime.value = '${p.year}-${p.month!.toString().padLeft(2,'0')}-${p.day!.toString().padLeft(2,'0')} ${p.hour!.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}';
state.beginTimeTimestamp.value = DateTime.parse(state.beginTime.value).toString();
state.beginTimeTimestamp.value = DateTime.parse(state.beginTime.value).millisecondsSinceEpoch.toString();
});
});
});
})),
CommonItem(
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.failureTime!.tr,
rightTitle: "2020.06.20 11:49",
rightTitle: state.endTime.value,
isHaveDirection: true,
action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM,
@ -136,11 +139,11 @@ class _OtherTypeAddKeyPageState extends State<OtherTypeAddKeyPage> {
setState(() {
setState(() {
state.endTime.value = '${p.year}-${p.month!.toString().padLeft(2,'0')}-${p.day!.toString().padLeft(2,'0')} ${p.hour!.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}';
state.endTimeTimestamp.value = DateTime.parse(state.beginTime.value).toString();
state.endTimeTimestamp.value = DateTime.parse(state.endTime.value).millisecondsSinceEpoch.toString();
});
});
});
}),
})),
Container(height: 10.h),
],
);
@ -150,7 +153,7 @@ class _OtherTypeAddKeyPageState extends State<OtherTypeAddKeyPage> {
return Column(
children: [
CommonItem(
leftTitel: "胁迫指纹",
leftTitel: TranslationLoader.lanKeys!.stressFingerprint!.tr,
rightTitle: "",
isTipsImg: false,
isHaveRightWidget: true,
@ -162,11 +165,7 @@ class _OtherTypeAddKeyPageState extends State<OtherTypeAddKeyPage> {
Toast.show(msg: "请输入姓名");
return;
}
// if(widget.lockType == 1){
Get.toNamed(Routers.addFingerprintTipPage);
// }
// logic.addFingerprintsData();
logic.addFingerprintsData();
}),
],
);

View File

@ -5,7 +5,8 @@ import 'package:get/get.dart';
class OtherTypeAddKeyState{
final lockId = 0.obs;
final fromType = 0.obs;
final seletType = "0".obs;// 0 1 2
final fromType = 0.obs;// 0 1 2
final isStressFingerprint = false.obs;
var beginTime = "".obs;//
@ -13,6 +14,10 @@ class OtherTypeAddKeyState{
var beginTimeTimestamp = "".obs;//
var endTimeTimestamp = "".obs;//
var effectiveDateTime = 0.obs;//
var failureDateTime = 0.obs;//
var weekdaysList = [].obs;
final TextEditingController nameController = TextEditingController();
OtherTypeAddKeyState() {
Map map = Get.arguments;

View File

@ -0,0 +1,52 @@
import 'package:get/get.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/toast.dart';
import 'otherTypeKeyChangeDate_state.dart';
class OtherTypeKeyChangeDateLogic extends BaseGetXController{
OtherTypeKeyChangeDateState state = OtherTypeKeyChangeDateState();
//
void editFingerprintsData() async{
var entity = await ApiRepository.to.editFingerprintsData(
fingerprintId: state.fingerprintItemData.value.fingerprintId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.fingerprintItemData.value.weekDay!,
startDate: state.beginTimeTimestamp.value.toString(),
endDate: state.endTimeTimestamp.value.toString(),
isCoerced: state.fingerprintItemData.value.isCoerced == 1 ? "2" : "1",
fingerprintName: state.fingerprintItemData.value.fingerprintName!,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "修改成功");
Get.back(result: {
"beginTimeTimestamp":state.beginTimeTimestamp.value,
"endTimeTimestamp":state.endTimeTimestamp.value,
});
eventBus.fire(OtherTypeRefreshListEvent());
}
}
// iC卡
void editICCardData() async{
var entity = await ApiRepository.to.editICCardData(
cardId: state.fingerprintItemData.value.cardId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.fingerprintItemData.value.weekDay!,
startDate: state.beginTimeTimestamp.value.toString(),
endDate: state.endTimeTimestamp.value.toString(),
isCoerced: state.fingerprintItemData.value.isCoerced == 1 ? "2" : "1",
cardName: state.fingerprintItemData.value.cardName!,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "修改成功");
Get.back(result: {
"beginTimeTimestamp":state.beginTimeTimestamp.value,
"endTimeTimestamp":state.endTimeTimestamp.value,
});
}
}
}

View File

@ -0,0 +1,99 @@
import 'package:flutter/material.dart';
import 'package:flutter_pickers/pickers.dart';
import 'package:flutter_pickers/time_picker/model/date_mode.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../../../app_settings/app_colors.dart';
import '../../../../tools/commonItem.dart';
import '../../../../tools/titleAppBar.dart';
import '../../../../translations/trans_lib.dart';
import 'otherTypeKeyChangeDate_logic.dart';
class OtherTypeKeyChangeDatePage extends StatefulWidget {
const OtherTypeKeyChangeDatePage({Key? key}) : super(key: key);
@override
State<OtherTypeKeyChangeDatePage> createState() => _OtherTypeKeyChangeDatePageState();
}
class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage> {
final logic = Get.put(OtherTypeKeyChangeDateLogic());
final state = Get.find<OtherTypeKeyChangeDateLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle: "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}",
haveBack: true,
backgroundColor: AppColors.mainColor,
actionsList: [
TextButton(
child: Text(
TranslationLoader.lanKeys!.sure!.tr,
style: TextStyle(color: Colors.white, fontSize: 24.sp),
),
onPressed: () {
// print("state.pushType.value:${state.pushType.value}");
switch (state.pushType.value) {
case 0:
//
logic.editICCardData();
break;
case 1:
//
logic.editFingerprintsData();
break;
case 2:
break;
default:
break;
}
},
),
],
),
body: buildMainUI(),
);
}
Widget buildMainUI() {
return Column(
children: [
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
rightTitle: state.beginTime.value,
isHaveLine: true,
isHaveDirection: true,
action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) {
setState(() {
state.beginTimeTimestamp.value = DateTime.parse(
'${p.year}-${p.month.toString().padLeft(2,'0')}-${p.day.toString().padLeft(2,'0')} ${p.hour!.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}').millisecondsSinceEpoch;
state.beginTime.value = "${p.year}.${p.month.toString().padLeft(2,'0')}.${p.day.toString().padLeft(2,'0')} ${p.hour.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}";
});
});
})),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.failureTime!.tr,
rightTitle: state.endTime.value,
isHaveDirection: true,
action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) {
setState(() {
state.endTimeTimestamp.value = DateTime.parse(
'${p.year}-${p.month.toString().padLeft(2,'0')}-${p.day.toString().padLeft(2,'0')} ${p.hour!.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}').millisecondsSinceEpoch;
state.endTime.value = "${p.year}.${p.month.toString().padLeft(2,'0')}.${p.day.toString().padLeft(2,'0')} ${p.hour.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}";
});
});
})),
],
);
}
}

View File

@ -0,0 +1,27 @@
import 'package:get/get.dart';
import '../../../../tools/dateTool.dart';
import '../otherTypeKeyList/fingerprintListData_entity.dart';
class OtherTypeKeyChangeDateState{
final fingerprintItemData = FingerprintItemData().obs;
var beginTime = "".obs;//
var endTime = "".obs;//
var beginTimeTimestamp = 0.obs;//
var endTimeTimestamp = 0.obs;//
var pushType = 0.obs;// 0 1 2
OtherTypeKeyChangeDateState() {
Map map = Get.arguments;
pushType.value = map["pushType"];
fingerprintItemData.value = map["fingerprintItemData"];
beginTime.value = DateTool().dateToYMDHNString(fingerprintItemData.value.startDate.toString());
endTime.value = DateTool().dateToYMDHNString(fingerprintItemData.value.endDate.toString());
beginTimeTimestamp.value = fingerprintItemData.value.startDate!;
endTimeTimestamp.value = fingerprintItemData.value.endDate!;
}
}

View File

@ -0,0 +1,56 @@
import 'package:get/get.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/toast.dart';
import 'otherTypeKeyChangeValidityDate_state.dart';
class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
OtherTypeKeyChangeValidityDateState state = OtherTypeKeyChangeValidityDateState();
//
void editFingerprintsData() async{
var entity = await ApiRepository.to.editFingerprintsData(
fingerprintId: state.fingerprintItemData.value.fingerprintId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
startDate: state.beginTimeTimestamp.value.toString(),
endDate: state.endTimeTimestamp.value.toString(),
isCoerced: state.fingerprintItemData.value.isCoerced == 1 ? "2" : "1",
fingerprintName: state.fingerprintItemData.value.fingerprintName!,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "修改成功");
Get.back(result: {
"beginTimeTimestamp":state.beginTimeTimestamp.value,
"endTimeTimestamp":state.endTimeTimestamp.value,
"weekDay":state.weekDay.value,
});
eventBus.fire(OtherTypeRefreshListEvent());
}
}
// iC卡
void editICCardData() async{
var entity = await ApiRepository.to.editICCardData(
cardId: state.fingerprintItemData.value.cardId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
startDate: state.beginTimeTimestamp.value.toString(),
endDate: state.endTimeTimestamp.value.toString(),
isCoerced: state.fingerprintItemData.value.isCoerced == 1 ? "2" : "1",
cardName: state.fingerprintItemData.value.cardName!,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "修改成功");
Get.back(result: {
"beginTimeTimestamp":state.beginTimeTimestamp.value,
"endTimeTimestamp":state.endTimeTimestamp.value,
"weekDay":state.weekDay.value,
});
}
}
}

View File

@ -0,0 +1,193 @@
import 'package:flutter/material.dart';
import 'package:flutter_pickers/pickers.dart';
import 'package:flutter_pickers/time_picker/model/date_mode.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../../../app_settings/app_colors.dart';
import '../../../../tools/commonItem.dart';
import '../../../../tools/submitBtn.dart';
import '../../../../tools/titleAppBar.dart';
import '../../../../translations/trans_lib.dart';
import 'otherTypeKeyChangeValidityDate_logic.dart';
class OtherTypeKeyChangeValidityDatePage extends StatefulWidget {
const OtherTypeKeyChangeValidityDatePage({Key? key}) : super(key: key);
@override
State<OtherTypeKeyChangeValidityDatePage> createState() => _OtherTypeKeyChangeValidityDatePageState();
}
class _OtherTypeKeyChangeValidityDatePageState extends State<OtherTypeKeyChangeValidityDatePage> {
final logic = Get.put(OtherTypeKeyChangeValidityDateLogic());
final state = Get.find<OtherTypeKeyChangeValidityDateLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle: TranslationLoader.lanKeys!.normallyOpenMode!.tr,
haveBack: true,
backgroundColor: AppColors.mainColor),
body: ListView(
children: [
Container(
height: 10.h,
color: AppColors.mainBackgroundColor,
),
topWidget(),
SizedBox(height: 10.h),
bottomWidget(),
Container(
margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 30.h),
child: SubmitBtn(
btnName: TranslationLoader.lanKeys!.save!.tr,
onClick: () {
if(state.pushType.value == 0){
logic.editICCardData();
}else if(state.pushType.value == 1){
logic.editFingerprintsData();
}
}),
),
],
));
}
Widget topWidget() {
return Container(
height: 160.h,
width: 1.sw,
color: Colors.white,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: 60.h,
// color: Colors.red,
padding: EdgeInsets.only(left: 30.w, top: 15.h),
child: Text(TranslationLoader.lanKeys!.effectiveDay!.tr, style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600))),
Container(
height: 100.h,
padding: EdgeInsets.only(left: 10.w, right: 10.w, bottom: 10.h),
child: GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 7, childAspectRatio: 1.0),
itemCount: 7,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
index += 1;
return btnItem(index);
})),
],
),
);
}
Widget btnItem(int index) {
String dateStr;
switch (index) {
case 1:
dateStr = TranslationLoader.lanKeys!.mondayShort!.tr;
break;
case 2:
dateStr = TranslationLoader.lanKeys!.tuesdayShort!.tr;
break;
case 3:
dateStr = TranslationLoader.lanKeys!.wednesdayShort!.tr;
break;
case 4:
dateStr = TranslationLoader.lanKeys!.thursdayShort!.tr;
break;
case 5:
dateStr = TranslationLoader.lanKeys!.fridayShort!.tr;
break;
case 6:
dateStr = TranslationLoader.lanKeys!.saturdayShort!.tr;
break;
case 7:
dateStr = TranslationLoader.lanKeys!.sundayShort!.tr;
break;
default:
dateStr = "";
break;
}
return GestureDetector(
onTap: () {
setState(() {
if(state.weekDay.value.contains(index)){
state.weekDay.value.remove(index);
}else{
state.weekDay.value.add(index);
}
state.weekDay.value.sort();
});
},
child: Obx(() => Container(
width: 40.w,
height: 40.w,
margin: EdgeInsets.all(10.w),
decoration: BoxDecoration(
color: state.weekDay.value.contains(index) ? AppColors.mainColor :Colors.white,
border: Border.all(width: 1, color: AppColors.btnDisableColor),
borderRadius: BorderRadius.circular(30.w),
),
child: Center(
child: Text(
dateStr,
style: TextStyle(fontSize: 20.sp, color: state.weekDay.value.contains(index) ? Colors.white : AppColors.darkGrayTextColor),
)),
)),
);
}
Widget bottomWidget() {
return Column(
children: [
Container(
color: Colors.white,
child: Column(
children: [
Obx(() => CommonItem(
leftTitel:
"${TranslationLoader.lanKeys!.begin!.tr}${TranslationLoader.lanKeys!.time!.tr}",
rightTitle: state.beginTime.value,
isHaveDirection: true,
isHaveLine: true,
action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) {
setState(() {
state.beginTimeTimestamp.value = DateTime.parse(
'${p.year}-${p.month.toString().padLeft(2,'0')}-${p.day.toString().padLeft(2,'0')} ${p.hour!.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}').millisecondsSinceEpoch;
state.beginTime.value = "${p.year}.${p.month.toString().padLeft(2,'0')}.${p.day.toString().padLeft(2,'0')} ${p.hour.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}";
});
});
})),
Obx(() => CommonItem(
leftTitel:
"${TranslationLoader.lanKeys!.end!.tr}${TranslationLoader.lanKeys!.time!.tr}",
rightTitle: state.endTime.value,
isHaveDirection: true,
action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) {
setState(() {
state.endTimeTimestamp.value = DateTime.parse(
'${p.year}-${p.month.toString().padLeft(2,'0')}-${p.day.toString().padLeft(2,'0')} ${p.hour!.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}').millisecondsSinceEpoch;
state.endTime.value = "${p.year}.${p.month.toString().padLeft(2,'0')}.${p.day.toString().padLeft(2,'0')} ${p.hour.toString().padLeft(2,'0')}:${p.minute!.toString().padLeft(2,'0')}";
});
});
})),
Container(height: 10.h),
],
),
),
],
);
}
}

View File

@ -0,0 +1,29 @@
import 'package:get/get.dart';
import '../../../../tools/dateTool.dart';
import '../otherTypeKeyList/fingerprintListData_entity.dart';
class OtherTypeKeyChangeValidityDateState{
final fingerprintItemData = FingerprintItemData().obs;
var beginTime = "".obs;//
var endTime = "".obs;//
var beginTimeTimestamp = 0.obs;//
var endTimeTimestamp = 0.obs;//
var pushType = 0.obs;// 0 1 2
var weekDay = [].obs;
OtherTypeKeyChangeValidityDateState() {
Map map = Get.arguments;
pushType.value = map["pushType"];
fingerprintItemData.value = map["fingerprintItemData"];
beginTime.value = DateTool().dateToYMDHNString(fingerprintItemData.value.startDate.toString());
endTime.value = DateTool().dateToYMDHNString(fingerprintItemData.value.endDate.toString());
beginTimeTimestamp.value = fingerprintItemData.value.startDate!;
endTimeTimestamp.value = fingerprintItemData.value.endDate!;
weekDay.value = fingerprintItemData.value.weekDay!;
}
}

View File

@ -1,11 +1,74 @@
import 'package:get/get.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/toast.dart';
import 'otherTypeKeyDetail_state.dart';
class OtherTypeKeyDetailLogic extends BaseGetXController{
OtherTypeKeyDetailState state = OtherTypeKeyDetailState();
//
void editFingerprintsData() async{
var entity = await ApiRepository.to.editFingerprintsData(
fingerprintId: state.keyId.value.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
startDate: state.effectiveDateTime.value.toString(),
endDate: state.failureDateTime.value.toString(),
isCoerced: state.isStressFingerprint.value ? "2" : "1",
fingerprintName: state.changeNameController.text,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "修改成功");
Get.back(result: "addScuess");
}
}
//
void deletFingerprintsData() async{
var entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: state.fingerprintItemData.value.fingerprintId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
type: "0",
deleteType:"1"
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "删除成功");
Get.back(result: "addScuess");
}
}
// iC卡
void editICCardData() async{
var entity = await ApiRepository.to.editICCardData(
cardId: state.keyId.value.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
startDate: state.effectiveDateTime.value.toString(),
endDate: state.failureDateTime.value.toString(),
isCoerced: state.isStressFingerprint.value ? "2" : "1",
cardName: state.changeNameController.text,
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "修改成功");
Get.back(result: "addScuess");
}
}
// IC卡
void deletICCardData() async{
var entity = await ApiRepository.to.deletIcCardData(
cardId: state.fingerprintItemData.value.cardId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
type: "0",
deleteType:"1"
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "删除成功");
Get.back(result: "addScuess");
}
}
}

View File

@ -6,8 +6,11 @@ import 'package:get/get.dart';
import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart';
import '../../../../tools/commonItem.dart';
import '../../../../tools/dateTool.dart';
import '../../../../tools/showTFView.dart';
import '../../../../tools/submitBtn.dart';
import '../../../../tools/titleAppBar.dart';
import '../../../../tools/toast.dart';
import '../../../../translations/trans_lib.dart';
import 'otherTypeKeyDetail_logic.dart';
@ -24,71 +27,171 @@ class _OtherTypeKeyDetailPageState extends State<OtherTypeKeyDetailPage> {
@override
Widget build(BuildContext context) {
var type = ModalRoute.of(context)?.settings.arguments as int;
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle: "${getAppBarTitle(type)}${TranslationLoader.lanKeys!.number!.tr}",
barTitle: "${getAppBarTitle(state.type.value)}${TranslationLoader.lanKeys!.number!.tr}",
haveBack: true,
backgroundColor: AppColors.mainColor,
actionsList: [
TextButton(
child: Text(TranslationLoader.lanKeys!.share!.tr, style: TextStyle(color: Colors.white, fontSize: 24.sp),),
onPressed: () {
},
),
],
// actionsList: [
// TextButton(
// child: Text(TranslationLoader.lanKeys!.share!.tr, style: TextStyle(color: Colors.white, fontSize: 24.sp),),
// onPressed: () {
//
// },
// ),
// ],
),
body: Column(
children: [
CommonItem(
leftTitel: "${getAppBarTitle(type)}${TranslationLoader.lanKeys!.number!.tr}",
rightTitle: "98765432",
isHaveDirection: true,
isHaveLine: true,
action: () {
showCupertinoAlertDialog(context);
}),
CommonItem(
Obx(() => CommonItem(
leftTitel: "${getAppBarTitle(state.type.value)}${TranslationLoader.lanKeys!.number!.tr}",
rightTitle: state.typeNumber.value,
isHaveDirection: false,
isHaveLine: true)),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.name!.tr,
rightTitle: "你好",
rightTitle: state.typeName.value,
isHaveDirection: true,
isHaveLine: true,
action: () {
showCupertinoAlertDialog(context);
}),
CommonItem(
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
rightTitle: "永久",
isHaveDirection: true,
action: () {
Navigator.pushNamed(context, Routers.electronicKeyDetailChangeDate);
}),
})),
Obx(() => Visibility(
visible: (state.keyType.value == 4 || state.keyType.value == 2) ? true : false,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
allHeight: 70.h,
// rightTitle:"2023.09.19 11:27\n2023.09.25 11:27",
rightTitle: state.keyType.value == 1 ? "永久" : "${DateTool().dateToYMDHNString(state.effectiveDateTime.value.toString())}\n${DateTool().dateToYMDHNString(state.failureDateTime.value.toString())}",
isHaveDirection: true,
isHaveLine: true,
action: () async {
// switch(state.type.value){
// case 0:
// //
//
// break;
// case 1:
//
if(state.keyType.value == 2){
//
var data = await Get.toNamed(Routers.otherTypeKeyChangeDatePage, arguments: {
"pushType": state.type.value,
"fingerprintItemData": state.fingerprintItemData.value,
});
if(data != null) {
setState(() {
state.effectiveDateTime.value = data["beginTimeTimestamp"];
state.failureDateTime.value = data["endTimeTimestamp"];
});
}
}else if(state.keyType.value == 4){
//
var data = await Get.toNamed(Routers.otherTypeKeyChangeValidityDatePage, arguments: {
"pushType": state.type.value,
"fingerprintItemData": state.fingerprintItemData.value,
});
if(data != null) {
setState(() {
state.effectiveDateTime.value = data["beginTimeTimestamp"];
state.failureDateTime.value = data["endTimeTimestamp"];
state.weekDay.value = data["weekDay"];
});
}
}
// break;
// case 2:
// //
//
// break;
// }
}))),
Obx(() => Visibility(
visible: state.keyType.value == 4 ? true : false,
child: Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
rightTitle: state.weekDay.value.join(','),
isHaveDirection: true,
action: () async {
// switch(state.type.value){
// case 0:
// //
//
// break;
// case 1:
//
var data = await Get.toNamed(Routers.otherTypeKeyChangeValidityDatePage, arguments: {
"pushType": state.type.value,
"fingerprintItemData": state.fingerprintItemData.value,
});
if(data != null) {
setState(() {
state.effectiveDateTime.value = data["beginTimeTimestamp"];
state.failureDateTime.value = data["endTimeTimestamp"];
state.weekDay.value = data["weekDay"];
});
}
// break;
// case 2:
// //
//
// break;
// }
})))
),
Container(height: 10.h),
CommonItem(
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.additive!.tr,
rightTitle: "15080825640",
rightTitle: state.adder.value,
action: () {
}),
CommonItem(
})),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.addTime!.tr,
rightTitle: "2020.06.21 11:49",
rightTitle: DateTool().dateToYMDHNString(state.addTime.value.toString()),
action: () {
}),
})),
SizedBox(height: 10.h),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.stressFingerprint!.tr,
rightTitle: "",
isTipsImg: false,
isHaveRightWidget: true,
rightWidget: SizedBox(
width: 60.w, height: 50.h, child: _isStressFingerprint()))),
Container(height: 10.h),
CommonItem(
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
rightTitle: "",
isHaveDirection: true,
action: () {
Get.toNamed(Routers.keyOperationRecordPage);
switch (state.type.value) {
case 0:
//
Get.toNamed(Routers.keyOperationRecordPage, arguments: {
'lockId': state.fingerprintItemData.value.lockId.toString(),
'cardId': state.fingerprintItemData.value.cardId.toString()
});
break;
case 1:
//
Get.toNamed(Routers.keyOperationRecordPage, arguments: {
'lockId': state.fingerprintItemData.value.lockId.toString(),
'fingerprintId': state.fingerprintItemData.value.fingerprintId.toString()
});
break;
case 2:
break;
default:
break;
}
}),
SizedBox(height: 40.h),
addControlsBtn(type),
// SizedBox(height: 40.h),
// addControlsBtn(type),
SizedBox(height: 30.h),
SubmitBtn(
btnName: TranslationLoader.lanKeys!.delete!.tr,
@ -97,13 +200,57 @@ class _OtherTypeKeyDetailPageState extends State<OtherTypeKeyDetailPage> {
margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w, bottom: 30.w),
padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
onClick: () {
switch (state.type.value) {
case 0:
//
logic.deletICCardData();
break;
case 1:
//
logic.deletFingerprintsData();
break;
case 2:
break;
default:
break;
}
}),
],
),
);
}
//isStressFingerprint false: ture:
CupertinoSwitch _isStressFingerprint() {
return CupertinoSwitch(
activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white,
value: state.isStressFingerprint.value,
onChanged: (value) {
setState(() {
state.isStressFingerprint.value = value;
switch(state.type.value){
case 0:
//
logic.editICCardData();
break;
case 1:
//
logic.editFingerprintsData();
break;
case 2:
//
break;
}
});
},
);
}
Widget addControlsBtn(int type) {
List<Widget> widgetList = [];
List<Map<String, dynamic>> routerList = [];
@ -212,139 +359,38 @@ class _OtherTypeKeyDetailPageState extends State<OtherTypeKeyDetailPage> {
return title;
}
Widget commonItem(String leftTitle, String rightTitle,
{bool isHaveDirection = false,
bool isHaveLine = false,
bool isHaveRightWidget = false,
Widget? rightWidget,
Function()? action}) {
return GestureDetector(
onTap: action,
child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
// height: 80.h,
color: Colors.white,
padding: EdgeInsets.only(
left: 20.w, right: 10.w, top: 20.w, bottom: 20.w),
child: Row(
children: [
SizedBox(width: 20.w),
Text(
leftTitle,
style:
TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500),
),
SizedBox(width: 20.w),
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
isHaveRightWidget
? rightWidget!
: Text(
rightTitle,
textAlign: TextAlign.end,
style: TextStyle(
fontSize: 28.sp, fontWeight: FontWeight.w500),
)
],
),
),
SizedBox(width: 5.w),
isHaveDirection
? Image.asset(
'images/icon_right.png',
width: 50.w,
height: 50.w,
)
: SizedBox(width: 10.w),
// SizedBox(width:10.w),
],
),
),
isHaveLine
? Container(
height: 0.5.h,
color: Colors.grey,
)
: Container()
],
),
);
}
void showCupertinoAlertDialog(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return Card(
color: const Color(0x00FFFFFF),
child: CupertinoAlertDialog(
title: const Text("修改密码"),
content: Column(
children: <Widget>[
const SizedBox(
height: 10,
),
Container(
height: 80.h,
// color: Colors.white,
margin: EdgeInsets.all(10.w),
child: const TextField(
//
maxLines: 1,
// controller: _controller,
autofocus: false,
decoration: InputDecoration(
//
// contentPadding: const EdgeInsets.only(
// top: 12.0, left: -19.0, right: -15.0, bottom: 8.0),
hintText: "请输入要修改的名字",
//线
border: InputBorder.none,
//
// icon: Padding(
// padding: EdgeInsets.only(top:30.w, bottom: 20.w, right: 20.w, left: 20.w),
// child: Image.asset('images/main/icon_main_search.png', width: 40.w, height: 40.w,),
// ),
// //
// suffixIcon: GestureDetector(
// onTap: () {
// //addPostFrameCallback是 StatefulWidge
// // SchedulerBinding.instance.addPostFrameCallback((_) {
// // _controller.text = "";
// // });
// },
// child: Padding(
// padding: EdgeInsets.all(8),
// child: Image.asset('images/main/icon_main_cell.png', width: 50.w, height: 50.w,),
// ),
// )
),
),
)
],
),
actions: <Widget>[
CupertinoDialogAction(
child: const Text("取消"),
onPressed: () {
Navigator.pop(context);
// print("取消");
},
),
CupertinoDialogAction(
child: const Text("确定"),
onPressed: () {
Navigator.pop(context);
// print("确定");
},
),
],
),
);
return ShowTFView(
title: "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.name!.tr}",
tipTitle: "",
controller: state.changeNameController,
sureClick: () {
if(state.changeNameController.text.isEmpty){
Toast.show(msg: "请输入姓名");
return;
}
Get.back();
switch(state.type.value){
case 0:
//
logic.editICCardData();
break;
case 1:
//
logic.editFingerprintsData();
break;
case 2:
//
break;
}
},
cancelClick: () {
Get.back();
},);
});
}
}

View File

@ -1,4 +1,62 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../../tools/dateTool.dart';
import '../otherTypeKeyList/fingerprintListData_entity.dart';
class OtherTypeKeyDetailState{
final fingerprintItemData = FingerprintItemData().obs;
final type = 0.obs;// 0 1 2
final TextEditingController changeNameController = TextEditingController();
final typeNumber = "".obs;//
final typeName = "".obs;//
var effectiveDateTime = 0.obs;//
var failureDateTime = 0.obs;//
final keyType = 0.obs;// :1;23:4
var weekDay = [].obs;//
var adder = "".obs;//
var addTime = 0.obs;//
var keyId = 0.obs;//
final isStressFingerprint = false.obs;
OtherTypeKeyDetailState() {
Map map = Get.arguments;
type.value = map["type"];
if(type.value == 0){
// 0
fingerprintItemData.value = map["fingerprintItemData"];
keyId.value = fingerprintItemData.value.cardId!;
typeNumber.value = fingerprintItemData.value.cardNumber!;
typeName.value = fingerprintItemData.value.cardName!;
changeNameController.text = typeName.value;
effectiveDateTime.value = fingerprintItemData.value.startDate!;
failureDateTime.value = fingerprintItemData.value.endDate!;
keyType.value = fingerprintItemData.value.cardType!;
adder.value = fingerprintItemData.value.senderUsername!;
addTime.value = fingerprintItemData.value.createDate!;
isStressFingerprint.value = fingerprintItemData.value.isCoerced! == 2 ? true : false;
weekDay.value = fingerprintItemData.value.weekDay!;
}else if(type.value == 1){
// 1
fingerprintItemData.value = map["fingerprintItemData"];
keyId.value = fingerprintItemData.value.fingerprintId!;
typeNumber.value = fingerprintItemData.value.fingerprintNumber!;
typeName.value = fingerprintItemData.value.fingerprintName!;
changeNameController.text = typeName.value;
effectiveDateTime.value = fingerprintItemData.value.startDate!;
failureDateTime.value = fingerprintItemData.value.endDate!;
keyType.value = fingerprintItemData.value.fingerprintType!;
adder.value = fingerprintItemData.value.senderUsername!;
addTime.value = fingerprintItemData.value.createDate!;
isStressFingerprint.value = fingerprintItemData.value.isCoerced! == 2 ? true : false;
weekDay.value = fingerprintItemData.value.weekDay!;
}else if(type.value == 2){
// 2
}
}
}

View File

@ -62,62 +62,86 @@ class Data {
}
class FingerprintItemData {
int? status;
int? fingerprintStatus;
int? lockId;
int? createDate;
String? fingerprintName;
int? endDate;
String? userId;
int? apiUserId;
String? nickName;
int? isCoerced;
int? startDate;
String? fingerprintNumber;
int? fingerprintType;
int? fingerprintId;
String? senderUsername;
List? weekDay;
String? cardName;
String? cardNumber;
int? cardType;
int? cardId;
FingerprintItemData(
{this.status,
{ this.fingerprintStatus,
this.lockId,
this.createDate,
this.fingerprintName,
this.endDate,
this.userId,
this.apiUserId,
this.nickName,
this.isCoerced,
this.startDate,
this.fingerprintNumber,
this.fingerprintType,
this.fingerprintId});
this.fingerprintId,
this.senderUsername,
this.weekDay,
this.cardName,
this.cardNumber,
this.cardType,
this.cardId});
FingerprintItemData.fromJson(Map<String, dynamic> json) {
status = json['status'];
fingerprintStatus = json['fingerprintStatus'];
lockId = json['lockId'];
createDate = json['createDate'];
fingerprintName = json['fingerprintName'];
endDate = json['endDate'];
userId = json['userId'];
apiUserId = json['apiUserId'];
nickName = json['nickName'];
isCoerced = json['isCoerced'];
startDate = json['startDate'];
fingerprintNumber = json['fingerprintNumber'];
fingerprintType = json['fingerprintType'];
fingerprintId = json['fingerprintId'];
senderUsername = json['senderUsername'];
weekDay = json['weekDay'];
cardName = json['cardName'];
cardNumber = json['cardNumber'];
cardType = json['cardType'];
cardId = json['cardId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['status'] = status;
data['fingerprintStatus'] = fingerprintStatus;
data['lockId'] = lockId;
data['createDate'] = createDate;
data['fingerprintName'] = fingerprintName;
data['endDate'] = endDate;
data['userId'] = userId;
data['apiUserId'] = apiUserId;
data['nickName'] = nickName;
data['isCoerced'] = isCoerced;
data['startDate'] = startDate;
data['fingerprintNumber'] = fingerprintNumber;
data['fingerprintType'] = fingerprintType;
data['fingerprintId'] = fingerprintId;
data['senderUsername'] = senderUsername;
data['weekDay'] = weekDay;
data['cardName'] = cardName;
data['cardNumber'] = cardNumber;
data['cardType'] = cardType;
data['cardId'] = cardId;
return data;
}
}

View File

@ -14,7 +14,9 @@ import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
import '../../../../tools/toast.dart';
import 'otherTypeKeyList_state.dart';
class OtherTypeKeyListLogic extends BaseGetXController{
@ -267,13 +269,62 @@ class OtherTypeKeyListLogic extends BaseGetXController{
lockId: state.lockId.value.toString(),
pageNo: '1',
pageSize: '20',
searchStr: '',
searchStr: state.searchController.text,
);
if(entity.errorCode!.codeIsSuccessful){
state.fingerprintItemListData.value = entity.data!.list!;
}
}
//
void deletAllFingerprintsData() async{
var entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: "",
lockId: state.lockId.value.toString(),
type: "1",
deleteType:"1"
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "重置成功");
getFingerprintsListData();
}
}
// IC卡列表
void getICCardListData() async{
var entity = await ApiRepository.to.getICCardListData(
lockId: state.lockId.value.toString(),
pageNo: '1',
pageSize: '20',
searchStr: state.searchController.text,
);
if(entity.errorCode!.codeIsSuccessful){
state.fingerprintItemListData.value = entity.data!.list!;
}
}
// IC卡
void deletICCardData() async{
var entity = await ApiRepository.to.deletIcCardData(
cardId: "",
lockId: state.lockId.value.toString(),
type: "1",
deleteType:"1"
);
if(entity.errorCode!.codeIsSuccessful){
Toast.show(msg: "重置成功");
getICCardListData();
}
}
//
late StreamSubscription _teamEvent;
void _initRefreshAction() {
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((event) {
getFingerprintsListData();
});
}
@override
void onReady() {
// TODO: implement onReady
@ -282,7 +333,24 @@ class OtherTypeKeyListLogic extends BaseGetXController{
_initReplySubscription();
getFingerprintsListData();
_initRefreshAction();
switch (state.fromType.value) {
case 0:
//
getICCardListData();
break;
case 1:
//
getFingerprintsListData();
break;
case 2:
//
break;
default:
break;
}
}
@override
@ -301,5 +369,6 @@ class OtherTypeKeyListLogic extends BaseGetXController{
// TODO: implement onClose
super.onClose();
_replySubscription.cancel();
_teamEvent.cancel();
}
}

View File

@ -37,7 +37,24 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
TranslationLoader.lanKeys!.reset!.tr,
style: TextStyle(color: Colors.white, fontSize: 24.sp),
),
onPressed: () {},
onPressed: () {
switch (state.fromType.value) {
case 0:
//
logic.deletICCardData();
break;
case 1:
//
logic.deletAllFingerprintsData();
break;
case 2:
//
break;
default:
break;
}
},
),
],
),
@ -49,15 +66,29 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
),
Expanded(child: _buildMainUI(state.fromType.value)),
AddBottomWhiteBtn(
btnName:
'${TranslationLoader.lanKeys!.add!.tr}${getAppBarTitle(state.fromType.value)}',
btnName: '${TranslationLoader.lanKeys!.add!.tr}${getAppBarTitle(state.fromType.value)}',
onClick: () async {
var data = await Get.toNamed(Routers.otherTypeKeyManagePage, arguments: {
"lockId": state.lockId.value,
"fromType": state.fromType.value
});
if(data != null) {
logic.getFingerprintsListData();
switch (state.fromType.value) {
case 0:
//
logic.getICCardListData();
break;
case 1:
//
logic.getFingerprintsListData();
break;
case 2:
//
break;
default:
break;
}
}
},
),
@ -96,13 +127,36 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
child: TextField(
//
maxLines: 1,
// controller: _controller,
controller: state.searchController,
autofocus: false,
onChanged: (value){
print("onChanged:$value");
},
onEditingComplete: (){
print("onEditingComplete:");
},
onSubmitted: (value){
switch (state.fromType.value) {
case 0:
//
logic.getICCardListData();
break;
case 1:
//
logic.getFingerprintsListData();
break;
case 2:
//
break;
default:
break;
}
},
decoration: InputDecoration(
//
contentPadding: const EdgeInsets.only(
top: 12.0, left: -19.0, right: -15.0, bottom: 8.0),
contentPadding: const EdgeInsets.only(top: 12.0, left: -19.0, right: -15.0, bottom: 8.0),
hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr,
hintStyle: TextStyle(fontSize: 22.sp, height: 3.0),
//线
@ -123,26 +177,54 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
}
Widget _buildMainUI(int type) {
String typeImgName = "";
if (type == 0) {
//
typeImgName = 'images/icon_card.png';
} else if (type == 1) {
//
typeImgName = 'images/icon_fingerprint.png';
} else {
//
typeImgName = 'images/icon_card.png';
}
// String typeImgName = "";
// if (type == 0) {
// //
// typeImgName = 'images/icon_card.png';
// } else if (type == 1) {
// //
// typeImgName = 'images/icon_fingerprint.png';
// } else if (type == 2) {
// //
// typeImgName = 'images/icon_card.png';
// }
return Obx(() => state.fingerprintItemListData.value.isNotEmpty ? ListView.separated(
itemCount: state.fingerprintItemListData.value.length,
itemBuilder: (c, index) {
FingerprintItemData fingerprintItemData = state.fingerprintItemListData.value[index];
return _keyItem(typeImgName, fingerprintItemData.fingerprintName!, fingerprintItemData.fingerprintType! == 1 ? "永久" : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", () {
Get.toNamed(Routers.otherTypeKeyDetailPage,
arguments: type);
});
switch (state.fromType.value) {
case 0:
//
return _keyItem('images/icon_card.png', fingerprintItemData.cardName!, fingerprintItemData.cardType! == 1 ? "永久" : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", () async {
var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: {
"fingerprintItemData": fingerprintItemData,
"type": type,
});
if(data != null) {
logic.getICCardListData();
}
});
break;
case 1:
//
return _keyItem('images/icon_fingerprint.png', fingerprintItemData.fingerprintName!, fingerprintItemData.fingerprintType! == 1 ? "永久" : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", () async {
var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: {
"fingerprintItemData": fingerprintItemData,
"type": type,
});
if(data != null) {
logic.getFingerprintsListData();
}
});
break;
case 2:
//
break;
default:
break;
}
},
separatorBuilder: (BuildContext context, int index) {
return const Divider(

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'fingerprintListData_entity.dart';
@ -8,6 +9,7 @@ class OtherTypeKeyListState{
final fromType = 0.obs;
final fingerprintItemListData = <FingerprintItemData>[].obs;
final TextEditingController searchController = TextEditingController();
OtherTypeKeyListState() {
Map map = Get.arguments;

View File

@ -10,7 +10,7 @@ import '../otherTypeAddKey/otherTypeAddKey_page.dart';
class OtherTypeKeyManageTabbar extends StatefulWidget {
var initialIndex = 1;
var lockType = 0;
var lockId = 0; // 0 1 2
var lockId = 0;
OtherTypeKeyManageTabbar(
{Key? key, required this.initialIndex, required this.lockType, required this.lockId})
: super(key: key);

View File

@ -79,6 +79,14 @@ abstract class Api {
final String getFingerprintListURL = '/fingerprint/list'; //
final String addFingerprintURL = '/fingerprint/add'; //
final String editFingerprintURL = '/fingerprint/changePeriod'; //
final String deleteFingerprintURL = '/fingerprint/delete'; //
final String updateFingerprintUserNoURL = '/fingerprint/updateFingerprintUserNo'; //
final String getICCardListURL = '/identityCard/list'; // IC卡列表
final String addICCardURL = '/identityCard/add'; // IC卡
final String editICCardURL = '/identityCard/update'; // IC卡
final String deleteICCardURL = '/identityCard/delete'; // IC卡
final String getKeyDetailURL = '/key/get'; //
final String lockUserListURL = '/keyUser/listKeyUser'; //

View File

@ -804,7 +804,7 @@ class ApiProvider extends BaseProvider {
String fingerprintType,
String isCoerced,
String startDate,
String cyclicConfig,) =>
List weekDay,) =>
post(
addFingerprintURL.toUrl,
jsonEncode({
@ -816,9 +816,135 @@ class ApiProvider extends BaseProvider {
'fingerprintType': fingerprintType,
'isCoerced': isCoerced,
'startDate': startDate,
'cyclicConfig': cyclicConfig,
'weekDay': weekDay,
}));
//
Future<Response> editFingerprintsData(
String fingerprintId,
String lockId,
List weekDay,
String startDate,
String endDate,
String isCoerced,
String fingerprintName) =>
post(
editFingerprintURL.toUrl,
jsonEncode({
'fingerprintId': fingerprintId,
'lockId': lockId,
'weekDay': weekDay,
'startDate': startDate,
'endDate': endDate,
'isCoerced': isCoerced,
'fingerprintName': fingerprintName
})
);
//
Future<Response> deletFingerprintsData(
String fingerprintId,
String lockId,
String type,
String deleteType) =>
post(
deleteFingerprintURL.toUrl,
jsonEncode({
'fingerprintId': fingerprintId,
'lockId': lockId,
'type': type,
'deleteType': deleteType
})
);
//
Future<Response> updateFingerprintUserNoLoadData(
String fingerprintId,
String lockId,
String fingerprintUserNo) =>
post(
updateFingerprintUserNoURL.toUrl,
jsonEncode({
'fingerprintId': fingerprintId,
'lockId': lockId,
'fingerprintUserNo': fingerprintUserNo
})
);
// IC卡列表
Future<Response> getICCardListData(String lockId, String pageNo, String pageSize, String searchStr) =>
post(
getICCardListURL.toUrl,
jsonEncode({
'lockId': lockId,
'pageNo': pageNo,
'pageSize': pageSize,
'searchStr': searchStr,
}));
//
Future<Response> addICCardData(
String lockId,
String endDate,
String cardName,
String cardNumber,
String cardType,
String addType,
String startDate,
String isCoerced,
List weekDay,) =>
post(
addICCardURL.toUrl,
jsonEncode({
'lockId': lockId,
'endDate': endDate,
'cardName': cardName,
'cardNumber': cardNumber,
'cardType': cardType,
'addType': addType,
'startDate': startDate,
'isCoerced': isCoerced,
'weekDay': weekDay
}));
// ICCard
Future<Response> editICCardData(
String lockId,
String cardId,
String cardName,
String startDate,
String endDate,
String isCoerced,
List weekDay) =>
post(
editICCardURL.toUrl,
jsonEncode({
'lockId': lockId,
'cardId': cardId,
'cardName': cardName,
'startDate': startDate,
'endDate': endDate,
'isCoerced': isCoerced,
'weekDay': weekDay
})
);
//
Future<Response> deletIcCardData(
String cardId,
String lockId,
String type,
String deleteType) =>
post(
deleteICCardURL.toUrl,
jsonEncode({
'cardId': cardId,
'lockId': lockId,
'type': type,
'deleteType': deleteType
})
);
Future<Response> listLockByGroup(String type, String keyGroupId) => post(
listLockByGroupURL.toUrl,
jsonEncode({'type': type, 'keyGroupId': keyGroupId}));

View File

@ -885,10 +885,111 @@ class ApiRepository {
required String fingerprintType,
required String isCoerced,
required String startDate,
required String cyclicConfig,
required List weekDay,
}) async {
final res =
await apiProvider.addFingerprintsData(lockId, endDate, addType, fingerprintName, fingerprintNumber, fingerprintType, isCoerced, startDate, cyclicConfig);
await apiProvider.addFingerprintsData(lockId, endDate, addType, fingerprintName, fingerprintNumber, fingerprintType, isCoerced, startDate, weekDay);
return CheckingInListMonthEntity.fromJson(res.body);
}
//
Future<LoginEntity> editFingerprintsData(
{
required String fingerprintId,
required String lockId,
required List weekDay,
required String startDate,
required String endDate,
required String isCoerced,
required String fingerprintName
}) async {
final res =
await apiProvider.editFingerprintsData(fingerprintId, lockId, weekDay, startDate, endDate, isCoerced, fingerprintName);
return LoginEntity.fromJson(res.body);
}
//
Future<LoginEntity> deletFingerprintsData(
{
required String fingerprintId,
required String lockId,
required String type,
required String deleteType
}) async {
final res =
await apiProvider.deletFingerprintsData(fingerprintId, lockId, type, deleteType);
return LoginEntity.fromJson(res.body);
}
//
Future<LoginEntity> updateFingerprintUserNoLoadData(
{
required String fingerprintId,
required String lockId,
required String fingerprintUserNo
}) async {
final res =
await apiProvider.updateFingerprintUserNoLoadData(fingerprintId, lockId, fingerprintUserNo);
return LoginEntity.fromJson(res.body);
}
// Ic卡列表
Future<FingerprintListDataEntity> getICCardListData(
{
required String lockId,
required String pageNo,
required String pageSize,
required String searchStr,
}) async {
final res =
await apiProvider.getICCardListData(lockId, pageNo, pageSize, searchStr);
return FingerprintListDataEntity.fromJson(res.body);
}
// ID卡
Future<CheckingInListMonthEntity> addICCardData(
{
required String lockId,
required String endDate,
required String cardName,
required String cardNumber,
required String cardType,
required String addType,
required String startDate,
required String isCoerced,
required List weekDay,
}) async {
final res =
await apiProvider.addICCardData(lockId, endDate, cardName, cardNumber, cardType, addType, startDate, isCoerced, weekDay);
return CheckingInListMonthEntity.fromJson(res.body);
}
// IC卡
Future<LoginEntity> editICCardData(
{
required String lockId,
required String cardId,
required String cardName,
required String startDate,
required String endDate,
required String isCoerced,
required List weekDay
}) async {
final res =
await apiProvider.editICCardData(lockId, cardId, cardName, startDate, endDate, isCoerced, weekDay);
return LoginEntity.fromJson(res.body);
}
// ic卡
Future<LoginEntity> deletIcCardData(
{
required String cardId,
required String lockId,
required String type,
required String deleteType
}) async {
final res =
await apiProvider.deletIcCardData(cardId, lockId, type, deleteType);
return LoginEntity.fromJson(res.body);
}
}

View File

@ -61,8 +61,8 @@ class CommonItem extends StatelessWidget {
: Text(
rightTitle ?? "",
textAlign: TextAlign.end,
overflow: TextOverflow.ellipsis,
maxLines: 1,
// overflow: TextOverflow.ellipsis,
// maxLines: 1,
style: TextStyle(
fontSize: 22.sp,
color: AppColors.darkGrayTextColor),

View File

@ -19,3 +19,8 @@ class PassCurrentLockInformationEvent{
KeyInfos keyInfo;
PassCurrentLockInformationEvent(this.keyInfo);
}
///
class OtherTypeRefreshListEvent{
OtherTypeRefreshListEvent();
}

View File

@ -388,7 +388,9 @@ class LanKeyEntity {
this.pleaseEnterWifiPwd,
this.wifiDistributionNetwork,
this.attendanceRecord,
this.edit
this.edit,
this.stressFingerprint,
this.effectiveDay
});
LanKeyEntity.fromJson(dynamic json) {
@ -811,6 +813,8 @@ class LanKeyEntity {
wifiDistributionNetwork = json['wifiDistributionNetwork'];
attendanceRecord = json['attendanceRecord'];
edit = json['edit'];
stressFingerprint = json['stressFingerprint'];
effectiveDay = json['effectiveDay'];
}
String? starLock;
String? clickUnlockAndHoldDownClose;
@ -1219,6 +1223,8 @@ class LanKeyEntity {
String? wifiDistributionNetwork;
String? attendanceRecord;
String? edit;
String? stressFingerprint;
String? effectiveDay;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['starLock'] = starLock;
@ -1637,6 +1643,8 @@ class LanKeyEntity {
map['wifiDistributionNetwork'] = wifiDistributionNetwork;
map['attendanceRecord'] = attendanceRecord;
map['edit'] = edit;
map['stressFingerprint'] = stressFingerprint;
map['effectiveDay'] = effectiveDay;
return map;
}
}