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 { ...@@ -301,32 +301,32 @@ class YHShareOneCollectionViewCell: UICollectionViewCell {
make.center.equalToSuperview() make.center.equalToSuperview()
make.width.height.equalTo(17) make.width.height.equalTo(17)
} }
let qrString = YHBaseUrlManager.shared.curH5URL() + "superAppBridge.html#/evaluation?channel=lkhtj-app&customer_id=\(YHLoginManager.shared.userModel?.id ?? "")&scene_id=30"
if let qrCode = generateQRCode(from: 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属性来显示二维码 // 可以将qrCode设置为UIImageView的image属性来显示二维码
imageView.image = qrCode imageView.image = qrCode
} }
} }
func generateQRCode(from string: String) -> UIImage? { // func generateQRCode(from string: String) -> UIImage? {
guard let data = string.data(using: .ascii, allowLossyConversion: false) else { // guard let data = string.data(using: .ascii, allowLossyConversion: false) else {
return nil // return nil
} // }
//
let filter = CIFilter(name: "CIQRCodeGenerator") // let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage") // filter?.setValue(data, forKey: "inputMessage")
//
guard let outputImage = filter?.outputImage else { // guard let outputImage = filter?.outputImage else {
return nil // return nil
} // }
//
let context = CIContext() // let context = CIContext()
if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) { // if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
return UIImage(cgImage: cgImage) // return UIImage(cgImage: cgImage)
} // }
//
return nil // return nil
} // }
} }
class YHShareTwoCollectionViewCell: UICollectionViewCell { class YHShareTwoCollectionViewCell: UICollectionViewCell {
......
...@@ -10,9 +10,11 @@ import UIKit ...@@ -10,9 +10,11 @@ import UIKit
class YHCertificateAppointViewController: YHBaseViewController { class YHCertificateAppointViewController: YHBaseViewController {
var orderId: Int = 0
var items = ["", "", ""] var items = ["", "", ""]
let viewModel = YHCerAppointViewModel() let viewModel = YHCerAppointViewModel()
var isNeedGoHK: Int = 3 // 0不需要 1需要赴港 2没有选择
lazy var tableView: UITableView = { lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped) let tableView = UITableView(frame:.zero, style:.grouped)
tableView.estimatedSectionHeaderHeight = 16.0 tableView.estimatedSectionHeaderHeight = 16.0
...@@ -49,6 +51,12 @@ class YHCertificateAppointViewController: YHBaseViewController { ...@@ -49,6 +51,12 @@ class YHCertificateAppointViewController: YHBaseViewController {
make.top.equalTo(k_Height_NavigationtBarAndStatuBar) make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
} }
} }
func requetIsGoToHK() {
viewModel.getIsNeedGoToHK(orderId: orderId) { needGoHK in
}
}
} }
extension YHCertificateAppointViewController: UITableViewDelegate, UITableViewDataSource { 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,8 +10,11 @@ import UIKit ...@@ -10,8 +10,11 @@ import UIKit
class YHCerAppointViewModel: NSObject { class YHCerAppointViewModel: NSObject {
var serviceArr:[YHServiceItem] = [] var serviceArr: [YHServiceItem] = []
var hkUsers: [YHHKMemberModel] = []
var appointResult: YHAppointHKResultModel = YHAppointHKResultModel()
// 获取香港服务列表
func getServicelist(_ callBack: @escaping (_ success: Bool,_ error: YHErrorModel?)->()) { func getServicelist(_ callBack: @escaping (_ success: Bool,_ error: YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.MakeCertificate.servicelist let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.MakeCertificate.servicelist
...@@ -48,4 +51,129 @@ class YHCerAppointViewModel: NSObject { ...@@ -48,4 +51,129 @@ class YHCerAppointViewModel: NSObject {
callBack(false, err) 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 { ...@@ -14,6 +14,7 @@ class YHFamilyInfoConfirmViewController: YHBaseViewController {
var sectionItems:[String] = ["", "", "", ""] var sectionItems:[String] = ["", "", "", ""]
var familyArr: [YHApplicantInfoModel] = [] var familyArr: [YHApplicantInfoModel] = []
let viewModel = YHFamilyInfoConfirmViewModel() let viewModel = YHFamilyInfoConfirmViewModel()
let princleVM = YHPrincleViewModel()
lazy var tableView: UITableView = { lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped) let tableView = UITableView(frame:.zero, style:.grouped)
...@@ -72,6 +73,7 @@ class YHFamilyInfoConfirmViewController: YHBaseViewController { ...@@ -72,6 +73,7 @@ class YHFamilyInfoConfirmViewController: YHBaseViewController {
make.left.right.bottom.equalToSuperview() make.left.right.bottom.equalToSuperview()
make.height.equalTo(98) make.height.equalTo(98)
} }
requetRiskAlert()
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
...@@ -81,6 +83,42 @@ class YHFamilyInfoConfirmViewController: YHBaseViewController { ...@@ -81,6 +83,42 @@ class YHFamilyInfoConfirmViewController: YHBaseViewController {
@objc func didBottomBtnClicked() { @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,11 +18,11 @@ enum YHFamilyMemberRelationType: Int { ...@@ -18,11 +18,11 @@ enum YHFamilyMemberRelationType: Int {
class YHFamilyInfoUpdateViewController: YHBaseViewController { class YHFamilyInfoUpdateViewController: YHBaseViewController {
var memberId: Int = 0 var orderId: Int = 0
var familyGroupModel: YHFamilyGroupModel = YHFamilyGroupModel() var detailMember:YHApplicantInfoModel = YHApplicantInfoModel()
let viewModel = YHFamilyInfoConfirmViewModel() let viewModel = YHFamilyInfoConfirmViewModel()
private var detailMember:YHApplicantInfoModel = YHApplicantInfoModel()
var relation:YHFamilyMemberRelationType = .mainApplicant var relation:YHFamilyMemberRelationType = .mainApplicant
var isInfoEditing: Bool = false var isInfoEditing: Bool = false
...@@ -100,62 +100,104 @@ class YHFamilyInfoUpdateViewController: YHBaseViewController { ...@@ -100,62 +100,104 @@ class YHFamilyInfoUpdateViewController: YHBaseViewController {
make.left.right.bottom.equalToSuperview() make.left.right.bottom.equalToSuperview()
make.height.equalTo(98) make.height.equalTo(98)
} }
self.getDetail() self.updateData()
} }
@objc func didCancelBtnClicked() { // 展示挽留弹窗
func showRetainAlertView() {
YHCommonAlertView.show("", "您尚未保存修改,确定关闭吗?", "仍然关闭", "继续编辑", fullGuestureEnable: false) {
self.navigationController?.popViewController()
} callBack: {
} }
}
@objc func didCancelBtnClicked() {
if self.isInfoEditing {
showRetainAlertView()
return
}
self.navigationController?.popViewController()
}
@objc func didConfirmBtnClicked() { @objc func didConfirmBtnClicked() {
self.detailMember.info.isCheck = true self.detailMember.info.isCheck = true
self.tableView.reloadData() self.updateData()
if let arr1 = items.first {
for item in arr1 {
if !item.tips.isEmpty {
return
}
}
} }
func getDetail() { if let detaiParams = self.detailMember.info.toDictionary() {
if self.familyGroupModel.main.info.id == memberId {
self.detailMember = self.familyGroupModel.main
} else if self.familyGroupModel.spouse.info.id == memberId { var relation = ""
self.detailMember = self.familyGroupModel.spouse if self.detailMember.info.relation == YHFamilyMemberRelationType.mainApplicant.rawValue {
relation = "main"
} else { } else if self.detailMember.info.relation == YHFamilyMemberRelationType.spouse.rawValue {
for child in self.familyGroupModel.children { relation = "spouse"
if child.info.id == memberId {
self.detailMember = child } else if self.detailMember.info.relation == YHFamilyMemberRelationType.child.rawValue {
break 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() items.removeAll()
// arr1 信息核实 // arr1 信息核实
let arr1 = viewModel.getInfoConfirm(self.detailMember, isEditMode: self.isInfoEditing) let arr1 = viewModel.getInfoConfirm(self.detailMember, isEditMode: self.isInfoEditing)
items.append(arr1)
// arr2 递交证件信息 // arr2 递交证件信息
if let cer = self.detailMember.info.identity {
let arr2 = viewModel.getCertificateInfo(self.detailMember) let arr2 = viewModel.getCertificateInfo(self.detailMember)
// 信息核实
items.append(arr1)
// 递交证件信息
items.append(arr2) items.append(arr2)
}
self.tableView.reloadData() self.tableView.reloadData()
} }
func updateData() { override func backItemClick(_ sender: Any) {
if let arr1 = items.first { self.view.endEditing(true)
for item in arr1 { if self.isInfoEditing {
item.isEditMode = self.isInfoEditing showRetainAlertView()
item.isShowPreviousInfo = (!self.isInfoEditing && !item.previousValue.isEmpty) return
} }
self.navigationController?.popViewController()
} }
self.tableView.reloadData()
// 是否可以返回,包括点击返回和手势返回,默认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 ...@@ -176,12 +218,19 @@ extension YHFamilyInfoUpdateViewController: UITableViewDelegate, UITableViewData
cell.modifyBtn.isHidden = false cell.modifyBtn.isHidden = false
cell.isEditState = self.isInfoEditing cell.isEditState = self.isInfoEditing
cell.familyInfo = self.detailMember.info cell.familyInfo = self.detailMember.info
// 更改编辑状态
cell.editBlock = { cell.editBlock = {
[weak self] isEdit in [weak self] isEdit in
guard let self = self else { return } guard let self = self else { return }
self.isInfoEditing = isEdit self.isInfoEditing = isEdit
self.updateData() self.updateData()
} }
// 选择出生国家/地区
cell.selectBirthNation = {
[weak self] isInChina in
guard let self = self else { return }
self.updateData()
}
} else { } else {
......
...@@ -9,6 +9,16 @@ ...@@ -9,6 +9,16 @@
import UIKit import UIKit
import SmartCodable import SmartCodable
class YHFamilyNamePinYin: SmartCodable {
var family_name: String = ""
var given_name: String = ""
required init() {
}
}
class YHFamilyGroupModel: SmartCodable { class YHFamilyGroupModel: SmartCodable {
var orderid: Int = 0 var orderid: Int = 0
var main: YHApplicantInfoModel = YHApplicantInfoModel() var main: YHApplicantInfoModel = YHApplicantInfoModel()
...@@ -66,8 +76,8 @@ class YHFamilyMemberInfoModel: SmartCodable { ...@@ -66,8 +76,8 @@ class YHFamilyMemberInfoModel: SmartCodable {
var givenNameHistory: String = "" var givenNameHistory: String = ""
var married: String = "" var married: String = ""
var marriedHistory: String = "" var marriedHistory: String = ""
var birthPlaceAboard: Int = -1 var birthPlaceAboard: String = "0"
var birthPlaceAboardHistory: Int = -1 var birthPlaceAboardHistory: String = ""
var birthPlace: YHApplicantBirthPlaceModel = YHApplicantBirthPlaceModel() var birthPlace: YHApplicantBirthPlaceModel = YHApplicantBirthPlaceModel()
var birthPlaceHistory: YHApplicantBirthPlaceModel = YHApplicantBirthPlaceModel() var birthPlaceHistory: YHApplicantBirthPlaceModel = YHApplicantBirthPlaceModel()
var nationalityType: Int = -1 var nationalityType: Int = -1
...@@ -76,7 +86,7 @@ class YHFamilyMemberInfoModel: SmartCodable { ...@@ -76,7 +86,7 @@ class YHFamilyMemberInfoModel: SmartCodable {
var nationalityHistory: String = "" var nationalityHistory: String = ""
var hkIdentityid: String = "" var hkIdentityid: String = ""
var hkIdentityidHistory: String = "" var hkIdentityidHistory: String = ""
var identity: YHApplicantIdentityModel = YHApplicantIdentityModel() var identity: YHApplicantIdentityModel?
var occupationName: String = "" var occupationName: String = ""
var occupationNameHistory: String = "" var occupationNameHistory: String = ""
...@@ -99,6 +109,44 @@ class YHFamilyMemberInfoModel: SmartCodable { ...@@ -99,6 +109,44 @@ class YHFamilyMemberInfoModel: SmartCodable {
return "" 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() { required init() {
} }
...@@ -128,7 +176,7 @@ class YHFamilyMemberInfoModel: SmartCodable { ...@@ -128,7 +176,7 @@ class YHFamilyMemberInfoModel: SmartCodable {
case occupationNameHistory = "occupation_name_history" 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.id = id
self.name = name self.name = name
......
...@@ -132,8 +132,8 @@ extension YHApproverInfoVerifyCell: UITableViewDelegate, UITableViewDataSource { ...@@ -132,8 +132,8 @@ extension YHApproverInfoVerifyCell: UITableViewDelegate, UITableViewDataSource {
if 0 <= indexPath.row && indexPath.row < familyArr.count { if 0 <= indexPath.row && indexPath.row < familyArr.count {
let model = familyArr[indexPath.row] let model = familyArr[indexPath.row]
let vc = YHFamilyInfoUpdateViewController() let vc = YHFamilyInfoUpdateViewController()
vc.memberId = model.info.id vc.detailMember = model
vc.familyGroupModel = self.familyGroupInfo vc.orderId = self.familyGroupInfo.orderid
UIViewController.current?.navigationController?.pushViewController(vc) UIViewController.current?.navigationController?.pushViewController(vc)
} }
} }
......
...@@ -17,9 +17,12 @@ class YHFamilyMemberInfoCell: UITableViewCell { ...@@ -17,9 +17,12 @@ class YHFamilyMemberInfoCell: UITableViewCell {
self.nameLabel.text = model.info.name self.nameLabel.text = model.info.name
self.pinyinLabel.text = "\(model.info.familyName) \(model.info.givenName)" self.pinyinLabel.text = "\(model.info.familyName) \(model.info.givenName)"
self.statusLabel.text = model.confirmStatus == 1 ? "已确认" : "待核对" self.statusLabel.text = model.confirmStatus == 1 ? "已确认" : "待核对"
let tintColor: UIColor = model.confirmStatus == 1 ? .brandMainColor : .init(hex: 0x3CC694) let textColor: UIColor = model.confirmStatus == 1 ? .init(hex: 0x3CC694) : .brandMainColor
let originArrowImg = UIImage(named: "family_info_status_arrow") self.statusLabel.textColor = textColor
self.arrowImgView.image = originArrowImg?.withTintColor(tintColor, renderingMode: UIImage.RenderingMode.alwaysTemplate)
let img = UIImage(named: "family_info_status_arrow")?.withRenderingMode(.alwaysTemplate)
self.arrowImgView.image = img
self.arrowImgView.tintColor = textColor
} }
lazy var lineView: UIView = { lazy var lineView: UIView = {
......
...@@ -11,6 +11,8 @@ import AttributedString ...@@ -11,6 +11,8 @@ import AttributedString
class YHFamilyMemberRiskWarningAlertView: UIView { class YHFamilyMemberRiskWarningAlertView: UIView {
var confirmBlock:(()->())?
lazy var blackMaskView: UIView = { lazy var blackMaskView: UIView = {
let view = UIView() let view = UIView()
view.backgroundColor = .alertMaskColor view.backgroundColor = .alertMaskColor
...@@ -76,6 +78,7 @@ class YHFamilyMemberRiskWarningAlertView: UIView { ...@@ -76,6 +78,7 @@ class YHFamilyMemberRiskWarningAlertView: UIView {
} }
@objc func didConfirmBtnClicked() { @objc func didConfirmBtnClicked() {
confirmBlock?()
self.dismiss() self.dismiss()
} }
......
...@@ -16,14 +16,15 @@ enum YHFamilyInfoType: Int { ...@@ -16,14 +16,15 @@ enum YHFamilyInfoType: Int {
case lastName = 3 case lastName = 3
case marriage = 4 case marriage = 4
case birthNation = 5 case birthNation = 5
case birthPlace = 6 case birthPlaceInChina = 6
case declareNation = 7 case birthPlaceAboard = 7
case occupation = 8 case declareNation = 8
case hongKongId = 9 case occupation = 9
case travelCertificateType = 10 case hongKongId = 10
case travelCertificateId = 11 case travelCertificateType = 11
case childName = 12 case travelCertificateId = 12
case spouseName = 13 case childName = 13
case spouseName = 14
} }
enum YHFamilyInfoActionType: Int { enum YHFamilyInfoActionType: Int {
...@@ -35,9 +36,11 @@ enum YHFamilyInfoActionType: Int { ...@@ -35,9 +36,11 @@ enum YHFamilyInfoActionType: Int {
class YHFamilyInfoOption { class YHFamilyInfoOption {
var value: String = "" var value: String = ""
var index: Int = -1
var isSelect: Bool = false var isSelect: Bool = false
init(value: String, isSelect: Bool) { init(index: Int, value: String, isSelect: Bool) {
self.index = index
self.value = value self.value = value
self.isSelect = isSelect self.isSelect = isSelect
} }
...@@ -55,8 +58,55 @@ class YHFamilyInfoItem { ...@@ -55,8 +58,55 @@ class YHFamilyInfoItem {
var isEditMode: Bool = false var isEditMode: Bool = false
var isShowPreviousInfo: Bool = false var isShowPreviousInfo: Bool = false
var tips: String = "" var tips: String {
var isCheck: Bool = false 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() { required init() {
...@@ -87,7 +137,15 @@ class YHIFamilyInfoListCell: UITableViewCell { ...@@ -87,7 +137,15 @@ class YHIFamilyInfoListCell: UITableViewCell {
self.modifyBtn.setTitle(text, for: .normal) self.modifyBtn.setTitle(text, for: .normal)
} }
} }
// 是否进入编辑模式
var editBlock:((Bool)->())? var editBlock:((Bool)->())?
// 选择出生国家
var selectBirthNation:((Bool)->())?
// 姓名更改
var updateName:((String)->())?
var items: [YHFamilyInfoItem] = []
lazy var whiteView: UIView = { lazy var whiteView: UIView = {
let view = UIView() let view = UIView()
...@@ -168,6 +226,7 @@ class YHIFamilyInfoListCell: UITableViewCell { ...@@ -168,6 +226,7 @@ class YHIFamilyInfoListCell: UITableViewCell {
} }
func updateItems(_ items:[YHFamilyInfoItem]) { func updateItems(_ items:[YHFamilyInfoItem]) {
self.items = items
itemsContentView.removeSubviews() itemsContentView.removeSubviews()
var lastItemView:UIView? = nil var lastItemView:UIView? = nil
...@@ -179,8 +238,34 @@ class YHIFamilyInfoListCell: UITableViewCell { ...@@ -179,8 +238,34 @@ class YHIFamilyInfoListCell: UITableViewCell {
if let itemView = itemView as? YHInfoItemView { if let itemView = itemView as? YHInfoItemView {
itemsContentView.addSubview(itemView) itemsContentView.addSubview(itemView)
itemView.updateItem(item, familyInfo: familyInfo) 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 { } 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) itemsContentView.addSubview(itemView)
itemView.updateItem(item, familyInfo: familyInfo) itemView.updateItem(item, familyInfo: familyInfo)
} }
......
...@@ -13,9 +13,15 @@ import AttributedString ...@@ -13,9 +13,15 @@ import AttributedString
// 文字编辑和选择弹窗时使用 // 文字编辑和选择弹窗时使用
class YHInfoItemView: UIView { class YHInfoItemView: UIView {
private var debounceTimer: Timer?
var item: YHFamilyInfoItem = YHFamilyInfoItem() var item: YHFamilyInfoItem = YHFamilyInfoItem()
var faimilyInfo: YHFamilyMemberInfoModel = YHFamilyMemberInfoModel() var faimilyInfo: YHFamilyMemberInfoModel = YHFamilyMemberInfoModel()
// 姓名更改
var updateName:((String)->())?
let rightBtnWidth = 22.0 let rightBtnWidth = 22.0
let viewModel = YHFamilyInfoConfirmViewModel()
lazy var lineView: UIView = { lazy var lineView: UIView = {
let view = UIView() let view = UIView()
...@@ -33,7 +39,6 @@ class YHInfoItemView: UIView { ...@@ -33,7 +39,6 @@ class YHInfoItemView: UIView {
let label = UILabel() let label = UILabel()
label.numberOfLines = 0 label.numberOfLines = 0
label.font = UIFont.PFSC_M(ofSize: 14) label.font = UIFont.PFSC_M(ofSize: 14)
label.text = "张全蛋"
label.textColor = UIColor.mainTextColor label.textColor = UIColor.mainTextColor
return label return label
}() }()
...@@ -66,7 +71,6 @@ class YHInfoItemView: UIView { ...@@ -66,7 +71,6 @@ class YHInfoItemView: UIView {
lazy var previousTitleLabel: UILabel = { lazy var previousTitleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = UIFont.PFSC_R(ofSize: 12) label.font = UIFont.PFSC_R(ofSize: 12)
label.text = "原主申人姓名"
label.textColor = UIColor.mainTextColor(alpha: 0.3) label.textColor = UIColor.mainTextColor(alpha: 0.3)
return label return label
}() }()
...@@ -75,7 +79,6 @@ class YHInfoItemView: UIView { ...@@ -75,7 +79,6 @@ class YHInfoItemView: UIView {
let label = UILabel() let label = UILabel()
label.numberOfLines = 0 label.numberOfLines = 0
label.font = UIFont.PFSC_M(ofSize: 12) label.font = UIFont.PFSC_M(ofSize: 12)
label.text = "张全蛋"
label.textColor = UIColor.mainTextColor(alpha: 0.3) label.textColor = UIColor.mainTextColor(alpha: 0.3)
return label return label
}() }()
...@@ -192,17 +195,21 @@ class YHInfoItemView: UIView { ...@@ -192,17 +195,21 @@ class YHInfoItemView: UIView {
@objc func didSelectSheetBtnClicked() { @objc func didSelectSheetBtnClicked() {
if item.action == .select { if item.action == .select {
self.becomeFirstResponder() // 强制键盘消失
if item.id == .marriage { UIApplication.shared.yhKeyWindow()?.endEditing(true)
YHSheetPickerView.show(type:.marriage, selectTitle: item.value) { if item.id == .marriage { // 婚姻状况
YHSheetPickerView.show(type:.marriage1, selectTitle: self.faimilyInfo.getMarriageState()) {
[weak self] item in [weak self] item in
guard let self = self else { return } guard let self = self else { return }
self.item.value = item.title self.item.value = item.title
self.detailLabel.text = 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() let vc = YHAddressViewController()
vc.backLocationStringController = { vc.backLocationStringController = {
...@@ -217,17 +224,20 @@ class YHInfoItemView: UIView { ...@@ -217,17 +224,20 @@ class YHInfoItemView: UIView {
} }
self.item.value = address self.item.value = address
self.detailLabel.text = address self.detailLabel.text = address
self.faimilyInfo.birthPlace.area = [string2, string3]
self.updateItem(self.item, familyInfo: self.faimilyInfo)
} }
UIViewController.current?.present(vc, animated: true) UIViewController.current?.present(vc, animated: true)
} else if item.id == .declareNation { } else if item.id == .declareNation { // 申报国籍
let vc = YHSelectCountryViewController() let vc = YHSelectCountryViewController()
vc.backLocationStringController = { (country) in vc.backLocationStringController = { (country) in
self.item.value = country self.item.value = country
self.detailLabel.text = country self.detailLabel.text = country
self.faimilyInfo.nationality = country
self.updateItem(self.item, familyInfo: self.faimilyInfo)
} }
UIViewController.current?.navigationController?.pushViewController(vc) UIViewController.current?.navigationController?.pushViewController(vc)
} }
} }
} }
...@@ -250,6 +260,9 @@ class YHInfoItemView: UIView { ...@@ -250,6 +260,9 @@ class YHInfoItemView: UIView {
detailLabel.isHidden = isTextEdit detailLabel.isHidden = isTextEdit
textField.isHidden = !isTextEdit textField.isHidden = !isTextEdit
textField.placeholder = self.getPlaceHolder() textField.placeholder = self.getPlaceHolder()
if item.id == .firstName || item.id == .lastName {
textField.keyboardType = .asciiCapable // 英文键盘
}
let isSelectSheet = item.isEditMode && item.action == .select let isSelectSheet = item.isEditMode && item.action == .select
clickRowBtn.isHidden = !isSelectSheet clickRowBtn.isHidden = !isSelectSheet
...@@ -259,6 +272,7 @@ class YHInfoItemView: UIView { ...@@ -259,6 +272,7 @@ class YHInfoItemView: UIView {
if item.action == .edit { if item.action == .edit {
rightBtn.setImage(UIImage(named: "family_info_del"), for: .normal) rightBtn.setImage(UIImage(named: "family_info_del"), for: .normal)
} else if item.action == .select { } else if item.action == .select {
rightBtn.setImage(UIImage(named: "family_info_arrow"), for: .normal) rightBtn.setImage(UIImage(named: "family_info_arrow"), for: .normal)
} }
...@@ -286,7 +300,6 @@ class YHInfoItemView: UIView { ...@@ -286,7 +300,6 @@ class YHInfoItemView: UIView {
} }
let isShowTips = (familyInfo.isCheck && !item.tips.isEmpty) let isShowTips = (familyInfo.isCheck && !item.tips.isEmpty)
item.tips = self.getRedTips()
errorTipsLabel.text = item.tips errorTipsLabel.text = item.tips
errorTipsLabel.isHidden = !isShowTips errorTipsLabel.isHidden = !isShowTips
errorTipsLabel.snp.remakeConstraints { make in errorTipsLabel.snp.remakeConstraints { make in
...@@ -307,11 +320,23 @@ extension YHInfoItemView: UITextFieldDelegate { ...@@ -307,11 +320,23 @@ extension YHInfoItemView: UITextFieldDelegate {
let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string) let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
// if newText.count > Self.maxWordsCount { if self.item.id != .birthPlaceAboard {
// YHHUD.flash(message: "限制最多\(Self.maxWordsCount)个字符") if newText.count >= 30 {
// return false textField.text = String(newText.prefix(30))
// } textFieldChanged(textField:textField)
return false
}
}
printLog("\(newText)") 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 return true
} }
...@@ -324,32 +349,55 @@ extension YHInfoItemView: UITextFieldDelegate { ...@@ -324,32 +349,55 @@ extension YHInfoItemView: UITextFieldDelegate {
self.updateText("") self.updateText("")
} }
self.item.tips = self.getRedTips()
self.updateItem(self.item, familyInfo: self.faimilyInfo) 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) { func updateText(_ newText: String) {
self.item.value = newText self.item.value = newText
if self.item.id == .mainApplicantName || self.item.id == .spouseName || self.item.id == .childName { if self.item.id == .mainApplicantName || self.item.id == .spouseName || self.item.id == .childName {
self.faimilyInfo.name = newText self.faimilyInfo.name = newText
} else if self.item.id == .firstName { } 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 { } 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 { } else if self.item.id == .occupation {
self.faimilyInfo.occupationName = newText self.faimilyInfo.occupationName = newText
} else if self.item.id == .hongKongId { } else if self.item.id == .hongKongId {
self.faimilyInfo.hkIdentityid = newText self.faimilyInfo.hkIdentityid = newText
} else if self.item.id == .birthPlaceAboard {
self.faimilyInfo.birthPlace.foreign = newText
} }
} }
func getPlaceHolder() -> String { func getPlaceHolder() -> String {
if self.item.id == .mainApplicantName { if self.item.id == .mainApplicantName {
return "请输入主申人姓名" return "请输入主申人姓名"
} }
if self.item.id == .spouseName { if self.item.id == .spouseName {
...@@ -365,37 +413,8 @@ extension YHInfoItemView: UITextFieldDelegate { ...@@ -365,37 +413,8 @@ extension YHInfoItemView: UITextFieldDelegate {
} else if self.item.id == .lastName { } else if self.item.id == .lastName {
return "请输入名(拼音)" return "请输入名(拼音)"
} else if self.item.id == .occupation { } else if self.item.id == .birthPlaceAboard {
return "请输入职业" 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 == .occupation { } else if self.item.id == .occupation {
return "请输入职业" return "请输入职业"
...@@ -409,6 +428,7 @@ extension YHInfoItemView: UITextFieldDelegate { ...@@ -409,6 +428,7 @@ extension YHInfoItemView: UITextFieldDelegate {
class YHInfoOptionView: UIView { class YHInfoOptionView: UIView {
var clickBlock:((YHFamilyInfoOption)->())?
var item: YHFamilyInfoItem = YHFamilyInfoItem() var item: YHFamilyInfoItem = YHFamilyInfoItem()
var familyInfo: YHFamilyMemberInfoModel = YHFamilyMemberInfoModel() var familyInfo: YHFamilyMemberInfoModel = YHFamilyMemberInfoModel()
...@@ -592,9 +612,11 @@ class YHInfoOptionView: UIView { ...@@ -592,9 +612,11 @@ class YHInfoOptionView: UIView {
option.isSelect = isSelect option.isSelect = isSelect
if isSelect { if isSelect {
item.value = option.value item.value = option.value
clickBlock?(option)
} }
} }
self.updateItem(item, familyInfo: self.familyInfo) self.updateItem(item, familyInfo: self.familyInfo)
} }
} }
} }
...@@ -144,6 +144,11 @@ extension YHUploadCertificateVC: UITableViewDelegate, UITableViewDataSource { ...@@ -144,6 +144,11 @@ extension YHUploadCertificateVC: UITableViewDelegate, UITableViewDataSource {
if 0 <= indexPath.section && indexPath.section < items.count { 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 @@ ...@@ -9,8 +9,12 @@
import UIKit import UIKit
class YHVisaPaymentVC: YHBaseViewController { class YHVisaPaymentVC: YHBaseViewController {
let items : [String] = ["1","2","3"]
var items: [String] = ["1", "1","1"] //for test hjl lazy var viewModel: YHVisaPaymentViewModel = {
let vm = YHVisaPaymentViewModel()
return vm
}()
lazy var tableView: UITableView = { lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped) let tableView = UITableView(frame:.zero, style:.grouped)
...@@ -63,10 +67,24 @@ class YHVisaPaymentVC: YHBaseViewController { ...@@ -63,10 +67,24 @@ class YHVisaPaymentVC: YHBaseViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setupUI() setupUI()
loadData()
} }
} }
private extension YHVisaPaymentVC { 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() { func setupUI() {
gk_navTitle = "签证缴费" gk_navTitle = "签证缴费"
gk_navBarAlpha = 1.0 gk_navBarAlpha = 1.0
...@@ -117,11 +135,13 @@ extension YHVisaPaymentVC: UITableViewDelegate, UITableViewDataSource { ...@@ -117,11 +135,13 @@ extension YHVisaPaymentVC: UITableViewDelegate, UITableViewDataSource {
let warningCell = tableView.dequeueReusableCell(withIdentifier: YHVisaPaymentTipsCell.cellReuseIdentifier, for: indexPath) let warningCell = tableView.dequeueReusableCell(withIdentifier: YHVisaPaymentTipsCell.cellReuseIdentifier, for: indexPath)
return warningCell return warningCell
} else if indexPath.section == 1 { } 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 return approveCell
} else if indexPath.section == 2 { } 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 return approveCell
} else { } 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 ...@@ -10,6 +10,22 @@ import UIKit
class YHPayMemberContentItem: UIView { 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 = { lazy var titleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = UIFont.PFSC_R(ofSize: 13) label.font = UIFont.PFSC_R(ofSize: 13)
...@@ -22,7 +38,7 @@ class YHPayMemberContentItem: UIView { ...@@ -22,7 +38,7 @@ class YHPayMemberContentItem: UIView {
let label = UILabel() let label = UILabel()
label.numberOfLines = 0 label.numberOfLines = 0
label.font = UIFont.PFSC_R(ofSize: 13) label.font = UIFont.PFSC_R(ofSize: 13)
label.text = "TQEN-03709888-23" label.text = ""
label.textColor = UIColor.mainTextColor label.textColor = UIColor.mainTextColor
label.textAlignment = .right label.textAlignment = .right
return label return label
...@@ -62,8 +78,26 @@ class YHPayMemberContentItem: UIView { ...@@ -62,8 +78,26 @@ class YHPayMemberContentItem: UIView {
private extension YHPayMemberContentItem { private extension YHPayMemberContentItem {
@objc func clickCopyBtn() { @objc func clickCopyBtn() {
UIPasteboard.general.string = "test_test" if let title = copyBtn.titleForNormal {
if title.contains("复制") {
UIPasteboard.general.string = self.detailLabel.text
YHHUD.flash(message: "已复制档案号") 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() { func setupUI() {
...@@ -75,6 +109,9 @@ private extension YHPayMemberContentItem { ...@@ -75,6 +109,9 @@ private extension YHPayMemberContentItem {
extension YHPayMemberContentItem { extension YHPayMemberContentItem {
func updateUI(title : String = "",detail : String = "",oneLine : Bool = true, showBtn : Bool = false) { func updateUI(title : String = "",detail : String = "",oneLine : Bool = true, showBtn : Bool = false) {
urlPdf = detail
titleLabel.removeFromSuperview() titleLabel.removeFromSuperview()
detailLabel.removeFromSuperview() detailLabel.removeFromSuperview()
copyBtn.removeFromSuperview() copyBtn.removeFromSuperview()
......
...@@ -8,6 +8,12 @@ ...@@ -8,6 +8,12 @@
import UIKit import UIKit
class YHPayMemberContentItems: UIView { class YHPayMemberContentItems: UIView {
var dataModel : YHVisaPaymentModel? {
didSet {
updateUI()
}
}
//用来自动布局 //用来自动布局
lazy var fakeView: UIView = { lazy var fakeView: UIView = {
let view = UIView() let view = UIView()
...@@ -49,7 +55,10 @@ private extension YHPayMemberContentItems { ...@@ -49,7 +55,10 @@ private extension YHPayMemberContentItems {
extension YHPayMemberContentItems { extension YHPayMemberContentItems {
func updateUI( type : Int) { func updateUI() {
guard let model = dataModel else { return }
whiteContentView.removeSubviews() whiteContentView.removeSubviews()
removeSubviews() removeSubviews()
...@@ -67,13 +76,13 @@ extension YHPayMemberContentItems { ...@@ -67,13 +76,13 @@ extension YHPayMemberContentItems {
make.top.equalTo(kMargin) make.top.equalTo(kMargin)
make.left.right.equalToSuperview() 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 var lastView : UIView = item
//支付状态 7-待缴费 8-已缴费 9-电子签证已过期
if type == 1 || type == 2 { if model.pay_status == 7 || model.pay_status == 9 {
do { do {
let item = YHPayMemberContentItem() let item = YHPayMemberContentItem()
whiteContentView.addSubview(item) whiteContentView.addSubview(item)
...@@ -81,7 +90,7 @@ extension YHPayMemberContentItems { ...@@ -81,7 +90,7 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin) make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview() 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 lastView = item
} }
...@@ -93,11 +102,11 @@ extension YHPayMemberContentItems { ...@@ -93,11 +102,11 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin) make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview() 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 lastView = item
} }
} else if type == 3 { } else if model.pay_status == 8 {
do { do {
let item = YHPayMemberContentItem() let item = YHPayMemberContentItem()
...@@ -106,7 +115,7 @@ extension YHPayMemberContentItems { ...@@ -106,7 +115,7 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin) make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview() 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 lastView = item
} }
...@@ -127,7 +136,13 @@ extension YHPayMemberContentItems { ...@@ -127,7 +136,13 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin) make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview() 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 lastView = item
} }
} }
......
...@@ -11,6 +11,19 @@ import AttributedString ...@@ -11,6 +11,19 @@ import AttributedString
class YHPayMemberItemsView: UIView { class YHPayMemberItemsView: UIView {
var dataModel : YHVisaPaymentModel? {
didSet {
updateUI()
}
}
var isLastFlag : Bool = false {
didSet {
lineView.isHidden = isLastFlag
}
}
lazy var sectionItem: YHPayMemberSectionItem = { lazy var sectionItem: YHPayMemberSectionItem = {
let view = YHPayMemberSectionItem() let view = YHPayMemberSectionItem()
return view return view
...@@ -24,6 +37,7 @@ class YHPayMemberItemsView: UIView { ...@@ -24,6 +37,7 @@ class YHPayMemberItemsView: UIView {
lazy var lineView: UIView = { lazy var lineView: UIView = {
let view = UIView() let view = UIView()
view.backgroundColor = .separatorColor view.backgroundColor = .separatorColor
view.isHidden = true
return view return view
}() }()
...@@ -41,13 +55,16 @@ class YHPayMemberItemsView: UIView { ...@@ -41,13 +55,16 @@ class YHPayMemberItemsView: UIView {
private extension YHPayMemberItemsView { private extension YHPayMemberItemsView {
func setupUI() { func setupUI() {
updateUI() //for test hjl // updateUI()
} }
} }
extension YHPayMemberItemsView { extension YHPayMemberItemsView {
func updateUI(type : Int = 1) { func updateUI() {
guard let model = dataModel else { return }
removeSubviews() removeSubviews()
addSubview(sectionItem) addSubview(sectionItem)
...@@ -55,7 +72,7 @@ extension YHPayMemberItemsView { ...@@ -55,7 +72,7 @@ extension YHPayMemberItemsView {
make.top.left.right.equalToSuperview() make.top.left.right.equalToSuperview()
make.height.equalTo(YHPayMemberSectionItem.viewH) make.height.equalTo(YHPayMemberSectionItem.viewH)
} }
sectionItem.updateUI(type: type) sectionItem.dataModel = model
addSubview(contentItems) addSubview(contentItems)
...@@ -64,7 +81,7 @@ extension YHPayMemberItemsView { ...@@ -64,7 +81,7 @@ extension YHPayMemberItemsView {
make.left.equalToSuperview() make.left.equalToSuperview()
make.right.equalToSuperview() make.right.equalToSuperview()
} }
contentItems.updateUI(type: type) contentItems.dataModel = model
addSubview(lineView) addSubview(lineView)
lineView.snp.makeConstraints { make in lineView.snp.makeConstraints { make in
...@@ -73,10 +90,5 @@ extension YHPayMemberItemsView { ...@@ -73,10 +90,5 @@ extension YHPayMemberItemsView {
make.height.equalTo(1) make.height.equalTo(1)
make.bottom.equalToSuperview() make.bottom.equalToSuperview()
} }
if type == 3 {
lineView.isHidden = true
} else {
lineView.isHidden = false
}
} }
} }
...@@ -11,6 +11,12 @@ import UIKit ...@@ -11,6 +11,12 @@ import UIKit
class YHPayMemberSectionItem: UIView { class YHPayMemberSectionItem: UIView {
static let viewH : CGFloat = 22.0 static let viewH : CGFloat = 22.0
var dataModel : YHVisaPaymentModel? {
didSet {
updateUI()
}
}
lazy var tagView: UIView = { lazy var tagView: UIView = {
let view = UIView() let view = UIView()
view.backgroundColor = .brandMainColor view.backgroundColor = .brandMainColor
...@@ -76,20 +82,26 @@ private extension YHPayMemberSectionItem { ...@@ -76,20 +82,26 @@ private extension YHPayMemberSectionItem {
extension YHPayMemberSectionItem { extension YHPayMemberSectionItem {
func updateUI(type : Int) { func updateUI() {
guard let model = dataModel else { return }
var txt = "待缴费" var txt = "待缴费"
var color : UIColor = UIColor.failColor var color : UIColor = UIColor.failColor
if type == 1 { //支付状态 7-待缴费 8-已缴费 9-电子签证已过期
if model.pay_status == 7 {
txt = "待缴费" txt = "待缴费"
color = .brandMainColor color = .brandMainColor
} else if type == 2 { } else if model.pay_status == 9 {
txt = "已过期" txt = "已过期"
color = .failColor color = .failColor
} else if type == 3 { } else if model.pay_status == 8 {
txt = "已缴费" txt = "已缴费"
color = .mainTextColor50 color = .mainTextColor50
} }
titleLabel.text = model.name
detailLabel.text = txt detailLabel.text = txt
detailLabel.textColor = color detailLabel.textColor = color
......
...@@ -13,6 +13,12 @@ class YHPayMembersCell: UITableViewCell { ...@@ -13,6 +13,12 @@ class YHPayMembersCell: UITableViewCell {
static let cellReuseIdentifier = "YHPayMembersCell" static let cellReuseIdentifier = "YHPayMembersCell"
var dataModel : YHVisaPaymentListModel? {
didSet {
updataUI()
}
}
lazy var whiteContentView: UIView = { lazy var whiteContentView: UIView = {
let view = UIView() let view = UIView()
view.backgroundColor = .white view.backgroundColor = .white
...@@ -107,32 +113,26 @@ private extension YHPayMembersCell { ...@@ -107,32 +113,26 @@ private extension YHPayMembersCell {
make.bottom.equalToSuperview() make.bottom.equalToSuperview()
} }
updateUI() //for test hjl
} }
} }
private extension YHPayMembersCell { private extension YHPayMembersCell {
func updateUI() {
for (index,item) in arrOtherView.enumerated() {
func updataUI() {
guard let model = dataModel,model.list.count > 0 else { return }
for (_,item) in arrOtherView.enumerated() {
item.removeFromSuperview() item.removeFromSuperview()
} }
arrOtherView.removeAll() arrOtherView.removeAll()
//for test hjl
fakeView.snp.removeConstraints() fakeView.snp.removeConstraints()
let arr : [Int] = [1,2,3]//for test hjl
var lastView : UIView = tipsLable var lastView : UIView = tipsLable
for (index, item) in arr.enumerated() { for (index, item) in model.list.enumerated() {
let view = YHPayMemberItemsView() let view = YHPayMemberItemsView()
whiteContentView.addSubview(view) whiteContentView.addSubview(view)
view.snp.makeConstraints { make in view.snp.makeConstraints { make in
...@@ -140,15 +140,17 @@ private extension YHPayMembersCell { ...@@ -140,15 +140,17 @@ private extension YHPayMembersCell {
make.left.equalTo(kMargin) make.left.equalTo(kMargin)
make.right.equalToSuperview().offset(-kMargin) make.right.equalToSuperview().offset(-kMargin)
} }
view.updateUI(type: index + 1) view.dataModel = item
lastView = view lastView = view
view.isLastFlag = (index == model.list.count - 1) ? true : false
arrOtherView.append(view) arrOtherView.append(view)
} }
fakeView.snp.makeConstraints { make in fakeView.snp.makeConstraints { make in
make.top.equalTo(lastView.snp.bottom).offset(kMargin) make.top.equalTo(lastView.snp.bottom)
make.left.equalTo(kMargin) make.left.equalTo(kMargin)
make.right.equalToSuperview().offset(-kMargin) make.right.equalToSuperview().offset(-kMargin)
make.height.equalTo(1) make.height.equalTo(1)
......
...@@ -14,6 +14,12 @@ class YHVisaPayTypeCell: UITableViewCell { ...@@ -14,6 +14,12 @@ class YHVisaPayTypeCell: UITableViewCell {
static let cellReuseIdentifier = "YHVisaPayTypeCell" static let cellReuseIdentifier = "YHVisaPayTypeCell"
var dataModel : YHVisaPaymentListModel? {
didSet {
updataUI()
}
}
lazy var whiteContentView: UIView = { lazy var whiteContentView: UIView = {
let view = UIView() let view = UIView()
view.backgroundColor = .white view.backgroundColor = .white
...@@ -24,6 +30,23 @@ class YHVisaPayTypeCell: UITableViewCell { ...@@ -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 = { private lazy var longPress: UILongPressGestureRecognizer = {
...@@ -45,6 +68,34 @@ class YHVisaPayTypeCell: UITableViewCell { ...@@ -45,6 +68,34 @@ class YHVisaPayTypeCell: UITableViewCell {
private extension YHVisaPayTypeCell { 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) { func saveImage(_ image: UIImage) {
// 确保应用有权访问相册 // 确保应用有权访问相册
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
...@@ -143,27 +194,8 @@ private extension YHVisaPayTypeCell { ...@@ -143,27 +194,8 @@ private extension YHVisaPayTypeCell {
holdView.addSubview(linkLabel)
let link = UILabel() linkLabel.snp.makeConstraints { make in
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
make.centerY.equalToSuperview() make.centerY.equalToSuperview()
make.left.equalTo(kMargin) make.left.equalTo(kMargin)
make.right.equalTo(-kMargin) make.right.equalTo(-kMargin)
...@@ -182,13 +214,10 @@ private extension YHVisaPayTypeCell { ...@@ -182,13 +214,10 @@ private extension YHVisaPayTypeCell {
make.height.equalTo(1) 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.top.equalTo(line2.snp.bottom).offset(18)
make.right.equalTo(-kMargin) make.right.equalTo(-kMargin)
make.height.width.equalTo(86) make.height.width.equalTo(86)
...@@ -204,7 +233,7 @@ private extension YHVisaPayTypeCell { ...@@ -204,7 +233,7 @@ private extension YHVisaPayTypeCell {
whiteContentView.addSubview(label3) whiteContentView.addSubview(label3)
label3.snp.makeConstraints { make in 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.left.equalTo(kMargin)
make.height.equalTo(20) make.height.equalTo(20)
} }
...@@ -222,7 +251,7 @@ private extension YHVisaPayTypeCell { ...@@ -222,7 +251,7 @@ private extension YHVisaPayTypeCell {
label4.snp.makeConstraints { make in label4.snp.makeConstraints { make in
make.top.equalTo(label3.snp.bottom).offset(6) make.top.equalTo(label3.snp.bottom).offset(6)
make.left.equalTo(kMargin) 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)
}
}
}
...@@ -252,4 +252,3 @@ extension YHOffivialApprovalGuildLineCheckView : UIScrollViewDelegate { ...@@ -252,4 +252,3 @@ extension YHOffivialApprovalGuildLineCheckView : UIScrollViewDelegate {
} }
} }
} }
...@@ -80,6 +80,12 @@ extension YHPrincleViewModel { ...@@ -80,6 +80,12 @@ extension YHPrincleViewModel {
} else if type == 2 { } else if type == 2 {
//identify = 2 // 香港身份获批操作指引 //identify = 2 // 香港身份获批操作指引
params = ["identify":2] params = ["identify":2]
} else if type == 3 {
//identify = 3 // 家庭信息确认风险弹窗
params = ["identify":3]
} else if type == 15 { } else if type == 15 {
//identify = 2 // 首页正式批弹窗 //identify = 2 // 首页正式批弹窗
params = ["identify":15] params = ["identify":15]
......
...@@ -529,7 +529,7 @@ extension YHChildBasicInfoVC : UITableViewDelegate, UITableViewDataSource { ...@@ -529,7 +529,7 @@ extension YHChildBasicInfoVC : UITableViewDelegate, UITableViewDataSource {
} }
} else if detailItem.type == .marriageState { // 婚姻 } 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 [weak self] selectItem in
guard let self = self else { return } guard let self = self else { return }
self.child?.married = selectItem.title self.child?.married = selectItem.title
......
...@@ -483,7 +483,7 @@ extension YHBrotherInfoVC : UITableViewDelegate, UITableViewDataSource { ...@@ -483,7 +483,7 @@ extension YHBrotherInfoVC : UITableViewDelegate, UITableViewDataSource {
} else if detailItem.type == .marriageState { // 婚姻 } else if detailItem.type == .marriageState { // 婚姻
let marriage = self.brotherInfo?.married let marriage = self.brotherInfo?.married
YHSheetPickerView.show(type: .marriage, selectTitle:marriage) { YHSheetPickerView.show(type: .marriageText, selectTitle:marriage) {
[weak self] selectItem in [weak self] selectItem in
guard let self = self else { return } guard let self = self else { return }
self.brotherInfo?.married = selectItem.title self.brotherInfo?.married = selectItem.title
......
...@@ -530,7 +530,7 @@ extension YHParentInfoVC : UITableViewDelegate, UITableViewDataSource { ...@@ -530,7 +530,7 @@ extension YHParentInfoVC : UITableViewDelegate, UITableViewDataSource {
} }
} else if detailItem.type == .marriageState { // 婚姻 } 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 [weak self] selectItem in
guard let self = self else { return } guard let self = self else { return }
self.parentInfo?.married = selectItem.title self.parentInfo?.married = selectItem.title
......
...@@ -193,7 +193,7 @@ class YHSheetPickerView: UIView { ...@@ -193,7 +193,7 @@ class YHSheetPickerView: UIView {
// 婚姻 // 婚姻
.marriage: .marriageText:
[YHSheetPickerViewItem(title:"已婚".local, index:1), [YHSheetPickerViewItem(title:"已婚".local, index:1),
YHSheetPickerViewItem(title:"未婚".local, index:0), YHSheetPickerViewItem(title:"未婚".local, index:0),
YHSheetPickerViewItem(title:"分居".local, index:2), YHSheetPickerViewItem(title:"分居".local, index:2),
...@@ -201,6 +201,18 @@ class YHSheetPickerView: UIView { ...@@ -201,6 +201,18 @@ class YHSheetPickerView: UIView {
YHSheetPickerViewItem(title:"丧偶".local, index:4), 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: .educationStyle:
[YHSheetPickerViewItem(title:"全日制".local, index:0), [YHSheetPickerViewItem(title:"全日制".local, index:0),
...@@ -333,7 +345,7 @@ class YHSheetPickerView: UIView { ...@@ -333,7 +345,7 @@ class YHSheetPickerView: UIView {
var whiteContentHeight = 322.0 var whiteContentHeight = 322.0
if self.type == .educationDegree if self.type == .educationDegree
|| self.type == .marriage || self.type == .marriageText
|| self.type == .profession || self.type == .profession
|| self.type == .certificate || self.type == .certificate
|| self.type == .identity || self.type == .identity
...@@ -389,7 +401,9 @@ extension YHSheetPickerView { ...@@ -389,7 +401,9 @@ extension YHSheetPickerView {
return "选择学位" return "选择学位"
case .educationDegree: case .educationDegree:
return "选择学位" return "选择学位"
case .marriage: case .marriageText:
return "选择婚姻状况"
case .marriage1:
return "选择婚姻状况" return "选择婚姻状况"
case .educationStyle: case .educationStyle:
return "选择授课形式" return "选择授课形式"
......
...@@ -18,8 +18,11 @@ enum YHSheetPickerViewType: Int { ...@@ -18,8 +18,11 @@ enum YHSheetPickerViewType: Int {
case educationDegree case educationDegree
// 学位有无 // 学位有无
case ownDegree case ownDegree
// 婚姻 // 婚姻(文字有效)
case marriage case marriageText
// 婚姻(index有效)
case marriage1
// 授课形式 // 授课形式
case educationStyle case educationStyle
// 职业 // 职业
......
...@@ -68,7 +68,6 @@ class YHImageViewController: YHBaseViewController { ...@@ -68,7 +68,6 @@ class YHImageViewController: YHBaseViewController {
self.back() self.back()
} }
} }
// self.resultView.kf.setImage(with: URL(string: success))
self.resultView.kf.setImage(with: URL(string: success), placeholder: UIImage(named: "global_default_image")) self.resultView.kf.setImage(with: URL(string: success), placeholder: UIImage(named: "global_default_image"))
} }
} }
......
...@@ -345,8 +345,11 @@ extension YHMyViewController : UITableViewDelegate, UITableViewDataSource { ...@@ -345,8 +345,11 @@ extension YHMyViewController : UITableViewDelegate, UITableViewDataSource {
if true { if true {
// test dy // test dy
if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") as? Int {
let vc = YHFamilyInfoConfirmViewController() let vc = YHFamilyInfoConfirmViewController()
vc.orderId = orderID
self.navigationController?.pushViewController(vc) self.navigationController?.pushViewController(vc)
}
return return
} }
......
...@@ -255,4 +255,27 @@ extension String { ...@@ -255,4 +255,27 @@ extension String {
let regex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$" let regex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
return range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil 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
}
} }
...@@ -20,6 +20,9 @@ extension UIColor { ...@@ -20,6 +20,9 @@ extension UIColor {
//品牌主色 30 //品牌主色 30
static let brandMainColor30 : UIColor = UIColor(hexString: "#0046B4",transparency: 0.3)! static let brandMainColor30 : UIColor = UIColor(hexString: "#0046B4",transparency: 0.3)!
//品牌主色 50
static let brandMainColor50 : UIColor = UIColor(hexString: "#0046B4",transparency: 0.5)!
//品牌主色 16 //品牌主色 16
static let brandMainColor16 : UIColor = UIColor(hexString: "#0046B4",transparency: 0.16)! static let brandMainColor16 : UIColor = UIColor(hexString: "#0046B4",transparency: 0.16)!
...@@ -34,7 +37,6 @@ extension UIColor { ...@@ -34,7 +37,6 @@ extension UIColor {
} }
//标题/主内容 //标题/主内容
// static let mainTextColor : UIColor = UIColor(hexString: "#222222")!
static let mainTextColor : UIColor = UIColor(hexString: "#121A26")! static let mainTextColor : UIColor = UIColor(hexString: "#121A26")!
static let mainTextColor5 : UIColor = UIColor(hexString: "#121A26",transparency: 0.05)! static let mainTextColor5 : UIColor = UIColor(hexString: "#121A26",transparency: 0.05)!
static let mainTextColor18 : UIColor = UIColor(hexString: "#121A26",transparency: 0.18)! static let mainTextColor18 : UIColor = UIColor(hexString: "#121A26",transparency: 0.18)!
......
...@@ -8,6 +8,11 @@ ...@@ -8,6 +8,11 @@
class YHAllApiName { class YHAllApiName {
//办证段 - 签证缴费
struct VisaPayment {
//GetUserPaymentList 电子签证缴费列表
static let paymentListApi = "super-app/order/customer/service/payment"
}
//灰度功能接口 //灰度功能接口
struct Uat { struct Uat {
...@@ -413,6 +418,24 @@ class YHAllApiName { ...@@ -413,6 +418,24 @@ class YHAllApiName {
struct FamilyInfoConfirm { struct FamilyInfoConfirm {
// 获取获批者家庭信息 // 获取获批者家庭信息
static let familyInfo = "super-app/order/family/information/obtain" 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 @@ ...@@ -18,5 +18,8 @@
"info" : { "info" : {
"author" : "xcode", "author" : "xcode",
"version" : 1 "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