无故事王国
2024-07-04 a4a30347df295a77657a4b87ee3293ef38ece503
fix bug
25个文件已修改
505 ■■■■■ 已修改文件
DolphinEnglishLearnStudent.xcodeproj/project.pbxproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Models/CommonModel.swift 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_4_CCell.swift 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_4_CCell.xib 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_2_VC.swift 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.swift 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/MeVC.swift 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/MeVC.xib 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.xib 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/VIPCenterVC.swift 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/View/ShareView.swift 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Services/Services.swift 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent.xcodeproj/project.pbxproj
@@ -993,6 +993,7 @@
                "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
                CODE_SIGN_STYLE = Manual;
                CURRENT_PROJECT_VERSION = 1;
                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                DEVELOPMENT_TEAM = "";
                "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 5ZV937VB25;
                ENABLE_USER_SCRIPT_SANDBOXING = NO;
DolphinEnglishLearnStudent/Models/CommonModel.swift
@@ -268,6 +268,15 @@
                required init(){}
}
struct TeamScheduleModel:HandyJSON{
                var answerNumber = 0
                var correctNumber = 0
                var teamIds = [Int]() //题组ids
                var topicIds = [Int]() //已回答正确的题目Id
}
struct Listen1DataModel:HandyJSON{
                var createBy: String = ""
                var createTime: String = ""
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
@@ -21,7 +21,6 @@
                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 isAnsterDone:Bool = false //是否已经回答完成[大题]
@@ -42,6 +41,20 @@
                                return collection
                }()
                var rootViewModel:HomeListenFightViewModel!
                var teamScheduleModel:TeamScheduleModel?{
                                didSet{
                                                if let m = teamScheduleModel{
                                                                for v in listenNewModel.subjectList[page]{
                                                                                //已回答
                                                                                if m.topicIds.contains(v.id){
                                                                                                isAnsterModel.insert(v) //记录
                                                                                }
                                                                }
                                                }
                                }
                }
                required init(page:Int,listenNewModel:ListenNewModel){
                                super.init(nibName: nil, bundle: nil)
                                self.page = page
@@ -60,7 +73,7 @@
                                //制造随机
                                listenNewModel.subjectList[page].shuffle()
                                getNextAnswer()
                                getNextAnswer(isFirst: true)
                                menuView?.listenType = .lesson1
                                DispatchQueue.main.asyncAfter(deadline: .now()+2) {
@@ -91,16 +104,14 @@
                                menuView?.resetView()
                                setUI()
                                collectionView.reloadData()
                                getNextAnswer(isFirst: true)
                }
                private func getNextAnswer(){
                /// 下一题
                /// - Parameter isFirst: 是否首次进入,首次页码不+1
                private func getNextAnswer(isFirst:Bool = false){
                                isListen = false
                                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 }
@@ -108,6 +119,8 @@
                                                                weakSelf.viewModel.answerType.accept(.none)
                                                                weakSelf.viewModel.selectIndex.accept(nil)
                                                                weakSelf.isListen = false
                                                                let v = weakSelf.rootViewModel.answerCount.value
                                                                weakSelf.rootViewModel.answerCount.accept(v + 1)
                                                }
                                                return
                                }
@@ -131,6 +144,11 @@
                                DispatchQueue.main.asyncAfter(deadline: .now()+2) {
                                                VoicePlayer.share().playerAt(url: self.randomElement?.correct)
                                                self.menuView?.playing()
                                }
                                if !isAnsterDone && isAnsterModel.count <= 4 && !isFirst{
                                                let v = rootViewModel.answerCount.value
                                                rootViewModel.answerCount.accept(v + 1)
                                }
                }
@@ -289,10 +307,6 @@
                                if isAnsterComplete{
                                                getNextAnswer()
                                                if !isAnsterDone{
                                                                let v = rootViewModel.answerCount.value
                                                                rootViewModel.answerCount.accept(v + 1)
                                                }
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift
@@ -41,15 +41,23 @@
                @IBAction func listenAction(_ sender: UIButton) {
                                Services.goodRecommend().subscribe(onNext: { data in
                                                AwardListView.show(items: data.data ?? []) { _ in
                                                                let listenMenuVC = HomeListenMenuVC()
                                                                listenMenuVC.title = "第一年学习周目选择"
                                                                self.push(vc: listenMenuVC)
                                                }closeClouse: { () in
                                                if (data.data?.count ?? 0) > 0{
                                                                AwardListView.show(items: data.data ?? []) { _ in
                                                                    // not todo
                                                                }closeClouse: { () in
                                                                                let listenMenuVC = HomeListenMenuVC()
                                                                                listenMenuVC.title = "第一年学习周目选择"
                                                                                self.push(vc: listenMenuVC)
                                                                }
                                                }else{
                                                                let listenMenuVC = HomeListenMenuVC()
                                                                listenMenuVC.title = "第一年学习周目选择"
                                                                self.push(vc: listenMenuVC)
                                                }
                                },onError: { error in
                                                let listenMenuVC = HomeListenMenuVC()
                                                listenMenuVC.title = "第一年学习周目选择"
                                                self.push(vc: listenMenuVC)
                                }).disposed(by: disposeBag)
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
@@ -65,10 +65,6 @@
                                contentVoiceView.jq_cornerRadius = 8
                                voice_view.addSubview(contentVoiceView)
                                contentVoiceView.snp.makeConstraints { make in
//                                                make.left.equalTo(40)
//                                                make.right.equalTo(-40)
//                                                make.top.equalTo(55)
//                                                make.bottom.equalTo(-55)
                                                make.center.equalToSuperview()
                                                make.width.equalTo(self.width * 0.66)
                                                make.height.equalTo(self.height * 0.32)
@@ -76,7 +72,7 @@
                                contentVoiceView.addSubview(img1)
                                img1.snp.makeConstraints { make in
                                                make.left.equalTo(23)
                                                make.left.equalTo(self.width * 0.0958)
                                                make.width.height.equalTo(self.width * 0.133)
                                                make.centerY.equalToSuperview()
                                }
@@ -84,8 +80,8 @@
                                contentVoiceView.addSubview(img2)
                                img2.snp.makeConstraints { make in
                                                make.width.equalTo(45)
                                                make.height.equalTo(31)
                                                make.width.equalTo(self.width * 0.1875)
                                                make.height.equalTo(self.width * 0.1292)
                                                make.center.equalToSuperview()
                                }
@@ -93,15 +89,15 @@
                                playBtn.setImage(UIImage(named: "icon_play")?.withTintColor(UIColor(hexString: "#41A2EB")!), for: .normal)
                                contentVoiceView.addSubview(playBtn)
                                playBtn.snp.makeConstraints { make in
                                                make.right.equalTo(-23)
                                                make.width.height.equalTo(32)
                                                make.right.equalTo(-self.width * 0.0958)
                                                make.width.height.equalTo(self.width * 0.133)
                                                make.centerY.equalToSuperview()
                                }
                                addSubview(stateImg)
                                stateImg.snp.makeConstraints { make in
                                                make.center.equalToSuperview()
                                                make.width.height.equalTo(76)
                                                make.width.height.equalTo(self.width * 0.316)
                                }
                                cellResotePay()
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift
@@ -36,6 +36,10 @@
                                                                                self.image_state.alpha = 1
                                                                                self.image_state.transform = .init(scaleX: 1, y: 1)
                                                                }
                                                                UIView.animate(withDuration: 0.5, delay: 3.0) {
                                                                                self.image_state.alpha = 0
                                                                                self.image_state.transform = .init(scaleX: 0.1, y: 0.1)
                                                                }
                                                case .fail:
                                                                image_state.image = UIImage(named: "icon_fail")
                                                                UIView.animate(withDuration: 0.6, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.4, options: .layoutSubviews) {
@@ -43,6 +47,7 @@
                                                                                self.image_state.transform = .init(scaleX: 1, y: 1)
                                                                                UIView.animate(withDuration: 0.5, delay: 3.0) {
                                                                                                self.image_state.alpha = 0
                                                                                                self.image_state.transform = .init(scaleX: 0.1, y: 0.1)
                                                                                }
                                                                }
                                                case .none:
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_4_CCell.swift
@@ -9,7 +9,7 @@
class ListenFight_lesson_4_CCell: UICollectionViewCell {
                @IBOutlet weak var view_handle: UIView!
                @IBOutlet weak var view_handle: TapBtn!
                @IBOutlet weak var img_cover: UIImageView!
                @IBOutlet weak var view_container: UIView!
                @IBOutlet weak var img_state: UIImageView!
@@ -33,17 +33,25 @@
                func playAtIndex(clouse:@escaping(IndexPath)->Void){
                                self.playAtIndexClouse = clouse
                }
                @IBAction func playAction(_ sender: UIButton) {
                func playing(){
                                btn_handle.isHidden = true
                                btn_play.isHidden = true
                                btn_voice.setImage(UIImage(named: "icon_playing"), for: .normal)
                }
                func playEnd(){
                                btn_handle.isHidden = false
                                btn_play.isHidden = false
                                btn_voice.setImage(UIImage(named: "icon_play_1"), for: .normal)
                }
                @IBAction func playAction(_ sender: TapBtn) {
                                if let m = model{
//                                                btn_play.isHidden = true
                                                VoicePlayer.share().playerAt(url: m.correct)
                                                playAtIndexClouse?(indexPath)
//                                                VoicePlayer.share().playEnd {
//                                                                self.btn_play.isHidden = false
//                                                }
                                                playing()
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_4_CCell.xib
@@ -18,24 +18,21 @@
                <rect key="frame" x="0.0" y="0.0" width="597" height="510"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xjz-V8-keG">
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xjz-V8-keG" customClass="TapBtn" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
                        <rect key="frame" x="0.0" y="0.0" width="159" height="52"/>
                        <subviews>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LLy-9v-eQJ">
                                <rect key="frame" x="104" y="10" width="32" height="32"/>
                            <button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LLy-9v-eQJ">
                                <rect key="frame" x="105" y="10" width="31" height="32"/>
                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                <state key="normal" image="icon_play"/>
                                <connections>
                                    <action selector="playAction:" destination="gTV-IL-0wX" eventType="touchUpInside" id="FV8-uE-yj8"/>
                                </connections>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kgj-Ss-D90">
                                <rect key="frame" x="65" y="12.5" width="27" height="27"/>
                            <button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kgj-Ss-D90">
                                <rect key="frame" x="66" y="12.5" width="27" height="27"/>
                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                <state key="normal" image="icon_play_1"/>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZuK-r9-26C">
                                <rect key="frame" x="14" y="9.5" width="33" height="33"/>
                            <button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZuK-r9-26C">
                                <rect key="frame" x="15" y="9.5" width="33" height="33"/>
                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                <state key="normal" image="icon_question"/>
                            </button>
@@ -49,6 +46,7 @@
                            <constraint firstItem="LLy-9v-eQJ" firstAttribute="leading" secondItem="kgj-Ss-D90" secondAttribute="trailing" constant="12" id="MoJ-Ne-mlq"/>
                            <constraint firstAttribute="height" constant="52" id="gfp-ph-1NP"/>
                            <constraint firstItem="kgj-Ss-D90" firstAttribute="leading" secondItem="ZuK-r9-26C" secondAttribute="trailing" constant="18" id="qM1-Yp-Nha"/>
                            <constraint firstItem="kgj-Ss-D90" firstAttribute="centerX" secondItem="Xjz-V8-keG" secondAttribute="centerX" id="x1s-RS-WOb"/>
                            <constraint firstItem="kgj-Ss-D90" firstAttribute="centerY" secondItem="Xjz-V8-keG" secondAttribute="centerY" id="zxl-IP-PhN"/>
                        </constraints>
                        <userDefinedRuntimeAttributes>
@@ -57,6 +55,9 @@
                                <real key="value" value="8"/>
                            </userDefinedRuntimeAttribute>
                        </userDefinedRuntimeAttributes>
                        <connections>
                            <action selector="playAction:" destination="gTV-IL-0wX" eventType="touchUpInside" id="8ns-md-QJB"/>
                        </connections>
                    </view>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OJ6-0b-fVC">
                        <rect key="frame" x="0.0" y="62" width="597" height="438"/>
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
@@ -72,6 +72,7 @@
                                }
                }
                /// 回答错误数量
                var errorNum:Int = 0{
                                didSet{
                                                print("回答错误:\(correctNum)")
@@ -165,7 +166,7 @@
                                                self.viewModel.maxPage.accept(1)
                                }
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
@@ -175,8 +176,8 @@
                                sceneDelegate?.suspendTimer()
                }
    override func viewDidLoad() {
        super.viewDidLoad()
                override func viewDidLoad() {
                                super.viewDidLoad()
                                yy_popBlock = {[weak self] in
                                                self?.quitAction(isPop: true)
@@ -195,7 +196,38 @@
                                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)
                                                                }
                                                                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
                                                                                }
                                                                }
                                                }
                                }).disposed(by: disposeBag)
                }
                override func setUI() {
                                super.setUI()
@@ -298,7 +330,7 @@
                                                                                case .story1,.story2:
                                                                                                if let dict = noti.object as? Dictionary<String,Any>{
                                                                                                                let type = weakSelf.viewModel.listenType.value == .story1 ? 1:2
                                                                                                                let accracy = Int(Double(weakSelf.viewModel.correctNum) / Double(weakSelf.viewModel.correctNum + weakSelf.viewModel.errorNum) * 100)
                                                                                                                let accracy = String(format: "%.0lf", Double(weakSelf.viewModel.correctNum) / Double(weakSelf.viewModel.correctNum + weakSelf.viewModel.errorNum) * 100).int ?? 0
                                                                                                                weakSelf.storyComplete(storyId: dict["storyId"] as! Int, accuracy: accracy, studyTime: weakSelf.viewModel.times, type: type, integral: dict["storyIntegral"] as! Int)
                                                                                                }
                                                                }
