From f2e891eecfac25bf6aed38c8eadfdf05704b16b6 Mon Sep 17 00:00:00 2001 From: 无故事王国 <841720330@qq.com> Date: 星期四, 20 六月 2024 18:48:39 +0800 Subject: [PATCH] fix --- DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift | 1 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift | 2 DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.swift | 4 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift | 33 ++++-- DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift | 18 +++ DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift | 10 + DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift | 17 +++ DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift | 7 + DolphinEnglishLearnStudent/Services/Services.swift | 17 +++ DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift | 6 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.swift | 6 + DolphinEnglishLearnStudent/Moudle/Market/MarketVC.xib | 16 +- DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.xib | 18 ++- DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageVC.swift | 4 DolphinEnglishLearnStudent/SceneDelegate.swift | 27 ++++ DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift | 2 DolphinEnglishLearnStudent/Login/LoginVC.swift | 2 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift | 3 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift | 21 ++++ DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.swift | 6 DolphinEnglishLearnStudent/Services/NetworkRequest.swift | 4 DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.xib | 5 - DolphinEnglishLearnStudent/Models/CommonModel.swift | 2 DolphinEnglishLearnStudent/Moudle/Market/MarketVC.swift | 2 DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift | 31 ++++-- DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift | 20 +++ 26 files changed, 212 insertions(+), 72 deletions(-) diff --git a/DolphinEnglishLearnStudent/Login/LoginVC.swift b/DolphinEnglishLearnStudent/Login/LoginVC.swift index 6780bac..fc4c902 100644 --- a/DolphinEnglishLearnStudent/Login/LoginVC.swift +++ b/DolphinEnglishLearnStudent/Login/LoginVC.swift @@ -80,7 +80,7 @@ guard authInputPhone() else {return} guard authInputCode() else {return} - guard btn_isRead.isEnabled else { + guard btn_isRead.isSelected else { alert(msg: "请阅读并同意《隐私协议》《用户协议》");return } diff --git a/DolphinEnglishLearnStudent/Models/CommonModel.swift b/DolphinEnglishLearnStudent/Models/CommonModel.swift index abf036d..8c6c47a 100644 --- a/DolphinEnglishLearnStudent/Models/CommonModel.swift +++ b/DolphinEnglishLearnStudent/Models/CommonModel.swift @@ -111,6 +111,7 @@ var good: MarketModel? var goodTypes = [MarketTypeModel]() var orderNumber: String = "" + var residueNumber:Int? var recipient: MarketRecipientModel? } @@ -237,6 +238,7 @@ var totalIntegral = 0 var type = 0 var week = 0 + var canStudy = 0 } class ListenNewModel:HandyJSON{ diff --git a/DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift index 365ae9e..363892a 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift @@ -47,11 +47,11 @@ self.page = page self.listenNewModel = listenNewModel } - + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - + override func viewDidLoad() { super.viewDidLoad() navigationItem.titleView = UIView() @@ -107,7 +107,6 @@ NotificationCenter.default.post(name: NextLession_Noti, object: nil) weakSelf.viewModel.answerType.accept(.none) weakSelf.viewModel.selectIndex.accept(nil) - weakSelf.rootViewModel.answerItems[weakSelf.page] = weakSelf.listenNewModel.subjectList[weakSelf.page] weakSelf.isListen = false } return @@ -172,6 +171,18 @@ collectionView.reloadData() } + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout + let w = (self.collectionView.size.width - flowLayout.minimumLineSpacing) / 2 + let h = (self.collectionView.size.height - flowLayout.minimumInteritemSpacing) / 2 + + if flowLayout.itemSize.width != w || flowLayout.itemSize.height != h{ + flowLayout.itemSize = CGSize(width: w, height: h) + collectionView.reloadData() + } + } + override func setRx() { viewModel.selectIndex.subscribe(onNext: {[weak self] index in guard let weakSelf = self else { return } @@ -189,6 +200,10 @@ self?.isAnsterComplete = true VoicePlayer.share().playSuccessVoice() + + let teamId = weakSelf.listenNewModel.data?.id.components(separatedBy: ",")[weakSelf.page] + weakSelf.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].id) + DispatchQueue.main.asyncAfter(deadline: .now()+2) { VoicePlayer.share().playerAt(url: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].correct) } @@ -207,8 +222,7 @@ self?.answerSuccess(cell) case .fail: self?.viewModel.answerType.accept(.fail) -// self?.collectionView.isUserInteractionEnabled = false - self?.answerFail(errorSound: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].error) + self?.collectionView.reloadData() default:break } } @@ -230,11 +244,6 @@ }completion: { _ in self.collectionView.reloadData() } - } - - private func answerFail(errorSound:String?){ - self.collectionView.reloadData() - VoicePlayer.share().playerAt(url: errorSound) } } @@ -272,7 +281,7 @@ isListen = false self.view.isUserInteractionEnabled = false } - + func playComplete() { isListen = true self.view.isUserInteractionEnabled = true diff --git a/DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift index c968cbf..217d531 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift @@ -31,6 +31,13 @@ } } }).disposed(by: disposeBag) + + Services.onlineDuration().subscribe(onNext: { data in + if let time = data.data{ + sceneDelegate?.globalTimeval = time + sceneDelegate?.startTimer() + } + }).disposed(by: disposeBag) } @IBAction func listenAction(_ sender: UIButton) { diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift index a7ca965..9d5ac26 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift @@ -24,6 +24,7 @@ image_state.alpha = 0 image_state.transform = .init(scaleX: 0.1, y: 0.1) label_title.isHidden = true + image_cover.contentMode = .scaleToFill } func setState(state:Fight_lessonType){ diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift index 65014de..c8b282f 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift @@ -44,6 +44,12 @@ case none } + +//中途退出所需要 +class ExitLearnModel{ + var topicsIds = Set<Int>() +} + class HomeListenFightViewModel{ /// 当前页数 @@ -75,6 +81,17 @@ //所有回答的 var answerItems = Dictionary<Int,Any>() //{page:0,data:String,currectAt:0} var answerCount = BehaviorRelay<Int>(value: 1) + + var answerItems_1 = Dictionary<String,Set<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!]!.insert(answerId) + } } class HomeListenFightVC: BaseVC { @@ -328,7 +345,6 @@ switch viewModel.listenType.value { case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5: let data = (data as! ListenNewModel).data - ids = data?.id ?? "" toalIntegral = data?.integral ?? 0 default:break } @@ -396,21 +412,14 @@ CommonAlertView.show(content: "未完成全部答题,确认退出吗?") {[weak self] () in guard let weakSelf = self else { return } - var temIds = [String]() - var topicIds = [String]() - for v in weakSelf.viewModel.answerItems.values{ - if let v = v as? Listen1Model{ - temIds.append("\(v.data?.id ?? 0)") - for sV in v.subjectList{ - topicIds.append("\(sV.id)") - } - } - } + let topicIds = weakSelf.viewModel.answerItems_1.keys.sorted() + let temIds = weakSelf.viewModel.answerItems_1.values.flatMap({$0}).map({"\($0)"}) switch weakSelf.viewModel.listenType.value{ case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5: if temIds.count > 0 && topicIds.count > 0{ - Services.exitLearning(type:weakSelf.viewModel.listenType.value.rawValue,week: weakSelf.viewModel.week.value!, day: weakSelf.viewModel.day.value!, teamIds: temIds, topicIds: topicIds).subscribe(onNext: { data in + let totalNum = weakSelf.viewModel.correctNum + weakSelf.viewModel.errorNum + Services.exitLearning(type:weakSelf.viewModel.listenType.value.rawValue,week: weakSelf.viewModel.week.value!, day: weakSelf.viewModel.day.value!, teamIds: temIds, topicIds: topicIds,answerNumber: totalNum,correctNumber:weakSelf.viewModel.correctNum,studyTime:weakSelf.viewModel.times).subscribe(onNext: { data in }).disposed(by: weakSelf.disposeBag) } diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift index 9c1308d..6e0cb04 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift @@ -81,6 +81,18 @@ } + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout + let w = (self.collectionView.size.width - flowLayout.minimumLineSpacing) / 2 + let h = (self.collectionView.size.height - flowLayout.minimumInteritemSpacing) / 2 + + if flowLayout.itemSize.width != w || flowLayout.itemSize.height != h{ + flowLayout.itemSize = CGSize(width: w, height: h) + collectionView.reloadData() + } + } + override func setUI() { super.setUI() @@ -162,7 +174,9 @@ if handleView.vioceSoundUrl == weakSelf.listenNewModel.subjectList[weakSelf.page][row].correct{ lessionType = .success weakSelf.voicePlayer.playSuccessVoice() -// weakSelf.voicePlayer.playerInterrupt() + let teamId = weakSelf.listenNewModel.data?.id.components(separatedBy: ",")[weakSelf.page] + let answerId = weakSelf.listenNewModel.subjectList[weakSelf.page][row].id + weakSelf.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: answerId) }else{ lessionType = .fail weakSelf.voicePlayer.playFailVoice() @@ -255,7 +269,7 @@ playedIndex.removeAll() let newRow = viewModel.selectIndex.value!.row+1 if newRow >= listenNewModel.subjectList[page].count{ //防止坐标越界 - rootViewModel.answerItems[page] = listenNewModel.subjectList[page] +// rootViewModel.answerItems[page] = listenNewModel.subjectList[page] NotificationCenter.default.post(name: NextLession_Noti, object: nil);return } diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift index e8e54e7..defdd6f 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift @@ -103,6 +103,18 @@ } + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout + + let w = (collectionView.size.width - flowLayout.minimumLineSpacing) / 3.1 + let h = (collectionView.size.height - flowLayout.minimumInteritemSpacing) / 2 - 40 + if flowLayout.itemSize.width != w || flowLayout.itemSize.height != h{ + flowLayout.itemSize = CGSize(width: w, height: h) + collectionView.reloadData() + } + } + private func setAnswerStackView(force:Bool = false){ @@ -153,7 +165,7 @@ @objc private func chooseAnswerAction(btn:UIButton){ - guard viewModel.selectIndex != nil else {return} + guard viewModel.selectIndex.value != nil else {return} if !islisten{ alertError(msg: "请先听题");return @@ -240,6 +252,11 @@ } completion: { _ in self.answterCount += 1 self.voicePlayer.playerAt(url: self.listenNewModel.subjectList[self.page][valueIndex].correct) + + let teamId = self.listenNewModel.data?.id.components(separatedBy: ",")[self.page] + let answerId = self.listenNewModel.subjectList[self.page][valueIndex].id + self.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: answerId) + DispatchQueue.main.asyncAfter(deadline: .now()+1.0) { self.setAnswerStackView() let v = self.rootViewModel.answerCount.value + 1 @@ -395,7 +412,6 @@ if self.answterCount == 3{ - self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page] NotificationCenter.default.post(name: NextLession_Noti, object: nil) return } diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift index 98b453e..c58e709 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift @@ -109,6 +109,19 @@ } } + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout + + let w = (collectionView.size.width - flowLayout.minimumLineSpacing) / 2 + let h = (collectionView.size.height - flowLayout.minimumInteritemSpacing) / 2.1 + + if flowLayout.itemSize.width != w || flowLayout.itemSize.height != h{ + flowLayout.itemSize = CGSize(width: w, height: h) + collectionView.reloadData() + } + } + private func setAnswerStackView(){ guard let selectIndex = viewModel.selectIndex.value else{ @@ -206,6 +219,12 @@ if tempSubV?.voiceUrl == answerModel?.correct{ answerType = .success voicePlayer.playSuccessVoice() + + let teamId = self.listenNewModel.data?.id.components(separatedBy: ",")[self.page] + let answerId = answerModel!.id + self.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: answerId) + + DispatchQueue.main.asyncAfter(deadline: .now()+2) { self.voicePlayer.playerAt(url: tempSubV!.voiceUrl) } @@ -261,7 +280,7 @@ if self.answerIndexs.count == 2{ let v = self.rootViewModel.answerCount.value + 1 self.rootViewModel.answerCount.accept(v) - self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page] +// self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page] self.voicePlayer.playerEnd() NotificationCenter.default.post(name: NextLession_Noti, object: nil) self.voicePlayer.playerEnd() diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift index c9ecc86..2321d82 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift @@ -114,6 +114,19 @@ setAnswerStackView() } + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout + + let w = (collectionView.size.width - flowLayout.minimumLineSpacing) / 2 + let h = (collectionView.size.height - flowLayout.minimumInteritemSpacing) / 2.0 + + if flowLayout.itemSize.width != w || flowLayout.itemSize.height != h{ + flowLayout.itemSize = CGSize(width: w, height: h) + collectionView.reloadData() + } + } + override func setRx() { } @@ -213,6 +226,8 @@ if answer.id == selectAnswer.id{ answerType = .success voicePlayer.playSuccessVoice() + let teamId = listenNewModel.data?.id.components(separatedBy: ",")[page] + rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: selectAnswer.id) }else{ answerType = .fail voicePlayer.playFailVoice() @@ -318,7 +333,7 @@ DispatchQueue.main.asyncAfter(deadline: .now()+0.4) { if self.answterCount >= 4{ - self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page] +// self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page] self.voicePlayer.playerEnd() NotificationCenter.default.post(name: NextLession_Noti, object: nil) } diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.swift index 2e1d3ae..020b78d 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.swift @@ -63,6 +63,12 @@ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let model = dataItems[selectIndexPath.row][indexPath.row] + + guard model.canStudy == 1 else { + CommonAlertView.show(isSinple: true, content: "请先完成上一周练习") + return + } + Services.studySchedule(week: model.week).subscribe(onNext: {[weak self]data in guard let weakSelf = self else { return } if let model = data.data{ diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift index c4f1489..5f80900 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift @@ -40,6 +40,8 @@ tableView.delegate = self tableView.dataSource = self tableView.separatorStyle = .none + tableView.showsVerticalScrollIndicator = false + tableView.showsHorizontalScrollIndicator = false tableView.backgroundColor = Config.ThemeBGColor tableView.register(UINib(nibName: "HomeListen_process_TCell", bundle: nil), forCellReuseIdentifier: "_HomeListen_process_TCell") tableView.register(UINib(nibName: "HomeListen_item_TCell", bundle: nil), forCellReuseIdentifier: "_HomeListen_item_TCell") diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift index 6e49502..4acaad4 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift @@ -74,6 +74,9 @@ override func setUI() { super.setUI() + //解决返回按钮区域过小,点击不灵敏 + title = " " + let topMenuView = UIView() topMenuView.backgroundColor = .white topMenuView.jq_cornerRadius = 8 diff --git a/DolphinEnglishLearnStudent/Moudle/Market/MarketVC.swift b/DolphinEnglishLearnStudent/Moudle/Market/MarketVC.swift index 86b439a..15840e1 100644 --- a/DolphinEnglishLearnStudent/Moudle/Market/MarketVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Market/MarketVC.swift @@ -17,7 +17,7 @@ let menuTypes = BehaviorRelay<[MarketTypeModel]>(value:[]) var selectMenuTypes = Set<MarketTypeModel>(){ didSet{ - types.accept(selectMenuTypes.map({$0.name})) + types.accept(selectMenuTypes.map({"\($0.id)"})) beginRefresh() } } diff --git a/DolphinEnglishLearnStudent/Moudle/Market/MarketVC.xib b/DolphinEnglishLearnStudent/Moudle/Market/MarketVC.xib index 069bbb0..35335b9 100644 --- a/DolphinEnglishLearnStudent/Moudle/Market/MarketVC.xib +++ b/DolphinEnglishLearnStudent/Moudle/Market/MarketVC.xib @@ -79,16 +79,16 @@ </userDefinedRuntimeAttributes> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="82B-Dg-Sap"> - <rect key="frame" x="946" y="102" width="13" height="29"/> + <rect key="frame" x="940" y="98" width="19" height="44"/> <constraints> - <constraint firstAttribute="height" constant="29" id="wW2-Vh-riV"/> + <constraint firstAttribute="height" constant="44" id="yC7-fJ-c6s"/> </constraints> - <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="24"/> + <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="36"/> <color key="textColor" red="0.99607843139999996" green="0.14117647059999999" blue="0.050980392159999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="剩余积分:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A9t-n3-Bmf"> - <rect key="frame" x="867" y="105.5" width="74" height="22"/> + <rect key="frame" x="861" y="109" width="74" height="22"/> <constraints> <constraint firstAttribute="height" constant="22" id="YFs-Uk-JaX"/> </constraints> @@ -97,7 +97,7 @@ <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品分类:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Jg0-dG-OCI"> - <rect key="frame" x="65" y="105.5" width="74" height="22"/> + <rect key="frame" x="65" y="109" width="74" height="22"/> <constraints> <constraint firstAttribute="height" constant="22" id="tki-uv-Hgf"/> </constraints> @@ -106,7 +106,7 @@ <nil key="highlightedColor"/> </label> <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="OCn-Jg-gWg"> - <rect key="frame" x="152" y="96" width="705" height="41"/> + <rect key="frame" x="152" y="99.5" width="699" height="41"/> <constraints> <constraint firstAttribute="height" constant="41" id="A5O-nk-89N"/> </constraints> @@ -118,7 +118,7 @@ </collectionViewFlowLayout> </collectionView> <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="EPp-Vf-S4a"> - <rect key="frame" x="0.0" y="159" width="1024" height="1207"/> + <rect key="frame" x="0.0" y="162.5" width="1024" height="1203.5"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="YMW-eo-TCY"> <size key="itemSize" width="128" height="128"/> @@ -134,7 +134,7 @@ <constraint firstItem="82B-Dg-Sap" firstAttribute="trailing" secondItem="Unb-0E-8fJ" secondAttribute="trailing" id="04D-Ur-Vzd"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Unb-0E-8fJ" secondAttribute="trailing" constant="65" id="9yv-3Y-78Y"/> <constraint firstItem="Unb-0E-8fJ" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="65" id="O97-uk-THq"/> - <constraint firstItem="82B-Dg-Sap" firstAttribute="top" secondItem="Unb-0E-8fJ" secondAttribute="bottom" constant="28" id="OiX-TJ-i3e"/> + <constraint firstItem="82B-Dg-Sap" firstAttribute="top" secondItem="Unb-0E-8fJ" secondAttribute="bottom" constant="24" id="OiX-TJ-i3e"/> <constraint firstItem="A9t-n3-Bmf" firstAttribute="leading" secondItem="OCn-Jg-gWg" secondAttribute="trailing" constant="10" id="Q2g-q0-rku"/> <constraint firstItem="OCn-Jg-gWg" firstAttribute="leading" secondItem="Jg0-dG-OCI" secondAttribute="trailing" constant="13" id="Rup-A4-pfm"/> <constraint firstItem="82B-Dg-Sap" firstAttribute="centerY" secondItem="A9t-n3-Bmf" secondAttribute="centerY" id="bHH-o4-cLV"/> diff --git a/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift b/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift index 5c3d940..87d84d4 100644 --- a/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift @@ -67,8 +67,8 @@ var info_Array = Array<String>() - if m.good?.surplus != nil{ - info_Array.append("剩余数量:\(m.good?.surplus ?? 0)") + if m.residueNumber != nil{ + info_Array.append("剩余数量:\(m.residueNumber ?? 0)") } if m.good?.userCount != nil{ @@ -113,7 +113,7 @@ @IBAction func exchangeAction(_ sender: UIButton) { - guard viewModel.detailModel.value?.good?.surplus != 0 else { + guard viewModel.detailModel.value?.residueNumber != 0 else { CommonAlertView.show(isSinple: true, content: "兑换失败,当前剩余数量不足!") { } diff --git a/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift b/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift index b59ad1b..2766de6 100644 --- a/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift @@ -106,11 +106,17 @@ if viewModel.address.value.count == 0{ let vc = AddressManageVC(type: .handle) vc.title = "地址管理" + vc.chooseAddress {[weak self] m in + self?.label_address.text = m.address + self?.label_address_info.text = m.recipient + "|" + m.recipientPhone + self?.recipientId = m.id + self?.label_address_info.isHidden = false + } push(vc: vc) return } - let vc = AddressManageVC(type: .choose) + let vc = AddressManageVC(type: .handle) vc.title = "地址管理" vc.chooseAddress {[weak self] m in self?.label_address.text = m.address @@ -140,7 +146,7 @@ guard recipientId != nil else{ CommonAlertView.show(content: "请先选择收货地址") { - let vc = AddressManageVC(type: .choose) + let vc = AddressManageVC(type: .handle) vc.title = "地址管理" vc.chooseAddress {[weak self] m in self?.label_address.text = m.address diff --git a/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.xib b/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.xib index 0b1617c..2147f9a 100644 --- a/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.xib +++ b/DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.xib @@ -103,22 +103,25 @@ </constraints> </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_gray" translatesAutoresizingMaskIntoConstraints="NO" id="jKh-8m-ogE"> - <rect key="frame" x="536" y="40" width="6" height="10"/> + <rect key="frame" x="530" y="40" width="12" height="10"/> + <constraints> + <constraint firstAttribute="width" constant="12" id="0Vb-aw-7BH"/> + </constraints> </imageView> - <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="ZAd-Ha-PgP"> - <rect key="frame" x="14" y="25.5" width="36" height="39.5"/> + <stackView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="ZAd-Ha-PgP"> + <rect key="frame" x="14" y="25.5" width="502" height="39.5"/> <subviews> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ph9-Ra-CxP"> - <rect key="frame" x="0.0" y="0.0" width="36" height="20"/> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ph9-Ra-CxP"> + <rect key="frame" x="0.0" y="0.0" width="502" height="20"/> <constraints> - <constraint firstAttribute="height" constant="20" id="cgw-w2-dsN"/> + <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="cgw-w2-dsN"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.011764705882352941" green="0.015686274509803921" blue="0.019607843137254902" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Hns-QV-baw"> - <rect key="frame" x="0.0" y="25" width="36" height="14.5"/> + <rect key="frame" x="0.0" y="25" width="502" height="14.5"/> <fontDescription key="fontDescription" type="system" pointSize="12"/> <nil key="textColor"/> <nil key="highlightedColor"/> @@ -135,6 +138,7 @@ <constraint firstItem="5h7-8X-cXI" firstAttribute="leading" secondItem="sfn-3Q-b7V" secondAttribute="leading" id="g86-ED-gAW"/> <constraint firstAttribute="trailing" secondItem="jKh-8m-ogE" secondAttribute="trailing" constant="14" id="on7-ez-QYT"/> <constraint firstItem="ZAd-Ha-PgP" firstAttribute="centerY" secondItem="sfn-3Q-b7V" secondAttribute="centerY" id="qhc-bm-AqF"/> + <constraint firstItem="jKh-8m-ogE" firstAttribute="leading" secondItem="ZAd-Ha-PgP" secondAttribute="trailing" constant="14" id="rNk-IQ-9WA"/> </constraints> <connections> <action selector="addressAction:" destination="-1" eventType="touchUpInside" id="fj4-mV-Wor"/> diff --git a/DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift b/DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift index 756da6f..b04f039 100644 --- a/DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift +++ b/DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift @@ -70,7 +70,7 @@ } @IBAction func handleAction(_ sender: UIButton) { - let vc = AddressManageVC(type: .choose) + let vc = AddressManageVC(type: .handle) vc.title = "修改地址" vc.chooseAddress { m in CommonAlertView.show(content: "确认修改当前收货地址吗?") {[weak self] () in diff --git a/DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.xib b/DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.xib index 82c7c28..108dfe1 100644 --- a/DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.xib +++ b/DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.xib @@ -166,11 +166,6 @@ <rect key="frame" x="90.5" y="0.0" width="778.5" height="54"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <textInputTraits key="textInputTraits"/> - <userDefinedRuntimeAttributes> - <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength"> - <integer key="value" value="11"/> - </userDefinedRuntimeAttribute> - </userDefinedRuntimeAttributes> </textField> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1bK-P9-OGL"> <rect key="frame" x="0.0" y="53.5" width="888" height="0.5"/> diff --git a/DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageVC.swift b/DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageVC.swift index aa39351..f688d40 100644 --- a/DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageVC.swift @@ -65,7 +65,7 @@ } - tableView = UITableView(frame: .zero, style: .plain) + tableView = UITableView(frame: .zero, style: .grouped) tableView.delegate = self tableView.dataSource = self tableView.backgroundColor = .clear @@ -105,11 +105,9 @@ extension AddressManageVC:UITableViewDelegate{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - if addressManageType == .choose{ let model = viewModel.dataSource.value[indexPath.row] clouse?(model) self.navigationController?.popViewController() - } } } diff --git a/DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.swift b/DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.swift index 6db38ea..a4869b7 100644 --- a/DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.swift @@ -42,6 +42,8 @@ view_menuTitle.jq_addCorners(corner: [.topLeft,.topRight], radius: 20) tableView.delegate = self tableView.dataSource = self + tableView.showsVerticalScrollIndicator = false + tableView.showsHorizontalScrollIndicator = false tableView.register(UINib(nibName: "Home_1_TCell", bundle: nil), forCellReuseIdentifier: "_Home_1_TCell") tableView.separatorStyle = .none } @@ -58,7 +60,7 @@ @IBAction func chooseDateTimeAction(_ sender: UIButton) { let year = viewModel.selectDate.value?.jq_nowYear() ?? Date().jq_nowYear() let month = viewModel.selectDate.value?.jq_nowMonth() ?? Date().jq_nowMonth() - BitrhdayPickerView.show(title: "查询时间", type: .YM, defaultYear: year, defaultMonth: month, defaultDay: 0, minYear: 0) {[weak self] date in + BitrhdayPickerView.show(title: "查询时间", type: .YM, defaultYear: year, defaultMonth: month, defaultDay: 0, minYear: 2021) {[weak self] date in self?.viewModel.selectDate.accept(date) self?.viewModel.beginRefresh() } diff --git a/DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.swift b/DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.swift index 01d5fff..bfdba71 100644 --- a/DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.swift +++ b/DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.swift @@ -15,7 +15,7 @@ @IBOutlet weak var btn_close: UIButton! @IBOutlet weak var cons_btnClose: NSLayoutConstraint! - private var clouse:(()->Void)! + private var clouse:(()->Void)? override func awakeFromNib() { super.awakeFromNib() self.alpha = 0 @@ -23,7 +23,7 @@ layoutIfNeeded() } - static func show(isSinple:Bool = false, content:String,clouse:@escaping ()->Void){ + static func show(isSinple:Bool = false, content:String,clouse:( ()->Void)? = nil){ let commonAlertView = CommonAlertView.jq_loadNibView() sceneDelegate?.window?.addSubview(commonAlertView) commonAlertView.label_content.text = content @@ -60,7 +60,7 @@ self.view_container.transform = .init(scaleX: 0.1, y: 0.1) } completion: { _ in self.removeFromSuperview() - self.clouse() + self.clouse?() } } } diff --git a/DolphinEnglishLearnStudent/SceneDelegate.swift b/DolphinEnglishLearnStudent/SceneDelegate.swift index 16c7ef8..ec8d9ae 100644 --- a/DolphinEnglishLearnStudent/SceneDelegate.swift +++ b/DolphinEnglishLearnStudent/SceneDelegate.swift @@ -11,11 +11,13 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? + var globalTimeval:Int? + var timer:Timer? private var disposeBag = JQ_disposeBag func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } - + UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: "scheduledTimer") window = UIWindow(windowScene: windowScene) window?.frame = windowScene.coordinateSpace.bounds if #available(iOS 13.0, *) { @@ -25,9 +27,8 @@ SVProgressHUD.setMaximumDismissTimeInterval(1.5) SVProgressHUD.setDefaultMaskType(.custom) - guard let tokenModel = LoginTokenModel.getToken(),!LoginTokenModel.isOverdue() else { - needLogin() - return + guard !LoginTokenModel.isOverdue() else { + needLogin();return } loginSuccess() @@ -89,5 +90,23 @@ LoginTokenModel.clearToken() } + + func startTimer(){ + guard let timeval = globalTimeval else {return} + timer = Timer.scheduledTimer(withTimeInterval: 60, repeats: true) {[weak self] timer in + guard let weakSelf = self else { return } + if let v = UserDefaults.standard.object(forKey: "scheduledTimer") as? TimeInterval{ + if Date().timeIntervalSince1970 - v > Double(timeval) * 60.0{ + Services.giveIntegral().subscribe(onNext: { _ in + + }).disposed(by: weakSelf.disposeBag) + UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: "scheduledTimer") + UserDefaults.standard.synchronize() + } + } + } + timer?.fire() + RunLoop.current.add(timer!, forMode: .common) + } } diff --git a/DolphinEnglishLearnStudent/Services/NetworkRequest.swift b/DolphinEnglishLearnStudent/Services/NetworkRequest.swift index 2a4a26f..28a8647 100644 --- a/DolphinEnglishLearnStudent/Services/NetworkRequest.swift +++ b/DolphinEnglishLearnStudent/Services/NetworkRequest.swift @@ -233,9 +233,7 @@ case 504: //登录设备最大限制 break case 503: //登录被冻结 - DispatchQueue.main.async { - alert(msg: next.msg) - } + CommonAlertView.show(isSinple: true, content: next.msg) // case 501: // CommonAlertView.show(title: "提示", content: next.msg,isSingle: true) { _ in // diff --git a/DolphinEnglishLearnStudent/Services/Services.swift b/DolphinEnglishLearnStudent/Services/Services.swift index 8f46a4a..e698ce4 100644 --- a/DolphinEnglishLearnStudent/Services/Services.swift +++ b/DolphinEnglishLearnStudent/Services/Services.swift @@ -322,7 +322,7 @@ return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding.default, progress: true) } - class func exitLearning(type:Int,week:Int,day:Int,teamIds:[String],topicIds:[String])->Observable<BaseResponse<SimpleModel>>{ + class func exitLearning(type:Int,week:Int,day:Int,teamIds:[String],topicIds:[String],answerNumber:Int,correctNumber:Int,studyTime:Int)->Observable<BaseResponse<SimpleModel>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/study/exitLearning") .append(key: "week", value: week) @@ -330,6 +330,9 @@ .append(key: "teamIds", value: teamIds.joined(separator: ",")) .append(key: "topicIds", value: topicIds.joined(separator: ",")) .append(key: "type", value: type) + .append(key: "answerNumber", value: answerNumber) + .append(key: "correctNumber", value: correctNumber) + .append(key: "studyTime", value: studyTime) return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding.default, progress: true) } @@ -340,6 +343,18 @@ .append(key: "recipientId", value: recipientId) return NetworkRequest.request(params: params, method: .get, progress: true) } + + class func onlineDuration()->Observable<BaseResponse<Int>>{ + let params = ParamsAppender.build(url: All_Url) + params.interface(url: "/study/base/study/onlineDuration") + return NetworkRequest.request(params: params, method: .get, progress: false) + } + + class func giveIntegral()->Observable<BaseResponse<SimpleModel>>{ + let params = ParamsAppender.build(url: All_Url) + params.interface(url: "/study/base/study/giveIntegral") + return NetworkRequest.request(params: params, method: .get, progress: false) + } } extension Services{ -- Gitblit v1.7.1