杨锴
2024-11-05 0fb7413df54760ac6bd15b90b738e0706de1629e
XQMuse/Root/Me/VC/UserProfileVC.swift
@@ -15,217 +15,210 @@
class UserProfileVC: BaseVC {
            @IBOutlet weak var image_user: UIImageView!
            @IBOutlet weak var tf_nickName: QMUITextField!
            @IBOutlet weak var tf_realName: QMUITextField!
            @IBOutlet weak var tf_sign: QMUITextField!
            @IBOutlet weak var tf_gender: QMUITextField!
            @IBOutlet weak var tf_birthday: QMUITextField!
            @IBOutlet weak var tf_degree: QMUITextField!
            @IBOutlet weak var tf_industry: QMUITextField!
            @IBOutlet weak var tf_company: QMUITextField!
            @IBOutlet weak var tf_job: QMUITextField!
            @IBOutlet weak var tf_address: QMUITextField!
            @IBOutlet weak var tf_birthland: QMUITextField!
            @IBOutlet weak var tf_email: QMUITextField!
    @IBOutlet weak var image_user: UIImageView!
    @IBOutlet weak var tf_nickName: QMUITextField!
    @IBOutlet weak var tf_realName: QMUITextField!
    @IBOutlet weak var tf_sign: QMUITextField!
    @IBOutlet weak var tf_gender: QMUITextField!
    @IBOutlet weak var tf_birthday: QMUITextField!
    @IBOutlet weak var tf_degree: QMUITextField!
    @IBOutlet weak var tf_industry: QMUITextField!
    @IBOutlet weak var tf_company: QMUITextField!
    @IBOutlet weak var tf_job: QMUITextField!
    @IBOutlet weak var tf_address: QMUITextField!
    @IBOutlet weak var tf_birthland: QMUITextField!
    @IBOutlet weak var tf_email: QMUITextField!
    @IBOutlet weak var image_placeholder: UIImageView!
            private var clipSize = CGSize(width: JQ_ScreenW, height: JQ_ScreenW) //裁剪大小
            private var clipFrame:CGRect{
                        get{
                                    if clipSize.width == 0 || clipSize.height == 0 {
                                                assert(false,"未设置裁剪框大小")
                                    }
                                    var clipFrame = CGRect.zero
                                    clipFrame.size = clipSize
                                    clipFrame.origin = CGPoint(x: (JQ_ScreenW - clipSize.width)/2.0, y: (JQ_ScreenH - clipSize.width)/2.0)
                                    return clipFrame
                        }
            }
    private var userClipAvar:UIImage?
            override func viewDidLoad() {
                        super.viewDidLoad()
                        title = "个人资料"
    private var clipSize = CGSize(width: JQ_ScreenW, height: JQ_ScreenW) //裁剪大小
    private var clipFrame:CGRect{
        get{
            if clipSize.width == 0 || clipSize.height == 0 {
                assert(false,"未设置裁剪框大小")
            }
        image_placeholder.isHidden = !UserViewModel.getAvatarInfo().avatar.isEmpty
            var clipFrame = CGRect.zero
            clipFrame.size = clipSize
            clipFrame.origin = CGPoint(x: (JQ_ScreenW - clipSize.width)/2.0, y: (JQ_ScreenH - clipSize.width)/2.0)
            return clipFrame
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "个人资料"
        let saveBtn = UIButton(type: .custom)
        saveBtn.setTitle("保存", for: .normal)
        saveBtn.titleLabel?.font = .systemFont(ofSize: 15)
        saveBtn.setTitleColor(UIColor(hexString: "#353535"), for: .normal)
        saveBtn.addTarget(self, action: #selector(saveAction), for: .touchUpInside)
        navigationItem.rightBarButtonItem = UIBarButtonItem(customView: saveBtn)
//        image_placeholder.isHidden = !UserViewModel.getAvatarInfo().avatar.isEmpty
        if let url = URL(string: UserViewModel.getAvatarInfo().avatar){
            image_user.sd_setImage(with: url)
        }
                        tf_nickName.text = UserViewModel.getAvatarInfo().nickname
                        tf_realName.text = UserViewModel.getAvatarInfo().realname
                        tf_sign.text = UserViewModel.getAvatarInfo().signature
                        tf_gender.text = UserViewModel.getAvatarInfo().gender.rawTitle
                        tf_birthday.text = UserViewModel.getAvatarInfo().birthday
                        tf_degree.text = UserViewModel.getAvatarInfo().education
                        tf_industry.text = UserViewModel.getAvatarInfo().industry
                        tf_company.text = UserViewModel.getAvatarInfo().company
                        tf_job.text = UserViewModel.getAvatarInfo().occupation
                        tf_address.text = UserViewModel.getAvatarInfo().location
                        tf_birthland.text = UserViewModel.getAvatarInfo().hometown
                        tf_email.text = UserViewModel.getAvatarInfo().email
        tf_nickName.text = UserViewModel.getAvatarInfo().nickname
        tf_realName.text = UserViewModel.getAvatarInfo().realname
        tf_sign.text = UserViewModel.getAvatarInfo().signature
        tf_gender.text = UserViewModel.getAvatarInfo().gender.rawTitle
        tf_birthday.text = UserViewModel.getAvatarInfo().birthday
        tf_degree.text = UserViewModel.getAvatarInfo().education
        tf_industry.text = UserViewModel.getAvatarInfo().industry
        tf_company.text = UserViewModel.getAvatarInfo().company
        tf_job.text = UserViewModel.getAvatarInfo().occupation
        tf_address.text = UserViewModel.getAvatarInfo().location
        tf_birthland.text = UserViewModel.getAvatarInfo().hometown
        tf_email.text = UserViewModel.getAvatarInfo().email
        yy_popBlock = {[weak self] in
        tf_nickName.maximumTextLength = 12
    }
    override func setUI() {
        super.setUI()
        view.backgroundColor = UIColor(hexString:"#fafafa")
        tf_gender.delegate = self
        tf_birthday.delegate = self
        image_user.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(selectUserProfile))
        tap.numberOfTapsRequired = 1
        image_user.addGestureRecognizer(tap)
    }
    @objc func saveAction(){
        let nickname = tf_nickName.text
        let realname = tf_realName.text
        let signature = tf_sign.text
        let gender = GenderType.GenderBy(tf_gender.text!)
        let birthday = tf_birthday.text
        let education = tf_degree.text
        let industry = tf_industry.text
        let company = tf_company.text
        let occupation = tf_job.text
        let location = tf_address.text
        let hometown = tf_birthland.text
        let email = tf_email.text
        Services.updateUserInfo(birthday: birthday, company: company, education: education, email: email, gender: gender, hometown: hometown, industry: industry, location: location, nickname: nickname, realname: realname, occupation: occupation, signature: signature).subscribe(onNext: {data in
            NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil)
            alertSuccess(msg: "修改成功")
        }).disposed(by: disposeBag)
        userClipAvar?.uploadImg().subscribe(onNext: {[weak self]imageUrl in
            guard let weakSelf = self else { return }
            let nickname = weakSelf.tf_nickName.text
            let realname = weakSelf.tf_realName.text
            let signature = weakSelf.tf_sign.text
            let gender = GenderType.GenderBy(weakSelf.tf_gender.text!)
            let birthday = weakSelf.tf_birthday.text
            let education = weakSelf.tf_degree.text
            let industry = weakSelf.tf_industry.text
            let company = weakSelf.tf_company.text
            let occupation = weakSelf.tf_job.text
            let location = weakSelf.tf_address.text
            let hometown = weakSelf.tf_birthland.text
            let email = weakSelf.tf_email.text
            Services.updateUserAvatar(imageUrl).subscribe(onNext: {data in
                weakSelf.image_user.sd_setImage(with: URL(string: imageUrl.jq_urlEncoded())!)
                weakSelf.image_placeholder.isHidden = true
                NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil)
            }).disposed(by: weakSelf.disposeBag)
        }).disposed(by: disposeBag)
    }
            if nickname != UserViewModel.getAvatarInfo().nickname
                || realname != UserViewModel.getAvatarInfo().realname
                || signature != UserViewModel.getAvatarInfo().signature
                || gender != UserViewModel.getAvatarInfo().gender
                || birthday != UserViewModel.getAvatarInfo().birthday
                || education != UserViewModel.getAvatarInfo().education
                || industry != UserViewModel.getAvatarInfo().industry
                || company != UserViewModel.getAvatarInfo().company
                || occupation != UserViewModel.getAvatarInfo().occupation
                || location != UserViewModel.getAvatarInfo().location
                || hometown != UserViewModel.getAvatarInfo().hometown
                || email != UserViewModel.getAvatarInfo().email{
    @objc func selectUserProfile(){
        CommonAlertSheetView.show(items: ["从相册选择"]) {[unowned self] index in
            if index == 0{
                CommonAlertView.show(title: "提示", content: "是否保存修改?",cancelStr: "不保存",completeStr: "保存") { state in
                    if state{
                        Services.updateUserInfo(birthday: birthday, company: company, education: education, email: email, gender: gender, hometown: hometown, industry: industry, location: location, nickname: nickname, realname: realname, occupation: occupation, signature: signature).subscribe(onNext: {data in
                            NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil)
                            weakSelf.navigationController?.popViewController(animated: true)
                        }).disposed(by: weakSelf.disposeBag)
                    }else{
                        weakSelf.navigationController?.popViewController(animated: true)
                    }
                }
                let p = TZImagePickerController(maxImagesCount: 1, columnNumber: 3, delegate: self)
                p!.modalPresentationStyle = .fullScreen
                p!.allowTakeVideo = false
                p!.allowTakePicture = false
                p!.sortAscendingByModificationDate = true
                p!.scaleAspectFillCrop = true
                p!.allowPickingVideo = false
                p!.maxImagesCount = 1
                p!.allowCrop = true
                p!.cropRect = self.clipFrame
                self.present(p!, animated: true, completion: nil)
//                guard UIImagePickerController.isSourceTypeAvailable(.camera) else{
//                    alertError(msg: "当前设备相机不可用");return
//                }
//
//                let p = UIImagePickerController()
//                p.delegate = self
//                p.modalPresentationStyle = .fullScreen
//                p.allowsEditing = true
//                p.sourceType = .camera
//                p.cameraDevice = .front
//                self.present(p, animated: true)
            }else{
                weakSelf.navigationController?.popViewController(animated: true)
            }
        }
            }
            override func setUI() {
                        super.setUI()
                        view.backgroundColor = UIColor(hexString:"#fafafa")
                        tf_gender.delegate = self
                        tf_birthday.delegate = self
                        image_user.isUserInteractionEnabled = true
                        let tap = UITapGestureRecognizer(target: self, action: #selector(selectUserProfile))
                        tap.numberOfTapsRequired = 1
                        image_user.addGestureRecognizer(tap)
            }
            @objc func selectUserProfile(){
                        CommonAlertSheetView.show(items: ["拍照","从相册选择"]) {[unowned self] index in
                                    if index == 0{
                                                guard UIImagePickerController.isSourceTypeAvailable(.camera) else{
                                                            alertError(msg: "当前设备相机不可用");return
                                                }
                                                let p = UIImagePickerController()
                                                p.delegate = self
                                                p.modalPresentationStyle = .fullScreen
                                                p.allowsEditing = true
                                                p.sourceType = .camera
                                                p.cameraDevice = .front
                                                self.present(p, animated: true)
                                    }else{
                                                let p = TZImagePickerController(maxImagesCount: 1, columnNumber: 3, delegate: self)
                                                p!.modalPresentationStyle = .fullScreen
                                                p!.allowTakeVideo = false
                                                p!.allowTakePicture = false
                                                p!.sortAscendingByModificationDate = true
                                                p!.scaleAspectFillCrop = true
                                                p!.allowPickingVideo = false
                                                p!.maxImagesCount = 1
                                                p!.allowCrop = true
                                                p!.cropRect = self.clipFrame
                                                self.present(p!, animated: true, completion: nil)
                                    }
                        }
            }
    }
}
extension UserProfileVC:QMUITextFieldDelegate{
            func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
                        if textField == tf_gender{
                                    let items = ["男","女","保密"]
                                    CommonAlertSheetView.show(items: items) { index in
                                                guard textField.text != items[index] else {return}
                                                textField.text = items[index]
                                    }
                        }
        if textField == tf_gender{
            let items = ["男","女","保密"]
            CommonAlertSheetView.show(items: items,hiddenTitle: true) { index in
                guard textField.text != items[index] else {return}
                if items[index] == "保密"{
                    textField.text = ""
                }else{
                    textField.text = items[index]
                }
            }
        }
                        if textField == tf_birthday{
                                    view.endEditing(true)
                                    BitrhdayPickerView.show(title: "", type: .YMD) {[weak self] date in
        if textField == tf_birthday{
            view.endEditing(true)
            BitrhdayPickerView.show(title: "", type: .YMD) {[weak self] date in
                self?.tf_birthday.text = date.jq_format("yyyy-MM-dd")
                                    }
                                    return false
                        }
                        return false
            }
            }
            return false
        }
        return false
    }
}
extension UserProfileVC:TZImagePickerControllerDelegate{
            public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingPhotos photos: [UIImage]!, sourceAssets assets: [Any]!, isSelectOriginalPhoto: Bool) {
                        picker.selectedAssets = NSMutableArray(array: assets)
    public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingPhotos photos: [UIImage]!, sourceAssets assets: [Any]!, isSelectOriginalPhoto: Bool) {
        picker.selectedAssets = NSMutableArray(array: assets)
        if let photo = photos.first{
            photo.jq_scaled(to: CGSize(width: 250, height: 250)).uploadImg().subscribe(onNext: {[weak self]imageUrl in
                guard let weakSelf = self else { return }
                Services.updateUserAvatar(imageUrl).subscribe(onNext: {data in
                    weakSelf.image_placeholder.isHidden = true
                    weakSelf.image_user.sd_setImage(with: URL(string: imageUrl)!)
                    NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil)
                }).disposed(by: weakSelf.disposeBag)
            }).disposed(by: disposeBag)
            self.userClipAvar = photo.jq_scaled(to: CGSize(width: 250, height: 250))
//            self.image_placeholder.isHidden = true
        }
            }
    }
            public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingAndEditingVideo coverImage: UIImage!, outputPath: String!, error errorMsg: String!) {
    public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingAndEditingVideo coverImage: UIImage!, outputPath: String!, error errorMsg: String!) {
            }
    }
}
extension UserProfileVC:UIImagePickerControllerDelegate & UINavigationControllerDelegate{
            //成功选取
            public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    //成功选取
    public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
                        var image:UIImage?
                        image = (info[UIImagePickerController.InfoKey.originalImage] as! UIImage)
                        let corpperVC = VPImageCropperViewController(image: image!, cropFrame: clipFrame, limitScaleRatio: Int(image!.scale))
                        corpperVC.modalPresentationStyle = .fullScreen
                        DispatchQueue.main.asyncAfter(deadline: .now()+1.0) {
                                    JQ_currentViewController().present(corpperVC, animated: true, completion: nil)
                        }
        var image:UIImage?
        image = (info[UIImagePickerController.InfoKey.originalImage] as! UIImage)
        let corpperVC = VPImageCropperViewController(image: image!, cropFrame: clipFrame, limitScaleRatio: Int(image!.scale))
        corpperVC.modalPresentationStyle = .fullScreen
        DispatchQueue.main.asyncAfter(deadline: .now()+1.0) {
            JQ_currentViewController().present(corpperVC, animated: true, completion: nil)
        }
                        unowned let weakSelf = self
                        corpperVC.imageCropperHandler { (vc, image) in
            image.uploadImg().subscribe(onNext: {imageUrl in
                Services.updateUserAvatar(imageUrl).subscribe(onNext: {data in
                    weakSelf.image_user.sd_setImage(with: URL(string: imageUrl)!)
                    weakSelf.image_placeholder.isHidden = true
                    NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil)
                }).disposed(by: weakSelf.disposeBag)
            }).disposed(by: weakSelf.disposeBag)
                        } cancelClouse: {
                                    corpperVC.dismiss(animated: true) {
        unowned let weakSelf = self
        corpperVC.imageCropperHandler { (vc, image) in
            weakSelf.userClipAvar = image
//            weakSelf.image_placeholder.isHidden = true
        } cancelClouse: {
            corpperVC.dismiss(animated: true) {
                                    }
                        }
                        picker.dismiss(animated: true) {
            }
        }
        picker.dismiss(animated: true) {
                        }
            }
        }
    }
}