| | |
| | | var answerItems = Dictionary<Int,Any>() //{page:0,data:String,currectAt:0} |
| | | var answerCount = BehaviorRelay<Int>(value: 1) |
| | | |
| | | var answerItems_1 = Dictionary<String,Set<Int>>() |
| | | var answerItems_1 = Dictionary<String,Array<Int>>() |
| | | |
| | | //回答正确的题 |
| | | func insertCorrectAnswer(teamId:String?,answerId:Int){ |
| | | guard teamId != nil else {return} |
| | | if answerItems_1[teamId!] == nil{ |
| | | answerItems_1[teamId!] = Set<Int>() |
| | | answerItems_1[teamId!] = Array<Int>() |
| | | } |
| | | answerItems_1[teamId!]!.insert(answerId) |
| | | |
| | | answerItems_1[teamId!]!.append(answerId) |
| | | } |
| | | } |
| | | |
| | |
| | | var studyScheduleModel:StudyScheduleModel? //学习进度(上级传递) |
| | | var listenFightLine:ListenFightLine = .none |
| | | var data:Any? |
| | | |
| | | var maxPage = 0 //最大页记录 |
| | | var teamScheduleModel:TeamScheduleModel? //上次中途退出,答题记录 |
| | | |
| | | private var notiObject:Dictionary<String,Any>? |
| | | |
| | |
| | | btn.setTitleColor(Config.ThemeColor, for: .normal) |
| | | btn.jq_borderColor = Config.ThemeColor |
| | | btn.backgroundColor = .white |
| | | btn.jq_borderWidth = 1 |
| | | btn.jq_cornerRadius = 4 |
| | | return btn |
| | | }() |
| | | |
| | | private lazy var btn_forward_mini:UIButton = { |
| | | let btn = UIButton(type: .custom) |
| | | btn.setTitle("上一小题", for: .normal) |
| | | btn.titleLabel?.font = .systemFont(ofSize: 14, weight: .medium) |
| | | btn.setTitleColor(Config.ThemeColor, for: .normal) |
| | | btn.jq_borderColor = Config.ThemeColor |
| | | btn.backgroundColor = .white |
| | | btn.isHidden = true |
| | | btn.jq_borderWidth = 1 |
| | | btn.jq_cornerRadius = 4 |
| | | return btn |
| | |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | | super.viewDidDisappear(animated) |
| | | sceneDelegate?.suspendTimer() |
| | | self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false |
| | | |
| | | yy_popBlock = {[weak self] in |
| | | self?.quitAction(isPop: true) |
| | |
| | | |
| | | btn_exit.addTarget(self, action: #selector(quitAction), for: .touchUpInside) |
| | | btn_forward.addTarget(self, action: #selector(beforeAction), for: .touchUpInside) |
| | | btn_forward_mini.addTarget(self, action: #selector(beforeAction_mini), for: .touchUpInside) |
| | | btn_next.addTarget(self, action: #selector(nextAction), for: .touchUpInside) |
| | | |
| | | setPages() |
| | |
| | | timer.fire() |
| | | RunLoop.current.add(timer, forMode: .common) |
| | | |
| | | Services.teamSchedule(type: viewModel.listenType.value, week: viewModel.week.value!, day: viewModel.day.value!).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | if let model = data.data{ |
| | | weakSelf.viewModel.correctNum = weakSelf.viewModel.correctNum + model.correctNumber |
| | | weakSelf.viewModel.errorNum = model.answerNumber - model.correctNumber |
| | | |
| | | //跳转至指定页面 |
| | | let page = max(0,model.topicIds.count - 1) |
| | | if weakSelf.pageVC.currentPage != page{ |
| | | weakSelf.pageVC.scroll(toPage: page, animation: false) |
| | | } |
| | | if let teamSchedule = teamScheduleModel{ |
| | | viewModel.correctNum = viewModel.correctNum + teamSchedule.correctNumber |
| | | viewModel.errorNum = teamSchedule.answerNumber - teamSchedule.correctNumber |
| | | maxPage = teamSchedule.schedule |
| | | let ids = (data as! ListenNewModel).data!.id.components(separatedBy: ",") |
| | | switch viewModel.listenType.value { |
| | | case .lesson1: |
| | | let nextPage = floor(Double(maxPage) / 5.0) |
| | | pageVC.scroll(toPage: Int(nextPage), animation: false) |
| | | viewModel.answerCount.accept(maxPage) |
| | | setPages() |
| | | |
| | | DispatchQueue.main.asyncAfter(wallDeadline: .now()+0.5){ |
| | | switch weakSelf.viewModel.listenType.value { |
| | | case .lesson1: |
| | | let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_1_VC |
| | | case .lesson2: |
| | | let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_2_VC |
| | | case .lesson3: |
| | | let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_3_VC |
| | | case .lesson4: |
| | | let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_4_VC |
| | | case .lesson5: |
| | | let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_5_VC |
| | | default: |
| | | break |
| | | } |
| | | |
| | | // for (index,v) in ids.enumerated(){ |
| | | // if v == String(teamSchedule.teamIds.last!){ |
| | | // let maxCount = (data as! ListenNewModel).subjectList.count |
| | | // //下一页页码 |
| | | // let page = min(index, maxCount) |
| | | // if pageVC.currentPage != page{ |
| | | // pageVC.scroll(toPage: page, animation: false) |
| | | // setPages() |
| | | // } |
| | | // viewModel.answerCount.accept(teamSchedule.topicIds.count + 1) |
| | | // } |
| | | // } |
| | | |
| | | case .lesson2: |
| | | |
| | | // let nextPage = (teamSchedule.teamIds.count) - 1 |
| | | let maxCount = (data as! ListenNewModel).subjectList.count |
| | | let page = min((maxPage - 1),maxCount) |
| | | if pageVC.currentPage != page{ |
| | | viewModel.currentPage.accept(page) |
| | | pageVC.scroll(toPage: page, animation: false) |
| | | setPages() |
| | | } |
| | | |
| | | case .lesson4: |
| | | |
| | | // let nextPage = (teamSchedule.teamIds.count) - 1 |
| | | let maxCount = (data as! ListenNewModel).subjectList.count |
| | | let page = min((maxPage - 1),maxCount) |
| | | if pageVC.currentPage != page{ |
| | | viewModel.currentPage.accept(page) |
| | | pageVC.scroll(toPage: page, animation: false) |
| | | setPages() |
| | | } |
| | | |
| | | |
| | | case .lesson3,.lesson5: |
| | | // let nextPage = (teamSchedule.teamIds.count) - 1 |
| | | let maxCount = (data as! ListenNewModel).subjectList.count |
| | | let page = min((maxPage - 1),maxCount) |
| | | if pageVC.currentPage != page{ |
| | | viewModel.currentPage.accept(page) |
| | | pageVC.scroll(toPage: page, animation: false) |
| | | setPages() |
| | | } |
| | | |
| | | |
| | | default:break |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | |
| | | private func craeteFootFuncView(){ |
| | | |
| | | view.addSubview(label_pageNum) |
| | | |
| | | view.addSubview(btn_forward) |
| | | btn_forward.snp.makeConstraints { make in |
| | | make.height.equalTo(40) |
| | | make.width.equalTo(124) |
| | | } |
| | | |
| | | view.addSubview(btn_exit) |
| | | btn_exit.snp.makeConstraints { make in |
| | | make.height.equalTo(40) |
| | | make.width.equalTo(124) |
| | |
| | | |
| | | private func setPages(){ |
| | | switch viewModel.listenType.value{ |
| | | case .lesson1,.lesson5: |
| | | case .lesson1: |
| | | label_pageNum.text = "已完成:\(viewModel.answerCount.value)/\((data as! ListenNewModel).subjectList.flatMap({$0}).count)" |
| | | case .lesson2,.lesson3: |
| | | maxPage = max(viewModel.answerCount.value,maxPage) |
| | | btn_forward.isHidden = viewModel.answerCount.value == 1 |
| | | case .lesson2,.lesson3,.lesson5: |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\((data as! ListenNewModel).subjectList.count)" |
| | | btn_forward.isHidden = viewModel.currentPage.value == 0 |
| | | let page = viewModel.currentPage.value + 1 |
| | | maxPage = max(page,maxPage) |
| | | case .lesson4: |
| | | //两题为一组:需要/2 |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\((data as! ListenNewModel).subjectList.count)" |
| | | let page = viewModel.currentPage.value + 1 |
| | | maxPage = max(page,maxPage) |
| | | case .game1,.game2: |
| | | btn_forward.isHidden = true |
| | | label_pageNum.isHidden = true |
| | |
| | | if viewModel.listenType.value == .game1{ |
| | | showGameLevel(canLevel: studyScheduleModel?.gameDifficulty ?? 0) |
| | | } |
| | | case .story1,.story2: |
| | | let count = (data as! Listen1Model).storyList.count |
| | | viewModel.maxPage.accept(count) |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(count)" |
| | | |
| | | case .story1: |
| | | if viewModel.listenType.value == .story2{ |
| | | btn_next.isHidden = (viewModel.currentPage.value + 1) == viewModel.maxPage.value |
| | | if btn_next.isHidden{ |
| | | btn_exit.setTitle("完成", for: .normal) |
| | | } |
| | | } |
| | | fallthrough |
| | | case .story2: |
| | | let count = (data as! Listen1Model).storyList.count |
| | | viewModel.maxPage.accept(count) |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(count)" |
| | | } |
| | | } |
| | | |
| | |
| | | if vc.isKind(of: HomeListenVC.self){ |
| | | weakSelf.navigationController?.popToViewController(vc, animated: true);break |
| | | } |
| | | |
| | | // if vc.isKind(of: HomeListenMenuVC.self){ |
| | | // weakSelf.navigationController?.popToViewController(vc, animated: true);break |
| | | // } |
| | | } |
| | | } |
| | | return |
| | |
| | | if vc.isKind(of: HomeListenVC.self){ |
| | | weakSelf.navigationController?.popToViewController(vc, animated: true);break |
| | | } |
| | | |
| | | // if vc.isKind(of: HomeListenMenuVC.self){ |
| | | // weakSelf.navigationController?.popToViewController(vc, animated: true);break |
| | | // } |
| | | } |
| | | } |
| | | return |
| | |
| | | CommonAlertView.show(content: "未完成全部答题,确认退出吗?") {[weak self] () in |
| | | guard let weakSelf = self else { return } |
| | | |
| | | let topicIds = weakSelf.viewModel.answerItems_1.keys.sorted() |
| | | let temIds = weakSelf.viewModel.answerItems_1.values.flatMap({$0}).map({"\($0)"}) |
| | | // let temIds = weakSelf.viewModel.answerItems_1.keys.sorted() |
| | | // let topicIds = weakSelf.viewModel.answerItems_1.values.flatMap({$0}).map({"\($0)"}) |
| | | |
| | | var schedule:Int = 0 |
| | | switch weakSelf.viewModel.listenType.value{ |
| | | case .lesson1,.lesson2,.lesson5:schedule = weakSelf.viewModel.answerCount.value |
| | | case .lesson3:schedule = weakSelf.viewModel.currentPage.value + 1 |
| | | case .lesson4:schedule = weakSelf.viewModel.currentPage.value + 1 |
| | | default:break |
| | | } |
| | | let temIds = [String]() |
| | | let topicIds = [String]() |
| | | |
| | | // var schedule:Int = 0 |
| | | |
| | | // if let page = weakSelf.label_pageNum.text?.components(separatedBy: ":").last?.components(separatedBy: "/").first?.int{ |
| | | // schedule = max((page - 1),1) |
| | | // } |
| | | |
| | | |
| | | // switch weakSelf.viewModel.listenType.value{ |
| | | // case .lesson1:schedule = max(weakSelf.viewModel.answerCount.value - 1,1) |
| | | // case .lesson2,.lesson3:schedule = max(weakSelf.viewModel.currentPage.value,1) |
| | | // case .lesson4:schedule = max(weakSelf.viewModel.currentPage.value,1) |
| | | // case .lesson5:schedule = max(weakSelf.viewModel.currentPage.value,1) |
| | | // default:break |
| | | // } |
| | | |
| | | switch weakSelf.viewModel.listenType.value{ |
| | | case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5: |
| | | if temIds.count > 0 && topicIds.count > 0{ |
| | | // if temIds.count > 0 && topicIds.count > 0{ |
| | | let totalNum = weakSelf.viewModel.correctNum + weakSelf.viewModel.errorNum |
| | | Services.exitLearning(type:weakSelf.viewModel.listenType.value.rawValue,quarter: weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!, day: weakSelf.viewModel.day.value!, teamIds: temIds, topicIds: topicIds,answerNumber: totalNum,correctNumber:weakSelf.viewModel.correctNum,studyTime:weakSelf.viewModel.times,schedule: schedule).subscribe(onNext: { data in |
| | | Services.exitLearning(type:weakSelf.viewModel.listenType.value.rawValue,quarter: weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!, day: weakSelf.viewModel.day.value!, teamIds: temIds, topicIds: topicIds,answerNumber: totalNum,correctNumber:weakSelf.viewModel.correctNum,studyTime:weakSelf.viewModel.times,schedule: weakSelf.maxPage).subscribe(onNext: { data in |
| | | |
| | | NotificationCenter.default.post(name: MeUserInfoUpdate_Noti, object: nil) |
| | | |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | // } |
| | | case .game1,.game2,.story1,.story2: |
| | | Services.exitGameOrStory(studyTime: weakSelf.viewModel.times).subscribe(onNext: { _ in |
| | | |
| | |
| | | if vc.isKind(of: HomeListenVC.self){ |
| | | weakSelf.navigationController?.popToViewController(vc, animated: true);break |
| | | } |
| | | // |
| | | // if vc.isKind(of: HomeListenMenuVC.self){ |
| | | // weakSelf.navigationController?.popToViewController(vc, animated: true);break |
| | | // } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | @objc func beforeAction(){ |
| | | |
| | | if viewModel.listenType.value == .story2{ |
| | | guard (pageVC.currentController as! HomeListenStory_2_VC).isPlayEnd else { |
| | | alert(msg: "请听完");return |
| | | @objc func beforeAction_mini(){ |
| | | if viewModel.listenType.value == .lesson1{ |
| | | if let vc = pageVC.currentController as? HomeListenFight_lesson_1_VC{ |
| | | print("---->进入") |
| | | vc.tobefore() |
| | | } |
| | | } |
| | | } |
| | | |
| | | @objc func beforeAction(){ |
| | | |
| | | listenFightLine = .before |
| | | let beforePage = max(0, viewModel.currentPage.value - 1) |
| | | switch viewModel.listenType.value { |
| | | case .lesson1,.lesson2: |
| | | case .lesson1: |
| | | if !(pageVC.currentController as! HomeListenFight_lesson_1_VC).isListen{ |
| | | alert(msg: "请听完");return |
| | | } |
| | | |
| | | let temp = viewModel.answerCount.value - 1 |
| | | viewModel.answerCount.accept(max(1,temp)) |
| | | case .lesson2: |
| | | let temp = (beforePage * 4) + 1 |
| | | viewModel.answerCount.accept(max(1,temp)) |
| | | default:break |
| | |
| | | |
| | | pageVC.scroll(toPage: beforePage, animation: true) |
| | | viewModel.currentPage.accept(beforePage) |
| | | |
| | | |
| | | if viewModel.listenType.value == .story2{ |
| | | guard (pageVC.currentController as! HomeListenStory_2_VC).isPlayEnd else { |
| | | alert(msg: "请听完");return |
| | | } |
| | | } |
| | | |
| | | if viewModel.listenType.value == .lesson1{ |
| | | let currentVC = pageVC.currentController as! HomeListenFight_lesson_1_VC |
| | | // if (viewModel.answerCount.value - 1 ) % 4 != 0 || viewModel.answerCount.value <= 4{ |
| | | currentVC.tobefore();return |
| | | // } |
| | | } |
| | | |
| | | if viewModel.listenType.value == .lesson3{ |
| | | (pageVC.currentController as! HomeListenFight_lesson_3_VC).restore() |
| | | } |
| | | |
| | | if viewModel.listenType.value == .story2{ |
| | | btn_next.isHidden = false |
| | |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | if viewModel.listenType.value == .lesson1{ |
| | | let vc = HomeListenFight_lesson_1_VC(page: page,listenNewModel:data as! ListenNewModel) |
| | | vc.teamScheduleModel = teamScheduleModel |
| | | vc.rootViewModel = viewModel |
| | | return vc |
| | | } |
| | | |
| | | if viewModel.listenType.value == .lesson2{ |
| | | let vc = HomeListenFight_lesson_2_VC(page: page,listenNewModel:data as! ListenNewModel) |
| | | vc.teamScheduleModel = teamScheduleModel |
| | | vc.rootViewModel = viewModel |
| | | return vc |
| | | } |
| | | |
| | | if viewModel.listenType.value == .lesson3{ |
| | | let vc = HomeListenFight_lesson_3_VC(page: page, listenNewModel: data as! ListenNewModel) |
| | | vc.teamScheduleModel = teamScheduleModel |
| | | vc.rootViewModel = viewModel |
| | | return vc |
| | | } |
| | | |
| | | if viewModel.listenType.value == .lesson4{ |
| | | let vc = HomeListenFight_lesson_4_VC(page: page, listenNewModel: data as! ListenNewModel) |
| | | vc.teamScheduleModel = teamScheduleModel |
| | | vc.rootViewModel = viewModel |
| | | return vc |
| | | } |
| | | |
| | | if viewModel.listenType.value == .lesson5{ |
| | | let vc = HomeListenFight_lesson_5_VC(page: page, listenNewModel: data as! ListenNewModel) |
| | | vc.teamScheduleModel = teamScheduleModel |
| | | vc.rootViewModel = viewModel |
| | | return vc |
| | | } |