Commit 5e30ed6e authored by David黄金龙's avatar David黄金龙

Merge commit '2abc1d6a' into davidhuang

* commit '2abc1d6a':
  // 家庭成员信息
  // 兄弟姐妹信息
  // 子女信息
  登录注册
  //  子女信息
  // 子女信息
  debug 数据
parents 2a998c1b 2abc1d6a
This diff is collapsed.
......@@ -324,7 +324,7 @@ extension YHInformationPerfectListVC : UITableViewDelegate,UITableViewDataSource
navigationController?.pushViewController(vc)
} else if indexPath.row == 1 {
//家庭程序信息
let vc = YHFamilyMemberFormVC(orderId: orderId ?? 0)
let vc = YHFamilyMemberInfoVC(orderId: orderId ?? 0)
navigationController?.pushViewController(vc)
} else if indexPath.row == 2 {
//基本信息
......
//
// YHChildInfoContainerVC.swift
// galaxy
//
// Created by edy on 2024/2/5.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
//@objc protocol YHchildInfoVCProtocol {
//
// @objc optional func updateStepView()
// @objc optional func saveInfo()
//}
class YHChildInfoContainerVC: YHBaseViewController, YHSpouseInfoVCProtocol {
let familyRequest:YHFamilyRequestViewModel = YHFamilyRequestViewModel()
var orderId:Int = 0
var child:YHFamilyMember? {
didSet {
initalInfoVC.child = child
certificateVC.familyMember = child
basicInfoVC.child = child
}
}
var currentIndex = 0 {
didSet {
currentIndex %= self.children.count
stepView.currentIndex = currentIndex
for (i, vc) in self.children.enumerated() {
vc.view.isHidden = (currentIndex != i)
if currentIndex == i {
}
}
}
}
var stepView:YHStepView = {
let step = YHStepView()
return step
}()
var bottomView: YHSaveAndSubmitView = {
return YHSaveAndSubmitView.createView()
}()
let initalInfoVC = YHChildPrimaryInfoVC()
let uploadVC = UIViewController()
let certificateVC = YHCertificateInfoController()
let basicInfoVC = YHChildBasicInfoVC()
override func viewDidLoad() {
super.viewDidLoad()
createUI()
}
func createUI() {
guard child != nil else { return }
initalInfoVC.delegate = self
certificateVC.delegate = self
basicInfoVC.delegate = self
updateStepView()
currentIndex = 0
view.addSubview(stepView)
view.addSubview(bottomView)
bottomView.submitBlock = {
[weak self] in
guard let self = self else { return }
self.didClickSubmitBtn()
}
bottomView.saveBlock = {
[weak self] in
guard let self = self else { return }
self.saveInfo()
}
stepView.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.left.right.equalTo(view)
make.height.equalTo(YHStepView.height)
}
bottomView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalToSuperview().offset(-k_Height_safeAreaInsetsBottom())
make.height.equalTo(YHSaveAndSubmitView.height)
}
}
func didClickSubmitBtn() {
currentIndex += 1;
}
func updateStepView() {
guard let child = child else { return }
for vc in self.children {
vc.willMove(toParent: nil)
vc.removeFromParent()
}
if child.isFollow() {
self.addChild(initalInfoVC)
self.addChild(uploadVC)
self.addChild(certificateVC)
self.addChild(basicInfoVC)
self.view.addSubview(basicInfoVC.view)
self.view.addSubview(certificateVC.view)
self.view.addSubview(uploadVC.view)
self.view.addSubview(initalInfoVC.view)
stepView.dataSource = ["初始信息".local, "证件上传".local, "证件信息".local, "基本信息".local]
stepView.block = {[weak self] (index) in
guard let self = self else { return }
print("follow:%d", self.orderId)
}
} else {
self.addChild(initalInfoVC)
self.addChild(basicInfoVC)
self.view.addSubview(basicInfoVC.view)
self.view.addSubview(initalInfoVC.view)
stepView.dataSource = ["初始信息".local, "基本信息".local]
stepView.block = {[weak self] (index) in
guard let self = self else { return }
print("follow:%d", self.orderId)
}
}
self.view.bringSubviewToFront(stepView)
self.view.bringSubviewToFront(bottomView)
}
}
extension YHChildInfoContainerVC {
func saveInfo() {
guard let child = child else { return }
guard let info = child.toDictionary() else { return }
let dict:[String: Any] = ["orderId":child.orderId,
"relation":child.relationType.rawValue,
"step":child.step,
"next":false,
"info":info]
self.familyRequest.addOrSaveFamilyMember(params:dict) { [weak self] success, error in
guard let self = self else { return }
if success {
}
}
}
}
......@@ -14,7 +14,7 @@ enum YHFormTitleItemEditType:Int {
case canCancel = 3
}
class YHFamilyMemberFormVC: YHBaseViewController {
class YHFamilyMemberInfoVC: YHBaseViewController {
var orderId:Int
let familyRequest:YHFamilyRequestViewModel = YHFamilyRequestViewModel()
......@@ -186,7 +186,7 @@ class YHFamilyMemberFormVC: YHBaseViewController {
}
}
extension YHFamilyMemberFormVC {
extension YHFamilyMemberInfoVC {
// 请求家庭成员信息
func requestFamilyInfo() {
......@@ -232,7 +232,7 @@ extension YHFamilyMemberFormVC {
}
}
extension YHFamilyMemberFormVC : UITableViewDelegate, UITableViewDataSource {
extension YHFamilyMemberInfoVC : UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return items.count
......@@ -456,7 +456,7 @@ extension YHFamilyMemberFormVC : UITableViewDelegate, UITableViewDataSource {
// 子女
if detailItem.relationType == .child {
let vc = YHChildInitialInfoVC()
let vc = YHChildInfoContainerVC()
vc.child = detailItem
self.navigationController?.pushViewController(vc)
return
......
......@@ -267,7 +267,7 @@ extension YHParentInfoVC : UITableViewDelegate, UITableViewDataSource {
[weak self] (text, isEditEnd) in
guard let self = self else { return }
if detailItem.type == .fatherName {
if detailItem.type == .fatherName || detailItem.type == .motherName {
self.parentInfo?.subsetName = text
} else if detailItem.type == .birthCity {
......
......@@ -118,14 +118,16 @@ class YHSpouseBasicInfoVC: YHBaseViewController {
let item10 = YHFormDetailItem(type: .occupation)
item10.value = spouse.occupation
item10.placeHolder = "请输入".local
let item11 = YHFormDetailItem(type: .occupationName)
item11.value = spouse.occupationName
item11.placeHolder = "请输入".local
let arr1:[YHFormItemProtocol] = [title1, item10, item11]
var arr1:[YHFormItemProtocol] = [title1, item10]
// 职业信息
if spouse.isNowHaveJob() {
let item11 = YHFormDetailItem(type: .occupationName)
item11.value = spouse.occupationName
item11.placeHolder = "请输入".local
arr1.append(item11)
}
// 学位信息
let title2 = YHFormTitleItem(type: .degreeInfo)
let item20 = YHFormDetailItem(type: .ownDegree)
item20.placeHolder = "请选择".local
......@@ -306,6 +308,13 @@ extension YHSpouseBasicInfoVC : UITableViewDelegate, UITableViewDataSource {
} else if detailItem.type == .hkIdentityCardNumber {
self.spouse?.hkIdentityCard = text
}
if isEditEnd {
self.loadBasicInfo()
if let delegate = delegate {
delegate.saveInfo?()
}
}
}
return cell
}
......@@ -503,7 +512,7 @@ extension YHSpouseBasicInfoVC : UITableViewDelegate, UITableViewDataSource {
var isBirthOverSeas = false
if let spouse = spouse {
isBirthOverSeas = spouse.isOverSeasOver1Year()
isBirthOverSeas = spouse.isBirthOverSeas()
}
// 出生国外时 出生城市是输入框
if isBirthOverSeas { return }
......
......@@ -51,7 +51,7 @@ class YHSpouseInfoContainerVC: YHBaseViewController, YHSpouseInfoVCProtocol {
return YHSaveAndSubmitView.createView()
}()
let initalInfoVC = YHSpouseInitialInfoVC()
let initalInfoVC = YHSpousePrimaryInfoVC()
let uploadVC = UIViewController()
let certificateVC = YHCertificateInfoController()
let basicInfoVC = YHSpouseBasicInfoVC()
......@@ -157,22 +157,11 @@ extension YHSpouseInfoContainerVC {
func saveInfo() {
guard let spouse = spouse else { return }
guard var info = spouse.toDictionary() else { return }
// let certi = [ "cnIdentityCard":
// ["id":116871,"number":"421087199005010811","issue_at":"深圳","issue_date_start_at":"2017-01-01","issue_date_end_at":"2029-01-01","img_front":"","img_back":""],
// "passport":["id":116872,"number":"421087199005010811","issue_at":"深圳","issue_date_start_at":"2020-01-01","issue_date_end_at":"2023-01-01","img_front":"","img_back":"","passport_type":3],
// "hkMacaoPass":["id":118182,"number":"P103265(1)","issue_at":"SFAA","issue_date_start_at":"2024-01-31","issue_date_end_at":"2024-01-31","img_front":"","img_back":""]
// ]
//
// if let cer = info["certificates"] {
// info["certificates"] = certi
// }
let cer = info["certificates"]
let dict:[String: Any] = ["orderId":self.orderId,
guard let info = spouse.toDictionary() else { return }
let dict:[String: Any] = ["orderId":spouse.orderId,
"relation":spouse.relationType.rawValue,
"step":0,
"step":spouse.step,
"next":false,
"info":info]
......
......@@ -9,7 +9,7 @@
import UIKit
import SmartCodable
class YHSpouseInitialInfoVC: YHBaseViewController {
class YHSpousePrimaryInfoVC: YHBaseViewController {
var spouse:YHFamilyMember?
weak var delegate:YHSpouseInfoVCProtocol?
......@@ -141,7 +141,7 @@ class YHSpouseInitialInfoVC: YHBaseViewController {
}
extension YHSpouseInitialInfoVC : UITableViewDelegate, UITableViewDataSource {
extension YHSpousePrimaryInfoVC : UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return items.count
......
......@@ -483,6 +483,7 @@ class YHFamilyMember: SmartCodable, YHFormItemProtocol {
var id: Int = 0
// 是否已故
var deceased: Int = 0
// 主申请人和现配偶是否拥有孩子抚养权
var custody: Int = 0
// 国籍
var nationality: String?
......@@ -522,7 +523,7 @@ class YHFamilyMember: SmartCodable, YHFormItemProtocol {
var operatorAme: SmartAny?
// 香港身份证号
var hkIdentityCard: String?
// 性别
// 性别 男:1 女:2
var sex: Int = 0
// 婚姻状况
var married: String?
......@@ -533,6 +534,7 @@ class YHFamilyMember: SmartCodable, YHFormItemProtocol {
// 香港身份证信息
var childHasHkId: YHChildStepchildClass?
// 是否前次婚姻子女
var childStepchild: YHChildStepchildClass?
// 在港信息
var childInHk: YHChildStepchildClass?
......@@ -711,6 +713,43 @@ class YHFamilyMember: SmartCodable, YHFormItemProtocol {
return self.occupation == "在职"
}
// 主申请人和现配偶是否拥有孩子抚养权
func isOwnCustody() -> Bool {
return self.custody == 1
}
func setOwnCustody(_ val:Bool) {
self.custody = val ? 1 : 0
}
// 是否是男性
func isMale() -> Bool {
return self.sex == 1
}
func setMale(_ val: Bool) {
self.sex = (val ? 1 : 2)
}
func sexName() -> String? {
if self.sex == 1 {
return "男".local
} else if self.sex == 2 {
return "女".local
}
return ""
}
// 是否前一次婚姻子女
func isPreviousMarriageChild() -> Bool {
return self.childStepchild?.has == "Y"
}
func setPreviousMarriageChild(_ val: Bool) {
self.childStepchild?.has = (val ? "Y" : "N")
}
var relationType:YHFamilyMemberType {
if relation == "1" {
......
......@@ -22,6 +22,7 @@ class YHFamilyRequestViewModel {
YHHUD.hide()
guard let self = self else { return }
guard let model = NetBaseModel.deserialize(dict: json) else {
let error : YHErrorModel = YHErrorModel(errorCode:YHErrorCode.dictParseError.rawValue,errorMsg: YHErrorCode.dictParseError.description())
callBackBlock(false,error)
......@@ -29,8 +30,39 @@ class YHFamilyRequestViewModel {
}
printLog("model 是 ==> \(model)")
let dic = model.data?.peel as? [AnyHashable : Any]
let spouse = dic?["spouse"] as? [String: Any]
let arr = spouse?["has_degree_json"]
guard var dic = dic else { return }
#if DEBUG
if let child = dic["child"], child is [[String: Any]] {
var child = child as! [[String: Any]]
for (index, dic) in child.enumerated() {
var d = dic
d["certificates"] = [String: Any]()
child[index] = d
}
dic["child"] = child
}
if let brother = dic["brother"], brother is [[String: Any]] {
var brother = brother as! [[String: Any]]
for (index, dic) in brother.enumerated() {
var d = dic
d["certificates"] = [String: Any]()
// ["cnIdentityCard":"",
// "passport":"",
// "hkMacaoPass":""]
brother[index] = d
}
dic["brother"] = brother
}
#endif
guard let resultModel = YHFamilyMemberGroupInfo.deserialize(dict: dic as? [AnyHashable : Any]) else {
......
//
// YHCheckQuestionCell.swift
// YHFormItemQuestionsCell.swift
// galaxy
//
// Created by edy on 2024/1/22.
// Created by edy on 2024/2/5.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHFormItemQuestionCell: UITableViewCell {
class YHFormItemQuestionsCell: UITableViewCell {
static let cellReuseIdentifier = "YHFormItemQuestionCell"
let btnWidth = 70.0
let btnHeight = 32.0
let btnTitleSelectColor = UIColor(hex: 0x4487F9)
let btnTitleDefaultColor = UIColor(hex:0x222222)
let btnBgColor = UIColor(hex:0xF8F9FB)
let confirmTag = 9527
let negativeTag = 9528
static let cellReuseIdentifier = "YHFormItemQuestionsCell"
var responseBlock:((Bool)->Void)?
private let btnWidth = 70.0
private let btnHeight = 32.0
private let btnTitleSelectColor = UIColor.brandMainColor
private let btnTitleDefaultColor = UIColor.mainTextColor
private let btnBgDefaultColor = UIColor.contentBkgColor
private let btnBgSelectColor = UIColor.brandMainColor.withAlphaComponent(0.08)
private let answerBaseTag = 9527
var title:String? {
didSet {
// 是否必须字段
var isMust:Bool = false
var answerBlock:(([YHFormChoiceItem], Int)->Void)?
var title:String? {
didSet {
if let question = title {
let str = "*"+question
if let title = title, !title.isEmpty {
let str = (isMust ? ("*"+title) : title)
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.PFSC_R(ofSize: 14),
.foregroundColor: UIColor(hex:0x222222)
]
.foregroundColor: UIColor.mainTextColor]
let questionAttrStr = NSMutableAttributedString(string: str, attributes: attributes)
let starRange = NSRange(location: 0, length: 1)
questionAttrStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor(hex:0xFF3A3A), range: starRange)
if isMust {
let starRange = NSRange(location: 0, length: 1)
questionAttrStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor(hex:0xFF3A3A), range: starRange)
}
titleLabel.attributedText = questionAttrStr
} else {
titleLabel.text = ""
}
}
}
var response:Bool = false {
// 必须传2个item的arr
var answerArr:[YHFormChoiceItem]? {
didSet {
showResponse(response)
if let answerArr = answerArr, answerArr.count == 2 {
for i in 0...1 {
let answerBtn = self.viewWithTag(answerBaseTag+i) as! UIButton
let item = answerArr[i]
answerBtn.setTitle(item.title, for: .normal)
updateAnswerButton(answerBtn, item.isSelect)
}
} else {
// 重置所有答案状态
for i in 0...1 {
let answerBtn = self.viewWithTag(answerBaseTag+i) as! UIButton
answerBtn.setTitle("", for: .normal)
updateAnswerButton(answerBtn, false)
}
}
}
}
lazy var titleLabel: UILabel = {
// 更新答案按钮选中状态
private func updateAnswerButton(_ btn:UIButton, _ isSelect:Bool) {
btn.layer.borderColor = (isSelect ? btnTitleSelectColor : .clear).cgColor
btn.setTitleColor((isSelect ? btnTitleSelectColor : btnTitleDefaultColor), for: .normal)
btn.backgroundColor = (isSelect ? btnBgSelectColor : btnBgDefaultColor)
}
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.textColor = UIColor(hexString:"#333333")
label.textColor = .mainTextColor
label.textAlignment = .left
label.numberOfLines = 0
label.font = UIFont.PFSC_R(ofSize: 14)
label.lineBreakMode = .byCharWrapping
return label
}()
lazy var confirmBtn: UIButton = {
private lazy var answer1Btn: UIButton = {
let btn = UIButton()
btn.setTitle("是".local, for: .normal)
btn.setTitle("", for: .normal)
btn.titleLabel?.font = UIFont.PFSC_R(ofSize: 14)
btn.setTitleColor(btnTitleDefaultColor, for: .normal)
btn.backgroundColor = btnBgColor
btn.backgroundColor = btnBgDefaultColor
btn.layer.cornerRadius = btnHeight/2.0
btn.layer.masksToBounds = true
btn.layer.borderWidth = 1
btn.tag = confirmTag
btn.layer.borderColor = UIColor.clear.cgColor
btn.tag = answerBaseTag
btn.addTarget(self, action: #selector(didClickResponseBtn(btn:)), for: .touchUpInside)
return btn
}()
lazy var negativeBtn: UIButton = {
private lazy var answer2Btn: UIButton = {
let btn = UIButton()
btn.setTitle("否".local, for: .normal)
btn.setTitle("", for: .normal)
btn.titleLabel?.font = UIFont.PFSC_R(ofSize: 14)
btn.setTitleColor(btnTitleDefaultColor, for: .normal)
btn.backgroundColor = btnBgColor
btn.backgroundColor = btnBgDefaultColor
btn.layer.cornerRadius = btnHeight/2.0
btn.layer.masksToBounds = true
btn.layer.borderWidth = 1
btn.tag = negativeTag
btn.layer.borderColor = UIColor.clear.cgColor
btn.tag = answerBaseTag+1
btn.addTarget(self, action: #selector(didClickResponseBtn(btn:)), for: .touchUpInside)
return btn
}()
required init?(coder: NSCoder) {
super.init(coder: coder)
}
......@@ -98,44 +129,44 @@ class YHFormItemQuestionCell: UITableViewCell {
self.selectionStyle = .none
title = " 1、是否曾在香港或其他地方因任何罪行或违法行为被定罪?是否曾在香港或其他地方因任何罪行或违法行为被定罪?是否曾在香港或其他地方因任何罪行或违法行为被定罪?是否曾在香港或其他地方因任何罪行或违法行为被定罪?是否曾在香港或其他地方因任何罪行或违法行为被定罪? "
contentView.addSubview(titleLabel)
contentView.addSubview(negativeBtn)
contentView.addSubview(confirmBtn)
// 默认选择否按钮
response = false
contentView.addSubview(answer2Btn)
contentView.addSubview(answer1Btn)
titleLabel.snp.makeConstraints { make in
make.top.equalTo(contentView.snp.top).offset(12)
make.top.equalTo(contentView.snp.top).offset(22)
make.left.equalToSuperview().offset(16)
make.right.equalToSuperview().offset(-16)
make.bottom.equalTo(answer1Btn.snp.top).offset(-16)
}
negativeBtn.snp.makeConstraints { make in
answer1Btn.snp.makeConstraints { make in
make.size.equalTo(CGSize(width: btnWidth, height: btnHeight))
make.left.equalTo(titleLabel)
make.top.equalTo(titleLabel.snp.bottom).offset(12)
make.bottom.equalToSuperview().offset(-16)
}
confirmBtn.snp.makeConstraints { make in
answer2Btn.snp.makeConstraints { make in
make.size.equalTo(CGSize(width: btnWidth, height: btnHeight))
make.left.equalTo(negativeBtn.snp.right).offset(12)
make.centerY.equalTo(negativeBtn)
make.left.equalTo(answer1Btn.snp.right).offset(16)
make.centerY.equalTo(answer1Btn)
}
}
@objc func didClickResponseBtn(btn: UIButton) {
response = (btn.tag == confirmTag)
if let responseBlock = responseBlock {
responseBlock(btn.tag==confirmTag)
let selectIndex = btn.tag-answerBaseTag
if let resultArr = answerArr, resultArr.count == 2 {
for i in 0...1 {
let item = resultArr[i]
item.isSelect = (i == selectIndex)
}
answerArr = resultArr
if let answerBlock = answerBlock {
answerBlock(resultArr, selectIndex)
}
}
}
func showResponse(_ isConfirm: Bool) {
confirmBtn.layer.borderColor = (isConfirm ? btnTitleSelectColor : .clear).cgColor
confirmBtn.setTitleColor((isConfirm ? btnTitleSelectColor : btnTitleDefaultColor), for: .normal)
negativeBtn.layer.borderColor = (isConfirm ? .clear : btnTitleSelectColor).cgColor
negativeBtn.setTitleColor((isConfirm ? btnTitleDefaultColor: btnTitleSelectColor), for: .normal)
}
}
......@@ -32,6 +32,46 @@ class YHSaveAndSubmitView: UIView {
self.layoutIfNeeded()
}
}
// 是否隐藏提交按钮
var isHiddenSubmit:Bool = false {
didSet {
self.submitBtn.isHidden = isHiddenSubmit
if isHiddenSubmit {
saveBtn.snp.remakeConstraints { make in
make.left.equalToSuperview().offset(16)
make.height.equalTo(Self.submitBtnHeight)
make.right.equalToSuperview().offset(-16)
make.top.equalTo(Self.gap)
}
submitBtn.snp.remakeConstraints { make in
make.width.equalTo(isHiddenSave ? 0 : Self.saveBtnWidth)
make.height.equalTo(Self.submitBtnHeight)
make.centerY.equalTo(saveBtn)
make.right.equalToSuperview()
}
} else {
saveBtn.snp.remakeConstraints { make in
make.left.equalToSuperview().offset(16)
make.height.equalTo(Self.submitBtnHeight)
make.width.equalTo(Self.saveBtnWidth)
make.top.equalTo(Self.gap)
}
submitBtn.snp.remakeConstraints { make in
make.left.equalTo(saveBtn.snp.right).offset(10)
make.right.equalToSuperview().offset(-16)
make.height.equalTo(Self.submitBtnHeight)
make.centerY.equalTo(saveBtn)
}
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
}
lazy var submitBtn:UIButton = {
let btn = UIButton()
......
//
// YHCodeSueecssViewController.swift
// galaxy
//
// Created by EDY on 2024/2/5.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHCodeSueecssViewController: YHBaseViewController {
var time = 60
var bgImageView: UIImageView!
var closeButton: UIButton!
var loginTitleLabel: UILabel!
var loginSubTitleLabel: UILabel!
var getCodeLabel: UILabel!
var getCodeButton: UIButton!
var smscodeView: YHSmsCodeInputView!
override func viewDidLoad() {
super.viewDidLoad()
gk_navBackgroundColor = .clear
gk_navShadowColor = .clear
gk_navigationBar.isHidden = true
setView()
// Do any additional setup after loading the view.
startClicked()
}
func setView() {
view.backgroundColor = .white
bgImageView = {
let imageView = UIImageView()
imageView.image = UIImage(named: "login_phone_bg_image")
imageView.isUserInteractionEnabled = true
return imageView
}()
view.addSubview(bgImageView)
bgImageView.snp.makeConstraints { make in
make.left.right.top.equalTo(view)
make.height.equalTo(300)
}
closeButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "login_back"), for: .normal)
button.addTarget(self, action: #selector(close), for: .touchUpInside)
return button
}()
view.addSubview(closeButton)
closeButton.snp.makeConstraints { make in
make.left.equalTo(13)
make.top.equalTo(51)
make.width.height.equalTo(30)
}
loginTitleLabel = {
let label = UILabel()
label.text = "请输入验证码"
label.font = kBoldFont(size: 28)
label.textColor = UIColor(hex:0x222222)
return label
}()
view.addSubview(loginTitleLabel)
loginTitleLabel.snp.makeConstraints { make in
make.left.equalTo(24)
make.right.equalTo(-24)
make.top.equalTo(203)
make.height.equalTo(25)
}
loginSubTitleLabel = {
let label = UILabel()
label.text = "已发送至 +86 188****2882"
label.font = kFont(size: 13)
label.textColor = UIColor(hex:0xc0c0c0)
return label
}()
view.addSubview(loginSubTitleLabel)
loginSubTitleLabel.snp.makeConstraints { make in
make.left.equalTo(24)
make.right.equalTo(-24)
make.top.equalTo(233)
make.height.equalTo(20)
}
smscodeView = {
let view = YHSmsCodeInputView(config: YHSmsCodeViewConfig())
view.complete = { [weak self] code in
self?.dismiss(animated: true)
}
return view
}()
view.addSubview(smscodeView)
smscodeView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(288)
make.height.equalTo(55)
}
getCodeLabel = {
let button = UILabel()
button.font = kBoldFont(size: 12)
button.text = "重新发送(58s)"
button.textColor = UIColor(hex:0xc0c0c0)
button.textAlignment = .center
button.isHidden = false
button.layer.cornerRadius = 4
button.layer.borderWidth = 1
button.layer.borderColor = UIColor(hex: 0xebeef4).cgColor
return button
}()
view.addSubview(getCodeLabel)
getCodeLabel.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(382)
make.height.equalTo(28)
make.width.equalTo(91)
}
getCodeButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = kBoldFont(size: 12)
button.contentHorizontalAlignment = .center
button.setTitle("获取验证码", for: .normal)
button.setTitleColor( UIColor(hex:0x222222), for: .normal)
button.addTarget(self, action: #selector(startClicked), for: .touchUpInside)
button.isHidden = true
button.layer.cornerRadius = 4
button.layer.borderWidth = 1
button.layer.borderColor = UIColor(hex: 0xebeef4).cgColor
return button
}()
view.addSubview(getCodeButton)
getCodeButton.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(382)
make.height.equalTo(28)
make.width.equalTo(91)
}
//测试
}
@objc func startClicked() {
getCodeLabel.isHidden = false
getCodeButton.isHidden = true
let sourceTimer = DispatchSource.makeTimerSource()
sourceTimer.schedule(deadline: DispatchTime.now(), repeating: DispatchTimeInterval.milliseconds(1000), leeway: DispatchTimeInterval.milliseconds(0))
sourceTimer.setEventHandler {
if self.time != 0 {
self.time -= 1
DispatchQueue.main.async {
self.getCodeLabel?.text = String.localizedStringWithFormat("重新获取(%ds)",self.time)
}
} else if self.time <= 0 {
sourceTimer.cancel()
DispatchQueue.main.async {
// self.getCodeLabel?.text = "获取验证码"
self.time = 60
self.getCodeLabel.isHidden = true
self.getCodeButton.isHidden = false
}
}
}
// 启动定时器
sourceTimer.resume()
}
@objc func close() {
self.navigationController?.popViewController()
}
}
//
// YHPhoneLoginViewController.swift
// galaxy
//
// Created by EDY on 2024/2/5.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHPhoneLoginViewController: YHBaseViewController {
var bgImageView: UIImageView!
var closeButton: UIButton!
var logImageView: UIImageView!
var loginTitleLabel: UILabel!
var loginSubTitleLabel: UILabel!
var phoneMessageView: YHPhoneMessageView!
var getCodeButton: UIButton!
var privacyView: YHLoginPrivacyView!
override func viewDidLoad() {
super.viewDidLoad()
setView()
gk_navBackgroundColor = .clear
gk_navShadowColor = .clear
gk_navigationBar.isHidden = true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
YHAnalytics.timeStrat("loginTime")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
YHAnalytics.timeEnd("loginTime")
}
func setView() {
view.backgroundColor = .white
bgImageView = {
let imageView = UIImageView()
imageView.image = UIImage(named: "login_phone_bg_image")
imageView.isUserInteractionEnabled = true
return imageView
}()
view.addSubview(bgImageView)
bgImageView.snp.makeConstraints { make in
make.left.right.top.equalTo(view)
make.height.equalTo(300)
}
closeButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "login_close"), for: .normal)
button.addTarget(self, action: #selector(close), for: .touchUpInside)
return button
}()
view.addSubview(closeButton)
closeButton.snp.makeConstraints { make in
make.left.equalTo(13)
make.top.equalTo(51)
make.width.height.equalTo(30)
}
logImageView = {
let imageView = UIImageView()
imageView.image = UIImage(named: "login_phone_log_image")
return imageView
}()
view.addSubview(logImageView)
logImageView.snp.makeConstraints { make in
make.left.equalTo(24)
make.width.height.equalTo(53)
make.top.equalTo(120)
}
loginTitleLabel = {
let label = UILabel()
label.text = "手机号登录"
label.font = kBoldFont(size: 28)
label.textColor = UIColor(hex:0x222222)
return label
}()
view.addSubview(loginTitleLabel)
loginTitleLabel.snp.makeConstraints { make in
make.left.equalTo(24)
make.right.equalTo(-24)
make.top.equalTo(203)
make.height.equalTo(25)
}
loginSubTitleLabel = {
let label = UILabel()
label.text = "手机号首次登录自动注册"
label.font = kFont(size: 13)
label.textColor = UIColor(hex:0xc0c0c0)
return label
}()
view.addSubview(loginSubTitleLabel)
loginSubTitleLabel.snp.makeConstraints { make in
make.left.equalTo(24)
make.right.equalTo(-24)
make.top.equalTo(233)
make.height.equalTo(20)
}
phoneMessageView = {
let view = YHPhoneMessageView()
view.backgroundColor = UIColor(hex:0xf8f9fb)
view.layer.cornerRadius = 6
view.layer.borderWidth = 1
view.layer.borderColor = UIColor(hex:0xebeef4).cgColor
return view
}()
view.addSubview(phoneMessageView)
phoneMessageView.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalTo(300)
make.height.equalTo(56)
}
getCodeButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor(hex:0x2274ee).withAlphaComponent(0.8)
button.titleLabel?.font = kBoldFont(size: 16)
button.contentHorizontalAlignment = .center
button.setTitle("获取验证码", for: .normal)
button.setTitleColor( UIColor(hex:0x979797), for: .normal)
button.layer.cornerRadius = 6
button.addTarget(self, action: #selector(getCode), for: .touchUpInside)
return button
}()
view.addSubview(getCodeButton)
getCodeButton.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalTo(376)
make.height.equalTo(48)
}
privacyView = {
let view = YHLoginPrivacyView()
return view
}()
view.addSubview(privacyView)
privacyView.snp.makeConstraints { make in
make.top.equalTo(442)
make.left.equalTo(25)
make.height.equalTo(20)
make.width.equalTo(260)
}
//测试
}
@objc func getCode() {
if privacyView.isAgree {
let vc = YHCodeSueecssViewController()
self.navigationController?.pushViewController(vc)
} else {
let view = YHPrivacyAlertView(frame: view.bounds)
view.urlBlock = { [weak self] url in
guard let self = self else { return }
let vc = YHWebViewViewController()
vc.url = url
self.navigationController?.pushViewController(vc)
}
view.agreeBlock = { [weak self] in
guard let self = self else { return }
self.privacyView.isAgree = true
self.getCode()
}
self.view.addSubview(view)
}
}
@objc func close() {
self.dismiss(animated: true)
}
}
//
// YHWebViewViewController.swift
// galaxy
//
// Created by EDY on 2024/2/5.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import WebKit
class YHWebViewViewController: YHBaseViewController, WKUIDelegate, WKNavigationDelegate {
var webview = WKWebView()
var progBar = UIProgressView()
var url = "https://www.baidu.com"
override func viewDidLoad() {
super.viewDidLoad()
//获取导航栏高度
let navHeight = self.navigationController?.navigationBar.frame.height
//获取状态栏高度
let statusHeight = k_Height_statusBar()
// 创建wkwebview
webview = WKWebView(frame: CGRect(x: 0, y: statusHeight + navHeight!, width: self.view.frame.width, height: self.view.frame.height))
webview.navigationDelegate = self
// 创建网址
let url = NSURL(string: url)
// 创建请求
let request = NSURLRequest(url: url! as URL)
// 加载请求
webview.load(request as URLRequest)
// 添加wkwebview
self.view.addSubview(webview)
// 加载网页的进度条
progBar = UIProgressView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 30))
progBar.progress = 0.0
progBar.tintColor = UIColor.red
webview.addSubview(progBar)
// 监听网页加载的进度
webview.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
}
override func viewWillDisappear(_ animated: Bool) {
webview.removeObserver(self, forKeyPath: "estimatedProgress")
}
// MARK: - WKNavigationDelegate
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
self.navigationItem.title = webview.title
}
// MARK: - WKUIDelegate
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
// 实现非安全链接的跳转。如果目标主视图不为空,则允许导航
if !(navigationAction.targetFrame?.isMainFrame != nil) {
webview.load(navigationAction.request)
}
return nil
}
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
// 修复弹窗弹出的问题
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (_) -> Void in
completionHandler()
}))
self.present(alert, animated: true, completion: nil)
}
// MARK: - webview function
@objc func toBack() {
if webview.canGoBack {
webview.goBack()
}
}
@objc func toForward() {
if webview.canGoForward {
webview.goForward()
}
}
// MARK: - KVO
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "estimatedProgress" {
self.progBar.alpha = 1.0
progBar.setProgress(Float(webview.estimatedProgress), animated: true)
//进度条的值最大为1.0
if(self.webview.estimatedProgress >= 1.0) {
UIView.animate(withDuration: 0.3, delay: 0.1, options: .curveEaseInOut, animations: { () -> Void in
self.progBar.alpha = 0.0
}, completion: { (finished:Bool) -> Void in
self.progBar.progress = 0
})
}
}
}
override class func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
}
}
......@@ -45,7 +45,7 @@ class YHLoginPrivacyView: UIView {
let label = UILabel()
label.text = "我已阅读并同意"
label.font = kFont(size: 12)
label.textColor = UIColor(hex:0xffffff)
label.textColor = UIColor(hex:0x888f98)
label.textAlignment = .left
return label
}()
......@@ -60,7 +60,8 @@ class YHLoginPrivacyView: UIView {
let button = UIButton(type: .custom)
button.titleLabel?.font = kBoldFont(size: 12)
button.contentHorizontalAlignment = .center
button.setTitle("《银河服务条款》", for: .normal)
button.setTitle("《隐私协议》", for: .normal)
button.setTitleColor(UIColor(hex: 0x2f7ef6), for: .normal)
return button
}()
addSubview(serviceButton)
......@@ -68,13 +69,13 @@ class YHLoginPrivacyView: UIView {
make.left.equalTo(messageLabel.snp.right).offset(1)
make.centerY.equalToSuperview()
make.height.equalTo(20)
make.width.equalTo(96)
make.width.equalTo(80)
}
andLabel = {
let label = UILabel()
label.text = "和"
label.font = kFont(size: 12)
label.textColor = UIColor(hex:0xffffff)
label.textColor = UIColor(hex:0x888f98)
label.textAlignment = .left
return label
}()
......@@ -88,7 +89,8 @@ class YHLoginPrivacyView: UIView {
let button = UIButton(type: .custom)
button.titleLabel?.font = kBoldFont(size: 12)
button.contentHorizontalAlignment = .center
button.setTitle("《银河隐私政策》", for: .normal)
button.setTitle("《用户条款》", for: .normal)
button.setTitleColor(UIColor(hex: 0x2f7ef6), for: .normal)
return button
}()
addSubview(privacyButton)
......@@ -96,7 +98,7 @@ class YHLoginPrivacyView: UIView {
make.left.equalTo(andLabel.snp.right).offset(1)
make.centerY.equalToSuperview()
make.height.equalTo(20)
make.width.equalTo(96)
make.width.equalTo(80)
}
}
......
......@@ -7,10 +7,13 @@
//
import UIKit
import AttributedString
class YHPrivacyAlertView: UIView {
typealias Block = () -> ()
var block: Block?
typealias UrlBlock = (_ url: String) -> ()
typealias AgreeBlock = () -> ()
var urlBlock: UrlBlock?
var agreeBlock: AgreeBlock?
var centerView: UIView!
var titleLabel: UILabel!
var messageLabel: UILabel!
......@@ -45,30 +48,28 @@ class YHPrivacyAlertView: UIView {
make.height.equalTo(187)
}
titleLabel = {
let label = UILabel()
label.text = "同意隐私协议"
label.font = kFont(size: 16)
label.textColor = UIColor(hex:0x222222)
label.textAlignment = .center
return label
}()
centerView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.height.equalTo(19)
make.top.equalTo(27)
}
messageLabel = {
let label = UILabel()
label.text = "登录注册需要您阅读并同意我们的《银河服务条款》和《银河隐私政策》"
label.font = kFont(size: 14)
label.textColor = UIColor(hex:0x222222)
label.textAlignment = .left
label.textAlignment = .center
label.numberOfLines = 0
return label
}()
let aa: ASAttributedString = .init("请先阅读并同意", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.mainTextColor))
let cc: ASAttributedString = .init("《隐私协议》", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.brandMainColor), .action {
if let block = self.urlBlock {
block("https://www.baidu.com")
}
})
let bb: ASAttributedString = .init("和", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.mainTextColor))
let dd: ASAttributedString = .init("《用户条款》", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.brandMainColor), .action {
if let block = self.urlBlock {
block("https://www.baidu.com")
}
})
messageLabel.attributed.text = aa + cc + bb + dd
centerView.addSubview(messageLabel)
messageLabel.snp.makeConstraints { make in
make.left.equalTo(22)
......@@ -120,10 +121,10 @@ class YHPrivacyAlertView: UIView {
}
@objc func agree() {
if let block = block {
if let block = self.agreeBlock {
block()
dismiss()
}
dismiss()
}
@objc private func handleTap(_ sender: AnyObject?) {
......
......@@ -10,16 +10,16 @@ import UIKit
// 输入框UI显示配置
struct YHSmsCodeViewConfig {
var textColor : UIColor? = .white
var bgColor : UIColor? = .init(white: 1, alpha: 0.3)
var cursorColor : UIColor? = .black
var textColor : UIColor? = UIColor(hex: 0x000000)
var bgColor : UIColor? = UIColor(hex: 0xebeef4)
var cursorColor : UIColor? = UIColor(hex: 0x2f7ef6)
var font: UIFont? = .systemFont(ofSize: 20)
// 展示输入框个数
var count : Int = 6
var width : Double = 45.0
var height : Double = 55.0
var height : Double = 50.0
// 输入框之间间距
var gap:Double = 9
var gap:Double = 10
}
let codeViewBaseTag = 9527
......
......@@ -15,9 +15,12 @@ class YHSmsCodeView: UIView {
if showCursor {
self.cursor.layer .removeAllAnimations()
self.animaitonShow(true)
self.layer.borderWidth = 1
self.layer.borderColor = UIColor(hex: 0x2f7ef6).cgColor
} else {
self.cursor.layer .removeAllAnimations()
self.cursor.isHidden = true
self.layer.borderWidth = 0
}
}
}
......@@ -36,7 +39,7 @@ class YHSmsCodeView: UIView {
var cursor : UIView = {
let cursor = UIView()
cursor.backgroundColor = .black
cursor.backgroundColor = UIColor(hex: 0x2f7ef6)
cursor.isHidden = true
return cursor
}()
......
......@@ -126,9 +126,11 @@ extension YHMyViewController : UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if (indexPath.row >= items.count) { return }
let vc = YHFamilyMemberFormVC(orderId: 133971)
self.navigationController?.pushViewController(vc)
let vc = UINavigationController(rootVC: YHPhoneLoginViewController())
vc.modalPresentationStyle = .custom
self.navigationController?.present(vc, animated: true)
// let vc = YHFamilyMemberFormVC(orderId: 133971)
// self.navigationController?.pushViewController(vc)
return
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "login_back@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "login_back@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "login_close@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "login_close@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "login_phone_bg_image@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "login_phone_bg_image@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "login_phone_log_image@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "login_phone_log_image@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment