diff --git a/lib/constants/api.dart b/lib/constants/api.dart index 61c59231..b8c9aad6 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -97,6 +97,8 @@ class _Manager { ///访客通行:添加填写的访客信息 String get insertVisitorInfo => '/user/visitorAccess/insertVisitorInfo'; + String get shareInvite => '/user/visitorInvite/share'; + ///访客通行:查询访客记录信息(包含条件搜索) String get visitorAccessList => '/user/visitorAccess/list'; diff --git a/lib/pages/manager_func.dart b/lib/pages/manager_func.dart index 9959bc8f..4e167c4c 100644 --- a/lib/pages/manager_func.dart +++ b/lib/pages/manager_func.dart @@ -1,5 +1,6 @@ // Package imports: +import 'package:bot_toast/bot_toast.dart'; import 'package:dio/dio.dart'; import 'package:flustars/flustars.dart'; @@ -12,8 +13,10 @@ import 'package:akuCommunity/model/manager/quetionnaire_submit_model.dart'; import 'package:akuCommunity/model/manager/voting_detail_model.dart'; import 'package:akuCommunity/utils/network/base_model.dart'; import 'package:akuCommunity/utils/network/net_util.dart'; +import 'package:flutter/foundation.dart'; class ManagerFunc { + @Deprecated('') static insertVisitorInfo(int id, int type, String name, int sex, String tel, String carNum, DateTime expectedVisitDate) async { BaseModel baseModel = await NetUtil().post( @@ -32,6 +35,35 @@ class ManagerFunc { return baseModel; } + static Future shareVisitor({ + @required int estateId, + String name, + String tel, + int sex, + String carNumber, + DateTime date, + }) async { + final cancel = BotToast.showLoading(); + Map params = { + 'estateId': estateId, + }; + if (name != null) params.putIfAbsent('name', () => name); + if (tel != null) params.putIfAbsent('tel', () => tel); + if (sex != null) params.putIfAbsent('sex', () => sex); + if (carNumber != null) params.putIfAbsent('carNumber', () => carNumber); + if (date != null) + params.putIfAbsent('visitDateStart', () => NetUtil.getDate(date)); + Response response = await NetUtil().dio.post( + API.manager.shareInvite, + data: params, + ); + cancel(); + if (response.data['status'] && response.data['code'] != null) { + return response.data['code']; + } + return null; + } + static reportRepairInsert( int id, int type, String reportDetail, List fileUrls) async { BaseModel baseModel = await NetUtil().post( diff --git a/lib/pages/visitor_access_page/visitor_access_page.dart b/lib/pages/visitor_access_page/visitor_access_page.dart index c4bea368..0cdbe59f 100644 --- a/lib/pages/visitor_access_page/visitor_access_page.dart +++ b/lib/pages/visitor_access_page/visitor_access_page.dart @@ -1,3 +1,4 @@ +import 'package:akuCommunity/widget/picker/bee_date_picker.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -6,6 +7,7 @@ import 'package:flustars/flustars.dart'; import 'package:flutter_icons/flutter_icons.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; +import 'package:share/share.dart'; import 'package:velocity_x/velocity_x.dart'; import 'package:akuCommunity/pages/manager_func.dart'; @@ -17,7 +19,6 @@ import 'package:akuCommunity/utils/headers.dart'; import 'package:akuCommunity/widget/bee_divider.dart'; import 'package:akuCommunity/widget/bee_scaffold.dart'; import 'package:akuCommunity/widget/common_input.dart'; -import 'package:akuCommunity/widget/picker/bee_date_picker.dart'; class VisitorAccessPage extends StatefulWidget { VisitorAccessPage({Key key}) : super(key: key); @@ -117,47 +118,46 @@ class _VisitorAccessPageState extends State { IconData sexIcon, int value, ) { - return InkWell( - onTap: () { + return MaterialButton( + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + elevation: 0, + onPressed: () { setState(() { _selectSex = value; }); }, - child: Container( - height: 72.w, - width: 176.w, - padding: EdgeInsets.symmetric( - vertical: 13.w, - ), - decoration: BoxDecoration( - color: Color(0xffffffff), - borderRadius: BorderRadius.all(Radius.circular(36)), - border: Border.all( - color: - value == _selectSex ? Color(0xffffc40c) : Color(0xff979797), - width: 1)), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - sexIcon, - size: 32.sp, - color: - value == _selectSex ? Color(0xff333333) : Color(0xff979797), - ), - SizedBox(width: 9.w), - Text( - sex, - style: TextStyle( - fontWeight: FontWeight.w600, - fontSize: 30.sp, - color: value == _selectSex - ? Color(0xff333333) - : Color(0xff979797)), - ), - ], + height: 72.w, + minWidth: 176.w, + padding: EdgeInsets.symmetric( + vertical: 13.w, + ), + color: Color(0xffffffff), + shape: StadiumBorder( + side: BorderSide( + width: 1.w, + color: value == _selectSex ? Color(0xffffc40c) : Color(0xff979797), ), ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + sexIcon, + size: 32.sp, + color: value == _selectSex ? Color(0xff333333) : Color(0xff979797), + ), + SizedBox(width: 9.w), + Text( + sex, + style: TextStyle( + fontWeight: FontWeight.w600, + fontSize: 30.sp, + color: value == _selectSex + ? Color(0xff333333) + : Color(0xff979797)), + ), + ], + ), ); } @@ -217,7 +217,7 @@ class _VisitorAccessPageState extends State { Text( dateTime == null ? '请选择到访时间' - : '${dateTime.toString().substring(0, 11)}', + : '${DateUtil.formatDate(dateTime, format: 'yyyy-MM-dd')}', style: TextStyle( fontWeight: FontWeight.w600, fontSize: 34.sp, @@ -244,26 +244,20 @@ class _VisitorAccessPageState extends State { int type, String tel, ) { + final appProvider = Provider.of(context); return MaterialButton( onPressed: () async { - if (formKey.currentState.validate()) { - if (dateTime == null) { - BotToast.showText(text: '请选择到访时间'); - return; - } - VoidCallback cancel = BotToast.showLoading(); - await ManagerFunc.insertVisitorInfo( - id, - type, - _userName.text, - _selectSex, - tel, - _userCarNum.text, - dateTime, - ); - cancel(); - Get.off(VisitorRecordPage()); - } + String result = await ManagerFunc.shareVisitor( + estateId: appProvider.selectedHouse.estateId, + name: _userName.text, + sex: _selectSex, + carNumber: _userCarNum.text, + date: dateTime, + tel: tel, + ); + if (result != null) + Share.share( + 'http://test.akuhotel.com:8804/static/dist/index.html#/visitor?$result'); }, minWidth: double.infinity, height: 96.w, diff --git a/lib/widget/picker/bee_date_picker.dart b/lib/widget/picker/bee_date_picker.dart index 9ce01b4c..f14cf601 100644 --- a/lib/widget/picker/bee_date_picker.dart +++ b/lib/widget/picker/bee_date_picker.dart @@ -7,8 +7,15 @@ import 'package:velocity_x/velocity_x.dart'; import 'package:akuCommunity/widget/picker/bee_custom_picker.dart'; class BeeDatePicker { - static Future pick(DateTime initDate) async { - return await Get.bottomSheet(_BeeDatePicker(date: initDate)); + static Future pick( + DateTime initDate, { + CupertinoDatePickerMode mode = CupertinoDatePickerMode.date, + }) async { + return await Get.bottomSheet(_BeeDatePicker( + date: initDate, + mode: mode, + min: DateTime.now().subtract(Duration(days: 1)), + )); } static Future timePicker(DateTime initDate) async { @@ -27,14 +34,14 @@ class _BeeDatePicker extends StatefulWidget { final DateTime max; final DateTime min; final CupertinoDatePickerMode mode; - _BeeDatePicker( - {Key key, - @required this.date, - this.use24H = false, - this.max, - this.min, - this.mode}) - : super(key: key); + _BeeDatePicker({ + Key key, + @required this.date, + this.use24H = false, + this.max, + this.min, + this.mode, + }) : super(key: key); @override __BeeDatePickerState createState() => __BeeDatePickerState(); diff --git a/pubspec.lock b/pubspec.lock index 1327c53b..5cab4441 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -443,6 +443,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.0" nested: dependency: transitive description: @@ -592,6 +599,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" + share: + dependency: "direct main" + description: + name: share + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.1" shared_preferences: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 2e25b278..a0df5a33 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,6 +64,7 @@ dependencies: animated_text_kit: ^4.1.1 firebase_core: ^1.0.3 firebase_crashlytics: ^2.0.0 + share: ^2.0.1 dev_dependencies: