1,电子钥匙循环有效期UI及逻辑修改

2,新增全局公用的时间转化格式的方法
3,修改部分请求字段类型
This commit is contained in:
Daisy 2024-02-29 16:08:03 +08:00
parent 0a855c6af2
commit b47f8423df
15 changed files with 332 additions and 252 deletions

View File

@ -8,10 +8,8 @@ import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addUser.dart';
import '../../../../blue/io_reply.dart'; import '../../../../blue/io_reply.dart';
import '../../../../blue/io_protocol/io_transferPermissions.dart'; import '../../../../blue/io_protocol/io_transferPermissions.dart';
import '../../../../blue/io_tool/io_manager.dart';
import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart'; import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart'; import '../../../../blue/sender_manage.dart';
@ -163,7 +161,8 @@ class AuthorizedAdminLogic extends BaseGetXController {
// //
Future<void> transferPermissionsAction() async { Future<void> transferPermissionsAction() async {
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState state) async { BlueManage().bludSendData(BlueManage().connectDeviceName,
(DeviceConnectionState state) async {
if (state == DeviceConnectionState.connected) { if (state == DeviceConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
@ -228,33 +227,47 @@ class AuthorizedAdminLogic extends BaseGetXController {
// //
Future<void> sendElectronicKeyRequest() async { Future<void> sendElectronicKeyRequest() async {
if(state.emailOrPhoneController.text.isEmpty){ if (state.emailOrPhoneController.text.isEmpty) {
showToast("请输入接收者账号"); showToast("请输入接收者账号");
return; return;
} }
if(state.keyNameController.text.isEmpty){ if (state.keyNameController.text.isEmpty) {
showToast("请输入接收者姓名"); showToast("请输入接收者姓名");
return; return;
} }
String getFailureDateTime = '0'; // String getFailureDateTime = '0';
String getEffectiveDateTime = '0'; // String getEffectiveDateTime = '0';
String lockID = state.keyInfo.value.lockId.toString(); String lockID = state.keyInfo.value.lockId.toString();
Get.log("state.type.value:${state.type.value}"); Get.log("state.type.value:${state.type.value}");
String getKeyType = "1"; String getKeyType = "1";
if (state.type.value == '0') { if (state.type.value == '0') {
getKeyType = "2"; getKeyType = "2";
getFailureDateTime = state.failureDateTime.value.millisecondsSinceEpoch.toString(); // getFailureDateTime =
getEffectiveDateTime = state.effectiveDateTime.value.millisecondsSinceEpoch.toString(); // state.failureDateTime.value.millisecondsSinceEpoch.toString();
// getEffectiveDateTime =
// state.effectiveDateTime.value.millisecondsSinceEpoch.toString();
DateTime startDateTime = DateTime(state.effectiveDateTime.value.year, state.effectiveDateTime.value.month, state.effectiveDateTime.value.day, state.effectiveDateTime.value.hour, state.effectiveDateTime.value.minute); DateTime startDateTime = DateTime(
DateTime endDateTime = DateTime(state.failureDateTime.value.year, state.failureDateTime.value.month, state.failureDateTime.value.day, state.failureDateTime.value.hour, state.failureDateTime.value.minute); state.effectiveDateTime.value.year,
if (!startDateTime.isBefore(endDateTime) || startDateTime.isAtSameMomentAs(endDateTime)) { state.effectiveDateTime.value.month,
state.effectiveDateTime.value.day,
state.effectiveDateTime.value.hour,
state.effectiveDateTime.value.minute);
DateTime endDateTime = DateTime(
state.failureDateTime.value.year,
state.failureDateTime.value.month,
state.failureDateTime.value.day,
state.failureDateTime.value.hour,
state.failureDateTime.value.minute);
if (!startDateTime.isBefore(endDateTime) ||
startDateTime.isAtSameMomentAs(endDateTime)) {
showToast("失效时间需大于生效时间"); showToast("失效时间需大于生效时间");
return; return;
} }
if (!startDateTime.isBefore(DateTime.now()) || startDateTime.isAtSameMomentAs(DateTime.now())) { if (!startDateTime.isBefore(DateTime.now()) ||
startDateTime.isAtSameMomentAs(DateTime.now())) {
showToast("生效时间需大于当前时间"); showToast("生效时间需大于当前时间");
return; return;
} }
@ -264,7 +277,7 @@ class AuthorizedAdminLogic extends BaseGetXController {
createUser: state.isCreateUser.value ? "1" : "0", createUser: state.isCreateUser.value ? "1" : "0",
countryCode: state.countryCode.value, countryCode: state.countryCode.value,
usernameType: '1', usernameType: '1',
endDate: getFailureDateTime, endDate: state.failureDateTime.value.millisecondsSinceEpoch,
faceAuthentication: state.isAuthentication.value == true ? '1' : '2', faceAuthentication: state.isAuthentication.value == true ? '1' : '2',
isCameraEnable: '2', isCameraEnable: '2',
isRemoteUnlock: '2', isRemoteUnlock: '2',
@ -275,8 +288,10 @@ class AuthorizedAdminLogic extends BaseGetXController {
operatorUid: '', operatorUid: '',
receiverUsername: state.emailOrPhoneController.text, receiverUsername: state.emailOrPhoneController.text,
remarks: '', remarks: '',
startDate: getEffectiveDateTime, startDate: state.effectiveDateTime.value.millisecondsSinceEpoch,
weekDays: state.weekdaysList); weekDays: state.weekdaysList,
startTime: state.startTime.value,
endTime: state.endTime.value);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
print('发送电子钥匙成功'); print('发送电子钥匙成功');
state.isSendSuccess.value = true; state.isSendSuccess.value = true;

View File

@ -6,6 +6,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/dateUtils.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
@ -134,10 +135,11 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage> {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) { onConfirm: (p) {
setState(() { setState(() {
state.selectEffectiveDate.value = state.effectiveDateTime.value = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; '${p.year}-${p.month!}-${p.day} ${p.hour!}:${p.minute!}',
state.effectiveDateTime.value = 'yyyy-mm-dd HH:mm');
DateTime.parse(state.selectEffectiveDate.value); state.selectEffectiveDate.value = XSDateUtils.formatDateTime(
state.effectiveDateTime.value, 'yyyy-mm-dd HH:mm');
}); });
}); });
}), }),
@ -149,10 +151,11 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage> {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) { onConfirm: (p) {
setState(() { setState(() {
state.selectFailureDate.value = state.failureDateTime.value = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; '${p.year}-${p.month!}-${p.day} ${p.hour!}:${p.minute!}',
state.failureDateTime.value = 'yyyy-mm-dd HH:mm');
DateTime.parse(state.selectFailureDate.value); state.selectFailureDate.value = XSDateUtils.formatDateTime(
state.failureDateTime.value, 'yyyy-mm-dd HH:mm');
}); });
}); });
}), }),
@ -358,10 +361,18 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage> {
// contentPadding: const EdgeInsets.only(top: 12.0, bottom: 8.0), // contentPadding: const EdgeInsets.only(top: 12.0, bottom: 8.0),
hintText: tfStr, hintText: tfStr,
hintStyle: TextStyle(fontSize: 22.sp), hintStyle: TextStyle(fontSize: 22.sp),
focusedBorder: const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), focusedBorder: const OutlineInputBorder(
disabledBorder: const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), borderSide:
enabledBorder: const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), BorderSide(width: 0, color: Colors.transparent)),
border: const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), disabledBorder: const OutlineInputBorder(
borderSide:
BorderSide(width: 0, color: Colors.transparent)),
enabledBorder: const OutlineInputBorder(
borderSide:
BorderSide(width: 0, color: Colors.transparent)),
border: const OutlineInputBorder(
borderSide:
BorderSide(width: 0, color: Colors.transparent)),
contentPadding: const EdgeInsets.symmetric(vertical: 0), contentPadding: const EdgeInsets.symmetric(vertical: 0),
), ),
// decoration: InputDecoration( // decoration: InputDecoration(
@ -424,8 +435,4 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage> {
}, },
); );
} }
String intToStr(int v) {
return (v < 10) ? "0$v" : "$v";
}
} }

