CNThreeLoginViewController.swift 11.4 KB
//
//  CNThreeLoginViewController.swift
//  metaCode
//
//  Created by zx on 2024/4/25.
//  三方登录绑定手机号页

import Foundation
import APButton
import SnapKit

class CNThreeLoginViewController:CNLiveBaseViewController{
    
    lazy var bindingTitleLabel: UILabel = {
        let label = UILabel()
        let attrString = NSMutableAttributedString(string: "绑定您的手机号")
        label.frame = CGRect(x: 45, y: 150, width: 182, height: 36.5)
        label.numberOfLines = 0
        let attr: [NSAttributedString.Key : Any] = [.font: BoldFont(26) ,.foregroundColor: UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)]
        attrString.addAttributes(attr, range: NSRange(location: 0, length: attrString.length))
        label.attributedText = attrString
        return label
    }()

    
    lazy var headerView : UIView = {
        let layerView = UIView()
        layerView.frame = CGRect(x: 0, y: 0, width: KSreenWidth, height: 427.5*KSreenWidth/375)
        // fillCode
        let bgLayer1 = CAGradientLayer()
        bgLayer1.colors = [UIColor(red: 0.91, green: 0.94, blue: 1, alpha: 1).cgColor, UIColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor]
        bgLayer1.locations = [0, 1]
        bgLayer1.frame = layerView.bounds
        bgLayer1.startPoint = CGPoint(x: 0.5, y: 0)
        bgLayer1.endPoint = CGPoint(x: 1, y: 1)
        layerView.layer.addSublayer(bgLayer1)
        return layerView
    }()
    
    lazy var areaButton : UIButton = {
        let areaButton = UIButton(type: .custom)
        areaButton.backgroundColor = .white
        areaButton.setTitle("+86", for: .normal)
        areaButton.setTitle("+86", for: .highlighted)
        areaButton.titleLabel?.font = BoldFont_16
        areaButton.setTitleColor(HexColor("#333333"), for: .normal)
        areaButton.setTitleColor(HexColor("#333333"), for: .highlighted)
        areaButton.addTarget(self, action: #selector(changeCityNumberMothod), for: .touchUpInside)
        return areaButton
    }()
    
    lazy var phoneText : UITextField = {
        let phoneText = UITextField.init()
        phoneText.backgroundColor = .white
        phoneText.placeholder = "输入手机号"
        phoneText.font = BoldFont_16_Fit
        phoneText.keyboardType = .numberPad
        phoneText.clearButtonMode = .whileEditing
        return phoneText
    }()
    
    lazy var veriText: UITextField = {
        let veriText = UITextField.init()
        veriText.backgroundColor = .white
        veriText.placeholder = "输入验证码"
        veriText.font = BoldFont_16_Fit
        veriText.keyboardType = .numberPad
        veriText.clearButtonMode = .whileEditing
        return veriText
    }()
    
    lazy var loginButton: APButton = {
        let loginButton = APButton()
        loginButton.setTitle("绑  定", for: .normal)
        loginButton.setTitleColor(.white, for: .normal)
        loginButton.titleLabel?.font = BoldFont_16_Fit
        loginButton.layer.cornerRadius = 20
        loginButton.activityIndicator.color = .white
        loginButton.layer.masksToBounds = true
        loginButton.addTarget(self, action: #selector(sendLoginActionMothod), for: .touchUpInside)
        return loginButton
    }()
    
    var countryCode: String = "86"
    var timeOut = 30//多少秒计时器
    var model:CNThreeLoginModel?
    
    init(model:CNThreeLoginModel) {
        super.init(nibName: nil, bundle: nil)
        self.model = model
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setNeedsStatusBarAppearanceUpdate()
        view.backgroundColor = .white
        navigationBarHidden = false
        
        //添加主视图
        self.view.addSubview(self.headerView)
        self.view.sendSubviewToBack(self.headerView)
        self.headerView.snp.makeConstraints { make in
            make.centerX.equalTo(self.view)
            make.left.right.equalTo(self.view)
            make.top.equalTo(KNavigationHeight)
            make.height.equalTo(427.5*KSreenWidth/375)
        }
        
        self.view.addSubview(self.bindingTitleLabel)
        self.bindingTitleLabel.snp.makeConstraints { make in
            make.left.equalToSuperview().offset(45)
            make.top.equalTo(KNavigationHeight+adapt_length(length: 100))
            make.width.equalTo(KSreenWidth-90)
            make.height.equalTo(40)
        }
        
        self.setupPhoneView()
        self.setupVeriCodeView()
        self.setupLoginButtonView()
    }
    
    deinit {
        print("已经销毁了")
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
      return .lightContent
    }
    
    func setupPhoneView() {
        
        let phoneV = UIView.init()
        phoneV.backgroundColor = .white
        view.addSubview(phoneV)
        phoneV.snp.makeConstraints { make in
            make.left.right.equalToSuperview()
            make.top.equalTo(self.bindingTitleLabel.snp.bottom).offset(adapt_length(length: 60))
            make.height.equalTo(50)
        }
        
        phoneV.addSubview(areaButton)
        areaButton.snp.makeConstraints { make in
            make.centerY.equalTo(phoneV)
            make.left.equalTo(phoneV.left).offset(40)
            make.width.lessThanOrEqualTo(50)
        }
        
        let v_line = UILabel.init()
        v_line.backgroundColor = HexColor("#EBEBEB")
        phoneV.addSubview(v_line)
        v_line.snp.makeConstraints { make in
            make.centerY.equalTo(phoneV)
            make.left.equalTo(areaButton.snp.right).offset(10)
            make.width.equalTo(1)
            make.height.equalTo(areaButton.snp.height).multipliedBy(0.35)
        }
        
        let h_line = UILabel.init()
        h_line.backgroundColor = HexColor("#EBEBEB")
        phoneV.addSubview(h_line)
        h_line.snp.makeConstraints { make in
            make.left.equalTo(phoneV.left).offset(40)
            make.right.equalTo(phoneV.right).offset(-40)
            make.height.equalTo(v_line.snp.width)
            make.bottom.equalTo(phoneV.snp.bottom).offset(-1)
        }
        
        phoneV.addSubview(phoneText)
        phoneText.snp.makeConstraints { make in
            make.centerY.equalTo(phoneV)
            make.left.equalTo(areaButton.snp.right).offset(21)
            make.height.equalTo(areaButton.snp.height)
            make.right.equalTo(phoneV.right).offset(-40)
        }
    }
    
    func setupVeriCodeView() {
        
        let verView = UIView.init()
        verView.backgroundColor = .white
        self.view.addSubview(verView)
        verView.snp.makeConstraints { make in
            make.left.right.equalTo(self.view)
            make.top.equalTo(self.phoneText.snp.bottom).offset(adapt_length(length: 40))
            make.height.equalTo(50)
        }
        
        let h_line = UILabel.init()
        h_line.backgroundColor = HexColor("#EBEBEB")
        verView.addSubview(h_line)
        h_line.snp.makeConstraints { make in
            make.left.equalTo(verView.left).offset(40)
            make.right.equalTo(verView.right).offset(-40)
            make.height.equalTo(1)
            make.bottom.equalTo(verView.snp.bottom).offset(-1)
        }
        
        let codeButton = UIButton(type: .custom)
        codeButton.backgroundColor = .white
        codeButton.setTitle("获取验证码", for: .normal)
        codeButton.setTitle("获取验证码", for: .highlighted)
        codeButton.titleLabel?.font = Font_16
        codeButton.setTitleColor(HexColor("#0066FE"), for: .normal)
        codeButton.setTitleColor(HexColor("#0066FE"), for: .highlighted)
        codeButton.addTarget(self, action: #selector(sendVerifiCodeMothod), for: .touchUpInside)
        verView.addSubview(codeButton)
        codeButton.snp.makeConstraints { make in
            make.centerY.equalTo(verView)
            make.right.equalTo(verView.snp.right).offset(-40)
            make.width.lessThanOrEqualTo(100)
        }
        
        verView.addSubview(veriText)
        veriText.snp.makeConstraints { make in
            make.centerY.equalTo(verView)
            make.right.equalTo(codeButton.snp.left).offset(-20)
            make.height.equalTo(codeButton.snp.height)
            make.left.equalTo(verView.snp.left).offset(40)
        }
    }
    func setupLoginButtonView() {
        
        view.addSubview(loginButton)
        loginButton.snp.makeConstraints { make in
            make.centerX.equalTo(view)
            make.top.equalTo(veriText.snp.bottom).offset(adapt_length(length: 105))
            make.left.equalTo(40)
            make.right.equalTo(-40)
            make.height.equalTo(40)
        }

        loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 1),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))

    }
    
    @objc func changeCityNumberMothod(sender : UIButton) {
        CNLiveLoginPickerView.showSelectView { [weak self] text,countryStr  in
            self!.countryCode = text
            self!.areaButton.setTitle("+\(text)", for: .normal)
            self!.areaButton.setTitle("+\(text)", for: .highlighted)
        }
    }
    
    @objc func sendVerifiCodeMothod(sender : UIButton) {
        view.endEditing(true)
        CNLiveLoginViewModel.requestVerCodeAction(phone: phoneText.text ?? "", code: countryCode) { [weak self] in
            self!.setupCountdownAction(sender: sender)
        }
    }
    
    @objc func sendLoginActionMothod(sender : UIButton) {
        view.endEditing(true)
        if phoneText.text ?? "" == ""{
            showMessage(message: "请输入手机号")
            return
        }
        if veriText.text ?? "" == ""{
            showMessage(message: "请输入验证码")
            return
        }
        showLoading(message: "")
        // 绑定手机号请求登录
        CNLiveLoginViewModel.thirdPartyLoginBindingTel(mobile: phoneText.text ?? "", verificationCode: veriText.text ?? "", model: self.model!) { result, status in
            hiddenLoading()
            if status == .success{
                let window = UIApplication.shared.delegate?.window
                window??.rootViewController = CNLiveBaseTabBarViewController.init()
            }
        }

        

    }
    
    /// 设置发送验证码按钮
    /// - Parameter sender: 按钮
    private func setupCountdownAction(sender : UIButton) {
        var timeOut = self.timeOut
        let queue: DispatchQueue = DispatchQueue.global(qos: DispatchQoS.QoSClass.default)
        let _timer: DispatchSource = DispatchSource.makeTimerSource(flags: [], queue: queue) as! DispatchSource
        _timer.schedule(wallDeadline: DispatchWallTime.now(), repeating: .seconds(1))
        //一秒执行
        _timer.setEventHandler(handler: { () -> Void in
            if timeOut <= 0 {
                _timer.cancel()
                DispatchQueue.main.sync(execute: { () -> Void in
                    sender.setTitle("获取验证码", for: .normal)
                    sender.isEnabled = true
                })
            } else {
                let seconds = timeOut
                DispatchQueue.main.sync(execute: {() -> Void in
                    let str = String(describing: seconds)
                    sender.setTitle("\(str)s重新获取", for: .normal)
                    sender.isEnabled = false
                })
                timeOut -= 1
            }
        })
        _timer.resume()
    }

}