fix
无故事王国
2024-02-28 4468d9f9b3b8c70597f04e5f1ecb61118c404d2c
WanPai/Root/Activity/VC/ActivityDetailApplyVC.swift
@@ -13,263 +13,263 @@
class ActivityDetailApplyVC: BaseVC {
    @IBOutlet weak var view_banner: UIView!
    @IBOutlet weak var label_storeNames: UILabel!
    @IBOutlet weak var label_title: UILabel!
    @IBOutlet weak var label_joinCondition: UILabel!
    @IBOutlet weak var label_address: UILabel!
    @IBOutlet weak var label_duetime: UILabel!
    @IBOutlet weak var label_starttime: UILabel!
    @IBOutlet weak var label_endtime: UILabel!
    @IBOutlet weak var label_ageScope: UILabel!
    @IBOutlet weak var label_city: UILabel!
    @IBOutlet weak var label_money: UILabel!
    @IBOutlet weak var label_coin: UILabel!
    @IBOutlet weak var label_courseNum: UILabel!
    @IBOutlet weak var label_introducion: UILabel!
    @IBOutlet weak var btn_enroll: UIButton!
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var btn_addStudent: QMUIButton!
    @IBOutlet weak var cons_tableHei: NSLayoutConstraint!
   @IBOutlet weak var label_matchStore: UILabel!
   @IBOutlet weak var btn_moreMatchStore: UIButton!
            @IBOutlet weak var view_banner: UIView!
            @IBOutlet weak var label_storeNames: UILabel!
            @IBOutlet weak var label_title: UILabel!
            @IBOutlet weak var label_joinCondition: UILabel!
            @IBOutlet weak var label_address: UILabel!
            @IBOutlet weak var label_duetime: UILabel!
            @IBOutlet weak var label_starttime: UILabel!
            @IBOutlet weak var label_endtime: UILabel!
            @IBOutlet weak var label_ageScope: UILabel!
            @IBOutlet weak var label_city: UILabel!
            @IBOutlet weak var label_money: UILabel!
            @IBOutlet weak var label_coin: UILabel!
            @IBOutlet weak var label_courseNum: UILabel!
            @IBOutlet weak var label_introducion: UILabel!
            @IBOutlet weak var btn_enroll: UIButton!
            @IBOutlet weak var tableView: UITableView!
            @IBOutlet weak var btn_addStudent: QMUIButton!
            @IBOutlet weak var cons_tableHei: NSLayoutConstraint!
            @IBOutlet weak var label_matchStore: UILabel!
            @IBOutlet weak var btn_moreMatchStore: UIButton!
   @IBOutlet weak var view_money: UIView!
   @IBOutlet weak var view_coin: UIView!
   @IBOutlet weak var view_courseNum: UIView!
            @IBOutlet weak var view_money: UIView!
            @IBOutlet weak var view_coin: UIView!
            @IBOutlet weak var view_courseNum: UIView!
    private lazy var bannerView:CommonBannerView = {
        let v = CommonBannerView()
        return v
    }()
            private lazy var bannerView:CommonBannerView = {
                        let v = CommonBannerView()
                        return v
            }()
    var activityDetailModel:ActivityDetailModel!
    private var students = [ActivityDetailPartModel]()
            var activityDetailModel:ActivityDetailModel!
            private var students = [ActivityDetailPartModel]()
    required init(model:ActivityDetailModel) {
        super.init(nibName: nil, bundle: nil)
        self.activityDetailModel = model
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "活动详情"
        label_storeNames.text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",")
      btn_moreMatchStore.isHidden = (label_storeNames.text?.count ?? 0) < 50
        label_title.text = activityDetailModel.name
        label_joinCondition.text = activityDetailModel.registerCondition.strTitle + "参与"
        label_address.text = activityDetailModel.address
        label_duetime.text = activityDetailModel.registerEndTime
        label_starttime.text = activityDetailModel.startTime
        label_endtime.text = activityDetailModel.endTime
        label_ageScope.text = activityDetailModel.age + "岁"
        label_introducion.text = activityDetailModel.introduction
      label_city.isHidden = activityDetailModel.province.isEmpty || activityDetailModel.city.isEmpty
        label_city.text = activityDetailModel.province + "|" + activityDetailModel.city
        label_money.text = String(format: "%@/人", activityDetailModel.cashPrice.currency())
        label_coin.text = String(format: "%ld币/人", activityDetailModel.playPaiCoin)
        label_courseNum.text = String(format: "%ld课时/人", activityDetailModel.classPrice)
      view_money.isHidden = activityDetailModel.cashPrice == 0
      view_courseNum.isHidden = activityDetailModel.classPrice == 0
      view_coin.isHidden = activityDetailModel.playPaiCoin == 0
        students.append(contentsOf: activityDetailModel.participant)
        cons_tableHei.constant = Double(students.count) * 100
        tableView.reloadData()
      let imgs = activityDetailModel.imgs.components(separatedBy: ",")
      var items = [CommonBannerModel]()
      for (index,img) in imgs.enumerated(){
         items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl))
      }
      bannerView.setItems(items: items)
    }
    override func setUI() {
        btn_addStudent.imagePosition = .right
        btn_addStudent.spacingBetweenImageAndTitle = 4
        tableView.delegate = self
        tableView.dataSource = self
      tableView.separatorStyle = .none
        tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell")
        view_banner.addSubview(bannerView)
        bannerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.56)
      let moreBtnAttributeding = AttributedStringbuilder.build().add(string: "查看更多", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString
      btn_moreMatchStore.setAttributedTitle(moreBtnAttributeding, for: .normal)
    }
   @IBAction func matchStoreAction(_ sender: UIButton) {
      let text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",")
      AgreentView.show(type: .matchStore, content: text)
   }
    @IBAction func addStudentAction(_ sender: QMUIButton) {
      StudentChooseView.show(itemType: .activity, defaultStu: students,isAuth: activityDetailModel.isReal) { [weak self] studs in
            self?.students = studs as! [ActivityDetailPartModel]
            self?.cons_tableHei.constant = Double(self?.students.count ?? 0) * 100
            self?.tableView.reloadData()
        } needAddClouse: {[weak self] () in
            let vc = ActivityStudentListVC()
            self?.push(vc: vc)
        }
    }
    @IBAction func applyAction(_ sender: UIButton) {
        guard students.count != 0 else {
            alertError(msg: "请至少选择一位活动人员");return
        }
      if activityDetailModel.storeInfos.count > 1{
         let a = activityDetailModel.storeInfos.map({$0.name})
         StoresInfo_2_View.show(a) {[weak self] status in
            guard let weakSelf = self else { return }
            let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count)
            let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count
            let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count
            if status{
               let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false
               //零元购
               if price == 0 && coin == 0 && course == 0{
                  weakSelf.payment(type: .coin,paymentId: 0)
                  return
               }
               PaymentView.show(enumType: .activity, money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in
                  guard let weakSelf = self else { return }
                  if type == .courseNum{
                     PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in
                        weakSelf.payment(type: type,paymentId: id)
                     }
                  }else{
                     weakSelf.payment(type: type)
                  }
               }
            }else{
               weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: {
                  NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil)
               })
            required init(model:ActivityDetailModel) {
                        super.init(nibName: nil, bundle: nil)
                        self.activityDetailModel = model
            }
         }
      }else{
         StoresInfoView.show(activityDetailModel.storeInfos.first!) { [weak self] status in
            guard let weakSelf = self else { return }
            let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count)
            let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count
            let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count
            if status{
                  //零元购
               if price == 0 && coin == 0 && course == 0{
                  weakSelf.payment(type: .coin,paymentId: 0)
                  return
               }
               let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false
               PaymentView.show(enumType: .activity, money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in
                  guard let weakSelf = self else { return }
                  if type == .courseNum{
                     PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in
                        weakSelf.payment(type: type,paymentId: id)
                     }
                  }else{
                     weakSelf.payment(type: type)
                  }
               }
            }else{
               weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: {
                  NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil)
               })
            required init?(coder: NSCoder) {
                        fatalError("init(coder:) has not been implemented")
            }
         }
      }
    }
   private func payment(type:PayType,paymentId:Int? = nil){
      let ids = students.map({"\($0.id)"}).joined(separator: ";")
      Services.paymentCompetition(id: activityDetailModel.id, userIds: ids, payType: type,coursePaymentId: paymentId).subscribe(onNext: {[weak self] data in
         NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil)
         if let m = data.data{
            switch type {
               case .aliPay:
                  let req = YYAlipayRequest(orderString: m.orderString)
                  YYPaymentManager.shared.sendPaymentRequest(req) { result in
                     switch result {
                        case .success:
                           let vc = PaymentResultVC(result: .success, objType: .activityApply)
                           self?.push(vc: vc)
                        case .cancel:
                           alert(msg: "已取消")
                        case .failure(_):
                           let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .activityApply)
                           self?.push(vc: vc)
                     }
                  }
               case .wechat:break
               case .coin,.free:
                  let vc = PaymentResultVC(result: .success, objType: .activityApply)
                  self?.push(vc: vc)
               case .courseNum:
                  let vc = PaymentResultVC(result: .success, objType: .activityApply)
                  self?.push(vc: vc)
               default:break
            override func viewDidLoad() {
                        super.viewDidLoad()
                        title = "活动详情"
                        label_storeNames.text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",")
                        btn_moreMatchStore.isHidden = (label_storeNames.text?.count ?? 0) < 50
                        label_title.text = activityDetailModel.name
                        label_joinCondition.text = activityDetailModel.registerCondition.strTitle + "参与"
                        label_address.text = activityDetailModel.address
                        label_duetime.text = activityDetailModel.registerEndTime
                        label_starttime.text = activityDetailModel.startTime
                        label_endtime.text = activityDetailModel.endTime
                        label_ageScope.text = activityDetailModel.age + "岁"
                        label_introducion.text = activityDetailModel.introduction
                        label_city.isHidden = activityDetailModel.province.isEmpty || activityDetailModel.city.isEmpty
                        label_city.text = activityDetailModel.province + "|" + activityDetailModel.city
                        label_money.text = String(format: "%@/人", activityDetailModel.cashPrice.currency())
                        label_coin.text = String(format: "%ld币/人", activityDetailModel.playPaiCoin)
                        label_courseNum.text = String(format: "%ld课时/人", activityDetailModel.classPrice)
                        view_money.isHidden = activityDetailModel.cashPrice == 0
                        view_courseNum.isHidden = activityDetailModel.classPrice == 0
                        view_coin.isHidden = activityDetailModel.playPaiCoin == 0
                        students.append(contentsOf: activityDetailModel.participant)
                        cons_tableHei.constant = Double(students.count) * 100
                        tableView.reloadData()
                        let imgs = activityDetailModel.imgs.components(separatedBy: ",")
                        var items = [CommonBannerModel]()
                        for (index,img) in imgs.enumerated(){
                                    items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl))
                        }
                        bannerView.setItems(items: items)
            }
         }
      },onError: {[weak self] error in
         if let er = error as? NetworkRequest.NetRequestError{
            switch er {
               case .Other(let code,let string):
                  let vc = PaymentResultVC(result: .fail(string,code), objType: .yard,handleVC: nil)
                  self?.push(vc: vc)
               default:
                  let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .yard,handleVC: nil)
                  self?.push(vc: vc)
            override func setUI() {
                        btn_addStudent.imagePosition = .right
                        btn_addStudent.spacingBetweenImageAndTitle = 4
                        tableView.delegate = self
                        tableView.dataSource = self
                        tableView.separatorStyle = .none
                        tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell")
                        view_banner.addSubview(bannerView)
                        bannerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.56)
                        let moreBtnAttributeding = AttributedStringbuilder.build().add(string: "查看更多", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString
                        btn_moreMatchStore.setAttributedTitle(moreBtnAttributeding, for: .normal)
            }
         }
      }).disposed(by: disposeBag)
   }
            @IBAction func matchStoreAction(_ sender: UIButton) {
                        let text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",")
                        AgreentView.show(type: .matchStore, content: text)
            }
            @IBAction func addStudentAction(_ sender: QMUIButton) {
                        StudentChooseView.show(itemType: .activity, defaultStu: students,isAuth: activityDetailModel.isReal) { [weak self] studs in
                                    self?.students = studs as! [ActivityDetailPartModel]
                                    self?.cons_tableHei.constant = Double(self?.students.count ?? 0) * 100
                                    self?.tableView.reloadData()
                        } needAddClouse: {[weak self] () in
                                    let vc = ActivityStudentListVC()
                                    self?.push(vc: vc)
                        }
            }
            @IBAction func applyAction(_ sender: UIButton) {
                        guard students.count != 0 else {
                                    alertError(msg: "请至少选择一位活动人员");return
                        }
                        if activityDetailModel.storeInfos.count > 1{
                                    let a = activityDetailModel.storeInfos.map({$0.name})
                                    StoresInfo_2_View.show(a) {[weak self] status in
                                                guard let weakSelf = self else { return }
                                                let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count)
                                                let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count
                                                let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count
                                                if status{
                                                            let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false
                                                            //零元购
                                                            if price == 0 && coin == 0 && course == 0{
                                                                        weakSelf.payment(type: .coin,paymentId: 0)
                                                                        return
                                                            }
                                                            PaymentView.show(enumType: .activity, money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in
                                                                        guard let weakSelf = self else { return }
                                                                        if type == .courseNum{
                                                                                    PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in
                                                                                                weakSelf.payment(type: type,paymentId: id)
                                                                                    }
                                                                        }else{
                                                                                    weakSelf.payment(type: type)
                                                                        }
                                                            }
                                                }else{
                                                            weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: {
                                                                        NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil)
                                                            })
                                                }
                                    }
                        }else{
                                    StoresInfoView.show(activityDetailModel.storeInfos.first!) { [weak self] status in
                                                guard let weakSelf = self else { return }
                                                let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count)
                                                let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count
                                                let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count
                                                if status{
                                                            //零元购
                                                            if price == 0 && coin == 0 && course == 0{
                                                                        weakSelf.payment(type: .coin,paymentId: 0)
                                                                        return
                                                            }
                                                            let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false
                                                            PaymentView.show(enumType: .activity, money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in
                                                                        guard let weakSelf = self else { return }
                                                                        if type == .courseNum{
                                                                                    PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in
                                                                                                weakSelf.payment(type: type,paymentId: id)
                                                                                    }
                                                                        }else{
                                                                                    weakSelf.payment(type: type)
                                                                        }
                                                            }
                                                }else{
                                                            weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: {
                                                                        NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil)
                                                            })
                                                }
                                    }
                        }
            }
            private func payment(type:PayType,paymentId:Int? = nil){
                        let ids = students.map({"\($0.id)"}).joined(separator: ";")
                        Services.paymentCompetition(id: activityDetailModel.id, userIds: ids, payType: type,coursePaymentId: paymentId).subscribe(onNext: {[weak self] data in
                                    NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil)
                                    if let m = data.data{
                                                switch type {
                                                            case .aliPay:
                                                                        let req = YYAlipayRequest(orderString: m.orderString)
                                                                        YYPaymentManager.shared.sendPaymentRequest(req) { result in
                                                                                    switch result {
                                                                                                case .success:
                                                                                                            let vc = PaymentResultVC(result: .success, objType: .activityApply)
                                                                                                            self?.push(vc: vc)
                                                                                                case .cancel:
                                                                                                            alert(msg: "已取消")
                                                                                                case .failure(_):
                                                                                                            let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .activityApply)
                                                                                                            self?.push(vc: vc)
                                                                                    }
                                                                        }
                                                            case .wechat:break
                                                            case .coin,.free:
                                                                        let vc = PaymentResultVC(result: .success, objType: .activityApply)
                                                                        self?.push(vc: vc)
                                                            case .courseNum:
                                                                        let vc = PaymentResultVC(result: .success, objType: .activityApply)
                                                                        self?.push(vc: vc)
                                                            default:break
                                                }
                                    }
                        },onError: {[weak self] error in
                                    if let er = error as? NetworkRequest.NetRequestError{
                                                switch er {
                                                            case .Other(let code,let string):
                                                                        let vc = PaymentResultVC(result: .fail(string,code), objType: .yard,handleVC: nil)
                                                                        self?.push(vc: vc)
                                                            default:
                                                                        let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .yard,handleVC: nil)
                                                                        self?.push(vc: vc)
                                                }
                                    }
                        }).disposed(by: disposeBag)
            }
}
extension ActivityDetailApplyVC:UITableViewDelegate{
}
extension ActivityDetailApplyVC:UITableViewDataSource{
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let student = students[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_2_TCell") as! StudentInfo_2_TCell
        cell.indexPath = indexPath
        cell.activityDetailPartModel = student
        cell.btn_edit.isHidden = true
        cell.img_radio.isHidden = true
        cell.delClouse = {[weak self] index in
            tableView.beginUpdates()
            self?.students.remove(at: index.row)
            tableView.deleteItemsAtIndexPaths([index], animationStyle: .automatic)
            tableView.endUpdates()
            tableView.reloadData()
            self?.cons_tableHei.constant = Double(self?.students.count ?? 0) * 100
        }
            func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                        let student = students[indexPath.row]
                        let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_2_TCell") as! StudentInfo_2_TCell
                        cell.indexPath = indexPath
                        cell.activityDetailPartModel = student
                        cell.btn_edit.isHidden = true
                        cell.img_radio.isHidden = true
                        cell.delClouse = {[weak self] index in
                                    tableView.beginUpdates()
                                    self?.students.remove(at: index.row)
                                    tableView.deleteItemsAtIndexPaths([index], animationStyle: .automatic)
                                    tableView.endUpdates()
                                    tableView.reloadData()
                                    self?.cons_tableHei.constant = Double(self?.students.count ?? 0) * 100
                        }
        return cell
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return students.count
    }
                        return cell
            }
            func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                        return students.count
            }
}