fix
无故事王国
2024-06-13 7c7bb620c2670e316617273ffabe9f690f989ad0
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
@@ -73,6 +73,7 @@
            //所有回答的
            var answerItems = Dictionary<Int,Any>() //{page:0,data:String,currectAt:0}
            var answerCount = BehaviorRelay<Int>(value: 1)
}
class HomeListenFightVC: BaseVC {
@@ -160,21 +161,23 @@
                        btn_forward.addTarget(self, action: #selector(beforeAction), for: .touchUpInside)
                        btn_next.addTarget(self, action: #selector(nextAction), for: .touchUpInside)
                        setPages()
                        pageVC.reloadData()
                        if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{
                                    btn_forward.isHidden = true
                                    label_pageNum.isHidden = true
                                    if viewModel.listenType.value == .game1{
                                                showGameLevel()
                                    }
                        }else if viewModel.listenType.value == .story1 || viewModel.listenType.value == .story2{
                                    let count = (data as! Listen1Model).storyList.count
                                    viewModel.maxPage.accept(count)
                                    label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(viewModel.maxPage.value)"
                        }else{
                                    pageVC.reloadData()
                        }
//                        if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{
//                                    btn_forward.isHidden = true
//                                    label_pageNum.isHidden = true
//
//                                    if viewModel.listenType.value == .game1{
//                                                showGameLevel()
//                                    }
//                        }else if viewModel.listenType.value == .story1 || viewModel.listenType.value == .story2{
//                                    let count = (data as! Listen1Model).storyList.count
//                                    viewModel.maxPage.accept(count)
//                                    label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(viewModel.maxPage.value)"
//                        }else{
//                                    pageVC.reloadData()
//                        }
                        timer = Timer(fire: .distantPast, interval: 1.0, repeats: true, block: {[weak self] _ in
                                    self?.viewModel.times += 1
@@ -257,23 +260,21 @@
                        NotificationCenter.default.rx.notification(NextLession_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in
                                    guard let weakSelf = self else { return }
                                    let nextPage = weakSelf.viewModel.currentPage.value + 1
                                    var asComplete:Bool = false
                                    switch weakSelf.viewModel.listenType.value {
                                                case .lesson1,.lesson2:asComplete = nextPage >= (weakSelf.data as! ListenNewModel).subjectList.count
                                    if weakSelf.viewModel.listenType.value == .story2{
                                                weakSelf.btn_next.isHidden = (nextPage + 1) == weakSelf.viewModel.maxPage.value
                                                if weakSelf.btn_next.isHidden{
                                                            weakSelf.btn_exit.setTitle("完成", for: .normal)
                                                }
                                                default:break
                                    }
                                    //完成
                                    if nextPage >= weakSelf.viewModel.maxPage.value{
                                    if asComplete{
                                                switch weakSelf.viewModel.listenType.value {
                                                            case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:
                                                                        weakSelf.studyComplete()
                                                            case .game1,.game2:
                                                                        if let dict = noti.object as? Dictionary<String,Any>{
                                                                                    weakSelf.gamesComplete(gameId: dict["gameId"] as! Int,integral: dict["gameIntegral"] as! Int)
                                                                        }
                                                            case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:
                                                                        weakSelf.studyComplete()
                                                            case .story1,.story2:
                                                                        if let dict = noti.object as? Dictionary<String,Any>{
                                                                                    weakSelf.storyComplete(storyId: dict["storyId"] as! Int, integral: dict["storyIntegral"] as! Int)
@@ -282,16 +283,65 @@
                                                return
                                    }
                                    self?.listenFightLine = .next
                                    self?.pageVC.scroll(toPage: nextPage, animation: true)
                                    self?.viewModel.currentPage.accept(nextPage)
                                    //以下无效代码
//                                    if weakSelf.viewModel.listenType.value == .story2{
//                                                weakSelf.btn_next.isHidden = (nextPage + 1) == weakSelf.viewModel.maxPage.value
//                                                if weakSelf.btn_next.isHidden{
//                                                            weakSelf.btn_exit.setTitle("完成", for: .normal)
//                                                }
//                                    }
//
//                                    //完成
//                                    if nextPage >= weakSelf.viewModel.maxPage.value{
//                                                switch weakSelf.viewModel.listenType.value {
//                                                            case .game1,.game2:
//                                                                        if let dict = noti.object as? Dictionary<String,Any>{
//                                                                                    weakSelf.gamesComplete(gameId: dict["gameId"] as! Int,integral: dict["gameIntegral"] as! Int)
//                                                                        }
//                                                            case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:
//                                                                        weakSelf.studyComplete()
//                                                            case .story1,.story2:
//                                                                        if let dict = noti.object as? Dictionary<String,Any>{
//                                                                                    weakSelf.storyComplete(storyId: dict["storyId"] as! Int, integral: dict["storyIntegral"] as! Int)
//                                                                        }
//                                                }
//                                                return
//                                    }
                                    weakSelf.listenFightLine = .next
                                    weakSelf.pageVC.scroll(toPage: nextPage, animation: true)
                                    weakSelf.viewModel.currentPage.accept(nextPage)
                        }).disposed(by: disposeBag)
                        viewModel.currentPage.subscribe(onNext: {[weak self]currentPage in
                                    guard let weakSelf = self else { return }
                                    self?.btn_forward.isHidden = currentPage <= 0
                                    self?.label_pageNum.text = "已完成:\(weakSelf.viewModel.currentPage.value + 1)/\(weakSelf.viewModel.maxPage.value)"
                                    self?.setPages()
                        }).disposed(by: disposeBag)
                        viewModel.answerCount.subscribe(onNext: {[weak self] count in
                                    self?.setPages()
                        }).disposed(by: disposeBag)
            }
            private func setPages(){
                        switch viewModel.listenType.value{
                                    case .lesson1,.lesson2,.lesson3:
                                                label_pageNum.text = "已完成:\(viewModel.answerCount.value)/\((data as! ListenNewModel).subjectList.flatMap({$0}).count)"
                                    case .game1,.game2:
                                                btn_forward.isHidden = true
                                                label_pageNum.isHidden = true
                                                if viewModel.listenType.value == .game1{
                                                            showGameLevel()
                                                }
                                    case .story1,.story2:
                                                let count = (data as! Listen1Model).storyList.count
                                                viewModel.maxPage.accept(count)
                                                label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(0)"
                                    default:break
                        }
            }
@@ -299,36 +349,38 @@
            /// - Parameter ignorePush: 是否忽略跳转(未完成答题 :true)
            private func studyComplete(){
                        var toalIntegral:Int = 0
                        var ids = [Int]()
                        for v in viewModel.answerItems.values{
                                    if let v =  v as? Listen1Model{
                                                toalIntegral += v.data?.integral ?? 0
                                                ids.append(v.data?.studyId ?? 0)
                                    }
                        var ids:String = ""
                        switch viewModel.listenType.value {
                                    case .lesson1,.lesson2:
                                                let data = (data as! ListenNewModel).data
                                                ids = data?.id ?? ""
                                                toalIntegral = data?.integral ?? 0
                                    default:break
                        }
                        //有答题过程
                                    //完成进度
                                    var isComplete = false
                                    switch viewModel.listenType.value {
                                                case .lesson1:isComplete = studyScheduleModel?.listen == 100
                                                case .lesson2:isComplete = studyScheduleModel?.look == 100
                                                case .lesson3:isComplete = studyScheduleModel?.induction == 100
                                                case .lesson4:isComplete = studyScheduleModel?.answer == 100
                                                case .lesson5:isComplete = studyScheduleModel?.pair == 100
                                                default:isComplete = false
                                    }
                        //完成进度
                        var isComplete = false
                        switch viewModel.listenType.value {
                                    case .lesson1:isComplete = studyScheduleModel?.listen == 100
                                    case .lesson2:isComplete = studyScheduleModel?.look == 100
                                    case .lesson3:isComplete = studyScheduleModel?.induction == 100
                                    case .lesson4:isComplete = studyScheduleModel?.answer == 100
                                    case .lesson5:isComplete = studyScheduleModel?.pair == 100
                                    default:isComplete = false
                        }
                                    Services.completeLearing(type: viewModel.listenType.value.rawValue, studyTime: viewModel.times, studyIds: ids, isComplete: isComplete).subscribe(onNext: {data in
                                                NotificationCenter.default.post(name: Refresh_ListenSchedule_Noti, object: nil)
                                    }).disposed(by: disposeBag)
                        Services.completeLearing(type: viewModel.listenType.value.rawValue, studyTime: viewModel.times, studyIds: ids, isComplete: isComplete).subscribe(onNext: {data in
                                    NotificationCenter.default.post(name: Refresh_ListenSchedule_Noti, object: nil)
                        }).disposed(by: disposeBag)
                        timer.invalidate()
                                    let vc = HomeStudyCompleteVC(correctNum: viewModel.correctNum, errorNum: viewModel.errorNum, totalCoin: toalIntegral, listenType: viewModel.listenType.value)
                                    vc.title = viewModel.listenType.value.rawTitle
                                    push(vc: vc)
                        let vc = HomeStudyCompleteVC(correctNum: viewModel.correctNum, errorNum: viewModel.errorNum, totalCoin: toalIntegral, listenType: viewModel.listenType.value)
                        vc.title = viewModel.listenType.value.rawTitle
                        push(vc: vc)
            }
            //游戏类完成
@@ -433,6 +485,12 @@
extension HomeListenFightVC:FFPageViewControllerDelegate{
            func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt {
                        switch viewModel.listenType.value {
                                    case .lesson1,.lesson2,.lesson3:return UInt((data as! ListenNewModel).subjectList.count)
                                    default:break
                        }
                        //超级听力,只有一页
                        if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{
                                    return 1
@@ -473,21 +531,20 @@
            }
            func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController {
                        print("加载======")
                        if viewModel.listenType.value == .lesson1{
                                    let vc = HomeListenFight_lesson_1_VC(page: page,listen1Model:data as! Listen1Model)
                                    let vc = HomeListenFight_lesson_1_VC(page: page,listenNewModel:data as! ListenNewModel)
                                    vc.rootViewModel = viewModel
                                    return vc
                        }
                        if viewModel.listenType.value == .lesson2{
                                    let vc = HomeListenFight_lesson_2_VC(page: page,listen1Model:data as! Listen1Model)
                                    let vc = HomeListenFight_lesson_2_VC(page: page,listenNewModel:data as! ListenNewModel)
                                    vc.rootViewModel = viewModel
                                    return vc
                        }
                        if viewModel.listenType.value == .lesson3{
                                    let vc = HomeListenFight_lesson_3_VC(page: page, listen1Model: data as! Listen1Model)
                                    let vc = HomeListenFight_lesson_3_VC(page: page, listenNewModel: data as! ListenNewModel)
                                    vc.rootViewModel = viewModel
                                    return vc
                        }