1,统一短信、邮件、实名认证、高级功能模块中使用记录和购买记录实体类并根据类型显示数据

2,修复增值服务--邮件 使用记录:少了接收方账号和查询多久的备注问题
3,修复增值服务--短信 少了接收方账号、条数和查询多久的备注。记录进入有时不显示需下拉,下拉有英文提示问题
This commit is contained in:
“DaisyWu” 2024-07-02 10:56:33 +08:00
parent 89c7f57e2b
commit 5e4256a766
17 changed files with 192 additions and 533 deletions

View File

@ -127,6 +127,8 @@ PODS:
- Flutter
- network_info_plus (0.0.1):
- Flutter
- open_filex (0.0.2):
- Flutter
- package_info_plus (0.4.5):
- Flutter
- path_provider_foundation (0.0.1):
@ -188,6 +190,7 @@ DEPENDENCIES:
- jpush_flutter (from `.symlinks/plugins/jpush_flutter/ios`)
- just_audio (from `.symlinks/plugins/just_audio/ios`)
- network_info_plus (from `.symlinks/plugins/network_info_plus/ios`)
- open_filex (from `.symlinks/plugins/open_filex/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
@ -280,6 +283,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/just_audio/ios"
network_info_plus:
:path: ".symlinks/plugins/network_info_plus/ios"
open_filex:
:path: ".symlinks/plugins/open_filex/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation:
@ -318,7 +323,7 @@ SPEC CHECKSUMS:
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31
camera_avfoundation: 759172d1a77ae7be0de08fc104cfb79738b8a59e
camera_avfoundation: 8b8d780bcfb6a4a02b0fbe2b4bd17b5b71946e68
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
DKImagePickerController: 0a24ebfe7b48beeb74c27531540aaa2cc1dac6cf
@ -332,33 +337,34 @@ SPEC CHECKSUMS:
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82
fluttertoast: 9f2f8e81bb5ce18facb9748d7855bf5a756fe3db
fluttertoast: 77ff8760d90ff5041a97e3d0c0ecaaa8472524d2
fluwx: c18fd6c16b03a2187cd07d6e48e32a7801962849
google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99
GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4
image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb
image_picker_ios: b545a5f16c0fa88e3ecbbce3ed4de45567a8ec18
image_picker_ios: 99dfe1854b4fa34d0364e74a78448a0151025425
ios-voice-processor: 8e32d7f980a06d392d128ef1cd19cf6ddcaca3c1
JCore: 05f0f3489672ea3fa55338bae4866224bc092b1f
JPush: 76668b765fcfd7c15f86b05ca0e5cdc01945ce23
jpush_flutter: 1f436f1a02db5c5ef9e9b42378f557096ccd328b
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
ReachabilitySwift: 2128f3a8c9107e1ad33574c6e58e8285d460b149
SDWebImage: 40b0b4053e36c660a764958bff99eed16610acbb
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
system_settings: 8f5cdbfa72c677fc8d665b863bcc20d393d87e9d
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36
url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
video_player_avfoundation: 02011213dab73ae3687df27ce441fbbcc82b5579
webview_flutter_wkwebview: 4f3e50f7273d31e5500066ed267e3ae4309c5ae4
WechatOpenSDK-XCFramework: 36fb2bea0754266c17184adf4963d7e6ff98b69f
PODFILE CHECKSUM: 317f9473a5705c6fe4d79d95e81676f248048fdc
COCOAPODS: 1.14.3
COCOAPODS: 1.12.1

View File

@ -186,7 +186,6 @@ import 'mine/mineSet/lockUserManage/lockUserManageList/lockUserManageList_page.d
import 'mine/mineSet/lockUserManage/ownedKeyList/ownedKeyList_page.dart';
import 'mine/supportStaff/supportStaff_page.dart';
import 'mine/valueAddedServices/valueAddedServicesBuy/valueAddedServicesBuy_page.dart';
import 'mine/valueAddedServices/valueAddedServicesBuyAndUseRecord/valueAddedServicesBuyAndUseRecordManage/valueAddedServicesBuyAndUseRecordManage_page.dart';
import 'mine/valueAddedServices/valueAddedServicesEmailTemplate/valueAddedServicesAddEmailTemplate/valueAddedServicesAddEmailTemplate_page.dart';
import 'mine/valueAddedServices/valueAddedServicesEmailTemplate/valueAddedServicesListEmailTemplate/valueAddedServicesListEmailTemplate_page.dart';
import 'mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart';
@ -895,10 +894,6 @@ abstract class AppRouters {
name: Routers.valueAddedServicesAddEmailTemplatePage,
page: () => const ValueAddedServicesAddEmailTemplatePage(),
),
GetPage<dynamic>(
name: Routers.valueAddedServicesBuyAndUseRecordManagePage,
page: () => const ValueAddedServicesBuyAndUseRecordManagePage(),
),
GetPage<dynamic>(
name: Routers.lockScreenPage,
page: () => const LockScreenPage(),

View File

@ -5,11 +5,10 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_entity.dart';
import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/notice_template_entity.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_entity.dart';
import 'package:star_lock/tools/NativeInteractionTool.dart';
import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
@ -244,7 +243,7 @@ class AuthorizedAdminLogic extends BaseGetXController {
//
Future<void> keyCheckFace() async {
final AdvancedFunctionRecordEntity entity =
final ValueAddedServicesHighFunctionEntity entity =
await ApiRepository.to.keyCheckFace(
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
);

View File

@ -1,4 +1,3 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart';
@ -6,7 +5,7 @@ import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
@ -148,7 +147,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
Future<void> checkRealNameStatus(int realNameAuthStatus) async {
//
if (realNameAuthStatus == 1) {
final AdvancedFunctionRecordEntity entity =
final ValueAddedServicesHighFunctionEntity entity =
await ApiRepository.to.keyCheckFace(
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
);
@ -397,7 +396,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
//
Future<void> keyCheckFace() async {
final AdvancedFunctionRecordEntity entity =
final ValueAddedServicesHighFunctionEntity entity =
await ApiRepository.to.keyCheckFace(
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
);

View File

@ -5,7 +5,7 @@ import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_entity.dart';
import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/notice_template_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/NativeInteractionTool.dart';
import 'package:star_lock/tools/baseGetXController.dart';
@ -205,7 +205,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
//
Future<void> keyCheckFace() async {
final AdvancedFunctionRecordEntity entity =
final ValueAddedServicesHighFunctionEntity entity =
await ApiRepository.to.keyCheckFace(
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
);

View File

@ -1,132 +0,0 @@
class AdvancedFunctionRecordEntity {
int? errorCode;
String? description;
String? errorMsg;
Data? data;
AdvancedFunctionRecordEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
AdvancedFunctionRecordEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null ? Data.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 Data {
int? pageNo;
int? pageSize;
int? total;
List<RecordItem>? recordList;
Data({this.pageNo, this.pageSize, this.total, this.recordList});
Data.fromJson(Map<String, dynamic> json) {
pageNo = json['pageNo'];
pageSize = json['pageSize'];
total = json['total'];
if (json['list'] != null) {
recordList = <RecordItem>[];
json['list'].forEach((v) {
recordList!.add(RecordItem.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['pageNo'] = pageNo;
data['pageSize'] = pageSize;
data['total'] = total;
if (recordList != null) {
data['list'] = recordList!.map((v) => v.toJson()).toList();
}
return data;
}
}
class RecordItem {
int? id;
int? userId;
String? orderNumber;
String? type;
int? recordType;
int? smsCount;
int? emailCount;
int? cloudauthCount;
int? vipLockCount;
int? vipYear;
String? amount;
String? createdAt;
String? updatedAt;
String? useDate;
String? buyDate;
RecordItem(
{this.id,
this.userId,
this.orderNumber,
this.type,
this.recordType,
this.smsCount,
this.emailCount,
this.cloudauthCount,
this.vipLockCount,
this.vipYear,
this.amount,
this.createdAt,
this.updatedAt,
this.useDate,
this.buyDate});
RecordItem.fromJson(Map<String, dynamic> json) {
id = json['id'];
userId = json['user_id'];
orderNumber = json['order_number'];
type = json['type'];
recordType = json['record_type'];
smsCount = json['sms_count'];
emailCount = json['email_count'];
cloudauthCount = json['cloudauth_count'];
vipLockCount = json['vip_lock_count'];
vipYear = json['vip_year'];
amount = json['amount'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
useDate = json['useDate'];
buyDate = json['buyDate'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['user_id'] = userId;
data['order_number'] = orderNumber;
data['type'] = type;
data['record_type'] = recordType;
data['sms_count'] = smsCount;
data['email_count'] = emailCount;
data['cloudauth_count'] = cloudauthCount;
data['vip_lock_count'] = vipLockCount;
data['vip_year'] = vipYear;
data['amount'] = amount;
data['created_at'] = createdAt;
data['updated_at'] = updatedAt;
data['useDate'] = useDate;
data['buyDate'] = buyDate;
return data;
}
}

View File

@ -1,8 +1,8 @@
import 'dart:async';
import 'package:get/get.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_state.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
@ -28,8 +28,7 @@ class AdvancedFunctionRecordLogic extends BaseGetXController {
if (!load) {
buyPageNo = 1;
}
AdvancedFunctionRecordEntity entity =
await ApiRepository.to.getBuyRecordList(
UseRecordListEntity entity = await ApiRepository.to.getBuyRecordList(
type: type,
recordType: 10,
pageNo: buyPageNo,

View File

@ -2,8 +2,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_logic.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
import 'package:star_lock/tools/noData.dart';
import '../../../tools/titleAppBar.dart';
@ -44,7 +44,7 @@ class _AdvancedFunctionRecordPageState
));
}
Widget _recordKeyItem(RecordItem itemData) {
Widget _recordKeyItem(UseItemData itemData) {
return Container(
color: Colors.white,
margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 10.h),

View File

@ -1,6 +1,6 @@
import 'package:get/get.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
class AdvancedFunctionRecordState {
var buyRecordList = <RecordItem>[].obs;
var buyRecordList = <UseItemData>[].obs;
}

View File

@ -1,32 +0,0 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../../app_settings/app_colors.dart';
import '../../../../tools/titleAppBar.dart';
import '../../../../translations/trans_lib.dart';
import 'valueAddedServicesBuyAndUseRecordManage_tabbar.dart';
class ValueAddedServicesBuyAndUseRecordManagePage extends StatefulWidget {
const ValueAddedServicesBuyAndUseRecordManagePage({Key? key}) : super(key: key);
@override
State<ValueAddedServicesBuyAndUseRecordManagePage> createState() => _ValueAddedServicesBuyAndUseRecordManagePageState();
}
class _ValueAddedServicesBuyAndUseRecordManagePageState extends State<ValueAddedServicesBuyAndUseRecordManagePage> {
var index=0;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.sendKey!.tr, haveBack:true, backgroundColor: AppColors.mainColor),
body: Column(
children: [
ValueAddedServicesBuyAndUseRecordManageTabbar(initialIndex: index,),
],
),
);
}
}

View File

@ -1,111 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../../../app_settings/app_colors.dart';
import '../../../../tools/CustomUnderlineTabIndicator.dart';
import '../valueAddedServicesBuyAndUseRecord_page.dart';
class ValueAddedServicesBuyAndUseRecordManageTabbar extends StatefulWidget {
var initialIndex = 1;
ValueAddedServicesBuyAndUseRecordManageTabbar(
{Key? key, required this.initialIndex})
: super(key: key);
@override
State<ValueAddedServicesBuyAndUseRecordManageTabbar> createState() =>
_ValueAddedServicesBuyAndUseRecordManageTabbarState();
}
class _ValueAddedServicesBuyAndUseRecordManageTabbarState
extends State<ValueAddedServicesBuyAndUseRecordManageTabbar>
with SingleTickerProviderStateMixin {
late TabController _tabController;
final List<ItemView> _itemTabs = <ItemView>[
ItemView(title: "购买记录", type: "0"),
ItemView(title: "使用记录", type: "1")
// ItemView(title: TranslationLoader.lanKeys!.once!.tr, type: "2"),
// ItemView(title: TranslationLoader.lanKeys!.circulation!.tr, type: "3"),
];
@override
void initState() {
// TODO: implement initState
super.initState();
_tabController = TabController(
vsync: this,
length: _itemTabs.length,
initialIndex: widget.initialIndex);
}
@override
Widget build(BuildContext context) {
return Expanded(
child: Column(
children: [
_tabBar(),
_pageWidget(),
],
));
}
TabBar _tabBar() {
return TabBar(
controller: _tabController,
tabs: _itemTabs.map((ItemView item) => _tab(item)).toList(),
isScrollable: true,
indicatorColor: Colors.red,
unselectedLabelColor: Colors.black,
unselectedLabelStyle: TextStyle(
color: AppColors.mainColor,
fontSize: 24.sp,
),
automaticIndicatorColorAdjustment: true,
labelColor: AppColors.mainColor,
labelStyle: TextStyle(
color: AppColors.mainColor,
fontSize: 24.sp,
fontWeight: FontWeight.w600),
indicator: CustomUnderlineTabIndicator(
borderSide: BorderSide(color: AppColors.mainColor, width: 4.w),
strokeCap: StrokeCap.round,
width: 30.w),
);
}
Tab _tab(ItemView item) {
return Tab(
// text: item.title,
child: Container(
width: 1.sw / 4,
margin: EdgeInsets.all(10.w),
// color: Colors.red,
child: Text(
item.title,
textAlign: TextAlign.center,
),
),
);
}
Widget _pageWidget() {
return Expanded(
child: TabBarView(
controller: _tabController,
children: _itemTabs
.map((ItemView item) => ValueAddedServicesBuyAndUseRecordPage(
type: item.type,
))
.toList(),
),
);
}
}
class ItemView {
const ItemView({required this.title, required this.type});
final String title;
final String type;
}

View File

@ -1,111 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:star_lock/app_settings/app_colors.dart';
class ValueAddedServicesBuyAndUseRecordPage extends StatefulWidget {
final String type;
const ValueAddedServicesBuyAndUseRecordPage({Key? key, required this.type})
: super(key: key);
@override
State<ValueAddedServicesBuyAndUseRecordPage> createState() =>
_ValueAddedServicesBuyAndUseRecordPageState();
}
class _ValueAddedServicesBuyAndUseRecordPageState
extends State<ValueAddedServicesBuyAndUseRecordPage> {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: 20,
itemBuilder: (c, index) {
if (index % 2 == 0) {
return _dateItem("2023-06-29");
} else {
return _operatingRecordItem('images/controls_user.png', "张三",
"2023.6.21 11.15", "2023.6.21 11.15", () {
// Navigator.pushNamed(context, Routers.electronicKeyDetailPage);
});
}
});
}
Widget _dateItem(String lockDate) {
return Container(
height: 60.h,
color: AppColors.mainBackgroundColor,
padding: EdgeInsets.only(left: 20.h, right: 20.h),
child: Row(
children: [
Text(
lockDate,
style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor),
),
],
),
);
}
Widget _operatingRecordItem(String lockTypeIcon, String lockTypeTitle,
String beginTime, String endTime, Function() action) {
return GestureDetector(
onTap: action,
child: Container(
height: 90.h,
// padding: EdgeInsets.only(left: 20.w, right: 20.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10.w),
),
child: Row(
children: [
SizedBox(
width: 30.w,
),
Image.asset(
lockTypeIcon,
width: 50.w,
height: 50.w,
),
SizedBox(
width: 20.w,
),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
children: [
Text(
lockTypeTitle,
style: TextStyle(
fontSize: 24.sp, color: AppColors.blackColor),
),
],
),
SizedBox(height: 10.h),
Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"2023.6.21 11.15",
style: TextStyle(
fontSize: 20.sp,
color: AppColors.darkGrayTextColor),
),
],
),
),
SizedBox(width: 20.h),
],
),
),
SizedBox(width: 20.h),
],
),
),
);
}
}

View File

@ -30,18 +30,18 @@ class Data {
int? pageNo;
int? pageSize;
int? total;
List<UseItemData>? useRecordList;
List<UseItemData>? recordList;
Data({this.pageNo, this.pageSize, this.total, this.useRecordList});
Data({this.pageNo, this.pageSize, this.total, this.recordList});
Data.fromJson(Map<String, dynamic> json) {
pageNo = json['pageNo'];
pageSize = json['pageSize'];
total = json['total'];
if (json['list'] != null) {
useRecordList = <UseItemData>[];
recordList = <UseItemData>[];
json['list'].forEach((v) {
useRecordList!.add(UseItemData.fromJson(v));
recordList!.add(UseItemData.fromJson(v));
});
}
}
@ -51,8 +51,8 @@ class Data {
data['pageNo'] = pageNo;
data['pageSize'] = pageSize;
data['total'] = total;
if (useRecordList != null) {
data['list'] = useRecordList!.map((v) => v.toJson()).toList();
if (recordList != null) {
data['list'] = recordList!.map((v) => v.toJson()).toList();
}
return data;
}
@ -71,6 +71,15 @@ class UseItemData {
String? createdAt;
String? updatedAt;
String? useDate;
String? orderNumber;
int? recordType;
int? smsCount;
int? emailCount;
int? cloudauthCount;
int? vipLockCount;
int? vipYear;
String? amount;
String? buyDate;
UseItemData(
{this.id,
@ -83,7 +92,17 @@ class UseItemData {
this.lockName,
this.consCount,
this.createdAt,
this.updatedAt});
this.updatedAt,
this.useDate,
this.orderNumber,
this.recordType,
this.smsCount,
this.emailCount,
this.cloudauthCount,
this.vipLockCount,
this.vipYear,
this.amount,
this.buyDate});
UseItemData.fromJson(Map<String, dynamic> json) {
id = json['id'];
@ -98,6 +117,15 @@ class UseItemData {
createdAt = json['created_at'];
updatedAt = json['updated_at'];
useDate = json['useDate'];
orderNumber = json['order_number'];
recordType = json['record_type'];
smsCount = json['sms_count'];
emailCount = json['email_count'];
cloudauthCount = json['cloudauth_count'];
vipLockCount = json['vip_lock_count'];
vipYear = json['vip_year'];
amount = json['amount'];
buyDate = json['buyDate'];
}
Map<String, dynamic> toJson() {
@ -114,6 +142,15 @@ class UseItemData {
data['created_at'] = createdAt;
data['updated_at'] = updatedAt;
data['useDate'] = useDate;
data['order_number'] = orderNumber;
data['record_type'] = recordType;
data['sms_count'] = smsCount;
data['email_count'] = emailCount;
data['cloudauth_count'] = cloudauthCount;
data['vip_lock_count'] = vipLockCount;
data['vip_year'] = vipYear;
data['amount'] = amount;
data['buyDate'] = buyDate;
return data;
}
}

View File

@ -1,12 +1,9 @@
import 'dart:async';
import 'package:get/get.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_arg.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_state.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../network/api_repository.dart';
class ValueAddedServicesRecordLogic extends BaseGetXController {
ValueAddedServicesRecordLogic();
@ -25,6 +22,7 @@ class ValueAddedServicesRecordLogic extends BaseGetXController {
return;
}
type = data['type'];
loadBuyRecordList(false);
}
//
@ -32,16 +30,21 @@ class ValueAddedServicesRecordLogic extends BaseGetXController {
if (!load) {
buyPageNo = 1;
}
final AdvancedFunctionRecordEntity entity =
await ApiRepository.to.getBuyRecordList(
final UseRecordListEntity entity = await ApiRepository.to.getBuyRecordList(
type: type,
recordType: 10,
pageNo: buyPageNo,
);
if (entity.errorCode!.codeIsSuccessful) {
state.buyRecordList.value = entity.data!.recordList!;
if (load) {
state.buyRecordList.addAll(entity.data!.recordList!);
} else {
state.buyRecordList.value = entity.data!.recordList!;
}
state.buyRecordList.refresh();
}
loadUseRecordList(false);
}
//使
@ -54,27 +57,34 @@ class ValueAddedServicesRecordLogic extends BaseGetXController {
pageNo: buyPageNo,
);
if (entity.errorCode!.codeIsSuccessful) {
state.useRecordList.value = entity.data!.useRecordList!;
if (load) {
state.useRecordList.addAll(entity.data!.recordList!);
} else {
state.useRecordList.value = entity.data!.recordList!;
}
state.useRecordList.refresh();
}
}
String getBuyRecordListTitle(RecordItem itemData) {
void getBuyAndUserInfoStr(UseItemData itemData) {
if (itemData.type == UseRecordListArg.sms['type']) {
return '${itemData.smsCount}';
state.buyCountStr.value = '${itemData.smsCount}';
state.useCountStr.value =
'${itemData.receiverAccount ?? ""} ${itemData.consCount}';
state.buyAmountStr.value = '${itemData.amount}';
} else if (itemData.type == UseRecordListArg.email['type']) {
return '${itemData.emailCount}';
state.buyCountStr.value = '${itemData.emailCount}';
state.useCountStr.value =
'${itemData.receiverAccount ?? ""} ${itemData.consCount}';
state.buyAmountStr.value = '${itemData.amount}';
} else if (itemData.type == UseRecordListArg.cloudauth['type']) {
return '实名认证/${itemData.cloudauthCount}';
state.buyCountStr.value = '实名认证/${itemData.cloudauthCount}';
state.useCountStr.value =
'${itemData.lockName ?? ""} ${itemData.realName ?? ""}';
state.buyAmountStr.value = '${itemData.amount}';
}
return '';
}
@override
void onReady() {
super.onReady();
loadBuyRecordList(false);
loadUseRecordList(false);
state.buyCountStr.refresh();
state.useCountStr.refresh();
state.buyAmountStr.refresh();
}
}

View File

@ -2,7 +2,6 @@ import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart';
import 'package:star_lock/tools/noData.dart';
@ -19,85 +18,84 @@ class ValueAddedServicesRecordPage extends StatefulWidget {
class _ValueAddedServicesRecordPageState
extends State<ValueAddedServicesRecordPage> {
final ValueAddedServicesRecordLogic logic =
Get.put(ValueAddedServicesRecordLogic());
@override
Widget build(BuildContext context) {
return GetBuilder<ValueAddedServicesRecordLogic>(
init: ValueAddedServicesRecordLogic(),
builder: (ValueAddedServicesRecordLogic logic) {
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle: '记录'.tr,
haveBack: true,
backgroundColor: AppColors.mainColor),
body: DefaultTabController(
length: 2,
child: Column(
children: [
TabBar(
tabs: [tabTextItem('购买记录'.tr), tabTextItem('使用记录'.tr)],
indicatorColor: AppColors.mainColor,
indicatorSize: TabBarIndicatorSize.label,
labelColor: AppColors.mainColor,
unselectedLabelColor: AppColors.darkGrayTextColor,
),
Expanded(
child: Obx(() => TabBarView(children: [
_PurchaseRecords(
buyRecordList: logic.state.buyRecordList.value,
),
_UseRecordsTable(
useRecordList: logic.state.useRecordList.value,
),
])),
),
],
),
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle: '记录'.tr,
haveBack: true,
backgroundColor: AppColors.mainColor,
),
body: DefaultTabController(
length: 2,
child: Column(
children: [
TabBar(
tabs: [tabTextItem('购买记录'.tr), tabTextItem('使用记录'.tr)],
indicatorColor: AppColors.mainColor,
indicatorSize: TabBarIndicatorSize.label,
labelColor: AppColors.mainColor,
unselectedLabelColor: AppColors.darkGrayTextColor,
),
);
});
Expanded(
child: TabBarView(
children: [
_PurchaseRecords(
buyRecordList: logic.state.buyRecordList, logic: logic),
_UseRecordsTable(
useRecordList: logic.state.useRecordList, logic: logic),
],
)),
],
),
),
);
}
}
Widget tabTextItem(String tabText) {
return Container(
margin: EdgeInsets.symmetric(vertical: 16.h),
child: Text(
tabText,
style: TextStyle(fontSize: 24.sp),
),
);
Widget tabTextItem(String tabText) {
return Container(
margin: EdgeInsets.symmetric(vertical: 16.h),
child: Text(
tabText,
style: TextStyle(fontSize: 24.sp),
),
);
}
}
//
class _PurchaseRecords extends StatelessWidget {
const _PurchaseRecords({required this.buyRecordList});
final List buyRecordList;
const _PurchaseRecords({required this.buyRecordList, required this.logic});
final List<UseItemData> buyRecordList;
final ValueAddedServicesRecordLogic logic;
@override
Widget build(BuildContext context) {
return GetBuilder<ValueAddedServicesRecordLogic>(
builder: (ValueAddedServicesRecordLogic logic) {
return EasyRefresh(
return EasyRefresh(
onRefresh: () async {
logic.loadBuyRecordList(false);
},
onLoad: () async {
logic.loadBuyRecordList(true);
},
child: buyRecordList.isNotEmpty
? ListView.builder(
itemCount: buyRecordList.length,
itemBuilder: (BuildContext context, int index) {
return _recordKeyItem(buyRecordList[index], logic);
})
: NoData(),
);
});
child: Obx(
() => buyRecordList.isNotEmpty
? ListView.builder(
itemCount: buyRecordList.length,
itemBuilder: (BuildContext context, int index) {
logic.getBuyAndUserInfoStr(buyRecordList[index]);
return _recordKeyItem(buyRecordList[index], logic);
})
: NoData(),
));
}
Widget _recordKeyItem(
RecordItem itemData, ValueAddedServicesRecordLogic logic) {
UseItemData itemData, ValueAddedServicesRecordLogic logic) {
return Container(
color: Colors.white,
margin: EdgeInsets.symmetric(horizontal: 20.w, vertical: 10.h),
@ -115,7 +113,7 @@ class _PurchaseRecords extends StatelessWidget {
fontWeight: FontWeight.bold),
),
Expanded(child: Container()),
Text('${itemData.amount}',
Text(logic.state.buyAmountStr.value,
style: TextStyle(
fontSize: 24.sp,
color: AppColors.blackColor,
@ -123,7 +121,7 @@ class _PurchaseRecords extends StatelessWidget {
],
),
SizedBox(height: 8.h),
Text(logic.getBuyRecordListTitle(itemData),
Text(logic.state.buyCountStr.value,
style: TextStyle(
fontSize: 22.sp, color: AppColors.darkGrayTextColor)),
],
@ -134,32 +132,33 @@ class _PurchaseRecords extends StatelessWidget {
// 使
class _UseRecordsTable extends StatelessWidget {
const _UseRecordsTable({required this.useRecordList});
final List useRecordList;
const _UseRecordsTable({required this.useRecordList, required this.logic});
final List<UseItemData> useRecordList;
final ValueAddedServicesRecordLogic logic;
@override
Widget build(BuildContext context) {
return GetBuilder<ValueAddedServicesRecordLogic>(
builder: (ValueAddedServicesRecordLogic logic) {
return EasyRefresh(
return EasyRefresh(
onRefresh: () async {
logic.loadUseRecordList(false);
},
onLoad: () async {
logic.loadUseRecordList(true);
},
child: useRecordList.isNotEmpty
? ListView.builder(
itemCount: useRecordList.length,
itemBuilder: (BuildContext context, int index) {
return _recordKeyItem(useRecordList[index]);
})
: NoData(),
);
});
child: Obx(
() => useRecordList.isNotEmpty
? ListView.builder(
itemCount: useRecordList.length,
itemBuilder: (BuildContext context, int index) {
logic.getBuyAndUserInfoStr(useRecordList[index]);
return _recordKeyItem(useRecordList[index], logic);
})
: NoData(),
));
}
Widget _recordKeyItem(UseItemData itemData) {
Widget _recordKeyItem(
UseItemData itemData, ValueAddedServicesRecordLogic logic) {
return Container(
color: Colors.white,
margin: EdgeInsets.symmetric(horizontal: 20.w, vertical: 10.h),
@ -170,7 +169,7 @@ class _UseRecordsTable extends StatelessWidget {
Row(
children: <Widget>[
Text(
'${itemData.lockName ?? ""} ${itemData.realName ?? ""}',
logic.state.useCountStr.value,
style: TextStyle(
fontSize: 24.sp,
color: AppColors.blackColor,

View File

@ -1,7 +1,12 @@
import 'package:get/get.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
class ValueAddedServicesRecordState {
int index = 0;
var buyRecordList = [].obs; //
var useRecordList = [].obs; //使
RxList<UseItemData> buyRecordList = <UseItemData>[].obs; //
RxList<UseItemData> useRecordList = <UseItemData>[].obs; //使
RxString buyCountStr = ''.obs;
RxString useCountStr = ''.obs;
RxString receiverUserStr = ''.obs;
RxString buyAmountStr = ''.obs;
}

View File

@ -36,10 +36,8 @@ import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageList/keyList
import 'package:star_lock/mine/mineSet/mineSet/userSettingInfoEntity.dart';
import 'package:star_lock/mine/mineSet/mineSet/weChatQRCodeEntity.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRealName/face_authentication_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/buy_record_list_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/newSMSTemplate_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_entity.dart';
@ -1001,8 +999,7 @@ class ApiRepository {
required int endTime,
required int remoteUnlockSwitch,
required int keyRight,
required bool isShowNetworkErrorMsg
}) async {
required bool isShowNetworkErrorMsg}) async {
final res = await apiProvider.batchSendKey(
lockIds,
createUser,
@ -1017,8 +1014,7 @@ class ApiRepository {
endTime,
remoteUnlockSwitch,
keyRight,
isShowNetworkErrorMsg
);
isShowNetworkErrorMsg);
return KeyDetailEntity.fromJson(res.body);
}
@ -2114,7 +2110,7 @@ class ApiRepository {
}
//
Future<AdvancedFunctionRecordEntity> getBuyRecordList({
Future<UseRecordListEntity> getBuyRecordList({
required String type,
required int pageNo,
required int recordType,
@ -2122,7 +2118,7 @@ class ApiRepository {
}) async {
final res =
await apiProvider.getBuyRecordList(type, recordType, pageNo, pageSize);
return AdvancedFunctionRecordEntity.fromJson(res.body);
return UseRecordListEntity.fromJson(res.body);
}
// 使
@ -2148,11 +2144,11 @@ class ApiRepository {
}
//
Future<AdvancedFunctionRecordEntity> keyCheckFace({
Future<ValueAddedServicesHighFunctionEntity> keyCheckFace({
required int lockId,
}) async {
final res = await apiProvider.keyCheckFace(lockId);
return AdvancedFunctionRecordEntity.fromJson(res.body);
return ValueAddedServicesHighFunctionEntity.fromJson(res.body);
}
// certifyId