修改群发电子钥匙、锁用户管理、我的-授权管理员模块问题

This commit is contained in:
魏少阳 2024-06-18 10:36:41 +08:00
parent 5de9d05914
commit 36b1729ee1
26 changed files with 227 additions and 193 deletions

View File

@ -904,5 +904,7 @@
"确认": "Confirm", "确认": "Confirm",
"移除成功": "Remove successfully", "移除成功": "Remove successfully",
"转移成功": "Transfer success", "转移成功": "Transfer success",
"该已锁被删除": "The locked is deleted" "该已锁被删除": "The locked is deleted",
"授权管理员只能查看和管理自己下发的钥匙、密码等权限": "Authorized administrators can only view and manage the keys, passwords, etc. they issued",
"添加授权管理员": "Add authorized administrator"
} }

View File

@ -936,5 +936,7 @@
"确认": "确认", "确认": "确认",
"移除成功": "移除成功", "移除成功": "移除成功",
"转移成功": "转移成功", "转移成功": "转移成功",
"该已锁被删除": "该已锁被删除" "该已锁被删除": "该已锁被删除",
"授权管理员只能查看和管理自己下发的钥匙、密码等权限": "授权管理员只能查看和管理自己下发的钥匙、密码等权限",
"添加授权管理员": "添加授权管理员"
} }

View File

@ -901,5 +901,7 @@
"确认": "确认", "确认": "确认",
"移除成功": "移除成功", "移除成功": "移除成功",
"转移成功": "转移成功", "转移成功": "转移成功",
"该已锁被删除": "该已锁被删除" "该已锁被删除": "该已锁被删除",
"授权管理员只能查看和管理自己下发的钥匙、密码等权限": "授权管理员只能查看和管理自己下发的钥匙、密码等权限",
"添加授权管理员": "添加授权管理员"
} }

View File

@ -204,18 +204,21 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
? TranslationLoader.lanKeys!.pleaseSelect!.tr ? TranslationLoader.lanKeys!.pleaseSelect!.tr
: state.lockIdList.length.toString(), : state.lockIdList.length.toString(),
isHaveDirection: true, isHaveDirection: true,
action: () { action: () async {
Navigator.pushNamed(context, Routers.massSendLockGroupListPage, final result = await Get.toNamed(Routers.massSendLockGroupListPage,
arguments: <String, String>{ arguments: <String, Object>{
'keyLimits': '2', 'keyLimits': '1',
}).then((Object? value) { 'lockIdList': state.lockIdList
//ID列表 });
if (value != null) { if (result != null && result.isNotEmpty) {
value as Map<String, dynamic>; final List selectLockIdList = result['selectLockIdList'];
state.lockIdList = value['selectLockIdList']; state.lockIdList.clear();
setState(() {}); // state.lockIdList.addAll(state.lockIdList.value);
} selectLockIdList.forEach((element) {
}); state.lockIdList.add(element);
});
setState(() {});
}
}), }),
Container(height: 10.h), Container(height: 10.h),
], ],

View File

@ -8,7 +8,7 @@ class MassSendElectronicKeyState{
final RxBool isRemoteUnlock = false.obs; // final RxBool isRemoteUnlock = false.obs; //
List receiverList = []; // List receiverList = []; //
List lockIdList = []; //ID列表 List<int> lockIdList = <int>[]; //ID列表
RxString beginTime = ''.obs; // RxString beginTime = ''.obs; //
RxString endTime = ''.obs;// RxString endTime = ''.obs;//

View File

@ -1,8 +1,4 @@
class LockUserListEntity { class LockUserListEntity {
int? errorCode;
String? description;
String? errorMsg;
List<LockUserItemData>? data;
LockUserListEntity( LockUserListEntity(
{this.errorCode, this.description, this.errorMsg, this.data}); {this.errorCode, this.description, this.errorMsg, this.data});
@ -18,6 +14,10 @@ class LockUserListEntity {
}); });
} }
} }
int? errorCode;
String? description;
String? errorMsg;
List<LockUserItemData>? data;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
@ -32,11 +32,6 @@ class LockUserListEntity {
} }
class LockUserItemData { class LockUserItemData {
int? uid;
String? nickname;
String? headUrl;
String? userid;
bool? isCheck = false;
LockUserItemData( LockUserItemData(
{this.uid, this.nickname, this.headUrl, this.userid, this.isCheck}); {this.uid, this.nickname, this.headUrl, this.userid, this.isCheck});
@ -47,6 +42,11 @@ class LockUserItemData {
headUrl = json['headUrl']; headUrl = json['headUrl'];
userid = json['userid']; userid = json['userid'];
} }
int? uid;
String? nickname;
String? headUrl;
String? userid;
bool? isCheck = false;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};

View File

@ -1,3 +1,4 @@
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_state.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_state.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
@ -8,7 +9,7 @@ class LockUserListLogic extends BaseGetXController {
// //
Future<void> lockUserListRequest() async { Future<void> lockUserListRequest() async {
LockUserListEntity entity = await ApiRepository.to.lockUserList( final LockUserListEntity entity = await ApiRepository.to.lockUserList(
state.pageNo.value.toString(), state.pageSize.value.toString(), ''); state.pageNo.value.toString(), state.pageSize.value.toString(), '');
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.dataList.value = entity.data!; state.dataList.value = entity.data!;

View File

@ -1,9 +1,11 @@
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/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_logic.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_logic.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_state.dart';
import 'package:star_lock/tools/keySearchWidget.dart'; import 'package:star_lock/tools/keySearchWidget.dart';
import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/noData.dart';
import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/submitBtn.dart';
@ -18,8 +20,8 @@ class LockUserListPage extends StatefulWidget {
} }
class _LockUserListPageState extends State<LockUserListPage> { class _LockUserListPageState extends State<LockUserListPage> {
final logic = Get.put(LockUserListLogic()); final LockUserListLogic logic = Get.put(LockUserListLogic());
final state = Get.find<LockUserListLogic>().state; final LockUserListState state = Get.find<LockUserListLogic>().state;
@override @override
void initState() { void initState() {
@ -48,9 +50,9 @@ class _LockUserListPageState extends State<LockUserListPage> {
), ),
body: Column( body: Column(
children: [ children: [
SizedBox( // SizedBox(
height: 20.h, // height: 20.h,
), // ),
KeySearchWidget( KeySearchWidget(
editingController: state.searchController, editingController: state.searchController,
onSubmittedAction: () { onSubmittedAction: () {
@ -62,14 +64,14 @@ class _LockUserListPageState extends State<LockUserListPage> {
), ),
Obx(() => Expanded( Obx(() => Expanded(
child: state.dataList.isEmpty child: state.dataList.isEmpty
? NoData() ? NoData(noDataHeight: 1.sh - 200.h)
: ListView.separated( : ListView.separated(
itemBuilder: (context, index) { itemBuilder: (BuildContext context, int index) {
LockUserItemData indexEntity = state.dataList[index]; final LockUserItemData indexEntity = state.dataList[index];
return _electronicKeyItem(indexEntity); return _electronicKeyItem(indexEntity);
}, },
itemCount: state.dataList.length, itemCount: state.dataList.length,
separatorBuilder: (context, index) { separatorBuilder: (BuildContext context, int index) {
return const Divider( return const Divider(
height: 1, color: AppColors.greyLineColor); height: 1, color: AppColors.greyLineColor);
}, },
@ -95,7 +97,7 @@ class _LockUserListPageState extends State<LockUserListPage> {
child: SubmitBtn( child: SubmitBtn(
btnName: '确定'.tr, btnName: '确定'.tr,
onClick: () { onClick: () {
Map<String, dynamic> resultMap = {}; final Map<String, dynamic> resultMap = {};
resultMap['lockUserList'] = state.selectDataList.value; resultMap['lockUserList'] = state.selectDataList.value;
Navigator.pop(context, resultMap); Navigator.pop(context, resultMap);
}, },

View File

@ -1,3 +1,4 @@
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/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';

View File

@ -1,8 +1,4 @@
class MassSendLockGroupListEntity { class MassSendLockGroupListEntity {
int? errorCode;
String? description;
String? errorMsg;
GroupListData? data;
MassSendLockGroupListEntity( MassSendLockGroupListEntity(
{this.errorCode, this.description, this.errorMsg, this.data}); {this.errorCode, this.description, this.errorMsg, this.data});
@ -13,6 +9,10 @@ class MassSendLockGroupListEntity {
errorMsg = json['errorMsg']; errorMsg = json['errorMsg'];
data = json['data'] != null ? GroupListData.fromJson(json['data']) : null; data = json['data'] != null ? GroupListData.fromJson(json['data']) : null;
} }
int? errorCode;
String? description;
String? errorMsg;
GroupListData? data;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
@ -27,7 +27,6 @@ class MassSendLockGroupListEntity {
} }
class GroupListData { class GroupListData {
List<GroupListItem>? groupList;
GroupListData({this.groupList}); GroupListData({this.groupList});
@ -39,6 +38,7 @@ class GroupListData {
}); });
} }
} }
List<GroupListItem>? groupList;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
@ -50,14 +50,6 @@ class GroupListData {
} }
class GroupListItem { class GroupListItem {
int? lockNum;
int? keyGroupId;
int? groupType; // 0 1
String? keyGroupName;
List<LockListItem>? lockList;
bool isChecked = false;
// bool get isChecked => _isChecked ?? false;
bool isVip = false;
// set isChecked(bool value) => _isChecked = value; // set isChecked(bool value) => _isChecked = value;
@ -80,6 +72,14 @@ class GroupListItem {
}); });
} }
} }
int? lockNum;
int? keyGroupId;
int? groupType; // 0 1
String? keyGroupName;
List<LockListItem>? lockList;
bool isChecked = false;
// bool get isChecked => _isChecked ?? false;
bool isVip = false;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
@ -95,12 +95,6 @@ class GroupListItem {
} }
class LockListItem { class LockListItem {
int? lockId;
String? lockAlias;
bool _isChecked = false;
bool get isChecked => _isChecked ?? false;
set isChecked(bool value) => _isChecked = value;
LockListItem({this.lockId, this.lockAlias}); LockListItem({this.lockId, this.lockAlias});
@ -108,6 +102,12 @@ class LockListItem {
lockId = json['lockId']; lockId = json['lockId'];
lockAlias = json['lockAlias']; lockAlias = json['lockAlias'];
} }
int? lockId;
String? lockAlias;
bool _isChecked = false;
bool get isChecked => _isChecked ?? false;
set isChecked(bool value) => _isChecked = value;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};

View File

@ -1,4 +1,4 @@
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';

View File

@ -12,8 +12,6 @@ import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/submitBtn.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
import '../../../../../app_settings/app_settings.dart';
class MassSendLockGroupListPage extends StatefulWidget { class MassSendLockGroupListPage extends StatefulWidget {
const MassSendLockGroupListPage({Key? key}) : super(key: key); const MassSendLockGroupListPage({Key? key}) : super(key: key);
@ -81,7 +79,7 @@ class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
child: SubmitBtn( child: SubmitBtn(
btnName: '确定'.tr, btnName: '确定'.tr,
onClick: () { onClick: () {
Map<String, dynamic> resultMap = {}; final Map<String, dynamic> resultMap = {};
resultMap['selectLockIdList'] = state.selectLockIdList.value; resultMap['selectLockIdList'] = state.selectLockIdList.value;
Get.back(result: resultMap); Get.back(result: resultMap);
}, },

View File

@ -1,5 +1,5 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
class MassSendLockGroupListState {// 1() 2 class MassSendLockGroupListState {// 1() 2
MassSendLockGroupListState(){ MassSendLockGroupListState(){

View File

@ -32,16 +32,16 @@ class _MassSendReceiverCellState extends State<MassSendReceiverCell> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_receiverController = // _receiverController =
TextEditingController(text: widget.userData.userid ?? ''); // TextEditingController(text: widget.userData.userid ?? '');
_nickNameController = // _nickNameController =
TextEditingController(text: widget.userData.nickname ?? ''); // TextEditingController(text: widget.userData.nickname ?? '');
_receiverController.addListener(() { // _receiverController.addListener(() {
widget.userData.userid = _receiverController.text; // widget.userData.userid = _receiverController.text;
}); // });
_nickNameController.addListener(() { // _nickNameController.addListener(() {
widget.userData.nickname = _nickNameController.text; // widget.userData.nickname = _nickNameController.text;
}); // });
} }
@override @override
@ -53,6 +53,17 @@ class _MassSendReceiverCellState extends State<MassSendReceiverCell> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_receiverController =
TextEditingController(text: widget.userData.userid ?? '');
_nickNameController =
TextEditingController(text: widget.userData.nickname ?? '');
_receiverController.addListener(() {
widget.userData.userid = _receiverController.text;
});
_nickNameController.addListener(() {
widget.userData.nickname = _nickNameController.text;
});
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -106,13 +117,10 @@ class _MassSendReceiverCellState extends State<MassSendReceiverCell> {
controller: _nickNameController, controller: _nickNameController,
isContactPickerEnabled: false, isContactPickerEnabled: false,
onSubmitted: (String text) { onSubmitted: (String text) {
final bool isEmail = RegexpTool.isEmail(text); if (text.trim() == '') {
final bool isPhoneNumber = errorTxt.value = '请输入姓名';
RegexpTool.isPhoneNumber(text); } else if (text.length > 50) {
if (text.trim() == '' || isEmail || isPhoneNumber) { errorTxt.value = '姓名长度不能超过50个字符哦';
errorTxt.value = '';
} else {
errorTxt.value = '账号格式错误'.tr;
} }
}), }),
], ],
@ -224,7 +232,10 @@ class _MassSendReceiverCellState extends State<MassSendReceiverCell> {
if (selectedContact != null) { if (selectedContact != null) {
setState(() { setState(() {
if (selectedContact.phoneNumbers?.isNotEmpty ?? false) { if (selectedContact.phoneNumbers?.isNotEmpty ?? false) {
_receiverController.text = selectedContact.phoneNumbers!.first; // _receiverController.text = selectedContact.phoneNumbers!.first;
String phoneNumber = selectedContact.phoneNumbers!.first;
phoneNumber = phoneNumber.replaceAll(' ', ''); //
_receiverController.text = phoneNumber;
} }
if (selectedContact.fullName?.isNotEmpty ?? false) { if (selectedContact.fullName?.isNotEmpty ?? false) {
_nickNameController.text = selectedContact.fullName!; _nickNameController.text = selectedContact.fullName!;

View File

@ -1,3 +1,4 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_state.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_state.dart';

View File

@ -1,3 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -73,8 +74,17 @@ class _MassSendReceiverPageState extends State<MassSendReceiverPage> {
return; return;
} }
} }
// state.lockUserList
final List<LockUserItemData> tempList = <LockUserItemData>[];
for (final LockUserItemData item in state.lockUserList) {
if (!tempList.any((LockUserItemData e) => e.userid == item.userid)) {
tempList.add(item);
}
}
final Map<String, dynamic> resultMap = <String, dynamic>{}; final Map<String, dynamic> resultMap = <String, dynamic>{};
resultMap['lockUserList'] = state.lockUserList; resultMap['lockUserList'] = tempList;
Navigator.pop(context, resultMap); Navigator.pop(context, resultMap);
}, },
), ),

View File

@ -16,5 +16,5 @@ class MassSendReceiverState {
TextEditingController keyNameController = TextEditingController(); TextEditingController keyNameController = TextEditingController();
RxString countryCode = '86'.obs; RxString countryCode = '86'.obs;
RxString countryName = '中国'.obs; RxString countryName = '中国'.tr.obs;
} }

View File

@ -52,7 +52,7 @@ class _AddAuthorizedAdministratorPageState
: _permanentAdministrator())); : _permanentAdministrator()));
} }
// //
Widget _permanentAdministrator() { Widget _permanentAdministrator() {
if (state.isSendSuccess.value == true) { if (state.isSendSuccess.value == true) {
return sendElectronicKeySucceed(); return sendElectronicKeySucceed();
@ -69,29 +69,32 @@ class _AddAuthorizedAdministratorPageState
? TranslationLoader.lanKeys!.pleaseSelect!.tr ? TranslationLoader.lanKeys!.pleaseSelect!.tr
: state.lockIdList.value.length.toString(), : state.lockIdList.value.length.toString(),
isHaveDirection: true, isHaveDirection: true,
action: () { action: () async {
Navigator.pushNamed(context, Routers.massSendLockGroupListPage, final result = await Get.toNamed(Routers.massSendLockGroupListPage,
arguments: <String, String>{'keyLimits': '1'}) arguments: <String, Object>{
.then((Object? value) { 'keyLimits': '1',
//ID列表 'lockIdList': state.lockIdList.value
if (value != null) { });
value as Map<String, dynamic>; if (result != null && result.isNotEmpty) {
state.lockIdList.value = value['selectLockIdList']; final List selectLockIdList = result['selectLockIdList'];
state.lockIdList.value.clear();
setState(() {}); // state.lockIdList.addAll(state.lockIdList.value);
} selectLockIdList.forEach((element) {
}); state.lockIdList.value.add(element);
});
setState(() {});
}
}), }),
SizedBox( SizedBox(
height: 10.h, height: 10.h,
), ),
CommonItem( CommonItem(
leftTitel: '仅管理自己创建的用户', leftTitel: '仅管理自己创建的用户'.tr,
rightTitle: '', rightTitle: '',
isHaveRightWidget: true, isHaveRightWidget: true,
isTipsImg: true, isTipsImg: true,
tipsImgAction: () { tipsImgAction: () {
ShowTipView().showSureAlertDialog('授权管理员只能查看和管理自己下发的钥匙、密码等权限'); ShowTipView().showSureAlertDialog('授权管理员只能查看和管理自己下发的钥匙、密码等权限'.tr);
}, },
rightWidget: SizedBox( rightWidget: SizedBox(
width: 60.w, width: 60.w,
@ -124,31 +127,33 @@ class _AddAuthorizedAdministratorPageState
? TranslationLoader.lanKeys!.pleaseSelect!.tr ? TranslationLoader.lanKeys!.pleaseSelect!.tr
: state.lockIdList.value.length.toString(), : state.lockIdList.value.length.toString(),
isHaveDirection: true, isHaveDirection: true,
action: () { action: () async {
Navigator.pushNamed(context, Routers.massSendLockGroupListPage, final result = await Get.toNamed(Routers.massSendLockGroupListPage,
arguments: { arguments: <String, Object>{
'keyLimits': '1', 'keyLimits': '1',
}).then((Object? value) { 'lockIdList': state.lockIdList.value
//ID列表 });
if (value != null) { if (result != null && result.isNotEmpty) {
value as Map<String, dynamic>; final List selectLockIdList = result['selectLockIdList'];
state.lockIdList.value = value['selectLockIdList']; state.lockIdList.value.clear();
// state.lockIdList.addAll(state.lockIdList.value);
setState(() {}); selectLockIdList.forEach((element) {
} state.lockIdList.value.add(element);
}); });
setState(() {});
}
}), }),
SizedBox( SizedBox(
height: 10.h, height: 10.h,
), ),
// remoteUnlockingWidget(), // remoteUnlockingWidget(),
CommonItem( CommonItem(
leftTitel: '仅管理自己创建的用户', leftTitel: '仅管理自己创建的用户'.tr,
rightTitle: '', rightTitle: '',
isHaveRightWidget: true, isHaveRightWidget: true,
isTipsImg: true, isTipsImg: true,
tipsImgAction: () { tipsImgAction: () {
ShowTipView().showSureAlertDialog('授权管理员只能查看和管理自己下发的钥匙、密码等权限'); ShowTipView().showSureAlertDialog('授权管理员只能查看和管理自己下发的钥匙、密码等权限'.tr);
}, },
rightWidget: SizedBox( rightWidget: SizedBox(
width: 60.w, width: 60.w,
@ -212,8 +217,7 @@ class _AddAuthorizedAdministratorPageState
} }
// //
Widget getTFWidget( Widget getTFWidget(bool isHaveBtn, String tfStr, TextEditingController editController) {
bool isHaveBtn, String tfStr, TextEditingController editController) {
return SizedBox( return SizedBox(
height: 65.h, height: 65.h,
width: 300.w, width: 300.w,
@ -311,7 +315,7 @@ class _AddAuthorizedAdministratorPageState
trackColor: CupertinoColors.systemGrey5, trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white, thumbColor: CupertinoColors.white,
value: state.onlyManageYouCreatesUser.value, value: state.onlyManageYouCreatesUser.value,
onChanged: (value) { onChanged: (bool value) {
setState(() { setState(() {
state.onlyManageYouCreatesUser.value = state.onlyManageYouCreatesUser.value =
!state.onlyManageYouCreatesUser.value; !state.onlyManageYouCreatesUser.value;
@ -451,7 +455,7 @@ class _AddAuthorizedAdministratorPageState
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Text(
'发送成功', '发送成功'.tr,
style: TextStyle( style: TextStyle(
fontSize: 26.sp, fontSize: 26.sp,
color: Colors.black, color: Colors.black,
@ -514,10 +518,10 @@ class _AddAuthorizedAdministratorPageState
List<Widget> initBottomSheetList() { List<Widget> initBottomSheetList() {
final List<Widget> widgetList = <Widget>[]; final List<Widget> widgetList = <Widget>[];
widgetList.add(buildCenter3('images/icon_wechat.png', '微信好友', 0)); widgetList.add(buildCenter3('images/icon_wechat.png', '微信好友'.tr, 0));
widgetList.add(buildCenter3('images/icon_message.png', '短信', 1)); widgetList.add(buildCenter3('images/icon_message.png', '短信'.tr, 1));
widgetList.add(buildCenter3('images/icon_email.png', '邮件', 2)); widgetList.add(buildCenter3('images/icon_email.png', '邮件'.tr, 2));
widgetList.add(buildCenter3('images/icon_more.png', '更多', 3)); widgetList.add(buildCenter3('images/icon_more.png', '更多'.tr, 3));
return widgetList; return widgetList;
} }

View File

@ -14,8 +14,8 @@ class AddAuthorizedAdministratorState {
final FlutterContactPicker contactPicker = FlutterContactPicker(); final FlutterContactPicker contactPicker = FlutterContactPicker();
late Contact contact; late Contact contact;
RxString type = ''.obs; RxString type = ''.obs;
var lockIdList = [].obs; RxList<int> lockIdList = <int>[].obs;
var weekdaysList = [].obs; RxList weekdaysList = [].obs;
RxBool isCreateUser = false.obs; //1 0 RxBool isCreateUser = false.obs; //1 0
RxString beginDate = DateTool() RxString beginDate = DateTool()

View File

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:get/get.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../common/XSConstantMacro/XSConstantMacro.dart'; import '../../../../common/XSConstantMacro/XSConstantMacro.dart';
@ -36,7 +37,7 @@ class AuthorizedAdministratorListLogic extends BaseGetXController {
final AuthorizedAdminListEntity entity = await ApiRepository.to final AuthorizedAdminListEntity entity = await ApiRepository.to
.deleteAuthorizedAdmin(uid, includeUnderlings.toString()); .deleteAuthorizedAdmin(uid, includeUnderlings.toString());
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast('删除成功', something: () { showToast('删除成功'.tr, something: () {
pageNo = 1; pageNo = 1;
mockNetworkDataRequest(); mockNetworkDataRequest();
}); });
@ -56,17 +57,17 @@ class AuthorizedAdministratorListLogic extends BaseGetXController {
useDateStr = useDateStr =
'${startDateStr.toLocal().toString().substring(0, 16)}-${endDateStr.toLocal().toString().substring(0, 16)}'; '${startDateStr.toLocal().toString().substring(0, 16)}-${endDateStr.toLocal().toString().substring(0, 16)}';
} else { } else {
useDateStr = ''; useDateStr = ''.tr;
} }
} else if (indexEntity.keyType == XSConstantMacro.keyTypeLong) { } else if (indexEntity.keyType == XSConstantMacro.keyTypeLong) {
// //
useDateStr = '永久'; useDateStr = '永久'.tr;
} else if (indexEntity.keyType == XSConstantMacro.keyTypeOnce) { } else if (indexEntity.keyType == XSConstantMacro.keyTypeOnce) {
// //
useDateStr = '单次'; useDateStr = '单次'.tr;
} else if (indexEntity.keyType == XSConstantMacro.keyTypeLoop) { } else if (indexEntity.keyType == XSConstantMacro.keyTypeLoop) {
// //
useDateStr = '循环'; useDateStr = '循环'.tr;
} }
return useDateStr; return useDateStr;
} }

View File

@ -111,7 +111,7 @@ class _AuthorizedAdministratorListPageState
child: SizedBox( child: SizedBox(
width: 360.w, width: 360.w,
child: SubmitBtn( child: SubmitBtn(
btnName: '添加授权管理员', btnName: '添加授权管理员'.tr,
onClick: () { onClick: () {
Navigator.pushNamed( Navigator.pushNamed(
context, Routers.addAuthorizedAdministratorPage) context, Routers.addAuthorizedAdministratorPage)
@ -143,7 +143,7 @@ class _AuthorizedAdministratorListPageState
onPressed: (BuildContext context) { onPressed: (BuildContext context) {
ShowTipView() ShowTipView()
.showDeleteAdministratorIsHaveAllDataDialog( .showDeleteAdministratorIsHaveAllDataDialog(
'同时删除其发送的所有钥匙,钥匙删除后不能恢复', (bool isAllData) { '同时删除其发送的所有钥匙,钥匙删除后不能恢复'.tr, (bool isAllData) {
logic.deleteAdministratorRequest( logic.deleteAdministratorRequest(
authorizedAdminListItem.uid.toString(), authorizedAdminListItem.uid.toString(),
isAllData ? 1 : 0); isAllData ? 1 : 0);
@ -151,7 +151,7 @@ class _AuthorizedAdministratorListPageState
}, },
backgroundColor: Colors.red, backgroundColor: Colors.red,
foregroundColor: Colors.white, foregroundColor: Colors.white,
label: '删除', label: '删除'.tr,
padding: EdgeInsets.only(left: 5.w, right: 5.w), padding: EdgeInsets.only(left: 5.w, right: 5.w),
), ),
], ],

View File

@ -1,8 +1,4 @@
class KeyListByUserEntity { class KeyListByUserEntity {
int? errorCode;
String? description;
String? errorMsg;
KeyListByUserData? data;
KeyListByUserEntity( KeyListByUserEntity(
{this.errorCode, this.description, this.errorMsg, this.data}); {this.errorCode, this.description, this.errorMsg, this.data});
@ -14,6 +10,10 @@ class KeyListByUserEntity {
data = data =
json['data'] != null ? KeyListByUserData.fromJson(json['data']) : null; json['data'] != null ? KeyListByUserData.fromJson(json['data']) : null;
} }
int? errorCode;
String? description;
String? errorMsg;
KeyListByUserData? data;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
@ -28,11 +28,6 @@ class KeyListByUserEntity {
} }
class KeyListByUserData { class KeyListByUserData {
List<KeyListItem>? keyList;
int? pageNo;
int? pageSize;
int? pages;
int? total;
KeyListByUserData( KeyListByUserData(
{this.keyList, this.pageNo, this.pageSize, this.pages, this.total}); {this.keyList, this.pageNo, this.pageSize, this.pages, this.total});
@ -49,6 +44,11 @@ class KeyListByUserData {
pages = json['pages']; pages = json['pages'];
total = json['total']; total = json['total'];
} }
List<KeyListItem>? keyList;
int? pageNo;
int? pageSize;
int? pages;
int? total;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
@ -64,31 +64,6 @@ class KeyListByUserData {
} }
class KeyListItem { class KeyListItem {
String? clientId;
int? lockOwnerId;
int? lockId;
int? senderUserId;
String? keyName;
int? keyType;
int? startDate;
int? endDate;
List? weekDays;
String? remarks;
int? remoteEnable;
int? isCameraEnable;
int? faceAuthentication;
int? keyRight;
int? userType;
int? keyStatus;
int? groupId;
int? lockUserNo;
int? date;
String? createdAt;
String? updatedAt;
UserInfo? userInfo;
int? keyId;
int? uid;
String? lockAlias;
KeyListItem( KeyListItem(
{this.clientId, {this.clientId,
@ -150,6 +125,31 @@ class KeyListItem {
uid = json['uid']; uid = json['uid'];
lockAlias = json['lockAlias']; lockAlias = json['lockAlias'];
} }
String? clientId;
int? lockOwnerId;
int? lockId;
int? senderUserId;
String? keyName;
int? keyType;
int? startDate;
int? endDate;
List? weekDays;
String? remarks;
int? remoteEnable;
int? isCameraEnable;
int? faceAuthentication;
int? keyRight;
int? userType;
int? keyStatus;
int? groupId;
int? lockUserNo;
int? date;
String? createdAt;
String? updatedAt;
UserInfo? userInfo;
int? keyId;
int? uid;
String? lockAlias;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
@ -187,8 +187,6 @@ class KeyListItem {
} }
class UserInfo { class UserInfo {
int? id;
String? accountName;
UserInfo({this.id, this.accountName}); UserInfo({this.id, this.accountName});
@ -196,6 +194,8 @@ class UserInfo {
id = json['id']; id = json['id'];
accountName = json['account_name']; accountName = json['account_name'];
} }
int? id;
String? accountName;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};

View File

@ -59,11 +59,6 @@ class LockUserManageListLogic extends BaseGetXController {
_getElectronicKeyListRefreshUIAction(); _getElectronicKeyListRefreshUIAction();
} }
@override
void onInit() {
super.onInit();
}
@override @override
void onClose() { void onClose() {
super.onClose(); super.onClose();

View File

@ -1,3 +1,4 @@
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:flutter_slidable/flutter_slidable.dart'; import 'package:flutter_slidable/flutter_slidable.dart';
@ -234,14 +235,13 @@ class _LockUserManageListPageState extends State<LockUserManageListPage> {
); );
} }
void showIosTipViewDialog( void showIosTipViewDialog(BuildContext context, LockUserItemData lockUserData) {
BuildContext context, LockUserItemData lockUserData) {
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return ShowIosTipView( return ShowIosTipView(
title: "提示", title: '提示',
tipTitle: "删除用户时,会将用户拥有的钥匙一起删除。", tipTitle: '删除用户时,会将用户拥有的钥匙一起删除。',
sureClick: () { sureClick: () {
Get.back(); Get.back();
logic.deletelockUserRequest(lockUserData.uid!); logic.deletelockUserRequest(lockUserData.uid!);

View File

@ -13,7 +13,7 @@ class OwnedKeyListLogic extends BaseGetXController {
// //
Future<KeyListByUserEntity> mockNetworkDataRequest() async { Future<KeyListByUserEntity> mockNetworkDataRequest() async {
KeyListByUserEntity entity = await ApiRepository.to.keyListByUser(pageNo.toString(), pageSize, state.getUidStr.toString()); final KeyListByUserEntity entity = await ApiRepository.to.keyListByUser(pageNo.toString(), pageSize, state.getUidStr.toString());
// if (entity.errorCode!.codeIsSuccessful) { // if (entity.errorCode!.codeIsSuccessful) {
// } // }
// if (entity.data != null) { // if (entity.data != null) {
@ -39,12 +39,12 @@ class OwnedKeyListLogic extends BaseGetXController {
// setAdministrator // setAdministrator
Future<void> deleteKeyRequest(int keyId) async { Future<void> deleteKeyRequest(int keyId) async {
ElectronicKeyListEntity entity = await ApiRepository.to.deleteElectronicKey( final ElectronicKeyListEntity entity = await ApiRepository.to.deleteElectronicKey(
keyId:keyId.toString(), keyId:keyId.toString(),
includeUnderlings: 0 includeUnderlings: 0
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("删除成功", something: () { showToast('删除成功'.tr, something: () {
pageNo = 1; pageNo = 1;
mockNetworkDataRequest(); mockNetworkDataRequest();
eventBus.fire(LockUserManageListRefreshUI()); eventBus.fire(LockUserManageListRefreshUI());
@ -72,24 +72,24 @@ class OwnedKeyListLogic extends BaseGetXController {
if (indexEntity.keyType == XSConstantMacro.keyTypeTime) { if (indexEntity.keyType == XSConstantMacro.keyTypeTime) {
// //
if (indexEntity.startDate != null && indexEntity.endDate != null) { if (indexEntity.startDate != null && indexEntity.endDate != null) {
DateTime startDateStr = final DateTime startDateStr =
DateTime.fromMillisecondsSinceEpoch(indexEntity.startDate!); DateTime.fromMillisecondsSinceEpoch(indexEntity.startDate!);
DateTime endDateStr = final DateTime endDateStr =
DateTime.fromMillisecondsSinceEpoch(indexEntity.endDate!); DateTime.fromMillisecondsSinceEpoch(indexEntity.endDate!);
useDateStr = useDateStr =
'${startDateStr.toLocal().toString().substring(0, 16)}-${endDateStr.toLocal().toString().substring(0, 16)}'; '${startDateStr.toLocal().toString().substring(0, 16)}-${endDateStr.toLocal().toString().substring(0, 16)}';
} else { } else {
useDateStr = ''; useDateStr = ''.tr;
} }
} else if (indexEntity.keyType == XSConstantMacro.keyTypeLong) { } else if (indexEntity.keyType == XSConstantMacro.keyTypeLong) {
// //
useDateStr = '永久'; useDateStr = '永久'.tr;
} else if (indexEntity.keyType == XSConstantMacro.keyTypeOnce) { } else if (indexEntity.keyType == XSConstantMacro.keyTypeOnce) {
// //
useDateStr = '单次'; useDateStr = '单次'.tr;
} else if (indexEntity.keyType == XSConstantMacro.keyTypeLoop) { } else if (indexEntity.keyType == XSConstantMacro.keyTypeLoop) {
// //
useDateStr = '循环'; useDateStr = '循环'.tr;
} }
return useDateStr; return useDateStr;
} }

View File

@ -1,12 +1,11 @@
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:flutter_slidable/flutter_slidable.dart'; import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_utils/get_utils.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageList/keyListByUserEntity.dart'; import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageList/keyListByUserEntity.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/mine/mineSet/lockUserManage/ownedKeyList/ownedKeyList_state.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/noData.dart';
import 'package:star_lock/tools/showIosTipView.dart'; import 'package:star_lock/tools/showIosTipView.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
@ -24,13 +23,15 @@ class OwnedKeyListPage extends StatefulWidget {
} }
class _OwnedKeyListPageState extends State<OwnedKeyListPage> { class _OwnedKeyListPageState extends State<OwnedKeyListPage> {
final logic = Get.put(OwnedKeyListLogic()); final OwnedKeyListLogic logic = Get.put(OwnedKeyListLogic());
final state = Get.find<OwnedKeyListLogic>().state; final OwnedKeyListState state = Get.find<OwnedKeyListLogic>().state;
Future<void> getHttpData() async { Future<void> getHttpData() async {
logic.mockNetworkDataRequest().then((KeyListByUserEntity value){ logic.mockNetworkDataRequest().then((KeyListByUserEntity value){
if(mounted) setState(() {}); if(mounted) {
setState(() {});
}
}); });
} }
@ -88,8 +89,8 @@ class _OwnedKeyListPageState extends State<OwnedKeyListPage> {
: SlidableAutoCloseBehavior( : SlidableAutoCloseBehavior(
child: ListView.builder( child: ListView.builder(
itemCount: state.dataList.length, itemCount: state.dataList.length,
itemBuilder: (c, index) { itemBuilder: (BuildContext c, int index) {
KeyListItem itemData = state.dataList[index]; final KeyListItem itemData = state.dataList[index];
return Slidable( return Slidable(
key:ValueKey(itemData.keyId), key:ValueKey(itemData.keyId),
endActionPane: ActionPane( endActionPane: ActionPane(
@ -102,7 +103,7 @@ class _OwnedKeyListPageState extends State<OwnedKeyListPage> {
}, },
backgroundColor: Colors.red, backgroundColor: Colors.red,
foregroundColor: Colors.white, foregroundColor: Colors.white,
label: '删除', label: '删除'.tr,
padding: EdgeInsets.only(left: 5.w, right: 5.w), padding: EdgeInsets.only(left: 5.w, right: 5.w),
), ),
], ],
@ -158,7 +159,7 @@ class _OwnedKeyListPageState extends State<OwnedKeyListPage> {
), ),
Visibility( Visibility(
visible: isHaveExpired, visible: isHaveExpired,
child: Text("已过期", child: Text('已过期'.tr,
style: TextStyle(fontSize: 22.sp, color: Colors.grey)), style: TextStyle(fontSize: 22.sp, color: Colors.grey)),
), ),
SizedBox(width: 10.w), SizedBox(width: 10.w),
@ -190,8 +191,8 @@ class _OwnedKeyListPageState extends State<OwnedKeyListPage> {
context: Get.context!, context: Get.context!,
builder: (BuildContext context) { builder: (BuildContext context) {
return ShowIosTipView( return ShowIosTipView(
title: "提示", title: '提示'.tr,
tipTitle: "删除钥匙会在用户APP连网后生效", tipTitle: '删除钥匙会在用户APP连网后生效'.tr,
sureClick: () { sureClick: () {
Get.back(); Get.back();
logic.deleteKeyRequest(lockUserData.keyId!); logic.deleteKeyRequest(lockUserData.keyId!);