Commit 20d298b1 authored by pete谢兆麟's avatar pete谢兆麟

Merge branch 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into develop

# Conflicts:
#	galaxy/galaxy/Classes/Modules/IntelligentService(服务中心)/CustomerService/Certificate(办证段)/AddAdopters/C/YHAdopterNewPeopleViewController.swift
parents 2068b4e2 82f61ec5
This diff is collapsed.
......@@ -301,32 +301,32 @@ class YHShareOneCollectionViewCell: UICollectionViewCell {
make.center.equalToSuperview()
make.width.height.equalTo(17)
}
if let qrCode = generateQRCode(from: YHBaseUrlManager.shared.curH5URL() + "superAppBridge.html#/evaluation?channel=lkhtj-app&customer_id=\(YHLoginManager.shared.userModel?.id ?? "")&scene_id=30") {
let qrString = YHBaseUrlManager.shared.curH5URL() + "superAppBridge.html#/evaluation?channel=lkhtj-app&customer_id=\(YHLoginManager.shared.userModel?.id ?? "")&scene_id=30"
if let qrCode = qrString.generateQRCode() {
// 可以将qrCode设置为UIImageView的image属性来显示二维码
imageView.image = qrCode
}
}
func generateQRCode(from string: String) -> UIImage? {
guard let data = string.data(using: .ascii, allowLossyConversion: false) else {
return nil
}
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
guard let outputImage = filter?.outputImage else {
return nil
}
let context = CIContext()
if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
return UIImage(cgImage: cgImage)
}
return nil
}
// func generateQRCode(from string: String) -> UIImage? {
// guard let data = string.data(using: .ascii, allowLossyConversion: false) else {
// return nil
// }
//
// let filter = CIFilter(name: "CIQRCodeGenerator")
// filter?.setValue(data, forKey: "inputMessage")
//
// guard let outputImage = filter?.outputImage else {
// return nil
// }
//
// let context = CIContext()
// if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
// return UIImage(cgImage: cgImage)
// }
//
// return nil
// }
}
class YHShareTwoCollectionViewCell: UICollectionViewCell {
......
......@@ -10,9 +10,11 @@ import UIKit
class YHCertificateAppointViewController: YHBaseViewController {
var orderId: Int = 0
var items = ["", "", ""]
let viewModel = YHCerAppointViewModel()
var isNeedGoHK: Int = 3 // 0不需要 1需要赴港 2没有选择
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
tableView.estimatedSectionHeaderHeight = 16.0
......@@ -49,6 +51,12 @@ class YHCertificateAppointViewController: YHBaseViewController {
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
}
}
func requetIsGoToHK() {
viewModel.getIsNeedGoToHK(orderId: orderId) { needGoHK in
}
}
}
extension YHCertificateAppointViewController: UITableViewDelegate, UITableViewDataSource {
......
//
// YHAppointHKResultModel.swift
// galaxy
//
// Created by edy on 2024/8/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import SmartCodable
class YHAppointHKResultModel: SmartCodable {
var waiting: [YHAppointMemberGroupModel] = []
var success: [YHAppointMemberGroupModel] = []
enum CodingKeys: String, CodingKey {
case waiting = "waiting"
case success = "success"
}
required init() {
}
init(waiting: [YHAppointMemberGroupModel], success: [YHAppointMemberGroupModel]) {
self.waiting = waiting
self.success = success
}
}
class YHAppointMemberGroupModel: SmartCodable {
var id: Int = 0
var orderid: Int = 0
var userList: [YHAppointMemberModel] = []
var wantMinTime: String = ""
var wantMaxTime: String = ""
var wantImmigrationOffice: String = ""
var goTime: String = ""
var receipts: [String] = []
var submitTime: String = ""
enum CodingKeys: String, CodingKey {
case id = "id"
case orderid = "order_id"
case userList = "user_list"
case wantMinTime = "want_min_time"
case wantMaxTime = "want_max_time"
case wantImmigrationOffice = "want_immigration_office"
case goTime = "go_time"
case receipts = "receipts"
case submitTime = "submit_time"
}
required init() {
}
init(id: Int, orderid: Int, userList: [YHAppointMemberModel], wantMinTime: String, wantMaxTime: String, wantImmigrationOffice: String, goTime: String, receipts: [String], submitTime: String) {
self.id = id
self.orderid = orderid
self.userList = userList
self.wantMinTime = wantMinTime
self.wantMaxTime = wantMaxTime
self.wantImmigrationOffice = wantImmigrationOffice
self.goTime = goTime
self.receipts = receipts
self.submitTime = submitTime
}
}
// MARK: - UserList
class YHAppointMemberModel: SmartCodable {
var id: Int = 0
var name: String = ""
var type: String = ""
var fileNum: String = ""
var birthday: String = ""
var isCheck: Int = 0
var url: String = ""
var approvalDate: String = ""
var relation: String = ""
enum CodingKeys: String, CodingKey {
case id = "id"
case name = "name"
case type = "type"
case fileNum = "file_num"
case birthday = "birthday"
case isCheck = "is_check"
case url = "url"
case approvalDate = "approval_date"
case relation = "relation"
}
required init() {
}
init(id: Int, name: String, type: String, fileNum: String, birthday: String, isCheck: Int, url: String, approvalDate: String, relation: String) {
self.id = id
self.name = name
self.type = type
self.fileNum = fileNum
self.birthday = birthday
self.isCheck = isCheck
self.url = url
self.approvalDate = approvalDate
self.relation = relation
}
}
//
// YHHKMemberModel.swift
// galaxy
//
// Created by edy on 2024/8/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import SmartCodable
class YHHKMemberModel: SmartCodable {
var id: Int = 0
var name: String = ""
var type: String = ""
var fileNum: String = ""
var birthday: String = ""
var isCheck: Int = 0
var url: String = ""
var approvalDate: String = ""
enum CodingKeys: String, CodingKey {
case id = "id"
case name = "name"
case type = "type"
case fileNum = "file_num"
case birthday = "birthday"
case isCheck = "is_check"
case url = "url"
case approvalDate = "approval_date"
}
required init() {
}
init(id: Int, name: String, type: String, fileNum: String, birthday: String, isCheck: Int, url: String, approvalDate: String) {
self.id = id
self.name = name
self.type = type
self.fileNum = fileNum
self.birthday = birthday
self.isCheck = isCheck
self.url = url
self.approvalDate = approvalDate
}
}
......@@ -10,10 +10,13 @@ import UIKit
class YHCerAppointViewModel: NSObject {
var serviceArr:[YHServiceItem] = []
var serviceArr: [YHServiceItem] = []
var hkUsers: [YHHKMemberModel] = []
var appointResult: YHAppointHKResultModel = YHAppointHKResultModel()
// 获取香港服务列表
func getServicelist(_ callBack: @escaping (_ success: Bool,_ error: YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.MakeCertificate.servicelist
let _ = YHNetRequest.getRequest(url: strUrl) {
[weak self] json, code in
......@@ -48,4 +51,129 @@ class YHCerAppointViewModel: NSObject {
callBack(false, err)
}
}
// 所有赴港人员列表
func getGoHKFamilyMembers(orderId: Int, callback:((_ success: Bool, _ error: YHErrorModel?)->())?) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.AppointHK.hkMembers
let _ = YHNetRequest.getRequest(url: strUrl,params: ["order_id" : orderId]) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
printLog("model 是 ==> \(json)")
if json.code == 200 {
let dic = json.data
guard let arr = [YHHKMemberModel].deserialize(array: dic as? [Any]) else {
let err = YHErrorModel(errorCode: YHErrorCode.dictParseError.rawValue, errorMsg: YHErrorCode.dictParseError.description())
self.hkUsers = []
callback?(false, err)
return
}
self.hkUsers.removeAll()
for user in arr {
if let user = user {
self.hkUsers.append(user)
}
}
callback?(true, nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
self.hkUsers = []
callback?(false, err)
}
} failBlock: { err in
self.hkUsers = []
callback?(false, err)
}
}
// 获取港府预约结果
func getAppointResult(orderId: Int, callback:((_ success: Bool, _ error: YHErrorModel?)->())?) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.AppointHK.appointResult
let _ = YHNetRequest.getRequest(url: strUrl,params: ["order_id" : orderId]) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
printLog("model 是 ==> \(json)")
if json.code == 200 {
let dic = json.data
guard let resultModel = YHAppointHKResultModel.deserialize(dict: dic as? [AnyHashable : Any]) else {
let err = YHErrorModel(errorCode: YHErrorCode.dictParseError.rawValue, errorMsg: YHErrorCode.dictParseError.description())
callback?(false, err)
return
}
self.appointResult = resultModel
callback?(true, nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
callback?(false, err)
}
} failBlock: { err in
callback?(false, err)
}
}
// 是否需要赴港
func getIsNeedGoToHK(orderId: Int, callback:((_ needGoHK: Int)->())?) {
// 1需要赴港 0不需要 2没有选择
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.AppointHK.isNeedGoHK
let _ = YHNetRequest.getRequest(url: strUrl,params: ["order_id" : orderId]) {
[weak self] json, code in
guard let self = self else { return }
printLog("model 是 ==> \(json)")
if json.code == 200 {
//
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
callback?(2)
}
} failBlock: { err in
callback?(2)
}
}
// 保存是否需要赴港
func saveNeedGoHK(orderId: Int, need: Bool, callback:((_ success: Bool)->())?) {
// is_need_to_hk 是否需要赴港 1需要 0不需要
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.AppointHK.saveNeedGoHK
let _ = YHNetRequest.postRequest(url: strUrl,params: ["order_id" : orderId,
"is_need_to_hk" : (need ? 1 : 0)]) {
[weak self] json, code in
guard let self = self else { return }
printLog("model 是 ==> \(json)")
if json.code == 200 {
callback?(true)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
callback?(false)
}
} failBlock: { err in
callback?(false)
}
}
}
......@@ -14,6 +14,7 @@ class YHFamilyInfoConfirmViewController: YHBaseViewController {
var sectionItems:[String] = ["", "", "", ""]
var familyArr: [YHApplicantInfoModel] = []
let viewModel = YHFamilyInfoConfirmViewModel()
let princleVM = YHPrincleViewModel()
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
......@@ -72,6 +73,7 @@ class YHFamilyInfoConfirmViewController: YHBaseViewController {
make.left.right.bottom.equalToSuperview()
make.height.equalTo(98)
}
requetRiskAlert()
}
override func viewWillAppear(_ animated: Bool) {
......@@ -81,6 +83,42 @@ class YHFamilyInfoConfirmViewController: YHBaseViewController {
@objc func didBottomBtnClicked() {
for member in self.familyArr {
if member.confirmStatus == 0 {
YHHUD.flash(message: "存在未确认信息,此信息涉及后续【香港身份证办理】,辛苦核对")
return
}
}
viewModel.submitFaimiyInfoWithOrderId(orderId) {
[weak self] success, error in
guard let self = self else { return }
if success {
YHHUD.flash(message: "确认修改成功")
return
}
let msg = error?.errorMsg ?? "确认修改失败"
YHHUD.flash(message: msg)
self.navigationController?.popViewController()
}
}
func requetRiskAlert() {
viewModel.requetRiskAlertShow {
[weak self] isHaveShow in
guard let self = self else { return }
if isHaveShow {
return
}
let alert = YHFamilyMemberRiskWarningAlertView.alertView()
alert.confirmBlock = {
[weak self] in
guard let self = self else { return }
self.princleVM.postAlertStatus(3) { success, error in
}
}
alert.show()
}
}
}
......
......@@ -18,17 +18,17 @@ enum YHFamilyMemberRelationType: Int {
class YHFamilyInfoUpdateViewController: YHBaseViewController {
var memberId: Int = 0
var familyGroupModel: YHFamilyGroupModel = YHFamilyGroupModel()
let viewModel = YHFamilyInfoConfirmViewModel()
private var detailMember:YHApplicantInfoModel = YHApplicantInfoModel()
var orderId: Int = 0
var detailMember:YHApplicantInfoModel = YHApplicantInfoModel()
let viewModel = YHFamilyInfoConfirmViewModel()
var relation:YHFamilyMemberRelationType = .mainApplicant
var isInfoEditing: Bool = false
var items: [[YHFamilyInfoItem]] = []
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
tableView.estimatedSectionHeaderHeight = 16.0
......@@ -79,7 +79,7 @@ class YHFamilyInfoUpdateViewController: YHBaseViewController {
make.height.equalTo(44)
make.left.equalTo(cancelBtn.snp.right).offset(10)
}
return view
}()
......@@ -90,7 +90,7 @@ class YHFamilyInfoUpdateViewController: YHBaseViewController {
self.view.backgroundColor = .white
self.view.addSubview(self.tableView)
self.view.addSubview(self.bottomView)
self.tableView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(k_Height_NavigationtBarAndStatuBar+16)
......@@ -100,62 +100,104 @@ class YHFamilyInfoUpdateViewController: YHBaseViewController {
make.left.right.bottom.equalToSuperview()
make.height.equalTo(98)
}
self.getDetail()
self.updateData()
}
// 展示挽留弹窗
func showRetainAlertView() {
YHCommonAlertView.show("", "您尚未保存修改,确定关闭吗?", "仍然关闭", "继续编辑", fullGuestureEnable: false) {
self.navigationController?.popViewController()
} callBack: {
}
}
@objc func didCancelBtnClicked() {
if self.isInfoEditing {
showRetainAlertView()
return
}
self.navigationController?.popViewController()
}
@objc func didConfirmBtnClicked() {
self.detailMember.info.isCheck = true
self.tableView.reloadData()
}
func getDetail() {
if self.familyGroupModel.main.info.id == memberId {
self.detailMember = self.familyGroupModel.main
self.updateData()
if let arr1 = items.first {
for item in arr1 {
if !item.tips.isEmpty {
return
}
}
}
if let detaiParams = self.detailMember.info.toDictionary() {
} else if self.familyGroupModel.spouse.info.id == memberId {
self.detailMember = self.familyGroupModel.spouse
var relation = ""
if self.detailMember.info.relation == YHFamilyMemberRelationType.mainApplicant.rawValue {
relation = "main"
} else if self.detailMember.info.relation == YHFamilyMemberRelationType.spouse.rawValue {
relation = "spouse"
} else {
for child in self.familyGroupModel.children {
if child.info.id == memberId {
self.detailMember = child
break
} else if self.detailMember.info.relation == YHFamilyMemberRelationType.child.rawValue {
relation = "children"
}
let param:[String: Any] = ["orderId": orderId,
relation: detaiParams]
YHHUD.show(.progress(message: "提交中..."))
viewModel.submitFamilyUpdate(param:param) {
[weak self] success, error in
YHHUD.hide()
guard let self = self else { return }
if success {
YHHUD.flash(message: "提交成功")
self.navigationController?.popViewController()
return
}
let msg = error?.errorMsg ?? "提交失败"
YHHUD.flash(message: msg)
}
}
self.getData()
}
func getData() {
func updateData() {
items.removeAll()
// arr1 信息核实
let arr1 = viewModel.getInfoConfirm(self.detailMember, isEditMode: self.isInfoEditing)
// arr2 递交证件信息
let arr2 = viewModel.getCertificateInfo(self.detailMember)
// 信息核实
items.append(arr1)
// 递交证件信息
items.append(arr2)
// arr2 递交证件信息
if let cer = self.detailMember.info.identity {
let arr2 = viewModel.getCertificateInfo(self.detailMember)
items.append(arr2)
}
self.tableView.reloadData()
}
func updateData() {
if let arr1 = items.first {
for item in arr1 {
item.isEditMode = self.isInfoEditing
item.isShowPreviousInfo = (!self.isInfoEditing && !item.previousValue.isEmpty)
}
override func backItemClick(_ sender: Any) {
self.view.endEditing(true)
if self.isInfoEditing {
showRetainAlertView()
return
}
self.tableView.reloadData()
self.navigationController?.popViewController()
}
// 是否可以返回,包括点击返回和手势返回,默认YES
override func navigationShouldPop() -> Bool {
self.view.endEditing(true)
if self.isInfoEditing {
showRetainAlertView()
return false
}
return true
}
}
......@@ -176,12 +218,19 @@ extension YHFamilyInfoUpdateViewController: UITableViewDelegate, UITableViewData
cell.modifyBtn.isHidden = false
cell.isEditState = self.isInfoEditing
cell.familyInfo = self.detailMember.info
// 更改编辑状态
cell.editBlock = {
[weak self] isEdit in
guard let self = self else { return }
self.isInfoEditing = isEdit
self.updateData()
}
// 选择出生国家/地区
cell.selectBirthNation = {
[weak self] isInChina in
guard let self = self else { return }
self.updateData()
}
} else {
......
......@@ -9,6 +9,16 @@
import UIKit
import SmartCodable
class YHFamilyNamePinYin: SmartCodable {
var family_name: String = ""
var given_name: String = ""
required init() {
}
}
class YHFamilyGroupModel: SmartCodable {
var orderid: Int = 0
var main: YHApplicantInfoModel = YHApplicantInfoModel()
......@@ -66,8 +76,8 @@ class YHFamilyMemberInfoModel: SmartCodable {
var givenNameHistory: String = ""
var married: String = ""
var marriedHistory: String = ""
var birthPlaceAboard: Int = -1
var birthPlaceAboardHistory: Int = -1
var birthPlaceAboard: String = "0"
var birthPlaceAboardHistory: String = ""
var birthPlace: YHApplicantBirthPlaceModel = YHApplicantBirthPlaceModel()
var birthPlaceHistory: YHApplicantBirthPlaceModel = YHApplicantBirthPlaceModel()
var nationalityType: Int = -1
......@@ -76,7 +86,7 @@ class YHFamilyMemberInfoModel: SmartCodable {
var nationalityHistory: String = ""
var hkIdentityid: String = ""
var hkIdentityidHistory: String = ""
var identity: YHApplicantIdentityModel = YHApplicantIdentityModel()
var identity: YHApplicantIdentityModel?
var occupationName: String = ""
var occupationNameHistory: String = ""
......@@ -99,6 +109,44 @@ class YHFamilyMemberInfoModel: SmartCodable {
return ""
}
func getMarriageState() -> String {
return self.getMarriageStatus(self.married)
}
func getHistoryMarriageState() -> String {
return self.getMarriageStatus(self.marriedHistory)
}
func getBirthNation() -> String {
if self.birthPlaceAboard == "0" {
return "国内"
} else if self.birthPlaceAboard == "1" {
return "国外"
}
return ""
}
func getHistoryBirthNation() -> String {
if self.birthPlaceAboardHistory == "0" {
return "国内"
} else if self.birthPlaceAboardHistory == "1" {
return "国外"
}
return ""
}
private func getMarriageStatus(_ marrage: String) -> String {
let arr = YHSheetPickerView.dataSource[.marriage1]!
for item in arr {
if item.index == Int(marrage) {
return item.title
}
}
return ""
}
required init() {
}
......@@ -128,7 +176,7 @@ class YHFamilyMemberInfoModel: SmartCodable {
case occupationNameHistory = "occupation_name_history"
}
init(id: Int, name: String, nameHistory: String, familyName: String, familyNameHistory: String, givenName: String, givenNameHistory: String, married: String, marriedHistory: String, birthPlaceAboard: Int, birthPlaceAboardHistory: Int, birthPlace: YHApplicantBirthPlaceModel, birthPlaceHistory: YHApplicantBirthPlaceModel, nationalityType: Int, nationalityTypeHistory: Int, nationality: String, nationalityHistory: String, hkIdentityid: String, hkIdentityidHistory: String, identity: YHApplicantIdentityModel, occupationName: String, occupationNameHistory: String) {
init(id: Int, name: String, nameHistory: String, familyName: String, familyNameHistory: String, givenName: String, givenNameHistory: String, married: String, marriedHistory: String, birthPlaceAboard: String, birthPlaceAboardHistory: String, birthPlace: YHApplicantBirthPlaceModel, birthPlaceHistory: YHApplicantBirthPlaceModel, nationalityType: Int, nationalityTypeHistory: Int, nationality: String, nationalityHistory: String, hkIdentityid: String, hkIdentityidHistory: String, identity: YHApplicantIdentityModel, occupationName: String, occupationNameHistory: String) {
self.id = id
self.name = name
......
......@@ -132,8 +132,8 @@ extension YHApproverInfoVerifyCell: UITableViewDelegate, UITableViewDataSource {
if 0 <= indexPath.row && indexPath.row < familyArr.count {
let model = familyArr[indexPath.row]
let vc = YHFamilyInfoUpdateViewController()
vc.memberId = model.info.id
vc.familyGroupModel = self.familyGroupInfo
vc.detailMember = model
vc.orderId = self.familyGroupInfo.orderid
UIViewController.current?.navigationController?.pushViewController(vc)
}
}
......
......@@ -17,9 +17,12 @@ class YHFamilyMemberInfoCell: UITableViewCell {
self.nameLabel.text = model.info.name
self.pinyinLabel.text = "\(model.info.familyName) \(model.info.givenName)"
self.statusLabel.text = model.confirmStatus == 1 ? "已确认" : "待核对"
let tintColor: UIColor = model.confirmStatus == 1 ? .brandMainColor : .init(hex: 0x3CC694)
let originArrowImg = UIImage(named: "family_info_status_arrow")
self.arrowImgView.image = originArrowImg?.withTintColor(tintColor, renderingMode: UIImage.RenderingMode.alwaysTemplate)
let textColor: UIColor = model.confirmStatus == 1 ? .init(hex: 0x3CC694) : .brandMainColor
self.statusLabel.textColor = textColor
let img = UIImage(named: "family_info_status_arrow")?.withRenderingMode(.alwaysTemplate)
self.arrowImgView.image = img
self.arrowImgView.tintColor = textColor
}
lazy var lineView: UIView = {
......
......@@ -11,6 +11,8 @@ import AttributedString
class YHFamilyMemberRiskWarningAlertView: UIView {
var confirmBlock:(()->())?
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = .alertMaskColor
......@@ -76,6 +78,7 @@ class YHFamilyMemberRiskWarningAlertView: UIView {
}
@objc func didConfirmBtnClicked() {
confirmBlock?()
self.dismiss()
}
......
......@@ -16,14 +16,15 @@ enum YHFamilyInfoType: Int {
case lastName = 3
case marriage = 4
case birthNation = 5
case birthPlace = 6
case declareNation = 7
case occupation = 8
case hongKongId = 9
case travelCertificateType = 10
case travelCertificateId = 11
case childName = 12
case spouseName = 13
case birthPlaceInChina = 6
case birthPlaceAboard = 7
case declareNation = 8
case occupation = 9
case hongKongId = 10
case travelCertificateType = 11
case travelCertificateId = 12
case childName = 13
case spouseName = 14
}
enum YHFamilyInfoActionType: Int {
......@@ -35,9 +36,11 @@ enum YHFamilyInfoActionType: Int {
class YHFamilyInfoOption {
var value: String = ""
var index: Int = -1
var isSelect: Bool = false
init(value: String, isSelect: Bool) {
init(index: Int, value: String, isSelect: Bool) {
self.index = index
self.value = value
self.isSelect = isSelect
}
......@@ -55,8 +58,55 @@ class YHFamilyInfoItem {
var isEditMode: Bool = false
var isShowPreviousInfo: Bool = false
var tips: String = ""
var isCheck: Bool = false
var tips: String {
get {
return self.getRedTips()
}
}
func getRedTips() -> String {
if !self.value.isEmpty { // value不为空
if self.id == .hongKongId, !self.value.isHKIdentityCardNumber() {
return "请输入正确的香港身份证号"
}
return ""
}
if self.isMust == false { // 非必填
return ""
}
// 必填
// value 为空的情况
if self.id == .mainApplicantName {
return "请输入主申人姓名"
}
if self.id == .spouseName {
return "请输入配偶姓名"
}
if self.id == .childName {
return "请输入子女姓名"
} else if self.id == .firstName {
return "请输入姓(拼音)"
} else if self.id == .lastName {
return "请输入名(拼音)"
} else if self.id == .birthPlaceAboard {
return "请输入出生地"
} else if self.id == .occupation {
return "请输入职业"
} else if self.id == .hongKongId {
return "请输入香港身份证号"
}
return ""
}
required init() {
......@@ -87,7 +137,15 @@ class YHIFamilyInfoListCell: UITableViewCell {
self.modifyBtn.setTitle(text, for: .normal)
}
}
// 是否进入编辑模式
var editBlock:((Bool)->())?
// 选择出生国家
var selectBirthNation:((Bool)->())?
// 姓名更改
var updateName:((String)->())?
var items: [YHFamilyInfoItem] = []
lazy var whiteView: UIView = {
let view = UIView()
......@@ -168,6 +226,7 @@ class YHIFamilyInfoListCell: UITableViewCell {
}
func updateItems(_ items:[YHFamilyInfoItem]) {
self.items = items
itemsContentView.removeSubviews()
var lastItemView:UIView? = nil
......@@ -179,8 +238,34 @@ class YHIFamilyInfoListCell: UITableViewCell {
if let itemView = itemView as? YHInfoItemView {
itemsContentView.addSubview(itemView)
itemView.updateItem(item, familyInfo: familyInfo)
itemView.updateName = {
[weak self] text in
guard let self = self else { return }
for subView in self.itemsContentView.subviews {
if subView is YHInfoItemView {
let targetView = subView as! YHInfoItemView
if targetView.item.id == .firstName {
targetView.item.value = self.familyInfo.familyName
targetView.updateItem(targetView.item, familyInfo: self.familyInfo)
}
if targetView.item.id == .lastName {
targetView.item.value = self.familyInfo.givenName
targetView.updateItem(targetView.item, familyInfo: self.familyInfo)
}
}
}
}
} else if let itemView = itemView as? YHInfoOptionView {
itemView.clickBlock = {
[weak self] selectItem in
guard let self = self else { return }
if item.id == .birthNation {
familyInfo.birthPlaceAboard = "\(selectItem.index)"
self.selectBirthNation?(familyInfo.birthPlaceAboard == "0")
}
}
itemsContentView.addSubview(itemView)
itemView.updateItem(item, familyInfo: familyInfo)
}
......
......@@ -13,9 +13,15 @@ import AttributedString
// 文字编辑和选择弹窗时使用
class YHInfoItemView: UIView {
private var debounceTimer: Timer?
var item: YHFamilyInfoItem = YHFamilyInfoItem()
var faimilyInfo: YHFamilyMemberInfoModel = YHFamilyMemberInfoModel()
// 姓名更改
var updateName:((String)->())?
let rightBtnWidth = 22.0
let viewModel = YHFamilyInfoConfirmViewModel()
lazy var lineView: UIView = {
let view = UIView()
......@@ -33,7 +39,6 @@ class YHInfoItemView: UIView {
let label = UILabel()
label.numberOfLines = 0
label.font = UIFont.PFSC_M(ofSize: 14)
label.text = "张全蛋"
label.textColor = UIColor.mainTextColor
return label
}()
......@@ -66,7 +71,6 @@ class YHInfoItemView: UIView {
lazy var previousTitleLabel: UILabel = {
let label = UILabel()
label.font = UIFont.PFSC_R(ofSize: 12)
label.text = "原主申人姓名"
label.textColor = UIColor.mainTextColor(alpha: 0.3)
return label
}()
......@@ -75,7 +79,6 @@ class YHInfoItemView: UIView {
let label = UILabel()
label.numberOfLines = 0
label.font = UIFont.PFSC_M(ofSize: 12)
label.text = "张全蛋"
label.textColor = UIColor.mainTextColor(alpha: 0.3)
return label
}()
......@@ -192,17 +195,21 @@ class YHInfoItemView: UIView {
@objc func didSelectSheetBtnClicked() {
if item.action == .select {
self.becomeFirstResponder()
if item.id == .marriage {
// 强制键盘消失
UIApplication.shared.yhKeyWindow()?.endEditing(true)
if item.id == .marriage { // 婚姻状况
YHSheetPickerView.show(type:.marriage, selectTitle: item.value) {
YHSheetPickerView.show(type:.marriage1, selectTitle: self.faimilyInfo.getMarriageState()) {
[weak self] item in
guard let self = self else { return }
self.item.value = item.title
self.detailLabel.text = item.title
self.faimilyInfo.married = "\(item.index)"
self.updateItem(self.item, familyInfo: self.faimilyInfo)
}
} else if item.id == .birthPlace {
} else if item.id == .birthPlaceInChina { // 国内出生地
let vc = YHAddressViewController()
vc.backLocationStringController = {
......@@ -217,17 +224,20 @@ class YHInfoItemView: UIView {
}
self.item.value = address
self.detailLabel.text = address
self.faimilyInfo.birthPlace.area = [string2, string3]
self.updateItem(self.item, familyInfo: self.faimilyInfo)
}
UIViewController.current?.present(vc, animated: true)
} else if item.id == .declareNation {
} else if item.id == .declareNation { // 申报国籍
let vc = YHSelectCountryViewController()
vc.backLocationStringController = { (country) in
self.item.value = country
self.detailLabel.text = country
self.faimilyInfo.nationality = country
self.updateItem(self.item, familyInfo: self.faimilyInfo)
}
UIViewController.current?.navigationController?.pushViewController(vc)
}
}
}
......@@ -250,6 +260,9 @@ class YHInfoItemView: UIView {
detailLabel.isHidden = isTextEdit
textField.isHidden = !isTextEdit
textField.placeholder = self.getPlaceHolder()
if item.id == .firstName || item.id == .lastName {
textField.keyboardType = .asciiCapable // 英文键盘
}
let isSelectSheet = item.isEditMode && item.action == .select
clickRowBtn.isHidden = !isSelectSheet
......@@ -259,6 +272,7 @@ class YHInfoItemView: UIView {
if item.action == .edit {
rightBtn.setImage(UIImage(named: "family_info_del"), for: .normal)
} else if item.action == .select {
rightBtn.setImage(UIImage(named: "family_info_arrow"), for: .normal)
}
......@@ -286,7 +300,6 @@ class YHInfoItemView: UIView {
}
let isShowTips = (familyInfo.isCheck && !item.tips.isEmpty)
item.tips = self.getRedTips()
errorTipsLabel.text = item.tips
errorTipsLabel.isHidden = !isShowTips
errorTipsLabel.snp.remakeConstraints { make in
......@@ -307,11 +320,23 @@ extension YHInfoItemView: UITextFieldDelegate {
let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
// if newText.count > Self.maxWordsCount {
// YHHUD.flash(message: "限制最多\(Self.maxWordsCount)个字符")
// return false
// }
if self.item.id != .birthPlaceAboard {
if newText.count >= 30 {
textField.text = String(newText.prefix(30))
textFieldChanged(textField:textField)
return false
}
}
printLog("\(newText)")
if self.item.id == .mainApplicantName || self.item.id == .spouseName || self.item.id == .childName {
// 名称编辑时需防抖请求拼音
debounceTimer?.invalidate()
debounceTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { [weak self] _ in
self?.updateNamePinYin()
}
}
return true
}
......@@ -324,32 +349,55 @@ extension YHInfoItemView: UITextFieldDelegate {
self.updateText("")
}
self.item.tips = self.getRedTips()
self.updateItem(self.item, familyInfo: self.faimilyInfo)
}
func updateNamePinYin() {
// 编辑姓名
if self.item.id == .mainApplicantName || self.item.id == .spouseName || self.item.id == .childName {
if let text = textField.text, !text.isEmpty {
YHHUD.show(.progress(message: "加载中..."))
self.viewModel.getPinYinFromName(text) {
[weak self] firstNamePinYin, lastNamePinYin in
YHHUD.hide()
guard let self = self else { return }
self.faimilyInfo.familyName = firstNamePinYin
self.faimilyInfo.givenName = lastNamePinYin
updateName?(text)
}
}
}
}
func updateText(_ newText: String) {
self.item.value = newText
if self.item.id == .mainApplicantName || self.item.id == .spouseName || self.item.id == .childName {
self.faimilyInfo.name = newText
} else if self.item.id == .firstName {
self.faimilyInfo.familyName = newText
self.faimilyInfo.familyName = newText.uppercased()
self.item.value = newText.uppercased()
} else if self.item.id == .lastName {
self.faimilyInfo.givenName = newText
self.faimilyInfo.givenName = newText.uppercased()
self.item.value = newText.uppercased()
} else if self.item.id == .occupation {
self.faimilyInfo.occupationName = newText
} else if self.item.id == .hongKongId {
self.faimilyInfo.hkIdentityid = newText
} else if self.item.id == .birthPlaceAboard {
self.faimilyInfo.birthPlace.foreign = newText
}
}
func getPlaceHolder() -> String {
if self.item.id == .mainApplicantName {
return "请输入主申人姓名"
return "请输入主申人姓名"
}
if self.item.id == .spouseName {
......@@ -364,38 +412,9 @@ extension YHInfoItemView: UITextFieldDelegate {
} else if self.item.id == .lastName {
return "请输入名(拼音)"
} else if self.item.id == .occupation {
return "请输入职业"
} else if self.item.id == .hongKongId {
return "请输入香港身份证号"
}
return ""
}
func getRedTips() -> String {
if !self.item.value.isEmpty {
return ""
}
if self.item.id == .mainApplicantName {
return "请输入主申请人姓名"
}
if self.item.id == .spouseName {
return "请输入配偶姓名"
}
if self.item.id == .childName {
return "请输入子女姓名"
} else if self.item.id == .firstName {
return "请输入姓(拼音)"
} else if self.item.id == .lastName {
return "请输入名(拼音)"
} else if self.item.id == .birthPlaceAboard {
return "请输入出生地"
} else if self.item.id == .occupation {
return "请输入职业"
......@@ -409,6 +428,7 @@ extension YHInfoItemView: UITextFieldDelegate {
class YHInfoOptionView: UIView {
var clickBlock:((YHFamilyInfoOption)->())?
var item: YHFamilyInfoItem = YHFamilyInfoItem()
var familyInfo: YHFamilyMemberInfoModel = YHFamilyMemberInfoModel()
......@@ -592,9 +612,11 @@ class YHInfoOptionView: UIView {
option.isSelect = isSelect
if isSelect {
item.value = option.value
clickBlock?(option)
}
}
self.updateItem(item, familyInfo: self.familyInfo)
}
}
}
......@@ -144,6 +144,11 @@ extension YHUploadCertificateVC: UITableViewDelegate, UITableViewDataSource {
if 0 <= indexPath.section && indexPath.section < items.count {
let vc = YHUploadCertificateDetailVC()
vc.detailType = .SmallWhiteNote
self.navigationController?.pushViewController(vc)
}
}
......
//
// YHHKCardTemplateView.swift
// galaxy
//
// Created by davidhuangA on 2024/8/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKCardTemplateView: UIView {
static let contentViewH : CGFloat = (518 / 375 ) * KScreenWidth
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hex: 0x0F1214, alpha: 0.5)
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
lazy var titleLable: UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.font = UIFont.PFSC_B(ofSize:17)
label.text = "香港身份证示例模板"
label.textAlignment = .center
return label
}()
lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
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 closeBtn: UIButton = {
let button = UIButton(type: .custom)
button.addTarget(self, action: #selector(dismiss), for: .touchUpInside)
button.setImage(UIImage(named: "work_example_close"), for: .normal)
button.setImage(UIImage(named: "work_example_close"), for: .selected)
return button
}()
lazy var myScrollView: UIScrollView = {
let view = UIScrollView()
view.backgroundColor = .clear
view.showsVerticalScrollIndicator = false
return view
}()
lazy var bkgImageV: UIImageView = {
let imageV = UIImageView()
imageV.image = UIImage(named: "hkCard_template")
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()
}
}
extension YHHKCardTemplateView {
static func sheetView() -> YHHKCardTemplateView {
let view = YHHKCardTemplateView(frame:UIScreen.main.bounds)
return view
}
func show() {
UIApplication.shared.yhKeyWindow()?.addSubview(self)
UIView.animate(withDuration: 0.5) {
let whiteHeight = YHHKCardTemplateView.contentViewH
self.whiteContentView.frame = CGRect(x: 0, y: KScreenHeight - whiteHeight, width: KScreenWidth, height: whiteHeight)
}
}
@objc func dismiss() {
removeFromSuperview()
}
@objc func clickSureBtn() {
dismiss()
}
}
private extension YHHKCardTemplateView {
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(16.0, 16.0));
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 = YHHKCardTemplateView.contentViewH
whiteContentView.frame = CGRect(x: 0, y: KScreenHeight, width: KScreenWidth, height: whiteHeight)
whiteContentView.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(98)
}
whiteContentView.addSubview(titleLable)
titleLable.snp.makeConstraints { make in
make.top.equalToSuperview().offset(kMargin)
make.left.right.equalToSuperview()
make.height.equalTo(24)
}
whiteContentView.addSubview(closeBtn)
closeBtn.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-21)
make.height.width.equalTo(24)
make.centerY.equalTo(titleLable.snp.centerY)
}
whiteContentView.addSubview(lineView)
lineView.snp.makeConstraints { make in
make.top.equalTo(titleLable.snp.bottom).offset(12)
make.left.equalToSuperview().offset(21)
make.right.equalToSuperview().offset(-21)
make.height.equalTo(1)
}
whiteContentView.addSubview(myScrollView)
myScrollView.snp.makeConstraints { make in
make.top.equalTo(lineView.snp.bottom).offset(21)
make.right.equalToSuperview().offset(-21)
make.width.equalTo(KScreenWidth - 21 * 2)
make.height.equalTo(whiteHeight-98 - 16 - 24 - 12 - 1 - 21)
}
if let tmpImage = UIImage(named:"hkCard_template") {
let scale = Double(tmpImage.size.height / tmpImage.size.width)
let imageH = scale * (KScreenWidth - 21 * 2)
myScrollView.addSubview(bkgImageV)
bkgImageV.snp.makeConstraints { make in
make.top.equalToSuperview()
make.left.equalToSuperview()
make.width.equalTo(KScreenWidth - 21 * 2)
make.height.equalTo(imageH)
}
myScrollView.contentSize = CGSize(width: KScreenWidth - 21 * 2, height: imageH)
}
}
}
//
// YHSmallWhiteNoteTemplateView.swift
// galaxy
//
// Created by davidhuangA on 2024/8/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHSmallWhiteNoteTemplateView: UIView {
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hex: 0x0F1214, alpha: 0.5)
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
lazy var titleLable: UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.font = UIFont.PFSC_B(ofSize:17)
label.text = "小白条示例模板"
label.textAlignment = .center
return label
}()
lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
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 closeBtn: UIButton = {
let button = UIButton(type: .custom)
button.addTarget(self, action: #selector(dismiss), for: .touchUpInside)
button.setImage(UIImage(named: "work_example_close"), for: .normal)
button.setImage(UIImage(named: "work_example_close"), for: .selected)
return button
}()
lazy var myScrollView: UIScrollView = {
let view = UIScrollView()
view.backgroundColor = .clear
view.showsVerticalScrollIndicator = false
return view
}()
lazy var bkgImageV: UIImageView = {
let imageV = UIImageView()
imageV.image = UIImage(named: "xbt_template")
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()
}
}
extension YHSmallWhiteNoteTemplateView {
static func sheetView() -> YHSmallWhiteNoteTemplateView {
let view = YHSmallWhiteNoteTemplateView(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() {
removeFromSuperview()
}
@objc func clickSureBtn() {
dismiss()
}
}
private extension YHSmallWhiteNoteTemplateView {
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(16.0, 16.0));
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.frame = CGRect(x: 0, y: KScreenHeight, width: KScreenWidth, height: whiteHeight)
whiteContentView.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(98)
}
whiteContentView.addSubview(titleLable)
titleLable.snp.makeConstraints { make in
make.top.equalToSuperview().offset(kMargin)
make.left.right.equalToSuperview()
make.height.equalTo(24)
}
whiteContentView.addSubview(closeBtn)
closeBtn.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-21)
make.height.width.equalTo(24)
make.centerY.equalTo(titleLable.snp.centerY)
}
whiteContentView.addSubview(lineView)
lineView.snp.makeConstraints { make in
make.top.equalTo(titleLable.snp.bottom).offset(12)
make.left.equalToSuperview().offset(21)
make.right.equalToSuperview().offset(-21)
make.height.equalTo(1)
}
whiteContentView.addSubview(myScrollView)
myScrollView.snp.makeConstraints { make in
make.top.equalTo(lineView.snp.bottom).offset(21)
make.right.equalToSuperview().offset(-21)
make.width.equalTo(KScreenWidth - 21 * 2)
make.height.equalTo(whiteHeight-98 - 16 - 24 - 12 - 1 - 21)
}
if let tmpImage = UIImage(named:"xbt_template") {
let scale = Double(tmpImage.size.height / tmpImage.size.width)
let imageH = scale * (KScreenWidth - 21 * 2)
myScrollView.addSubview(bkgImageV)
bkgImageV.snp.makeConstraints { make in
make.top.equalToSuperview()
make.left.equalToSuperview()
make.width.equalTo(KScreenWidth - 21 * 2)
make.height.equalTo(imageH)
}
myScrollView.contentSize = CGSize(width: KScreenWidth - 21 * 2, height: imageH)
}
}
}
//
// YHUploadCertificateDateItem.swift
// galaxy
//
// Created by davidhuangA on 2024/8/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import AttributedString
class YHUploadCertificateDateItem: UIView {
static let viewH : CGFloat = 20.0
private lazy var cardLabel : UILabel = {
let lable = UILabel()
lable.text = "入境日期"
lable.font = .PFSC_R(ofSize: 14)
lable.textColor = UIColor.mainTextColor
return lable
}()
lazy var dateTextField:UITextField = {
let textField = UITextField()
textField.backgroundColor = .clear
textField.attributedPlaceholder = NSAttributedString(string: "请输入".local, attributes: [NSAttributedString.Key.foregroundColor : UIColor.mainTextColor30])
textField.font = UIFont.PFSC_M(ofSize: 14)
textField.tintColor = UIColor.brandMainColor
textField.textColor = UIColor.mainTextColor
textField.isEnabled = false
return textField
}()
lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
lazy var statusImageView: UIImageView = {
let view = UIImageView(image: UIImage(named: "grey_right_arrow"))
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
private extension YHUploadCertificateDateItem {
func setupUI() {
addSubview(cardLabel)
cardLabel.snp.makeConstraints { make in
make.top.left.bottom.equalToSuperview()
}
let a: ASAttributedString = .init("*", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.failColor))
let b: ASAttributedString = .init(" 入境日期", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.mainTextColor))
cardLabel.attributed.text = a + b
addSubview(dateTextField)
dateTextField.snp.makeConstraints { make in
make.top.bottom.equalToSuperview()
make.left.equalTo(cardLabel.snp.right).offset(48)
}
addSubview(statusImageView)
statusImageView.snp.makeConstraints { make in
make.right.equalToSuperview()
make.centerY.equalToSuperview()
make.height.width.equalTo(20)
}
}
}
extension YHUploadCertificateDateItem {
func update(title : String,isMust : Bool = true) {
if isMust {
let a: ASAttributedString = .init("*", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.failColor))
let b: ASAttributedString = .init(NSAttributedString(string: title), .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.mainTextColor))
cardLabel.attributed.text = a + b
} else {
let b: ASAttributedString = .init(NSAttributedString(string: title), .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.mainTextColor))
cardLabel.attributed.text = b
}
}
}
......@@ -9,8 +9,12 @@
import UIKit
class YHVisaPaymentVC: YHBaseViewController {
var items: [String] = ["1", "1","1"] //for test hjl
let items : [String] = ["1","2","3"]
lazy var viewModel: YHVisaPaymentViewModel = {
let vm = YHVisaPaymentViewModel()
return vm
}()
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
......@@ -63,10 +67,24 @@ class YHVisaPaymentVC: YHBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
loadData()
}
}
private extension YHVisaPaymentVC {
func loadData() {
let params: [String : Any] = ["order_id": 133874]
viewModel.getVisaPaymentList(params) { success, error in
if success {
} else {
}
self.tableView.reloadData()
}
}
func setupUI() {
gk_navTitle = "签证缴费"
gk_navBarAlpha = 1.0
......@@ -117,11 +135,13 @@ extension YHVisaPaymentVC: UITableViewDelegate, UITableViewDataSource {
let warningCell = tableView.dequeueReusableCell(withIdentifier: YHVisaPaymentTipsCell.cellReuseIdentifier, for: indexPath)
return warningCell
} else if indexPath.section == 1 {
let approveCell = tableView.dequeueReusableCell(withIdentifier: YHVisaPayTypeCell.cellReuseIdentifier, for: indexPath)
let approveCell = tableView.dequeueReusableCell(withIdentifier: YHVisaPayTypeCell.cellReuseIdentifier, for: indexPath) as! YHVisaPayTypeCell
approveCell.dataModel = self.viewModel.visaPaymentData
return approveCell
} else if indexPath.section == 2 {
let approveCell = tableView.dequeueReusableCell(withIdentifier: YHPayMembersCell.cellReuseIdentifier, for: indexPath)
let approveCell = tableView.dequeueReusableCell(withIdentifier: YHPayMembersCell.cellReuseIdentifier, for: indexPath) as! YHPayMembersCell
approveCell.dataModel = self.viewModel.visaPaymentData
return approveCell
} else {
......
//
// YHVisaPaymentListModel.swift
// galaxy
//
// Created by davidhuangA on 2024/8/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import SmartCodable
class YHVisaPaymentListModel: SmartCodable {
var payment_url : String = "" //支付地址url
var list : [YHVisaPaymentModel] = []
required init() {
}
}
class YHVisaPaymentModel : SmartCodable {
var id: Int = -1//
var type: String = ""//用户类型
var name: String = ""//用户姓名
var file_num : String = ""//档案号
var approval_date : String = ""//获批日期
var fee_hkd : Int = -1//缴费金额港币
var fee_rmb:String = "" //缴费金额人民币
var pay_status: Int = -1 //支付状态 7-待缴费 8-已缴费 9-电子签证已过期
var min_pay_time : String = ""//可缴费开始参考时间
var max_pay_time : String = ""//可缴费结束参考时间
var birthday : String = ""//生日
var receipt : String = ""//电子签证地址
var pay_time : String = "" // 缴费时间
var want_min_time : String = "" //意向开始时间
var want_max_time : String = "" //意向结束时间
var go_time : String = ""// 实际赴港时间
required init() {
}
}
......@@ -10,6 +10,22 @@ import UIKit
class YHPayMemberContentItem: UIView {
private var urlPdf : String?
lazy var previewFileTool:YHFilePreviewTool = {
let tool = YHFilePreviewTool(targetVC: UIViewController.current)
return tool
}()
lazy var viewModel: YHBaseViewModel = {
let vm = YHBaseViewModel()
return vm
}()
lazy var titleLabel: UILabel = {
let label = UILabel()
label.font = UIFont.PFSC_R(ofSize: 13)
......@@ -22,7 +38,7 @@ class YHPayMemberContentItem: UIView {
let label = UILabel()
label.numberOfLines = 0
label.font = UIFont.PFSC_R(ofSize: 13)
label.text = "TQEN-03709888-23"
label.text = ""
label.textColor = UIColor.mainTextColor
label.textAlignment = .right
return label
......@@ -62,8 +78,26 @@ class YHPayMemberContentItem: UIView {
private extension YHPayMemberContentItem {
@objc func clickCopyBtn() {
UIPasteboard.general.string = "test_test"
YHHUD.flash(message: "已复制档案号")
if let title = copyBtn.titleForNormal {
if title.contains("复制") {
UIPasteboard.general.string = self.detailLabel.text
YHHUD.flash(message: "已复制档案号")
} else {
//查看
if let url = urlPdf,!url.isEmpty {
YHHUD.show(.progress(message: "加载中..."))
self.viewModel.getRealUsefulUrl(url) {
[weak self] resultUrl in
YHHUD.hide()
guard let self = self else { return }
self.previewFileTool.openXLSXRemoteFile(urlString: resultUrl, fileName:"")
}
}
}
}
}
func setupUI() {
......@@ -75,6 +109,9 @@ private extension YHPayMemberContentItem {
extension YHPayMemberContentItem {
func updateUI(title : String = "",detail : String = "",oneLine : Bool = true, showBtn : Bool = false) {
urlPdf = detail
titleLabel.removeFromSuperview()
detailLabel.removeFromSuperview()
copyBtn.removeFromSuperview()
......
......@@ -8,6 +8,12 @@
import UIKit
class YHPayMemberContentItems: UIView {
var dataModel : YHVisaPaymentModel? {
didSet {
updateUI()
}
}
//用来自动布局
lazy var fakeView: UIView = {
let view = UIView()
......@@ -49,7 +55,10 @@ private extension YHPayMemberContentItems {
extension YHPayMemberContentItems {
func updateUI( type : Int) {
func updateUI() {
guard let model = dataModel else { return }
whiteContentView.removeSubviews()
removeSubviews()
......@@ -67,13 +76,13 @@ extension YHPayMemberContentItems {
make.top.equalTo(kMargin)
make.left.right.equalToSuperview()
}
item.updateUI(title: "档案号:",detail: "TQEN-03709888-23",showBtn: true)
item.updateUI(title: "档案号:",detail: model.file_num,showBtn: true)
var lastView : UIView = item
if type == 1 || type == 2 {
//支付状态 7-待缴费 8-已缴费 9-电子签证已过期
if model.pay_status == 7 || model.pay_status == 9 {
do {
let item = YHPayMemberContentItem()
whiteContentView.addSubview(item)
......@@ -81,7 +90,7 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview()
}
item.updateUI(title: "可缴费时间段:",detail: "2023.10.1 - 2023.11.20",showBtn: false)
item.updateUI(title: "可缴费时间段:",detail: "\(model.min_pay_time) - \(model.max_pay_time)",showBtn: false)
lastView = item
}
......@@ -93,11 +102,11 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview()
}
item.updateUI(title: "缴费金额:",detail: "230港币(≈211.89人民币)",showBtn: false)
item.updateUI(title: "缴费金额:",detail: "\(model.fee_hkd)港币(≈\(model.fee_rmb)人民币)",showBtn: false)
lastView = item
}
} else if type == 3 {
} else if model.pay_status == 8 {
do {
let item = YHPayMemberContentItem()
......@@ -106,7 +115,7 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview()
}
item.updateUI(title: "缴费金额:",detail: "230港币(≈211.89人民币)",showBtn: false)
item.updateUI(title: "缴费金额:",detail: "\(model.fee_hkd)港币(≈\(model.fee_rmb)人民币)",showBtn: false)
lastView = item
}
......@@ -127,7 +136,13 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview()
}
item.updateUI(title: "缴费电子签证:",detail: "Visa QMEN-0021813-22.pdf",oneLine: false,showBtn: true)
if model.receipt.isEmpty {
item.updateUI(title: "缴费电子签证:",detail: "暂未查询到结果",oneLine: false,showBtn: false)
} else {
item.updateUI(title: "缴费电子签证:",detail: model.receipt,oneLine: false,showBtn: true)
}
lastView = item
}
}
......
......@@ -11,6 +11,19 @@ import AttributedString
class YHPayMemberItemsView: UIView {
var dataModel : YHVisaPaymentModel? {
didSet {
updateUI()
}
}
var isLastFlag : Bool = false {
didSet {
lineView.isHidden = isLastFlag
}
}
lazy var sectionItem: YHPayMemberSectionItem = {
let view = YHPayMemberSectionItem()
return view
......@@ -24,6 +37,7 @@ class YHPayMemberItemsView: UIView {
lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
view.isHidden = true
return view
}()
......@@ -41,13 +55,16 @@ class YHPayMemberItemsView: UIView {
private extension YHPayMemberItemsView {
func setupUI() {
updateUI() //for test hjl
// updateUI()
}
}
extension YHPayMemberItemsView {
func updateUI(type : Int = 1) {
func updateUI() {
guard let model = dataModel else { return }
removeSubviews()
addSubview(sectionItem)
......@@ -55,7 +72,7 @@ extension YHPayMemberItemsView {
make.top.left.right.equalToSuperview()
make.height.equalTo(YHPayMemberSectionItem.viewH)
}
sectionItem.updateUI(type: type)
sectionItem.dataModel = model
addSubview(contentItems)
......@@ -64,7 +81,7 @@ extension YHPayMemberItemsView {
make.left.equalToSuperview()
make.right.equalToSuperview()
}
contentItems.updateUI(type: type)
contentItems.dataModel = model
addSubview(lineView)
lineView.snp.makeConstraints { make in
......@@ -73,10 +90,5 @@ extension YHPayMemberItemsView {
make.height.equalTo(1)
make.bottom.equalToSuperview()
}
if type == 3 {
lineView.isHidden = true
} else {
lineView.isHidden = false
}
}
}
......@@ -11,6 +11,12 @@ import UIKit
class YHPayMemberSectionItem: UIView {
static let viewH : CGFloat = 22.0
var dataModel : YHVisaPaymentModel? {
didSet {
updateUI()
}
}
lazy var tagView: UIView = {
let view = UIView()
view.backgroundColor = .brandMainColor
......@@ -76,20 +82,26 @@ private extension YHPayMemberSectionItem {
extension YHPayMemberSectionItem {
func updateUI(type : Int) {
func updateUI() {
guard let model = dataModel else { return }
var txt = "待缴费"
var color : UIColor = UIColor.failColor
if type == 1 {
//支付状态 7-待缴费 8-已缴费 9-电子签证已过期
if model.pay_status == 7 {
txt = "待缴费"
color = .brandMainColor
} else if type == 2 {
} else if model.pay_status == 9 {
txt = "已过期"
color = .failColor
} else if type == 3 {
} else if model.pay_status == 8 {
txt = "已缴费"
color = .mainTextColor50
}
titleLabel.text = model.name
detailLabel.text = txt
detailLabel.textColor = color
......
......@@ -13,6 +13,12 @@ class YHPayMembersCell: UITableViewCell {
static let cellReuseIdentifier = "YHPayMembersCell"
var dataModel : YHVisaPaymentListModel? {
didSet {
updataUI()
}
}
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
......@@ -107,32 +113,26 @@ private extension YHPayMembersCell {
make.bottom.equalToSuperview()
}
updateUI() //for test hjl
}
}
private extension YHPayMembersCell {
func updateUI() {
func updataUI() {
guard let model = dataModel,model.list.count > 0 else { return }
for (index,item) in arrOtherView.enumerated() {
for (_,item) in arrOtherView.enumerated() {
item.removeFromSuperview()
}
arrOtherView.removeAll()
//for test hjl
fakeView.snp.removeConstraints()
let arr : [Int] = [1,2,3]//for test hjl
var lastView : UIView = tipsLable
for (index, item) in arr.enumerated() {
for (index, item) in model.list.enumerated() {
let view = YHPayMemberItemsView()
whiteContentView.addSubview(view)
view.snp.makeConstraints { make in
......@@ -140,15 +140,17 @@ private extension YHPayMembersCell {
make.left.equalTo(kMargin)
make.right.equalToSuperview().offset(-kMargin)
}
view.updateUI(type: index + 1)
view.dataModel = item
lastView = view
view.isLastFlag = (index == model.list.count - 1) ? true : false
arrOtherView.append(view)
}
fakeView.snp.makeConstraints { make in
make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.top.equalTo(lastView.snp.bottom)
make.left.equalTo(kMargin)
make.right.equalToSuperview().offset(-kMargin)
make.height.equalTo(1)
......
......@@ -14,6 +14,12 @@ class YHVisaPayTypeCell: UITableViewCell {
static let cellReuseIdentifier = "YHVisaPayTypeCell"
var dataModel : YHVisaPaymentListModel? {
didSet {
updataUI()
}
}
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
......@@ -24,6 +30,23 @@ class YHVisaPayTypeCell: UITableViewCell {
}()
lazy var linkLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.textColor = UIColor.brandMainColor
label.font = UIFont.PFSC_R(ofSize:12)
let linkTxt : String = "https://www.gov.hk/tc/residents/immigration/nonpermanent/onlinepaymentforevisa.htm"
return label
}()
lazy var qrCodeImageView : UIImageView = {
let qrCode : UIImageView = UIImageView()
qrCode.contentMode = .scaleAspectFill
qrCode.isUserInteractionEnabled = false
qrCode.addGestureRecognizer(longPress)
return qrCode
}()
/// 已添加的长按手势
private lazy var longPress: UILongPressGestureRecognizer = {
......@@ -45,6 +68,34 @@ class YHVisaPayTypeCell: UITableViewCell {
private extension YHVisaPayTypeCell {
func updataUI() {
guard let model = dataModel else { return }
let linkTxt : String = model.payment_url
let aa: ASAttributedString = .init(NSAttributedString(string: linkTxt), .font(UIFont.PFSC_R(ofSize: 12)),.foreground(UIColor.brandMainColor),.underline([.single], color: UIColor.brandMainColor),.action {
if let url = URL(string: linkTxt) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
// 显示一个提示,告知用户无法打开链接
print("无法打开链接")
}
}
})
linkLabel.attributed.text = aa
let qrString = linkTxt
if let qrCode = qrString.generateQRCode() {
// 可以将qrCode设置为UIImageView的image属性来显示二维码
self.qrCodeImageView.image = qrCode
self.qrCodeImageView.isUserInteractionEnabled = true
}
}
func saveImage(_ image: UIImage) {
// 确保应用有权访问相册
PHPhotoLibrary.requestAuthorization { status in
......@@ -143,27 +194,8 @@ private extension YHVisaPayTypeCell {
let link = UILabel()
link.numberOfLines = 0
link.textColor = UIColor.brandMainColor
link.font = UIFont.PFSC_R(ofSize:12)
let linkTxt : String = "https://www.gov.hk/tc/residents/immigration/nonpermanent/onlinepaymentforevisa.htm"
let aa: ASAttributedString = .init(NSAttributedString(string: linkTxt), .font(UIFont.PFSC_R(ofSize: 12)),.foreground(UIColor.brandMainColor),.underline([.single], color: UIColor.brandMainColor),.action {
if let url = URL(string: linkTxt) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
// 显示一个提示,告知用户无法打开链接
print("无法打开链接")
}
}
})
link.attributed.text = aa
holdView.addSubview(link)
link.snp.makeConstraints { make in
holdView.addSubview(linkLabel)
linkLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
......@@ -182,13 +214,10 @@ private extension YHVisaPayTypeCell {
make.height.equalTo(1)
}
let qrCode : UIImageView = UIImageView(image: UIImage(named: "visaPay_qr"))
qrCode.contentMode = .scaleAspectFill
qrCode.isUserInteractionEnabled = true
qrCode.addGestureRecognizer(longPress)
whiteContentView.addSubview(qrCode)
qrCode.snp.makeConstraints { make in
whiteContentView.addSubview(qrCodeImageView)
qrCodeImageView.snp.makeConstraints { make in
make.top.equalTo(line2.snp.bottom).offset(18)
make.right.equalTo(-kMargin)
make.height.width.equalTo(86)
......@@ -204,7 +233,7 @@ private extension YHVisaPayTypeCell {
whiteContentView.addSubview(label3)
label3.snp.makeConstraints { make in
make.top.equalTo(qrCode.snp.top).offset(12)
make.top.equalTo(qrCodeImageView.snp.top).offset(12)
make.left.equalTo(kMargin)
make.height.equalTo(20)
}
......@@ -222,7 +251,7 @@ private extension YHVisaPayTypeCell {
label4.snp.makeConstraints { make in
make.top.equalTo(label3.snp.bottom).offset(6)
make.left.equalTo(kMargin)
make.right.equalTo(qrCode.snp.left).offset(-kMargin)
make.right.equalTo(qrCodeImageView.snp.left).offset(-kMargin)
}
}
......
//
// YHVisaPaymentViewModel.swift
// galaxy
//
// Created by davidhuangA on 2024/8/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHVisaPaymentViewModel: YHBaseViewModel {
//电子签字列表
var visaPaymentData : YHVisaPaymentListModel?
}
//请求接口
extension YHVisaPaymentViewModel {
//电子签字缴费列表
func getVisaPaymentList(_ params: [String : Any],callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.VisaPayment.paymentListApi
let _ = YHNetRequest.getRequest(url: strUrl,params: params) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
printLog("model 是 ==> \(json)")
if json.code == 200 {
let dic = json.data
guard let resultModel = YHVisaPaymentListModel.deserialize(dict: dic as? [AnyHashable : Any]) else {
callBackBlock(false,nil)
return
}
self.visaPaymentData = resultModel
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)
}
}
}
......@@ -80,6 +80,12 @@ extension YHPrincleViewModel {
} else if type == 2 {
//identify = 2 // 香港身份获批操作指引
params = ["identify":2]
} else if type == 3 {
//identify = 3 // 家庭信息确认风险弹窗
params = ["identify":3]
} else if type == 15 {
//identify = 2 // 首页正式批弹窗
params = ["identify":15]
......
......@@ -529,7 +529,7 @@ extension YHChildBasicInfoVC : UITableViewDelegate, UITableViewDataSource {
}
} else if detailItem.type == .marriageState { // 婚姻
YHSheetPickerView.show(type: .marriage, selectTitle:self.child?.married) {
YHSheetPickerView.show(type: .marriageText, selectTitle:self.child?.married) {
[weak self] selectItem in
guard let self = self else { return }
self.child?.married = selectItem.title
......
......@@ -483,7 +483,7 @@ extension YHBrotherInfoVC : UITableViewDelegate, UITableViewDataSource {
} else if detailItem.type == .marriageState { // 婚姻
let marriage = self.brotherInfo?.married
YHSheetPickerView.show(type: .marriage, selectTitle:marriage) {
YHSheetPickerView.show(type: .marriageText, selectTitle:marriage) {
[weak self] selectItem in
guard let self = self else { return }
self.brotherInfo?.married = selectItem.title
......
......@@ -530,7 +530,7 @@ extension YHParentInfoVC : UITableViewDelegate, UITableViewDataSource {
}
} else if detailItem.type == .marriageState { // 婚姻
YHSheetPickerView.show(type: .marriage, selectTitle:self.parentInfo?.married) {
YHSheetPickerView.show(type: .marriageText, selectTitle:self.parentInfo?.married) {
[weak self] selectItem in
guard let self = self else { return }
self.parentInfo?.married = selectItem.title
......
......@@ -193,13 +193,25 @@ class YHSheetPickerView: UIView {
// 婚姻
.marriage:
.marriageText:
[YHSheetPickerViewItem(title:"已婚".local, index:1),
YHSheetPickerViewItem(title:"未婚".local, index:0),
YHSheetPickerViewItem(title:"分居".local, index:2),
YHSheetPickerViewItem(title:"离婚".local, index:3),
YHSheetPickerViewItem(title:"丧偶".local, index:4),
],
// 婚姻
.marriage1:
[YHSheetPickerViewItem(title:"已婚".local, index:1),
YHSheetPickerViewItem(title:"未婚".local, index:2),
YHSheetPickerViewItem(title:"离婚".local, index:3),
YHSheetPickerViewItem(title:"分居".local, index:4),
YHSheetPickerViewItem(title:"丧偶".local, index:5),
YHSheetPickerViewItem(title:"已婚(再婚)".local, index:6),
],
// 教育
.educationStyle:
......@@ -333,7 +345,7 @@ class YHSheetPickerView: UIView {
var whiteContentHeight = 322.0
if self.type == .educationDegree
|| self.type == .marriage
|| self.type == .marriageText
|| self.type == .profession
|| self.type == .certificate
|| self.type == .identity
......@@ -389,7 +401,9 @@ extension YHSheetPickerView {
return "选择学位"
case .educationDegree:
return "选择学位"
case .marriage:
case .marriageText:
return "选择婚姻状况"
case .marriage1:
return "选择婚姻状况"
case .educationStyle:
return "选择授课形式"
......
......@@ -18,8 +18,11 @@ enum YHSheetPickerViewType: Int {
case educationDegree
// 学位有无
case ownDegree
// 婚姻
case marriage
// 婚姻(文字有效)
case marriageText
// 婚姻(index有效)
case marriage1
// 授课形式
case educationStyle
// 职业
......
......@@ -68,7 +68,6 @@ class YHImageViewController: YHBaseViewController {
self.back()
}
}
// self.resultView.kf.setImage(with: URL(string: success))
self.resultView.kf.setImage(with: URL(string: success), placeholder: UIImage(named: "global_default_image"))
}
}
......
......@@ -345,8 +345,11 @@ extension YHMyViewController : UITableViewDelegate, UITableViewDataSource {
if true {
// test dy
let vc = YHFamilyInfoConfirmViewController()
self.navigationController?.pushViewController(vc)
if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") as? Int {
let vc = YHFamilyInfoConfirmViewController()
vc.orderId = orderID
self.navigationController?.pushViewController(vc)
}
return
}
......
......@@ -255,4 +255,27 @@ extension String {
let regex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
return range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil
}
///字符串 生成二维码
func generateQRCode() -> UIImage? {
guard let data = self.data(using: .ascii, allowLossyConversion: false) else {
return nil
}
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
guard let outputImage = filter?.outputImage else {
return nil
}
let context = CIContext()
if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
return UIImage(cgImage: cgImage)
}
return nil
}
}
......@@ -19,6 +19,9 @@ extension UIColor {
//品牌主色 30
static let brandMainColor30 : UIColor = UIColor(hexString: "#0046B4",transparency: 0.3)!
//品牌主色 50
static let brandMainColor50 : UIColor = UIColor(hexString: "#0046B4",transparency: 0.5)!
//品牌主色 16
static let brandMainColor16 : UIColor = UIColor(hexString: "#0046B4",transparency: 0.16)!
......@@ -34,7 +37,6 @@ extension UIColor {
}
//标题/主内容
// static let mainTextColor : UIColor = UIColor(hexString: "#222222")!
static let mainTextColor : UIColor = UIColor(hexString: "#121A26")!
static let mainTextColor5 : UIColor = UIColor(hexString: "#121A26",transparency: 0.05)!
static let mainTextColor18 : UIColor = UIColor(hexString: "#121A26",transparency: 0.18)!
......
......@@ -8,6 +8,11 @@
class YHAllApiName {
//办证段 - 签证缴费
struct VisaPayment {
//GetUserPaymentList 电子签证缴费列表
static let paymentListApi = "super-app/order/customer/service/payment"
}
//灰度功能接口
struct Uat {
......@@ -413,6 +418,24 @@ class YHAllApiName {
struct FamilyInfoConfirm {
// 获取获批者家庭信息
static let familyInfo = "super-app/order/family/information/obtain"
// 通过姓名获取拼音
static let pinyinInfo = "super-app/order/information/pinyin"
// 家庭信息-提交修改
static let submitFamilyUpdate = "super-app/order/family/information/check"
// 获批者家庭信息确认后下一步
static let familyNext = "super-app/order/family/information/next"
}
struct AppointHK {
// 所有赴港人员列表
static let hkMembers = "super-app/order/hk/user"
// 获取港府预约结果
static let appointResult = "super-app/order/hk/reservation"
// 是否需要赴港
static let isNeedGoHK = "super-app/order/hk/get-need-to-hk"
// 保存是否需要赴港
static let saveNeedGoHK = "super-app/order/hk/save-need-to-hk"
}
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "箭头中@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "箭头中@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group 2033195760@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 2033195760@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group 2033195759@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 2033195759@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group 33332540@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 33332540@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
......@@ -18,5 +18,8 @@
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}
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