View File

@ -1,4 +1,3 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -6,8 +5,10 @@ import 'package:get/get.dart';
import '../../../lockMian/entity/lockListInfo_entity.dart'; import '../../../lockMian/entity/lockListInfo_entity.dart';
class AuthorizedAdminState { class AuthorizedAdminState {
final TextEditingController emailOrPhoneController = TextEditingController(); /// final TextEditingController emailOrPhoneController =
final TextEditingController keyNameController = TextEditingController(); // TextEditingController(); ///
final TextEditingController keyNameController =
TextEditingController(); //
final FlutterContactPicker contactPicker = FlutterContactPicker(); final FlutterContactPicker contactPicker = FlutterContactPicker();
late Contact contact; late Contact contact;
@ -20,8 +21,15 @@ class AuthorizedAdminState {
final effectiveDateTime = DateTime.now().obs; final effectiveDateTime = DateTime.now().obs;
final failureDateTime = DateTime.now().obs; final failureDateTime = DateTime.now().obs;
var selectEffectiveDate = '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day} ${DateTime.now().hour}:${DateTime.now().minute}'.obs; // var selectEffectiveDate =
var selectFailureDate = '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day} ${DateTime.now().hour}:${DateTime.now().minute}'.obs; // '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day} ${DateTime.now().hour}:${DateTime.now().minute}'
.obs; //
var selectFailureDate =
'${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day} ${DateTime.now().hour}:${DateTime.now().minute}'
.obs; //
var startTime = 0.obs;
var endTime = 0.obs;
var isSendSuccess = false.obs; var isSendSuccess = false.obs;
var countryName = '中国'.obs; var countryName = '中国'.obs;

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetailChangeDate/electronicKeyDetailChangeDate_logic.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetailChangeDate/electronicKeyDetailChangeDate_logic.dart';
import 'package:star_lock/tools/dateUtils.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
@ -81,10 +82,11 @@ class _ElectronicKeyDetailChangeDateState
action: () { action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) { onConfirm: (p) {
state.selectEffectiveDate.value = state.effectiveDateTime = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; '${p.year}-${p.month!}-${p.day} ${p.hour!}:${p.minute!}',
state.effectiveDateTime = 'yyyy-mm-dd HH:mm');
DateTime.parse(state.selectEffectiveDate.value); state.selectEffectiveDate.value = XSDateUtils.formatDateTime(
state.effectiveDateTime, 'yyyy-mm-dd HH:mm');
}); });
})), })),
Obx(() => CommonItem( Obx(() => CommonItem(
@ -96,17 +98,14 @@ class _ElectronicKeyDetailChangeDateState
action: () { action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) { onConfirm: (p) {
state.selectFailureDate.value = state.failureDateTime = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; '${p.year}-${p.month!}-${p.day} ${p.hour!}:${p.minute!}',
state.failureDateTime = 'yyyy-mm-dd HH:mm');
DateTime.parse(state.selectFailureDate.value); state.selectFailureDate.value = XSDateUtils.formatDateTime(
state.failureDateTime, 'yyyy-mm-dd HH:mm');
}); });
})), })),
], ],
); );
} }
String intToStr(int v) {
return (v < 10) ? "0$v" : "$v";
}
} }

