From 23ccd71b06068800af945279cef350961ddcc648 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Thu, 30 May 2024 14:07:09 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pubspec.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 125651e6..ec8ee1c1 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -61,8 +61,9 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # 1.0.51+2024052801:xhj 线上环境,提审 # 1.0.53+2024052803:xhj 线上环境,提审 sky 线上环境提审 # 1.0.53+2024052804:xhj 线上环境,提审 修改鑫锁名字为星星锁 +# 1.0.54+2024053001:xhj 线上环境,对外发布,提交测试 -version: 1.0.53+2024052804 +version: 1.0.54+2024053001 environment: sdk: '>=2.12.0 <3.0.0' From 26792c6c7f52d6a52cae999b63aae11b39939ea0 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Thu, 30 May 2024 15:02:15 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=E6=B6=88=E6=81=AF=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=A8=E9=83=A8=E6=B8=85=E9=99=A4=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes ios/Runner.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- .../messageList/messageList_xhj_page.dart | 50 ++++++++---------- 4 files changed, 25 insertions(+), 29 deletions(-) diff --git a/.DS_Store b/.DS_Store index db65cd73b909a39e65bd567382b0c9d0fe9a5215..f7e55907e64996cff1c8d6490166ef5cbccae3b2 100755 GIT binary patch delta 1181 zcmeIxPe{{Y9LMqR`)TT?ziQLXYB*ha5Y1#YnMNIUu*?!2H8m+xmpiO<{+Sq5WSW-< zsr*qyWDp%HEQqY=A9V;TgSu3d5k(Op{XccdLqD8BMg$Rb>bZQM@8|S9-`Df>26_W$ zb4}jkq1L8Iti$7ZikfChNK7(Yl2f$lS*0sV%T{W2*3`~OcuQq#N2Dbhs}8rvjH-`k zwCQOMo6Rm$7y1iRL?3hvbbZgW{dw_iFxt=@&h~raokh&zl0{M?lD5MjC0Rg*MuWv7H_4q?_6v_Rz;( z_OYMC9ASW?oZu9LoaPJ{xx{6zaFbzfbB7V`@_=W&h3pA;%t*_A`3t1RVK q^HjF-sUqc9WvW8e`~+D$6;iGJu^&?IuO@!?uK#No-{&7`D3NdZmGP(m delta 1087 zcmd_oNoZ416b9h)-@FXZYst&-5}P(@7Lrhm60Hrbi&CmmZHo;yZB?+E*a)E^jY+9g z(K=KYPGGM%pdz>^4n>6;r-d64Er<(=qQRjnK@_BdE>zS<(xr$Ccizp<{qN$!cg{$7 zBz&z}5+in1=4DmQD^|9&wh4=>j=KBp*1<%4YkPVi(Vxn8#WPtgW${r;fQxZ;zQU^% zz0xb2@^i{v6+S-~?^I8KD>@}=l8aq!po%M)xzsP=T#=NlTzYG8b1tUzs;;rmE26ea z!40z5X>$w*sfk*shtf1e2kAJSqwAET8#GBz=s8W%2b!iI(7^;Jyzn7_5E{^krC5gL zScNcFqXQAF#|A_Z!zLt=LK<6;!FKGxFm_=#4&V?D;|NaR6i(v|&SDG~a1od6m_QCU zaSOL`2lwy@Pf-vS=iG^c;h1U+h3W#{MKvO2Y!talho?4{PA0Mg!C(PQC+Q7FlRS&_ zGFPOtt9#AbKSCaLt2%Dy;=Ls(UbxF8?s0iV*y<3oJ9?ZjH)N1xkXhoam-d;5C!A4DeGx|0046+!)9_+@QlM z)U?mzGRAQQSHrlA2Y84{yo3L{ diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 82c40d25..238f4a2e 100755 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -608,7 +608,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 2820dca7..7596d007 100755 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ createState() => _MessageListXHJPageState(); } -class _MessageListXHJPageState extends State with TickerProviderStateMixin { +class _MessageListXHJPageState extends State + with TickerProviderStateMixin { final MessageListLogic logic = Get.put(MessageListLogic()); final MessageListState state = Get.find().state; @@ -45,31 +46,7 @@ class _MessageListXHJPageState extends State with TickerProv Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, - appBar: widget.showAppBar - ? TitleAppBar( - barTitle: TranslationLoader.lanKeys!.message!.tr, - haveBack: true, - actionsList: [ - TextButton( - child: Text( - '清空'.tr, - style: TextStyle(color: Colors.white, fontSize: 24.sp), - ), - onPressed: () async { - final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); - if (isDemoMode == false) { - ShowTipView().showIosTipWithContentDialog('是否清空?'.tr, - () async { - logic.deletAllMessageDataRequest(); - }); - } else { - logic.showToast('演示模式'.tr); - } - }, - ), - ], - backgroundColor: AppColors.mainColor) - : null, + appBar: null, body: Column( children: [ SizedBox( @@ -135,7 +112,7 @@ class _MessageListXHJPageState extends State with TickerProv final MessageItemEntity messageItemEntity = state.itemDataList[index]; return Slidable( - key: ValueKey(messageItemEntity.id), + key: ValueKey(messageItemEntity.id), endActionPane: ActionPane( extentRatio: 0.2, motion: const ScrollMotion(), @@ -169,6 +146,25 @@ class _MessageListXHJPageState extends State with TickerProv ), ], ), + floatingActionButton: FloatingActionButton( + backgroundColor: AppColors.mainColor, + child: Icon( + Icons.delete_sweep, + color: AppColors.blackColor, + ), + onPressed: () async { + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + if (isDemoMode == false) { + ShowTipView().showIosTipWithContentDialog('是否清空?'.tr, () async { + logic.deletAllMessageDataRequest(); + }); + } else { + logic.showToast('演示模式'.tr); + } + }, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(100.r))), + ), ); } From dafb40954a0ba972852aced1d39a19e579aa8450 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Thu, 30 May 2024 15:31:14 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E6=97=A0?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E4=B8=8B=E7=82=B9=E5=87=BB=E5=BC=80=E9=94=81?= =?UTF-8?q?=E4=BC=9A=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lockMain/xhj/lockMain_xhj_page.dart | 10 +- lib/network/api_provider.dart | 95 ++++++++++--------- lib/network/api_provider_base.dart | 8 +- 3 files changed, 59 insertions(+), 54 deletions(-) diff --git a/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart b/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart index c616b2f9..c9c5a493 100755 --- a/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart +++ b/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart @@ -45,7 +45,7 @@ class _StarLockMainXHJPageState extends State return Scaffold( backgroundColor: Colors.white, body: Stack( - children: [ + children: [ pageView( widget: StarLockMainPage( showAppBar: false, @@ -102,7 +102,7 @@ class _StarLockMainXHJPageState extends State child: SafeArea( top: false, child: Row( - children: [ + children: [ navigationBarItem(Icons.key, TranslationLoader.lanKeys!.device!.tr, logic, 0, () { logic.setIndex(0); @@ -142,8 +142,8 @@ class _StarLockMainXHJPageState extends State //底部按钮 Widget navigationBarItem(IconData icon, String text, LockMainXHJLogic logic, - int index, var onTop) { - bool check = logic.state.index == index; + int index, GestureTapCallback? onTop) { + final bool check = logic.state.index == index; return Expanded( child: GestureDetector( onTap: onTop, @@ -151,7 +151,7 @@ class _StarLockMainXHJPageState extends State color: Colors.transparent, child: Column( mainAxisSize: MainAxisSize.min, - children: [ + children: [ Padding( padding: EdgeInsets.only(bottom: 8.h), child: Icon( diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 49d0a0aa..a162ddf7 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -11,7 +11,7 @@ class ApiProvider extends BaseProvider { jsonEncode({ 'countryCode': countryCode, 'account': account, - "channel": channel, + 'channel': channel, 'codeType': codeType, 'xWidth': xWidth, })); @@ -28,10 +28,10 @@ class ApiProvider extends BaseProvider { jsonEncode({ 'receiverType': receiverType, 'countryCode': countryCode, - "account": account, + 'account': account, 'password': password, 'verificationCode': verificationCode, - 'platId': "2", + 'platId': '2', })); // post( @@ -71,10 +71,10 @@ class ApiProvider extends BaseProvider { jsonEncode({ 'loginType': loginType, 'password': password, - "platId": "2", - 'uniqueid': "477E6814-289D-402A-9F49-F89A8BD05D63", + 'platId': '2', + 'uniqueid': '477E6814-289D-402A-9F49-F89A8BD05D63', 'countryCode': countryCode, - "username": username + 'username': username })); Future resetPassword( @@ -89,9 +89,9 @@ class ApiProvider extends BaseProvider { jsonEncode({ 'countryCode': countryCode, 'account': account, - "date": date, + 'date': date, 'newPassword': newPassword, - "uniqueid": uniqueid, + 'uniqueid': uniqueid, 'verificationCode': verificationCode, })); @@ -114,7 +114,7 @@ class ApiProvider extends BaseProvider { jsonEncode({ 'endDate': endDate, 'keyId': keyId, - "keyStatus": keyStatus, + 'keyStatus': keyStatus, 'lockId': lockId, 'pageNo': pageNo, 'pageSize': pageSize, @@ -178,13 +178,15 @@ class ApiProvider extends BaseProvider { bool isUnShowLoading, ) => post( - uploadElectricQuantityURL.toUrl, - jsonEncode({ - 'electricQuantity': electricQuantity, - 'electricQuantityStandby': electricQuantityStandby, - 'lockId': lockId, - }), - isUnShowLoading: isUnShowLoading); + uploadElectricQuantityURL.toUrl, + jsonEncode({ + 'electricQuantity': electricQuantity, + 'electricQuantityStandby': electricQuantityStandby, + 'lockId': lockId, + }), + isUnShowLoading: isUnShowLoading, + isShowErrMsg: false, + ); Future modifyKeyName( String keyId, @@ -300,9 +302,9 @@ class ApiProvider extends BaseProvider { jsonEncode({ 'lockId': lockId, 'lockEventType': lockEventType, - "pageNo": pageNo, + 'pageNo': pageNo, 'pageSize': pageSize, - "startDate": startDate, + 'startDate': startDate, 'endDate': endDate, })); @@ -317,11 +319,13 @@ class ApiProvider extends BaseProvider { // 查询锁记录最后时间 Future getLockRecordLastUploadDataTime(String lockId) => post( - getLockRecordLastUploadDataTimeURL.toUrl, - jsonEncode({ - 'lockId': lockId, - }), - isUnShowLoading: true); + getLockRecordLastUploadDataTimeURL.toUrl, + jsonEncode({ + 'lockId': lockId, + }), + isUnShowLoading: true, + isShowErrMsg: false, + ); // 获取手机联网token Future getLockNetToken(String lockId) => post( @@ -354,7 +358,7 @@ class ApiProvider extends BaseProvider { post( bindingBlueAdminURL.toUrl, jsonEncode({ - "lockAlias": lockAlias, + 'lockAlias': lockAlias, 'position': position, 'bluetooth': bluetooth, 'lockInfo': lockInfo, @@ -370,7 +374,7 @@ class ApiProvider extends BaseProvider { getLockInfoURL.toUrl, jsonEncode({ 'lastUpdateDate': lastUpdateDate, - "pageNo": pageNo, + 'pageNo': pageNo, })); // 获取锁信息列表 @@ -379,7 +383,7 @@ class ApiProvider extends BaseProvider { post( getStarLockInfoURL.toUrl, jsonEncode({ - "pageNo": pageNo, + 'pageNo': pageNo, 'pageSize': pageSize, }), isUnShowLoading: isUnShowLoading); @@ -529,8 +533,8 @@ class ApiProvider extends BaseProvider { 'isCoerced': isCoerced, 'hoursStart': hoursStart, 'hoursEnd': hoursEnd, - "keyboardPwdType": keyboardPwdType, - "pwdRight": pwdRight + 'keyboardPwdType': keyboardPwdType, + 'pwdRight': pwdRight })); Future clearOperationRecord(String lockId) => @@ -1283,11 +1287,11 @@ class ApiProvider extends BaseProvider { 'startTime': startTime, 'endTime': endTime, 'faceType': faceType, - "weekDay": weekDay, + 'weekDay': weekDay, 'faceName': faceName, 'addType': addType, - "isCoerced": isCoerced, - "faceRight": faceRight + 'isCoerced': isCoerced, + 'faceRight': faceRight })); // 删除人脸 @@ -1631,7 +1635,7 @@ class ApiProvider extends BaseProvider { jsonEncode({ 'countryCode': countryCode, 'account': account, - "channel": channel, + 'channel': channel, 'codeType': codeType, 'xWidth': xWidth, })); @@ -1679,9 +1683,9 @@ class ApiProvider extends BaseProvider { post( changePasswordURL.toUrl, jsonEncode({ - "date": date, + 'date': date, 'newPassword': newPassword, - "oldPassword": oldPassword, + 'oldPassword': oldPassword, })); //获取安全信息列表 @@ -1689,7 +1693,7 @@ class ApiProvider extends BaseProvider { post( getQuestionListURL.toUrl, jsonEncode({ - "operatorUid": operatorUid, + 'operatorUid': operatorUid, 'countryCode': countryCode, })); @@ -1700,12 +1704,12 @@ class ApiProvider extends BaseProvider { //设置安全信息 Future setSafeAnswer(List questionAndAnswerList) => post( setSafeAnswerURL.toUrl, - jsonEncode({"questionAndAnswerList": questionAndAnswerList})); + jsonEncode({'questionAndAnswerList': questionAndAnswerList})); //修改安全信息 Future updateSafeAnswer(List questionAndAnswerList) => post( updateSafeAnswerURL.toUrl, - jsonEncode({"questionAndAnswerList": questionAndAnswerList})); + jsonEncode({'questionAndAnswerList': questionAndAnswerList})); // 获取上传文件的upToken 再调用updateUserInfo Future getUpHeadToken( @@ -1716,10 +1720,10 @@ class ApiProvider extends BaseProvider { post( getUpTokenURL.toUrl, jsonEncode({ - "module": "avatar", - "userId": userId, - "filename": filename, - "size": size, + 'module': 'avatar', + 'userId': userId, + 'filename': filename, + 'size': size, })); // 文件上传 @@ -1731,17 +1735,17 @@ class ApiProvider extends BaseProvider { //获取解绑手机号Token Future unbindPhoneToken(String verificationCode) => post( unbindPhoneTokenURL.toUrl, - jsonEncode({"verificationCode": verificationCode})); + jsonEncode({'verificationCode': verificationCode})); //获取解绑邮箱Token Future unbindEmailToken(String verificationCode) => post( unbindEmailTokenURL.toUrl, - jsonEncode({"verificationCode": verificationCode})); + jsonEncode({'verificationCode': verificationCode})); //推送绑定DeviceID Future pushBindAppId(String deviceId, int deviceType) => post( pushBindAppIdURL.toUrl, - jsonEncode({"deviceId": deviceId, "deviceType": deviceType})); + jsonEncode({'deviceId': deviceId, 'deviceType': deviceType})); // 消息列表 Future messageListLoadData(String pageNo, String pageSize) => post( @@ -2106,8 +2110,7 @@ class ApiProvider extends BaseProvider { 'recordType': recordType, 'records': records }), - isUnShowLoading: isUnShowLoading - ); + isUnShowLoading: isUnShowLoading); // 获取短信或者邮箱模板 Future> getNoticeTemplate( diff --git a/lib/network/api_provider_base.dart b/lib/network/api_provider_base.dart index 00f2c2ae..b67ae870 100755 --- a/lib/network/api_provider_base.dart +++ b/lib/network/api_provider_base.dart @@ -34,9 +34,10 @@ class BaseProvider extends GetConnect with Api { Progress? uploadProgress, bool? isUnShowLoading = false, // 是否显示loading bool? isUserBaseUrl = true, // 文件上传不使用baseUrl + bool? isShowErrMsg = true, // 文件上传不使用baseUrl }) async { AppLog.log('post: url:$url body:$body'); - if (isUnShowLoading == false){ + if (isUnShowLoading == false) { EasyLoading.show(); } if (isUserBaseUrl == false) { @@ -54,8 +55,9 @@ class BaseProvider extends GetConnect with Api { if (EasyLoading.isShow) await EasyLoading.dismiss(animation: true); // EasyLoading.showToast("Network Error!", duration: 2000.milliseconds); - if (res.statusCode == null) { - EasyLoading.showToast('网络访问失败,请检查网络是否正常'.tr, duration: 2000.milliseconds); + if (res.statusCode == null && isShowErrMsg!) { + EasyLoading.showToast('网络访问失败,请检查网络是否正常'.tr, + duration: 2000.milliseconds); // EasyLoading.showToast("Network Error!", duration: 2000.milliseconds); } var rs = { From 8d149ef4b375dfaa6b686791b1f58abf793ef7b9 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Thu, 30 May 2024 17:43:09 +0800 Subject: [PATCH 4/7] =?UTF-8?q?feat:=E4=B8=BA=E4=BA=86=E4=B8=8A=E6=9E=B6?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=AE=A2=E6=9C=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/login/login/app_get_version.dart | 40 +++++++++++++++++++ lib/login/login/starLock_login_page.dart | 41 ++++++++++++-------- lib/login/login/starLock_login_xhj_page.dart | 29 ++++++++++---- lib/mine/mineSet/mineSet/mineSet_page.dart | 7 ++++ lib/network/api.dart | 1 + lib/network/api_provider.dart | 5 +++ lib/network/api_repository.dart | 8 ++++ lib/tools/appFirstEnterHandle.dart | 5 +++ lib/tools/customer_tool.dart | 18 +++++++++ 9 files changed, 131 insertions(+), 23 deletions(-) create mode 100644 lib/login/login/app_get_version.dart create mode 100644 lib/tools/customer_tool.dart diff --git a/lib/login/login/app_get_version.dart b/lib/login/login/app_get_version.dart new file mode 100644 index 00000000..f224088b --- /dev/null +++ b/lib/login/login/app_get_version.dart @@ -0,0 +1,40 @@ +class GetAppInfo { + GetAppInfo({this.errorCode, this.description, this.errorMsg, this.data}); + + GetAppInfo.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + errorMsg = json['errorMsg']; + if (json['data'] is Map) { + data = Data.fromJson(json['data']); + } + } + + int? errorCode; + String? description; + String? errorMsg; + Data? data; + + Map toJson() { + final Map data = {}; + data['errorCode'] = errorCode; + data['description'] = description; + data['errorMsg'] = errorMsg; + data['data'] = this.data; + return data; + } +} + +class Data { + Data.fromJson(Map json) { + wechatServiceUrl = json['wechat_service_url']; + } + + String? wechatServiceUrl; + + Map toJson() { + final Map data = {}; + data['wechat_service_url'] = wechatServiceUrl; + return data; + } +} diff --git a/lib/login/login/starLock_login_page.dart b/lib/login/login/starLock_login_page.dart index 136a3a7c..a43eb935 100755 --- a/lib/login/login/starLock_login_page.dart +++ b/lib/login/login/starLock_login_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/flavors.dart'; +import 'package:star_lock/tools/customer_tool.dart'; import '../../appRouters.dart'; import '../../app_settings/app_colors.dart'; @@ -35,6 +36,12 @@ class _StarLockLoginPageState extends State { haveBack: false, backgroundColor: AppColors.mainColor, actionsList: [ + IconButton( + onPressed: CustomerTool.openCustomerService, + icon: Icon( + Icons.support_agent, + color: AppColors.mainColor, + )), TextButton( child: Text( TranslationLoader.lanKeys!.register!.tr, @@ -239,22 +246,24 @@ class _StarLockLoginPageState extends State { child: SizedBox( width: 10.sp, )), - if (F.isLite) Container() else GestureDetector( - child: SizedBox( - // width: 150.w, - height: 50.h, - // color: Colors.red, - child: Center( - child: Text('演示模式'.tr, - style: TextStyle( - fontSize: 22.sp, - color: AppColors.mainColor)), - ), - ), - onTap: () { - Get.toNamed(Routers.demoModeLockDetailPage); - }, - ) + if (F.isLite) + Container() + else + GestureDetector( + child: SizedBox( + // width: 150.w, + height: 50.h, + // color: Colors.red, + child: Center( + child: Text('演示模式'.tr, + style: TextStyle( + fontSize: 22.sp, color: AppColors.mainColor)), + ), + ), + onTap: () { + Get.toNamed(Routers.demoModeLockDetailPage); + }, + ) ], ), ], diff --git a/lib/login/login/starLock_login_xhj_page.dart b/lib/login/login/starLock_login_xhj_page.dart index 22c16a8d..17cc4f84 100755 --- a/lib/login/login/starLock_login_xhj_page.dart +++ b/lib/login/login/starLock_login_xhj_page.dart @@ -1,9 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/login/login/starLock_login_state.dart'; +import 'package:star_lock/tools/customer_tool.dart'; +import 'package:url_launcher/url_launcher.dart'; import '../../appRouters.dart'; import '../../app_settings/app_colors.dart'; @@ -33,7 +36,7 @@ class _StarLockLoginPageState extends State { backgroundColor: const Color(0xFFFFFFFF), body: ListView( padding: EdgeInsets.only( - top: 120.h, + top: 110.h, ), children: [ Padding( @@ -41,12 +44,24 @@ class _StarLockLoginPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - '${"欢迎使用".tr}${F.title}', - style: TextStyle( - color: AppColors.darkGrayTextColor, - fontSize: 48.sp, - ), + Row( + children: [ + Expanded( + child: Text( + '${"欢迎使用".tr}${F.title}', + style: TextStyle( + color: AppColors.darkGrayTextColor, + fontSize: 48.sp, + ), + ), + ), + IconButton( + onPressed: CustomerTool.openCustomerService, + icon: Icon( + Icons.support_agent, + color: AppColors.mainColor, + )), + ], ), SizedBox(height: 30.h), GestureDetector( diff --git a/lib/mine/mineSet/mineSet/mineSet_page.dart b/lib/mine/mineSet/mineSet/mineSet_page.dart index 28440b3f..55718339 100755 --- a/lib/mine/mineSet/mineSet/mineSet_page.dart +++ b/lib/mine/mineSet/mineSet/mineSet_page.dart @@ -10,6 +10,7 @@ import 'package:star_lock/flavors.dart'; import 'package:star_lock/mine/mineSet/mineSet/mineSet_logic.dart'; import 'package:star_lock/mine/mineSet/mineSet/mineSet_state.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart'; +import 'package:star_lock/tools/customer_tool.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; import '../../../tools/commonItem.dart'; @@ -352,6 +353,12 @@ class _MineSetPageState extends State with WidgetsBindingObserver { action: () { logic.showToast('功能暂未开放'.tr); }), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.supportStaff!.tr, + isHaveLine: widget.showAbout, + isHaveDirection: true, + action: CustomerTool.openCustomerService, + ), if (widget.showAbout) CommonItem( leftTitel: TranslationLoader.lanKeys!.about!.tr, diff --git a/lib/network/api.dart b/lib/network/api.dart index 70fe404b..7901353e 100755 --- a/lib/network/api.dart +++ b/lib/network/api.dart @@ -239,4 +239,5 @@ abstract class Api { final String lockDataUploadUrl = '/lockRecords/lockDataUpload'; // 锁数据上传 final String getNoticeTemplateURL = '/key/getNoticeTemplate'; //获取短信或者邮箱模板 + final String appGetAppInfoURL = '/app/getAppInfo'; //获取APP基本信息 } diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index a162ddf7..21bd6b91 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -2122,6 +2122,11 @@ class ApiProvider extends BaseProvider { 'keyId': keyId, 'channelType': channelType, })); + + // 获取App基本信息 + Future> getAppInfo() => + post(appGetAppInfoURL.toUrl, jsonEncode({}), + isShowErrMsg: false); } extension ExtensionString on String { diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index dc880523..20f5f7ca 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -1,5 +1,6 @@ import 'package:get/get.dart'; import 'package:star_lock/blue/entity/lock_user_no_list_entity.dart'; +import 'package:star_lock/login/login/app_get_version.dart'; import 'package:star_lock/login/selectCountryRegion/common/countryRegionEntity.dart'; import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/notice_template_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; @@ -2150,4 +2151,11 @@ class ApiRepository { await apiProvider.getNoticeTemplate(lockId, keyId, channelType); return NoticeTemplateEntity.fromJson(res.body); } + + // 电子钥匙获取短信模板 + Future getAppInfo() async { + final Response res = + await apiProvider.getAppInfo(); + return GetAppInfo.fromJson(res.body); + } } diff --git a/lib/tools/appFirstEnterHandle.dart b/lib/tools/appFirstEnterHandle.dart index 4e8d2ba8..3b51b295 100755 --- a/lib/tools/appFirstEnterHandle.dart +++ b/lib/tools/appFirstEnterHandle.dart @@ -8,6 +8,9 @@ import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/flavors.dart'; +import 'package:star_lock/login/login/app_get_version.dart'; +import 'package:star_lock/network/api_repository.dart'; +import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/storage.dart'; import '../versionUndate/versionUndateTool.dart'; @@ -41,6 +44,8 @@ class AppFirstEnterHandle { default: break; } + final GetAppInfo entity = await ApiRepository.to.getAppInfo(); + CustomerTool.init(entity.data?.wechatServiceUrl?? ''); } //隐私协议弹窗 diff --git a/lib/tools/customer_tool.dart b/lib/tools/customer_tool.dart new file mode 100644 index 00000000..37caaecb --- /dev/null +++ b/lib/tools/customer_tool.dart @@ -0,0 +1,18 @@ +import 'package:url_launcher/url_launcher.dart'; + +//客服工具类 +class CustomerTool { + static String _customerServiceUrl = ''; + + //初始化 + static Future init(String customerServiceUrl) async { + _customerServiceUrl = customerServiceUrl; + } + + //打开客服 + static void openCustomerService() { + if (_customerServiceUrl.isNotEmpty) { + launchUrl(Uri.parse(_customerServiceUrl)); + } + } +} From c0faa26c4443c41546b62d8211246ca653ba4a43 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Thu, 30 May 2024 17:55:23 +0800 Subject: [PATCH 5/7] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/lan/lan_en.json | 4 ++-- images/lan/lan_keys.json | 4 ++-- images/lan/lan_zh.json | 4 ++-- lib/main/lockDetail/card/addCardType/addCardType_page.dart | 2 +- .../addFingerprintSelectType/addFingerprintType_page.dart | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/images/lan/lan_en.json b/images/lan/lan_en.json index 904aa204..d2f6f144 100755 --- a/images/lan/lan_en.json +++ b/images/lan/lan_en.json @@ -646,9 +646,9 @@ "消息详情": "Message details", "创建时间": "Creation time", "管理员详情": "Administrator details", - "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息回推送给管理员,该功能需要锁联网。": "When being coerced to forcibly unlock, using a coercion card will trigger an alarm, and the alarm information will be pushed to the administrator. This function requires the lock to be networked.", + "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "When being coerced to forcibly unlock, using a coercion card will trigger an alarm, and the alarm information will be pushed to the administrator. This function requires the lock to be networked.", "请不要将胁迫卡用于日常开锁": "Please do not use coercion cards for daily unlocking", - "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息回推送给管理员,该功能需要锁联网。": "When being coerced to forcibly unlock, using coercion fingerprints will trigger an alarm, and the alarm information will be pushed to the administrator. This function requires the lock to be networked.", + "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "When being coerced to forcibly unlock, using coercion fingerprints will trigger an alarm, and the alarm information will be pushed to the administrator. This function requires the lock to be networked.", "请不要将胁迫指纹用于日常开锁": "Please do not use coercion fingerprints for daily unlocking", "创建公司": "Create company", "公司名称不能超过30个字符": "Company name cannot exceed 30 characters", diff --git a/images/lan/lan_keys.json b/images/lan/lan_keys.json index 9999cb3f..d293e3b9 100755 --- a/images/lan/lan_keys.json +++ b/images/lan/lan_keys.json @@ -671,9 +671,9 @@ "消息详情": "消息详情", "创建时间": "创建时间", "管理员详情": "管理员详情", - "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息回推送给管理员,该功能需要锁联网。": "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息回推送给管理员,该功能需要锁联网。", + "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。", "请不要将胁迫卡用于日常开锁": "请不要将胁迫卡用于日常开锁", - "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息回推送给管理员,该功能需要锁联网。": "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息回推送给管理员,该功能需要锁联网。", + "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。", "请不要将胁迫指纹用于日常开锁": "请不要将胁迫指纹用于日常开锁", "创建公司": "创建公司", "公司名称不能超过30个字符": "公司名称不能超过30个字符", diff --git a/images/lan/lan_zh.json b/images/lan/lan_zh.json index ed311f35..5e3192e1 100755 --- a/images/lan/lan_zh.json +++ b/images/lan/lan_zh.json @@ -646,9 +646,9 @@ "消息详情": "消息详情", "创建时间": "创建时间", "管理员详情": "管理员详情", - "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息回推送给管理员,该功能需要锁联网。": "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息回推送给管理员,该功能需要锁联网。", + "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。", "请不要将胁迫卡用于日常开锁": "请不要将胁迫卡用于日常开锁", - "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息回推送给管理员,该功能需要锁联网。": "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息回推送给管理员,该功能需要锁联网。", + "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。", "请不要将胁迫指纹用于日常开锁": "请不要将胁迫指纹用于日常开锁", "创建公司": "创建公司", "公司名称不能超过30个字符": "公司名称不能超过30个字符", diff --git a/lib/main/lockDetail/card/addCardType/addCardType_page.dart b/lib/main/lockDetail/card/addCardType/addCardType_page.dart index aa0ac540..d557aad8 100755 --- a/lib/main/lockDetail/card/addCardType/addCardType_page.dart +++ b/lib/main/lockDetail/card/addCardType/addCardType_page.dart @@ -281,7 +281,7 @@ class _AddCardPageState extends State color: Colors.white, padding: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 20.h), child: Text( - "${"当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息回推送给管理员,该功能需要锁联网。".tr}\n${"请不要将胁迫卡用于日常开锁".tr}", + "${"当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。".tr}\n${"请不要将胁迫卡用于日常开锁".tr}", style: TextStyle( fontSize: 22.sp, color: AppColors.darkGrayTextColor), )), diff --git a/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_page.dart b/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_page.dart index f0c61058..3f771e6f 100755 --- a/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_page.dart +++ b/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_page.dart @@ -271,7 +271,7 @@ class _AddFingerprintTypePageState extends State with Si color: Colors.white, padding: EdgeInsets.only(left:20.w, right: 20.w, bottom: 20.h), child: Text( - "${"当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息回推送给管理员,该功能需要锁联网。".tr}\n${"请不要将胁迫指纹用于日常开锁".tr}", + "${"当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。".tr}\n${"请不要将胁迫指纹用于日常开锁".tr}", style: TextStyle( fontSize: 22.sp, color: AppColors.darkGrayTextColor), ) From f2e439b3be9e790cbaee343d8ea7f442012ff103 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Thu, 30 May 2024 18:12:15 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=20sky=20=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=AE=A2=E6=9C=8D=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/login/login/starLock_login_page.dart | 4 +-- .../starLockApplication.dart | 9 +++++ lib/tools/appFirstEnterHandle.dart | 34 ++++++++++--------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/lib/login/login/starLock_login_page.dart b/lib/login/login/starLock_login_page.dart index a43eb935..8505350c 100755 --- a/lib/login/login/starLock_login_page.dart +++ b/lib/login/login/starLock_login_page.dart @@ -36,11 +36,11 @@ class _StarLockLoginPageState extends State { haveBack: false, backgroundColor: AppColors.mainColor, actionsList: [ - IconButton( + const IconButton( onPressed: CustomerTool.openCustomerService, icon: Icon( Icons.support_agent, - color: AppColors.mainColor, + color: Colors.white, )), TextButton( child: Text( diff --git a/lib/starLockApplication/starLockApplication.dart b/lib/starLockApplication/starLockApplication.dart index a1757e8a..664d5686 100755 --- a/lib/starLockApplication/starLockApplication.dart +++ b/lib/starLockApplication/starLockApplication.dart @@ -1,10 +1,13 @@ import 'package:flutter/material.dart'; import 'package:star_lock/flavors.dart'; +import 'package:star_lock/login/login/app_get_version.dart'; import 'package:star_lock/login/login/starLock_login_page.dart'; import 'package:star_lock/login/login/starLock_login_xhj_page.dart'; import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart'; import 'package:star_lock/mine/about/debug/debug_tool.dart'; +import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart'; +import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/storage.dart'; import '../main/lockMian/lockMain/lockMain_page.dart'; @@ -41,6 +44,7 @@ class _StarLockApplicationState extends State { } else if (snapshot.hasData) { if (snapshot.data!) { // 如果用户已登录,返回主页面 + getAppInfo(); return F.sw( skyCall: () => StarLockMainPage(), xhjCall: () => const StarLockMainXHJPage()); @@ -76,4 +80,9 @@ class _StarLockApplicationState extends State { AppFirstEnterHandle().getAppFirstEnter(isShowUpdateVersion); } } + + Future getAppInfo() async { + final GetAppInfo entity = await ApiRepository.to.getAppInfo(); + CustomerTool.init(entity.data?.wechatServiceUrl ?? ''); + } } diff --git a/lib/tools/appFirstEnterHandle.dart b/lib/tools/appFirstEnterHandle.dart index 3b51b295..d173714c 100755 --- a/lib/tools/appFirstEnterHandle.dart +++ b/lib/tools/appFirstEnterHandle.dart @@ -16,41 +16,38 @@ import 'package:star_lock/tools/storage.dart'; import '../versionUndate/versionUndateTool.dart'; class AppFirstEnterHandle { - Future getAppFirstEnter(String flagStr) async { - var getFlag = await Storage.getString(flagStr); + Future getAppFirstEnter(String flagStr) async { + final dynamic getFlag = await Storage.getString(flagStr); switch (flagStr) { case isAgreePrivacy: // 隐私协议 - { - if (getFlag != isAgreePrivacy) { - showPrivacyAgreementAlert(); - } + if (getFlag != isAgreePrivacy) { + await showPrivacyAgreementAlert(); } + getAppInfo(); break; case isAgreePosition: // 位置权限 - { - if (getFlag != isAgreePosition) showPositionAlert(); + if (getFlag != isAgreePosition) { + showPositionAlert(); } break; case isAgreeCamera: // 相机权限 - { - if (getFlag != isAgreeCamera) showCameraAlert(); + if (getFlag != isAgreeCamera) { + showCameraAlert(); } break; case isShowUpdateVersion: // 版本更新 - { - if (getFlag != isShowUpdateVersion) VersionUndateTool(); + if (getFlag != isShowUpdateVersion) { + VersionUndateTool(); } break; default: break; } - final GetAppInfo entity = await ApiRepository.to.getAppInfo(); - CustomerTool.init(entity.data?.wechatServiceUrl?? ''); } //隐私协议弹窗 - void showPrivacyAgreementAlert() { - showCupertinoDialog( + Future showPrivacyAgreementAlert() async { + await showCupertinoDialog( context: Get.context!, builder: (context) { return PopScope( @@ -62,6 +59,11 @@ class AppFirstEnterHandle { ); } + Future getAppInfo() async { + final GetAppInfo entity = await ApiRepository.to.getAppInfo(); + CustomerTool.init(entity.data?.wechatServiceUrl ?? ''); + } + //默认布局 Widget _defaultPrivacyAgreementAlert(BuildContext context) { return CupertinoAlertDialog( From e2c5066bec07ce605c44298537dc16fa156b097c Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Thu, 30 May 2024 18:22:31 +0800 Subject: [PATCH 7/7] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1/=E9=82=AE=E4=BB=B6=E8=B4=AD=E4=B9=B0=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E3=80=81=E4=BD=BF=E7=94=A8=E8=AE=B0=E5=BD=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AF=B9=E6=8E=A5=202=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=8F=91=E9=80=81=E7=94=B5=E5=AD=90=E9=92=A5=E5=8C=99=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../authorizedAdmin_logic.dart | 14 ++- .../authorizedAdmin_state.dart | 2 +- .../view/sendElectronicKeyView_logic.dart | 115 +++++++++--------- .../view/sendElectronicKeyView_page.dart | 40 +++--- .../view/sendElectronicKeyView_state.dart | 38 +++--- ...eAddedServicesNoteAndEmailDetail_page.dart | 10 +- .../value_added_services_record_logic.dart | 12 ++ .../value_added_services_record_page.dart | 7 +- lib/network/api_provider.dart | 2 +- lib/network/api_repository.dart | 2 +- 10 files changed, 134 insertions(+), 108 deletions(-) diff --git a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart index 23fb1943..6a42c878 100755 --- a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart +++ b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart @@ -197,7 +197,7 @@ class AuthorizedAdminLogic extends BaseGetXController { required String endTime}) async { final AuthorizedAdminSendEntity entity = await ApiRepository.to .sendElectronicKey( - createUser: state.isCreateUser.value ? '1' : '0', + createUser: state.createUser.value, countryCode: state.countryCode.value, usernameType: '1', endDate: int.parse(endDate), @@ -224,18 +224,20 @@ class AuthorizedAdminLogic extends BaseGetXController { ? state.idCardController.text : ''); if (entity.errorCode!.codeIsSuccessful) { - state.isCreateUser.value = false; + state.createUser.value = 0; state.isSendSuccess.value = true; state.addUserId.value = entity.data!.receiverUser!.id.toString(); keyId = entity.data!.keyId; eventBus.fire(AuthorizedAdminPageRefreshUI()); } else { + //用户未注册 if (entity.errorCode == 425) { - //用户未注册 - state.isCreateUser.value = true; + update(); ShowTipView().showIosTipWithContentDialog( - '${"是否发送授权管理员给未注册账号".tr}\n${state.emailOrPhoneController.text}', - sendElectronicKeyRequest); + '${"是否发送电子钥匙给未注册账号".tr}\n${state.emailOrPhoneController.text}', () { + state.createUser.value = 1; + sendElectronicKeyRequest(); + }); } } } diff --git a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_state.dart b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_state.dart index 36dceadf..2d6591d5 100755 --- a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_state.dart +++ b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_state.dart @@ -29,7 +29,7 @@ class AuthorizedAdminState { RxString countryName = '中国'.obs; RxString countryCode = '86'.obs; RxList weekdaysList = [].obs; - RxBool isCreateUser = false.obs; //用户未注册时传1 已注册传0 + RxInt createUser = 0.obs; //用户未注册时传1 已注册传0 RxInt seletType = 0.obs; String pwdShareStr = '您好,您的授权管理员生成成功'; diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart index f8b18cc5..d5974e16 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:get_storage/get_storage.dart'; import 'package:star_lock/appRouters.dart'; 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/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/network/api_repository.dart'; @@ -16,40 +16,39 @@ import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/tools/storage.dart'; class SendElectronicKeyViewLogic extends BaseGetXController { + SendElectronicKeyViewLogic(this.type); String type; final SendElectronicKeyViewState state = SendElectronicKeyViewState(); - SendElectronicKeyViewLogic(this.type); - @override void onInit() { super.onInit(); Storage.getBool(ifIsDemoModeOrNot) - .then((value) => state.isDemoMode = value ?? false); + .then((bool? value) => state.isDemoMode = value ?? false); } //发送钥匙请求 Future sendElectronicKeyRequest() async { if (state.emailOrPhoneController.text.isEmpty) { - showToast("请输入接收者账号".tr); + showToast('请输入接收者账号'.tr); return; } - var startDate = "0"; - var endDate = "0"; - var startTime = "0"; - var endTime = "0"; + var startDate = '0'; + var endDate = '0'; + var startTime = '0'; + var endTime = '0'; int typeValue; switch (type) { case '0': // 限时 if (state.timeLimitBeginTime.isEmpty) { - showToast("请选择开始时间".tr); + showToast('请选择开始时间'.tr); return; } if (state.timeLimitEndTime.isEmpty) { - showToast("请选择结束时间".tr); + showToast('请选择结束时间'.tr); return; } @@ -58,11 +57,11 @@ class SendElectronicKeyViewLogic extends BaseGetXController { DateTool().dateToTimestamp(state.timeLimitBeginTime, 1).toString(); endDate = DateTool().dateToTimestamp(state.timeLimitEndTime, 1).toString(); - startTime = "0"; - endTime = "0"; + startTime = '0'; + endTime = '0'; if (int.parse(startDate) >= int.parse(endDate)) { - showToast("失效时间要大于生效时间".tr); + showToast('失效时间要大于生效时间'.tr); return; } @@ -76,7 +75,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController { case '3': typeValue = XSConstantMacro.keyTypeLoop; if (state.cycleBeginTime.isEmpty) { - showToast("请选择有效期".tr); + showToast('请选择有效期'.tr); return; } startDate = @@ -96,12 +95,12 @@ class SendElectronicKeyViewLogic extends BaseGetXController { //如果打开了实名认证,需要弹出输入身份证信息框 if (state.isAuthentication.value == true) { if (state.realNameController.text.isEmpty) { - showToast("请输入真实姓名".tr); + showToast('请输入真实姓名'.tr); return; } if (state.idCardController.text.isEmpty) { - showToast("请输入身份证号".tr); + showToast('请输入身份证号'.tr); return; } //弹出身份证信息确认框 @@ -137,37 +136,40 @@ class SendElectronicKeyViewLogic extends BaseGetXController { required int typeValue, required String getKeyType, }) async { - var entity = await ApiRepository.to.sendElectronicKey( - createUser: state.isCreateUser == true ? "1" : "0", - countryCode: state.countryCode, - usernameType: RegularExpression() - .isPhoneNumber(state.emailOrPhoneController.text) == - true - ? '1' - : '2', - endDate: int.parse(endDate), - faceAuthentication: state.isAuthentication.value == true ? '1' : '2', - isCameraEnable: '2', - isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2', - keyNameForAdmin: state.keyNameController.text, - keyRight: '0', - keyType: getKeyType, - lockId: CommonDataManage().currentKeyInfo.lockId.toString(), - operatorUid: '', - receiverUsername: state.emailOrPhoneController.text, - remarks: '', - startDate: int.parse(startDate), - weekDays: state.weekdaysList, - startTime: int.parse(startTime), - endTime: int.parse(endTime), - isOnlyManageSelf: 0, - realName: state.isRequireAuth.value == true - ? state.realNameController.text - : "", - idCardNumber: state.isRequireAuth.value == true - ? state.idCardController.text - : ""); + final AuthorizedAdminSendEntity entity = await ApiRepository.to + .sendElectronicKey( + createUser: state.createUser.value, + countryCode: state.countryCode, + usernameType: RegularExpression() + .isPhoneNumber(state.emailOrPhoneController.text) == + true + ? '1' + : '2', + endDate: int.parse(endDate), + faceAuthentication: + state.isAuthentication.value == true ? '1' : '2', + isCameraEnable: '2', + isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2', + keyNameForAdmin: state.keyNameController.text, + keyRight: '0', + keyType: getKeyType, + lockId: CommonDataManage().currentKeyInfo.lockId.toString(), + operatorUid: '', + receiverUsername: state.emailOrPhoneController.text, + remarks: '', + startDate: int.parse(startDate), + weekDays: state.weekdaysList, + startTime: int.parse(startTime), + endTime: int.parse(endTime), + isOnlyManageSelf: 0, + realName: state.isRequireAuth.value == true + ? state.realNameController.text + : '', + idCardNumber: state.isRequireAuth.value == true + ? state.idCardController.text + : ''); if (entity.errorCode!.codeIsSuccessful) { + state.createUser.value = 0; state.isSendSuccess = true; resetData(); update(); @@ -175,10 +177,10 @@ class SendElectronicKeyViewLogic extends BaseGetXController { } else { if (entity.errorCode == 425) { //用户未注册 - state.isCreateUser = true; update(); ShowTipView().showIosTipWithContentDialog( '${"是否发送电子钥匙给未注册账号".tr}\n${state.emailOrPhoneController.text}', () { + state.createUser.value = 1; sendElectronicKeyRequest(); }); } @@ -231,19 +233,20 @@ class SendElectronicKeyViewLogic extends BaseGetXController { } void resetData() { - state.emailOrPhoneController.text = ""; - state.keyNameController.text = ""; - state.realNameController.text = ""; - state.idCardController.text = ""; + state.emailOrPhoneController.text = ''; + state.keyNameController.text = ''; + state.realNameController.text = ''; + state.idCardController.text = ''; state.timeLimitBeginTime = DateTool().dateToYMDHNString( DateTime.now().millisecondsSinceEpoch.toString()); // 限时开始时间 state.timeLimitEndTime = DateTool().dateToYMDHNString( DateTime.now().millisecondsSinceEpoch.toString()); // 限时结束时间 - state.cycleBeginTime = ""; // 循环开始时间 - state.cycleEndTime = ""; // 循环结束时间 - state.effectiveDateTime = ""; // 生效时间 - state.failureDateTime = ""; // 失效时间 + state.cycleBeginTime = ''; // 循环开始时间 + state.cycleEndTime = ''; // 循环结束时间 + state.effectiveDateTime = ''; // 生效时间 + state.failureDateTime = ''; // 失效时间 state.weekdaysList = []; + state.createUser.value = 0; update(); } } diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart index 1973a050..40473e16 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart @@ -6,6 +6,7 @@ import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/NativeInteractionTool.dart'; @@ -127,7 +128,7 @@ class _SendElectronicKeyViewState extends State TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), ), action: () async { - var result = await Navigator.pushNamed( + final result = await Navigator.pushNamed( context, Routers.selectCountryRegionPage); if (result != null) { result as Map; @@ -158,7 +159,7 @@ class _SendElectronicKeyViewState extends State isHaveLine: true, isHaveDirection: true, action: () { - PDuration selectDate = PDuration.parse( + final PDuration selectDate = PDuration.parse( DateTime.parse(logic.state.timeLimitBeginTime)); Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { @@ -172,7 +173,7 @@ class _SendElectronicKeyViewState extends State rightTitle: logic.state.timeLimitEndTime, isHaveDirection: true, action: () { - PDuration selectDate = PDuration.parse( + final PDuration selectDate = PDuration.parse( DateTime.tryParse(logic.state.timeLimitEndTime)); Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { @@ -194,8 +195,7 @@ class _SendElectronicKeyViewState extends State leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr, rightTitle: '', isTipsImg: true, - isHaveLine: - logic.state.isRequireAuth.value == true ? true : false, + isHaveLine: logic.state.isRequireAuth.value, tipsImgAction: () { ShowTipView().showSureAlertDialog( '人脸实名认证指的是用户在使用手机APP开锁时,需要先进行本人人脸验证,验证通过才能开锁。'.tr); @@ -236,7 +236,7 @@ class _SendElectronicKeyViewState extends State isHaveDirection: true, isHaveLine: true, action: () async { - var result = + final result = await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': logic.state.weekdaysList, 'starDate': logic.state.cycleBeginTime, @@ -254,15 +254,16 @@ class _SendElectronicKeyViewState extends State } }), Visibility( - visible: logic.state.weekdaysList.isNotEmpty ? true : false, + visible: logic.state.weekdaysList.isNotEmpty, child: CommonItem( leftTitel: '有效日'.tr, rightTitle: logic.state.weekdaysList.join(',').toString(), isHaveDirection: true, isHaveLine: true, action: () async { - var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, - arguments: { + final result = await Get.toNamed( + Routers.seletKeyCyclicDatePage, + arguments: { 'validityValue': logic.state.weekdaysList, 'starDate': logic.state.cycleBeginTime, 'endDate': logic.state.cycleEndTime, @@ -287,7 +288,8 @@ class _SendElectronicKeyViewState extends State isHaveDirection: true, isHaveLine: true, action: () async { - var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, + final result = await Get.toNamed( + Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': logic.state.weekdaysList, 'starDate': logic.state.cycleBeginTime, @@ -367,7 +369,7 @@ class _SendElectronicKeyViewState extends State // 发送电子钥匙成功 Widget sendElectronicKeySucceed(SendElectronicKeyViewLogic logic) { return Column( - children: [ + children: [ Container( height: 250.h, width: 1.sw, @@ -428,7 +430,7 @@ class _SendElectronicKeyViewState extends State //标记房间为已入住 isOn:已入住: 1 空闲:2 Future updateRoomCheckIn(SendElectronicKeyViewLogic logic) async { - var entity = await ApiRepository.to.setRoomStatusData( + final LoginEntity entity = await ApiRepository.to.setRoomStatusData( lockId: CommonDataManage().currentKeyInfo.lockId!, roomStatus: 1, ); @@ -526,7 +528,7 @@ class _SendElectronicKeyViewState extends State ? true : false), child: Column( - children: [ + children: [ Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.remoteUnlockingAllowed!.tr, rightTitle: '', @@ -565,7 +567,7 @@ class _SendElectronicKeyViewState extends State ); } - Future _openModalBottomSheet() async { + Future _openModalBottomSheet() async { showModalBottomSheet( context: context, shape: RoundedRectangleBorder( @@ -604,7 +606,7 @@ class _SendElectronicKeyViewState extends State } List initBottomSheetList() { - List widgetList = []; + final List widgetList = []; widgetList.add(buildCenter3('images/icon_wechat.png', '微信好友'.tr, 0)); widgetList.add(buildCenter3('images/icon_message.png', '短信'.tr, 1)); widgetList.add(buildCenter3('images/icon_email.png', '邮件'.tr, 2)); @@ -643,17 +645,17 @@ class _SendElectronicKeyViewState extends State ); } - _jumpSmartDeviceRoute(int itemIndex) { + void _jumpSmartDeviceRoute(int itemIndex) { Get.back(); switch (itemIndex) { case 0: //微信好友 - String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; + final String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; case 1: //短信 - String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; + final String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; case 2: @@ -662,7 +664,7 @@ class _SendElectronicKeyViewState extends State break; case 3: //更多 - String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; + final String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; default: diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart index 01ee2ec6..268c754c 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart @@ -13,28 +13,28 @@ class SendElectronicKeyViewState { final FlutterContactPicker contactPicker = FlutterContactPicker(); late Contact contact; - var isRemoteUnlock = false.obs; //是否允许远程开锁 - var isAuthentication = false.obs; //是否可以实名认证 + RxBool isRemoteUnlock = false.obs; //是否允许远程开锁 + RxBool isAuthentication = false.obs; //是否可以实名认证 - var timeLimitBeginTime = DateTool().dateToYMDHNString( + String timeLimitBeginTime = DateTool().dateToYMDHNString( DateTime.now().millisecondsSinceEpoch.toString()); // 限时开始时间 - var timeLimitEndTime = DateTool().dateToYMDHNString( + String timeLimitEndTime = DateTool().dateToYMDHNString( DateTime.now().millisecondsSinceEpoch.toString()); // 限时结束时间 - var cycleBeginTime = ""; // 循环开始时间 - var cycleEndTime = ""; // 循环结束时间 - var effectiveDateTime = ""; // 生效时间 - var failureDateTime = ""; // 失效时间 - var weekdaysList = []; + String cycleBeginTime = ''; // 循环开始时间 + String cycleEndTime = ''; // 循环结束时间 + String effectiveDateTime = ''; // 生效时间 + String failureDateTime = ''; // 失效时间 + List weekdaysList = []; - var isSendSuccess = false; - var countryName = '中国'.tr; - var countryCode = '86'; - var isCreateUser = false; //用户未注册时传1 已注册传0 - var isDemoMode = false; - var isRequireAuth = false.obs; //是否需要实名认证的必填项 + bool isSendSuccess = false; + String countryName = '中国'.tr; + String countryCode = '86'; + RxInt createUser = 0.obs; //用户未注册时传1 已注册传0 + bool isDemoMode = false; + RxBool isRequireAuth = false.obs; //是否需要实名认证的必填项 - final timeLimitTips = '接收者在有效期内可以不限次数使用'; //限时 - final permanentTips = '接收者可以使用此App开关锁'; //永久 - final onceLimitTips = '单次钥匙有效期为1小时,只能使用一次'; //单次 - final cycleLimitTips = '接收者可以在有效期内的固定时间段里,不限次数使用'; //循环 + final String timeLimitTips = '接收者在有效期内可以不限次数使用'; //限时 + final String permanentTips = '接收者可以使用此App开关锁'; //永久 + final String onceLimitTips = '单次钥匙有效期为1小时,只能使用一次'; //单次 + final String cycleLimitTips = '接收者可以在有效期内的固定时间段里,不限次数使用'; //循环 } diff --git a/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_page.dart b/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_page.dart index bfa7483f..005492cf 100755 --- a/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_page.dart +++ b/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_page.dart @@ -4,6 +4,7 @@ import 'package:get/get.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_logic.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_state.dart'; +import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_arg.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; @@ -139,8 +140,13 @@ class _ValueAddedServicesNoteAndEmailDetailPageState ), GestureDetector( onTap: () { - Navigator.pushNamed(context, - Routers.valueAddedServicesBuyAndUseRecordManagePage); + if (type == 1) { + Get.toNamed(Routers.valueAddedServicesRecordPage, + arguments: UseRecordListArg.sms); + } else if (type == 2) { + Get.toNamed(Routers.valueAddedServicesRecordPage, + arguments: UseRecordListArg.email); + } }, child: Container( width: 90, diff --git a/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart b/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart index c493bcb6..1f7bed72 100755 --- a/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart +++ b/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart @@ -2,6 +2,7 @@ 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/tools/baseGetXController.dart'; @@ -58,6 +59,17 @@ class ValueAddedServicesRecordLogic extends BaseGetXController { } } + String getBuyRecordListTitle(RecordItem itemData) { + if (itemData.type == UseRecordListArg.sms['type']) { + return '${itemData.smsCount}条'; + } else if (itemData.type == UseRecordListArg.email['type']) { + return '${itemData.emailCount}封'; + } else if (itemData.type == UseRecordListArg.cloudauth['type']) { + return '实名认证/${itemData.cloudauthCount}次'; + } + return ''; + } + @override void onReady() { super.onReady(); diff --git a/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart b/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart index f7e7eadf..dc641f9d 100755 --- a/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart +++ b/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart @@ -89,14 +89,15 @@ class _PurchaseRecords extends StatelessWidget { ? ListView.builder( itemCount: buyRecordList.length, itemBuilder: (BuildContext context, int index) { - return _recordKeyItem(buyRecordList[index]); + return _recordKeyItem(buyRecordList[index], logic); }) : NoData(), ); }); } - Widget _recordKeyItem(RecordItem itemData) { + Widget _recordKeyItem( + RecordItem itemData, ValueAddedServicesRecordLogic logic) { return Container( color: Colors.white, margin: EdgeInsets.symmetric(horizontal: 20.w, vertical: 10.h), @@ -122,7 +123,7 @@ class _PurchaseRecords extends StatelessWidget { ], ), SizedBox(height: 8.h), - Text('实名认证/${itemData.cloudauthCount}次', + Text(logic.getBuyRecordListTitle(itemData), style: TextStyle( fontSize: 22.sp, color: AppColors.darkGrayTextColor)), ], diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index a162ddf7..b4668d0d 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -124,7 +124,7 @@ class ApiProvider extends BaseProvider { })); Future sendElectronicKey( - String createUser, + int createUser, String countryCode, String usernameType, int endDate, diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index dc880523..d93f0a74 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -167,7 +167,7 @@ class ApiRepository { //发送电子钥匙 Future sendElectronicKey( - {required String createUser, + {required int createUser, required String countryCode, required String usernameType, required int endDate,