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

证件管理小白条 身份证 电子签证

parent 61a428ab
......@@ -197,6 +197,13 @@
044EE22D2C9184CD00A2FE3A /* YHServiceMoreAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE22C2C9184CD00A2FE3A /* YHServiceMoreAlertView.swift */; };
044EE22F2C918D1400A2FE3A /* YHServiceStepAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE22E2C918D1400A2FE3A /* YHServiceStepAlertView.swift */; };
044EE2362C92916600A2FE3A /* YHResignCertificateListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2352C92916600A2FE3A /* YHResignCertificateListViewController.swift */; };
044EE2382C92BBC500A2FE3A /* YHResignCertificateListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2372C92BBC500A2FE3A /* YHResignCertificateListTableViewCell.swift */; };
044EE23A2C92BEF900A2FE3A /* YHResignCertificateListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2392C92BEF900A2FE3A /* YHResignCertificateListViewModel.swift */; };
044EE23C2C92BFDC00A2FE3A /* YHResignCertificateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE23B2C92BFDC00A2FE3A /* YHResignCertificateModel.swift */; };
044EE23E2C92E27500A2FE3A /* YHResignCertificateDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE23D2C92E27500A2FE3A /* YHResignCertificateDetailViewController.swift */; };
044EE2402C92E6C000A2FE3A /* YHResignCertificateDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE23F2C92E6C000A2FE3A /* YHResignCertificateDetailViewModel.swift */; };
044EE2422C92EF0C00A2FE3A /* YHResignCertificateDetailEVisaViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2412C92EF0C00A2FE3A /* YHResignCertificateDetailEVisaViewController.swift */; };
044EE2442C92F48200A2FE3A /* YHResignCertificateEvisaTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2432C92F48200A2FE3A /* YHResignCertificateEvisaTableViewCell.swift */; };
04506F552C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04506F542C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift */; };
045A08C02C37ABF500BCBABA /* YHSegmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045A08BF2C37ABF500BCBABA /* YHSegmentView.swift */; };
045A08C22C37EB8B00BCBABA /* YHMyFileListNoneCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045A08C12C37EB8B00BCBABA /* YHMyFileListNoneCell.swift */; };
......@@ -987,6 +994,13 @@
044EE22C2C9184CD00A2FE3A /* YHServiceMoreAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHServiceMoreAlertView.swift; sourceTree = "<group>"; };
044EE22E2C918D1400A2FE3A /* YHServiceStepAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHServiceStepAlertView.swift; sourceTree = "<group>"; };
044EE2352C92916600A2FE3A /* YHResignCertificateListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignCertificateListViewController.swift; sourceTree = "<group>"; };
044EE2372C92BBC500A2FE3A /* YHResignCertificateListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignCertificateListTableViewCell.swift; sourceTree = "<group>"; };
044EE2392C92BEF900A2FE3A /* YHResignCertificateListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignCertificateListViewModel.swift; sourceTree = "<group>"; };
044EE23B2C92BFDC00A2FE3A /* YHResignCertificateModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignCertificateModel.swift; sourceTree = "<group>"; };
044EE23D2C92E27500A2FE3A /* YHResignCertificateDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignCertificateDetailViewController.swift; sourceTree = "<group>"; };
044EE23F2C92E6C000A2FE3A /* YHResignCertificateDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignCertificateDetailViewModel.swift; sourceTree = "<group>"; };
044EE2412C92EF0C00A2FE3A /* YHResignCertificateDetailEVisaViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignCertificateDetailEVisaViewController.swift; sourceTree = "<group>"; };
044EE2432C92F48200A2FE3A /* YHResignCertificateEvisaTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignCertificateEvisaTableViewCell.swift; sourceTree = "<group>"; };
04506F542C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHFamilyMemberInfoCell.swift; sourceTree = "<group>"; };
045A08BF2C37ABF500BCBABA /* YHSegmentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHSegmentView.swift; sourceTree = "<group>"; };
045A08C12C37EB8B00BCBABA /* YHMyFileListNoneCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyFileListNoneCell.swift; sourceTree = "<group>"; };
......@@ -2158,6 +2172,8 @@
044EE2312C9290FB00A2FE3A /* VM */ = {
isa = PBXGroup;
children = (
044EE2392C92BEF900A2FE3A /* YHResignCertificateListViewModel.swift */,
044EE23F2C92E6C000A2FE3A /* YHResignCertificateDetailViewModel.swift */,
);
path = VM;
sourceTree = "<group>";
......@@ -2165,6 +2181,8 @@
044EE2322C92910100A2FE3A /* V */ = {
isa = PBXGroup;
children = (
044EE2372C92BBC500A2FE3A /* YHResignCertificateListTableViewCell.swift */,
044EE2432C92F48200A2FE3A /* YHResignCertificateEvisaTableViewCell.swift */,
);
path = V;
sourceTree = "<group>";
......@@ -2172,6 +2190,7 @@
044EE2332C92910700A2FE3A /* M */ = {
isa = PBXGroup;
children = (
044EE23B2C92BFDC00A2FE3A /* YHResignCertificateModel.swift */,
);
path = M;
sourceTree = "<group>";
......@@ -2180,6 +2199,8 @@
isa = PBXGroup;
children = (
044EE2352C92916600A2FE3A /* YHResignCertificateListViewController.swift */,
044EE23D2C92E27500A2FE3A /* YHResignCertificateDetailViewController.swift */,
044EE2412C92EF0C00A2FE3A /* YHResignCertificateDetailEVisaViewController.swift */,
);
path = C;
sourceTree = "<group>";
......@@ -4688,6 +4709,7 @@
049663BA2BF6105C003C8295 /* YHRefreshHeaderAnimator.swift in Sources */,
A5C382D12B5FAAB300C5E65C /* YHContactItemModel.swift in Sources */,
04B360F52C646844001EB053 /* YHPrincipleApprovedMailViewController.swift in Sources */,
044EE23C2C92BFDC00A2FE3A /* YHResignCertificateModel.swift in Sources */,
049D62C22C6F258700E811A1 /* YHFamilyInfoConfirmViewController.swift in Sources */,
0430E64C2C732821000511E2 /* YHNoAdopterAlertView.swift in Sources */,
04CE1ADE2C2AD91F001CB80A /* YHActivityTravelCell.swift in Sources */,
......@@ -4761,6 +4783,7 @@
04B360E32C60A346001EB053 /* YHPrinciplePhotoListCell.swift in Sources */,
04213B292C48EF5300797900 /* YHHomeInformationViewController.swift in Sources */,
A5DF9C692C78BE6000CE48E6 /* YHUploadCertificateDetailModel.swift in Sources */,
044EE2442C92F48200A2FE3A /* YHResignCertificateEvisaTableViewCell.swift in Sources */,
048B2A4D2BC7DAE800A93BF0 /* YHMyLikeViewModel.swift in Sources */,
04C693622B723AB8004C1758 /* YHMySettingViewController.swift in Sources */,
045EEECD2B9F171A0022A143 /* YHScoreDataModel.swift in Sources */,
......@@ -4877,6 +4900,7 @@
A56D2D612B62020C009C83A8 /* YHContractMainItemStatusCell.swift in Sources */,
045EEECF2B9F171A0022A143 /* YHScoreOptionsView.swift in Sources */,
04CE1AD22C2AD91F001CB80A /* YHActivityModel.swift in Sources */,
044EE23A2C92BEF900A2FE3A /* YHResignCertificateListViewModel.swift in Sources */,
04256E002C7440A500A37BA4 /* YHFamilyWarmTipsCell.swift in Sources */,
0445E6AF2BE9CFF6003C52F9 /* YHAppVersionForceUpdateView.swift in Sources */,
04213B272C48C95E00797900 /* YHHomeIdentityCell.swift in Sources */,
......@@ -4947,6 +4971,7 @@
04256DFE2C743CB700A37BA4 /* YHCertificateInfoPhotoCell.swift in Sources */,
04EA23082BB50753009DA928 /* YHDocumentMessageTableViewCell.swift in Sources */,
045EEE8E2B9F171A0022A143 /* YHPreviewInfoWorkSummaryView.swift in Sources */,
044EE2402C92E6C000A2FE3A /* YHResignCertificateDetailViewModel.swift in Sources */,
045EEECE2B9F171A0022A143 /* YHScoreDetailViewController.swift in Sources */,
04ADBCA42C36906000C37F10 /* YHHeadImageViewController.swift in Sources */,
045EEE852B9F171A0022A143 /* YHPreviewFamilyMemberViewController.swift in Sources */,
......@@ -5118,6 +5143,7 @@
045EEE952B9F171A0022A143 /* YHPreviewInfoCertificateInformationItemsView.swift in Sources */,
044D0C042C2180B700C5CF5E /* YHInformationAuthorizationStepTwoViewController.swift in Sources */,
045EEEBB2B9F171A0022A143 /* YHWorkIntroductionTableViewCell.swift in Sources */,
044EE2382C92BBC500A2FE3A /* YHResignCertificateListTableViewCell.swift in Sources */,
045EEEED2B9F171A0022A143 /* YHParentInfoVC.swift in Sources */,
04A7BC912B6B7B89000E8D47 /* YHTwoOptionAlertView.swift in Sources */,
A5F886B62C61F76200B63CF5 /* YHLongtapPictureSheetView.swift in Sources */,
......@@ -5133,6 +5159,7 @@
045EEF172B9F171A0022A143 /* YHSelectCountryViewController.swift in Sources */,
044CF8D62BBA57DC00008CE8 /* YHFailPromptView.swift in Sources */,
04506F552C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift in Sources */,
044EE23E2C92E27500A2FE3A /* YHResignCertificateDetailViewController.swift in Sources */,
04256E102C75BD2700A37BA4 /* YHVisaPaymentVC.swift in Sources */,
A5ACE9562B4564F7002C94D2 /* YHBouncesContentView.swift in Sources */,
A554A5122B99715000EA5973 /* YHConstantArrayData.swift in Sources */,
......@@ -5174,6 +5201,7 @@
04EA230A2BB5172F009DA928 /* YHDocumentPromptTableViewCell.swift in Sources */,
A5EB6C6F2C69FB9A0081FB6C /* YHOfficalLetterListModel.swift in Sources */,
045EEF092B9F171A0022A143 /* YHBasicInfoFillModel.swift in Sources */,
044EE2422C92EF0C00A2FE3A /* YHResignCertificateDetailEVisaViewController.swift in Sources */,
A5ACE9352B4564F7002C94D2 /* YHNetRequest.swift in Sources */,
A5FD63CB2B63D6C300D1D9DA /* YHInformationFillTipsCell.swift in Sources */,
04F9574B2C2032D8003C631C /* YHMyFriendsCell.swift in Sources */,
......
......@@ -171,6 +171,9 @@ extension YHServiceOrderListView : UITableViewDelegate,UITableViewDataSource {
//添加在港记录
} else if tag == 4 {
//续签证件管理
let vc = YHResignCertificateListViewController()
vc.orderId = orderID
UIViewController.current?.navigationController?.pushViewController(vc)
}
}
return view
......
//
// YHResignCertificateDetailEVisaViewController.swift
// galaxy
//
// Created by EDY on 2024/9/12.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import IQKeyboardManagerSwift
class YHResignCertificateDetailEVisaViewController: YHBaseViewController {
var tableView: UITableView!
var nextButton: UIButton!
var clickIndex = -1
var file: [YHWorkExperienceFileModel] = []
var data: YHResignCertificateModel = YHResignCertificateModel()
var viewModel: YHResignCertificateDetailViewModel = YHResignCertificateDetailViewModel()
var orderId: Int = 0
lazy var previewFileTool:YHFilePreviewTool = {
let tool = YHFilePreviewTool(targetVC: self)
return tool
}()
override func viewDidLoad() {
super.viewDidLoad()
gk_navTitle = "上传电子签证"
gk_navBarAlpha = 1
gk_navBackgroundColor = .white
setView()
getData()
}
func getData() {
if data.cert_info.e_visa_url.count != 0 {
let model = YHWorkExperienceFileModel()
model.fileName = data.cert_info.name
model.fileUrl = data.cert_info.e_visa_url
model.uploadedAt = data.cert_info.upload_at
file = [model]
}
tableView.reloadData()
}
func setView() {
tableView = {
let tableView = UITableView(frame:.zero, style:.plain)
tableView.contentInsetAdjustmentBehavior = .never
tableView.backgroundColor = .clear
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.register(cellWithClass: YHResignCertificateEvisaTableViewCell.self)
return tableView
}()
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 8)
make.bottom.left.right.equalTo(view)
}
nextButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.brandMainColor
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 16)
button.contentHorizontalAlignment = .center
button.setTitle("确认,保存", for: .normal)
button.setTitleColor( UIColor(hex:0xffffff), for: .normal)
button.layer.cornerRadius = kCornerRadius3
button.addTarget(self, action: #selector(nextStep), for: .touchUpInside)
return button
}()
view.addSubview(nextButton)
nextButton.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.bottom.equalTo(-8 - k_Height_safeAreaInsetsBottom())
make.height.equalTo(48)
}
}
@objc func nextStep() {
if file.count != 0 {
let eVisa: [String: Any] = ["name": "电子签证",
"e_visa_url": file.first?.fileUrl ?? "",
"upload_at": file.first?.uploadedAt ?? ""]
let params : [String : Any] = [
"eVisa": eVisa,
"id": data.id
]
viewModel.submitResignCertificateUpdate(params) { success, error in
if success {
YHHUD.flash(message: "保存成功")
self.navigationController?.popViewController()
} else {
let msg = error?.errorMsg ?? "保存失败,请重试"
YHHUD.flash(message: msg)
}
}
} else {
YHHUD.flash(message: "请上传电子签证")
}
}
func getFileNameWithoutSuffix(_ string: String) -> String {
if string.isEmpty {
return string
}
if !string.contains(".") {
return string
}
if !string.pathExtension.isEmpty {
let fileName = (string as NSString).deletingPathExtension
return fileName
}
return ""
}
func uploadImage(_ img: UIImage, imageName:String, callBack:((Bool, String)->())?) {
// 先OSS上传得到URL
self.viewModel.uploadImage(img) {
[weak self] url, error in
guard self != nil else { return }
if let url = url, !url.isEmpty {
callBack?(true, url)
return
}
callBack?(false, "")
}
}
func uploadFile(_ fileUrl:URL) {
if let fileData = try? Data(contentsOf: fileUrl) {
// 将文件数据上传到服务器
let size = String(format: "%.2fM", Double(fileData.count)/(1024.0 * 1024.0))
// print("\(size)")
// 先OSS上传得到URL
YHHUD.show(.progress(message: "上传中..."))
self.viewModel.uploadFile(fileUrl.absoluteString) {
[weak self] successUrl, error in
YHHUD.hide()
guard let self = self else { return }
// 再调用业务接口
if let successUrl = successUrl, !successUrl.isEmpty {
var fileName = fileUrl.lastPathComponent
if fileName.isEmpty {
fileName = successUrl.lastPathComponent
}
let suffixName = successUrl.pathExtension.lowercased()
let timestamp = Date().timeIntervalSince1970
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy.MM.dd HH:mm:ss"
let currentDate = Date()
let formattedDate = dateFormatter.string(from: currentDate)
let model = YHWorkExperienceFileModel()
model.fileUrl = successUrl
model.fileName = fileName
model.uploadedAt = formattedDate
self.file = [model]
self.tableView.reloadData()
YHHUD.flash(message: "上传成功")
return
}
var msg = "上传文件失败"
if let errorMsg = error?.errorMsg, !errorMsg.isEmpty {
msg = errorMsg
}
YHHUD.flash(message: msg)
}
} else {
YHHUD.flash(message: "识别文件失败")
}
}
}
extension YHResignCertificateDetailEVisaViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withClass: YHResignCertificateEvisaTableViewCell.self)
let str = "* " + data.name + "的电子签证"
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.PFSC_M(ofSize: 17),
.foregroundColor: UIColor.mainTextColor
]
let questionAttrStr = NSMutableAttributedString(string: str, attributes: attributes)
let starRange = NSRange(location: 0, length: 2)
questionAttrStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.failColor, range: starRange)
cell.titleLabel.attributedText = questionAttrStr
cell.dataSource = self.file
cell.experienceListBlock = {[weak self] model, type in
guard let self = self else { return }
if type == .click {
self.viewModel.getPublicImageUrl(model.fileUrl) { success, error in
YHHUD.hide()
if let success = success {
self.previewFileTool.openXLSXRemoteFile(urlString: success, fileName: "")
}
}
}
if type == .delete {
let items = [YHCertificateEditItem(type:.preview, title:"预览"),
YHCertificateEditItem(type:.rename, title:"重命名"),
YHCertificateEditItem(type:.delete, title:"删除"),
YHCertificateEditItem(type:.cancel, title:"取消")]
YHCertificateEditSheetView.sheetView(items:items) {
[weak self] editType in
guard let self = self else { return }
if editType == .rename {
IQKeyboardManager.shared.enable = false
var name = getFileNameWithoutSuffix(model.fileName)
if name.count > 30 {
name = name[safe: ..<30]!
}
let view = YHPrincipleFileRenameView.renameView(name: name)
view.confirmBlock = {
[weak self] text in
guard let self = self else { return }
model.fileName = text
self.tableView.reloadData()
}
view.show()
} else if editType == .delete { // 删除
file = []
self.tableView.reloadData()
} else if editType == .preview { // 预览
self.viewModel.getPublicImageUrl(model.fileUrl) { success, error in
YHHUD.hide()
if let success = success {
self.previewFileTool.openXLSXRemoteFile(urlString: success, fileName: "")
}
}
}
}.show()
}
}
cell.newFileBlock = {[weak self] in
guard let self = self else { return }
let sheetView = YHCertificateUploadSheetView.sheetView()
sheetView.tips = "支持的文件格式为jpg/jpeg、png、pdf,最多可上传1张图片或文件"
sheetView.maxSelectImageCount = 1
sheetView.fileTypes = [ "public.image",
"com.adobe.pdf"]
sheetView.uploadFilesBlock = {
[weak self] fileUrl in
guard let self = self else { return }
print(fileUrl)
uploadFile(fileUrl)
}
sheetView.uploadImageBlock = {
[weak self] imgArr in
guard let self = self else { return }
let group = DispatchGroup()
var successArr:[String] = []
var failArr:[YHSelectImageItem] = []
YHHUD.show(.progress(message: "上传中..."))
for item in imgArr {
if let image = item.data {
group.enter()
uploadImage(image, imageName:item.name) {
success, url in
if success {
successArr.append(url)
} else {
failArr.append(item)
}
group.leave()
}
}
}
// 等待所有任务完成
group.notify(queue: .main) {
YHHUD.hide()
// 所有任务完成,回到主线程继续执行
if imgArr.count == successArr.count {
YHHUD.flash(message: "上传成功")
for item in successArr {
let timestamp = Date().timeIntervalSince1970
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy.MM.dd HH:mm:ss"
let currentDate = Date()
let formattedDate = dateFormatter.string(from: currentDate)
let model = YHWorkExperienceFileModel()
model.fileUrl = item
model.fileName = "\(UInt64(timestamp))" + ".jpg"
model.uploadedAt = formattedDate
self.file.append(model)
}
self.tableView.reloadData()
} else {
YHHUD.flash(message: "\(successArr.count)张照片上传成功\n\(failArr.count)张照片上传失败")
}
}
}
sheetView.show()
}
return cell
}
return UITableViewCell()
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 145
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
}
//
// YHResignCertificateDetailViewController.swift
// galaxy
//
// Created by EDY on 2024/9/12.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHResignCertificateDetailViewController: YHBaseViewController {
lazy var viewModel: YHResignCertificateDetailViewModel = {
let vm = YHResignCertificateDetailViewModel()
return vm
}()
var dataModel : YHResignCertificateModel = YHResignCertificateModel() {
didSet {
}
}
var detailType : UploadCertificateDetailType = .SmallWhiteNote
var canEditFlag : Bool = true //已上传状态也可以重新传
lazy var uploadImageVM: YHBaseViewModel = {
let vm = YHBaseViewModel()
return vm
}()
lazy var topImgView: UIImageView = {
let view = UIImageView(image: UIImage(named: "xbt_tips")) // 343 90
view.layer.cornerRadius = kCornerRadius6
view.clipsToBounds = true
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
view.clipsToBounds = true
view.backgroundColor = .white
return view
}()
private lazy var titleTextView : UITextView = {
let lable0 = UITextView()
lable0.textColor = UIColor.mainTextColor
lable0.font = UIFont.PFSC_M(ofSize: 17)
lable0.isScrollEnabled = false
lable0.isEditable = false
lable0.isSelectable = false
return lable0
}()
private lazy var customLabel : UILabel = {
let lable = UILabel(frame: CGRect(x: 0, y: 0, width: 48, height: 16))
lable.text = "示例模板"
lable.font = .PFSC_M(ofSize: 10)
lable.backgroundColor = UIColor(hex:0x2F7EF6,transparency: 0.08)
lable.textColor = .brandMainColor
lable.layer.cornerRadius = kCornerRadius3
lable.clipsToBounds = true
lable.textAlignment = .center
lable.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(tapExampleMudel))
lable.addGestureRecognizer(tap)
return lable
}()
lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
private lazy var cardLabel : UILabel = {
let lable = UILabel()
lable.text = "小白条正面"
lable.font = .PFSC_R(ofSize: 12)
lable.textColor = UIColor.mainTextColor50
lable.clipsToBounds = true
lable.textAlignment = .center
return lable
}()
private lazy var cardButton : YHCardButton = {
let button = YHCardButton()
button.setContent("card_upload", "点击上传")
button.setBackgroundImage(UIImage(named: "service_cn_card_front"), for: .normal)
button.addTarget(self, action: #selector(clickCardButton), for: .touchUpInside)
button.layer.cornerRadius = kCornerRadius4
button.clipsToBounds = true
return button
}()
private lazy var delImageButton : UIButton = {
let button = UIButton(type: .custom)
button.setBackgroundImage(UIImage(named: "service_card_delete"), for: .normal)
button.addTarget(self, action: #selector(clickDelImageBtn), for: .touchUpInside)
button.isHidden = true
return button
}()
private lazy var startDateItem : YHUploadCertificateDateItem = {
let view = YHUploadCertificateDateItem()
return view
}()
private var startDateStr : String = ""
private var endDateStr : String = ""
private var uploadImageUrl : String = ""
private lazy var endDateItem : YHUploadCertificateDateItem = {
let view = YHUploadCertificateDateItem()
return view
}()
lazy var bottomView : YHFileListBottomView = {
let view = YHFileListBottomView()
view.updateBtnTitle(title: "确认,保存")
view.block = { tag in
self.submitInfo()
}
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
loadData()
}
}
// MARK: - 私有方法
private extension YHResignCertificateDetailViewController {
func isAllInfoOK() -> Bool {
if uploadImageUrl.isEmpty {
var txt = ""
if detailType == .SmallWhiteNote {
txt = "上传小白条"
} else {
txt = "上传香港身份证"
}
YHHUD.flash(message: txt)
return false
}
if detailType == .SmallWhiteNote {
if startDateStr.isEmpty {
YHHUD.flash(message: "选择入境日期")
startDateItem.needCheckMustFlag = true
endDateItem.needCheckMustFlag = true
return false
}
if endDateStr.isEmpty {
YHHUD.flash(message: "选择逗留截止日期")
startDateItem.needCheckMustFlag = true
endDateItem.needCheckMustFlag = true
return false
}
//检验先后 startDateStr < endDateStr
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
// 假设我们有两个日期
if let date1 = dateFormatter.date(from: startDateStr),let date2 = dateFormatter.date(from: endDateStr) {
// 使用Calendar比较两个日期
let calendar = Calendar.current
// 比较结果
let isDate1Earlier = calendar.compare(date1, to: date2, toGranularity: .day) == .orderedAscending
if isDate1Earlier {
print("date1 在 date2 之前")
} else {
YHHUD.flash(message: "逗留截止日期必须晚于入境日期")
return false
}
}
}
return true
}
func submitInfo() {
if isAllInfoOK() {
if detailType == .SmallWhiteNote {
submitSmallWhiteBarInfo()
} else {
submitHKIDCarInfo()
}
}
}
func submitSmallWhiteBarInfo() {
let smallWhiteBar: [String: Any] = ["name": "小白条",
"small_white_note_url":uploadImageUrl,
"small_white_note_validity_start":startDateStr,
"small_white_note_validity_end":endDateStr
]
let params : [String : Any] = [
"smallWhiteBar": smallWhiteBar,
"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)
}
}
}
func submitHKIDCarInfo() {
let hkIdCard: [String: Any] = ["name": "香港身份证",
"idcard_url":uploadImageUrl]
let params : [String : Any] = [
"hkIdCard": hkIdCard,
"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)
}
}
}
@objc func tapItem(gestureRecognizer:UITapGestureRecognizer) {
var title = ""
var defaultDate = ""
if gestureRecognizer.view == startDateItem {
title = "选择入境日期"
defaultDate = startDateStr
} else {
title = "选择逗留截止日期"
defaultDate = endDateStr
}
YHDatePickView.show(type: .yyyymmdd, title:title, lastIsTaday: false, currentDay: defaultDate) { [weak self] dateStr in
guard let self = self else { return }
if gestureRecognizer.view == startDateItem {
startDateStr = dateStr
startDateItem.updateDate(date: dateStr)
} else {
endDateStr = dateStr
endDateItem.updateDate(date: dateStr)
}
}
}
@objc func clickDelImageBtn() {
cardButton.setContent("card_upload", "点击上传")
cardButton.setBackgroundImage(UIImage(named: "service_cn_card_front"), for: .normal)
delImageButton.isHidden = true
self.uploadImageUrl = ""
}
@objc func tapExampleMudel() {
if detailType == .SmallWhiteNote {
let view = YHSmallWhiteNoteTemplateView.sheetView()
view.show()
} else if detailType == .HongKongCard {
let view = YHHKCardTemplateView.sheetView()
view.show()
}
}
@objc func clickCardButton() {
if uploadImageUrl.isEmpty {
//选择图片
YHImagePickerView.show() {[weak self] image in
guard let self = self else { return }
self.cardButton.setContent("card_loading", "上传中")
self.cardButton.startRotationAnimation()
self.uploadImageVM.uploadImage(image) {[weak self] success, error in
guard let self = self else { return }
self.cardButton.stopRotationAnimation()
self.cardButton.setContent("", "")
self.delImageButton.isHidden = false
guard let url = success else { return }
print(url)
self.uploadImageUrl = url
self.cardButton.setBackgroundImage(image, for: .normal)
self.cardButton.isHidden = false
if detailType == .SmallWhiteNote {
self.viewModel.getPublicImageUrl(url) {[weak self] success, error in
guard let self = self else { return }
guard let url = success else { return }
//进行ocr识别
self.viewModel.getSmallWhiteBarInfoByOcr(url) { success, error in
if success {
if let tmpModel = self.viewModel.smallWhiteBarInfo {
self.startDateStr = tmpModel.start_time
self.endDateStr = tmpModel.end_time
self.startDateItem.updateDate(date: self.startDateStr)
self.endDateItem.updateDate(date: self.endDateStr)
}
}
}
}
}
}
}
} else {
showBigImage()
}
}
func showBigImage() {
if !self.uploadImageUrl.isEmpty {
let vc = YHImageViewController()
vc.imgString = self.uploadImageUrl
UIViewController.current?.navigationController?.pushViewController(vc)
}
}
func loadData() {
self.updateUI()
}
//获取数据后进行更新
func updateUI() {
if detailType == .SmallWhiteNote {
let url = dataModel.cert_info.small_white_note_url
if !url.isYHEmpty() {
uploadImageUrl = url
self.viewModel.getPublicImageUrl(url) {[weak self] success, error in
guard let self = self else { return }
guard let url = success else { return }
self.cardButton.kf.setBackgroundImage(with: URL(string: url), for: .normal, completionHandler: { _ in
self.delImageButton.isHidden = false
})
self.cardButton.setContent("", "")
}
}
startDateStr = dataModel.cert_info.small_white_note_validity_start
endDateStr = dataModel.cert_info.small_white_note_validity_end
startDateItem.updateDate(date: startDateStr)
endDateItem.updateDate(date: endDateStr)
} else {
let url = dataModel.cert_info.idcard_url
if !url.isYHEmpty() {
uploadImageUrl = url
self.viewModel.getPublicImageUrl(url) {[weak self] success, error in
guard let self = self else { return }
guard let url = success else { return }
self.cardButton.kf.setBackgroundImage(with: URL(string: url), for: .normal, completionHandler: { _ in
self.delImageButton.isHidden = false
})
self.cardButton.setContent("", "")
}
}
}
}
func setupUI() {
var navTitle = ""
if detailType == .SmallWhiteNote {
navTitle = "上传小白条"
cardLabel.text = "小白条正面"
} else if detailType == .HongKongCard {
navTitle = "上传香港身份证"
cardLabel.text = "香港居民身份证正面"
}
gk_navTitle = navTitle
gk_navBarAlpha = 1.0
gk_navBackgroundColor = .white
view.backgroundColor = UIColor.contentBkgColor
view.addSubview(whiteContentView)
if detailType == .SmallWhiteNote {
let topImgViewH : CGFloat = 90 * (KScreenWidth - 16 * 2) / 343.0
view.addSubview(topImgView)
topImgView.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + kMargin)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.height.equalTo(topImgViewH)
}
whiteContentView.snp.makeConstraints { make in
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.top.equalTo(topImgView.snp.bottom).offset(14)
}
} else if detailType == .HongKongCard {
whiteContentView.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + kMargin)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
}
}
whiteContentView.addSubview(titleTextView)
titleTextView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.right.equalToSuperview().offset(-18)
make.top.equalToSuperview().offset(kMargin)
}
whiteContentView.addSubview(lineView)
lineView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.top.equalTo(titleTextView.snp.bottom).offset(12)
make.height.equalTo(1)
}
whiteContentView.addSubview(cardLabel)
cardLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalTo(lineView.snp.bottom).offset(12)
make.height.equalTo(20)
make.width.equalTo(160)
}
if detailType == .SmallWhiteNote {
titleTextView.attributed.text = """
\("*", .foreground(UIColor.failColor), .font(UIFont.PFSC_M(ofSize: 17)))\(" \(dataModel.name)的第一次赴港激活小白条 ", .foreground(UIColor.mainTextColor), .font(UIFont.PFSC_M(ofSize: 17)))\(.view(customLabel, .original(.center)))
"""
whiteContentView.addSubview(cardButton)
cardButton.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalTo(cardLabel.snp.bottom).offset(9)
make.height.equalTo(99)
make.width.equalTo(160)
}
whiteContentView.addSubview(startDateItem)
startDateItem.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.top.equalTo(cardButton.snp.bottom).offset(16)
make.height.equalTo(YHUploadCertificateDateItem.viewH)
}
startDateItem.update(title: "入境日期",isMust: true,hideLineFlag: false)
whiteContentView.addSubview(endDateItem)
endDateItem.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.top.equalTo(startDateItem.snp.bottom)
make.height.equalTo(YHUploadCertificateDateItem.viewH)
make.bottom.equalToSuperview()
}
endDateItem.update(title: "逗留截止",isMust: true,hideLineFlag: true)
let tap = UITapGestureRecognizer(target: self, action: #selector(tapItem(gestureRecognizer:)))
startDateItem.addGestureRecognizer(tap)
let tap2 = UITapGestureRecognizer(target: self, action: #selector(tapItem(gestureRecognizer:)))
endDateItem.addGestureRecognizer(tap2)
} else if detailType == .HongKongCard {
titleTextView.attributed.text = """
\("*", .foreground(UIColor.failColor), .font(UIFont.PFSC_M(ofSize: 17)))\(" \(dataModel.name)的香港身份证 ", .foreground(UIColor.mainTextColor), .font(UIFont.PFSC_M(ofSize: 17)))\(.view(customLabel, .original(.center)))
"""
whiteContentView.addSubview(cardButton)
cardButton.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalTo(cardLabel.snp.bottom).offset(9)
make.height.equalTo(99)
make.width.equalTo(160)
make.bottom.equalToSuperview().offset(-kMargin)
}
}
//可编辑
whiteContentView.addSubview(delImageButton)
delImageButton.snp.makeConstraints { make in
make.centerX.equalTo(cardButton.snp.right)
make.centerY.equalTo(cardButton.snp.top)
make.height.equalTo(21)
make.width.equalTo(21)
}
view.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.bottom.equalToSuperview()
make.height.equalTo(YHFileListBottomView.viewH)
}
}
}
......@@ -11,14 +11,14 @@ import UIKit
class YHResignCertificateListViewController: YHBaseViewController {
var tableView: UITableView!
var orderId: Int = 0
var viewModel = YHResignCertificateListViewModel()
override func viewDidLoad() {
super.viewDidLoad()
gk_navTitle = "续签证件管理"
gk_navBackgroundColor = .white
gk_navBarAlpha = 1.0
setView()
getData()
}
override func viewWillAppear(_ animated: Bool) {
......@@ -27,7 +27,10 @@ class YHResignCertificateListViewController: YHBaseViewController {
}
func getData() {
viewModel.getResignCertificateList(orderId: orderId) {[weak self] success, error in
guard let self = self else { return }
self.tableView.reloadData()
}
}
func setView() {
......@@ -40,13 +43,14 @@ class YHResignCertificateListViewController: YHBaseViewController {
tableView.dataSource = self
tableView.showsVerticalScrollIndicator = false
tableView.showsHorizontalScrollIndicator = false
tableView.register(cellWithClass: YHAdopterAddNewTableViewCell.self)
tableView.register(cellWithClass: YHResignCertificateListTableViewCell.self)
return tableView
}()
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 8)
make.left.right.bottom.equalTo(view)
make.left.right.equalTo(view)
make.bottom.equalTo(-k_Height_safeAreaInsetsBottom())
}
}
......@@ -59,18 +63,67 @@ extension YHResignCertificateListViewController: UITableViewDelegate, UITableVie
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withClass: YHAdopterAddNewTableViewCell.self)
cell.clickBlock = { [weak self] model in
guard let self = self else { return }
let cell = tableView.dequeueReusableCell(withClass: YHResignCertificateListTableViewCell.self)
var model: [YHResignCertificateModel] = []
if indexPath.row == 0 {
model = self.viewModel.mainModel.TRAVEL
cell.titleLabel.text = "旅行证件(港澳通行证/护照)"
}
if indexPath.row == 1 {
model = self.viewModel.mainModel.E_VISA
cell.titleLabel.text = "最新一次电子签证"
}
if indexPath.row == 2 {
model = self.viewModel.mainModel.HK_ID_CARD
cell.titleLabel.text = "香港身份证"
}
if indexPath.row == 3 {
model = self.viewModel.mainModel.SMALL_WHITE_BAR
cell.titleLabel.text = "最新一次小白条"
}
cell.dataSource = model
cell.clickBlock = { [weak self] model in
guard let self = self else { return }
if indexPath.row == 0 {
}
return cell
if indexPath.row == 1 {
let vc = YHResignCertificateDetailEVisaViewController()
vc.data = model
self.navigationController?.pushViewController(vc)
}
if indexPath.row == 2 {
let vc = YHResignCertificateDetailViewController()
vc.detailType = .HongKongCard
vc.dataModel = model
self.navigationController?.pushViewController(vc)
}
if indexPath.row == 3 {
let vc = YHResignCertificateDetailViewController()
vc.detailType = .SmallWhiteNote
vc.dataModel = model
self.navigationController?.pushViewController(vc)
}
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let count = 3
return CGFloat(52 + count * 52)
var count = 0
if indexPath.row == 0 {
count = self.viewModel.mainModel.TRAVEL.count
}
if indexPath.row == 1 {
count = self.viewModel.mainModel.E_VISA.count
}
if indexPath.row == 2 {
count = self.viewModel.mainModel.HK_ID_CARD.count
}
if indexPath.row == 3 {
count = self.viewModel.mainModel.SMALL_WHITE_BAR.count
}
return CGFloat(68 + count * 52)
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
......
//
// YHResignCertificateModel.swift
// galaxy
//
// Created by EDY on 2024/9/12.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import SmartCodable
class YHResignCertificateMainModel: SmartCodable {
var E_VISA: [YHResignCertificateModel] = []
var HK_ID_CARD: [YHResignCertificateModel] = []
var SMALL_WHITE_BAR: [YHResignCertificateModel] = []
var TRAVEL: [YHResignCertificateModel] = []
required init() {
}
}
class YHResignCertificateModel: SmartCodable {
var age: Int = 0
var birthday: String = ""
var cert_type: String = ""
var created_at: String = ""
var deleted_at: String = ""
var group: Int = 0
var id: Int = 0
var name: String = ""
var order_id: Int = 0
var remark: String = ""
var status: Int = 0
var updated_at: String = ""
var upload_require: String = ""
var user_id: Int = 0
var user_type: String = ""
var valid_date: String = ""
var cert_info: YHResignCertificateInfoModel = YHResignCertificateInfoModel()
required init() {
}
}
class YHResignCertificateInfoModel: SmartCodable {
var e_visa_url: String = "" //电子签证的url
var name: String = "" //电子签证名称
var upload_at: String = ""
var idcard_url: String = "" //香港身份证的url
var small_white_note_name: String = ""
var small_white_note_url: String = ""
var small_white_note_validity_end: String = ""
var small_white_note_validity_start: String = ""
var sign_type: String = ""
var img_back: String = ""
var img_front: String = ""
var issue_end: String = ""
var issue_start: String = ""
required init() {
}
}
//
// YHResignCertificateEvisaTableViewCell.swift
// galaxy
//
// Created by EDY on 2024/9/12.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHResignCertificateEvisaTableViewCell: UITableViewCell {
typealias ResignCertificateBlock = (_ model: YHResignCertificateModel) -> ()
var clickBlock: ResignCertificateBlock?
typealias ExperienceListBlock = (_ model: YHWorkExperienceFileModel, _ type: YHWorkFileClickType) -> ()
var experienceListBlock: ExperienceListBlock?
typealias NewFileBlock = () -> ()
var newFileBlock: NewFileBlock?
var centerView: UIView!
var titleLabel: UILabel!
var lineView: UIView!
var itemView: YHWorkFileItemView!
var bottomView: YHWorkItemAddView!
var dataSource: [YHWorkExperienceFileModel]?{
didSet {
updateAllViews()
}
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
setupUI()
}
func setupUI() {
backgroundColor = .clear
centerView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
return view
}()
contentView.addSubview(centerView)
centerView.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(16)
make.bottom.equalToSuperview()
}
titleLabel = {
let label = UILabel()
label.font = UIFont.PFSC_M(ofSize: 17)
label.text = "*卢华臣的电子签证"
label.textColor = UIColor.mainTextColor
return label
}()
centerView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(16)
make.height.equalTo(24)
make.right.equalTo(-20)
}
lineView = {
let view = UIView()
view.backgroundColor = UIColor.separatorColor
return view
}()
centerView.addSubview(lineView)
lineView.snp.makeConstraints { make in
make.left.equalTo(18)
make.right.equalTo(-18)
make.height.equalTo(0.5)
make.top.equalTo(51.5)
}
itemView = {
let view = YHWorkFileItemView()
view.block = {[weak self] model, type in
guard let self = self else { return }
if let block = self.experienceListBlock {
block(model, type)
}
}
return view
}()
centerView.addSubview(itemView)
itemView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.height.equalTo(74)
make.bottom.equalToSuperview()
}
bottomView = {
let view = YHWorkItemAddView()
view.addBtn.setTitle("上传".local, for: .normal)
view.clickBlock = {[weak self] in
guard let self = self else { return }
if let block = self.newFileBlock {
block()
}
}
return view
}()
centerView.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.right.equalTo(-18)
make.left.equalTo(18)
make.height.equalTo(45)
make.bottom.equalTo(-16)
}
}
func updateAllViews() {
guard let model = dataSource, model.count != 0 else {
bottomView.isHidden = false
itemView.isHidden = true
return
}
itemView.dataSource = model.first
bottomView.isHidden = true
itemView.isHidden = false
}
}
//
// YHResignCertificateListTableViewCell.swift
// galaxy
//
// Created by EDY on 2024/9/12.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHResignCertificateListTableViewCell: UITableViewCell {
typealias ResignCertificateBlock = (_ model: YHResignCertificateModel) -> ()
var clickBlock: ResignCertificateBlock?
var centerView: UIView!
var titleLabel: UILabel!
var mainItemView: UIView!
var lineView: UIView!
var dataSource: [YHResignCertificateModel]? {
didSet {
updateAllViews()
}
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
setupUI()
}
func setupUI() {
backgroundColor = .clear
centerView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
return view
}()
contentView.addSubview(centerView)
centerView.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(8)
make.bottom.equalTo(-8)
}
titleLabel = {
let label = UILabel()
label.font = UIFont.PFSC_M(ofSize: 17)
label.text = "新增受养人"
label.textColor = UIColor.mainTextColor
return label
}()
centerView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(16)
make.height.equalTo(24)
make.right.equalTo(-20)
}
mainItemView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
return view
}()
centerView.addSubview(mainItemView)
mainItemView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.top.equalTo(52)
}
}
func updateAllViews() {
mainItemView.removeSubviews()
guard let dataSource = dataSource else {
return
}
var total = 0
for i in 0 ..< dataSource.count {
let line = UIView()
line.backgroundColor = UIColor.separatorColor
mainItemView.addSubview(line)
line.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(total)
make.height.equalTo(0.5)
make.right.equalTo(-18)
}
total = total + 1
let itemView = YHResignCertificateView()
itemView.clickBlock = {[weak self] model in
guard let self = self else { return }
if let block = self.clickBlock {
block(model)
}
}
let model = dataSource[i]
itemView.tag = 4000 + i
itemView.dataSource = dataSource[i]
mainItemView.addSubview(itemView)
itemView.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(total)
make.height.equalTo(51)
make.right.equalTo(-18)
}
total = total + 51
}
}
}
class YHResignCertificateView: UIView {
typealias ItemBlock = (_ model: YHResignCertificateModel) -> ()
var clickBlock: ItemBlock?
var titleLabel: UILabel!
var subTitleLabel: UILabel!
var explainLabel: UILabel!
var nextStepImageView: UIImageView!
var centerButton: UIButton!
var dataSource: YHResignCertificateModel? {
didSet {
updateAllViews()
}
}
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .white
setUpView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setUpView() {
titleLabel = {
let label = UILabel()
label.font = UIFont.PFSC_B(ofSize: 14)
label.textAlignment = .left
label.numberOfLines = 2
label.textColor = UIColor.mainTextColor
return label
}()
addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.top.bottom.equalToSuperview()
}
subTitleLabel = {
let label = UILabel()
label.font = UIFont.PFSC_B(ofSize: 12)
label.textAlignment = .left
label.numberOfLines = 2
label.textColor = UIColor.mainTextColor50
return label
}()
addSubview(subTitleLabel)
subTitleLabel.snp.makeConstraints { make in
make.top.bottom.equalToSuperview()
make.left.equalTo(titleLabel.snp.right)
}
explainLabel = {
let label = UILabel()
label.font = UIFont.PFSC_R(ofSize: 14)
label.textAlignment = .right
label.textColor = UIColor.labelTextColor2
return label
}()
addSubview(explainLabel)
explainLabel.snp.makeConstraints { make in
make.right.equalTo(-24)
make.left.equalToSuperview()
make.height.equalTo(20)
make.centerY.equalToSuperview()
}
nextStepImageView = {
let imageView = UIImageView()
imageView.image = UIImage(named: "form_right_arrow")
return imageView
}()
addSubview(nextStepImageView)
nextStepImageView.snp.makeConstraints { make in
make.right.equalToSuperview()
make.centerY.equalTo(explainLabel.snp.centerY)
make.height.width.equalTo(20)
}
centerButton = {
let button = UIButton(type: .custom)
button.addTarget(self, action: #selector(centerClick), for: .touchUpInside)
return button
}()
addSubview(centerButton)
centerButton.snp.makeConstraints { make in
make.right.top.bottom.equalToSuperview()
make.left.equalTo(112)
}
}
func updateAllViews() {
guard let dataSource = dataSource else { return }
titleLabel.text = dataSource.name
if dataSource.status == 1 {
explainLabel.text = "待上传"
explainLabel.textColor = UIColor.brandMainColor
nextStepImageView.image = UIImage(named: "service_adopter_income_start")
}
if dataSource.status == 2 {
explainLabel.text = "已完成"
explainLabel.textColor = UIColor(hex: 0x3cc694)
nextStepImageView.image = UIImage(named: "service_adopter_income_success")
}
if dataSource.age < 12 {
explainLabel.text = "无需提供"
explainLabel.textColor = UIColor.mainTextColor18
nextStepImageView.isHidden = true
explainLabel.snp.remakeConstraints { make in
make.right.left.equalToSuperview()
make.height.equalTo(20)
make.centerY.equalToSuperview()
}
} else {
nextStepImageView.isHidden = false
explainLabel.snp.remakeConstraints { make in
make.right.equalTo(-24)
make.left.equalToSuperview()
make.height.equalTo(20)
make.centerY.equalToSuperview()
}
}
if dataSource.cert_type == "PASS_PORT" {
subTitleLabel.text = "(护照入境)"
} else if dataSource.cert_type == "HK_PASS_PORT" {
subTitleLabel.text = "(港澳通行证入境)"
} else {
subTitleLabel.text = ""
}
}
@objc func centerClick() {
if let block = clickBlock {
block(self.dataSource ?? YHResignCertificateModel())
}
}
func isShowDelete(_ index: Int, isShow: Bool) {
if isShow {
explainLabel.isHidden = true
nextStepImageView.isHidden = true
} else {
explainLabel.isHidden = false
nextStepImageView.isHidden = false
}
}
}
//
// YHResignCertificateDetailViewModel.swift
// galaxy
//
// Created by EDY on 2024/9/12.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHResignCertificateDetailViewModel: YHBaseViewModel {
func submitResignCertificateUpdate(_ params: [String : Any],callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.ResignCertificate.update
let _ = YHNetRequest.postRequest(url: strUrl,params: params) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
printLog("model 是 ==> \(json)")
if json.code == 200 {
callBackBlock(true,nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
callBackBlock(false,err)
}
} failBlock: { err in
callBackBlock(false,err)
}
}
}
//
// YHResignCertificateListViewModel.swift
// galaxy
//
// Created by EDY on 2024/9/12.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHResignCertificateListViewModel: YHBaseViewModel {
var mainModel : YHResignCertificateMainModel = YHResignCertificateMainModel()
func getResignCertificateList(orderId: Int, callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let param = ["orderId": orderId]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.ResignCertificate.resignCertificateList
let _ = YHNetRequest.getRequest(url: strUrl, params: param) { [weak self] json, code in
//1. json字符串 转 对象
guard self != nil else { return }
if json.code == 200 {
guard let dic = json.data?.peel as? [String : Any], let data = dic["data"] as? [String: Any], let result = YHResignCertificateMainModel.deserialize(from: data) else {
callBackBlock(false,nil)
return
}
self?.mainModel = result
callBackBlock(true, nil)
} else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code),errorMsg: json.msg.count > 0 ? json.msg : "数据错误")
callBackBlock(false,error)
}
} failBlock: { err in
callBackBlock(false,err)
}
}
}
......@@ -21,7 +21,7 @@ class YHServiceMoreAlertView: UIView {
centerView.snp.remakeConstraints { make in
make.right.equalTo(-20)
make.height.equalTo(112)
make.width.equalTo(132)
make.width.equalTo(164)
make.top.equalTo(85)
}
} else {
......@@ -29,7 +29,7 @@ class YHServiceMoreAlertView: UIView {
centerView.snp.remakeConstraints { make in
make.right.equalTo(-20)
make.height.equalTo(64)
make.width.equalTo(132)
make.width.equalTo(164)
make.top.equalTo(85)
}
}
......@@ -69,14 +69,14 @@ class YHServiceMoreAlertView: UIView {
centerView.snp.makeConstraints { make in
make.right.equalTo(-20)
make.height.equalTo(64)
make.width.equalTo(132)
make.width.equalTo(164)
make.top.equalTo(85)
}
orderButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "service_more_order"), for: .normal)
button.setTitle("我的订单", for: .normal)
button.setTitle("我的订单 ", for: .normal)
button.setTitleColor(UIColor.mainTextColor, for: .normal)
button.titleLabel?.font = UIFont.PFSC_R(ofSize: 16)
button.addTarget(self, action: #selector(orderButtonClick), for: .touchUpInside)
......@@ -86,14 +86,14 @@ class YHServiceMoreAlertView: UIView {
orderButton.snp.makeConstraints { make in
make.right.equalTo(-20)
make.height.equalTo(20)
make.width.equalTo(92)
make.width.equalTo(124)
make.top.equalTo(24)
}
guideButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "service_more_guide"), for: .normal)
button.setTitle("操作指引", for: .normal)
button.setTitle("获批操作指引", for: .normal)
button.setTitleColor(UIColor.mainTextColor, for: .normal)
button.titleLabel?.font = UIFont.PFSC_R(ofSize: 16)
button.addTarget(self, action: #selector(guideButtonClick), for: .touchUpInside)
......@@ -103,7 +103,7 @@ class YHServiceMoreAlertView: UIView {
guideButton.snp.makeConstraints { make in
make.right.equalTo(-20)
make.height.equalTo(20)
make.width.equalTo(92)
make.width.equalTo(124)
make.bottom.equalTo(-24)
}
orderButton.iconInLeft(spacing: 8)
......
......@@ -521,4 +521,8 @@ class YHAllApiName {
static let resignMaterialList = "super-app/identity-renewal/renewal-batch-list"
}
struct ResignCertificate {
static let resignCertificateList = "super-app/certificate/list"
static let update = "super-app/certificate/update"
}
}
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