diff --git a/lib/constants/api.dart b/lib/constants/api.dart index f5cba6bf..8eb12266 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -28,6 +28,8 @@ class API { static _House house = _House(); static _SarsApi sarsApi = _SarsApi(); static _Bracelet bracelet = _Bracelet(); + + static _Intergral intergral = _Intergral(); } class _Bracelet { @@ -35,6 +37,14 @@ class _Bracelet { String get data => '/user/aqg/getData'; } +class _Intergral { + ///积分签到 + String get sign => '/user/points/sign'; + + ///获取积分页面详情 + String get info => '/user/points/getPointsInfo'; +} + class _Login { /// 获取手机验证码 String get sendSMSCode => '/login/sendMMSLogin'; diff --git a/lib/models/integral/clocked_record_list_model.dart b/lib/models/integral/clocked_record_list_model.dart index 5c8826d9..0a7e5842 100644 --- a/lib/models/integral/clocked_record_list_model.dart +++ b/lib/models/integral/clocked_record_list_model.dart @@ -4,15 +4,17 @@ part 'clocked_record_list_model.g.dart'; @JsonSerializable() class ClockedRecordListModel { - final int day; - final String date; - final int addIntegral; + final int id; + final int addNums; + final int serialNumber; + final String signDate; factory ClockedRecordListModel.fromJson(Map json) => _$ClockedRecordListModelFromJson(json); const ClockedRecordListModel({ - required this.day, - required this.date, - required this.addIntegral, + required this.id, + required this.addNums, + required this.serialNumber, + required this.signDate, }); } diff --git a/lib/models/integral/clocked_record_list_model.g.dart b/lib/models/integral/clocked_record_list_model.g.dart index 5033db87..f1d62405 100644 --- a/lib/models/integral/clocked_record_list_model.g.dart +++ b/lib/models/integral/clocked_record_list_model.g.dart @@ -9,7 +9,8 @@ part of 'clocked_record_list_model.dart'; ClockedRecordListModel _$ClockedRecordListModelFromJson( Map json) => ClockedRecordListModel( - day: json['day'] as int, - date: json['date'] as String, - addIntegral: json['addIntegral'] as int, + id: json['id'] as int, + addNums: json['addNums'] as int, + serialNumber: json['serialNumber'] as int, + signDate: json['signDate'] as String, ); diff --git a/lib/models/integral/integral_info_model.dart b/lib/models/integral/integral_info_model.dart new file mode 100644 index 00000000..5077276e --- /dev/null +++ b/lib/models/integral/integral_info_model.dart @@ -0,0 +1,23 @@ +import 'package:aku_new_community/models/integral/clocked_record_list_model.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'integral_info_model.g.dart'; + +@JsonSerializable() +class IntegralInfoModel { + final int points; + final String rewardSetting; + final int serialNumber; + final bool isSign; + final List signRecordList; + factory IntegralInfoModel.fromJson(Map json) => + _$IntegralInfoModelFromJson(json); + + const IntegralInfoModel({ + required this.points, + required this.rewardSetting, + required this.serialNumber, + required this.isSign, + required this.signRecordList, + }); +} diff --git a/lib/models/integral/integral_info_model.g.dart b/lib/models/integral/integral_info_model.g.dart new file mode 100644 index 00000000..917d6d2b --- /dev/null +++ b/lib/models/integral/integral_info_model.g.dart @@ -0,0 +1,19 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'integral_info_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +IntegralInfoModel _$IntegralInfoModelFromJson(Map json) => + IntegralInfoModel( + points: json['points'] as int, + rewardSetting: json['rewardSetting'] as String, + serialNumber: json['serialNumber'] as int, + isSign: json['isSign'] as bool, + signRecordList: (json['signRecordList'] as List) + .map( + (e) => ClockedRecordListModel.fromJson(e as Map)) + .toList(), + ); diff --git a/lib/pages/personal/clock_in/clock_in_page.dart b/lib/pages/personal/clock_in/clock_in_page.dart index 76be7345..d3acd7b0 100644 --- a/lib/pages/personal/clock_in/clock_in_page.dart +++ b/lib/pages/personal/clock_in/clock_in_page.dart @@ -5,9 +5,12 @@ import 'package:aku_new_community/extensions/widget_list_ext.dart'; import 'package:aku_new_community/gen/assets.gen.dart'; import 'package:aku_new_community/models/integral/add_integral_config_model.dart'; import 'package:aku_new_community/models/integral/clocked_record_list_model.dart'; +import 'package:aku_new_community/models/integral/integral_info_model.dart'; import 'package:aku_new_community/pages/personal/clock_in/clock_success_dialog.dart'; +import 'package:aku_new_community/utils/network/net_util.dart'; import 'package:aku_new_community/widget/bee_back_button.dart'; import 'package:aku_new_community/widget/others/user_tool.dart'; +import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -22,31 +25,39 @@ class ClockInPage extends StatefulWidget { } class _ClockInPageState extends State { - List _configs = [ - AddIntegralConfigModel(addIntegral: 1, hasClocked: false), - AddIntegralConfigModel(addIntegral: 2, hasClocked: false), - AddIntegralConfigModel(addIntegral: 3, hasClocked: false), - AddIntegralConfigModel(addIntegral: 5, hasClocked: false), - AddIntegralConfigModel(addIntegral: 8, hasClocked: false), - AddIntegralConfigModel(addIntegral: 15, hasClocked: false), - AddIntegralConfigModel(addIntegral: 50, hasClocked: false), - ]; + IntegralInfoModel? _integralModel; + List _configs = []; - List _records = [ - ClockedRecordListModel(day: 1, date: '2021-12-29 13:29:24', addIntegral: 1), - ClockedRecordListModel(day: 2, date: '2021-12-28 13:29:24', addIntegral: 2), - ClockedRecordListModel(day: 3, date: '2021-12-27 13:29:24', addIntegral: 3), - ClockedRecordListModel(day: 4, date: '2021-12-26 13:29:24', addIntegral: 5), - ClockedRecordListModel(day: 5, date: '2021-12-25 13:29:24', addIntegral: 8), - ClockedRecordListModel( - day: 6, date: '2021-12-24 13:29:24', addIntegral: 15), - ClockedRecordListModel( - day: 7, date: '2021-12-23 13:29:24', addIntegral: 50), - ClockedRecordListModel(day: 1, date: '2021-12-22 13:29:24', addIntegral: 1), - ]; + List _records = []; bool _openRemind = false; //演示用,之后删除 - bool get hasClocked => _configs[0].hasClocked; + bool get hasClocked => _integralModel?.isSign ?? false; + + Future getData() async { + var base = await NetUtil().get(API.intergral.info); + if (base.status ?? false) { + _integralModel = IntegralInfoModel.fromJson(base.data); + } else { + BotToast.showText(text: base.message!); + } + } + + @override + void initState() { + getData().then((value) { + if (_integralModel != null) { + _records = _integralModel!.signRecordList; + _configs = _integralModel!.rewardSetting + .split(',') + .mapIndexed((currentValue, index) => AddIntegralConfigModel( + addIntegral: int.parse(currentValue), + hasClocked: index < _integralModel!.serialNumber)) + .toList(); + setState(() {}); + } + }); + super.initState(); + } @override Widget build(BuildContext context) { @@ -94,7 +105,10 @@ class _ClockInPageState extends State { Text.rich( TextSpan(children: [ '已连续签到 '.textSpan.make(), - '1'.textSpan.size(40.sp).make(), + '${_integralModel?.serialNumber ?? 0}' + .textSpan + .size(40.sp) + .make(), ' 天'.textSpan.make(), ]), style: TextStyle( @@ -104,7 +118,9 @@ class _ClockInPageState extends State { ), 4.hb, Text( - '明日签到即可获得2积分', + '明日签到即可获得' + '${_configs.isNotEmpty ? _configs[_integralModel!.serialNumber != 7 ? _integralModel!.serialNumber : 0].addIntegral : 0}' + '积分', style: TextStyle( fontSize: 24.sp, color: Colors.black.withOpacity(0.45), @@ -132,7 +148,11 @@ class _ClockInPageState extends State { children: [ Assets.icons.intergral.image(width: 36.w, height: 36.w), 12.wb, - '123'.text.size(32.sp).white.make(), + '${_integralModel?.points ?? 0}' + .text + .size(32.sp) + .white + .make(), ], ), ), @@ -175,9 +195,9 @@ class _ClockInPageState extends State { width: 72.w, height: 40.w, child: Switch( - value: _openRemind, + value: UserTool.userProvider.userConfig.clockRemind, onChanged: (value) { - _openRemind = value; + UserTool.userProvider.changeClockRemind(); setState(() {}); }, )), @@ -201,12 +221,15 @@ class _ClockInPageState extends State { onPressed: hasClocked ? null : () async { - await Get.dialog(ClockSuccessDialog( - todayIntegral: _configs[0].addIntegral, - tomorrowIntegral: _configs[1].addIntegral)); - _configs[0] = AddIntegralConfigModel( - addIntegral: _configs[0].addIntegral, hasClocked: true); - setState(() {}); + var base = await NetUtil().get(API.intergral.sign); + if (base.status ?? false) { + await Get.dialog(ClockSuccessDialog( + todayIntegral: 1, tomorrowIntegral: 2)); + await UserTool.userProvider.changeTodayClocked(); + await getData(); + } else { + BotToast.showText(text: base.message!); + } }, elevation: 0, color: kPrimaryColor, @@ -246,9 +269,9 @@ class _ClockInPageState extends State { children: [ ..._records .mapIndexed((currentValue, index) => recordListTile( - currentValue.day, - currentValue.date, - currentValue.addIntegral)) + currentValue.serialNumber, + currentValue.signDate, + currentValue.addNums)) .toList(), Container( width: double.infinity, diff --git a/lib/pages/personal/personal_page.dart b/lib/pages/personal/personal_page.dart index c7160ed8..abe94ee2 100644 --- a/lib/pages/personal/personal_page.dart +++ b/lib/pages/personal/personal_page.dart @@ -12,7 +12,9 @@ import 'package:aku_new_community/ui/profile/car/car_manage_page.dart'; import 'package:aku_new_community/ui/profile/car_parking/car_parking_page.dart'; import 'package:aku_new_community/ui/profile/house/house_owners_page.dart'; import 'package:aku_new_community/utils/headers.dart'; +import 'package:aku_new_community/utils/network/net_util.dart'; import 'package:aku_new_community/widget/others/user_tool.dart'; +import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; @@ -333,10 +335,16 @@ class _PersonalIndexState extends State Spacer(), MaterialButton( onPressed: () async { - await Get.dialog(ClockSuccessDialog( - todayIntegral: 1, tomorrowIntegral: 2)); - await UserTool.userProvider - .changeTodayClocked(); + var base = + await NetUtil().get(API.intergral.sign); + if (base.status ?? false) { + await Get.dialog(ClockSuccessDialog( + todayIntegral: 1, tomorrowIntegral: 2)); + await UserTool.userProvider + .changeTodayClocked(); + } else { + BotToast.showText(text: base.message!); + } }, elevation: 0, color: Colors.white,