//
|
// SearchContentVC.swift
|
// XQMuse
|
//
|
// Created by 无故事王国 on 2024/9/10.
|
//
|
|
import UIKit
|
import JQTools
|
import RxDataSources
|
import RxRelay
|
import RxSwift
|
|
class SearchContentViewModel:RefreshInnerModel<MeditationModel>{
|
|
var search = BehaviorRelay<String>(value: "")
|
|
override func api() -> (Observable<BaseResponse<BaseResponseList<MeditationModel>>>)? {
|
return Services.search(text: search.value, page: page)
|
}
|
}
|
|
class SearchContentVC: BaseVC {
|
|
@IBOutlet weak var tf_search: UITextField!
|
@IBOutlet weak var collectionView: UICollectionView!
|
private var museViewModel:SearchContentViewModel?
|
private var courseViewModel:CourseVCOfficalViewModel?
|
private var serchType:SearchVC.SearchType!
|
|
init(content:String,type:SearchVC.SearchType) {
|
super.init(nibName: nil, bundle: nil)
|
self.serchType = type
|
|
if type == .course{
|
courseViewModel = CourseVCOfficalViewModel()
|
courseViewModel?.search.accept(content)
|
}
|
|
if type == .muse{
|
museViewModel = SearchContentViewModel()
|
museViewModel?.search.accept(content)
|
}
|
}
|
|
required init?(coder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
title = "心泉·疗愈"
|
|
switch serchType{
|
case .course:tf_search.text = courseViewModel?.search.value ?? ""
|
case .muse:tf_search.text = museViewModel?.search.value ?? ""
|
default:break
|
}
|
}
|
|
override func setUI() {
|
view.backgroundColor = UIColor(hexString: "f6f6f6")
|
tf_search.delegate = self
|
tf_search.returnKeyType = .search
|
|
collectionView.delegate = self
|
collectionView.dataSource = self
|
collectionView.backgroundColor = .clear
|
collectionView.contentInset = UIEdgeInsets(top: 0, left: 21, bottom: 0, right: 21)
|
collectionView.register(UINib(nibName: "HomeRelaxBanner_2_CCell", bundle: nil), forCellWithReuseIdentifier: "_HomeRelaxBanner_2_CCell")
|
|
collectionView.emptyDataSetView {[unowned self] v in
|
|
guard v.viewWithTag(1301) == nil else {return}
|
|
let emptyImageView = UIImageView(image: UIImage(named: "bg_empty"))
|
emptyImageView.tag = 1301
|
|
v.addSubview(emptyImageView)
|
emptyImageView.snp.makeConstraints { make in
|
make.top.equalTo(56.5)
|
make.centerX.equalToSuperview().offset(-self.collectionView.contentInset.left)
|
}
|
|
let label = UILabel(text: "暂未找到相关内容哦~")
|
label.font = .systemFont(ofSize: 12.74, weight: .medium)
|
label.textColor = UIColor(hexString: "#5B5B5B")
|
v.addSubview(label)
|
label.snp.makeConstraints { make in
|
make.top.equalTo(emptyImageView.snp.bottom).offset(26.5)
|
make.centerX.equalTo(emptyImageView)
|
}
|
}
|
|
switch serchType{
|
case .course:
|
self.courseViewModel?.configure(collectionView)
|
self.courseViewModel?.beginRefresh()
|
case .muse:
|
self.museViewModel?.configure(collectionView)
|
self.museViewModel?.beginRefresh()
|
default:break
|
}
|
}
|
|
|
@IBAction func searchAction(_ sender: UIButton) {
|
tf_search.resignFirstResponder()
|
|
guard !(tf_search.text!.isEmpty) else {
|
alert(msg: "请输入搜索内容");return
|
}
|
|
switch serchType{
|
case .course:
|
self.courseViewModel?.search.accept(tf_search.text!)
|
self.courseViewModel?.beginRefresh()
|
case .muse:
|
self.museViewModel?.search.accept(tf_search.text!)
|
self.museViewModel?.beginRefresh()
|
default:break
|
}
|
}
|
}
|
|
|
extension SearchContentVC:UICollectionViewDelegate & UICollectionViewDataSource{
|
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
|
let isVip = UserViewModel.getAvatarInfo().isVip
|
|
switch serchType{
|
case .course:
|
let m = courseViewModel!.dataSource.value!.list[indexPath.row]
|
if m.chargeType == .free || (m.chargeType == .vipFree && isVip == .yes) || (m.chargeType == .payment && m.isBuy == .yes){
|
|
if m.courseType == .online{
|
let vc = CourseDetialVC(courseId: m.id)
|
JQ_currentViewController().jq_push(vc: vc)
|
}else{
|
let vc = CourseDetialOfflineVC(courseId: m.id)
|
JQ_currentViewController().jq_push(vc: vc)
|
}
|
}else{
|
if m.chargeType == .vipFree{
|
let vc = VIPCenterVC()
|
JQ_currentViewController().jq_push(vc: vc)
|
}else{
|
let vc = PaymentOrderVC(courseItemModel: m,type: .course,giftToOther: true)
|
JQ_currentViewController().jq_push(vc:vc)
|
}
|
}
|
|
case .muse:
|
let m = museViewModel!.dataSource.value!.list[indexPath.row]
|
if m.chargeType == .free || (m.chargeType == .vipFree && isVip == .yes) || (m.chargeType == .payment && m.isBuy == .yes){
|
let detailVC = HomeItemDetailVC(id: m.id)
|
JQ_currentViewController().jq_push(vc: detailVC)
|
}else{
|
if m.chargeType == .vipFree{
|
let vc = VIPCenterVC()
|
JQ_currentViewController().jq_push(vc: vc)
|
}else{
|
let vc = PaymentOrderVC(museItemModel: m,type: .muse)
|
JQ_currentViewController().jq_push(vc:vc)
|
}
|
}
|
default:break
|
}
|
|
}
|
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_CCell", for: indexPath) as! HomeRelaxBanner_2_CCell
|
|
switch serchType{
|
case .course:
|
let m = courseViewModel!.dataSource.value!.list[indexPath.row]
|
cell.setCourseModel(m)
|
case .muse:
|
let m = museViewModel!.dataSource.value!.list[indexPath.row]
|
cell.setMeditationModel(m)
|
default:break
|
}
|
|
return cell
|
}
|
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
switch serchType{
|
case .course:
|
return courseViewModel!.dataSource.value?.list.count ?? 0
|
case .muse:
|
return museViewModel!.dataSource.value?.list.count ?? 0
|
default:return 0
|
}
|
}
|
}
|
|
extension SearchContentVC:UICollectionViewDelegateFlowLayout{
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
let w = (JQ_ScreenW - 21 * 2 - 14) / 2
|
|
return CGSize(width: w, height: w * 1.314)
|
}
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
|
return 14
|
}
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
|
return 14
|
}
|
}
|
|
extension SearchContentVC:UITextFieldDelegate{
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
|
textField.resignFirstResponder()
|
|
guard !(textField.text!.isEmpty) else {
|
alert(msg: "请输入搜索内容")
|
return true
|
}
|
switch serchType{
|
case .course:
|
self.courseViewModel?.search.accept(tf_search.text!)
|
self.courseViewModel?.beginRefresh()
|
case .muse:
|
self.museViewModel?.search.accept(tf_search.text!)
|
self.museViewModel?.beginRefresh()
|
default:break
|
}
|
return true
|
}
|
}
|