|  | @@ -0,0 +1,207 @@
 | 
	
		
			
				|  |  | +//
 | 
	
		
			
				|  |  | +//  PQBandingPhoneController.swift
 | 
	
		
			
				|  |  | +//  PQSpeed
 | 
	
		
			
				|  |  | +//
 | 
	
		
			
				|  |  | +//  Created by SanW on 2020/8/11.
 | 
	
		
			
				|  |  | +//  Copyright © 2020 BytesFlow. All rights reserved.
 | 
	
		
			
				|  |  | +//
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import UIKit
 | 
	
		
			
				|  |  | +import BFFramework
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class PQBandingPhoneController: PQPhoneLoginController {
 | 
	
		
			
				|  |  | +    var isCodeSend: Bool = false // 是否已经发送过验证码
 | 
	
		
			
				|  |  | +    var timer: Timer?
 | 
	
		
			
				|  |  | +    var totalTime: Int = 59 // 总时长
 | 
	
		
			
				|  |  | +    var codeId: String? // 验证码codeId
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    lazy var sendCodeBtn: UIButton = {
 | 
	
		
			
				|  |  | +        let sendCodeBtn = UIButton(type: .custom)
 | 
	
		
			
				|  |  | +        sendCodeBtn.addTarget(self, action: #selector(sendMsg), for: .touchUpInside)
 | 
	
		
			
				|  |  | +        sendCodeBtn.setTitleColor(UIColor.hexColor(hexadecimal: "#666666"), for: .normal)
 | 
	
		
			
				|  |  | +        sendCodeBtn.titleLabel?.font = UIFont.systemFont(ofSize: 16)
 | 
	
		
			
				|  |  | +        sendCodeBtn.frame = CGRect(x: cScreenWidth - cDefaultMargin * 14, y: 253, width: cDefaultMargin * 10, height: cDefaultMargin * 4)
 | 
	
		
			
				|  |  | +        sendCodeBtn.contentHorizontalAlignment = .right
 | 
	
		
			
				|  |  | +        sendCodeBtn.isHidden = true
 | 
	
		
			
				|  |  | +        sendCodeBtn.isUserInteractionEnabled = false
 | 
	
		
			
				|  |  | +        return sendCodeBtn
 | 
	
		
			
				|  |  | +    }()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    lazy var codeRightView: UIView = {
 | 
	
		
			
				|  |  | +        let codeRightView = UIView(frame: CGRect(x: 0, y: 0, width: 40, height: 32))
 | 
	
		
			
				|  |  | +        let codeDeleteBtn = UIButton(type: .custom)
 | 
	
		
			
				|  |  | +        codeDeleteBtn.setImage(UIImage(named: "icon_x_cancel"), for: .normal)
 | 
	
		
			
				|  |  | +        codeDeleteBtn.frame = CGRect(x: 0, y: 0, width: 28, height: 28)
 | 
	
		
			
				|  |  | +        codeDeleteBtn.addTarget(self, action: #selector(clearCodeText), for: .touchUpInside)
 | 
	
		
			
				|  |  | +        codeRightView.addSubview(codeDeleteBtn)
 | 
	
		
			
				|  |  | +        return codeRightView
 | 
	
		
			
				|  |  | +    }()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    override func viewDidLoad() {
 | 
	
		
			
				|  |  | +        super.viewDidLoad()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // Do any additional setup after loading the view.
 | 
	
		
			
				|  |  | +        titleLab.text = "绑定手机号"
 | 
	
		
			
				|  |  | +        phoneTextField.textAlignment = .left
 | 
	
		
			
				|  |  | +        passTextField.textAlignment = .left
 | 
	
		
			
				|  |  | +        let placeholder: NSMutableAttributedString = NSMutableAttributedString(string: "请输入验证码")
 | 
	
		
			
				|  |  | +        placeholder.addAttributes([NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16, weight: .regular), NSAttributedString.Key.foregroundColor: UIColor.hexColor(hexadecimal: "#A3A3A3")], range: NSRange(location: 0, length: placeholder.length))
 | 
	
		
			
				|  |  | +        passTextField.attributedPlaceholder = placeholder
 | 
	
		
			
				|  |  | +        phoneLoginBtn.setTitle("获取验证码", for: .normal)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        phoneTextField.rightViewMode = .whileEditing
 | 
	
		
			
				|  |  | +        let phoneRightView = UIView(frame: CGRect(x: 0, y: 0, width: 40, height: 32))
 | 
	
		
			
				|  |  | +        let phoneDeleteBtn = UIButton(type: .custom)
 | 
	
		
			
				|  |  | +        phoneDeleteBtn.setImage(UIImage(named: "icon_x_cancel"), for: .normal)
 | 
	
		
			
				|  |  | +        phoneDeleteBtn.frame = CGRect(x: 0, y: 0, width: 28, height: 28)
 | 
	
		
			
				|  |  | +        phoneDeleteBtn.addTarget(self, action: #selector(clearPhoneText), for: .touchUpInside)
 | 
	
		
			
				|  |  | +        phoneRightView.addSubview(phoneDeleteBtn)
 | 
	
		
			
				|  |  | +        phoneTextField.rightView = phoneRightView
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        passTextField.rightViewMode = .whileEditing
 | 
	
		
			
				|  |  | +        passTextField.keyboardType = .numberPad
 | 
	
		
			
				|  |  | +        passTextField.isSecureTextEntry = false
 | 
	
		
			
				|  |  | +        passTextField.rightView = codeRightView
 | 
	
		
			
				|  |  | +        view.addSubview(sendCodeBtn)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    override func viewDidDisappear(_ animated: Bool) {
 | 
	
		
			
				|  |  | +        super.viewDidDisappear(animated)
 | 
	
		
			
				|  |  | +        stopTimer()
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    override func valueChanged(textField: UITextField) {
 | 
	
		
			
				|  |  | +        if textField == phoneTextField, textField.text?.count ?? 0 > 11 {
 | 
	
		
			
				|  |  | +            textField.text = String(textField.text?.prefix(11) ?? "")
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if textField == passTextField, textField.text?.count ?? 0 > 4 {
 | 
	
		
			
				|  |  | +            textField.text = String(textField.text?.prefix(4) ?? "")
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        isEnabled()
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    override func isEnabled() {
 | 
	
		
			
				|  |  | +        let isEnabled = !isCodeSend ? phoneTextField.text?.count ?? 0 == 11 : (phoneTextField.text?.count ?? 0 == 11 && passTextField.text?.count ?? 0 == 4)
 | 
	
		
			
				|  |  | +        if isEnabled {
 | 
	
		
			
				|  |  | +            phoneLoginBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#07C160")
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            phoneLoginBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#333333")
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @objc func clearPhoneText() {
 | 
	
		
			
				|  |  | +        phoneTextField.text = ""
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @objc func clearCodeText() {
 | 
	
		
			
				|  |  | +        passTextField.text = ""
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /// 发送验证码
 | 
	
		
			
				|  |  | +    @objc func sendMsg() {
 | 
	
		
			
				|  |  | +        totalTime = 60
 | 
	
		
			
				|  |  | +        if phoneTextField.text?.count ?? 0 <= 0 {
 | 
	
		
			
				|  |  | +            cShowHUB(superView: nil, msg: "请输入手机号")
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if phoneTextField.text?.count ?? 0 != 11 {
 | 
	
		
			
				|  |  | +            cShowHUB(superView: nil, msg: "请输入正确的手机号")
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        codeId = nil
 | 
	
		
			
				|  |  | +        isCodeSend = true
 | 
	
		
			
				|  |  | +        phoneLoginBtn.setTitle("完成", for: .normal)
 | 
	
		
			
				|  |  | +        phoneLoginBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#333333")
 | 
	
		
			
				|  |  | +        PQMineViewModel.sendIndetifyCode(phoneNumber: phoneTextField.text ?? "") { [weak self] isSuccess, msg, codeId in
 | 
	
		
			
				|  |  | +            cShowHUB(superView: nil, msg: msg)
 | 
	
		
			
				|  |  | +            if isSuccess {
 | 
	
		
			
				|  |  | +                self?.codeId = codeId
 | 
	
		
			
				|  |  | +                self?.startTimer()
 | 
	
		
			
				|  |  | +                self?.isEnabled()
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                self?.isCodeSend = false
 | 
	
		
			
				|  |  | +                self?.phoneLoginBtn.setTitle("获取验证码", for: .normal)
 | 
	
		
			
				|  |  | +                self?.phoneLoginBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#07C160")
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 定时操作
 | 
	
		
			
				|  |  | +    @objc func updataSecond() {
 | 
	
		
			
				|  |  | +        totalTime -= 1
 | 
	
		
			
				|  |  | +        if totalTime <= 0 {
 | 
	
		
			
				|  |  | +            totalTime = 60
 | 
	
		
			
				|  |  | +            sendCodeBtn.setTitle("重新发送", for: .normal)
 | 
	
		
			
				|  |  | +            sendCodeBtn.isUserInteractionEnabled = true
 | 
	
		
			
				|  |  | +            stopTimer()
 | 
	
		
			
				|  |  | +            codeRightView.frame = CGRect(x: 0, y: 0, width: cDefaultMargin * 10, height: 32)
 | 
	
		
			
				|  |  | +            passTextField.rightView = codeRightView
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            let title = totalTime < 10 ? "  \(totalTime) " : "  \(totalTime)"
 | 
	
		
			
				|  |  | +            sendCodeBtn.setTitle(title, for: .normal)
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 开始计时
 | 
	
		
			
				|  |  | +    func startTimer() {
 | 
	
		
			
				|  |  | +        if timer == nil {
 | 
	
		
			
				|  |  | +            codeRightView.frame = CGRect(x: 0, y: 0, width: 50, height: 32)
 | 
	
		
			
				|  |  | +            passTextField.rightView = codeRightView
 | 
	
		
			
				|  |  | +            sendCodeBtn.isHidden = false
 | 
	
		
			
				|  |  | +            sendCodeBtn.isUserInteractionEnabled = false
 | 
	
		
			
				|  |  | +            timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updataSecond), userInfo: nil, repeats: true)
 | 
	
		
			
				|  |  | +            timer!.fire()
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 停止计时
 | 
	
		
			
				|  |  | +    func stopTimer() {
 | 
	
		
			
				|  |  | +        if timer != nil {
 | 
	
		
			
				|  |  | +            timer!.invalidate() // 销毁timer
 | 
	
		
			
				|  |  | +            timer = nil
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    override func loginAction() {
 | 
	
		
			
				|  |  | +        if phoneTextField.text?.count ?? 0 <= 0 {
 | 
	
		
			
				|  |  | +            cShowHUB(superView: nil, msg: "请输入手机号")
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if phoneTextField.text?.count ?? 0 != 11 {
 | 
	
		
			
				|  |  | +            cShowHUB(superView: nil, msg: "请输入正确的手机号")
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if !isCodeSend {
 | 
	
		
			
				|  |  | +            isCodeSend = true
 | 
	
		
			
				|  |  | +            sendMsg()
 | 
	
		
			
				|  |  | +            phoneLoginBtn.setTitle("完成", for: .normal)
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if passTextField.text?.count ?? 0 <= 0 {
 | 
	
		
			
				|  |  | +            cShowHUB(superView: nil, msg: "请输入验证码")
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if passTextField.text?.count ?? 0 != 4 {
 | 
	
		
			
				|  |  | +            cShowHUB(superView: nil, msg: "请输入正确的验证码")
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        PQMineViewModel.checkIndetifyCode(phoneNumber: phoneTextField.text ?? "", codeId: codeId ?? "", indetifyCode: passTextField.text ?? "") { [weak self] isSuccess, msg in
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if isSuccess {
 | 
	
		
			
				|  |  | +                PQMineViewModel.updatePhone(phoneNumber: self?.phoneTextField.text ?? "") { isSuccess, msg in
 | 
	
		
			
				|  |  | +                    if isSuccess {
 | 
	
		
			
				|  |  | +                        saveUserDefaults(key: cUpdatePhone, value: self?.phoneTextField.text ?? "")
 | 
	
		
			
				|  |  | +                        BFLoginUserInfo.shared.phoneNumber = self?.phoneTextField.text ?? ""
 | 
	
		
			
				|  |  | +                        cShowHUB(superView: nil, msg: "手机号绑定成功")
 | 
	
		
			
				|  |  | +                        self?.navigationController?.popToRootViewController(animated: true)
 | 
	
		
			
				|  |  | +                        postNotification(name: cBandingPhoneSuccessKey)
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                        cShowHUB(superView: nil, msg: msg)
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                cShowHUB(superView: nil, msg: msg)
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |