Commit b97c8321 authored by pete谢兆麟's avatar pete谢兆麟

上传旅行证件UI

parent 334ddb21
......@@ -532,6 +532,13 @@
04C85DE72C36ADAE008B20D6 /* YHMyFileListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C85DE62C36ADAE008B20D6 /* YHMyFileListHeaderView.swift */; };
04C85DE92C36BF49008B20D6 /* YHMyFileListFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C85DE82C36BF49008B20D6 /* YHMyFileListFooterView.swift */; };
04C8F4832B7216D800ADF59B /* YHUserInfoHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C8F4822B7216D800ADF59B /* YHUserInfoHeaderView.swift */; };
04CA2BE82CB769CD00F36DE7 /* YHResignUploadTravelCardListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CA2BE72CB769CD00F36DE7 /* YHResignUploadTravelCardListViewController.swift */; };
04CA2BEA2CB7708E00F36DE7 /* YHResignUploadTravelCardListheadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CA2BE92CB7708E00F36DE7 /* YHResignUploadTravelCardListheadView.swift */; };
04CA2BEC2CB7740000F36DE7 /* YHResignUploadTravelCardListfootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CA2BEB2CB7740000F36DE7 /* YHResignUploadTravelCardListfootView.swift */; };
04CA2BEE2CB7771000F36DE7 /* YHResignUploadTravelCardFootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CA2BED2CB7771000F36DE7 /* YHResignUploadTravelCardFootViewController.swift */; };
04CA2BF02CB7A74C00F36DE7 /* YHResignUploadTravelHKViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CA2BEF2CB7A74C00F36DE7 /* YHResignUploadTravelHKViewController.swift */; };
04CA2BF22CB7AA7600F36DE7 /* YHResignUploadTravelPassportViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CA2BF12CB7AA7600F36DE7 /* YHResignUploadTravelPassportViewController.swift */; };
04CA2BF42CB7B33500F36DE7 /* YHResignUploadTravelGuideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CA2BF32CB7B33500F36DE7 /* YHResignUploadTravelGuideView.swift */; };
04CC2EF02BC3DDB2000305DD /* YHServiceBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CC2EEF2BC3DDB2000305DD /* YHServiceBannerView.swift */; };
04CCEDF72CA0FCB10026EA70 /* YHHKImmigrationRecordsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CCEDF62CA0FCB10026EA70 /* YHHKImmigrationRecordsViewModel.swift */; };
04CCEDF92CA0FD5F0026EA70 /* YHHKImmigrationRecordsSummaryModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CCEDF82CA0FD5F0026EA70 /* YHHKImmigrationRecordsSummaryModel.swift */; };
......@@ -1399,6 +1406,13 @@
04C85DE62C36ADAE008B20D6 /* YHMyFileListHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyFileListHeaderView.swift; sourceTree = "<group>"; };
04C85DE82C36BF49008B20D6 /* YHMyFileListFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyFileListFooterView.swift; sourceTree = "<group>"; };
04C8F4822B7216D800ADF59B /* YHUserInfoHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHUserInfoHeaderView.swift; sourceTree = "<group>"; };
04CA2BE72CB769CD00F36DE7 /* YHResignUploadTravelCardListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignUploadTravelCardListViewController.swift; sourceTree = "<group>"; };
04CA2BE92CB7708E00F36DE7 /* YHResignUploadTravelCardListheadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignUploadTravelCardListheadView.swift; sourceTree = "<group>"; };
04CA2BEB2CB7740000F36DE7 /* YHResignUploadTravelCardListfootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignUploadTravelCardListfootView.swift; sourceTree = "<group>"; };
04CA2BED2CB7771000F36DE7 /* YHResignUploadTravelCardFootViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignUploadTravelCardFootViewController.swift; sourceTree = "<group>"; };
04CA2BEF2CB7A74C00F36DE7 /* YHResignUploadTravelHKViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignUploadTravelHKViewController.swift; sourceTree = "<group>"; };
04CA2BF12CB7AA7600F36DE7 /* YHResignUploadTravelPassportViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignUploadTravelPassportViewController.swift; sourceTree = "<group>"; };
04CA2BF32CB7B33500F36DE7 /* YHResignUploadTravelGuideView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignUploadTravelGuideView.swift; sourceTree = "<group>"; };
04CC2EEF2BC3DDB2000305DD /* YHServiceBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHServiceBannerView.swift; sourceTree = "<group>"; };
04CCEDF62CA0FCB10026EA70 /* YHHKImmigrationRecordsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHHKImmigrationRecordsViewModel.swift; sourceTree = "<group>"; };
04CCEDF82CA0FD5F0026EA70 /* YHHKImmigrationRecordsSummaryModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHHKImmigrationRecordsSummaryModel.swift; sourceTree = "<group>"; };
......@@ -2168,6 +2182,7 @@
0449EEE52C8EE99000A397FD /* Resign(续签) */ = {
isa = PBXGroup;
children = (
04CA2BE22CB7693500F36DE7 /* UploadTravelCrad(上传旅行证件) */,
04912F652CB6A56900CC3105 /* ResignHKAppoint(在港递交预约) */,
04912F562CB6675D00CC3105 /* ResignInfoConfirm(续签信息确认) */,
044F39272CB54BB3007CA277 /* HongKongVisaRenewalPayment(续签在港缴费) */,
......@@ -3580,6 +3595,52 @@
path = C;
sourceTree = "<group>";
};
04CA2BE22CB7693500F36DE7 /* UploadTravelCrad(上传旅行证件) */ = {
isa = PBXGroup;
children = (
04CA2BE62CB7697300F36DE7 /* M */,
04CA2BE52CB7696C00F36DE7 /* VM */,
04CA2BE42CB7696700F36DE7 /* V */,
04CA2BE32CB7696000F36DE7 /* C */,
);
path = "UploadTravelCrad(上传旅行证件)";
sourceTree = "<group>";
};
04CA2BE32CB7696000F36DE7 /* C */ = {
isa = PBXGroup;
children = (
04CA2BE72CB769CD00F36DE7 /* YHResignUploadTravelCardListViewController.swift */,
04CA2BEF2CB7A74C00F36DE7 /* YHResignUploadTravelHKViewController.swift */,
04CA2BF12CB7AA7600F36DE7 /* YHResignUploadTravelPassportViewController.swift */,
);
path = C;
sourceTree = "<group>";
};
04CA2BE42CB7696700F36DE7 /* V */ = {
isa = PBXGroup;
children = (
04CA2BE92CB7708E00F36DE7 /* YHResignUploadTravelCardListheadView.swift */,
04CA2BEB2CB7740000F36DE7 /* YHResignUploadTravelCardListfootView.swift */,
04CA2BED2CB7771000F36DE7 /* YHResignUploadTravelCardFootViewController.swift */,
04CA2BF32CB7B33500F36DE7 /* YHResignUploadTravelGuideView.swift */,
);
path = V;
sourceTree = "<group>";
};
04CA2BE52CB7696C00F36DE7 /* VM */ = {
isa = PBXGroup;
children = (
);
path = VM;
sourceTree = "<group>";
};
04CA2BE62CB7697300F36DE7 /* M */ = {
isa = PBXGroup;
children = (
);
path = M;
sourceTree = "<group>";
};
04CCEDF52CA0FC850026EA70 /* VM */ = {
isa = PBXGroup;
children = (
......@@ -4930,6 +4991,7 @@
045EEEF62B9F171A0022A143 /* YHSpousePrimaryInfoVC.swift in Sources */,
044867B82BA1C75700DFAD4A /* YHCertificateUploadFailTipsView.swift in Sources */,
04256DE02C72DC0600A37BA4 /* YHCertificateAppointOptionView.swift in Sources */,
04CA2BEE2CB7771000F36DE7 /* YHResignUploadTravelCardFootViewController.swift in Sources */,
044D0C062C22736F00C5CF5E /* YHSetExplainView.swift in Sources */,
04256DF02C733B2D00A37BA4 /* YHGrabNumberInfoView.swift in Sources */,
04213B252C48C15400797900 /* YHHomeIdentityViewController.swift in Sources */,
......@@ -4939,6 +5001,7 @@
04213B352C4F85A900797900 /* YHHomeLifeCategoryModel.swift in Sources */,
0430E6602C7470AD000511E2 /* YHAdopterTravelViewController.swift in Sources */,
04FB01CE2C23DDBD0040115D /* YHPeopleMatchNoDataView.swift in Sources */,
04CA2BEC2CB7740000F36DE7 /* YHResignUploadTravelCardListfootView.swift in Sources */,
A5ACE9362B4564F7002C94D2 /* YHNetworkStatusManager.swift in Sources */,
048787D52BCE880B0036E221 /* YHServiceOrderListViewController.swift in Sources */,
0431F8842C9579F7003B84F4 /* YHResignTemplateSheetView.swift in Sources */,
......@@ -4982,6 +5045,7 @@
048058352C7DC7AC00502CAA /* YHMyTestViewController.swift in Sources */,
045EEEA72B9F171A0022A143 /* YHWorkExperienceViewController.swift in Sources */,
A5FD63BD2B623C2C00D1D9DA /* YHInformationPerfectListVC.swift in Sources */,
04CA2BEA2CB7708E00F36DE7 /* YHResignUploadTravelCardListheadView.swift in Sources */,
045EEE8D2B9F171A0022A143 /* YHPreviewInfoCell.swift in Sources */,
047AA3E22C4A66CE009C4554 /* YHLifeItemTableViewCell.swift in Sources */,
04358E0C2C7836BB00811928 /* YHSelectHKPlaceListView.swift in Sources */,
......@@ -5057,6 +5121,7 @@
045EEEB42B9F171A0022A143 /* YHWorkExampleMessageTableViewCell.swift in Sources */,
04C85DE52C369AB5008B20D6 /* YHMyFileListCell.swift in Sources */,
045EEF132B9F171A0022A143 /* YHCountryMessage.swift in Sources */,
04CA2BF22CB7AA7600F36DE7 /* YHResignUploadTravelPassportViewController.swift in Sources */,
04EC2F812C22888E002907D7 /* YHFriendRequestView.swift in Sources */,
044EE24C2C94396E00A2FE3A /* YHResignCertificatePassportTableViewCell.swift in Sources */,
04F2435B2C9D140C00DF2C74 /* YHHKRecordsTitleCell.swift in Sources */,
......@@ -5132,6 +5197,7 @@
F8BAADA32C4FB41F0074D6C3 /* YHUatHelper.swift in Sources */,
0468D4282B50D4AF00CFB916 /* YHPrivacyAlertView.swift in Sources */,
045EEEB22B9F171A0022A143 /* YHWorkActionView.swift in Sources */,
04CA2BF02CB7A74C00F36DE7 /* YHResignUploadTravelHKViewController.swift in Sources */,
A58AC09F2BAC05BA00A30FA9 /* YHFileListItemsView.swift in Sources */,
A5000F512C3BC28B00843452 /* YHHomeHoldViewPageViewController.swift in Sources */,
04CE1ACF2C2AD91F001CB80A /* YHActivityViewModel.swift in Sources */,
......@@ -5250,6 +5316,7 @@
04F243572C9C437F00DF2C74 /* YHHKRecordsRemarkCell.swift in Sources */,
A5D5ADEF2BB90FBC0039FA6B /* YHCheckEamilAlertView.swift in Sources */,
04A671602BA0280800C1FB91 /* YHFileRenameInputView.swift in Sources */,
04CA2BF42CB7B33500F36DE7 /* YHResignUploadTravelGuideView.swift in Sources */,
A5ACE93F2B4564F7002C94D2 /* UIViewController+Extension.swift in Sources */,
A53B61192BB3C9960010B573 /* YHMyDocListHeaderView.swift in Sources */,
04F243662C9D5CB200DF2C74 /* YHResignDocumentViewModel.swift in Sources */,
......@@ -5582,6 +5649,7 @@
A598E9E62C7EF39D00F84739 /* YHTravelDocsPreparationDetailVC.swift in Sources */,
045EEEF82B9F171A0022A143 /* YHFormItemOnlyDoubleChoiceCell.swift in Sources */,
A598E9DF2C7CB2C400F84739 /* YHTravelDocsPreparationViewModel.swift in Sources */,
04CA2BE82CB769CD00F36DE7 /* YHResignUploadTravelCardListViewController.swift in Sources */,
0480976D2BA158A1000B9DCA /* YHCertificateListVC.swift in Sources */,
04CCEDFF2CA161910026EA70 /* YHHKRecordsFamilyMembers.swift in Sources */,
0430E6522C733D82000511E2 /* YHAdopterIncomeFileTableViewCell.swift in Sources */,
......
......@@ -238,7 +238,10 @@ extension YHServiceCenterViewController {
}
@objc func pushOrderView() {
// let vc = YHResignUploadTravelHKViewController()
// self.navigationController?.pushViewController(vc)
//
// return
var flag = true
if self.state == 1 || self.state == 3 {
flag = false
......
//
// YHResignUploadTravelCardListViewController.swift
// galaxy
//
// Created by EDY on 2024/10/10.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHResignUploadTravelCardListViewController: YHBaseViewController {
var orderId: Int = 0
lazy var viewModel: YHTravelDocsPreparationViewModel = {
let vm = YHTravelDocsPreparationViewModel()
return vm
}()
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
tableView.estimatedSectionHeaderHeight = 16.0
tableView.estimatedSectionFooterHeight = 0.01
tableView.contentInsetAdjustmentBehavior = .never
tableView.showsVerticalScrollIndicator = false
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.tableHeaderView = YHResignUploadTravelCardListheadView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 16 + 90.fix))
tableView.tableFooterView = YHResignUploadTravelCardListfootView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 837.fix))
tableView.backgroundColor = .clear
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
tableView.register(YHTravelDocsPreparationListCell.self, forCellReuseIdentifier: YHTravelDocsPreparationListCell.cellReuseIdentifier)
tableView.register(YHTravelDocsPreparationTipsCell.self, forCellReuseIdentifier: YHTravelDocsPreparationTipsCell.cellReuseIdentifier)
return tableView
}()
//我已知悉,确认
lazy var rewardBtn: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 15)
button.contentHorizontalAlignment = .center
button.setTitle("下一步,去查看续签总结", for: .normal)
button.setTitle("下一步,去查看续签总结", for: .disabled)
button.setTitleColor(UIColor.white, for: .normal)
button.setTitleColor(UIColor.white, for: .disabled)
button.layer.cornerRadius = kCornerRadius3
button.clipsToBounds = true
button.addTarget(self, action: #selector(clickNextBtn), for: .touchUpInside)
button.backgroundColor = UIColor.brandMainColor
return button
}()
lazy var bottomView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.addSubview(self.rewardBtn)
self.rewardBtn.snp.makeConstraints { make in
make.top.equalToSuperview().offset(10)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.height.equalTo(44)
}
view.layer.zPosition = 10
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadData()
}
@objc func clickNextBtn() {
}
}
private extension YHResignUploadTravelCardListViewController {
func loadData() {
let params: [String : Any] = ["order_id": orderId]
YHHUD.show(.progress(message: "加载中..."))
viewModel.getTravelDocsList(param: params){ success, error in
YHHUD.hide()
if success {
} else {
let msg = error?.errorMsg ?? "获取数据出错"
YHHUD.flash(message: msg)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.navigationController?.popViewController()
}
}
self.tableView.reloadData()
}
}
func setupUI() {
gk_navTitle = "上传旅行证件"
gk_navBarAlpha = 1.0
gk_navBackgroundColor = .white
view.backgroundColor = UIColor.contentBkgColor
if orderId == 0 {
if let id = UserDefaults.standard.value(forKey: "orderIdForPreview") {
self.orderId = (id as? Int) ?? 0
}
}
view.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.height.equalTo(98)
make.bottom.equalToSuperview()
}
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.bottom.equalTo(-98)
}
}
}
extension YHResignUploadTravelCardListViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return viewModel.arrTravelDocs.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let approveCell = tableView.dequeueReusableCell(withIdentifier: YHTravelDocsPreparationListCell.cellReuseIdentifier, for: indexPath) as! YHTravelDocsPreparationListCell
approveCell.dataModel = viewModel.arrTravelDocs[indexPath.section]
return approveCell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return YHTravelDocsPreparationListCell.cellH
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let model = viewModel.arrTravelDocs[indexPath.section] {
if model.status == -1 {
return
} else {
let vc = YHTravelDocsPreparationDetailVC()
vc.dataModel = model
vc.orderId = orderId
self.navigationController?.pushViewController(vc)
}
}
}
private func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> CGFloat {
return 16.0
}
private func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> CGFloat {
return 0.01
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView()
return view
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let view = UIView()
return view
}
}
//
// YHResignUploadTravelHKViewController.swift
// galaxy
//
// Created by EDY on 2024/10/10.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import AttributedString
class YHResignUploadTravelHKViewController: YHBaseViewController {
lazy var viewModel: YHResignCertificateDetailViewModel = {
let vm = YHResignCertificateDetailViewModel()
return vm
}()
//上个界面传递过来的数据对象
var dataModel : YHResignCertificateModel = YHResignCertificateModel()
var orderId: Int = 0
var tipsArr: [ASAttributedString] = []
var urls: [String] = ["",""]
var data: [YHItemModel] = []
var isShowPrompt = false
var failString: String = ""
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
tableView.estimatedSectionHeaderHeight = 0.01
tableView.estimatedSectionFooterHeight = 14.0
tableView.contentInsetAdjustmentBehavior = .never
tableView.showsVerticalScrollIndicator = false
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundColor = UIColor(hex: 0xF8F9FB)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
tableView.register(YHTravelCertificateTipsCell.self, forCellReuseIdentifier: YHTravelCertificateTipsCell.cellReuseIdentifier)
tableView.register(YHResignCertificateHKTableViewCell.self, forCellReuseIdentifier: YHResignCertificateHKTableViewCell.cellReuseIdentifier)
return tableView
}()
let bottomViewHeight = 98.0
lazy var bottomView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.addSubview(bottomBtn)
bottomBtn.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(8)
make.height.equalTo(48)
}
return view
}()
lazy var bottomBtn: UIButton = {
let btn = UIButton()
btn.backgroundColor = .brandMainColor
btn.setTitle("确认,保存", for: .normal)
btn.setTitleColor(.white, for: .normal)
btn.titleLabel?.font = UIFont.PFSC_M(ofSize: 16)
btn.addTarget(self, action: #selector(didSaveBtnClicked), for: .touchUpInside)
btn.layer.cornerRadius = kCornerRadius3
return btn
}()
override func viewDidLoad() {
super.viewDidLoad()
self.gk_navTitle = "上传旅行证件"
self.view.backgroundColor = .white
self.view.addSubview(self.tableView)
self.view.addSubview(bottomView)
self.tableView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.bottom.equalTo(bottomView.snp.top)
}
self.bottomView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(98)
}
self.bottomView.addSubview(bottomBtn)
self.bottomBtn.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(8)
make.height.equalTo(48)
}
loadDetailInfo()
}
func getTextWithType(type: Int, date:String) -> ASAttributedString {
if type == 0 {
return .init("上传《港澳通行证》(需有效期≥\(date))", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor(alpha: 0.5)))
}
if type == 1 {
let a = ASAttributedString.init("办理逗留D签注延期(有效期≥签证时长)", .font(UIFont.PFSC_R(ofSize:14)), .foreground(UIColor.mainTextColor50))
let b = ASAttributedString.init("《", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.brandMainColor))
let c = ASAttributedString.init("港澳通行证逗留(D)签注延期-办理指引", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.brandMainColor), .underline(.single), .action {
//跳转提示
YHHUD.flash(message: "弹窗提示")
let view = YHResignUploadTravelGuideView.sheetView()
view.show()
})
let d = ASAttributedString.init("》", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.brandMainColor))
return a+b+c+d
}
return .init("", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor(alpha: 0.5)))
}
func getTipsWithType(date: String) -> [ASAttributedString] {
return [self.getTextWithType(type: 0, date: date),
self.getTextWithType(type: 1, date: date)]
}
func updateData() {
// travel_cert_type 证件类型 0-未知 1-护照 3-港澳通行证
// nationality : Int = -1 国籍 1-中国 2-国外
self.viewModel.dataModel = dataModel
if dataModel.cert_info.img_front.count != 0 {
urls[0] = dataModel.cert_info.img_front
}
if dataModel.cert_info.img_back.count != 0 {
urls[1] = dataModel.cert_info.img_back
}
self.data = viewModel.getBaseDataSource(isShowPrompt)
// 头部提示
tipsArr = getTipsWithType(date: self.dataModel.valid_date)
tableView.reloadData()
}
@objc func didSaveBtnClicked() {
if !checkInfo() {
isShowPrompt = true
updateData()
return
}
saveAllTravelCertificate()
}
func checkInfo() -> Bool {
if urls.first?.count == 0 {
failString = "请港澳通行证正面"
return false
}
if urls.last?.count == 0 {
failString = "请港澳通行证背面"
return false
}
if self.viewModel.dataModel.cert_info.issue_start.count == 0 {
return false
}
if self.viewModel.dataModel.cert_info.issue_end.count == 0 {
return false
}
if self.viewModel.dataModel.cert_info.validate_start.count == 0 {
return false
}
if self.viewModel.dataModel.cert_info.validate_end.count == 0 {
return false
}
return true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if dataModel.cert_info.is_show {
} else {
YHAdopterCardExampleView.exampleView(type: .travel).show()
let hkPassPort: [String: Any] = ["is_show": true,
"submit": false
]
let params : [String : Any] = [
"hkPassPort": hkPassPort,
"id":dataModel.id
]
viewModel.submitResignCertificateUpdate(params) { success, error in
}
}
}
}
private extension YHResignUploadTravelHKViewController {
//1、获取详情信息
func loadDetailInfo() {
self.updateData()
}
//2、保存旅行证件
func saveAllTravelCertificate() {
let hkPassPort: [String: Any] = ["name": "港澳通行证",
"issue_start": self.viewModel.dataModel.cert_info.issue_start,
"issue_end": self.viewModel.dataModel.cert_info.issue_end,
"img_front": urls[0],
"img_back": urls[1],
"validate_start": self.viewModel.dataModel.cert_info.validate_start,
"validate_end": self.viewModel.dataModel.cert_info.validate_end,
"sign_type": "D",
"submit": true,
"is_show": true]
let params : [String : Any] = [
"hkPassPort": hkPassPort,
"id": dataModel.id
]
viewModel.submitResignCertificateUpdate(params) { success, error in
if success {
YHHUD.flash(message: "保存成功")
self.navigationController?.popViewController()
} else {
let msg = error?.errorMsg ?? "保存失败,请重试"
YHHUD.flash(message: msg)
}
}
}
}
extension YHResignUploadTravelHKViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: YHTravelCertificateTipsCell.cellReuseIdentifier, for: indexPath) as! YHTravelCertificateTipsCell
cell.userName = self.dataModel.name
cell.tipsArr = tipsArr
return cell
}
let cell = tableView.dequeueReusableCell(withIdentifier: YHResignCertificateHKTableViewCell.cellReuseIdentifier, for: indexPath) as! YHResignCertificateHKTableViewCell
cell.firstImageName = "service_adopter_card_travel_front"
cell.lastImageName = "service_adopter_card_travel_back"
cell.firstLabelName = "港澳通行证正面"
cell.lastLabelName = "港澳通行证倍面"
cell.dataModel = dataModel
cell.failString = failString
cell.data = data
cell.urls = urls
cell.urlBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
self.viewModel.getPublicImageUrl(url) {[weak self] success, error in
guard let self = self else { return }
guard let url = success else { return }
if index == 0 {
self.viewModel.getHKCardInfoByOcr(url, isBack: 0) { success, result in
YHHUD.hide()
if success, let result = result {
if !result.term_begins.isEmpty {
self.dataModel.cert_info.issue_start = result.term_begins
}
if !result.end_of_term.isEmpty {
self.dataModel.cert_info.issue_end = result.end_of_term
}
} else {
// OCR 无法识别
self.failString = "非逗留(D)签证,请检查文件"
}
self.updateData()
}
} else {
self.viewModel.getHKCardBackInfoByOcr(url, isBack: 1) { success, result in
YHHUD.hide()
if success, let result = result {
if !result.back_term_begins.isEmpty { self.dataModel.cert_info.validate_start = result.back_term_begins
}
if !result.back_end_of_term.isEmpty {
self.dataModel.cert_info.validate_end = result.back_end_of_term
}
} else {
// OCR 无法识别
self.failString = "非逗留(D)签证,请检查文件"
}
self.updateData()
}
}
}
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
if index == 0 {
self.dataModel.cert_info.img_front = ""
} else {
self.dataModel.cert_info.img_back = ""
}
}
cell.block = {[weak self] model in
guard let self = self else { return }
self.viewModel.updateModel(model)
self.dataModel = self.viewModel.dataModel
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section != 0 {
if urls[0].count == 0 && urls[1].count == 0 {
return 243
} else {
var tatol = 0
for item in data {
let isShow = item.isShowPrompts ?? false
let message = item.message ?? ""
let isNeed = item.isNeed ?? false
if isShow && message.count == 0 && isNeed {
tatol = tatol + 20
}
}
return CGFloat(521 + tatol)
}
}
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
private func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> CGFloat {
return 0.01
}
private func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> CGFloat {
return 14.0
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView()
if section == 0 {
view.backgroundColor = .white
}
return view
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let view = UIView()
return view
}
}
//
// YHResignUploadTravelPassportViewController.swift
// galaxy
//
// Created by EDY on 2024/10/10.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import AttributedString
class YHResignUploadTravelPassportViewController: YHBaseViewController {
lazy var viewModel: YHResignCertificateDetailViewModel = {
let vm = YHResignCertificateDetailViewModel()
return vm
}()
//上个界面传递过来的数据对象
var dataModel : YHResignCertificateModel = YHResignCertificateModel()
var orderId: Int = 0
var tipsArr: [ASAttributedString] = []
var urls: [String] = [""]
var data: [YHItemModel] = []
var isShowPrompt = false
var failString: String = ""
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
tableView.estimatedSectionHeaderHeight = 0.01
tableView.estimatedSectionFooterHeight = 14.0
tableView.contentInsetAdjustmentBehavior = .never
tableView.showsVerticalScrollIndicator = false
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundColor = UIColor(hex: 0xF8F9FB)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
tableView.register(YHTravelCertificateTipsCell.self, forCellReuseIdentifier: YHTravelCertificateTipsCell.cellReuseIdentifier)
tableView.register(YHResignCertificatePassportTableViewCell.self, forCellReuseIdentifier: YHResignCertificatePassportTableViewCell.cellReuseIdentifier)
return tableView
}()
let bottomViewHeight = 98.0
lazy var bottomView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.addSubview(bottomBtn)
bottomBtn.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(8)
make.height.equalTo(48)
}
return view
}()
lazy var bottomBtn: UIButton = {
let btn = UIButton()
btn.backgroundColor = .brandMainColor
btn.setTitle("确认,保存", for: .normal)
btn.setTitleColor(.white, for: .normal)
btn.titleLabel?.font = UIFont.PFSC_M(ofSize: 16)
btn.addTarget(self, action: #selector(didSaveBtnClicked), for: .touchUpInside)
btn.layer.cornerRadius = kCornerRadius3
return btn
}()
override func viewDidLoad() {
super.viewDidLoad()
self.gk_navTitle = "上传旅行证件"
self.view.backgroundColor = .white
self.view.addSubview(self.tableView)
self.view.addSubview(bottomView)
self.tableView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.bottom.equalTo(bottomView.snp.top)
}
self.bottomView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(98)
}
self.bottomView.addSubview(bottomBtn)
self.bottomBtn.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(8)
make.height.equalTo(48)
}
loadDetailInfo()
}
func getTextWithType(type: Int, date:String) -> ASAttributedString {
if type == 0 {
return .init("上传《护照》(需有效期≥签证时长+3个月)", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor(alpha: 0.5)))
}
return .init("", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor(alpha: 0.5)))
}
func getTipsWithType(date: String) -> [ASAttributedString] {
return [self.getTextWithType(type: 0, date: date)]
}
func updateData() {
// travel_cert_type 证件类型 0-未知 1-护照 3-港澳通行证
// nationality : Int = -1 国籍 1-中国 2-国外
self.viewModel.dataModel = dataModel
if dataModel.cert_info.img_front.count != 0 {
urls[0] = dataModel.cert_info.img_front
}
self.data = viewModel.getPassPortDataSource(isShowPrompt)
// 头部提示
tipsArr = getTipsWithType(date: self.dataModel.valid_date)
tableView.reloadData()
}
@objc func didSaveBtnClicked() {
if !checkInfo() {
isShowPrompt = true
updateData()
return
}
saveAllTravelCertificate()
}
func checkInfo() -> Bool {
if urls.first?.count == 0 {
failString = "请上传护照"
return false
}
if self.viewModel.dataModel.cert_info.issue_start.count == 0 {
return false
}
if self.viewModel.dataModel.cert_info.issue_end.count == 0 {
return false
}
return true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if dataModel.cert_info.is_show {
} else {
YHAdopterCardExampleView.exampleView(type: .chinaTravel).show()
let passPort: [String: Any] = ["is_show": true,
"submit": false
]
let params : [String : Any] = [
"passPort": passPort,
"id":dataModel.id
]
viewModel.submitResignCertificateUpdate(params) { success, error in
}
}
}
}
private extension YHResignUploadTravelPassportViewController {
//1、获取详情信息
func loadDetailInfo() {
self.updateData()
}
//2、保存旅行证件
func saveAllTravelCertificate() {
let passPort: [String: Any] = ["name": "护照",
"issue_start": self.viewModel.dataModel.cert_info.issue_start,
"issue_end": self.viewModel.dataModel.cert_info.issue_end,
"img_front": urls[0],
"submit": true,
"is_show": true]
let params : [String : Any] = [
"passPort": passPort,
"id": dataModel.id
]
viewModel.submitResignCertificateUpdate(params) { success, error in
if success {
YHHUD.flash(message: "保存成功")
self.navigationController?.popViewController()
} else {
let msg = error?.errorMsg ?? "保存失败,请重试"
YHHUD.flash(message: msg)
}
}
}
}
extension YHResignUploadTravelPassportViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: YHTravelCertificateTipsCell.cellReuseIdentifier, for: indexPath) as! YHTravelCertificateTipsCell
cell.userName = self.dataModel.name
cell.tipsArr = tipsArr
return cell
}
let cell = tableView.dequeueReusableCell(withIdentifier: YHResignCertificatePassportTableViewCell.cellReuseIdentifier, for: indexPath) as! YHResignCertificatePassportTableViewCell
cell.firstImageName = "service_adopter_card_china_travel_front"
cell.firstLabelName = "护照资料页"
cell.dataModel = dataModel
cell.failString = failString
cell.urls = urls
cell.data = data
cell.urlBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
self.viewModel.getPublicImageUrl(url) {[weak self] success, error in
guard let self = self else { return }
guard let url = success else { return }
self.data = viewModel.getPassPortDataSource(isShowPrompt)
self.tableView.reloadData()
}
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
if index == 0 {
self.dataModel.cert_info.img_front = ""
}
}
cell.block = {[weak self] model in
guard let self = self else { return }
self.viewModel.updateModel(model)
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section != 0 {
if urls[0].count == 0 {
return 243
} else {
var tatol = 0
for item in data {
let isShow = item.isShowPrompts ?? false
let message = item.message ?? ""
let isNeed = item.isNeed ?? false
if isShow && message.count == 0 && isNeed {
tatol = tatol + 20
}
}
return CGFloat(345 + tatol)
}
}
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
private func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> CGFloat {
return 0.01
}
private func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> CGFloat {
return 14.0
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView()
if section == 0 {
view.backgroundColor = .white
}
return view
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let view = UIView()
return view
}
}
//
// YHResignUploadTravelCardFootViewController.swift
// galaxy
//
// Created by EDY on 2024/10/10.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import JXSegmentedView
class YHResignUploadTravelCardFootViewController: YHBaseViewController {
var type: Int = 0
var imageView: UIImageView!
var linkButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
loadData()
}
}
extension YHResignUploadTravelCardFootViewController {
func loadData() {
}
func setupUI() {
gk_navBarAlpha = 0
gk_navigationBar.isHidden = true
view.backgroundColor = .white
imageView = {
let tableView = UIImageView()
return tableView
}()
view.addSubview(imageView)
var height = 0.0
if type == 0 {
height = 528.fix
imageView.image = UIImage(named: "resign_upload_travel_foot_one")
} else {
height = 699.fix
imageView.image = UIImage(named: "resign_upload_travel_foot_two")
}
imageView.snp.makeConstraints { make in
make.top.right.left.equalToSuperview()
make.height.equalTo(height)
}
if type == 1 {
linkButton = {
let tableView = UIButton(type: .custom)
tableView.addTarget(self, action: #selector(click), for: .touchUpInside)
return tableView
}()
view.addSubview(linkButton)
linkButton.snp.makeConstraints { make in
make.left.equalTo(44)
make.right.equalTo(-44)
make.top.equalTo(152.fix)
make.height.equalTo(40.fix)
}
}
view.layer.cornerRadius = kCornerRadius6
view.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMaxXMaxYCorner]
}
@objc func click() {
YHHUD.flash(message: "跳转链接")
}
}
extension YHResignUploadTravelCardFootViewController: JXSegmentedListContainerViewListDelegate {
func listView() -> UIView {
return view
}
}
//
// YHResignUploadTravelCardListfootView.swift
// galaxy
//
// Created by EDY on 2024/10/10.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import JXSegmentedView
class YHResignUploadTravelCardListfootView: UIView {
var lineView: UIView!
var titleLabel: UILabel!
var controllerOne: YHResignUploadTravelCardFootViewController = YHResignUploadTravelCardFootViewController()
var controllerTwo: YHResignUploadTravelCardFootViewController = YHResignUploadTravelCardFootViewController()
var arrItemTitles = ["大陆办理", "香港办理"]
var arrItemVCs: [YHResignUploadTravelCardFootViewController] = []
var segmentedView : JXSegmentedView = JXSegmentedView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 48))
lazy var segmentedDataSource: JXSegmentedDotDataSource = {
let dataSource = JXSegmentedDotDataSource()
dataSource.isTitleColorGradientEnabled = true
dataSource.titles = arrItemTitles
dataSource.titleNormalFont = UIFont.PFSC_M(ofSize: 14)
dataSource.titleNormalColor = .labelTextColor2
dataSource.titleSelectedFont = UIFont.PFSC_M(ofSize: 14)
dataSource.titleSelectedColor = .mainTextColor
dataSource.isItemSpacingAverageEnabled = false
dataSource.itemWidth = JXSegmentedViewAutomaticDimension
dataSource.itemSpacing = 16
dataSource.dotStates = [false, false, false, false]
dataSource.dotSize = CGSize(width: 6, height: 6)
return dataSource
}()
//分类title 所对应的VC
lazy var listContainerView: JXSegmentedListContainerView! = {
return JXSegmentedListContainerView(dataSource: self, type: .scrollView)
}()
override init(frame: CGRect) {
super.init(frame: frame)
setUpView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setUpView() {
backgroundColor = .clear
lineView = {
let view = UIView()
view.backgroundColor = UIColor.brandMainColor
return view
}()
addSubview(lineView)
lineView.snp.remakeConstraints { make in
make.left.equalTo(16)
make.top.equalTo(38)
make.height.equalTo(12)
make.width.equalTo(3)
}
titleLabel = {
let view = UILabel()
view.text = "港澳通行证逗留(D)签注延期-办理指引"
view.font = UIFont.PFSC_M(ofSize: 17)
view.textColor = UIColor.mainTextColor
return view
}()
addSubview(titleLabel)
titleLabel.snp.remakeConstraints { make in
make.left.equalTo(27)
make.centerY.equalTo(lineView.snp.centerY)
make.height.equalTo(24)
make.right.equalToSuperview()
}
controllerOne.type = 0
controllerTwo.type = 1
arrItemVCs.append(controllerOne)
arrItemVCs.append(controllerTwo)
//segmentedViewDataSource一定要通过属性强持有!!!!!!!!!
// segmentedView.backgroundColor = .clear
segmentedView.collectionView.backgroundColor = .white
// segmentedView.contentScrollView?.backgroundColor = .clear
addSubview(segmentedView)
segmentedView.listContainer = listContainerView
addSubview(listContainerView)
//分类Title
segmentedView.dataSource = segmentedDataSource
segmentedView.delegate = self
//配置指示器
let indicator = JXSegmentedIndicatorLineView()
indicator.indicatorWidth = 16
indicator.indicatorColor = UIColor.brandMainColor
indicator.indicatorHeight = 2
indicator.indicatorCornerRadius = 0
indicator.verticalOffset = 4
segmentedView.indicators = [indicator]
segmentedView.backgroundColor = UIColor(red: 0.95, green: 0.95, blue: 0.95, alpha: 1)
segmentedView.snp.remakeConstraints { make in
make.right.equalTo(-16)
make.left.equalTo(16)
make.top.equalTo(82)
make.height.equalTo(44)
}
listContainerView.snp.remakeConstraints { make in
make.right.equalTo(-16)
make.left.equalTo(16)
make.top.equalTo(segmentedView.snp.bottom)
make.height.equalTo(528.fix)
}
let whiteView = UIView()
whiteView.backgroundColor = .white
whiteView.layer.cornerRadius = kCornerRadius6
whiteView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
addSubview(whiteView)
whiteView.snp.remakeConstraints { make in
make.bottom.equalTo(segmentedView.snp.top)
make.right.equalTo(-16)
make.left.equalTo(16)
make.height.equalTo(6)
}
}
}
extension YHResignUploadTravelCardListfootView: JXSegmentedViewDelegate {
func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
if index == 0 {
listContainerView.snp.remakeConstraints { make in
make.right.equalTo(-16)
make.left.equalTo(16)
make.top.equalTo(segmentedView.snp.bottom)
make.height.equalTo(528.fix)
}
} else {
listContainerView.snp.remakeConstraints { make in
make.right.equalTo(-16)
make.left.equalTo(16)
make.top.equalTo(segmentedView.snp.bottom)
make.bottom.equalTo(-16)
}
}
// NotificationCenter.default.post(name: Notification.Name(rawValue: "scrollViewDidEndDragging"), object: nil)
}
/// 正在滚动中的回调
///
/// - Parameters:
/// - segmentedView: JXSegmentedView
/// - leftIndex: 正在滚动中,相对位置处于左边的index
/// - rightIndex: 正在滚动中,相对位置处于右边的index
/// - percent: 从左往右计算的百分比
func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {
// NotificationCenter.default.post(name: Notification.Name(rawValue: "scrollViewWillBeginDragging"), object: nil)
}
}
extension YHResignUploadTravelCardListfootView: JXSegmentedListContainerViewDataSource {
func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
if let titleDataSource = segmentedView.dataSource as? JXSegmentedBaseDataSource {
return titleDataSource.dataSource.count
}
return 0
}
func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
return arrItemVCs[index] as! JXSegmentedListContainerViewListDelegate
}
}
//
// YHResignUploadTravelCardListheadView.swift
// galaxy
//
// Created by EDY on 2024/10/10.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHResignUploadTravelCardListheadView: UIView {
var fileImageView: UIImageView!
override init(frame: CGRect) {
super.init(frame: frame)
setUpView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setUpView() {
fileImageView = {
let view = UIImageView()
view.image = UIImage(named: "resign_upload_travel_head")
return view
}()
addSubview(fileImageView)
fileImageView.snp.makeConstraints { make in
make.right.equalTo(-16)
make.top.left.equalTo(16)
make.height.equalTo(90.fix)
}
}
}
//
// YHResignUploadTravelGuideView.swift
// galaxy
//
// Created by EDY on 2024/10/10.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHResignUploadTravelGuideView: UIView {
typealias Block = () -> ()
var block: Block?
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hex: 0x0F1214, alpha: 0.5)
// let tap = UITapGestureRecognizer(target: self, action: #selector(dismiss))
// view.addGestureRecognizer(tap)
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
lazy var bottomView: UIView = {
let view = UIView()
view.backgroundColor = .clear
view.addSubview(self.rewardBtn)
self.rewardBtn.snp.makeConstraints { make in
make.top.equalToSuperview().offset(10)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.height.equalTo(44)
}
view.layer.zPosition = 10
return view
}()
//我已知悉,确认
lazy var rewardBtn: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 15)
button.contentHorizontalAlignment = .center
button.setTitle("知道了", for: .normal)
button.setTitleColor(UIColor.white, for: .normal)
button.layer.cornerRadius = kCornerRadius3
button.clipsToBounds = true
button.addTarget(self, action: #selector(clickSureBtn), for: .touchUpInside)
button.backgroundColor = UIColor.brandMainColor
return button
}()
lazy var myScrollView: UIScrollView = {
let view = UIScrollView()
view.backgroundColor = .clear
view.showsVerticalScrollIndicator = false
view.delegate = self
return view
}()
lazy var bkgImageV: UIImageView = {
let imageV = UIImageView()
imageV.image = UIImage(named: "official_approval_guideline")
imageV.contentMode = .scaleToFill
imageV.clipsToBounds = true
return imageV
}()
lazy var bkgImageV2: UIImageView = {
let imageV = UIImageView()
imageV.image = UIImage(named: "official_approval_guideline_bkg")
imageV.contentMode = .scaleToFill
imageV.clipsToBounds = true
return imageV
}()
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
private var timer : Timer?
private var maxCount : Int = 5
//之前是否展示过
var ischeckBeforeFlag : Bool = false {
didSet {
if ischeckBeforeFlag {
setButtonEnable(true)
} else {
setButtonEnable(false)
startTimer()
}
}
}
}
extension YHResignUploadTravelGuideView {
static func sheetView() -> YHResignUploadTravelGuideView {
let view = YHResignUploadTravelGuideView(frame:UIScreen.main.bounds)
return view
}
func show() {
UIApplication.shared.yhKeyWindow()?.addSubview(self)
UIView.animate(withDuration: 0.5) {
let whiteHeight = KScreenHeight - k_Height_NavigationtBarAndStatuBar
self.whiteContentView.frame = CGRect(x: 0, y: KScreenHeight - whiteHeight, width: KScreenWidth, height: whiteHeight)
}
}
@objc func dismiss() {
self.removeFromSuperview()
}
@objc func clickSureBtn() {
self.block?()
dismiss()
}
}
private extension YHResignUploadTravelGuideView {
@objc func timerFired() {
// 定时器触发时执行的代码
print("Timer fired")
self.maxCount = self.maxCount - 1
if self.maxCount < 0 {
self.stopTimer()
self.setButtonEnable(true)
} else {
rewardBtn.setTitle("请上滑看完指引后操作(\(maxCount)s)", for: .normal)
}
}
func startTimer() {
stopTimer()
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: true)
RunLoop.current.add(timer!, forMode: .common)
}
func stopTimer() {
maxCount = 5
timer?.invalidate()
timer = nil
}
func setButtonEnable(_ enable : Bool) {
rewardBtn.isEnabled = enable
if enable {
rewardBtn.setTitle("我已知悉,确认", for: .normal)
rewardBtn.backgroundColor = UIColor.brandMainColor
} else {
rewardBtn.setTitle("请上滑看完指引后操作(5s)", for: .normal)
rewardBtn.backgroundColor = UIColor(hex: 0xB7C0CC, alpha: 1.0)
}
}
func setupUI() {
self.addSubview(blackMaskView)
self.addSubview(whiteContentView)
let corner = UIRectCorner(rawValue: UIRectCorner.topLeft.rawValue | UIRectCorner.topRight.rawValue)
let path = UIBezierPath(roundedRect:bounds,byRoundingCorners: corner,cornerRadii:CGSizeMake(kCornerRadius6, kCornerRadius6));
let layer = CAShapeLayer();
layer.frame = whiteContentView.bounds;
layer.path = path.cgPath;
whiteContentView.layer.mask = layer;
whiteContentView.clipsToBounds = true
blackMaskView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
let whiteHeight = KScreenHeight - k_Height_NavigationtBarAndStatuBar
// whiteContentView.snp.makeConstraints { make in
// make.left.right.bottom.equalToSuperview()
// make.height.equalTo(whiteHeight)
// }
whiteContentView.frame = CGRect(x: 0, y: KScreenHeight, width: KScreenWidth, height: whiteHeight)
whiteContentView.addSubview(bkgImageV2)
bkgImageV2.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(375)
}
whiteContentView.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(98)
}
whiteContentView.addSubview(myScrollView)
myScrollView.snp.makeConstraints { make in
make.top.equalToSuperview().offset(20)
make.right.equalToSuperview()
make.width.equalTo(KScreenWidth)
make.height.equalTo(whiteHeight-98 - 20)
}
if let tmpImage = UIImage(named:"official_approval_guideline") {
let scale = Double(tmpImage.size.height / tmpImage.size.width)
let imageH = scale * KScreenWidth
myScrollView.addSubview(bkgImageV)
bkgImageV.snp.makeConstraints { make in
make.top.left.equalToSuperview()
make.width.equalTo(KScreenWidth)
make.height.equalTo(imageH)
}
myScrollView.contentSize = CGSize(width: KScreenWidth, height: imageH)
}
let button = UIButton(type: .custom)
button.setBackgroundImage(UIImage(named: "service_card_close"), for: .normal)
button.addTarget(self, action: #selector(clickSureBtn), for: .touchUpInside)
whiteContentView.addSubview(button)
button.snp.makeConstraints { make in
make.right.equalTo(-21)
make.width.height.equalTo(24)
make.top.equalTo(16)
}
}
}
extension YHResignUploadTravelGuideView : UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if !ischeckBeforeFlag {
let scrollViewContentHeight = scrollView.contentSize.height
let scrollOffsetThreshold = scrollViewContentHeight - scrollView.bounds.size.height
// 当前滚动位置
let currentOffset = scrollView.contentOffset.y
if currentOffset > scrollOffsetThreshold { // 接近底部
// 滚动到了底部
ischeckBeforeFlag = true
stopTimer()
setButtonEnable(true)
} else {
// 没有滚动到底部
}
}
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "resign_upload_travel_foot_one@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "resign_upload_travel_foot_one@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "resign_upload_travel_foot_two@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "resign_upload_travel_foot_two@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "resign_upload_travel_head@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "resign_upload_travel_head@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment