//
|
// WorldCupListVC.swift
|
// WanPai
|
//
|
// Created by 无故事王国 on 2024/2/28.
|
//
|
|
import UIKit
|
import JQTools
|
import QMUIKit
|
import RxRelay
|
import RxSwift
|
import SDWebImage
|
|
class WorldCupListViewModel:RefreshModel<WorldCupListModel>{
|
|
var search = BehaviorRelay<String?>(value:nil)
|
var gender = BehaviorRelay<NormalSimpleModel?>(value:nil)
|
var sort = BehaviorRelay<Int?>(value:nil)
|
var storeId = BehaviorRelay<NormalSimpleModel?>(value: nil)
|
|
override func api() -> (Observable<BaseResponse<[WorldCupListModel]>>)? {
|
let deserModel = HomeStoreModel.deserialize(from: UserDefaults.standard.object(forKey: "CurrentStore") as? String)
|
return Services.worldCupList(id: deserModel!.storeId, content: search.value, gender:gender.value?.id, sort: sort.value, storeId: storeId.value?.id)
|
}
|
}
|
|
class WorldCupListVC: BaseVC {
|
|
private var tableview:BaseTableView!
|
private var pointView:CourseSubTypeView?
|
private var conditionView:CourseSubTypeView?
|
private var hotView:CourseSubTypeView?
|
|
private var pointData = [NormalSimpleModel]()
|
|
private var viewModel = WorldCupListViewModel()
|
|
private var headerView:CommonBannerView = {
|
var banner = CommonBannerView()
|
banner.backgroundColor = .white
|
banner.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.564)
|
return banner
|
|
}()
|
|
private var footerView:CommonBannerView = {
|
var banner = CommonBannerView()
|
banner.backgroundColor = .white
|
banner.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.564)
|
return banner
|
|
}()
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
title = "社区世界杯"
|
viewModel.beginRefresh()
|
|
Services.getWorldCupStore().subscribe(onNext: { [weak self]data in
|
self?.pointData.append(NormalSimpleModel(id: 0, name: "全部"))
|
self?.pointData.append(contentsOf: data.data ?? [])
|
}).disposed(by: disposeBag)
|
}
|
|
override func setUI() {
|
let bgImg = UIImageView(image: UIImage(named: "bg_long"))
|
bgImg.contentMode = .scaleAspectFill
|
view.addSubview(bgImg)
|
bgImg.snp.makeConstraints { make in
|
make.top.equalTo(200)
|
make.left.right.bottom.equalToSuperview()
|
}
|
|
tableview = BaseTableView(frame: .zero, style: .plain)
|
tableview.tableHeaderView = headerView
|
tableview.tableFooterView = footerView
|
view.addSubview(tableview)
|
tableview.delegate = self
|
tableview.dataSource = self
|
if #available(iOS 15.0, *) {
|
tableview.sectionHeaderTopPadding = 0
|
}
|
tableview.backgroundColor = .clear
|
tableview.register(UINib(nibName: "WorldCupTCell", bundle: nil), forCellReuseIdentifier: "_WorldCupTCell")
|
tableview.register(UINib(nibName: "WorldCupHeadView", bundle: nil), forHeaderFooterViewReuseIdentifier: "_headerView")
|
tableview.snp.makeConstraints { make in
|
make.edges.equalToSuperview()
|
}
|
|
viewModel.configure(tableview,needMore: false)
|
getBanner()
|
}
|
|
private func getBanner(){
|
Services.bannerList(position: .worldCup_top).subscribe(onNext: {[weak self]data in
|
if let models = data.data,models.count > 0{
|
let imgs = models.map({$0.img})
|
var items = [CommonBannerModel]()
|
for (index,img) in imgs.enumerated(){
|
items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl))
|
}
|
self?.headerView.setItems(items: items) { m in
|
let model = models[m.index]
|
jumpPage(model: model.model, page: model.page, type: model.type, id: model.turnId)
|
}
|
self?.tableview.reloadData()
|
}
|
}).disposed(by: disposeBag)
|
|
Services.bannerList(position: .worldCup_bottom).subscribe(onNext: {[weak self]data in
|
if let models = data.data,models.count > 0{
|
let imgs = models.map({$0.img})
|
var items = [CommonBannerModel]()
|
for (index,img) in imgs.enumerated(){
|
items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl))
|
}
|
|
|
if let img = imgs.first{
|
guard SDImageCache.shared.diskImageDataExists(withKey: img) else {
|
SDWebImageDownloader.shared.downloadImage(with: URL(string: img), options: .useNSURLCache) { _, _,_ in
|
} completed: { image, data, error, status in
|
|
guard !img.isEmpty else {
|
return
|
}
|
|
if let img = image{
|
let footH = JQ_ScreenW / (img.size.width / img.size.height)
|
self?.footerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: footH)
|
self?.footerView.setItems(items: items) { m in
|
let model = models[m.index]
|
jumpPage(model: model.model, page: model.page, type: model.type, id: model.turnId)
|
}
|
self?.tableview.reloadData()
|
}
|
}
|
return
|
}
|
if let data = SDImageCache.shared.diskCache.data(forKey: img),let img = UIImage(data: data){
|
let footH = JQ_ScreenW / (img.size.width / img.size.height)
|
self?.footerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: footH)
|
self?.footerView.setItems(items: items) { m in
|
let model = models[m.index]
|
jumpPage(model: model.model, page: model.page, type: model.type, id: model.turnId)
|
}
|
self?.tableview.reloadData()
|
}
|
}
|
|
|
}
|
}).disposed(by: disposeBag)
|
}
|
}
|
|
|
extension WorldCupListVC:UITableViewDelegate & UITableViewDataSource{
|
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
let model = viewModel.dataSource.value[indexPath.row]
|
let vc = WorldCupContentApplyVC(id: model.id)
|
push(vc: vc)
|
}
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return viewModel.dataSource.value.count
|
}
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let model = viewModel.dataSource.value[indexPath.row]
|
let cell = tableView.dequeueReusableCell(withIdentifier: "_WorldCupTCell") as! WorldCupTCell
|
cell.backgroundColor = .clear
|
cell.setWorldCupListModel(model)
|
cell.label_state.text = ""
|
return cell
|
}
|
|
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
|
let headView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "_headerView") as! WorldCupHeadView
|
headView.tableView = tableView
|
headView.delegate = self
|
return headView
|
}
|
|
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
|
return 105
|
}
|
}
|
|
extension WorldCupListVC:WorldCupHeadDelegate{
|
func search(text: String) {
|
viewModel.search.accept(text)
|
viewModel.beginRefresh()
|
}
|
|
func atPoint(_ btn: QMUIButton) {
|
hotView?.removeFromSuperview()
|
conditionView?.removeFromSuperview()
|
pointView = CourseSubTypeView.show(inView: self.view, afterView: btn, items: pointData,selectModel: viewModel.storeId.value) {[weak self] model in
|
if model.name == "全部"{
|
btn.setTitle("所在赛点", for: .normal)
|
self?.viewModel.storeId.accept(nil)
|
}else{
|
btn.setTitle(model.name, for: .normal)
|
self?.viewModel.storeId.accept(model)
|
}
|
self?.viewModel.beginRefresh()
|
} closeClouse: {
|
btn.isSelected = false
|
self.pointView?.removeFromSuperview()
|
}
|
}
|
|
func atCondition(_ btn: QMUIButton) {
|
pointView?.removeFromSuperview()
|
hotView?.removeFromSuperview()
|
var items = [NormalSimpleModel]()
|
items.append(NormalSimpleModel(id: 0, name: "全部"))
|
items.append(NormalSimpleModel(id: 1, name: "男"))
|
items.append(NormalSimpleModel(id: 2, name: "女"))
|
conditionView = CourseSubTypeView.show(inView: self.view, afterView: btn, items: items,selectModel: viewModel.gender.value) {[weak self] model in
|
btn.setTitle(model.name, for: .normal)
|
self?.viewModel.gender.accept(model)
|
self?.viewModel.beginRefresh()
|
} closeClouse: {
|
btn.isSelected = false
|
self.conditionView?.removeFromSuperview()
|
}
|
}
|
|
func atHot(_ btn: QMUIButton) {
|
pointView?.removeFromSuperview()
|
conditionView?.removeFromSuperview()
|
btn.isSelected = !btn.isSelected
|
let sortType = btn.isSelected ? SortType.asc:SortType.desc
|
btn.setImage(sortType.img, for: .normal)
|
viewModel.sort.accept(btn.isSelected ? 1:2)
|
viewModel.beginRefresh()
|
}
|
}
|