1,完成清空操作记录接口调试
2,完成创建锁分组接口及逻辑处理 3,完成锁分组列表接口调试
This commit is contained in:
parent
326e5e9ef7
commit
b98307f300
@ -90,12 +90,14 @@ class KeyRecordDataItem {
|
|||||||
recordId = json['recordId'];
|
recordId = json['recordId'];
|
||||||
lockId = json['lockId'];
|
lockId = json['lockId'];
|
||||||
recordType = json['recordType'];
|
recordType = json['recordType'];
|
||||||
recordTypeName = json['recordTypeName'];
|
json['recordTypeName'] != null
|
||||||
|
? recordTypeName = json['recordTypeName']
|
||||||
|
: "";
|
||||||
success = json['success'];
|
success = json['success'];
|
||||||
username = json['username'];
|
json['username'] != null ? username = json['username'] : "";
|
||||||
lockDate = json['lockDate'];
|
json['lockDate'] != null ? lockDate = json['lockDate'] : "";
|
||||||
operateDate = json['operateDate'];
|
operateDate = json['operateDate'];
|
||||||
keyboardPwd = json['keyboardPwd'];
|
json['keyboardPwd'] != null ? keyboardPwd = json['keyboardPwd'] : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
@ -105,8 +107,12 @@ class KeyRecordDataItem {
|
|||||||
data['recordType'] = recordType;
|
data['recordType'] = recordType;
|
||||||
data['recordTypeName'] = recordTypeName;
|
data['recordTypeName'] = recordTypeName;
|
||||||
data['success'] = success;
|
data['success'] = success;
|
||||||
data['username'] = username;
|
if (data['username'] != null) {
|
||||||
data['lockDate'] = lockDate;
|
data['username'] = username;
|
||||||
|
}
|
||||||
|
if (data['lockDate'] != null) {
|
||||||
|
data['lockDate'] = lockDate;
|
||||||
|
}
|
||||||
data['operateDate'] = operateDate;
|
data['operateDate'] = operateDate;
|
||||||
data['keyboardPwd'] = keyboardPwd;
|
data['keyboardPwd'] = keyboardPwd;
|
||||||
return data;
|
return data;
|
||||||
|
|||||||
@ -71,7 +71,7 @@ class _KeyOperationRecordPageState extends State<KeyOperationRecordPage> {
|
|||||||
|
|
||||||
Widget _buildMainUI(List<KeyRecordDataItem> itemDataList) {
|
Widget _buildMainUI(List<KeyRecordDataItem> itemDataList) {
|
||||||
return ListView.separated(
|
return ListView.separated(
|
||||||
itemCount: 5,
|
itemCount: itemDataList.length,
|
||||||
itemBuilder: (c, index) {
|
itemBuilder: (c, index) {
|
||||||
KeyRecordDataItem dataItem = itemDataList[index];
|
KeyRecordDataItem dataItem = itemDataList[index];
|
||||||
int? operateDate = dataItem.operateDate;
|
int? operateDate = dataItem.operateDate;
|
||||||
|
|||||||
@ -32,7 +32,6 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
// TODO: implement initState
|
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
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/tools/showTFView.dart';
|
||||||
|
|
||||||
import '../../../../../app_settings/app_colors.dart';
|
import '../../../../../app_settings/app_colors.dart';
|
||||||
import '../../../../../tools/commonItem.dart';
|
import '../../../../../tools/commonItem.dart';
|
||||||
@ -16,6 +17,8 @@ class AdminOpenLockPasswordPage extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _AdminOpenLockPasswordPageState extends State<AdminOpenLockPasswordPage> {
|
class _AdminOpenLockPasswordPageState extends State<AdminOpenLockPasswordPage> {
|
||||||
|
final TextEditingController _changePwdController = TextEditingController();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
@ -28,10 +31,12 @@ class _AdminOpenLockPasswordPageState extends State<AdminOpenLockPasswordPage> {
|
|||||||
children: [
|
children: [
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.password!.tr,
|
leftTitel: TranslationLoader.lanKeys!.password!.tr,
|
||||||
rightTitle: "189934",
|
rightTitle: "123456",
|
||||||
isHaveLine: false,
|
isHaveLine: false,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {}),
|
action: () {
|
||||||
|
showCupertinoAlertDialog(context);
|
||||||
|
}),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.all(30.w),
|
margin: EdgeInsets.all(30.w),
|
||||||
child: Column(
|
child: Column(
|
||||||
@ -70,4 +75,29 @@ class _AdminOpenLockPasswordPageState extends State<AdminOpenLockPasswordPage> {
|
|||||||
],
|
],
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void showCupertinoAlertDialog(
|
||||||
|
BuildContext context,
|
||||||
|
) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return ShowTFView(
|
||||||
|
title:
|
||||||
|
"${TranslationLoader.lanKeys!.amend!.tr} ${TranslationLoader.lanKeys!.name!.tr}",
|
||||||
|
tipTitle: "请输入",
|
||||||
|
controller: _changePwdController,
|
||||||
|
sureClick: () {
|
||||||
|
//发送编辑钥匙名称请求
|
||||||
|
if (_changePwdController.text.isNotEmpty) {
|
||||||
|
// modifyPwdRequest();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelClick: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import 'package:get/get.dart';
|
|||||||
import '../../../../../appRouters.dart';
|
import '../../../../../appRouters.dart';
|
||||||
import '../../../../../app_settings/app_colors.dart';
|
import '../../../../../app_settings/app_colors.dart';
|
||||||
import '../../../../../tools/commonItem.dart';
|
import '../../../../../tools/commonItem.dart';
|
||||||
import '../../../../../tools/submitBtn.dart';
|
|
||||||
import '../../../../../tools/titleAppBar.dart';
|
import '../../../../../tools/titleAppBar.dart';
|
||||||
import '../../../../../translations/trans_lib.dart';
|
import '../../../../../translations/trans_lib.dart';
|
||||||
|
|
||||||
@ -17,6 +16,14 @@ class BasicInformationPage extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _BasicInformationPageState extends State<BasicInformationPage> {
|
class _BasicInformationPageState extends State<BasicInformationPage> {
|
||||||
|
late String _groupName = "";
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_groupName = '未分组';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
@ -71,12 +78,15 @@ class _BasicInformationPageState extends State<BasicInformationPage> {
|
|||||||
}),
|
}),
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.lockGrouping!.tr,
|
leftTitel: TranslationLoader.lanKeys!.lockGrouping!.tr,
|
||||||
rightTitle: "202307",
|
rightTitle: _groupName,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () async {
|
||||||
Navigator.pushNamed(
|
var result = await Navigator.pushNamed(
|
||||||
context, Routers.lockSeletGroupingPage);
|
context, Routers.lockSeletGroupingPage);
|
||||||
|
result as Map<String, dynamic>;
|
||||||
|
_groupName = result['groupName'];
|
||||||
|
setState(() {});
|
||||||
}),
|
}),
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel:
|
leftTitel:
|
||||||
|
|||||||
@ -0,0 +1,72 @@
|
|||||||
|
class LockGroupListEntity {
|
||||||
|
int? errorCode;
|
||||||
|
String? description;
|
||||||
|
String? errorMsg;
|
||||||
|
LockGroupData? data;
|
||||||
|
|
||||||
|
LockGroupListEntity(
|
||||||
|
{this.errorCode, this.description, this.errorMsg, this.data});
|
||||||
|
|
||||||
|
LockGroupListEntity.fromJson(Map<String, dynamic> json) {
|
||||||
|
errorCode = json['errorCode'];
|
||||||
|
description = json['description'];
|
||||||
|
errorMsg = json['errorMsg'];
|
||||||
|
data = json['data'] != null ? LockGroupData.fromJson(json['data']) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
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!.toJson();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LockGroupData {
|
||||||
|
List<LockGroupItem>? itemList;
|
||||||
|
|
||||||
|
LockGroupData({this.itemList});
|
||||||
|
|
||||||
|
LockGroupData.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json['list'] != null) {
|
||||||
|
itemList = <LockGroupItem>[];
|
||||||
|
json['list'].forEach((v) {
|
||||||
|
itemList!.add(LockGroupItem.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
if (itemList != null) {
|
||||||
|
data['list'] = itemList!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LockGroupItem {
|
||||||
|
int? lockNum;
|
||||||
|
int? keyGroupId;
|
||||||
|
String? keyGroupName;
|
||||||
|
|
||||||
|
LockGroupItem({this.lockNum, this.keyGroupId, this.keyGroupName});
|
||||||
|
|
||||||
|
LockGroupItem.fromJson(Map<String, dynamic> json) {
|
||||||
|
lockNum = json['lockNum'];
|
||||||
|
keyGroupId = json['keyGroupId'];
|
||||||
|
keyGroupName = json['keyGroupName'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['lockNum'] = lockNum;
|
||||||
|
data['keyGroupId'] = keyGroupId;
|
||||||
|
data['keyGroupName'] = keyGroupName;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,8 +1,12 @@
|
|||||||
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/lcokSet/basicInformation/lockSeletGrouping/LockGroupListEntity.dart';
|
||||||
|
import 'package:star_lock/network/api_repository.dart';
|
||||||
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
|
import 'package:star_lock/tools/showTFView.dart';
|
||||||
|
import 'package:star_lock/tools/toast.dart';
|
||||||
|
|
||||||
import '../../../../../appRouters.dart';
|
|
||||||
import '../../../../../app_settings/app_colors.dart';
|
import '../../../../../app_settings/app_colors.dart';
|
||||||
import '../../../../../tools/commonItem.dart';
|
import '../../../../../tools/commonItem.dart';
|
||||||
import '../../../../../tools/submitBtn.dart';
|
import '../../../../../tools/submitBtn.dart';
|
||||||
@ -17,6 +21,9 @@ class LockSeletGroupingPage extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _LockSeletGroupingPageState extends State<LockSeletGroupingPage> {
|
class _LockSeletGroupingPageState extends State<LockSeletGroupingPage> {
|
||||||
|
final TextEditingController _changeNameController = TextEditingController();
|
||||||
|
final int _selectGroupIndex = -1;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
@ -25,46 +32,124 @@ class _LockSeletGroupingPageState extends State<LockSeletGroupingPage> {
|
|||||||
barTitle: TranslationLoader.lanKeys!.selectGroup!.tr,
|
barTitle: TranslationLoader.lanKeys!.selectGroup!.tr,
|
||||||
haveBack: true,
|
haveBack: true,
|
||||||
backgroundColor: AppColors.mainColor),
|
backgroundColor: AppColors.mainColor),
|
||||||
body: Column(
|
body: FutureBuilder<List<LockGroupItem>>(
|
||||||
children: [
|
future: mockNetworkDataRequest(),
|
||||||
Expanded(child: _buildMainUI()),
|
builder: (BuildContext context,
|
||||||
SubmitBtn(
|
AsyncSnapshot<List<LockGroupItem>> snapshot) {
|
||||||
btnName: TranslationLoader.lanKeys!.createNewGroup!.tr,
|
//请求结束
|
||||||
borderRadius: 20.w,
|
if (snapshot.connectionState == ConnectionState.done) {
|
||||||
margin: EdgeInsets.only(
|
if (snapshot.hasError) {
|
||||||
left: 30.w, right: 30.w, top: 30.w, bottom: 30.w),
|
//请求失败
|
||||||
padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
|
return const Text('请求失败');
|
||||||
onClick: () {
|
} else {
|
||||||
// Navigator.pushNamed(context, Routers.sendElectronicKeyManagePage);
|
//请求成功
|
||||||
}),
|
final List<LockGroupItem> itemData = snapshot.data!;
|
||||||
SizedBox(
|
|
||||||
height: 40.h,
|
return Column(
|
||||||
)
|
children: [
|
||||||
],
|
Expanded(child: _buildMainUI(context, itemData)),
|
||||||
),
|
SubmitBtn(
|
||||||
|
btnName: TranslationLoader.lanKeys!.createNewGroup!.tr,
|
||||||
|
borderRadius: 20.w,
|
||||||
|
margin: EdgeInsets.only(
|
||||||
|
left: 30.w, right: 30.w, top: 30.w, bottom: 30.w),
|
||||||
|
padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
|
||||||
|
onClick: () {
|
||||||
|
showCupertinoAlertDialog(context);
|
||||||
|
Navigator.pop(context);
|
||||||
|
}),
|
||||||
|
SizedBox(
|
||||||
|
height: 40.h,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//请求未结束 显示loading
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMainUI() {
|
Widget _buildMainUI(BuildContext context, List itemList) {
|
||||||
return ListView.builder(
|
return ListView.builder(
|
||||||
itemCount: 2,
|
itemCount: itemList.length,
|
||||||
itemBuilder: (c, index) {
|
itemBuilder: (c, index) {
|
||||||
|
LockGroupItem itemData = itemList[index];
|
||||||
return CommonItem(
|
return CommonItem(
|
||||||
leftTitel: "202307",
|
leftTitel: itemData.keyGroupName,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
allHeight: 70.h,
|
allHeight: 70.h,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: false,
|
isHaveDirection: false,
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
rightWidget: Image(
|
rightWidget: _selectGroupIndex == index
|
||||||
image: const AssetImage("images/icon_item_checked.png"),
|
? Image(
|
||||||
width: 30.w,
|
image: const AssetImage("images/icon_item_checked.png"),
|
||||||
height: 30.w,
|
width: 30.w,
|
||||||
fit: BoxFit.contain,
|
height: 30.w,
|
||||||
),
|
fit: BoxFit.contain,
|
||||||
|
)
|
||||||
|
: Container(),
|
||||||
action: () {
|
action: () {
|
||||||
// logic.changeLanguage(e);
|
Map<String, dynamic> resultMap = {};
|
||||||
|
resultMap['groupName'] = itemData.keyGroupName;
|
||||||
|
Navigator.pop(context, resultMap);
|
||||||
|
|
||||||
|
setState(() {});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//创建锁分组请求
|
||||||
|
Future<void> addLockGroupRequest() async {
|
||||||
|
LockGroupListEntity entity =
|
||||||
|
await ApiRepository.to.addLockGroup(_changeNameController.text, '0');
|
||||||
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
Toast.show(msg: "创建成功");
|
||||||
|
mockNetworkDataRequest();
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//分组列表请求
|
||||||
|
Future<List<LockGroupItem>> mockNetworkDataRequest() async {
|
||||||
|
LockGroupListEntity entity = await ApiRepository.to.lockGroupList('1');
|
||||||
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
if (entity.data != null) {
|
||||||
|
return entity.data!.itemList!;
|
||||||
|
} else {
|
||||||
|
List<LockGroupItem> dataList = [];
|
||||||
|
return dataList;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void showCupertinoAlertDialog(
|
||||||
|
BuildContext context,
|
||||||
|
) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return ShowTFView(
|
||||||
|
title:
|
||||||
|
"${TranslationLoader.lanKeys!.amend!.tr} ${TranslationLoader.lanKeys!.name!.tr}",
|
||||||
|
tipTitle: "请输入",
|
||||||
|
controller: _changeNameController,
|
||||||
|
sureClick: () {
|
||||||
|
//发送编辑钥匙名称请求
|
||||||
|
if (_changeNameController.text.isNotEmpty) {
|
||||||
|
addLockGroupRequest();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelClick: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,8 +4,6 @@ import 'package:get/get.dart';
|
|||||||
|
|
||||||
import '../../../appRouters.dart';
|
import '../../../appRouters.dart';
|
||||||
import '../../../app_settings/app_colors.dart';
|
import '../../../app_settings/app_colors.dart';
|
||||||
import '../../../blue/io_tool/io_manager.dart';
|
|
||||||
import '../../../tools/storage.dart';
|
|
||||||
import '../../../tools/titleAppBar.dart';
|
import '../../../tools/titleAppBar.dart';
|
||||||
import '../../../translations/trans_lib.dart';
|
import '../../../translations/trans_lib.dart';
|
||||||
import 'lockDetail_logic.dart';
|
import 'lockDetail_logic.dart';
|
||||||
@ -23,7 +21,6 @@ class _LockDetailPageState extends State<LockDetailPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: Colors.white,
|
backgroundColor: Colors.white,
|
||||||
appBar: TitleAppBar(
|
appBar: TitleAppBar(
|
||||||
@ -78,15 +75,15 @@ class _LockDetailPageState extends State<LockDetailPage> {
|
|||||||
children: [
|
children: [
|
||||||
Center(
|
Center(
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: (){
|
onTap: () {
|
||||||
// logic.transferPermissionsAction();
|
// logic.transferPermissionsAction();
|
||||||
// logic.openDoorAction();
|
// logic.openDoorAction();
|
||||||
// logic.editLockUserAction();
|
// logic.editLockUserAction();
|
||||||
logic.factoryDataResetAction();
|
logic.factoryDataResetAction();
|
||||||
},
|
},
|
||||||
child: Image.asset('images/main/icon_main_openLockBtn.png',
|
child: Image.asset('images/main/icon_main_openLockBtn.png',
|
||||||
width: 268.w, height: 268.w),
|
width: 268.w, height: 268.w),
|
||||||
)),
|
)),
|
||||||
Align(
|
Align(
|
||||||
alignment: const Alignment(0.6, 1),
|
alignment: const Alignment(0.6, 1),
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
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/electronicKeyDetail/keyOperationRecordEntity.dart';
|
||||||
|
import 'package:star_lock/network/api_repository.dart';
|
||||||
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
|
|
||||||
import '../../../app_settings/app_colors.dart';
|
import '../../../app_settings/app_colors.dart';
|
||||||
import '../../../tools/jh_pop_menus.dart';
|
import '../../../tools/jh_pop_menus.dart';
|
||||||
@ -35,12 +38,10 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
|
|||||||
JhPopMenus.showLinePop(context, clickCallback: (index, selText) {
|
JhPopMenus.showLinePop(context, clickCallback: (index, selText) {
|
||||||
print('选中index: $index');
|
print('选中index: $index');
|
||||||
print('选中text: $selText');
|
print('选中text: $selText');
|
||||||
|
if (index == 0) {
|
||||||
if (selText == '添加朋友') {
|
mockNetworkDataRequest();
|
||||||
// JhNavUtils.pushNamed(context, 'WxAddFriendPage');
|
} else if (index == 1) {
|
||||||
}
|
clearOperationRecordRequest();
|
||||||
if (selText == '扫一扫') {
|
|
||||||
// _scan();
|
|
||||||
}
|
}
|
||||||
}, listData: [
|
}, listData: [
|
||||||
{'text': '读取记录'},
|
{'text': '读取记录'},
|
||||||
@ -50,49 +51,78 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
|
||||||
actionsList: [
|
|
||||||
TextButton(
|
|
||||||
child: const Text(
|
|
||||||
"操作",
|
|
||||||
style: TextStyle(color: Colors.white),
|
|
||||||
),
|
|
||||||
onPressed: () {
|
|
||||||
JhPopMenus.showLinePop(context, clickCallback: (index, selText) {
|
|
||||||
print('选中index: $index');
|
|
||||||
print('选中text: $selText');
|
|
||||||
|
|
||||||
if (selText == '添加朋友') {
|
|
||||||
// JhNavUtils.pushNamed(context, 'WxAddFriendPage');
|
|
||||||
}
|
|
||||||
if (selText == '扫一扫') {
|
|
||||||
// _scan();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
*/
|
|
||||||
),
|
|
||||||
body: Column(
|
|
||||||
children: [
|
|
||||||
Container(
|
|
||||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
padding: EdgeInsets.all(20.h),
|
|
||||||
child: Text(
|
|
||||||
TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr,
|
|
||||||
textAlign: TextAlign.start,
|
|
||||||
style: TextStyle(fontSize: 20.sp),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
_searchWidget(),
|
|
||||||
Expanded(child: _buildMainUI()),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
|
body: FutureBuilder<List<KeyRecordDataItem>>(
|
||||||
|
future: mockNetworkDataRequest(),
|
||||||
|
builder: (BuildContext context,
|
||||||
|
AsyncSnapshot<List<KeyRecordDataItem>> snapshot) {
|
||||||
|
//请求结束
|
||||||
|
if (snapshot.connectionState == ConnectionState.done) {
|
||||||
|
if (snapshot.hasError) {
|
||||||
|
//请求失败
|
||||||
|
return const Text('请求失败');
|
||||||
|
} else {
|
||||||
|
//请求成功
|
||||||
|
final List<KeyRecordDataItem> itemDataList = snapshot.data!;
|
||||||
|
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.all(20.h),
|
||||||
|
child: Text(
|
||||||
|
TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr,
|
||||||
|
textAlign: TextAlign.start,
|
||||||
|
style: TextStyle(fontSize: 20.sp),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
_searchWidget(),
|
||||||
|
SizedBox(
|
||||||
|
height: 10.h,
|
||||||
|
),
|
||||||
|
Expanded(child: _buildMainUI(itemDataList)),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//请求未结束 显示loading
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//请求操作记录列表
|
||||||
|
Future<List<KeyRecordDataItem>> mockNetworkDataRequest() async {
|
||||||
|
KeyOperationRecordEntity entity = await ApiRepository.to
|
||||||
|
.lockRecordList('0', '63', '0', '28', '1', '1', '20', '0', '', '', '');
|
||||||
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
print("操作记录列表成功:${entity.data?.itemList}");
|
||||||
|
}
|
||||||
|
final data = entity.data;
|
||||||
|
if (data != null) {
|
||||||
|
return data.itemList!;
|
||||||
|
} else {
|
||||||
|
List<KeyRecordDataItem> dataList = [];
|
||||||
|
return dataList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//清空操作记录
|
||||||
|
Future<List<KeyRecordDataItem>> clearOperationRecordRequest() async {
|
||||||
|
KeyOperationRecordEntity entity =
|
||||||
|
await ApiRepository.to.clearOperationRecord('28');
|
||||||
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
print("操作记录列表成功:${entity.data?.itemList}");
|
||||||
|
}
|
||||||
|
final data = entity.data;
|
||||||
|
if (data != null) {
|
||||||
|
return data.itemList!;
|
||||||
|
} else {
|
||||||
|
List<KeyRecordDataItem> dataList = [];
|
||||||
|
return dataList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Widget _searchWidget() {
|
Widget _searchWidget() {
|
||||||
return Container(
|
return Container(
|
||||||
height: 60.h,
|
height: 60.h,
|
||||||
@ -128,19 +158,29 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMainUI() {
|
Widget _buildMainUI(List<KeyRecordDataItem> itemDataList) {
|
||||||
return ListView.builder(
|
return ListView.separated(
|
||||||
itemCount: 20,
|
itemCount: itemDataList.length,
|
||||||
itemBuilder: (c, index) {
|
itemBuilder: (c, index) {
|
||||||
if (index % 2 == 0) {
|
KeyRecordDataItem dataItem = itemDataList[index];
|
||||||
return _dateItem("2023-06-29");
|
int? operateDate = dataItem.operateDate;
|
||||||
} else {
|
DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(operateDate!);
|
||||||
return _operatingRecordItem('images/controls_user.png',
|
String operateDateStr =
|
||||||
"186823150237", "17:56:08用APP开锁", "", () {
|
'${dateStr.toLocal().toString().substring(0, 16)} ';
|
||||||
// Navigator.pushNamed(context, Routers.electronicKeyDetailPage);
|
|
||||||
});
|
return _operatingRecordItem(
|
||||||
}
|
'images/controls_user.png',
|
||||||
});
|
dataItem.username ?? "未知",
|
||||||
|
'$operateDateStr用${dataItem.recordTypeName}',
|
||||||
|
() {});
|
||||||
|
},
|
||||||
|
separatorBuilder: (BuildContext context, int index) {
|
||||||
|
return const Divider(
|
||||||
|
height: 1,
|
||||||
|
color: AppColors.greyLineColor,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _dateItem(String lockDate) {
|
Widget _dateItem(String lockDate) {
|
||||||
@ -159,8 +199,8 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _operatingRecordItem(String lockTypeIcon, String lockTypeTitle,
|
Widget _operatingRecordItem(String userAvatarStr, String userNameStr,
|
||||||
String beginTime, String endTime, Function() action) {
|
String unlockDescStr, Function() action) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: action,
|
onTap: action,
|
||||||
child: Container(
|
child: Container(
|
||||||
@ -173,7 +213,7 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
|
|||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Image.asset(
|
Image.asset(
|
||||||
lockTypeIcon,
|
userAvatarStr,
|
||||||
width: 50.w,
|
width: 50.w,
|
||||||
height: 50.w,
|
height: 50.w,
|
||||||
),
|
),
|
||||||
@ -187,25 +227,23 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
|
|||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
lockTypeTitle,
|
userNameStr,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 24.sp, color: AppColors.blackColor),
|
fontSize: 24.sp, color: AppColors.blackColor),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(height: 10.h),
|
SizedBox(height: 10.h),
|
||||||
Container(
|
Row(
|
||||||
child: Row(
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
children: [
|
||||||
children: [
|
Text(
|
||||||
Text(
|
unlockDescStr,
|
||||||
"17:56:08用APP开锁",
|
style: TextStyle(
|
||||||
style: TextStyle(
|
fontSize: 20.sp,
|
||||||
fontSize: 20.sp,
|
color: AppColors.darkGrayTextColor),
|
||||||
color: AppColors.darkGrayTextColor),
|
),
|
||||||
),
|
],
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
SizedBox(width: 20.h),
|
SizedBox(width: 20.h),
|
||||||
],
|
],
|
||||||
|
|||||||
@ -29,5 +29,7 @@ abstract class Api {
|
|||||||
final String getLockInfoURL = '/lock/syncDataPage'; // 获取锁信息
|
final String getLockInfoURL = '/lock/syncDataPage'; // 获取锁信息
|
||||||
|
|
||||||
final String passwordKeyGetURL = '/keyboardPwd/get'; //获取密码
|
final String passwordKeyGetURL = '/keyboardPwd/get'; //获取密码
|
||||||
final String lockRecordsListURL = '/lockRecords/list'; //操作记录列表
|
final String clearOperationRecordURL = '/lockRecords/clear'; //清空操作记录
|
||||||
|
final String addlockGroupURL = '/keyGroup/add'; //创建锁分组
|
||||||
|
final String lockGroupListURL = '/authorizedAdmin/listGroup'; //锁分组列表
|
||||||
}
|
}
|
||||||
|
|||||||
@ -303,6 +303,16 @@ class ApiProvider extends BaseProvider {
|
|||||||
'startDate': startDate,
|
'startDate': startDate,
|
||||||
'timezoneRawOffSet': timezoneRawOffSet
|
'timezoneRawOffSet': timezoneRawOffSet
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
Future<Response> clearOperationRecord(String lockId) =>
|
||||||
|
post(clearOperationRecordURL.toUrl, jsonEncode({'lockId': lockId}));
|
||||||
|
|
||||||
|
Future<Response> addLockGroup(String groupName, String operatorUid) => post(
|
||||||
|
addlockGroupURL.toUrl,
|
||||||
|
jsonEncode({'groupName': groupName, 'operatorUid': operatorUid}));
|
||||||
|
|
||||||
|
Future<Response> lockGroupList(String type) =>
|
||||||
|
post(lockGroupListURL.toUrl, jsonEncode({'type': type}));
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ExtensionString on String {
|
extension ExtensionString on String {
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
import '../../tools/toast.dart';
|
import '../../tools/toast.dart';
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import 'package:get/get.dart';
|
|||||||
import 'package:star_lock/login/seletCountryRegion/common/countryRegionEntity.dart';
|
import 'package:star_lock/login/seletCountryRegion/common/countryRegionEntity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart';
|
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
|
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
|
||||||
|
import 'package:star_lock/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/LockGroupListEntity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
|
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart';
|
import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart';
|
||||||
import '../common/safetyVerification/entity/CheckSafetyVerificationEntity.dart';
|
import '../common/safetyVerification/entity/CheckSafetyVerificationEntity.dart';
|
||||||
@ -280,4 +281,23 @@ class ApiRepository {
|
|||||||
timezoneRawOffSet);
|
timezoneRawOffSet);
|
||||||
return PasswordKeyEntity.fromJson(res.body);
|
return PasswordKeyEntity.fromJson(res.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//清空操作记录
|
||||||
|
Future<KeyOperationRecordEntity> clearOperationRecord(String lockId) async {
|
||||||
|
final res = await apiProvider.clearOperationRecord(lockId);
|
||||||
|
return KeyOperationRecordEntity.fromJson(res.body);
|
||||||
|
}
|
||||||
|
|
||||||
|
//创建锁分组
|
||||||
|
Future<LockGroupListEntity> addLockGroup(
|
||||||
|
String groupName, String operatorUid) async {
|
||||||
|
final res = await apiProvider.addLockGroup(groupName, operatorUid);
|
||||||
|
return LockGroupListEntity.fromJson(res.body);
|
||||||
|
}
|
||||||
|
|
||||||
|
//锁分组列表
|
||||||
|
Future<LockGroupListEntity> lockGroupList(String type) async {
|
||||||
|
final res = await apiProvider.lockGroupList(type);
|
||||||
|
return LockGroupListEntity.fromJson(res.body);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user