杨锴
2025-06-04 ac84f81ca2311300b431c1bfb9f71253b59073f2
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.swift
@@ -11,180 +11,180 @@
let StudyCompleteCoinUpdate_Noti = Notification.Name.init("StudyCompleteCoinUpdate_Noti")
class HomeStudyCompleteVC: BaseVC {
            @IBOutlet weak var label_coin: UILabel!
            @IBOutlet weak var label_correctNum: UILabel!
            @IBOutlet weak var label_title_correctNum: UILabel!
            @IBOutlet weak var label_totalNum: UILabel!
            @IBOutlet weak var label_title_totalNum: UILabel!
            @IBOutlet weak var label_errorNum: UILabel!
            @IBOutlet weak var label_title_errorNum: UILabel!
            @IBOutlet weak var label_ratioNum: UILabel!
            @IBOutlet weak var btn_next: UIButton!
            @IBOutlet weak var stackView: UIStackView!
            @IBOutlet weak var btn_back: UIButton!
    @IBOutlet weak var label_coin: UILabel!
    @IBOutlet weak var label_correctNum: UILabel!
    @IBOutlet weak var label_title_correctNum: UILabel!
    @IBOutlet weak var label_totalNum: UILabel!
    @IBOutlet weak var label_title_totalNum: UILabel!
    @IBOutlet weak var label_errorNum: UILabel!
    @IBOutlet weak var label_title_errorNum: UILabel!
    @IBOutlet weak var label_ratioNum: UILabel!
    @IBOutlet weak var btn_next: UIButton!
    @IBOutlet weak var stackView: UIStackView!
    @IBOutlet weak var btn_back: UIButton!
//            private var totalCoin:Int = 0
            private var totalNum:Int? //总题目数量
    //            private var totalCoin:Int = 0
    private var totalNum:Int? //总题目数量
            var viewModel:HomeListenFightViewModel!
            var studyScheduleModel:StudyScheduleModel!
    var viewModel:HomeListenFightViewModel!
    var studyScheduleModel:StudyScheduleModel!
            required init(totalNum:Int? = nil,viewModel:HomeListenFightViewModel,studyScheduleModel:StudyScheduleModel){
                        super.init(nibName: nil, bundle: nil)
//                        self.totalCoin = totalCoin
                        self.totalNum = totalNum
                        self.viewModel = viewModel
                        self.studyScheduleModel = studyScheduleModel
            }
    required init(totalNum:Int? = nil,viewModel:HomeListenFightViewModel,studyScheduleModel:StudyScheduleModel){
        super.init(nibName: nil, bundle: nil)
        //                        self.totalCoin = totalCoin
        self.totalNum = totalNum
        self.viewModel = viewModel
        self.studyScheduleModel = studyScheduleModel
    }
            required init?(coder: NSCoder) {
                        fatalError("init(coder:) has not been implemented")
            }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
            override func viewDidLoad() {
                        super.viewDidLoad()
    override func viewDidLoad() {
        super.viewDidLoad()
                        navigationController?.viewControllers.removeAll(where: { vc in
                                    return vc is HomeListenFightVC
                        })
        navigationController?.viewControllers.removeAll(where: { vc in
            return vc is HomeListenFightVC
        })
                        yy_popBlock = {[weak self] () in
                                    self?.backAction()
                        }
        yy_popBlock = {[weak self] () in
            self?.backAction()
        }
                        label_coin.text = "恭喜您,已完成全部答题!获得0积分!"
                        label_correctNum.text = "\(viewModel.correctNum)次"
                        label_errorNum.text = "\(viewModel.errorNum)次"
                        label_totalNum.text = "\(viewModel.correctNum + viewModel.errorNum)次"
        label_coin.text = "恭喜您,已完成全部答题!获得0积分!"
        label_correctNum.text = "\(viewModel.correctNum)次"
        label_errorNum.text = "\(viewModel.errorNum)次"
        label_totalNum.text = "\(viewModel.correctNum + viewModel.errorNum)次"
                        if viewModel.correctNum + viewModel.errorNum == 0{
                                    label_ratioNum.text = String(format: "正确率:0%%")
                        }else{
                                    label_ratioNum.text = String(format: "正确率:%ld%%", floor(Double(viewModel.correctNum) / Double(viewModel.correctNum + viewModel.errorNum) * 100).int)
                        }
        if viewModel.correctNum + viewModel.errorNum == 0{
            label_ratioNum.text = String(format: "正确率:0%%")
        }else{
            label_ratioNum.text = String(format: "正确率:%ld%%", floor(Double(viewModel.correctNum) / Double(viewModel.correctNum + viewModel.errorNum) * 100).int)
        }
                        if totalNum != nil && viewModel.listenType.value == .game2{
                                    label_title_totalNum.text = "总题目:"
                                    label_title_correctNum.text = "正确题目:"
                                    label_title_errorNum.text = "错误题目:"
                                    label_coin.text = "恭喜您,已完成游戏!获得0积分!"
        if totalNum != nil && viewModel.listenType.value == .game2{
            label_title_totalNum.text = "总题目:"
            label_title_correctNum.text = "正确题目:"
            label_title_errorNum.text = "错误题目:"
            label_coin.text = "恭喜您,已完成游戏!获得0积分!"
                                    label_totalNum.text = "\(totalNum!)"
                                    label_correctNum.text = "\(viewModel.correctNum)"
                                    label_errorNum.text = "\(viewModel.errorNum)"
                        }
            label_totalNum.text = "\(totalNum!)"
            label_correctNum.text = "\(viewModel.correctNum)"
            label_errorNum.text = "\(viewModel.errorNum)"
        }
                        switch viewModel.listenType.value{
                                    case .lesson5,.game1,.game2,.story1,.story2:btn_next.isHidden = true
                                    default:btn_next.isHidden = false
                        }
        switch viewModel.listenType.value{
        case .lesson5,.game1,.game2,.story1,.story2:btn_next.isHidden = true
        default:btn_next.isHidden = false
        }
                        stackView.isHidden = viewModel.listenType.value == .story2
                        label_ratioNum.isHidden = viewModel.listenType.value == .story2
        stackView.isHidden = viewModel.listenType.value == .story2
        label_ratioNum.isHidden = viewModel.listenType.value == .story2
                        NotificationCenter.default.post(name: MeUserInfoUpdate_Noti, object: nil)
            }
        NotificationCenter.default.post(name: MeUserInfoUpdate_Noti, object: nil)
    }
            override func setUI() {
                        super.setUI()
            }
    override func setUI() {
        super.setUI()
    }
            override func setRx() {
                        NotificationCenter.default.rx.notification(StudyCompleteCoinUpdate_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] data in
                                    guard let weakSelf = self else { return }
    override func setRx() {
        NotificationCenter.default.rx.notification(StudyCompleteCoinUpdate_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] data in
            guard let weakSelf = self else { return }
                                    if let coin = data.object as? Int{
                                                switch weakSelf.viewModel.listenType.value {
                                                            case .game2:weakSelf.label_coin.text = "恭喜您,已完成游戏!获得\(coin)积分!"
                                                            default:weakSelf.label_coin.text = "恭喜您,已完成全部答题!获得\(coin)积分!"
                                                }
                                    }
                        }).disposed(by: disposeBag)
            }
            if let coin = data.object as? Int{
                switch weakSelf.viewModel.listenType.value {
                case .game2:weakSelf.label_coin.text = "恭喜您,已完成游戏!获得\(coin)积分!"
                default:weakSelf.label_coin.text = "恭喜您,已完成全部答题!获得\(coin)积分!"
                }
            }
        }).disposed(by: disposeBag)
    }
            @IBAction func backHomeAction(_ sender: UIButton) {
                        backAction()
            }
    @IBAction func backHomeAction(_ sender: UIButton) {
        backAction()
    }
            @IBAction func nextAction(_ sender: UIButton) {
    @IBAction func nextAction(_ sender: UIButton) {
                        var toVC:UIViewController?
                        for subv in self.navigationController?.viewControllers ?? []{
                                    if subv is HomeListenVC{
                                                toVC = subv;break
                                    }
                        }
        var toVC:UIViewController?
        for subv in self.navigationController?.viewControllers ?? []{
            if subv is HomeListenVC{
                toVC = subv;break
            }
        }
                        if toVC == nil{
                                    self.navigationController?.popToRootViewController(animated: true)
                        }else{
                                    let nextType = ListenType(rawValue: viewModel.listenType.value.rawValue + 1)!
        if toVC == nil{
            self.navigationController?.popToRootViewController(animated: true)
        }else{
            let nextType = ListenType(rawValue: viewModel.listenType.value.rawValue + 1)!
                                    sceneDelegate?.startTimer()
            sceneDelegate?.startTimer()
                                    switch nextType {
                                                case .lesson2:
                                                            Services.pictureSelectVoice(day:viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in
                                                                        guard let weakSelf = self else { return }
                                                                        if let data = result.data{
                                                                                    let fightVC = HomeListenFightVC(listenType: .lesson2,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                                                                                    fightVC.title = ListenType.lesson2.rawTitle
                                                                                    fightVC.data = data
                                                                                    fightVC.studyScheduleModel = weakSelf.studyScheduleModel
                                                                                    weakSelf.push(vc: fightVC)
                                                                        }
                                                            }).disposed(by: disposeBag)
            switch nextType {
            case .lesson2:
                Services.pictureSelectVoice(day:viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in
                    guard let weakSelf = self else { return }
                    if let data = result.data{
                        let fightVC = HomeListenFightVC(listenType: .lesson2,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                        fightVC.title = ListenType.lesson2.rawTitle
                        fightVC.data = data
                        fightVC.studyScheduleModel = weakSelf.studyScheduleModel
                        weakSelf.push(vc: fightVC)
                    }
                }).disposed(by: disposeBag)
                                                case .lesson3:
                                                            Services.induceExclude(day: viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in
                                                                        guard let weakSelf = self else { return }
                                                                        if let data = result.data{
                                                                                    let fightVC = HomeListenFightVC(listenType: .lesson3,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                                                                                    fightVC.title = ListenType.lesson3.rawTitle
                                                                                    fightVC.data = data
                                                                                    fightVC.studyScheduleModel = weakSelf.studyScheduleModel
                                                                                    weakSelf.push(vc: fightVC)
                                                                        }
                                                            }).disposed(by: disposeBag)
            case .lesson3:
                Services.induceExclude(day: viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in
                    guard let weakSelf = self else { return }
                    if let data = result.data{
                        let fightVC = HomeListenFightVC(listenType: .lesson3,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                        fightVC.title = ListenType.lesson3.rawTitle
                        fightVC.data = data
                        fightVC.studyScheduleModel = weakSelf.studyScheduleModel
                        weakSelf.push(vc: fightVC)
                    }
                }).disposed(by: disposeBag)
                                                case .lesson4:
                                                            Services.questionsAndAnswers(day: viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in
                                                                        guard let weakSelf = self else { return }
                                                                        if let data = result.data{
                                                                                    let fightVC = HomeListenFightVC(listenType: .lesson4,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                                                                                    fightVC.title = ListenType.lesson4.rawTitle
                                                                                    fightVC.data = data
                                                                                    fightVC.studyScheduleModel = weakSelf.studyScheduleModel
                                                                                    weakSelf.push(vc: fightVC)
                                                                        }
                                                            }).disposed(by: disposeBag)
            case .lesson4:
                Services.questionsAndAnswers(day: viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in
                    guard let weakSelf = self else { return }
                    if let data = result.data{
                        let fightVC = HomeListenFightVC(listenType: .lesson4,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                        fightVC.title = ListenType.lesson4.rawTitle
                        fightVC.data = data
                        fightVC.studyScheduleModel = weakSelf.studyScheduleModel
                        weakSelf.push(vc: fightVC)
                    }
                }).disposed(by: disposeBag)
                                                case .lesson5:
                                                            Services.pictureMateVoice(day: viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in
                                                                        guard let weakSelf = self else { return }
                                                                        if let data = result.data{
                                                                                    let fightVC = HomeListenFightVC(listenType: .lesson5,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                                                                                    fightVC.title = ListenType.lesson5.rawTitle
                                                                                    fightVC.data = data
                                                                                    fightVC.studyScheduleModel = weakSelf.studyScheduleModel
                                                                                    weakSelf.push(vc: fightVC)
                                                                        }
                                                            }).disposed(by: disposeBag)
            case .lesson5:
                Services.pictureMateVoice(day: viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in
                    guard let weakSelf = self else { return }
                    if let data = result.data{
                        let fightVC = HomeListenFightVC(listenType: .lesson5,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                        fightVC.title = ListenType.lesson5.rawTitle
                        fightVC.data = data
                        fightVC.studyScheduleModel = weakSelf.studyScheduleModel
                        weakSelf.push(vc: fightVC)
                    }
                }).disposed(by: disposeBag)
                                                default:break
                                    }
                        }
            }
            default:break
            }
        }
    }
            private func backAction(){
                        for vc in navigationController?.viewControllers ?? []{
                                    if vc.isKind(of: HomeListenVC.self){
                                                navigationController?.popToViewController(vc, animated: true);break
                                    }
                        }
            }
    private func backAction(){
        for vc in navigationController?.viewControllers ?? []{
            if vc.isKind(of: HomeListenVC.self){
                navigationController?.popToViewController(vc, animated: true);break
            }
        }
    }
}