fix
无故事王国
2024-06-13 7c7bb620c2670e316617273ffabe9f690f989ad0
fix
7个文件已修改
356 ■■■■■ 已修改文件
DolphinEnglishLearnStudent/Models/CommonModel.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.swift 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Services/Services.swift 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Models/CommonModel.swift
@@ -247,7 +247,7 @@
}
class ListenNewDataModel:HandyJSON{
                var id = 0
                var id:String = ""
                var integral = 0
                required init(){}
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
@@ -18,13 +18,15 @@
class HomeListenFight_lesson_1_VC: BaseVC {
                private var viewModel = FightAnswerViewModel()
                private var listen1Model:Listen1Model!
                private var listenNewModel:ListenNewModel!
                private var randomElement:Listen1SubModel?
                private var page:Int!
                var rootViewModel:HomeListenFightViewModel!
                private var isListen:Bool = false
                private var isAnsterComplete:Bool = false //是否已经回答完成
                private var isAnsterComplete:Bool = false //是否已经回答完成[小题]
                private var isAnsterDone:Bool = false //是否已经回答完成[大题]
                private var isAnsterModel = Set<Listen1SubModel>()
                private var menuView:VoiceHandleView?
                private lazy var collectionView:UICollectionView = {
@@ -39,11 +41,10 @@
                                return collection
                }()
                required init(page:Int,listen1Model:Listen1Model){
                required init(page:Int,listenNewModel:ListenNewModel){
                                super.init(nibName: nil, bundle: nil)
                                self.page = page
                                self.listen1Model = listen1Model
                                self.listen1Model.subjectList.shuffle()
                                self.listenNewModel = listenNewModel
                }
                
                required init?(coder: NSCoder) {
@@ -57,8 +58,8 @@
                                print("加载======DidLoad")
                                //制造随机
                                randomElement = listen1Model.subjectList.randomElement()
                                menuView?.playUrl = randomElement?.correct
                                listenNewModel.subjectList[page].shuffle()
                                getNextAnswer()
                                menuView?.listenType = .lesson1
                                DispatchQueue.main.asyncAfter(deadline: .now()+2) {
@@ -80,12 +81,34 @@
                func restore(){
                                isAnsterModel.removeAll()
                                isAnsterComplete = false
                                viewModel.answerType.accept(.none)
                                viewModel.selectIndex.accept(nil)
                                menuView?.resetView()
                                setUI()
                                collectionView.reloadData()
                }
                private func getNextAnswer(){
                                if isAnsterModel.count == 4{
                                                print("答题答满了");return
                                }
                                randomElement = listenNewModel.subjectList[page].randomElement()
                                if randomElement != nil{
                                                if isAnsterModel.contains(randomElement!){
                                                                getNextAnswer();return
                                                }
                                                isAnsterModel.insert(randomElement!)
                                }
                                menuView?.playUrl = randomElement?.correct
                                listenNewModel.subjectList[page].shuffle()
                                isAnsterComplete = false
                                viewModel.answerType.accept(.none)
                                collectionView.reloadData()
                                setUI()
                }
                override func setUI() {
@@ -127,18 +150,19 @@
                override func setRx() {
                                viewModel.selectIndex.subscribe(onNext: {[weak self] index in
                                                guard let weakSelf = self else { return }
                                                guard let index = index else { return }
                                                if weakSelf.viewModel.answerType.value == .success {return}
                                                //判断选中是否正确逻辑
                                                if let cell = self?.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: index) as? ListenFight_lesson_1_CCell{
                                                                var answer:Fight_lessonType = .none
                                                                if self?.randomElement?.id == self?.listen1Model.subjectList[index.row].id{
                                                                if self?.randomElement?.id == weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].id{
                                                                                answer = .success
                                                                                if self?.isAnsterComplete == false{
                                                                                                self?.rootViewModel.correctNum += 1
                                                                                }
                                                                                self?.isAnsterComplete = true
                                                                                VoicePlayer.share().playerAt(url: self?.listen1Model.subjectList[index.row].correct)
                                                                                VoicePlayer.share().playerAt(url: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].correct)
                                                                }else{
                                                                                answer = .fail
                                                                                if self?.isAnsterComplete == false{
@@ -153,7 +177,7 @@
                                                                                case .fail:
                                                                                                self?.viewModel.answerType.accept(.fail)
//                                                                                                self?.collectionView.isUserInteractionEnabled = false
                                                                                                self?.answerFail(errorSound: self?.listen1Model.subjectList[index.row].error)
                                                                                                self?.answerFail(errorSound: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].error)
                                                                                default:break
                                                                }
                                                }
@@ -163,7 +187,6 @@
                //回答正确
                private func answerSuccess(_ cell:ListenFight_lesson_1_CCell){
                                menuView?.snp.removeConstraints()
//                                collectionView.isUserInteractionEnabled = false
                                let v = cell.view_topHandle.convert(cell.bounds, to: self.view)
                                UIView.animate(withDuration: 0.3) {
                                                self.menuView?.snp.updateConstraints { make in
@@ -204,12 +227,12 @@
                                }else{
                                                cell.setState(state: .none)
                                }
                                cell.setListen1SubModel(listen1Model.subjectList[indexPath.row])
                                cell.setListen1SubModel(listenNewModel.subjectList[page][indexPath.row])
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return min(4,listen1Model.subjectList.count)
                                return listenNewModel.subjectList[page].count
                }
}
@@ -219,12 +242,28 @@
                func playComplete() {
                                isListen = true
                                self.menuView?.resetView()
                                if self.isAnsterComplete{
                                                DispatchQueue.main.asyncAfter(deadline: .now()+3){
                                if isAnsterModel.count == 4{
                                                if !isAnsterDone{
                                                                let v = rootViewModel.answerCount.value
                                                                rootViewModel.answerCount.accept(v + 1)
                                                }
                                                isAnsterDone = true
                                                DispatchQueue.main.asyncAfter(deadline: .now()+3){[weak self] in
                                                                guard let weakSelf = self else { return }
                                                                NotificationCenter.default.post(name: NextLession_Noti, object: nil)
                                                                self.viewModel.answerType.accept(.none)
                                                                self.viewModel.selectIndex.accept(nil)
                                                                self.rootViewModel.answerItems[self.page] = self.listen1Model
                                                                weakSelf.viewModel.answerType.accept(.none)
                                                                weakSelf.viewModel.selectIndex.accept(nil)
                                                                weakSelf.rootViewModel.answerItems[weakSelf.page] = weakSelf.listenNewModel.subjectList[weakSelf.page]
                                                }
                                }
                                if isAnsterComplete{
                                                getNextAnswer()
                                                if !isAnsterDone{
                                                                let v = rootViewModel.answerCount.value
                                                                rootViewModel.answerCount.accept(v + 1)
                                                }
                                }
                }
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
                                }
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
@@ -12,14 +12,18 @@
                private var viewModel = FightAnswerViewModel()
                private var listen1Model:Listen1Model!
                private var randomElement:Listen1SubModel?
                private var listenNewModel:ListenNewModel!
//                private var randomElement:Listen1SubModel?
                private var page:Int!
                var rootViewModel:HomeListenFightViewModel!
                private var tempViews = [StudyHandleView]()
                private var playedIndex = Set<Int>() //已经播放过的view
                private var voicePlayer = VoicePlayer.share()
                private var isAnsterModel = Set<Listen1SubModel>()
//                private var isAnsterComplete:Bool = false //是否已经回答完成[小题]
//                private var isAnsterDone:Bool = false //是否已经回答完成[大题]
                private lazy var stackView:UIStackView = {
                                let stackView = UIStackView()
@@ -41,11 +45,10 @@
                }()
                required init(page:Int,listen1Model:Listen1Model){
                required init(page:Int,listenNewModel:ListenNewModel){
                                super.init(nibName: nil, bundle: nil)
                                self.page = page
                                self.listen1Model = listen1Model
                                self.listen1Model.subjectList.shuffle()
                                self.listenNewModel = listenNewModel
                }
                
                required init?(coder: NSCoder) {
@@ -117,6 +120,8 @@
                private func addStackView(){
//                                getNextAnswer()
                                for subV in stackView.arrangedSubviews{
                                                subV.removeFromSuperview()
                                }
@@ -130,7 +135,7 @@
                                                handleView.tag = 20 + index
                                                let row = viewModel.selectIndex.value!.row
                                                let model = listen1Model.subjectList[row]
                                                let model = listenNewModel.subjectList[page][row]
                                                if index == 0{
                                                                handleView.vioceSoundUrl = model.correct
@@ -148,12 +153,12 @@
                                                                self?.playedIndex.insert(index)
                                                }
                                                handleView.chooseClouse {[weak self] btn in
                                                                guard let weakSelf = self else { return }
                                                                let row = weakSelf.viewModel.selectIndex.value!.row
                                                                handleView.view_choose.alpha = 1
                                                                var lessionType:Fight_lessonType = .none
                                                                if handleView.vioceSoundUrl == weakSelf.listen1Model.subjectList[row].correct{
                                                                if handleView.vioceSoundUrl == weakSelf.listenNewModel.subjectList[weakSelf.page][row].correct{
                                                                                lessionType = .success
                                                                                                weakSelf.voicePlayer.playerEnd()
                                                                }else{
@@ -162,6 +167,7 @@
                                                                switch lessionType {
                                                                                case .success:
//                                                                                                weakSelf.isAnsterComplete = true
                                                                                                weakSelf.rootViewModel.correctNum += 1
                                                                                                handleView.btn_choose.isEnabled = false
                                                                                                handleView.btn_state.setImage(UIImage(named: "icon_success_small"), for: .normal)
@@ -212,7 +218,7 @@
                                //copy试图放在上面进行覆盖
                                let copyHandleView = studyHandleView.copyView()
                                copyHandleView.view_choose.isHidden = true
                                copyHandleView.vioceSoundUrl = listen1Model.subjectList[self.viewModel.selectIndex.value!.row].correct
                                copyHandleView.vioceSoundUrl = listenNewModel.subjectList[page][self.viewModel.selectIndex.value!.row].correct
                                copyHandleView.btn_state.setImage(nil, for: .normal)
                                view.addSubview(copyHandleView)
                                view.layoutIfNeeded()
@@ -237,15 +243,16 @@
                                                self.view.layoutIfNeeded()
                                }completion: { complete in
                                                if complete{
                                                                self.voicePlayer.playerAt(url: self.listen1Model.subjectList[self.viewModel.selectIndex.value!.row].correct)
                                                                self.voicePlayer.playerAt(url: self.listenNewModel.subjectList[self.page][self.viewModel.selectIndex.value!.row].correct)
                                                }
                                }
                }
                private func resetStackView(){
                                playedIndex.removeAll()
                                let newRow = viewModel.selectIndex.value!.row+1
                                if newRow == listen1Model.subjectList.count{ //防止坐标越界
                                                rootViewModel.answerItems[page] = listen1Model
                                if newRow >= listenNewModel.subjectList[page].count{ //防止坐标越界
                                                rootViewModel.answerItems[page] = listenNewModel.subjectList[page]
                                                NotificationCenter.default.post(name: NextLession_Noti, object: nil);return
                                }
@@ -273,13 +280,14 @@
                                }else{
                                                cell.label_title.isHidden = true
                                }
                                cell.setListen1SubModel(listen1Model.subjectList[indexPath.row])
                                cell.label_title.text = listen1Model.subjectList[indexPath.row].name
                                cell.setListen1SubModel(listenNewModel.subjectList[page][indexPath.row])
                                cell.label_title.text = listenNewModel.subjectList[page][indexPath.row].name
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return min(4,listen1Model.subjectList.count)
                                return listenNewModel.subjectList[page].count
                }
}
@@ -291,16 +299,26 @@
                                for sub in stackView.arrangedSubviews as! [StudyHandleView]{
                                                if playedIndex.contains(sub.tag){
                                                                sub.resetView()
                                                                sub.view_choose.alpha = playedIndex.contains(sub.tag) ? 1:0
                                                }
                                }
                                print("--->\(page)")
                                if viewModel.answerType.value == .success{
                                                let v = rootViewModel.answerCount.value
                                                rootViewModel.answerCount.accept(v + 1)
                                                DispatchQueue.main.asyncAfter(deadline: .now()+3) {
                                                                self.resetStackView()
                                                                self.viewModel.answerType.accept(.none)
                                                }
                                }
//                                if isAnsterComplete{
////                                                getNextAnswer()
//                                                if !isAnsterDone{
//                                                                let v = rootViewModel.answerCount.value
//                                                                rootViewModel.answerCount.accept(v + 1)
//                                                }
//                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift
@@ -31,17 +31,17 @@
                                return sta
                }()
                private var listen1Model:Listen1Model!
                private var listenNewModel:ListenNewModel!
                private var page:Int!
                private var answterCount:Int = 0 //回答计数,用于确定角标
                var rootViewModel:HomeListenFightViewModel!
                private var voicePlayer = VoicePlayer.share()
                required init(page:Int,listen1Model:Listen1Model){
                required init(page:Int,listenNewModel:ListenNewModel){
                                super.init(nibName: nil, bundle: nil)
                                self.page = page
                                self.listen1Model = listen1Model
                                self.listen1Model.subjectList.shuffle()
                                self.listenNewModel = listenNewModel
//                                self.listen1Model.subjectList.shuffle()
                }
                required init?(coder: NSCoder) {
@@ -124,9 +124,9 @@
                                var tempImageArray = [String]()
                                tempImageArray.append(listen1Model.subjectList[2].img)
                                tempImageArray.append(listen1Model.subjectList[4].img)
                                tempImageArray.append(listen1Model.subjectList[5].img)
                                tempImageArray.append(listenNewModel.subjectList[page][2].img)
                                tempImageArray.append(listenNewModel.subjectList[page][4].img)
                                tempImageArray.append(listenNewModel.subjectList[page][5].img)
//                                tempImageArray.shuffle()
                                view.addSubview(stackView)
@@ -179,7 +179,7 @@
                                                valueIndex = viewModel.selectIndex.value!.row + 3
                                }
                                if subV?.imageUrl == listen1Model.subjectList[valueIndex].img{
                                if subV?.imageUrl == listenNewModel.subjectList[page][valueIndex].img{
                                                answerType = .success
                                }else{
                                                answerType = .fail
@@ -220,11 +220,13 @@
                                                                                                copyView?.frame = newFrame
                                                                                } completion: { _ in
                                                                                                self.answterCount += 1
                                                                                                self.voicePlayer.playerAt(url: self.listen1Model.subjectList[valueIndex].correct)
                                                                                                self.voicePlayer.playerAt(url: self.listenNewModel.subjectList[self.page][valueIndex].correct)
                                                                                                DispatchQueue.main.asyncAfter(deadline: .now()+1.0) {
                                                                                                                self.setAnswerStackView()
                                                                                                                self.viewModel.selectIndex.accept(nil)
                                                                                                                let v = self.rootViewModel.answerCount.value + 1
                                                                                                                self.rootViewModel.answerCount.accept(v)
                                                                                                }
                                                                                }
                                                                }
@@ -281,7 +283,7 @@
                                }
                                if indexPath.section == 0{
                                                let model = listen1Model.subjectList[indexPath.row]
                                                let model = listenNewModel.subjectList[page][indexPath.row]
                                                if indexPath.row != 2{
                                                                cell.img_cover.sd_setImage(with: URL(string: model.img))
                                                }else{
@@ -291,7 +293,7 @@
                                }
                                if indexPath.section == 1{
                                                let model = listen1Model.subjectList[indexPath.row + 3]
                                                let model = listenNewModel.subjectList[page][indexPath.row + 3]
                                                if indexPath.row == 0{
                                                                cell.img_cover.sd_setImage(with: URL(string: model.img))
                                                }else{
@@ -322,7 +324,7 @@
                                collectionView.reloadData()
                                if self.answterCount == 3{
                                                self.rootViewModel.answerItems[self.page] = self.listen1Model
                                                self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page]
                                                NotificationCenter.default.post(name: NextLession_Noti, object: nil)
                                                VoicePlayer.share().playerEnd()
                                                return
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.swift
@@ -39,6 +39,10 @@
    override func viewDidLoad() {
        super.viewDidLoad()
                                yy_popBlock = {[weak self] () in
                                                self?.backAction()
                                }
                                label_coin.text = "恭喜你,已完成全部答题!获得\(totalCoin)积分!"
                                label_correctNum.text = "\(correctNum)次"
                                label_errorNum.text = "\(errorNum)次"
@@ -56,15 +60,7 @@
                }
                @IBAction func backHomeAction(_ sender: UIButton) {
                                for vc in navigationController?.viewControllers ?? []{
                                                if vc.isKind(of: HomeListenMenuVC.self){
                                                                navigationController?.popToViewController(vc, animated: true);break
                                                }
                                                if vc.isKind(of: HomeListenVC.self){
                                                                navigationController?.popToViewController(vc, animated: true);break
                                                }
                                }
                                backAction()
                }
                @IBAction func nextAction(_ sender: UIButton) {
@@ -85,4 +81,16 @@
                                                NotificationCenter.default.post(name: StudyCompleteNextLession_Noti, object: nextType)
                                }
                }
                private func backAction(){
                                for vc in navigationController?.viewControllers ?? []{
                                                if vc.isKind(of: HomeListenMenuVC.self){
                                                                navigationController?.popToViewController(vc, animated: true);break
                                                }
                                                if vc.isKind(of: HomeListenVC.self){
                                                                navigationController?.popToViewController(vc, animated: true);break
                                                }
                                }
                }
}
DolphinEnglishLearnStudent/Services/Services.swift
@@ -31,7 +31,7 @@
                /// 自主学习1-听音选图
                class func listenSelectPicture(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<Listen1Model>>{
                class func listenSelectPicture(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<ListenNewModel>>{
                                let params = ParamsAppender.build(url: All_Url)
                                params.interface(url: "/study/base/study/listenSelectPicture")
                                params.append(key: "quarter", value: quarter)
@@ -42,7 +42,7 @@
                /// 自主学习2-看图选音
                class func pictureSelectVoice(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<Listen1Model>>{
                class func pictureSelectVoice(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<ListenNewModel>>{
                                let params = ParamsAppender.build(url: All_Url)
                                params.interface(url: "/study/base/study/pictureSelectVoice")
                                params.append(key: "quarter", value: quarter)
@@ -52,7 +52,7 @@
                }
                /// 自主学习3-归纳排除
                class func induceExclude(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<Listen1Model>>{
                class func induceExclude(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<ListenNewModel>>{
                                let params = ParamsAppender.build(url: All_Url)
                                params.interface(url: "/study/base/study/induceExclude")
                                params.append(key: "quarter", value: quarter)
@@ -82,12 +82,12 @@
                }
                /// 完成学习
                class func completeLearing(type:Int,studyTime:Int,studyIds:[Int],isComplete:Bool)->Observable<BaseResponse<SimpleModel>>{
                class func completeLearing(type:Int,studyTime:Int,studyIds:String,isComplete:Bool)->Observable<BaseResponse<SimpleModel>>{
                                let params = ParamsAppender.build(url: All_Url)
                                params.interface(url: "/study/base/study/completeLearning")
                                                .append(key: "type", value: type)
                                                .append(key: "studyTime", value: studyTime)
                                                .append(key: "studyIds", value: studyIds.map({"\($0)"}))
                                                .append(key: "studyIds", value: studyIds)
                                                .append(key: "isComplete", value: isComplete)
                                return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding.default, progress: true)
                }