无故事王国
2023-10-10 a1ac0f1634ff0bd8f04259fc4cf7ebabd8c8c82d
WanPai/Root/Home/VC/HomeVC.swift
@@ -22,7 +22,7 @@
   
    private var layout:WaterFallFlowLayout!
    @IBOutlet weak var label_store: UILabel!
    private var items = Array<HomeStoreConfigModel>()
    private var items = Array<Any>()
    private var storeModel:HomeStoreModel?
   private var storeId:Int?
   private var currentLocal:CLLocation?
@@ -51,6 +51,7 @@
         if let models = data.data{
            let imgs = models.compactMap({$0.img})
            self?.view_banner.setImages(images: imgs, type: .URL) { index in
               //todo
            }
         }
@@ -133,32 +134,49 @@
         showHUD()
         let w = (weakSelf.view.frame.width - 78.0) / 2.0
         for (_,model) in weakSelf.items.enumerated(){
            SDWebImageDownloader.shared.downloadImage(with: URL(string: model.backgroundImage), options: .useNSURLCache) { _, _,_ in
            if let m = model as? HomeStoreConfigModel{
               SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in
            } completed: {  image, data, error, status in
               if let img = image{
               } completed: {[weak self]  image, data, error, status in
                  if let img = image{
                     m.cellHeight = w / (img.size.width / img.size.height)
                  }else{
                     m.cellHeight =  w / (m.type.defaultImg.size.width / m.type.defaultImg.size.height)
                  }
                  i += 1
                  model.cellHeight = w / (img.size.width / img.size.height)
               }else{
                  i += 1
                  model.cellHeight =  w / (model.type.defaultImg.size.width / model.type.defaultImg.size.height)
                  if i == weakSelf.items.count{
                     self?.updateUI()
                  }
               }
            }
               print("Height:\(model.cellHeight)===\(model.type.rawValue)\n")
               if i == weakSelf.items.count{
                     //重置Layout,不然不更新
                  self!.layout = WaterFallFlowLayout()
                  self!.layout.itemCount = self!.items.count
                  self!.layout.delegate = self
                  self!.layout.cols = 2
                  self!.layout.sectionInset = UIEdgeInsets(top: 14, left: 34, bottom: 14, right: 34)
                  self!.collectionView.collectionViewLayout = self!.layout
                  self!.collectionView.reloadData()
                  hiddenHUD()
            if let m = model as? HomeStoreTopBannerModel{
               SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in
               } completed: {[weak self]  image, data, error, status in
                  if let img = image{
                     m.cellHeight = w / (img.size.width / img.size.height)
                     i += 1
                     if i == weakSelf.items.count{
                        self?.updateUI()
                     }
                  }
               }
            }
         }
      }
   }
   private func updateUI(){
         //重置Layout,不然不更新
      layout = WaterFallFlowLayout()
      layout.itemCount = items.count
      layout.delegate = self
      layout.cols = 2
      layout.sectionInset = UIEdgeInsets(top: 14, left: 34, bottom: 14, right: 34)
      collectionView.collectionViewLayout = self.layout
      collectionView.reloadData()
      hiddenHUD()
   }
   private func startLocation(){
@@ -195,6 +213,7 @@
         guard let weakSelf = self else { return }
         weakSelf.storeId = storeId
         weakSelf.label_store.text = storeName
         weakSelf.storeModel = HomeStoreModel(isVip: 0, storeId: storeId, name: storeName, lon: 0, lat: 0)
         weakSelf.items.removeAll()
         weakSelf.getStoreItemList()
        }
@@ -207,46 +226,57 @@
extension HomeVC:UICollectionViewDelegate{
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let item = items[indexPath.row]
        switch item.type{
            case .course:
                let vc = CourseListVC()
                push(vc: vc)
            case .booking:
                let vc = YardListVC()
                push(vc: vc)
            case .activity:
                let vc = ActivityListVC()
                push(vc: vc)
            case .video:
                let vc = CourseOnlineListVC(position: 2)
                vc.title = "看视频得奖励"
                push(vc: vc)
            case .coin:
                let vc = CourseOnlineListVC(position: 1)
                vc.title = "线上课得积分"
                push(vc: vc)
            case .ticket:
                let vc = WelfareWeeklyListVC()
                push(vc: vc)
            case .wisdomCourt:
            guard storeId != 0 else {alert(msg: "请先选择门店");return}
                let vc = GamesVC()
                push(vc: vc)
            case .welfare:
                if storeId != 0{
                    Services.queryStoreFreeBenefit(id: storeId!).subscribe(onNext: {[weak self] data in
                        if let m = data.data{
                            let vc = WelfareFreeVC(m)
                            self?.push(vc: vc)
                        }
                    }).disposed(by: disposeBag)
                }else{
                    alertError(msg: "当前门店获取失败")
                }
            case .none:break
        }
      var simpleModel:NormalSimpleModel?
      if storeModel != nil{
         simpleModel = NormalSimpleModel(id: storeModel!.storeId, name: storeModel!.name)
      }
        let item = items[indexPath.row]
      if let m = item as? HomeStoreConfigModel{
         switch m.type{
            case .course:
               let vc = CourseListVC(selectStore: simpleModel)
               push(vc: vc)
            case .booking:
               let vc = YardListVC(selectStore: simpleModel)
               push(vc: vc)
            case .activity:
               let vc = ActivityListVC()
               push(vc: vc)
            case .video:
               let vc = CourseOnlineListVC(position: 2)
               vc.title = "看视频得奖励"
               push(vc: vc)
            case .coin:
               let vc = CourseOnlineListVC(position: 1)
               vc.title = "线上课得积分"
               push(vc: vc)
            case .ticket:
               let vc = WelfareWeeklyListVC()
               push(vc: vc)
            case .wisdomCourt:
               guard storeId != 0 else {alert(msg: "请先选择门店");return}
               let vc = GamesVC()
               push(vc: vc)
            case .welfare:
               if storeId != 0{
                  Services.queryStoreFreeBenefit(id: storeId!).subscribe(onNext: {[weak self] data in
                     if let m = data.data{
                        let vc = WelfareFreeVC(m)
                        self?.push(vc: vc)
                     }
                  }).disposed(by: disposeBag)
               }else{
                  alertError(msg: "当前门店获取失败")
               }
            case .none:break
         }
      }
      if let m = item as? HomeStoreTopBannerModel{
         jumpPage(name: m.name, page: m.page, type: m.type,id: m.turnId)
      }
    }
    
}
@@ -255,7 +285,14 @@
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeCCell", for: indexPath) as! HomeCCell
        let item = items[indexPath.row]
      cell.img.sd_setImage(with: URL(string: item.backgroundImage), placeholderImage: item.type.defaultImg, options: .lowPriority)
      if let m = item as? HomeStoreConfigModel{
         cell.img.sd_setImage(with: URL(string: m.backgroundImage), placeholderImage: m.type.defaultImg, options: .lowPriority)
      }
      if let m = item as? HomeStoreTopBannerModel{
         cell.img.sd_setImage(with: URL(string: m.backgroundImage), placeholderImage: nil, options: .lowPriority)
      }
      cell.img.cornerRadius = 10
        return cell
    }
@@ -269,8 +306,16 @@
extension HomeVC: WaterFallLayoutDelegate{
    func waterFlowLayout(_ waterFlowLayout: WaterFallFlowLayout, itemHeight indexPath: IndexPath) -> CGFloat {
      let item = items[indexPath.row]
      print("===\(item.cellHeight)")
      return  item.cellHeight
      if let m = item as? HomeStoreConfigModel{
         return  m.cellHeight
      }
      if let m = item as? HomeStoreTopBannerModel{
         return  m.cellHeight
      }
      return 0
    }
}