@@ -362,17 +394,17 @@
                /// 学习类完成
                /// - Parameter ignorePush: 是否忽略跳转(未完成答题 :true)
                private func studyComplete(){
                                var toalIntegral:Int = 0
                                //                                var toalIntegral:Int = 0
                                let ids:String = viewModel.answerItems_1.keys.sorted().joined(separator: ",")
                                switch viewModel.listenType.value {
                                                case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:
                                                                let data = (data as! ListenNewModel).data
                                                                toalIntegral = data?.integral ?? 0
                                                                //                                                                toalIntegral = data?.integral ?? 0
                                                default:break
                                }
                                //正确率
                                let accracy = Int(Double(viewModel.correctNum) / Double(viewModel.correctNum + viewModel.errorNum) * 100)
                                let accracy = String(format: "%.0lf", Double(viewModel.correctNum) / Double(viewModel.correctNum + viewModel.errorNum) * 100).int ?? 0
                                Services.completeLearing(type: viewModel.listenType.value.rawValue, studyTime: viewModel.times, studyIds: ids, quarter: viewModel.quarter.value!, week: viewModel.week.value!, day: viewModel.day.value!, accracy: accracy).subscribe(onNext: {data in
                                                NotificationCenter.default.post(name: Refresh_ListenSchedule_Noti, object: nil)
@@ -381,9 +413,9 @@
                                timer.invalidate()
                                toalIntegral = floor(Double(toalIntegral) * (Double(accracy) / 100.0)).int
                                //                                toalIntegral = floor(Double(toalIntegral) * (Double(accracy) / 100.0)).int
                                let vc = HomeStudyCompleteVC(totalCoin: toalIntegral,viewModel: viewModel,studyScheduleModel: studyScheduleModel!)
                                let vc = HomeStudyCompleteVC(viewModel: viewModel,studyScheduleModel: studyScheduleModel!)
                                vc.title = viewModel.listenType.value.rawTitle
                                vc.viewModel = viewModel
                                push(vc: vc)
@@ -395,27 +427,27 @@
                                var name = ""
                                var accuracy:Int = 0
                                var totalNum:Double = 0
                                var toalIntegral:Int = 0
                                //                                var toalIntegral:Int = 0
                                if viewModel.listenType.value == .game1{
                                                name = "超级听力"
                                                totalNum =  Double(viewModel.correctNum + viewModel.errorNum)
                                                if totalNum > 0{
                                                                accuracy = Int(Double(viewModel.correctNum) / totalNum * 100)
                                                                accuracy = String(format: "%.0lf", Double(viewModel.correctNum) / totalNum * 100).int ?? 0
                                                }
                                                toalIntegral = floor(Double(integral) * (Double(accuracy) / 100.0)).int
                                                //                                                toalIntegral = floor(Double(integral) * (Double(accuracy) / 100.0)).int
                                }else{
                                                name = "超级记忆"
                                                let v = viewModel.answerItems.first?.value as! Listen1Model
                                                //11887:完成答题页,总题目、错误题目 数量计算逻辑错误(只要是没有答对的题目就算错误题目,不管是否答,相当于错误题目就是总题目减去正确题目)
                                                totalNum = Double(v.photoList.count)
                                                if totalNum > 0 && viewModel.correctNum > 0 && viewModel.errorNum > 0{
                                                                accuracy = Int(Double(viewModel.correctNum) / Double(totalNum) * 100)
                                                                accuracy = String(format: "%.0lf", Double(viewModel.correctNum) / Double(totalNum) * 100).int ?? 0
                                                }
                                                viewModel.errorNum = Int(totalNum) - viewModel.correctNum
                                                toalIntegral = floor(Double(integral) * (Double(accuracy) / 100.0)).int
                                                //                                                toalIntegral = floor(Double(integral) * (Double(accuracy) / 100.0)).int
                                }
                                Services.completeGames(gameId: gameId, gameName: name, difficulty: viewModel.gameLevel.value, accuracy: accuracy, useTime: viewModel.times).subscribe(onNext: {data in
@@ -425,7 +457,7 @@
                                timer.invalidate()
                                let vc = HomeStudyCompleteVC(totalCoin: toalIntegral,totalNum:totalNum.int,viewModel: viewModel,studyScheduleModel: studyScheduleModel!)
                                let vc = HomeStudyCompleteVC(totalNum:totalNum.int,viewModel: viewModel,studyScheduleModel: studyScheduleModel!)
                                vc.title = viewModel.listenType.value.rawTitle
                                vc.viewModel = viewModel
                                push(vc: vc)
@@ -438,7 +470,7 @@
                                                NotificationCenter.default.post(name: StudyCompleteCoinUpdate_Noti, object: data.data ?? 0)
                                }).disposed(by: disposeBag)
                                let vc = HomeStudyCompleteVC(totalCoin: integral,viewModel: viewModel,studyScheduleModel: studyScheduleModel!)
                                let vc = HomeStudyCompleteVC(viewModel: viewModel,studyScheduleModel: studyScheduleModel!)
                                vc.title = viewModel.listenType.value.rawTitle
                                vc.viewModel = viewModel
                                push(vc: vc)
@@ -456,13 +488,13 @@
                                                                                CommonAlertView.show(content: "未完成全部答题,确认退出吗?") {[weak self] () in
                                                                                                guard let weakSelf = self else { return }
                                                                                                for vc in weakSelf.navigationController?.viewControllers ?? []{
                                                                                                                if vc.isKind(of: HomeListenMenuVC.self){
                                                                                                                                weakSelf.navigationController?.popToViewController(vc, animated: true);break
                                                                                                                }
                                                                                                                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
@@ -477,6 +509,23 @@
                                                                storyComplete(storyId: v.data!.id, accuracy: accuracy, studyTime: viewModel.times, type: viewModel.listenType.value == .story1 ? 1:2, integral: v.data!.integral)
                                                }
                                }else if btn_exit.titleLabel?.text == "提交"{
                                                if isPop{
                                                                CommonAlertView.show(content: "未完成全部答题,确认退出吗?") {[weak self] () in
                                                                                guard let weakSelf = self else { return }
                                                                                for vc in weakSelf.navigationController?.viewControllers ?? []{
                                                                                                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 viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{
                                                                if let dict = notiObject{
                                                                                gamesComplete(gameId: dict["gameId"] as! Int,integral: dict["gameIntegral"] as! Int)
@@ -513,13 +562,13 @@
                                                                                                }).disposed(by: weakSelf.disposeBag)
                                                                }
                                                                for vc in weakSelf.navigationController?.viewControllers ?? []{
                                                                                if vc.isKind(of: HomeListenMenuVC.self){
                                                                                                weakSelf.navigationController?.popToViewController(vc, animated: true);break
                                                                                }
                                                                                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
//                                                                                }
                                                                }
                                                }
                                }
@@ -543,8 +592,10 @@
                @objc func beforeAction(){
                                guard (pageVC.currentController as! HomeListenStory_2_VC).isPlayEnd else {
                                                alert(msg: "请听完");return
                                if viewModel.listenType.value == .story2{
                                                guard (pageVC.currentController as! HomeListenStory_2_VC).isPlayEnd else {
                                                                alert(msg: "请听完");return
                                                }
                                }
                                listenFightLine = .before
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
@@ -46,11 +46,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()
@@ -240,8 +240,10 @@
                                //copy试图放在上面进行覆盖
                                let copyHandleView = studyHandleView.copyView()
                                copyHandleView.view_choose.isHidden = true
                                copyHandleView.listenType = .lesson2
                                copyHandleView.isplaying()
                                copyHandleView.vioceSoundUrl = listenNewModel.subjectList[page][self.viewModel.selectIndex.value!.row].correct
                                copyHandleView.btn_state.setImage(nil, for: .normal)
                                copyHandleView.jq_cornerRadius = 0
                                view.addSubview(copyHandleView)
                                view.layoutIfNeeded()
@@ -323,7 +325,7 @@
                                }
                }
                func playComplete() {
                                view.isUserInteractionEnabled = true
                                //对已经播放过的View,进行刷新
@@ -337,12 +339,20 @@
                                                }
                                }
                                for sub in view.subviews{
                                                if let v = sub as? StudyHandleView{
                                                                v.resetView()
                                                }
                                }
                                if viewModel.answerType.value == .success{
                                                let v = rootViewModel.answerCount.value
                                                rootViewModel.answerCount.accept(v + 1)
                                                viewModel.answerType.accept(.none)
                                                DispatchQueue.main.asyncAfter(deadline: .now()+3) {
                                                                self.resetStackView()
                                                                self.viewModel.answerType.accept(.none)
                                                }
                                }
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift
@@ -239,13 +239,15 @@
                                                                rootViewModel.answerCount.accept(v)
                                                }
                                                //正确才记录回答
                                                answerIndexs.insert(answerIndex!)
                                }else{
                                                answerType = .fail
                                                voicePlayer.playFailVoice()
                                                rootViewModel.errorNum += 1
                                }
                                voicePlayer.playerEnd()
                                answerIndexs.insert(answerIndex!)
                                switch answerType {
                                                case .success:
@@ -338,6 +340,10 @@
                                                                cell.img_state.alpha = 1
                                                                cell.img_state.transform = .init(scaleX: 1.0, y: 1.0)
                                                }
                                                UIView.animate(withDuration: 0.4, delay: 3.0) {
                                                                cell.img_state.alpha = 0
                                                                cell.img_state.transform = .init(scaleX: 0.1, y: 0.1)
                                                }
                                }else{
                                                cell.img_state.alpha = 0
                                                cell.img_state.transform = .init(scaleX: 0.1, y: 0.1)
@@ -390,6 +396,10 @@
                func playComplete() {
                                self.view.isUserInteractionEnabled = true
                                if let indexPath = viewModel.selectIndex.value ,let cell = collectionView.cellForItem(at: indexPath) as? ListenFight_lesson_4_CCell{
                                                cell.playEnd()
                                }
                                //回答完成,下一答题
                                if answerIndexs.count == 2{
                                                voicePlayer.playerEnd()
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift
@@ -241,9 +241,11 @@
                                                                answterCount += 1
                                                                rootViewModel.correctNum += 1
                                                                viewModel.answerType.accept(.success)
                                                                label_hint.text = ""
                                                                let copyView = tempSubV.copyView()
                                                                copyView.listenType = .lesson5
                                                                copyView.jq_cornerRadius = 0
                                                                copyView.playUrl = selectAnswer.correct
                                                                let newRect = tempSubV.convert(tempSubV.bounds, to: self.view)
                                                                copyView.frame = CGRect(origin: newRect.origin, size: CGSize(width: 159, height: 52))
@@ -258,7 +260,7 @@
                                                                                if let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: indexPath) as? ListenFight_lesson_1_CCell{
                                                                                                var newRect1 = cell.convert(cell.bounds, to: self.collectionView)
                                                                                                newRect1.origin.x += (collectionView.frame.origin.x + 5)
                                                                                                newRect1.origin.y += 94 + 25
                                                                                                newRect1.origin.y += 94 + 24
                                                                                                UIView.animateKeyframes(withDuration: 0.4, delay: 0,options: .calculationModeLinear) {
                                                                                                                copyView.frame = CGRect(origin: newRect1.origin, size: CGSize(width: flowLayout.itemSize.width - 10 , height: 40))
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift
@@ -262,12 +262,15 @@
                                                                totalCount += 1
                                                                label_class.text = "\(totalCount)"
                                                                viewModel.answerType.accept(.fail)
                                                                timer?.fireDate = .distantFuture
                                                                label_hint.text = "准备听题"
                                                                //移除当前题目
                                                                if let c = currentAnswer{
                                                                                answerSet.remove(c)
                                                                }
                                                                collectionView.reloadData()
                                                                DispatchQueue.main.asyncAfter(deadline: .now()+3) {
                                                                                self.timer?.fireDate = .distantPast
                                                                                self.times = (self.listen1Model?.data?.time ?? 10) + 1
                                                                                self.currentAnswer = self.answerSet.randomElement()
                                                                }
@@ -364,7 +367,8 @@
                                view.isUserInteractionEnabled = false
                                view_studyHandleView.playing()
                                timer?.fireDate = .distantFuture //播放中,暂停计时
                                label_hint.text = "播放中"
//                                label_hint.text = "播放中"
                                label_hint.text = ""
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_2_VC.swift
@@ -48,6 +48,7 @@
                override func viewDidAppear(_ animated: Bool) {
                                super.viewDidAppear(animated)
                                voicePlayer.delegate = self
                                restore()
                }
                override func viewDidDisappear(_ animated: Bool) {
@@ -101,6 +102,7 @@
                }
                func restore(){
                                isPlayEnd = false
                                viewModel.answerType.accept(.none)
                                setUI()
                                collectionView.reloadData()
DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
@@ -26,6 +26,10 @@
                                alpha = 0
                                transform = .init(scaleX: 0.1, y: 0.1)
                                layoutIfNeeded()
                                btn_level1.setTitleColor(.black.withAlphaComponent(0.3), for: .normal)
                                btn_level2.setTitleColor(.black.withAlphaComponent(0.3), for: .normal)
                                btn_level3.setTitleColor(.black.withAlphaComponent(0.3), for: .normal)
                }
                static func show(canLevel:Int,clouse:@escaping (Int)->Void,cancelClouse:@escaping()->Void){
@@ -42,21 +46,18 @@
                                levelView.cancelClouse = cancelClouse
                                sceneDelegate?.window?.addSubview(levelView)
                                levelView.frame = sceneDelegate?.window?.frame ?? .zero
                                levelView.btn_level1.isEnabled = false
                                levelView.btn_level2.isEnabled = false
                                levelView.btn_level3.isEnabled = false
                                switch canLevel {
                                                case 2:
                                                                levelView.btn_level3.isEnabled = true
                                                                levelView.btn_level3.setTitleColor(.black.withAlphaComponent(0.6), for: .normal)
                                                                fallthrough
                                                case 1:
                                                                levelView.btn_level2.isEnabled = true
                                                                levelView.btn_level2.setTitleColor(.black.withAlphaComponent(0.6), for: .normal)
                                                                fallthrough
                                                case 0:
                                                                levelView.btn_level1.isEnabled = true
                                                                levelView.btn_level1.setTitleColor(.black.withAlphaComponent(0.6), for: .normal)
                                                default:
                                                                levelView.btn_level1.isEnabled = true
                                                                levelView.btn_level1.setTitleColor(.black.withAlphaComponent(0.6), for: .normal)
                                }
                                UIView.animate(withDuration: 0.4) {
@@ -68,6 +69,13 @@
                }
                @IBAction func chooseAction(_ sender: QMUIButton) {
                                guard sender.alpha == 1.0 else {
                                                sender.alpha = 0.5
                                                sender.isSelected = false
                                                alertError(msg: "请先完成上一难度再挑战");return
                                }
                                level = sender.tag - 10
                                for subView in tackView_level.arrangedSubviews as! [QMUIButton]{
                                                subView.isSelected = sender.tag == subView.tag
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.swift
@@ -23,15 +23,15 @@
                @IBOutlet weak var stackView: UIStackView!
                @IBOutlet weak var btn_back: UIButton!
                private var totalCoin:Int = 0
//                private var totalCoin:Int = 0
                private var totalNum:Int? //总题目数量
                var viewModel:HomeListenFightViewModel!
                var studyScheduleModel:StudyScheduleModel!
                required init(totalCoin:Int,totalNum:Int? = nil,viewModel:HomeListenFightViewModel,studyScheduleModel:StudyScheduleModel){
                required init(totalNum:Int? = nil,viewModel:HomeListenFightViewModel,studyScheduleModel:StudyScheduleModel){
                                super.init(nibName: nil, bundle: nil)
                                self.totalCoin = totalCoin
//                                self.totalCoin = totalCoin
                                self.totalNum = totalNum
                                self.viewModel = viewModel
                                self.studyScheduleModel = studyScheduleModel
@@ -48,7 +48,7 @@
                                                self?.backAction()
                                }
                                label_coin.text = "恭喜您,已完成全部答题!获得\(totalCoin)积分!"
                                label_coin.text = "恭喜您,已完成全部答题!获得0积分!"
                                label_correctNum.text = "\(viewModel.correctNum)次"
                                label_errorNum.text = "\(viewModel.errorNum)次"
                                label_totalNum.text = "\(viewModel.correctNum + viewModel.errorNum)次"
@@ -63,7 +63,7 @@
                                                label_title_totalNum.text = "总题目:"
                                                label_title_correctNum.text = "正确题目:"
                                                label_title_errorNum.text = "错误题目:"
                                                label_coin.text = "恭喜您,已完成游戏!获得\(totalCoin)积分!"
                                                label_coin.text = "恭喜您,已完成游戏!获得0积分!"
                                                label_totalNum.text = "\(totalNum!)"
                                                label_correctNum.text = "\(viewModel.correctNum)"
@@ -159,7 +159,7 @@
                                                                                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: .lesson4,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!)
                                                                                                                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
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift
@@ -142,9 +142,14 @@
                                                return
                                }
                                let vc = MarketExchangeVC(viewModel: viewModel)
                                vc.title = "立即兑换"
                                push(vc: vc)
                                Services.redeemNow(goodId: viewModel.detailModel.value!.good!.id).subscribe(onNext: {result in
                                                self.viewModel.detailModel.accept(result.data)
                                                let vc = MarketExchangeVC(viewModel: self.viewModel)
                                                vc.title = "立即兑换"
                                                self.push(vc: vc)
                                }) { error in
                                }.disposed(by: disposeBag)
                }
                override func viewDidLayoutSubviews() {
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift
@@ -44,13 +44,15 @@
    override func viewDidLoad() {
        super.viewDidLoad()
                                Services.redeemNow(goodId: viewModel.detailModel.value!.good!.id).subscribe(onNext: {result in
                                                self.label_orderNum.text = result.data?.orderNumber ?? ""
                                                self.viewModel.detailModel.accept(result.data)
                                }) { error in
                                                self.btn_exchange.backgroundColor = .gray.withAlphaComponent(0.5)
                                                self.btn_exchange.isEnabled = false
                                }.disposed(by: disposeBag)
                                label_orderNum.text =  viewModel.detailModel.value?.orderNumber ?? ""
//                                Services.redeemNow(goodId: viewModel.detailModel.value!.good!.id).subscribe(onNext: {result in
//                                                result.data?.orderNumber ?? ""
//                                                self.viewModel.detailModel.accept(result.data)
//                                }) { error in
//                                                self.btn_exchange.backgroundColor = .gray.withAlphaComponent(0.5)
//                                                self.btn_exchange.isEnabled = false
//                                }.disposed(by: disposeBag)
                                Services.addressList().subscribe(onNext: {[weak self]result in
                                                self?.viewModel.address.accept(result.data ?? [])
DolphinEnglishLearnStudent/Moudle/Me/MeVC.swift
@@ -115,4 +115,10 @@
                                                }).disposed(by: self.disposeBag)
                                }
                }
                @IBAction func becomeVIPAction(_ sender: Any) {
                                let vc = VIPCenterVC()
                                vc.title = "会员中心"
                                push(vc: vc)
                }
}
DolphinEnglishLearnStudent/Moudle/Me/MeVC.xib
@@ -58,10 +58,23 @@
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="calibratedRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="l8U-Jk-mSI">
                            <rect key="frame" x="774" y="48.5" width="74" height="34"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="成为会员">
                                <color key="titleColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                            <connections>
                                <action selector="becomeVIPAction:" destination="-1" eventType="touchUpInside" id="x97-3g-TlQ"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="D0d-O7-Pt2" firstAttribute="leading" secondItem="qXF-FL-HEr" secondAttribute="trailing" constant="18" id="0RC-Ct-neE"/>
                        <constraint firstAttribute="trailing" secondItem="l8U-Jk-mSI" secondAttribute="trailing" constant="20" id="4r4-96-WXO"/>
                        <constraint firstItem="l8U-Jk-mSI" firstAttribute="centerY" secondItem="Ora-D0-c8V" secondAttribute="centerY" id="6bS-zc-O8v"/>
                        <constraint firstItem="LJb-Ki-p3S" firstAttribute="top" secondItem="D0d-O7-Pt2" secondAttribute="bottom" constant="10" id="ILj-gS-zIv"/>
                        <constraint firstItem="qXF-FL-HEr" firstAttribute="centerY" secondItem="Ora-D0-c8V" secondAttribute="centerY" id="OLa-Ch-3Ab"/>
                        <constraint firstItem="qXF-FL-HEr" firstAttribute="leading" secondItem="Ora-D0-c8V" secondAttribute="leading" constant="16" id="XVR-3Y-0ky"/>
DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift
@@ -73,7 +73,7 @@
                                switch exchangeRecordModel!.state{
                                                case 1:
                                                                let vc = AddressManageVC(type: .handle)
                                                                let vc = AddressManageVC(type: .choose)
                                                                vc.title = "修改地址"
                                                                vc.chooseAddress { m in
                                                                                CommonAlertView.show(content: "确认修改当前收货地址吗?") {[weak self] () in
DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.xib
@@ -63,31 +63,8 @@
                                <color key="textColor" red="0.082352941176470587" green="0.086274509803921567" blue="0.094117647058823528" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="vd5-iK-Ujb">
                                <rect key="frame" x="173" y="95.5" width="609" height="61"/>
                                <subviews>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品数量:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PlF-D7-xZD">
                                        <rect key="frame" x="0.0" y="0.0" width="609" height="17"/>
                                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                        <color key="textColor" red="0.082352941176470587" green="0.086274509803921567" blue="0.094117647058823528" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收获信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qnF-SM-ngM">
                                        <rect key="frame" x="0.0" y="22" width="609" height="17"/>
                                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                        <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="发货信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cSS-lo-Yba">
                                        <rect key="frame" x="0.0" y="44" width="609" height="17"/>
                                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                        <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                </subviews>
                            </stackView>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xwt-lH-fyW">
                                <rect key="frame" x="703" y="209" width="124" height="40"/>
                                <rect key="frame" x="703" y="157" width="124" height="40"/>
                                <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="124" id="3Ct-u1-c4s"/>
@@ -106,26 +83,49 @@
                                    <action selector="handleAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="dgK-UX-7H1"/>
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品数量:-" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PlF-D7-xZD">
                                <rect key="frame" x="173" y="95.5" width="78" height="17"/>
                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                <color key="textColor" red="0.082352941176470587" green="0.086274509803921567" blue="0.094117647058823528" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收获信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qnF-SM-ngM">
                                <rect key="frame" x="173" y="117.5" width="609" height="17"/>
                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="发货信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cSS-lo-Yba">
                                <rect key="frame" x="173" y="139.5" width="660" height="17"/>
                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="UdI-oe-WSO" firstAttribute="leading" secondItem="HZS-Oe-5LR" secondAttribute="trailing" constant="17" id="57C-Fp-3AO"/>
                            <constraint firstItem="viA-yT-ZWk" firstAttribute="leading" secondItem="UdI-oe-WSO" secondAttribute="leading" id="6Fj-YY-5Lr"/>
                            <constraint firstAttribute="trailing" secondItem="xwt-lH-fyW" secondAttribute="trailing" constant="11" id="6RI-NH-2my"/>
                            <constraint firstItem="PlF-D7-xZD" firstAttribute="leading" secondItem="qnF-SM-ngM" secondAttribute="leading" id="8UU-18-mxy"/>
                            <constraint firstItem="9oA-7x-in6" firstAttribute="leading" secondItem="EWl-m5-3O9" secondAttribute="leading" constant="8" id="AHE-Ei-2xt"/>
                            <constraint firstItem="vd5-iK-Ujb" firstAttribute="leading" secondItem="UdI-oe-WSO" secondAttribute="leading" id="CRk-D7-Sa0"/>
                            <constraint firstAttribute="trailing" secondItem="qnF-SM-ngM" secondAttribute="trailing" constant="56" id="Ake-gb-ygI"/>
                            <constraint firstItem="cSS-lo-Yba" firstAttribute="leading" secondItem="qnF-SM-ngM" secondAttribute="leading" id="C17-9I-0U5"/>
                            <constraint firstItem="PlF-D7-xZD" firstAttribute="top" secondItem="viA-yT-ZWk" secondAttribute="bottom" constant="7" id="Cdf-sE-e8f"/>
                            <constraint firstAttribute="bottom" secondItem="HZS-Oe-5LR" secondAttribute="bottom" priority="750" constant="18" id="Dbk-Lt-Ude"/>
                            <constraint firstItem="9oA-7x-in6" firstAttribute="top" secondItem="EWl-m5-3O9" secondAttribute="top" constant="19" id="Kd6-sy-ai0"/>
                            <constraint firstAttribute="trailing" secondItem="nMG-SO-H2Z" secondAttribute="trailing" constant="11" id="NXe-Od-1mg"/>
                            <constraint firstItem="PlF-D7-xZD" firstAttribute="leading" secondItem="UdI-oe-WSO" secondAttribute="leading" id="Sob-lc-V0Q"/>
                            <constraint firstItem="qnF-SM-ngM" firstAttribute="top" secondItem="PlF-D7-xZD" secondAttribute="bottom" constant="5" id="UAP-dY-8dm"/>
                            <constraint firstItem="xwt-lH-fyW" firstAttribute="bottom" secondItem="HZS-Oe-5LR" secondAttribute="bottom" id="W7s-Ct-asF"/>
                            <constraint firstItem="UdI-oe-WSO" firstAttribute="top" secondItem="HZS-Oe-5LR" secondAttribute="top" id="ZyM-TK-6FN"/>
                            <constraint firstAttribute="trailing" secondItem="viA-yT-ZWk" secondAttribute="trailing" id="d0F-tv-fNn"/>
                            <constraint firstItem="viA-yT-ZWk" firstAttribute="top" secondItem="UdI-oe-WSO" secondAttribute="bottom" id="fFu-Xa-Vst"/>
                            <constraint firstAttribute="bottom" secondItem="xwt-lH-fyW" secondAttribute="bottom" constant="18" id="h2F-rW-tSx"/>
                            <constraint firstItem="vd5-iK-Ujb" firstAttribute="top" secondItem="viA-yT-ZWk" secondAttribute="bottom" constant="7" id="kmP-P0-Yhd"/>
                            <constraint firstAttribute="bottom" secondItem="vd5-iK-Ujb" secondAttribute="bottom" priority="250" constant="101.5" id="lGT-yn-Kw9"/>
                            <constraint firstItem="cSS-lo-Yba" firstAttribute="top" secondItem="qnF-SM-ngM" secondAttribute="bottom" constant="5" id="lb9-Qa-LhG"/>
                            <constraint firstItem="nMG-SO-H2Z" firstAttribute="centerY" secondItem="UdI-oe-WSO" secondAttribute="centerY" id="ne0-kd-EzF"/>
                            <constraint firstItem="HZS-Oe-5LR" firstAttribute="top" secondItem="9oA-7x-in6" secondAttribute="bottom" constant="13" id="nvs-xY-hiH"/>
                            <constraint firstItem="HZS-Oe-5LR" firstAttribute="leading" secondItem="EWl-m5-3O9" secondAttribute="leading" constant="8" id="u6c-56-glh"/>
                            <constraint firstAttribute="trailing" secondItem="vd5-iK-Ujb" secondAttribute="trailing" constant="56" id="ucU-JO-6dg"/>
                            <constraint firstAttribute="trailing" secondItem="cSS-lo-Yba" secondAttribute="trailing" constant="5" id="wZ2-Yj-Y4L"/>
                            <constraint firstAttribute="trailing" secondItem="UdI-oe-WSO" secondAttribute="trailing" constant="90" id="z0n-ib-Q7m"/>
                        </constraints>
                    </view>
DolphinEnglishLearnStudent/Moudle/Me/VC/VIPCenterVC.swift
@@ -6,8 +6,12 @@
//
import UIKit
import WebKit
class VIPCenterVC: BaseVC {
                private var btn_vip:UIButton!
                private var webView:WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
@@ -27,10 +31,33 @@
                                                                weakSelf.navigationController?.popViewController(animated: true)
                                                }
                                }
                                Services.vipInfo().subscribe(onNext: {data in
                                }).disposed(by: disposeBag)
    }
                override func setUI() {
                }
                                webView = WKWebView(frame: .zero)
                                view.addSubview(webView)
                                webView.snp.makeConstraints { make in
                                                make.edges.equalToSuperview()
                                }
                                btn_vip = UIButton(type: .custom)
                                btn_vip.setTitle("成为会员", for: .normal)
                                btn_vip.setTitleColor(.white, for: .normal)
                                btn_vip.backgroundColor = UIColor(hexStr: "#41A2EB")
                                btn_vip.titleLabel?.font = .systemFont(ofSize: 16, weight: .medium)
                                btn_vip.jq_cornerRadius = 8
                                view.addSubview(btn_vip)
                                btn_vip.snp.makeConstraints { make in
                                                make.width.equalTo(316)
                                                make.height.equalTo(49)
                                                make.bottom.equalTo(-91)
                                                make.centerX.equalToSuperview()
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Me/View/ShareView.swift
@@ -33,14 +33,6 @@
                                cons_bottom.constant = -JQ_ScreenW
                                alpha = 0
                                layoutIfNeeded()
                                Services.shareInfo().subscribe(onNext: { data in
                                                if let m = data.data{
                                                                self.shareModel = m
                                                                self.label_info.text = m.title
                                                                self.img_cover.sd_setImage(with: URL(string: m.img))
                                                }
                                }).disposed(by: disposeBag)
                }
                static func show(){
@@ -70,18 +62,22 @@
                @IBAction func shareAction(_ sender: QMUIButton) {
                                guard shareModel != nil else {alertError(msg: "数据获取失败");return}
                                var scene:WXScene!
                                if sender.tag == 10{
                                                scene = WXSceneSession
                                }else{
                                                scene = WXSceneTimeline
                                }
                                showHUD()
                                SDWebImageDownloader.shared.downloadImage(with: URL(string: shareModel!.img)) { iamge, data, error, state in
                                                hiddenHUD()
                                                guard error == nil else {alert(msg: "图片获取失败");return}
                                                WeChatTools.shareUrl("https://dollearn.com/", title: "海豚智能教育平台", desc: self.shareModel!.title, thumb: iamge!, scene: scene)
                                }
                                Services.shareInfo().subscribe(onNext: { data in
                                                if let m = data.data{
                                                                var scene:WXScene!
                                                                if sender.tag == 10{
                                                                                scene = WXSceneSession
                                                                }else{
                                                                                scene = WXSceneTimeline
                                                                }
                                                                showHUD()
                                                                SDWebImageDownloader.shared.downloadImage(with: URL(string: m.img)) { iamge, data, error, state in
                                                                                hiddenHUD()
                                                                                guard error == nil else {alert(msg: "图片获取失败");return}
                                                                                WeChatTools.shareUrl("https://dollearn.com/", title: m.title, desc: "", thumb: iamge!, scene: scene)
                                                                }
                                                }
                                }).disposed(by: disposeBag)
                }
}
DolphinEnglishLearnStudent/Services/Services.swift
@@ -158,6 +158,15 @@
                                return NetworkRequest.request(params: params, method: .get, progress: true)
                }
                class func teamSchedule(type:ListenType,week:Int,day:Int)->Observable<BaseResponse<TeamScheduleModel>>{
                                let params = ParamsAppender.build(url: All_Url)
                                params.interface(url: "/study/base/study/teamSchedule")
                                params.append(key: "type", value: type.rawValue)
                                params.append(key: "week", value: week)
                                params.append(key: "day", value: day)
                                return NetworkRequest.request(params: params, method: .get, progress: false)
                }
                class func parentPage()->Observable<BaseResponse<String>>{
                                let params = ParamsAppender.build(url: All_Url)
                                params.interface(url: "/study/base/user/studyPage")
@@ -200,7 +209,7 @@
                class func goodRecommend()->Observable<BaseResponse<[RecommendModel]>>{
                                let params = ParamsAppender.build(url: All_Url)
                                params.interface(url: "/study/base/study/goodRecommend")
                                return NetworkRequest.request(params: params, method: .get, progress: false)
                                return NetworkRequest.request(params: params, method: .get, progress: false,ignoreAlert: true)
                }
                class func goodsList(keywords:String,page:Int,pageSize:Int = 20,type:[String])->Observable<BaseResponse<BaseResponseList<MarketModel>>>{
@@ -379,6 +388,12 @@
                                params.interface(url: "/study/base/user/shareInfo")
                                return NetworkRequest.request(params: params, method: .get, progress: false)
                }
                class func vipInfo()->Observable<BaseResponse<SimpleModel>>{
                                let params = ParamsAppender.build(url: All_Url)
                                params.interface(url: "/study/base/user/vipInfo")
                                return NetworkRequest.request(params: params, method: .post, progress: false)
                }
}
extension Services{