1,我的设置--授权管理员关联的锁接口对接

2,没有锁也可开通高级功能权限放开
3,修复N天未开门通知页面默认天数报错问题
This commit is contained in:
Daisy 2024-05-22 17:49:34 +08:00
parent 15dd47d2f0
commit dd8d56c012
12 changed files with 168 additions and 90 deletions

View File

@ -6,27 +6,26 @@ import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/ma
typedef _CallBack = void Function(int selectIndex, String selectLockId);
class massSendLockGroupCell extends StatelessWidget {
massSendLockGroupCell(int index,
{required this.currentIndex,
required this.lockListByGroup,
required this.selectLockAction,
required this.isVip,
Key? key})
: super(key: key);
final int currentIndex;
List lockListByGroup;
final _CallBack selectLockAction;
bool isVip;
massSendLockGroupCell(int index,
{Key? key,
required this.currentIndex,
required this.lockListByGroup,
required this.selectLockAction,
required this.isVip})
: super(key: key);
@override
Widget build(BuildContext context) {
return ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: lockListByGroup.length,
itemBuilder: (_, itemIndex) {
LockListItem itemData = lockListByGroup[itemIndex];
itemBuilder: (_, int itemIndex) {
final LockListItem itemData = lockListByGroup[itemIndex];
return _itemBuilder(itemData, itemIndex);
},
separatorBuilder: (BuildContext context, int index) {
@ -68,8 +67,8 @@ class massSendLockGroupCell extends StatelessWidget {
)),
Image.asset(
itemData.isChecked
? "images/icon_round_select.png"
: "images/icon_round_unSelect.png",
? 'images/icon_round_select.png'
: 'images/icon_round_unSelect.png',
width: 30.w,
height: 30.w,
color: !isVip ? Colors.grey : AppColors.mainColor,

View File

@ -9,7 +9,7 @@ class MassSendLockGroupListLogic extends BaseGetXController {
//
Future<void> mockNetworkDataRequest() async {
MassSendLockGroupListEntity entity =
final MassSendLockGroupListEntity entity =
await ApiRepository.to.lockGroupList(state.keyLimits);
if (entity.errorCode!.codeIsSuccessful) {
if (entity.data != null) {

View File

@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupCell.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_logic.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart';
import 'package:star_lock/tools/ExpandedListView.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/submitBtn.dart';
@ -21,8 +21,10 @@ class MassSendLockGroupListPage extends StatefulWidget {
}
class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
final logic = Get.put(MassSendLockGroupListLogic());
final state = Get.find<MassSendLockGroupListLogic>().state;
final MassSendLockGroupListLogic logic =
Get.put(MassSendLockGroupListLogic());
final MassSendLockGroupListState state =
Get.find<MassSendLockGroupListLogic>().state;
@override
initState() {
@ -77,7 +79,7 @@ class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
child: SubmitBtn(
btnName: '确定'.tr,
onClick: () {
Map<String, dynamic> resultMap = {};
final Map<String, dynamic> resultMap = {};
resultMap['selectLockIdList'] =
state.selectLockIdList.value;
Navigator.pop(context, resultMap);
@ -94,12 +96,12 @@ class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
Widget _buildListView(BuildContext context, List itemList) {
return ListView.separated(
itemCount: itemList.length,
itemBuilder: (context, index) {
GroupListItem itemData = itemList[index];
itemBuilder: (BuildContext context, int index) {
final GroupListItem itemData = itemList[index];
return _buildLockExpandedList(context, index, itemData);
},
shrinkWrap: true,
separatorBuilder: (context, index) {
separatorBuilder: (BuildContext context, index) {
return const Divider(
height: 1,
color: AppColors.greyLineColor,

View File

@ -9,8 +9,9 @@ class CoerceFingerprintListLogic extends BaseGetXController {
final CoerceFingerprintListState state = CoerceFingerprintListState();
//
void getCoercedFingerprintList() async {
var entity = await ApiRepository.to.getCoercedFingerprintList(
Future<void> getCoercedFingerprintList() async {
final CoerceFingerprintListEntity entity =
await ApiRepository.to.getCoercedFingerprintList(
lockId: state.getLockId.value,
pageNo: state.pageNum.value,
pageSize: state.pageSize.value,
@ -24,15 +25,15 @@ class CoerceFingerprintListLogic extends BaseGetXController {
//
String getfingerprintUseDateStr(
CoerceFingerprintItemData fingerprintItemData) {
var keyDateTypeStr = ""; // :1;23:4
var keyDateTypeStr = ''; // :1;23:4
if (fingerprintItemData.fingerprintType! == 1) {
keyDateTypeStr = "永久".tr;
keyDateTypeStr = '永久'.tr;
} else if (fingerprintItemData.fingerprintType! == 2) {
keyDateTypeStr =
"${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时";
'${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时';
} else if (fingerprintItemData.fingerprintType! == 4) {
keyDateTypeStr =
"${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环";
'${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环';
}
return keyDateTypeStr;
}

View File

@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprintList/coerceFingerprintList_entity.dart';
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprintList/coerceFingerprintList_logic.dart';
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprintList/coerceFingerprintList_state.dart';
import 'package:star_lock/tools/keySearchWidget.dart';
import '../../../../../../app_settings/app_colors.dart';
@ -18,8 +19,10 @@ class CoerceFingerprintListPage extends StatefulWidget {
}
class _CoerceFingerprintListPageState extends State<CoerceFingerprintListPage> {
final logic = Get.put(CoerceFingerprintListLogic());
final state = Get.find<CoerceFingerprintListLogic>().state;
final CoerceFingerprintListLogic logic =
Get.put(CoerceFingerprintListLogic());
final CoerceFingerprintListState state =
Get.find<CoerceFingerprintListLogic>().state;
@override
initState() {
@ -37,7 +40,7 @@ class _CoerceFingerprintListPageState extends State<CoerceFingerprintListPage> {
backgroundColor: AppColors.mainColor,
),
body: Column(
children: [
children: <Widget>[
KeySearchWidget(
editingController: state.searchController,
onSubmittedAction: () {
@ -48,7 +51,7 @@ class _CoerceFingerprintListPageState extends State<CoerceFingerprintListPage> {
SizedBox(
height: 20.h,
),
Expanded(child: Obx(() => _buildMainUI())),
Expanded(child: Obx(_buildMainUI)),
SubmitBtn(
btnName: '确定'.tr,
onClick: () {
@ -68,7 +71,7 @@ class _CoerceFingerprintListPageState extends State<CoerceFingerprintListPage> {
return ListView.separated(
shrinkWrap: true,
itemCount: state.fingerprintList.length,
itemBuilder: (c, index) {
itemBuilder: (BuildContext c, int index) {
return _electronicKeyItem(state.fingerprintList[index], index);
},
separatorBuilder: (BuildContext context, int index) {
@ -85,7 +88,7 @@ class _CoerceFingerprintListPageState extends State<CoerceFingerprintListPage> {
return GestureDetector(
onTap: () {
for (int i = 0; i < state.fingerprintList.value.length; i++) {
CoerceFingerprintItemData item = state.fingerprintList.value[i];
final CoerceFingerprintItemData item = state.fingerprintList.value[i];
if (selectIndex == i) {
item.isCurrentSelect = true;
} else {
@ -100,7 +103,7 @@ class _CoerceFingerprintListPageState extends State<CoerceFingerprintListPage> {
color: Colors.white,
height: 90.h,
child: Row(
children: [
children: <Widget>[
SizedBox(
width: 30.w,
),
@ -115,9 +118,9 @@ class _CoerceFingerprintListPageState extends State<CoerceFingerprintListPage> {
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
children: <Widget>[
Row(
children: [
children: <Widget>[
Text(
itemData.fingerprintName ?? '',
style: TextStyle(
@ -133,7 +136,7 @@ class _CoerceFingerprintListPageState extends State<CoerceFingerprintListPage> {
SizedBox(height: 10.h),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
logic.getfingerprintUseDateStr(itemData),
style: TextStyle(

View File

@ -22,7 +22,7 @@ class NDaysUnopenedState {
];
var isUnOpenNotice = false.obs; // N天未开门提醒
var unOpenDoorTime = 1.obs; //
var unOpenDoorTime = 3.obs; //
var getLockId = 0.obs;
var lockUserKeys = LockUserListKeys().obs;
@ -43,7 +43,9 @@ class NDaysUnopenedState {
msgNoticeInfo.value = map['lockSetInfoData'];
isUnOpenNotice.value =
msgNoticeInfo.value.dayNotOpenDoorState == 1 ? true : false;
unOpenDoorTime.value = msgNoticeInfo.value.dayNotOpenDoorValue!;
if (msgNoticeInfo.value.dayNotOpenDoorValue != 0) {
unOpenDoorTime.value = msgNoticeInfo.value.dayNotOpenDoorValue!;
}
}
}
}

View File

@ -93,13 +93,13 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
Obx(() => GestureDetector(
onTap: () {
if (!state.isVip.value) {
if (CommonDataManage().currentKeyInfo.isLockOwner !=
1) {
logic.showToast('请先添加锁');
} else {
Get.toNamed(Routers.advancedFeaturesWebPage,
arguments: <String, bool>{'isShop': true});
}
// if (CommonDataManage().currentKeyInfo.isLockOwner !=
// 1) {
// logic.showToast('请先添加锁');
// } else {
Get.toNamed(Routers.advancedFeaturesWebPage,
arguments: <String, bool>{'isShop': true});
// }
} else {
Get.toNamed(
Routers.valueAddedServicesHighFunctionPage);

View File

@ -0,0 +1,85 @@
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
class AdministratorAssociationLockEntity {
AdministratorAssociationLockEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
AdministratorAssociationLockEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
if (json['data'] != null) {
data = <GroupListItemData>[];
json['data'].forEach((v) {
data!.add(GroupListItemData.fromJson(v));
});
}
}
int? errorCode;
String? description;
String? errorMsg;
List<GroupListItemData>? data;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['errorCode'] = errorCode;
data['description'] = description;
data['errorMsg'] = errorMsg;
if (this.data != null) {
data['data'] =
this.data!.map((GroupListItemData v) => v.toJson()).toList();
}
return data;
}
}
class GroupListItemData {
GroupListItemData(
{this.uid, this.groupName, this.groupType, this.groupId, this.lockList});
GroupListItemData.fromJson(Map<String, dynamic> json) {
uid = json['uid'];
groupName = json['groupName'];
groupType = json['groupType'];
groupId = json['groupId'];
if (json['lockList'] != null) {
lockList = <LockListItem>[];
json['lockList'].forEach((v) {
lockList!.add(LockListItem.fromJson(v));
});
}
}
int? uid;
String? groupName;
int? groupType;
int? groupId;
List<LockListItem>? lockList;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['uid'] = uid;
data['groupName'] = groupName;
data['groupType'] = groupType;
data['groupId'] = groupId;
if (lockList != null) {
data['lockList'] = lockList!.map((LockListItem v) => v.toJson()).toList();
}
return data;
}
}
// class LockListItemData {
// LockListItemData({this.lockId, this.lockAlias});
// LockListItemData.fromJson(Map<String, dynamic> json) {
// lockId = json['lockId'];
// lockAlias = json['lockAlias'];
// }
// int? lockId;
// String? lockAlias;
// Map<String, dynamic> toJson() {
// final Map<String, dynamic> data = <String, dynamic>{};
// data['lockId'] = lockId;
// data['lockAlias'] = lockAlias;
// return data;
// }
// }

View File

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorAssociationLock/administratorAssociationLock_entity.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorAssociationLock/administratorAssociationLock_state.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
@ -11,11 +11,13 @@ class AdministratorAssociationLockLogic extends BaseGetXController {
//
Future<void> administratorOwnLockListRequest() async {
var entity = await ApiRepository.to.administratorOwnLockList(
final AdministratorAssociationLockEntity entity =
await ApiRepository.to.administratorOwnLockList(
uid: state.itemData.value.uid ?? 0,
);
if (entity.errorCode!.codeIsSuccessful) {
EasyLoading.showToast('修改成功', duration: 2000.milliseconds);
state.itemLockList.value = entity.data!;
state.itemLockList.refresh();
}
}

View File

@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupCell.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorAssociationLock/administratorAssociationLock_entity.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorAssociationLock/administratorAssociationLock_logic.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorAssociationLock/administratorAssociationLock_state.dart';
import 'package:star_lock/tools/ExpandedListView.dart';
@ -44,17 +45,14 @@ class _AdministratorAssociationLockPageState
),
],
),
body: _buildListView(),
body: Obx(_buildListView),
);
}
Widget _buildListView() {
return ListView.separated(
itemCount: state.itemLockList.length,
itemBuilder: (BuildContext context, int index) {
final GroupListItem itemData = state.itemLockList[index];
return _buildLockExpandedList(context, index, itemData);
},
itemBuilder: _buildLockExpandedList,
shrinkWrap: true,
separatorBuilder: (BuildContext context, int index) {
return const Divider(
@ -65,38 +63,23 @@ class _AdministratorAssociationLockPageState
}
//
Widget _buildLockExpandedList(context, index, GroupListItem itemData) {
List lockItemList = itemData.lockList ?? [];
Widget _buildLockExpandedList(context, index) {
final GroupListItemData itemData = state.itemLockList[index];
final List lockItemList = itemData.lockList ?? [];
final GroupListItem getItemData = GroupListItem();
getItemData.keyGroupId = itemData.groupId;
getItemData.keyGroupName = itemData.groupName;
getItemData.groupType = itemData.groupType;
return ExpandedListTile(
onTap: () {
//
if (itemData.isChecked) {
var selectList = itemData.lockList;
for (LockListItem lockListItem in selectList!) {
lockListItem.isChecked = true;
state.selectLockIdList.value.add(lockListItem.lockId);
}
} else {
var selectList = itemData.lockList;
for (LockListItem lockListItem in selectList!) {
lockListItem.isChecked = false;
state.selectLockIdList.value.remove(lockListItem.lockId);
}
}
setState(() {});
},
onTap: () {},
typeImgList: const [],
groupItem: itemData,
groupItem: getItemData,
child: massSendLockGroupCell(index,
currentIndex: index, lockListByGroup: lockItemList, isVip: true,
selectLockAction: (int selectIndex, String selectLockId) {
final LockListItem lockItem = lockItemList[selectIndex];
lockItem.isChecked = !lockItem.isChecked;
if (lockItem.isChecked) {
state.selectLockIdList.value.add(lockItem.lockId);
}
setState(() {});
}),
currentIndex: index,
lockListByGroup: lockItemList,
isVip: true,
selectLockAction: (int selectIndex, String selectLockId) {}),
);
}
}

View File

@ -66,12 +66,12 @@ class _ValueAddedServicesPageListState
TranslationLoader.lanKeys!.advancedFunction!.tr, () async {
var isVip = await Storage.getBool(saveIsVip);
if (isVip == null || !isVip) {
if (CommonDataManage().currentKeyInfo.isLockOwner != 1) {
logic.showToast('请先添加锁');
} else {
Get.toNamed(Routers.advancedFeaturesWebPage,
arguments: {'isShop': true});
}
// if (CommonDataManage().currentKeyInfo.isLockOwner != 1) {
// logic.showToast('请先添加锁');
// } else {
Get.toNamed(Routers.advancedFeaturesWebPage,
arguments: <String, bool>{'isShop': true});
// }
} else {
Get.toNamed(Routers.valueAddedServicesHighFunctionPage);
}

View File

@ -20,6 +20,7 @@ import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_
import 'package:star_lock/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_entity.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_entity.dart';
import 'package:star_lock/mine/mineSet/appUnlockNeedMobileNetworkingLock/selectLockListEntity.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorAssociationLock/administratorAssociationLock_entity.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorDetails/administratorDetailEntity.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/authorizedAdministrator/authorizedAdminListEntity.dart';
import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireElectronicKey/expireLockList_entity.dart';
@ -1014,10 +1015,10 @@ class ApiRepository {
}
//
Future<AuthorizedAdminListEntity> administratorOwnLockList(
Future<AdministratorAssociationLockEntity> administratorOwnLockList(
{required int uid}) async {
final res = await apiProvider.administratorOwnLockList(uid);
return AuthorizedAdminListEntity.fromJson(res.body);
return AdministratorAssociationLockEntity.fromJson(res.body);
}
//