对接身份证照片上传

对接生成合同预览
对接签名照片上传
对接 正式合同生成
对接 合同下载
hmxc
张萌 3 years ago
parent a387be6b89
commit 9d920e246b

@ -383,6 +383,9 @@ class _Upload {
/// ///
String get uploadCardBack => '/user/upload/uploadAppIdCardBack'; String get uploadCardBack => '/user/upload/uploadAppIdCardBack';
///
String get uploadSignName => '/user/upload/uploadLeaseContractSignaturePhoto';
} }
class _Message { class _Message {

@ -0,0 +1,44 @@
import 'dart:io';
class SubmitModel {
int id;
String emergencyContact;
String emergencyContactNumber;
String correspondenceAddress;
String workUnits;
String payBank;
String bankAccountName;
String bankAccount;
List<String> idCardFrontImgUrl;
List<String> idCardBackImgUrl;
File? idCardFrontFile;
File? idCardBackFile;
SubmitModel({
required this.id,
required this.emergencyContact,
required this.emergencyContactNumber,
required this.correspondenceAddress,
required this.workUnits,
required this.payBank,
required this.bankAccountName,
required this.bankAccount,
required this.idCardFrontImgUrl,
required this.idCardBackImgUrl,
required this.idCardFrontFile,
required this.idCardBackFile,
});
factory SubmitModel.init() => SubmitModel(
id: 0,
emergencyContact: '',
emergencyContactNumber: '',
correspondenceAddress: '',
workUnits: '',
payBank: '',
bankAccountName: '',
bankAccount: '',
idCardFrontImgUrl: [],
idCardBackImgUrl: [], idCardBackFile: null, idCardFrontFile: null);
}

@ -3,10 +3,13 @@ import 'dart:typed_data';
import 'package:aku_community/base/base_style.dart'; import 'package:aku_community/base/base_style.dart';
import 'package:aku_community/const/resource.dart'; import 'package:aku_community/const/resource.dart';
import 'package:aku_community/constants/api.dart';
import 'package:aku_community/ui/profile/house/download_contract_page.dart'; import 'package:aku_community/ui/profile/house/download_contract_page.dart';
import 'package:aku_community/ui/profile/house/house_func.dart';
import 'package:aku_community/widget/bee_scaffold.dart'; import 'package:aku_community/widget/bee_scaffold.dart';
import 'package:aku_community/widget/buttons/bottom_button.dart'; import 'package:aku_community/widget/buttons/bottom_button.dart';
import 'package:aku_community/widget/others/sign_name_board.dart'; import 'package:aku_community/widget/others/sign_name_board.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:dotted_border/dotted_border.dart'; import 'package:dotted_border/dotted_border.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -14,7 +17,8 @@ import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart'; import 'package:velocity_x/velocity_x.dart';
class ContractPreviewPage extends StatefulWidget { class ContractPreviewPage extends StatefulWidget {
ContractPreviewPage({Key? key}) : super(key: key); final String url;
ContractPreviewPage({Key? key, required this.url}) : super(key: key);
@override @override
_ContractPreviewPageState createState() => _ContractPreviewPageState(); _ContractPreviewPageState createState() => _ContractPreviewPageState();
@ -56,7 +60,7 @@ class _ContractPreviewPageState extends State<ContractPreviewPage> {
children: [ children: [
FadeInImage.assetNetwork( FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP, placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: 'image'), image: API.image(widget.url)),
Positioned( Positioned(
right: 70.w, right: 70.w,
bottom: 200.w, bottom: 200.w,
@ -67,8 +71,17 @@ class _ContractPreviewPageState extends State<ContractPreviewPage> {
], ],
), ),
bottomNavi: BottomButton( bottomNavi: BottomButton(
onPressed: () { onPressed: () async {
Get.off(() => DownLoadContractPage(firstRoute: true)); if (_signFile != null) {
Function cancel = BotToast.showLoading();
String result = await HouseFunc().uploadSignName(_signFile!);
Get.off(() => DownLoadContractPage(
path: result,
));
cancel();
} else {
BotToast.showText(text: '请先签名!');
}
}, },
child: '生成合同'.text.size(32.sp).color(ktextPrimary).make()), child: '生成合同'.text.size(32.sp).color(ktextPrimary).make()),
); );

@ -2,14 +2,19 @@ import 'package:aku_community/base/base_style.dart';
import 'package:aku_community/ui/profile/house/upload_contracts_page.dart'; import 'package:aku_community/ui/profile/house/upload_contracts_page.dart';
import 'package:aku_community/widget/bee_scaffold.dart'; import 'package:aku_community/widget/bee_scaffold.dart';
import 'package:aku_community/widget/others/finish_result_image.dart'; import 'package:aku_community/widget/others/finish_result_image.dart';
import 'package:aku_community/widget/views/%20bee_download_view.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:open_file/open_file.dart';
import 'package:velocity_x/velocity_x.dart'; import 'package:velocity_x/velocity_x.dart';
class DownLoadContractPage extends StatefulWidget { class DownLoadContractPage extends StatefulWidget {
final bool firstRoute; final String path;
DownLoadContractPage({Key? key, required this.firstRoute}) : super(key: key); DownLoadContractPage({
Key? key,
required this.path,
}) : super(key: key);
@override @override
_DownLoadContractPageState createState() => _DownLoadContractPageState(); _DownLoadContractPageState createState() => _DownLoadContractPageState();
@ -26,11 +31,7 @@ class _DownLoadContractPageState extends State<DownLoadContractPage> {
80.w.heightBox, 80.w.heightBox,
FinishResultImage(status: true), FinishResultImage(status: true),
48.w.heightBox, 48.w.heightBox,
'${widget.firstRoute ? '生成成功' : '合同已生成'}' '${'生成成功'}'.text.size(36.sp).color(ktextPrimary).make(),
.text
.size(36.sp)
.color(ktextPrimary)
.make(),
24.w.heightBox, 24.w.heightBox,
'请下载合同'.text.size(26.sp).color(ktextSubColor).make(), '请下载合同'.text.size(26.sp).color(ktextSubColor).make(),
'完善信息并盖章后再上传合同'.text.size(26.sp).color(ktextSubColor).make(), '完善信息并盖章后再上传合同'.text.size(26.sp).color(ktextSubColor).make(),
@ -48,7 +49,12 @@ class _DownLoadContractPageState extends State<DownLoadContractPage> {
side: BorderSide(color: Color(0xFF666666), width: 1.w)), side: BorderSide(color: Color(0xFF666666), width: 1.w)),
padding: padding:
EdgeInsets.symmetric(vertical: 16.w, horizontal: 78.w), EdgeInsets.symmetric(vertical: 16.w, horizontal: 78.w),
onPressed: () {}, onPressed: () async {
String? result = await Get.dialog(BeeDownloadView(
file: widget.path,
));
if (result != null) OpenFile.open(result);
},
child: child:
'下载合同'.text.size(32.sp).bold.color(ktextPrimary).make(), '下载合同'.text.size(32.sp).bold.color(ktextPrimary).make(),
), ),

@ -1,8 +1,12 @@
import 'dart:io';
import 'package:aku_community/constants/api.dart'; import 'package:aku_community/constants/api.dart';
import 'package:aku_community/model/user/house_model.dart'; import 'package:aku_community/model/user/house_model.dart';
import 'package:aku_community/models/house/lease_detail_model.dart'; import 'package:aku_community/models/house/lease_detail_model.dart';
import 'package:aku_community/models/house/lease_echo_model.dart'; import 'package:aku_community/models/house/lease_echo_model.dart';
import 'package:aku_community/models/house/submit_model.dart';
import 'package:aku_community/models/user/passed_house_list_model.dart'; import 'package:aku_community/models/user/passed_house_list_model.dart';
import 'package:aku_community/utils/network/base_file_model.dart';
import 'package:aku_community/utils/network/base_model.dart'; import 'package:aku_community/utils/network/base_model.dart';
import 'package:aku_community/utils/network/net_util.dart'; import 'package:aku_community/utils/network/net_util.dart';
import 'package:bot_toast/bot_toast.dart'; import 'package:bot_toast/bot_toast.dart';
@ -67,6 +71,61 @@ class HouseFunc {
} }
} }
///
Future<String> uploadIdCardFront(File file) async {
BaseFileModel baseFileModel =
await NetUtil().upload(API.upload.uploadCardFront, file);
if (baseFileModel.status ?? false) {
return baseFileModel.url!;
} else {
return '';
}
}
///
Future<String> uploadIdCardBack(File file) async {
BaseFileModel baseFileModel =
await NetUtil().upload(API.upload.uploadCardBack, file);
if (baseFileModel.status ?? false) {
return baseFileModel.url!;
} else {
return '';
}
}
///
Future<String> submitLeaseInfo(SubmitModel model) async {
BaseModel baseModel =
await NetUtil().get(API.house.submitLeaseInfo, params: {
"id": model.id,
"emergencyContact": model.emergencyContact,
"emergencyContactNumber": model.emergencyContactNumber,
"correspondenceAddress": model.correspondenceAddress,
"workUnits": model.workUnits,
"payBank": model.payBank,
"bankAccountName": model.bankAccountName,
"bankAccount": model.bankAccount,
"idCardFrontImgUrl": model.idCardFrontImgUrl,
"idCardBackImgUrl": model.idCardBackImgUrl,
});
if (baseModel.status ?? false) {
return baseModel.data;
} else {
return '';
}
}
///
Future<String> uploadSignName(File file) async {
BaseFileModel baseFileModel =
await NetUtil().upload(API.upload.uploadSignName, file);
if (baseFileModel.status ?? false) {
return baseFileModel.url!;
} else {
return '';
}
}
static Map<String, int> getSex = { static Map<String, int> getSex = {
'': 1, '': 1,
'': 2, '': 2,
@ -76,4 +135,6 @@ class HouseFunc {
1: '', 1: '',
2: '', 2: '',
}; };
static Map<int, String> toType = {1: '一类人才', 2: '二类人才', 3: '三类人才'};
} }

@ -1,17 +1,26 @@
import 'package:aku_community/base/base_style.dart'; import 'package:aku_community/base/base_style.dart';
import 'package:aku_community/const/resource.dart'; import 'package:aku_community/const/resource.dart';
import 'package:aku_community/models/house/lease_detail_model.dart';
import 'package:aku_community/models/house/submit_model.dart';
import 'package:aku_community/ui/profile/house/contract_preview_page.dart'; import 'package:aku_community/ui/profile/house/contract_preview_page.dart';
import 'package:aku_community/ui/profile/house/house_func.dart';
import 'package:aku_community/utils/headers.dart'; import 'package:aku_community/utils/headers.dart';
import 'package:aku_community/widget/bee_divider.dart'; import 'package:aku_community/widget/bee_divider.dart';
import 'package:aku_community/widget/bee_scaffold.dart'; import 'package:aku_community/widget/bee_scaffold.dart';
import 'package:aku_community/widget/buttons/bottom_button.dart'; import 'package:aku_community/widget/buttons/bottom_button.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:power_logger/power_logger.dart';
import 'package:velocity_x/velocity_x.dart'; import 'package:velocity_x/velocity_x.dart';
class HouseInformationCheckPage extends StatefulWidget { class HouseInformationCheckPage extends StatefulWidget {
HouseInformationCheckPage({Key? key}) : super(key: key); final SubmitModel submitModel;
final LeaseDetailModel detailModel;
HouseInformationCheckPage(
{Key? key, required this.submitModel, required this.detailModel})
: super(key: key);
@override @override
_HouseInformationCheckPageState createState() => _HouseInformationCheckPageState createState() =>
@ -19,6 +28,13 @@ class HouseInformationCheckPage extends StatefulWidget {
} }
class _HouseInformationCheckPageState extends State<HouseInformationCheckPage> { class _HouseInformationCheckPageState extends State<HouseInformationCheckPage> {
late SubmitModel _submitModel;
@override
void initState() {
super.initState();
_submitModel = widget.submitModel;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BeeScaffold( return BeeScaffold(
@ -28,18 +44,34 @@ class _HouseInformationCheckPageState extends State<HouseInformationCheckPage> {
padding: EdgeInsets.only(bottom: 24.w, left: 32.w, right: 32.w), padding: EdgeInsets.only(bottom: 24.w, left: 32.w, right: 32.w),
children: [ children: [
_houseHead(), _houseHead(),
_textTile('认定人才类型', '二类人才'), _textTile('认定人才类型', HouseFunc.toType[widget.detailModel.type]!),
_textTile('房屋户型', 'B座C1户型'), _textTile('房屋户型', widget.detailModel.estateType),
_textTile('房屋结构', '两房两卫一厅'), _textTile('房屋结构', '两房两卫一厅'),
_textTile('建筑面积', '90平米'), _textTile('建筑面积', '90平米'),
_textTile('使用面积', '78平米'), _textTile('使用面积', '78平米'),
_textTile('租赁期限', '2020-10-26 ———— 2023-10-25'), _textTile('租赁期限',
'${widget.detailModel.leaseDateStart}————${widget.detailModel.leaseDateEnd}'),
].sepWidget(separate: 24.w.heightBox), ].sepWidget(separate: 24.w.heightBox),
), ),
bottomNavi: BottomButton( bottomNavi: BottomButton(
onPressed: () { onPressed: () async {
Function cancel = BotToast.showLoading();
try {
_submitModel.idCardFrontImgUrl.add(await HouseFunc()
.uploadIdCardFront(_submitModel.idCardFrontFile!));
_submitModel.idCardFrontImgUrl.add(await HouseFunc()
.uploadIdCardBack(_submitModel.idCardBackFile!));
String result = await HouseFunc().submitLeaseInfo(_submitModel);
if (result.isNotEmpty) {
Get.back(); Get.back();
Get.off(() => ContractPreviewPage()); Get.off(() => ContractPreviewPage(
url: result,
));
}
} catch (e) {
LoggerData.addData(e);
}
cancel();
}, },
child: '确认'.text.size(32.sp).bold.color(ktextPrimary).make(), child: '确认'.text.size(32.sp).bold.color(ktextPrimary).make(),
), ),
@ -90,9 +122,7 @@ class _HouseInformationCheckPageState extends State<HouseInformationCheckPage> {
.bold .bold
.make(), .make(),
10.w.heightBox, 10.w.heightBox,
'appProvider.selectedHouse!' widget.detailModel.roomName.text.black
.text
.black
.size(32.sp) .size(32.sp)
.bold .bold
.make() .make()

@ -2,9 +2,9 @@
import 'package:aku_community/base/base_style.dart'; import 'package:aku_community/base/base_style.dart';
import 'package:aku_community/models/house/lease_list_model.dart'; import 'package:aku_community/models/house/lease_list_model.dart';
import 'package:aku_community/ui/profile/house/contract_pay_page.dart'; import 'package:aku_community/ui/profile/house/contract_pay_page.dart';
import 'package:aku_community/ui/profile/house/download_contract_page.dart';
import 'package:aku_community/ui/profile/house/supplement_information_page.dart'; import 'package:aku_community/ui/profile/house/supplement_information_page.dart';
import 'package:aku_community/ui/profile/house/upload_contracts_page.dart'; import 'package:aku_community/ui/profile/house/upload_contracts_page.dart';
import 'package:aku_community/utils/headers.dart';
import 'package:aku_community/widget/buttons/card_bottom_button.dart'; import 'package:aku_community/widget/buttons/card_bottom_button.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -55,7 +55,7 @@ class LeaseHouseCard extends StatelessWidget {
height: 40.w, height: 40.w,
), ),
16.w.widthBox, 16.w.widthBox,
'南宁金融人才公寓'.text.size(32.sp).color(ktextPrimary).make().expand(), S.of(context)!.tempPlotName.text.size(32.sp).color(ktextPrimary).make().expand(),
model.statusString.text model.statusString.text
.size(32.sp) .size(32.sp)
.color(ktextPrimary) .color(ktextPrimary)
@ -108,8 +108,13 @@ class LeaseHouseCard extends StatelessWidget {
}), }),
CardBottomButton.white( CardBottomButton.white(
text: '下载合同', text: '下载合同',
onPressed: () { onPressed: () async{
Get.to(() => DownLoadContractPage(firstRoute: false)); //TODO:
// String? result = await Get.dialog(BeeDownloadView(
// file:
// ));
// if (result != null) OpenFile.open(result);
}), }),
], ],
); );

@ -2,6 +2,7 @@ import 'dart:io';
import 'package:aku_community/base/base_style.dart'; import 'package:aku_community/base/base_style.dart';
import 'package:aku_community/models/house/lease_detail_model.dart'; import 'package:aku_community/models/house/lease_detail_model.dart';
import 'package:aku_community/models/house/submit_model.dart';
import 'package:aku_community/ui/profile/house/house_func.dart'; import 'package:aku_community/ui/profile/house/house_func.dart';
import 'package:aku_community/ui/profile/house/house_information_check_page.dart'; import 'package:aku_community/ui/profile/house/house_information_check_page.dart';
import 'package:aku_community/widget/bee_scaffold.dart'; import 'package:aku_community/widget/bee_scaffold.dart';
@ -58,16 +59,17 @@ class _SupplementInformationPageState extends State<SupplementInformationPage> {
/// ///
File? _idCardFront; File? _idCardFront;
/// ///
File? _idCardBack; File? _idCardBack;
SubmitModel _submitModel = SubmitModel.init();
LeaseDetailModel? _model;
@override @override
void initState() { void initState() {
Future.delayed(Duration(milliseconds: 300), () async { Future.delayed(Duration(milliseconds: 300), () async {
LeaseDetailModel? model = await HouseFunc().leaseDetail(widget.leaseId); _model = await HouseFunc().leaseDetail(widget.leaseId);
if (model != null) { initHinText(_model);
initModel(model);
setState(() {}); setState(() {});
}
}); });
super.initState(); super.initState();
} }
@ -153,17 +155,34 @@ class _SupplementInformationPageState extends State<SupplementInformationPage> {
bottomNavi: BottomButton( bottomNavi: BottomButton(
onPressed: () { onPressed: () {
if (canSubmit) { if (canSubmit) {
updateSubmitModel();
Get.to(() => HouseInformationCheckPage()); Get.to(() => HouseInformationCheckPage(
submitModel: _submitModel,
detailModel: _model!,
));
} }
}, },
child: '下一步'.text.size(32.sp).bold.color(ktextPrimary).make()), child: '下一步'.text.size(32.sp).bold.color(ktextPrimary).make()),
); );
} }
//model
updateSubmitModel() {
_submitModel.bankAccountName = _nameController.text;
_submitModel.emergencyContact = _emergencyContactController.text;
_submitModel.emergencyContactNumber = _emergencyPhoneController.text;
_submitModel.correspondenceAddress = _addressController.text;
_submitModel.workUnits = _workUnitController.text;
_submitModel.payBank = _bankNameController.text;
_submitModel.bankAccount = _bankCodeController.text;
_submitModel.idCardFrontFile = _idCardFront;
_submitModel.idCardBackFile = _idCardBack;
}
//model, //model,
initModel(LeaseDetailModel? model) { initHinText(LeaseDetailModel? model) {
if (model != null) { if (model != null) {
_submitModel.id = model.id;
_nameController.text = model.name; _nameController.text = model.name;
_sex = HouseFunc.toSex[model.sex]!; _sex = HouseFunc.toSex[model.sex]!;
_codeController.text = model.idCard; _codeController.text = model.idCard;
@ -188,8 +207,6 @@ class _SupplementInformationPageState extends State<SupplementInformationPage> {
} }
} }
Widget _sexBottomSheet() { Widget _sexBottomSheet() {
return CupertinoActionSheet( return CupertinoActionSheet(
title: title:

@ -226,6 +226,7 @@ class _UserIdentifyPageState extends State<UserIdentifyPage> {
onPressed: () { onPressed: () {
// Get.back(); // Get.back();
// Get.back(); // Get.back();
//TODO:
Get.to(() => TenantHouseListPage()); Get.to(() => TenantHouseListPage());
}, },
child: '回到首页' child: '回到首页'

Loading…
Cancel
Save