View File

@ -1,9 +1,9 @@
import 'package:date_format/date_format.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyPeriodValidity/KeyPeriodValidityModel.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyPeriodValidity/KeyPeriodValidityModel.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyPeriodValidity/electronicKeyPeriodValidity_logic.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyPeriodValidity/electronicKeyPeriodValidity_logic.dart';
import 'package:star_lock/tools/dateUtils.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
@ -52,15 +52,15 @@ class _ElectronicKeyPeriodValidityPageState
backgroundColor: AppColors.mainColor), backgroundColor: AppColors.mainColor),
body: ListView( body: ListView(
children: [ children: [
topWidget(), effectiveDateWidget(),
Container( SizedBox(
color: Colors.white,
height: 10.h, height: 10.h,
), ),
const Divider( topWidget(),
height: 1, SizedBox(
color: AppColors.greyLineColor, height: 10.h,
), ),
effectiveTimeWidget(),
bottomWidget() bottomWidget()
], ],
)); ));
@ -68,7 +68,7 @@ class _ElectronicKeyPeriodValidityPageState
Widget topWidget() { Widget topWidget() {
return Container( return Container(
height: 150.h, height: 160.h,
width: 1.sw, width: 1.sw,
color: Colors.white, color: Colors.white,
child: Column( child: Column(
@ -92,7 +92,11 @@ class _ElectronicKeyPeriodValidityPageState
KeyPeriodValidityModel model = KeyPeriodValidityModel model =
state.validityDataList.value[index]; state.validityDataList.value[index];
return btnItem(model); return btnItem(model);
})) })),
Container(
color: Colors.white,
height: 10.h,
),
], ],
), ),
); );
@ -107,6 +111,7 @@ class _ElectronicKeyPeriodValidityPageState
} else { } else {
state.selectIndexList.value.remove(model.validityValue); state.selectIndexList.value.remove(model.validityValue);
} }
setState(() {}); setState(() {});
}, },
child: Container( child: Container(
@ -135,7 +140,8 @@ class _ElectronicKeyPeriodValidityPageState
)); ));
} }
Widget bottomWidget() { //
Widget effectiveDateWidget() {
return Column( return Column(
children: [ children: [
Obx(() => CommonItem( Obx(() => CommonItem(
@ -144,14 +150,13 @@ class _ElectronicKeyPeriodValidityPageState
isHaveDirection: true, isHaveDirection: true,
isHaveLine: true, isHaveLine: true,
action: () { action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMD,
onConfirm: (p) { onConfirm: (p) {
state.isHaveEffectiveDate.value = true; state.isHaveEffectiveDate.value = true;
state.effectiveDateTime.value = DateTime.parse( state.effectiveDate.value = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'); '${p.year}-${p.month!}-${p.day!}', 'yyyy-mm-dd');
state.selectEffectiveDate.value = formatDate( state.selectEffectiveDate.value = XSDateUtils.formatDateTime(
state.effectiveDateTime.value, state.effectiveDate.value, 'yyyy-mm-dd');
[yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]);
}); });
})), })),
Obx(() => CommonItem( Obx(() => CommonItem(
@ -159,16 +164,59 @@ class _ElectronicKeyPeriodValidityPageState
rightTitle: state.selectFailureDate.value, rightTitle: state.selectFailureDate.value,
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMD,
onConfirm: (p) { onConfirm: (p) {
state.isHaveFailureDate.value = true; state.isHaveFailureDate.value = true;
state.failureDateTime.value = DateTime.parse( state.failureDate.value = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'); '${p.year}-${p.month!}-${p.day!}', 'yyyy-mm-dd');
state.selectFailureDate.value = formatDate( state.selectFailureDate.value = XSDateUtils.formatDateTime(
state.failureDateTime.value, state.failureDate.value, 'yyyy-mm-dd');
[yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]);
}); });
})), })),
],
);
}
//
Widget effectiveTimeWidget() {
return Column(
children: [
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
rightTitle: state.selectEffectiveTime.value,
isHaveDirection: true,
isHaveLine: true,
action: () {
Pickers.showDatePicker(context, mode: DateMode.HM,
onConfirm: (p) {
state.isHaveEffectiveTime.value = true;
state.effectiveTime.value = XSDateUtils.parseDateTime(
'${p.hour!}:${p.minute!}', 'HH:mm');
state.selectEffectiveTime.value = XSDateUtils.formatDateTime(
state.effectiveTime.value, 'HH:mm');
});
})),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.failureTime!.tr,
rightTitle: state.selectFailureTime.value,
isHaveDirection: true,
action: () {
Pickers.showDatePicker(context, mode: DateMode.HM,
onConfirm: (p) {
state.isHaveFailureTime.value = true;
state.failureTime.value = XSDateUtils.parseDateTime(
'${p.hour!}:${p.minute!}', 'HH:mm');
state.selectFailureTime.value = XSDateUtils.formatDateTime(
state.failureTime.value, 'HH:mm');
});
})),
],
);
}
Widget bottomWidget() {
return Column(
children: [
Container(height: 40.h), Container(height: 40.h),
Obx(() => SubmitBtn( Obx(() => SubmitBtn(
btnName: TranslationLoader.lanKeys!.sure!.tr, btnName: TranslationLoader.lanKeys!.sure!.tr,
@ -177,7 +225,9 @@ class _ElectronicKeyPeriodValidityPageState
padding: EdgeInsets.only(top: 25.w, bottom: 25.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
isDisabled: (state.selectIndexList.value.isNotEmpty && isDisabled: (state.selectIndexList.value.isNotEmpty &&
state.isHaveEffectiveDate.value == true && state.isHaveEffectiveDate.value == true &&
state.isHaveFailureDate.value == true) state.isHaveFailureDate.value == true &&
state.isHaveEffectiveTime.value == true &&
state.isHaveFailureTime.value == true)
? true ? true
: false, : false,
onClick: () { onClick: () {
@ -185,17 +235,17 @@ class _ElectronicKeyPeriodValidityPageState
state.isHaveEffectiveDate.value == true && state.isHaveEffectiveDate.value == true &&
state.isHaveFailureDate.value == true)) { state.isHaveFailureDate.value == true)) {
DateTime startDateTime = DateTime( DateTime startDateTime = DateTime(
state.effectiveDateTime.value.year, state.effectiveDate.value.year,
state.effectiveDateTime.value.month, state.effectiveDate.value.month,
state.effectiveDateTime.value.day, state.effectiveDate.value.day,
state.effectiveDateTime.value.hour, state.effectiveDate.value.hour,
state.effectiveDateTime.value.minute); state.effectiveDate.value.minute);
DateTime endDateTime = DateTime( DateTime endDateTime = DateTime(
state.failureDateTime.value.year, state.failureDate.value.year,
state.failureDateTime.value.month, state.failureDate.value.month,
state.failureDateTime.value.day, state.failureDate.value.day,
state.failureDateTime.value.hour, state.failureDate.value.hour,
state.failureDateTime.value.minute); state.failureDate.value.minute);
// //
if (!startDateTime.isBefore(endDateTime) || if (!startDateTime.isBefore(endDateTime) ||
startDateTime.isAtSameMomentAs(endDateTime)) { startDateTime.isAtSameMomentAs(endDateTime)) {
@ -203,8 +253,10 @@ class _ElectronicKeyPeriodValidityPageState
} else { } else {
Map<String, dynamic> resultMap = {}; Map<String, dynamic> resultMap = {};
resultMap['validityValue'] = state.selectIndexList.value; resultMap['validityValue'] = state.selectIndexList.value;
resultMap['starDate'] = state.effectiveDateTime.value; resultMap['starDate'] = state.effectiveDate.value;
resultMap['endDate'] = state.failureDateTime.value; resultMap['endDate'] = state.failureDate.value;
resultMap['starTime'] = state.effectiveTime.value;
resultMap['endTime'] = state.failureTime.value;
Navigator.pop(context, resultMap); Navigator.pop(context, resultMap);
} }
} }
@ -212,8 +264,4 @@ class _ElectronicKeyPeriodValidityPageState
], ],
); );
} }
String intToStr(int v) {
return (v < 10) ? "0$v" : "$v";
}
} }

View File

@ -1,3 +1,4 @@
import 'package:date_format/date_format.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
@ -24,11 +25,24 @@ class ElectronicKeyPeriodValidityState {
].obs; ].obs;
final validityDataList = [].obs; // final validityDataList = [].obs; //
final selectIndexList = [].obs; // final selectIndexList = [].obs; //
final selectEffectiveDate = ''.obs; //
final selectFailureDate = ''.obs; //
DateTime dateTime = DateTime.now(); DateTime dateTime = DateTime.now();
final effectiveDateTime = DateTime.now().obs; final effectiveDate = DateTime.now().obs;
final failureDateTime = DateTime.now().obs; final failureDate = DateTime.now().obs;
final selectEffectiveDate = ''.obs; //
final selectFailureDate = ''.obs; //
final selectEffectiveTime = ''.obs; //
final selectFailureTime = ''.obs; //
final effectiveTime = DateTime.now().obs;
final failureTime = DateTime.now().obs;
var isHaveEffectiveDate = false.obs; var isHaveEffectiveDate = false.obs;
var isHaveFailureDate = false.obs; var isHaveFailureDate = false.obs;
var isHaveEffectiveTime = false.obs;
var isHaveFailureTime = false.obs;
String intToStr(int v) {
return (v < 10) ? "0$v" : "$v";
}
} }

View File

@ -87,7 +87,7 @@ class SendElectronicKeyLogic extends BaseGetXController {
usernameType: isPhoneNumber(state.emailOrPhoneController.text) == true usernameType: isPhoneNumber(state.emailOrPhoneController.text) == true
? '1' ? '1'
: '2', : '2',
endDate: state.failureTimestamp.value.toString(), endDate: state.failureTimestamp.value,
faceAuthentication: state.isAuthentication.value == true ? '1' : '2', faceAuthentication: state.isAuthentication.value == true ? '1' : '2',
isCameraEnable: '2', isCameraEnable: '2',
isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2', isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2',
@ -98,8 +98,10 @@ class SendElectronicKeyLogic extends BaseGetXController {
operatorUid: '', operatorUid: '',
receiverUsername: state.emailOrPhoneController.text, receiverUsername: state.emailOrPhoneController.text,
remarks: '', remarks: '',
startDate: state.effectiveTimestamp.value.toString(), startDate: state.effectiveTimestamp.value,
weekDays: state.weekdaysList.value); weekDays: state.weekdaysList.value,
startTime: state.startTime.value,
endTime: state.endTime.value);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
print('发送电子钥匙成功'); print('发送电子钥匙成功');
state.isSendSuccess.value = true; state.isSendSuccess.value = true;

View File

@ -8,6 +8,7 @@ import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart
import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart'; import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/dateUtils.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
@ -171,10 +172,11 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
action: () { action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) { onConfirm: (p) {
state.selectEffectiveDate.value = state.effectiveDateTime.value = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; '${p.year}-${p.month!}-${p.day} ${p.hour!}:${p.minute!}',
state.effectiveDateTime.value = 'yyyy-mm-dd HH:mm');
DateTime.parse(state.selectEffectiveDate.value); state.selectEffectiveDate.value = XSDateUtils.formatDateTime(
state.effectiveDateTime.value, 'yyyy-mm-dd HH:mm');
}); });
}), }),
CommonItem( CommonItem(
@ -184,10 +186,11 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
action: () { action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) { onConfirm: (p) {
state.selectFailureDate.value = state.failureDateTime.value = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; '${p.year}-${p.month!}-${p.day} ${p.hour!}:${p.minute!}',
state.failureDateTime.value = 'yyyy-mm-dd HH:mm');
DateTime.parse(state.selectFailureDate.value); state.selectFailureDate.value = XSDateUtils.formatDateTime(
state.failureDateTime.value, 'yyyy-mm-dd HH:mm');
}); });
}), }),
Container(height: 10.h), Container(height: 10.h),
@ -233,6 +236,9 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
result['starDate'].millisecondsSinceEpoch; result['starDate'].millisecondsSinceEpoch;
state.failureTimestamp.value = state.failureTimestamp.value =
result['endDate'].millisecondsSinceEpoch; result['endDate'].millisecondsSinceEpoch;
state.startTime.value =
result['starTime'].millisecondsSinceEpoch;
state.endTime.value = result['endTime'].millisecondsSinceEpoch;
} }
}), }),
SizedBox( SizedBox(
@ -547,10 +553,6 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
); );
} }
String intToStr(int v) {
return (v < 10) ? "0$v" : "$v";
}
Future _openModalBottomSheet() async { Future _openModalBottomSheet() async {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,

View File

@ -20,6 +20,8 @@ class SendElectronicKeyState {
final failureDateTime = DateTime.now().obs; final failureDateTime = DateTime.now().obs;
final effectiveTimestamp = 0.obs; final effectiveTimestamp = 0.obs;
final failureTimestamp = 0.obs; final failureTimestamp = 0.obs;
final startTime = 0.obs;
final endTime = 0.obs;
var selectEffectiveDate = var selectEffectiveDate =
'${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day} ${DateTime.now().hour}:${DateTime.now().minute}' '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day} ${DateTime.now().hour}:${DateTime.now().minute}'

View File

@ -45,46 +45,46 @@ class AddAuthorizedAdministratorLogic extends BaseGetXController {
} }
} }
// // //
Future<void> sendElectronicKeyRequest(BuildContext widgetContext) async { // Future<void> sendElectronicKeyRequest(BuildContext widgetContext) async {
String getFailureDateTime = '0'; // String lockID = state.keyInfo.value.lockId.toString();
String getEffectiveDateTime = '0'; // String getKeyType = (int.parse(state.type.value) + 1).toString();
String lockID = state.keyInfo.value.lockId.toString(); // if (state.type.value == '0') {
String getKeyType = (int.parse(state.type.value) + 1).toString(); // // getFailureDateTime =
if (state.type.value == '0') { // // state.failureDateTime.value.millisecondsSinceEpoch.toString();
getFailureDateTime = // // getEffectiveDateTime =
state.failureDateTime.value.millisecondsSinceEpoch.toString(); // // state.effectiveDateTime.value.millisecondsSinceEpoch.toString();
getEffectiveDateTime = // }
state.effectiveDateTime.value.millisecondsSinceEpoch.toString();
}
var entity = await ApiRepository.to.sendElectronicKey( // var entity = await ApiRepository.to.sendElectronicKey(
createUser: state.isCreateUser.value ? "1" : "0", // createUser: state.isCreateUser.value ? "1" : "0",
countryCode: state.countryCode.value, // countryCode: state.countryCode.value,
usernameType: '1', // usernameType: '1',
endDate: getFailureDateTime, // endDate: state.failureDateTime.value.millisecondsSinceEpoch,
faceAuthentication: state.isAuthentication.value == true ? '1' : '2', // faceAuthentication: state.isAuthentication.value == true ? '1' : '2',
isCameraEnable: '2', // isCameraEnable: '2',
isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2', // isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2',
keyNameForAdmin: state.keyNameController.text, // keyNameForAdmin: state.keyNameController.text,
keyRight: '0', // keyRight: '0',
keyType: getKeyType, // keyType: getKeyType,
lockId: lockID, // lockId: lockID,
operatorUid: '', // operatorUid: '',
receiverUsername: state.emailOrPhoneController.text, // receiverUsername: state.emailOrPhoneController.text,
remarks: '', // remarks: '',
startDate: getEffectiveDateTime, // startDate: state.effectiveDateTime.value.millisecondsSinceEpoch,
weekDays: state.weekdaysList); // weekDays: state.weekdaysList,
if (entity.errorCode!.codeIsSuccessful) { // startTime: state.st.value,
print('发送电子钥匙成功'); // endTime: state.endTime.value);
state.isSendSuccess.value = true; // if (entity.errorCode!.codeIsSuccessful) {
} else { // print('发送电子钥匙成功');
if (entity.errorCode == 425) { // state.isSendSuccess.value = true;
// // } else {
_showDialog(widgetContext, '${entity.errorMsg}'); // if (entity.errorCode == 425) {
} // //
} // _showDialog(widgetContext, '${entity.errorMsg}');
} // }
// }
// }
// //
void _showDialog(widgetContext, String errMsg) { void _showDialog(widgetContext, String errMsg) {

View File

@ -3,12 +3,10 @@ import 'package:flutter/material.dart';
import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_utils/get_utils.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonItem.dart'; import 'package:star_lock/tools/commonItem.dart';
import 'package:star_lock/tools/dateUtils.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/submitBtn.dart';
@ -25,28 +23,13 @@ class AddAuthorizedAdministratorPage extends StatefulWidget {
} }
} }
class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministratorPage> with SingleTickerProviderStateMixin { class _AddAuthorizedAdministratorPageState
extends State<AddAuthorizedAdministratorPage>
with SingleTickerProviderStateMixin {
final logic = Get.put(AddAuthorizedAdministratorLogic()); final logic = Get.put(AddAuthorizedAdministratorLogic());
final state = Get.find<AddAuthorizedAdministratorLogic>().state; final state = Get.find<AddAuthorizedAdministratorLogic>().state;
TabController? _tabController; TabController? _tabController;
final FlutterContactPicker _contactPicker = FlutterContactPicker();
late Contact _contact;
final _templateNameTf = TextEditingController();
late List _lockIdList;
late bool _isRemoteUnlock;
late bool _isCreateUser;
var _selectEffectiveDate = ''; //
var _selectFailureDate = ''; //
late DateTime _effectiveDateTime;
late DateTime _failureDateTime;
final TextEditingController _emailOrPhoneController =
TextEditingController(); ///
final TextEditingController _keyNameController =
TextEditingController(); //
String countryName = '中国';
String countryCode = '86';
late bool _isSendSuccess;
List tabs = [ List tabs = [
TranslationLoader.lanKeys!.permanent!.tr, TranslationLoader.lanKeys!.permanent!.tr,
@ -57,10 +40,6 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
void initState() { void initState() {
super.initState(); super.initState();
_isCreateUser = false;
_lockIdList = [];
_isRemoteUnlock = false;
_isSendSuccess = false;
_tabController = TabController(length: 2, vsync: this); _tabController = TabController(length: 2, vsync: this);
} }
@ -119,7 +98,7 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
// //
Widget _permanentAdministrator() { Widget _permanentAdministrator() {
if (_isSendSuccess) { if (state.isSendSuccess.value == true) {
return sendElectronicKeySucceed(); return sendElectronicKeySucceed();
} else { } else {
return Column( return Column(
@ -133,9 +112,9 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
), ),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.lock!.tr, leftTitel: TranslationLoader.lanKeys!.lock!.tr,
rightTitle: _lockIdList.isEmpty rightTitle: state.lockIdList.value.isEmpty
? TranslationLoader.lanKeys!.pleaseSelect!.tr ? TranslationLoader.lanKeys!.pleaseSelect!.tr
: _lockIdList.length.toString(), : state.lockIdList.value.length.toString(),
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
Navigator.pushNamed(context, Routers.massSendLockGroupPage) Navigator.pushNamed(context, Routers.massSendLockGroupPage)
@ -143,7 +122,7 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
//ID列表 //ID列表
if (value != null) { if (value != null) {
value as Map<String, dynamic>; value as Map<String, dynamic>;
_lockIdList = value['selectLockIdList']; state.lockIdList.value = value['selectLockIdList'];
setState(() {}); setState(() {});
} }
@ -164,7 +143,7 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
// //
Widget _timeLimitAdministrator() { Widget _timeLimitAdministrator() {
if (_isSendSuccess) { if (state.isSendSuccess.value == true) {
return sendElectronicKeySucceed(); return sendElectronicKeySucceed();
} else { } else {
return Column( return Column(
@ -182,9 +161,9 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
), ),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.lock!.tr, leftTitel: TranslationLoader.lanKeys!.lock!.tr,
rightTitle: _lockIdList.isEmpty rightTitle: state.lockIdList.value.isEmpty
? TranslationLoader.lanKeys!.pleaseSelect!.tr ? TranslationLoader.lanKeys!.pleaseSelect!.tr
: _lockIdList.length.toString(), : state.lockIdList.value.length.toString(),
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
Navigator.pushNamed(context, Routers.massSendLockGroupPage) Navigator.pushNamed(context, Routers.massSendLockGroupPage)
@ -192,7 +171,7 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
//ID列表 //ID列表
if (value != null) { if (value != null) {
value as Map<String, dynamic>; value as Map<String, dynamic>;
_lockIdList = value['selectLockIdList']; state.lockIdList.value = value['selectLockIdList'];
setState(() {}); setState(() {});
} }
@ -211,41 +190,6 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
} }
} }
//
Future<void> addAuthorizedAdminRequest() async {
String getFailureDateTime = '0';
String getEffectiveDateTime = '0';
if (_tabController!.index == 1) {
getFailureDateTime = _failureDateTime.millisecondsSinceEpoch.toString();
getEffectiveDateTime =
_effectiveDateTime.millisecondsSinceEpoch.toString();
}
var entity = await ApiRepository.to.addAuthorizedAdmin(
_isCreateUser ? "1" : "0",
getFailureDateTime,
_isRemoteUnlock == true ? '1' : '2',
[],
_lockIdList,
_keyNameController.text,
getEffectiveDateTime,
_emailOrPhoneController.text,
countryCode,
'1',
);
if (entity.errorCode!.codeIsSuccessful) {
print('发送电子钥匙成功');
_isSendSuccess = true;
setState(() {});
} else {
logic.showToast("${entity.errorMsg}");
if (entity.errorCode == 425) {
//
_isCreateUser = true;
addAuthorizedAdminRequest();
}
}
}
// widget // widget
Widget keyInfoWidget() { Widget keyInfoWidget() {
return Column( return Column(
@ -259,7 +203,7 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
rightWidget: getTFWidget( rightWidget: getTFWidget(
true, true,
TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr, TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr,
_emailOrPhoneController)), state.emailOrPhoneController)),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr, leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr,
rightTitle: "", rightTitle: "",
@ -267,7 +211,7 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
isHaveRightWidget: true, isHaveRightWidget: true,
isHaveDirection: true, isHaveDirection: true,
rightWidget: Text( rightWidget: Text(
'$countryName +$countryCode', '${state.countryName.value} +${state.countryCode.value}',
textAlign: TextAlign.end, textAlign: TextAlign.end,
style: style:
TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor),
@ -277,8 +221,8 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
context, Routers.selectCountryRegionPage); context, Routers.selectCountryRegionPage);
if (result != null) { if (result != null) {
result as Map<String, dynamic>; result as Map<String, dynamic>;
countryCode = result['code']; state.countryCode.value = result['code'];
countryName = result['countryName']; state.countryName.value = result['countryName'];
setState(() {}); setState(() {});
} }
}, },
@ -290,7 +234,7 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
rightWidget: getTFWidget( rightWidget: getTFWidget(
false, false,
TranslationLoader.lanKeys!.pleaseEnter!.tr, TranslationLoader.lanKeys!.pleaseEnter!.tr,
_keyNameController)), state.keyNameController)),
Container(height: 10.h), Container(height: 10.h),
], ],
); );
@ -339,10 +283,10 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
child: InkWell( child: InkWell(
onTap: () async { onTap: () async {
Contact? currentContact = Contact? currentContact =
await _contactPicker.selectContact(); await state.contactPicker.selectContact();
setState(() { setState(() {
if (currentContact!.phoneNumbers!.isNotEmpty) { if (currentContact!.phoneNumbers!.isNotEmpty) {
_emailOrPhoneController.text = currentContact state.emailOrPhoneController.text = currentContact
.phoneNumbers![0] .phoneNumbers![0]
.replaceAll(RegExp(r"\s+\b|\b\s"), ""); .replaceAll(RegExp(r"\s+\b|\b\s"), "");
} }
@ -364,7 +308,8 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
leftTitel: TranslationLoader.lanKeys!.remoteUnlockingAllowed!.tr, leftTitel: TranslationLoader.lanKeys!.remoteUnlockingAllowed!.tr,
rightTitle: "", rightTitle: "",
isHaveRightWidget: true, isHaveRightWidget: true,
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _switch()), rightWidget: SizedBox(
width: 60.w, height: 50.h, child: Obx(() => _switch())),
action: () {}), action: () {}),
Container(height: 40.h), Container(height: 40.h),
], ],
@ -377,30 +322,34 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
children: [ children: [
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
rightTitle: _selectEffectiveDate, rightTitle: state.selectEffectiveDate.value,
isHaveLine: true, isHaveLine: true,
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) { onConfirm: (p) {
setState(() { setState(() {
_selectEffectiveDate = state.effectiveDateTime.value = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; '${p.year}-${p.month!}-${p.day} ${p.hour!}:${p.minute!}',
_effectiveDateTime = DateTime.parse(_selectEffectiveDate); 'yyyy-mm-dd HH:mm');
state.selectEffectiveDate.value = XSDateUtils.formatDateTime(
state.effectiveDateTime.value, 'yyyy-mm-dd HH:mm');
}); });
}); });
}), }),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, leftTitel: TranslationLoader.lanKeys!.failureTime!.tr,
rightTitle: _selectFailureDate, rightTitle: state.selectFailureDate.value,
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
Pickers.showDatePicker(context, mode: DateMode.YMDHM, Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) { onConfirm: (p) {
setState(() { setState(() {
_selectFailureDate = state.failureDateTime.value = XSDateUtils.parseDateTime(
'${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; '${p.year}-${p.month!}-${p.day} ${p.hour!}:${p.minute!}',
_failureDateTime = DateTime.parse(_selectFailureDate); 'yyyy-mm-dd HH:mm');
state.selectFailureDate.value = XSDateUtils.formatDateTime(
state.failureDateTime.value, 'yyyy-mm-dd HH:mm');
}); });
}); });
}), }),
@ -430,7 +379,9 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
borderRadius: 20.w, borderRadius: 20.w,
margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w),
padding: EdgeInsets.only(top: 25.w, bottom: 25.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
onClick: () {}), onClick: () {
logic.addAuthorizedAdminRequest();
}),
Container( Container(
padding: EdgeInsets.only(right: 30.w), padding: EdgeInsets.only(right: 30.w),
// color: Colors.red, // color: Colors.red,
@ -497,7 +448,7 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
SubmitBtn( SubmitBtn(
btnName: '完成', btnName: '完成',
onClick: () { onClick: () {
_isSendSuccess = false; state.isSendSuccess.value = false;
Navigator.pop(context, true); Navigator.pop(context, true);
}), }),
SizedBox( SizedBox(
@ -532,11 +483,9 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
activeColor: CupertinoColors.activeBlue, activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5, trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white, thumbColor: CupertinoColors.white,
value: _isRemoteUnlock, value: state.isRemoteUnlock.value,
onChanged: (value) { onChanged: (value) {
setState(() { state.isRemoteUnlock.value = !state.isRemoteUnlock.value;
_isRemoteUnlock = !_isRemoteUnlock;
});
}, },
); );
} }
@ -545,12 +494,8 @@ class _AddAuthorizedAdministratorPageState extends State<AddAuthorizedAdministra
return SubmitBtn( return SubmitBtn(
btnName: TranslationLoader.lanKeys!.sure!.tr, btnName: TranslationLoader.lanKeys!.sure!.tr,
onClick: () { onClick: () {
addAuthorizedAdminRequest(); logic.addAuthorizedAdminRequest();
}, },
); );
} }
String intToStr(int v) {
return (v < 10) ? "0$v" : "$v";
}
} }

View File

@ -22,8 +22,10 @@ class AddAuthorizedAdministratorState {
var selectFailureDate = var selectFailureDate =
'${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day} ${DateTime.now().hour}:${DateTime.now().minute}' '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day} ${DateTime.now().hour}:${DateTime.now().minute}'
.obs; // .obs; //
final effectiveDateTime = DateTime.now().obs; final effectiveDate = DateTime.now().obs;
final failureDateTime = DateTime.now().obs; final failureDate = DateTime.now().obs;
var startTime = 0.obs;
var endTime = 0.obs;
var countryName = '中国'.obs; var countryName = '中国'.obs;
var countryCode = '86'.obs; var countryCode = '86'.obs;
var isSendSuccess = false.obs; var isSendSuccess = false.obs;

View File

@ -127,7 +127,7 @@ class ApiProvider extends BaseProvider {
String createUser, String createUser,
String countryCode, String countryCode,
String usernameType, String usernameType,
String endDate, int endDate,
String faceAuthentication, String faceAuthentication,
String isCameraEnable, String isCameraEnable,
String isRemoteUnlock, String isRemoteUnlock,
@ -138,8 +138,10 @@ class ApiProvider extends BaseProvider {
String operatorUid, String operatorUid,
String receiverUsername, String receiverUsername,
String remarks, String remarks,
String startDate, int startDate,
List weekDays) => List weekDays,
int startTime,
int endTime) =>
post( post(
sendElectronicKeyURL.toUrl, sendElectronicKeyURL.toUrl,
jsonEncode({ jsonEncode({
@ -158,7 +160,9 @@ class ApiProvider extends BaseProvider {
'receiverUsername': receiverUsername, 'receiverUsername': receiverUsername,
'remarks': remarks, 'remarks': remarks,
'startDate': startDate, 'startDate': startDate,
'weekDays': weekDays 'weekDays': weekDays,
'startTime': startTime,
'endTime': endTime
})); }));
Future<Response> uploadElectricQuantity( Future<Response> uploadElectricQuantity(

View File

@ -144,7 +144,7 @@ class ApiRepository {
{required String createUser, {required String createUser,
required String countryCode, required String countryCode,
required String usernameType, required String usernameType,
required String endDate, required int endDate,
required String faceAuthentication, required String faceAuthentication,
required String isCameraEnable, required String isCameraEnable,
required String isRemoteUnlock, required String isRemoteUnlock,
@ -155,8 +155,10 @@ class ApiRepository {
required String operatorUid, required String operatorUid,
required String receiverUsername, required String receiverUsername,
required String remarks, required String remarks,
required String startDate, required int startDate,
required List weekDays}) async { required List weekDays,
required int startTime,
required int endTime}) async {
final res = await apiProvider.sendElectronicKey( final res = await apiProvider.sendElectronicKey(
createUser, createUser,
countryCode, countryCode,
@ -173,7 +175,9 @@ class ApiRepository {
receiverUsername, receiverUsername,
remarks, remarks,
startDate, startDate,
weekDays); weekDays,
startTime,
endTime);
return AuthorizedAdminSendEntity.fromJson(res.body); return AuthorizedAdminSendEntity.fromJson(res.body);
} }

View File

@ -0,0 +1,28 @@
import 'package:intl/intl.dart';
class XSDateUtils {
// DateTime对象格式化为指定格式的字符串
static String formatDateTime(DateTime dateTime, String format) {
DateFormat dateFormat = DateFormat(format);
return dateFormat.format(dateTime);
}
// DateTime对象
static DateTime parseDateTime(String dateString, String format) {
DateFormat dateFormat = DateFormat(format);
return dateFormat.parse(dateString);
}
}
// 使
// void main() {
// //
// DateTime now = DateTime.now();
// String formattedDateTime = DateUtils.formatDateTime(now, 'HH:mm');
// print('Formatted DateTime: $formattedDateTime');
// //
// String dateString = '08:30';
// DateTime parsedDateTime = DateUtils.parseDateTime(dateString, 'HH:mm');
// print('Parsed DateTime: $parsedDateTime');
// }