Przeglądaj źródła

小李视频页 , 同款做题完成 95%

openlockPPP 4 miesięcy temu
rodzic
commit
e302168ef8
79 zmienionych plików z 2156 dodań i 67 usunięć
  1. 102 0
      jiaPei.xcodeproj/project.pbxproj
  2. BIN
      jiaPei.xcworkspace/xcuserdata/mimasigeling.xcuserdatad/UserInterfaceState.xcuserstate
  3. 22 0
      jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg.imageset/Contents.json
  4. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg.imageset/li_bar_btnbg@2x.png
  5. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg.imageset/li_bar_btnbg@3x.png
  6. 22 0
      jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg_bg.imageset/Contents.json
  7. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg_bg.imageset/li_bar_btnbg_bg@2x.png
  8. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg_bg.imageset/li_bar_btnbg_bg@3x.png
  9. 22 0
      jiaPei/Images.xcassets/Modules/小李视频/li_btn播放.imageset/Contents.json
  10. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_btn播放.imageset/li_btn播放@2x.png
  11. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_btn播放.imageset/li_btn播放@3x.png
  12. 22 0
      jiaPei/Images.xcassets/Modules/小李视频/li_icon_1.imageset/Contents.json
  13. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_icon_1.imageset/li_icon_1@2x.png
  14. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_icon_1.imageset/li_icon_1@3x.png
  15. 22 0
      jiaPei/Images.xcassets/Modules/小李视频/li_jp_icon.imageset/Contents.json
  16. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_jp_icon.imageset/li_jp_icon@2x.png
  17. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_jp_icon.imageset/li_jp_icon@3x.png
  18. 22 0
      jiaPei/Images.xcassets/Modules/小李视频/li_play_btn_bg.imageset/Contents.json
  19. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_play_btn_bg.imageset/li_play_btn_bg@2x.png
  20. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_play_btn_bg.imageset/li_play_btn_bg@3x.png
  21. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_zu_kbg.imageset/li_zu_kbg@2x.png
  22. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_zu_kbg.imageset/li_zu_kbg@3x.png
  23. 22 0
      jiaPei/Images.xcassets/Modules/小李视频/li_同款题库.imageset/Contents.json
  24. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_同款题库.imageset/li_同款题库@2x.png
  25. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_同款题库.imageset/li_同款题库@3x.png
  26. 22 0
      jiaPei/Images.xcassets/Modules/小李视频/li_箭头.imageset/Contents.json
  27. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_箭头.imageset/li_箭头@2x.png
  28. BIN
      jiaPei/Images.xcassets/Modules/小李视频/li_箭头.imageset/li_箭头@3x.png
  29. 1 0
      jiaPei/Modules/BaseModule/Common/View/RQCommonFooterView.h
  30. 2 0
      jiaPei/Modules/HomePageModule/Model/RQHTTPService+RQGetPlaceVideoList.h
  31. 31 10
      jiaPei/Modules/HomePageModule/View/HomePage/NYHomePageOneBigCell.m
  32. 1 1
      jiaPei/Modules/HomePageModule/ViewModel/HomePage/RQHomePageSubjectOneOrFourViewModel.m
  33. 2 1
      jiaPei/Modules/HomePageModule/ViewModel/HomePage/itemViewModel/NYHomePageOneBigItemViewModel.h
  34. 2 1
      jiaPei/Modules/HomePageModule/ViewModel/HomePage/itemViewModel/NYHomePageOneBigItemViewModel.m
  35. 41 21
      jiaPei/Modules/OtherModules/ExaminationModule/Controller/NYExaminationRoomViewController.m
  36. 5 5
      jiaPei/Modules/OtherModules/ExaminationModule/Controller/NYExaminationRoomViewController.xib
  37. 16 4
      jiaPei/Modules/OtherModules/ExaminationModule/Controller/NYExaminationViewController.m
  38. 18 4
      jiaPei/Modules/OtherModules/ExaminationModule/View/NYChartView/NYChartMatrixView/NYChartMatrixView.m
  39. 1 1
      jiaPei/Modules/OtherModules/ExaminationModule/ViewModel/NYExaminationRoomViewModel.h
  40. 1 1
      jiaPei/Modules/OtherModules/ExaminationModule/ViewModel/NYExaminationViewModel.h
  41. 4 0
      jiaPei/Modules/OtherModules/ExerciseModule/RQExerciseModule.h
  42. 1 1
      jiaPei/Modules/OtherModules/VIPModule/Model/RQHTTPService+RQPostPrepareOrder.h
  43. 3 2
      jiaPei/Modules/OtherModules/VIPModule/Model/RQHTTPService+RQPostPrepareOrder.m
  44. 3 3
      jiaPei/Modules/OtherModules/VIPModule/ViewModel/itemViewModel/小李/NYLIVipAuthorityNewItemViewModel.m
  45. 17 0
      jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailSubPageViewController.h
  46. 171 0
      jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailSubPageViewController.m
  47. 18 0
      jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailViewController.h
  48. 300 0
      jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailViewController.m
  49. 28 0
      jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVipCoachViewController.m
  50. 20 0
      jiaPei/Modules/OtherModules/XLIModule/Model/RQHTTPService+FiveTeaching.h
  51. 28 0
      jiaPei/Modules/OtherModules/XLIModule/Model/RQHTTPService+FiveTeaching.m
  52. 14 2
      jiaPei/Modules/OtherModules/XLIModule/NYXLIModule.h
  53. 27 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailHeaderView.h
  54. 32 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailHeaderView.m
  55. 79 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailHeaderView.xib
  56. 21 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubFooterCell.h
  57. 80 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubFooterCell.m
  58. 91 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubFooterCell.xib
  59. 17 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageCell.h
  60. 83 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageCell.m
  61. 144 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageCell.xib
  62. 26 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageSectionHeaderView.h
  63. 37 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageSectionHeaderView.m
  64. 73 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageSectionHeaderView.xib
  65. 17 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubFooterViewModel.h
  66. 28 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubFooterViewModel.m
  67. 17 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubGroupViewModel.h
  68. 22 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubGroupViewModel.m
  69. 20 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubPageItemViewModel.h
  70. 29 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubPageItemViewModel.m
  71. 22 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubPageViewModel.h
  72. 108 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubPageViewModel.m
  73. 24 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailViewModel.h
  74. 25 0
      jiaPei/Modules/OtherModules/YDTQuestionModule/Modules/NYYDTFIVEQuestionModule.h
  75. 116 0
      jiaPei/Modules/OtherModules/YDTQuestionModule/Modules/NYYDTFIVEQuestionModule.m
  76. BIN
      jiaPei/Modules/OtherModules/YDTQuestionModule/Resources/js.db
  77. 2 1
      jiaPei/Utils/Manager/WechatManager/RQWechatManager.h
  78. 9 9
      jiaPei/Utils/Manager/WechatManager/RQWechatManager.m
  79. 1 0
      jiaPei/Utils/Router/RQRouter.m

+ 102 - 0
jiaPei.xcodeproj/project.pbxproj

@@ -121,6 +121,11 @@
 		9056897C2D0C1F0700B27B7E /* NYFailGroupPointDataModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9056897B2D0C1F0700B27B7E /* NYFailGroupPointDataModel.m */; };
 		905CF7A62CDA1FEC00DE1B7F /* NYExaminationTipsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 905CF7A42CDA1FEC00DE1B7F /* NYExaminationTipsViewController.m */; };
 		905CF7A72CDA1FEC00DE1B7F /* NYExaminationTipsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 905CF7A52CDA1FEC00DE1B7F /* NYExaminationTipsViewController.xib */; };
+		905E56AD2D5993630012AB13 /* NYLIVideoDetailSubPageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 905E56AC2D5993630012AB13 /* NYLIVideoDetailSubPageViewController.m */; };
+		905E56B02D5999580012AB13 /* NYLIVideoDetailHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 905E56AF2D5999580012AB13 /* NYLIVideoDetailHeaderView.m */; };
+		905E56B22D5999660012AB13 /* NYLIVideoDetailHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 905E56B12D5999660012AB13 /* NYLIVideoDetailHeaderView.xib */; };
+		905E56B52D59DBCE0012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 905E56B42D59DBCE0012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.m */; };
+		905E56B72D59DBF30012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 905E56B62D59DBF30012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.xib */; };
 		90626F3D2A204BC400C8FA05 /* kt_jq.db in Resources */ = {isa = PBXBuildFile; fileRef = 90626F3C2A204BC300C8FA05 /* kt_jq.db */; };
 		90626F402A20540600C8FA05 /* YNYDTJQQuestionModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 90626F3F2A20540600C8FA05 /* YNYDTJQQuestionModule.m */; };
 		906814FF2D53582C00FE123F /* NYLIVipHeaderImageViewNewReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 906814FE2D53582C00FE123F /* NYLIVipHeaderImageViewNewReusableView.m */; };
@@ -175,6 +180,8 @@
 		90AF8B802D36574800D43E11 /* NYFailSpecialVideoHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AF8B7E2D36574800D43E11 /* NYFailSpecialVideoHeaderView.m */; };
 		90AF8B812D36574800D43E11 /* NYFailSpecialVideoHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 90AF8B7F2D36574800D43E11 /* NYFailSpecialVideoHeaderView.xib */; };
 		90AF8B842D3658FF00D43E11 /* NYFailSpecialVideoGroupViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AF8B832D3658FF00D43E11 /* NYFailSpecialVideoGroupViewModel.m */; };
+		90B047C72D57044300199B18 /* NYLIVideoDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 90B047C62D57044300199B18 /* NYLIVideoDetailViewController.m */; };
+		90B047CA2D57265700199B18 /* NYLIVideoDetailViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 90B047C92D57265700199B18 /* NYLIVideoDetailViewModel.m */; };
 		90B0F6862A70E9E300B448DC /* QCloudTTS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90B0F6852A70E9E300B448DC /* QCloudTTS.framework */; };
 		90B0F68A2A711C5E00B448DC /* NYVoiceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 90B0F6892A711C5E00B448DC /* NYVoiceManager.m */; };
 		90B32CFA2D55A6EE00DD19C3 /* NYLIVipPriceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 90B32CF82D55A6EE00DD19C3 /* NYLIVipPriceCell.m */; };
@@ -213,6 +220,16 @@
 		90D356C62CC0B736002B52B9 /* NYExaminationRoomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D356C42CC0B736002B52B9 /* NYExaminationRoomViewController.m */; };
 		90D356C72CC0B736002B52B9 /* NYExaminationRoomViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 90D356C52CC0B736002B52B9 /* NYExaminationRoomViewController.xib */; };
 		90D356CA2CC0B7C2002B52B9 /* NYExaminationRoomViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D356C92CC0B7C2002B52B9 /* NYExaminationRoomViewModel.m */; };
+		90D8AF582D5AF0DF0087C165 /* NYLIVideoDetailSubPageViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D8AF572D5AF0DF0087C165 /* NYLIVideoDetailSubPageViewModel.m */; };
+		90D8AF5C2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D8AF5A2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.m */; };
+		90D8AF5D2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 90D8AF5B2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.xib */; };
+		90D8AF602D5AF78B0087C165 /* NYLIVideoDetailSubPageItemViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D8AF5F2D5AF78B0087C165 /* NYLIVideoDetailSubPageItemViewModel.m */; };
+		90D8AF682D5C41A90087C165 /* NYLIVideoDetailSubGroupViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D8AF672D5C41A90087C165 /* NYLIVideoDetailSubGroupViewModel.m */; };
+		90D8AF6C2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D8AF6A2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.m */; };
+		90D8AF6D2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 90D8AF6B2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.xib */; };
+		90D8AF702D5C4C420087C165 /* NYLIVideoDetailSubFooterViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D8AF6F2D5C4C420087C165 /* NYLIVideoDetailSubFooterViewModel.m */; };
+		90D8AF742D5C828A0087C165 /* RQHTTPService+FiveTeaching.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D8AF732D5C828A0087C165 /* RQHTTPService+FiveTeaching.m */; };
+		90D8AF772D5DD9550087C165 /* NYYDTFIVEQuestionModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D8AF762D5DD9550087C165 /* NYYDTFIVEQuestionModule.m */; };
 		90EAB9DD2D0AC3DD0024F379 /* NYFailSpecialExerciseDetailsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 90EAB9DC2D0AC3DD0024F379 /* NYFailSpecialExerciseDetailsViewController.xib */; };
 		90EAB9DE2D0AC3DD0024F379 /* NYFailSpecialExerciseDetailsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 90EAB9DB2D0AC3DD0024F379 /* NYFailSpecialExerciseDetailsViewController.m */; };
 		90EAB9E12D0AC6950024F379 /* easy_error_data.json in Resources */ = {isa = PBXBuildFile; fileRef = 90EAB9DF2D0AC6950024F379 /* easy_error_data.json */; };
@@ -1954,6 +1971,14 @@
 		905CF7A32CDA1FEC00DE1B7F /* NYExaminationTipsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYExaminationTipsViewController.h; sourceTree = "<group>"; };
 		905CF7A42CDA1FEC00DE1B7F /* NYExaminationTipsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYExaminationTipsViewController.m; sourceTree = "<group>"; };
 		905CF7A52CDA1FEC00DE1B7F /* NYExaminationTipsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NYExaminationTipsViewController.xib; sourceTree = "<group>"; };
+		905E56AB2D5993630012AB13 /* NYLIVideoDetailSubPageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailSubPageViewController.h; sourceTree = "<group>"; };
+		905E56AC2D5993630012AB13 /* NYLIVideoDetailSubPageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailSubPageViewController.m; sourceTree = "<group>"; };
+		905E56AE2D5999580012AB13 /* NYLIVideoDetailHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailHeaderView.h; sourceTree = "<group>"; };
+		905E56AF2D5999580012AB13 /* NYLIVideoDetailHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailHeaderView.m; sourceTree = "<group>"; };
+		905E56B12D5999660012AB13 /* NYLIVideoDetailHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NYLIVideoDetailHeaderView.xib; sourceTree = "<group>"; };
+		905E56B32D59DBCE0012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailSubPageSectionHeaderView.h; sourceTree = "<group>"; };
+		905E56B42D59DBCE0012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailSubPageSectionHeaderView.m; sourceTree = "<group>"; };
+		905E56B62D59DBF30012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NYLIVideoDetailSubPageSectionHeaderView.xib; sourceTree = "<group>"; };
 		90626F3C2A204BC300C8FA05 /* kt_jq.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = kt_jq.db; sourceTree = "<group>"; };
 		90626F3E2A20540600C8FA05 /* YNYDTJQQuestionModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YNYDTJQQuestionModule.h; sourceTree = "<group>"; };
 		90626F3F2A20540600C8FA05 /* YNYDTJQQuestionModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YNYDTJQQuestionModule.m; sourceTree = "<group>"; };
@@ -2046,6 +2071,10 @@
 		90AF8B7F2D36574800D43E11 /* NYFailSpecialVideoHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NYFailSpecialVideoHeaderView.xib; sourceTree = "<group>"; };
 		90AF8B822D3658FF00D43E11 /* NYFailSpecialVideoGroupViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYFailSpecialVideoGroupViewModel.h; sourceTree = "<group>"; };
 		90AF8B832D3658FF00D43E11 /* NYFailSpecialVideoGroupViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYFailSpecialVideoGroupViewModel.m; sourceTree = "<group>"; };
+		90B047C52D57044300199B18 /* NYLIVideoDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailViewController.h; sourceTree = "<group>"; };
+		90B047C62D57044300199B18 /* NYLIVideoDetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailViewController.m; sourceTree = "<group>"; };
+		90B047C82D57265700199B18 /* NYLIVideoDetailViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailViewModel.h; sourceTree = "<group>"; };
+		90B047C92D57265700199B18 /* NYLIVideoDetailViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailViewModel.m; sourceTree = "<group>"; };
 		90B0F6852A70E9E300B448DC /* QCloudTTS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QCloudTTS.framework; sourceTree = "<group>"; };
 		90B0F6882A711C5E00B448DC /* NYVoiceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYVoiceManager.h; sourceTree = "<group>"; };
 		90B0F6892A711C5E00B448DC /* NYVoiceManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYVoiceManager.m; sourceTree = "<group>"; };
@@ -2111,6 +2140,24 @@
 		90D356C52CC0B736002B52B9 /* NYExaminationRoomViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NYExaminationRoomViewController.xib; sourceTree = "<group>"; };
 		90D356C82CC0B7C2002B52B9 /* NYExaminationRoomViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYExaminationRoomViewModel.h; sourceTree = "<group>"; };
 		90D356C92CC0B7C2002B52B9 /* NYExaminationRoomViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYExaminationRoomViewModel.m; sourceTree = "<group>"; };
+		90D8AF562D5AF0DF0087C165 /* NYLIVideoDetailSubPageViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailSubPageViewModel.h; sourceTree = "<group>"; };
+		90D8AF572D5AF0DF0087C165 /* NYLIVideoDetailSubPageViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailSubPageViewModel.m; sourceTree = "<group>"; };
+		90D8AF592D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailSubPageCell.h; sourceTree = "<group>"; };
+		90D8AF5A2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailSubPageCell.m; sourceTree = "<group>"; };
+		90D8AF5B2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NYLIVideoDetailSubPageCell.xib; sourceTree = "<group>"; };
+		90D8AF5E2D5AF78B0087C165 /* NYLIVideoDetailSubPageItemViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailSubPageItemViewModel.h; sourceTree = "<group>"; };
+		90D8AF5F2D5AF78B0087C165 /* NYLIVideoDetailSubPageItemViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailSubPageItemViewModel.m; sourceTree = "<group>"; };
+		90D8AF662D5C41A90087C165 /* NYLIVideoDetailSubGroupViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailSubGroupViewModel.h; sourceTree = "<group>"; };
+		90D8AF672D5C41A90087C165 /* NYLIVideoDetailSubGroupViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailSubGroupViewModel.m; sourceTree = "<group>"; };
+		90D8AF692D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailSubFooterCell.h; sourceTree = "<group>"; };
+		90D8AF6A2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailSubFooterCell.m; sourceTree = "<group>"; };
+		90D8AF6B2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NYLIVideoDetailSubFooterCell.xib; sourceTree = "<group>"; };
+		90D8AF6E2D5C4C420087C165 /* NYLIVideoDetailSubFooterViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYLIVideoDetailSubFooterViewModel.h; sourceTree = "<group>"; };
+		90D8AF6F2D5C4C420087C165 /* NYLIVideoDetailSubFooterViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYLIVideoDetailSubFooterViewModel.m; sourceTree = "<group>"; };
+		90D8AF722D5C828A0087C165 /* RQHTTPService+FiveTeaching.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RQHTTPService+FiveTeaching.h"; sourceTree = "<group>"; };
+		90D8AF732D5C828A0087C165 /* RQHTTPService+FiveTeaching.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "RQHTTPService+FiveTeaching.m"; sourceTree = "<group>"; };
+		90D8AF752D5DD9550087C165 /* NYYDTFIVEQuestionModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYYDTFIVEQuestionModule.h; sourceTree = "<group>"; };
+		90D8AF762D5DD9550087C165 /* NYYDTFIVEQuestionModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYYDTFIVEQuestionModule.m; sourceTree = "<group>"; };
 		90EAB9DA2D0AC3DD0024F379 /* NYFailSpecialExerciseDetailsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYFailSpecialExerciseDetailsViewController.h; sourceTree = "<group>"; };
 		90EAB9DB2D0AC3DD0024F379 /* NYFailSpecialExerciseDetailsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYFailSpecialExerciseDetailsViewController.m; sourceTree = "<group>"; };
 		90EAB9DC2D0AC3DD0024F379 /* NYFailSpecialExerciseDetailsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NYFailSpecialExerciseDetailsViewController.xib; sourceTree = "<group>"; };
@@ -4771,6 +4818,7 @@
 			children = (
 				9003DDD42D421C5600DBF457 /* NYXLIModule.h */,
 				9003DDD52D421C5600DBF457 /* NYXLIModule.m */,
+				90D8AF712D5C819D0087C165 /* Model */,
 				9003DDDC2D4222D200DBF457 /* ViewModel */,
 				9003DDD02D421B4C00DBF457 /* View */,
 				9003DDCF2D421B3B00DBF457 /* Controller */,
@@ -4783,6 +4831,10 @@
 			children = (
 				9003DDD72D421CE400DBF457 /* NYLIVipCoachViewController.h */,
 				9003DDD82D421CE400DBF457 /* NYLIVipCoachViewController.m */,
+				90B047C52D57044300199B18 /* NYLIVideoDetailViewController.h */,
+				90B047C62D57044300199B18 /* NYLIVideoDetailViewController.m */,
+				905E56AB2D5993630012AB13 /* NYLIVideoDetailSubPageViewController.h */,
+				905E56AC2D5993630012AB13 /* NYLIVideoDetailSubPageViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -4796,6 +4848,18 @@
 				906814FD2D53582C00FE123F /* NYLIVipHeaderImageViewNewReusableView.h */,
 				906814FE2D53582C00FE123F /* NYLIVipHeaderImageViewNewReusableView.m */,
 				906815012D53587A00FE123F /* NYLIVipHeaderImageViewNewReusableView.xib */,
+				905E56AE2D5999580012AB13 /* NYLIVideoDetailHeaderView.h */,
+				905E56AF2D5999580012AB13 /* NYLIVideoDetailHeaderView.m */,
+				905E56B12D5999660012AB13 /* NYLIVideoDetailHeaderView.xib */,
+				905E56B32D59DBCE0012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.h */,
+				905E56B42D59DBCE0012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.m */,
+				905E56B62D59DBF30012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.xib */,
+				90D8AF592D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.h */,
+				90D8AF5A2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.m */,
+				90D8AF5B2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.xib */,
+				90D8AF692D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.h */,
+				90D8AF6A2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.m */,
+				90D8AF6B2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -4803,10 +4867,20 @@
 		9003DDDC2D4222D200DBF457 /* ViewModel */ = {
 			isa = PBXGroup;
 			children = (
+				90B047C82D57265700199B18 /* NYLIVideoDetailViewModel.h */,
+				90B047C92D57265700199B18 /* NYLIVideoDetailViewModel.m */,
 				9003DDDD2D42231100DBF457 /* NYLIVipCoachViewModel.h */,
 				9003DDDE2D42231100DBF457 /* NYLIVipCoachViewModel.m */,
 				906815072D535CA000FE123F /* NYLIVipHeaderImageViewGroupModel.h */,
 				906815082D535CA000FE123F /* NYLIVipHeaderImageViewGroupModel.m */,
+				90D8AF562D5AF0DF0087C165 /* NYLIVideoDetailSubPageViewModel.h */,
+				90D8AF572D5AF0DF0087C165 /* NYLIVideoDetailSubPageViewModel.m */,
+				90D8AF5E2D5AF78B0087C165 /* NYLIVideoDetailSubPageItemViewModel.h */,
+				90D8AF5F2D5AF78B0087C165 /* NYLIVideoDetailSubPageItemViewModel.m */,
+				90D8AF662D5C41A90087C165 /* NYLIVideoDetailSubGroupViewModel.h */,
+				90D8AF672D5C41A90087C165 /* NYLIVideoDetailSubGroupViewModel.m */,
+				90D8AF6E2D5C4C420087C165 /* NYLIVideoDetailSubFooterViewModel.h */,
+				90D8AF6F2D5C4C420087C165 /* NYLIVideoDetailSubFooterViewModel.m */,
 			);
 			path = ViewModel;
 			sourceTree = "<group>";
@@ -5251,6 +5325,15 @@
 			path = Extension;
 			sourceTree = "<group>";
 		};
+		90D8AF712D5C819D0087C165 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				90D8AF722D5C828A0087C165 /* RQHTTPService+FiveTeaching.h */,
+				90D8AF732D5C828A0087C165 /* RQHTTPService+FiveTeaching.m */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
 		9A75AB77D77332A5EDD30629 /* Pods */ = {
 			isa = PBXGroup;
 			children = (
@@ -5345,6 +5428,8 @@
 				D004D7FA27FE611C00A96946 /* RQYDTZGZWYCQuestionModule.m */,
 				D022FB0028D1E6610081E243 /* RQYDTJSQuestionModule.h */,
 				D022FB0128D1E6610081E243 /* RQYDTJSQuestionModule.m */,
+				90D8AF752D5DD9550087C165 /* NYYDTFIVEQuestionModule.h */,
+				90D8AF762D5DD9550087C165 /* NYYDTFIVEQuestionModule.m */,
 			);
 			path = Modules;
 			sourceTree = "<group>";
@@ -10504,6 +10589,7 @@
 				90626F3D2A204BC400C8FA05 /* kt_jq.db in Resources */,
 				D0295C9F243F0B8B00B46AB1 /* 1-6-16.jpg in Resources */,
 				D0295D0C243F0B8C00B46AB1 /* 1-2-11.jpg in Resources */,
+				90D8AF5D2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.xib in Resources */,
 				D0295B6F243F0B8A00B46AB1 /* 1-4-69.jpg in Resources */,
 				D057C1C329F50FC5002F4AB2 /* RQPlaceListFooterView.xib in Resources */,
 				D0295D84243F0B8C00B46AB1 /* light5.mp3 in Resources */,
@@ -10511,6 +10597,7 @@
 				D0295BD2243F0B8B00B46AB1 /* 1-3-14.jpg in Resources */,
 				D0B840AD2850672B001DB115 /* RQProfileSubjectTwoVipCell.xib in Resources */,
 				D022FAFF28D1E6130081E243 /* js.db in Resources */,
+				905E56B72D59DBF30012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.xib in Resources */,
 				D0295C1E243F0B8B00B46AB1 /* 5-15-26.jpg in Resources */,
 				D0295BB5243F0B8B00B46AB1 /* 1-7-16.jpg in Resources */,
 				D0295BE6243F0B8B00B46AB1 /* 5-15-20.jpg in Resources */,
@@ -10972,6 +11059,7 @@
 				D0295D57243F0B8C00B46AB1 /* img15.png in Resources */,
 				9074E7F62CBD123D00283D4D /* NYExaminationViewController.xib in Resources */,
 				D0295B6B243F0B8A00B46AB1 /* 1-4-57.jpg in Resources */,
+				905E56B22D5999660012AB13 /* NYLIVideoDetailHeaderView.xib in Resources */,
 				D0295B92243F0B8A00B46AB1 /* 1-4-44.jpg in Resources */,
 				D0295BF8243F0B8B00B46AB1 /* 1-1-12.jpg in Resources */,
 				D0295C24243F0B8B00B46AB1 /* 1-4-26.jpg in Resources */,
@@ -11122,6 +11210,7 @@
 				D0295BC9243F0B8B00B46AB1 /* 1-4-85.jpg in Resources */,
 				D0295CB6243F0B8B00B46AB1 /* 1-3-1.jpg in Resources */,
 				D0295B53243F0B8A00B46AB1 /* 1-4-56.jpg in Resources */,
+				90D8AF6D2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.xib in Resources */,
 				D0DA2A5C29F621E100F7461C /* RQTeachSchoolVideoCell.xib in Resources */,
 				D0295CF5243F0B8C00B46AB1 /* 1-4-75.jpg in Resources */,
 				D0295C95243F0B8B00B46AB1 /* 1-4-114.jpg in Resources */,
@@ -11341,6 +11430,7 @@
 				D04DF6D527006C57006E3633 /* RQCommonCell.m in Sources */,
 				90D356CA2CC0B7C2002B52B9 /* NYExaminationRoomViewModel.m in Sources */,
 				D0DA26CC219DB9E40093CD42 /* RQShareFunction.m in Sources */,
+				90D8AF772D5DD9550087C165 /* NYYDTFIVEQuestionModule.m in Sources */,
 				D074575929272C680050BE10 /* QMFileCollectionCell.m in Sources */,
 				D092510525A6422500820F82 /* CheckBodyManager.m in Sources */,
 				D0BD9E1B28F41D3E0086CF1A /* RQUpdateView.m in Sources */,
@@ -11351,6 +11441,7 @@
 				D0FDFF2D28E1A7ED00746C3E /* RQHTTPService+RQApplePay.m in Sources */,
 				D0354B20230E3EDA00E1C54D /* StepImageView.m in Sources */,
 				D0870D8B2701A6BA004EC94E /* UIImage+YYAdd.m in Sources */,
+				90D8AF602D5AF78B0087C165 /* NYLIVideoDetailSubPageItemViewModel.m in Sources */,
 				18E053C01C2AC3D300D614C0 /* DateView.m in Sources */,
 				D04DF79E27006F72006E3633 /* NSAttributedString+RQExtension.m in Sources */,
 				D0B351E42816A9B90046A872 /* RQProfileModule.m in Sources */,
@@ -11364,6 +11455,7 @@
 				90044C432A4EAF6A003FBBF8 /* NYComplaintPageViewController.m in Sources */,
 				D0C44C442902811A0061B812 /* RQVipBuyNewView.m in Sources */,
 				D00A14B72754A3D600793046 /* ZFPortraitControlView+RQExtension.m in Sources */,
+				90D8AF682D5C41A90087C165 /* NYLIVideoDetailSubGroupViewModel.m in Sources */,
 				D0B2D504289A7C9300D6C5F4 /* RQErrorAndCollectHeaderView.m in Sources */,
 				D0354B0F230E352300E1C54D /* BMKClusterItem.m in Sources */,
 				D057C1DE29F5103E002F4AB2 /* RQPlaceDetailNoteViewController.m in Sources */,
@@ -11574,6 +11666,7 @@
 				D09E5D5E25E3AA260099E87C /* BDFaceLog.m in Sources */,
 				D0F915572847611A00C9FCAF /* UIImage+QQCorner.m in Sources */,
 				D0870D7E2701A6B9004EC94E /* YYThreadSafeDictionary.m in Sources */,
+				90B047CA2D57265700199B18 /* NYLIVideoDetailViewModel.m in Sources */,
 				D06F544B291B8E3100C65F02 /* RQVipHeaderImageViewNewGroupViewModel.m in Sources */,
 				D0F283B7292DB68300D89E2B /* JXCategoryListContainerView+RQExtension.m in Sources */,
 				906815202D54AD5E00FE123F /* NYLIVipAuthorityNewItemViewModel.m in Sources */,
@@ -11600,6 +11693,7 @@
 				D057C1D129F50FC5002F4AB2 /* RQPlaceDetaiIQuestionCell.m in Sources */,
 				D0D1F678283F84DF0086C6AE /* RQExerciseSubViewModel.m in Sources */,
 				D0D1F6A6283F84E00086C6AE /* RQExerciseSettingHeaderView.m in Sources */,
+				90D8AF5C2D5AF5B00087C165 /* NYLIVideoDetailSubPageCell.m in Sources */,
 				D0D68D392890072F00600C5C /* RQExamResultViewController.m in Sources */,
 				D0870DA22701A6BA004EC94E /* YYReachability.m in Sources */,
 				D05FC77A27CDB49F00DA3209 /* RQVipSinglePriceCell.m in Sources */,
@@ -11636,6 +11730,7 @@
 				D02010D529373AE8001B9F4D /* SLGridView.m in Sources */,
 				1851F49F1BEE2E5F00F7CB68 /* UserInfo.m in Sources */,
 				D0870DDF2701AB49004EC94E /* RQProfileViewModel.m in Sources */,
+				90D8AF742D5C828A0087C165 /* RQHTTPService+FiveTeaching.m in Sources */,
 				D02010E029373AE8001B9F4D /* WKWebView+SLExtension.m in Sources */,
 				D02010E329373AE8001B9F4D /* NSDictionary+SLExtension.m in Sources */,
 				D0B351DD281588BC0046A872 /* CYAnyCornerRadiusUtil.m in Sources */,
@@ -11673,6 +11768,7 @@
 				D0B699F1292E16D500DE2C69 /* RQExplainVideoViewController.m in Sources */,
 				D0870D6A2701A6B9004EC94E /* NSMutableSet+BlocksKit.m in Sources */,
 				D0D1F68F283F84DF0086C6AE /* RQHTTPService+RQGetScoreInfoAll.m in Sources */,
+				90B047C72D57044300199B18 /* NYLIVideoDetailViewController.m in Sources */,
 				D0B06DBF2232063900FA684D /* LocationManager.m in Sources */,
 				18541E041C018CFE0097606A /* Comment.m in Sources */,
 				D0508CD627D8776C00CBF1FC /* RQHTTPService+RQGetDspList.m in Sources */,
@@ -11685,6 +11781,8 @@
 				D0870D9F2701A6BA004EC94E /* YYFileHash.m in Sources */,
 				D0D0459C27477C2100257D01 /* RQTimeViewController.m in Sources */,
 				D04DF6CA27006C57006E3633 /* RQCommonArrowItemViewModel.m in Sources */,
+				90D8AF6C2D5C4B170087C165 /* NYLIVideoDetailSubFooterCell.m in Sources */,
+				905E56AD2D5993630012AB13 /* NYLIVideoDetailSubPageViewController.m in Sources */,
 				9003DDDB2D421CE400DBF457 /* NYLIVipCoachViewController.m in Sources */,
 				D04DF79627006F72006E3633 /* XHLaunchAdButton+RQExtension.m in Sources */,
 				D05CB3DD2763216A006895F3 /* RQHomeSubPageVideoScrollViewController.m in Sources */,
@@ -11777,6 +11875,7 @@
 				D081CD0827F192190054317F /* RQYDTQuestionModel.m in Sources */,
 				D0665706262D6969007F2946 /* RQConstant.m in Sources */,
 				D09E5D3D25E3AA260099E87C /* BDFaceCalculateTool.m in Sources */,
+				90D8AF582D5AF0DF0087C165 /* NYLIVideoDetailSubPageViewModel.m in Sources */,
 				D048E21928191B3C005D606F /* RQSwitch.m in Sources */,
 				906D06AB2CCFC4FB004F51B4 /* NYBaseChartView.m in Sources */,
 				D029D5242249F8A10094B99A /* APPdelegateModularForVendor.m in Sources */,
@@ -12052,6 +12151,7 @@
 				D0870D9A2701A6BA004EC94E /* NSDictionary+YYAdd.m in Sources */,
 				D0B54ADD28CB0EEC00F6EFC4 /* RQHomePageTitleView.m in Sources */,
 				90038E262D0FFE49006A1637 /* NYFailItemPointCellView.m in Sources */,
+				905E56B02D5999580012AB13 /* NYLIVideoDetailHeaderView.m in Sources */,
 				D004D7EC27FDDFCA00A96946 /* RQYDTZGZJLYQuestionModule.m in Sources */,
 				D0870D5A2701A6B9004EC94E /* LCActionSheet.m in Sources */,
 				D04DF6C527006C57006E3633 /* RQBaseNavigationController.m in Sources */,
@@ -12110,6 +12210,7 @@
 				D08E8E5E2930C2B9001CEF97 /* RQTimeRuleItemViewModel.m in Sources */,
 				D04DF6B927006C56006E3633 /* RQEXTRuntimeExtensions.m in Sources */,
 				D0180C3828069F8900ED8E4E /* RQRetrainModule.m in Sources */,
+				905E56B52D59DBCE0012AB13 /* NYLIVideoDetailSubPageSectionHeaderView.m in Sources */,
 				D03BCAA128C9E35A00094B7F /* RQHomePageSubjectModuleItemViewModel.m in Sources */,
 				9074E7EE2CBD025600283D4D /* NYExaminationViewModel.m in Sources */,
 				D0D1F69B283F84E00086C6AE /* RQCountdownView.m in Sources */,
@@ -12213,6 +12314,7 @@
 				D04DF79327006F72006E3633 /* UIColor+RQExtension.m in Sources */,
 				D0870D8F2701A6BA004EC94E /* NSNumber+YYAdd.m in Sources */,
 				D0180C40280826BC00ED8E4E /* RQRetrainViewController.m in Sources */,
+				90D8AF702D5C4C420087C165 /* NYLIVideoDetailSubFooterViewModel.m in Sources */,
 				D0D1F67F283F84DF0086C6AE /* RQExerciseSettingViewController.m in Sources */,
 				D0295EC1243F1CAF00B46AB1 /* DesUtil.m in Sources */,
 				D0D1F693283F84E00086C6AE /* RQHTTPService+RQDeleteWrongRecord.m in Sources */,

BIN
jiaPei.xcworkspace/xcuserdata/mimasigeling.xcuserdatad/UserInterfaceState.xcuserstate


+ 22 - 0
jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "li_bar_btnbg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "li_bar_btnbg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg.imageset/li_bar_btnbg@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg.imageset/li_bar_btnbg@3x.png


+ 22 - 0
jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg_bg.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "li_bar_btnbg_bg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "li_bar_btnbg_bg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg_bg.imageset/li_bar_btnbg_bg@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_bar_btnbg_bg.imageset/li_bar_btnbg_bg@3x.png


+ 22 - 0
jiaPei/Images.xcassets/Modules/小李视频/li_btn播放.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "li_btn播放@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "li_btn播放@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
jiaPei/Images.xcassets/Modules/小李视频/li_btn播放.imageset/li_btn播放@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_btn播放.imageset/li_btn播放@3x.png


+ 22 - 0
jiaPei/Images.xcassets/Modules/小李视频/li_icon_1.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "li_icon_1@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "li_icon_1@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
jiaPei/Images.xcassets/Modules/小李视频/li_icon_1.imageset/li_icon_1@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_icon_1.imageset/li_icon_1@3x.png


+ 22 - 0
jiaPei/Images.xcassets/Modules/小李视频/li_jp_icon.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "li_jp_icon@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "li_jp_icon@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
jiaPei/Images.xcassets/Modules/小李视频/li_jp_icon.imageset/li_jp_icon@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_jp_icon.imageset/li_jp_icon@3x.png


+ 22 - 0
jiaPei/Images.xcassets/Modules/小李视频/li_play_btn_bg.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "li_play_btn_bg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "li_play_btn_bg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
jiaPei/Images.xcassets/Modules/小李视频/li_play_btn_bg.imageset/li_play_btn_bg@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_play_btn_bg.imageset/li_play_btn_bg@3x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_zu_kbg.imageset/li_zu_kbg@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_zu_kbg.imageset/li_zu_kbg@3x.png


+ 22 - 0
jiaPei/Images.xcassets/Modules/小李视频/li_同款题库.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "li_同款题库@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "li_同款题库@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
jiaPei/Images.xcassets/Modules/小李视频/li_同款题库.imageset/li_同款题库@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_同款题库.imageset/li_同款题库@3x.png


+ 22 - 0
jiaPei/Images.xcassets/Modules/小李视频/li_箭头.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "li_箭头@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "li_箭头@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
jiaPei/Images.xcassets/Modules/小李视频/li_箭头.imageset/li_箭头@2x.png


BIN
jiaPei/Images.xcassets/Modules/小李视频/li_箭头.imageset/li_箭头@3x.png


+ 1 - 0
jiaPei/Modules/BaseModule/Common/View/RQCommonFooterView.h

@@ -13,3 +13,4 @@
 /// generate a footer
 + (instancetype)footerViewWithTableView:(UITableView *)tableView;
 @end
+

+ 2 - 0
jiaPei/Modules/HomePageModule/Model/RQHTTPService+RQGetPlaceVideoList.h

@@ -33,6 +33,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, readwrite, copy) NSArray *items;
 
+@property (nonatomic , assign) NSInteger videoOrder;
+
 
 @end
 

+ 31 - 10
jiaPei/Modules/HomePageModule/View/HomePage/NYHomePageOneBigCell.m

@@ -126,21 +126,42 @@
 
 //VIP课程
 - (IBAction)btnVipAction:(UIButton *)sender {
-    NSString *dictType = @"vip_coach_package";
-    [MBProgressHUD rq_showProgressHUD:@"获取VIP套餐..."];
-    [[RQ_HTTP_Service getTypeWithDictType:dictType] subscribeNext:^(NSArray *typeModels) {
+    
+    
+//    NSString *dictType = @"vip_coach_package";
+//    [MBProgressHUD rq_showProgressHUD:@"获取VIP套餐..."];
+//    [[RQ_HTTP_Service getTypeWithDictType:dictType] subscribeNext:^(NSArray *typeModels) {
+//        [MBProgressHUD rq_hideHUD];
+//        NYLIVipCoachViewModel *livipCoachViewModel = [[NYLIVipCoachViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
+//            RQViewModelIDKey : @(RQVIPPageType_Full),
+//            RQViewModelUtilKey : typeModels,
+//            RQViewCommonValueKey : @(RQHomePageSubjectType_SubjectOne),
+//        }];
+//        [RQ_APPDELEGATE.services pushViewModel:livipCoachViewModel animated:YES];
+//    } error:^(NSError * _Nullable error) {
+//        [MBProgressHUD rq_hideHUD];
+//        [MBProgressHUD rq_showErrorTips:error];
+//    }];
+//    return;
+    
+    [MBProgressHUD rq_showProgressHUD:@""];
+    [[RQ_HTTP_Service getFiveTeachingList:@"1"] subscribeNext:^(NSArray *fiveModels) {
         [MBProgressHUD rq_hideHUD];
-        NYLIVipCoachViewModel *livipCoachViewModel = [[NYLIVipCoachViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
-            RQViewModelIDKey : @(RQVIPPageType_Full),
-            RQViewModelUtilKey : typeModels,
-            RQViewCommonValueKey : @(RQHomePageSubjectType_SubjectOne),
-        }];
-        [RQ_APPDELEGATE.services pushViewModel:livipCoachViewModel animated:YES];
+        RQPlaceVideoListModel *placeVideoListModel = [[RQPlaceVideoListModel alloc] init];
+        placeVideoListModel.examName = @"科一专项精品课";
+        placeVideoListModel.items = fiveModels;
+        NSIndexPath *indexPath = [NSIndexPath indexPathWithIndex:0];
+        NYLIVideoDetailViewModel *videoDetailViewModel = [[NYLIVideoDetailViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
+                    RQViewModelUtilKey      : placeVideoListModel,
+                    RQVideoItemIndexKey        : @(0),
+                    RQVideoItemIndexPathKey    : indexPath,
+                    RQHomePageSubjectTypeKey    : @(self.viewModel.homePageSubjectType),
+                }];
+        [RQ_APPDELEGATE.services pushViewModel:videoDetailViewModel animated:YES];
     } error:^(NSError * _Nullable error) {
         [MBProgressHUD rq_hideHUD];
         [MBProgressHUD rq_showErrorTips:error];
     }];
-    
 
     return;
     [RQ_VIP_Module isVipWithSubject:RQ_YDTQuestion_Module.subject + 1 complete:^(BOOL isVip) {

+ 1 - 1
jiaPei/Modules/HomePageModule/ViewModel/HomePage/RQHomePageSubjectOneOrFourViewModel.m

@@ -408,7 +408,7 @@
 
 - (NSArray *)subjectOneSectionZeroArr {
     return @[
-        [[NYHomePageOneBigItemViewModel alloc] initWithNYHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType]
+        [[NYHomePageOneBigItemViewModel alloc] initWithNYHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType treeListModel:self.treeListModel]
     ];
 }
 

+ 2 - 1
jiaPei/Modules/HomePageModule/ViewModel/HomePage/itemViewModel/NYHomePageOneBigItemViewModel.h

@@ -11,6 +11,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 @interface NYHomePageOneBigItemViewModel : RQCommonCollectionItemViewModel
+@property (nonatomic, readwrite, strong) RQTreeListModel *treeListModel;
 @property (nonatomic, readonly, assign) RQHomePageCarType homePageCarType;
 @property (nonatomic, readonly, assign) RQHomePageSubjectType homePageSubjectType;
 
@@ -19,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 
 /// init
-- (instancetype)initWithNYHomePageCarType:(RQHomePageCarType)homePageCarType homePageSubjectType:(RQHomePageSubjectType)homePageSubjectType;
+- (instancetype)initWithNYHomePageCarType:(RQHomePageCarType)homePageCarType homePageSubjectType:(RQHomePageSubjectType)homePageSubjectType treeListModel:(RQTreeListModel *)treeListModel;
 
 @end
 

+ 2 - 1
jiaPei/Modules/HomePageModule/ViewModel/HomePage/itemViewModel/NYHomePageOneBigItemViewModel.m

@@ -17,11 +17,12 @@
 @implementation NYHomePageOneBigItemViewModel
 
 
-- (instancetype)initWithNYHomePageCarType:(RQHomePageCarType)homePageCarType homePageSubjectType:(RQHomePageSubjectType)homePageSubjectType {
+- (instancetype)initWithNYHomePageCarType:(RQHomePageCarType)homePageCarType homePageSubjectType:(RQHomePageSubjectType)homePageSubjectType treeListModel:(nonnull RQTreeListModel *)treeListModel {
     if (self = [super init]) {
         @weakify(self)
         self.homePageCarType = homePageCarType;
         self.homePageSubjectType = homePageSubjectType;
+        self.treeListModel = treeListModel;
         CGFloat width = RQ_SCREEN_WIDTH;
         CGFloat height = RQ_FIT_HORIZONTAL(363.f);
         self.itemSize = CGSizeMake(width, height);

+ 41 - 21
jiaPei/Modules/OtherModules/ExaminationModule/Controller/NYExaminationRoomViewController.m

@@ -13,6 +13,7 @@
 
 @interface NYExaminationRoomViewController ()
 
+@property  (nonatomic, readwrite, strong) NYExaminationRoomViewModel *viewModel;
 
 @property (weak, nonatomic) IBOutlet UIView *content_view;
 
@@ -65,7 +66,7 @@
 @end
 
 @implementation NYExaminationRoomViewController
-
+@dynamic viewModel;
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view from its nib.
@@ -76,6 +77,12 @@
     self.submit_btn.layer.borderWidth = 1.0f;
     self.submit_btn.layer.borderColor = UIColorHex(0x9A9B9D).CGColor;
     
+    //小李题
+    if(self.viewModel.questionArr!=NULL){
+        self.timeLabel.hidden = YES;
+        self.submit_btn.hidden = YES;
+    }
+    
     self.content01_view.layer.borderWidth = 1.0f;
     self.content01_view.layer.borderColor = UIColorHex(0xD9D9D9).CGColor;
     [self enterLandscapeFullScreen:UIInterfaceOrientationLandscapeLeft animated:YES];
@@ -97,16 +104,22 @@
 }
 
 - (void)initYDTQuestiondata{
-    self.score = 0;
-    NSArray *arr = [RQ_YDTQuestion_Module getQuestionWithExerciseType:RQExerciseType_Exam];
-    __block NSInteger num = 0;
-    arr = [arr.rac_sequence.signal map:^id _Nullable(RQYDTQuestionModel  *ydtQuestionModel) {
-        ydtQuestionModel.num = num;
-        num ++;
-        return [RQExerciseModel exerciseModelWithRQYDTQuestionModel:ydtQuestionModel];
-    }].toArray;
-    self.exercise_array = arr;
-    self.index = 0;
+    if(self.viewModel.questionArr!=NULL){
+        self.score = 0;
+        self.exercise_array = self.viewModel.questionArr;
+        self.index = 0;
+    }else{
+        self.score = 0;
+        NSArray *arr = [RQ_YDTQuestion_Module getQuestionWithExerciseType:RQExerciseType_Exam];
+        __block NSInteger num = 0;
+        arr = [arr.rac_sequence.signal map:^id _Nullable(RQYDTQuestionModel  *ydtQuestionModel) {
+            ydtQuestionModel.num = num;
+            num ++;
+            return [RQExerciseModel exerciseModelWithRQYDTQuestionModel:ydtQuestionModel];
+        }].toArray;
+        self.exercise_array = arr;
+        self.index = 0;
+    }
 }
 
 - (void)exerciseLoadData{
@@ -290,16 +303,18 @@
 }
 
 - (void)setupTimeLabel{
-    RQ_Exercise_Module.count = 45 * 60;
-    [RQ_Exercise_Module startTimer];
-    RAC(_timeLabel, text) = [RACObserve(RQ_Exercise_Module, count) map:^id _Nullable(id  _Nullable value) {
-        NSUInteger sec = RQ_Exercise_Module.count%60;
-        NSUInteger min = RQ_Exercise_Module.count/60;
-        NSString* sec0,*min0;
-        sec0 = sec<10 ? @"0" : @"";
-        min0 = min<10 ? @"0" : @"";
-        return [NSString stringWithFormat:@"%@%lu:%@%lu",min0,(unsigned long)min,sec0,(unsigned long)sec];
-    }];
+    if(self.viewModel.questionArr==NULL){
+        RQ_Exercise_Module.count = 45 * 60;
+        [RQ_Exercise_Module startTimer];
+        RAC(_timeLabel, text) = [RACObserve(RQ_Exercise_Module, count) map:^id _Nullable(id  _Nullable value) {
+            NSUInteger sec = RQ_Exercise_Module.count%60;
+            NSUInteger min = RQ_Exercise_Module.count/60;
+            NSString* sec0,*min0;
+            sec0 = sec<10 ? @"0" : @"";
+            min0 = min<10 ? @"0" : @"";
+            return [NSString stringWithFormat:@"%@%lu:%@%lu",min0,(unsigned long)min,sec0,(unsigned long)sec];
+        }];
+    }
 }
 
 - (void)viewWillAppear:(BOOL)animated {
@@ -336,6 +351,11 @@
 }
 
 - (IBAction)backAtciondo:(id)sender {
+    if(self.viewModel.questionArr!=NULL){
+        [self.navigationController.navigationBar setHidden:NO];
+        [self.navigationController popToRootViewControllerAnimated:YES];
+        return;
+    }
     [self.examinationTipsViewController showTypeTipsView:3 invView:self.view inModel:nil];
 }
 

+ 5 - 5
jiaPei/Modules/OtherModules/ExaminationModule/Controller/NYExaminationRoomViewController.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina5_5" orientation="landscape" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -291,8 +291,8 @@
                                             </constraints>
                                         </view>
                                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hri-P2-UAQ" userLabel="View-bk">
-                                            <rect key="frame" x="12" y="12" width="199" height="278"/>
-                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                            <rect key="frame" x="12" y="12" width="211" height="278"/>
+                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                         </view>
                                     </subviews>
                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -301,7 +301,7 @@
                                         <constraint firstItem="hri-P2-UAQ" firstAttribute="top" secondItem="RAb-DG-j0h" secondAttribute="top" constant="12" id="J74-D0-Pyt"/>
                                         <constraint firstAttribute="width" constant="223" id="Khg-1A-4Zq"/>
                                         <constraint firstItem="hri-P2-UAQ" firstAttribute="leading" secondItem="RAb-DG-j0h" secondAttribute="leading" constant="12" id="OaQ-1X-IeW"/>
-                                        <constraint firstAttribute="trailing" secondItem="hri-P2-UAQ" secondAttribute="trailing" constant="12" id="XOs-Mc-AdT"/>
+                                        <constraint firstAttribute="trailing" secondItem="hri-P2-UAQ" secondAttribute="trailing" id="XOs-Mc-AdT"/>
                                         <constraint firstAttribute="bottom" secondItem="5Yo-gm-91p" secondAttribute="bottom" id="aCM-Cx-PY7"/>
                                         <constraint firstItem="5Yo-gm-91p" firstAttribute="leading" secondItem="RAb-DG-j0h" secondAttribute="leading" id="kCU-Hf-zT2"/>
                                         <constraint firstAttribute="bottom" secondItem="hri-P2-UAQ" secondAttribute="bottom" constant="12" id="vub-te-979"/>

+ 16 - 4
jiaPei/Modules/OtherModules/ExaminationModule/Controller/NYExaminationViewController.m

@@ -9,7 +9,7 @@
 #import "NYExaminationViewController.h"
 
 @interface NYExaminationViewController ()
-
+@property  (nonatomic, readwrite, strong) NYExaminationViewModel *viewModel;
 @property (weak, nonatomic) IBOutlet UIView *view01;
 
 @property (weak, nonatomic) IBOutlet UIButton *back_btn;
@@ -28,7 +28,7 @@
 @end
 
 @implementation NYExaminationViewController
-
+@dynamic viewModel;
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view from its nib.
@@ -54,8 +54,20 @@
 }
 
 - (IBAction)submitActionClickdo:(UIButton *)sender {
-    NYExaminationRoomViewModel *examinationroomViewModel = [[NYExaminationRoomViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{}];
-    [RQ_APPDELEGATE.services pushViewModel:examinationroomViewModel animated:YES];
+    if(self.viewModel.questionArr!=NULL){
+        NYExaminationRoomViewModel *examinationroomViewModel = [[NYExaminationRoomViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
+            RQHomePageCarTypeKey        : @(self.viewModel.homePageCarType),
+            RQHomePageSubjectTypeKey    : @(self.viewModel.homePageSubjectType),
+            RQHomeSubPageTypeKey        : @(self.viewModel.homeSubPageType),
+            RQViewModelIDKey            : self.viewModel.titleStr,
+            RQExerciseTypeKey           : @(RQExerciseType_Sequential_LI),
+            RQViewModelUtilKey          : self.viewModel.questionArr,
+        }];
+        [RQ_APPDELEGATE.services pushViewModel:examinationroomViewModel animated:YES];
+    }else{
+        NYExaminationRoomViewModel *examinationroomViewModel = [[NYExaminationRoomViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{}];
+        [RQ_APPDELEGATE.services pushViewModel:examinationroomViewModel animated:YES];
+    }
 }
 
 

+ 18 - 4
jiaPei/Modules/OtherModules/ExaminationModule/View/NYChartView/NYChartMatrixView/NYChartMatrixView.m

@@ -15,6 +15,8 @@
 //内容view
 @property (nonatomic,weak) UIView *contentView;
 
+@property (nonatomic,weak) UIScrollView *mScrollView;
+
 @property (nonatomic,weak) UIButton *currentBtn;
 
 @end
@@ -45,15 +47,25 @@
 {
 //    self.backgroundColor = UIColor.yellowColor;
     
-    UIView *contentView = [[UIView alloc] init];
-    [self addSubview:contentView];
-    self.contentView = contentView;
-    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
+    UIScrollView *mScrollView = [[UIScrollView alloc] init];
+    [self addSubview:mScrollView];
+    self.mScrollView = mScrollView;
+    [mScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.top.bottom.mas_equalTo(self);
         make.left.mas_equalTo(self).offset(0);
         make.right.mas_equalTo(self).offset(0);
     }];
     
+    UIView *contentView = [[UIView alloc] init];
+    contentView.mj_w = 200.f;
+    [mScrollView addSubview:contentView];
+    self.contentView = contentView;
+//    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.bottom.mas_equalTo(self);
+//        make.left.mas_equalTo(self).offset(0);
+//        make.right.mas_equalTo(self).offset(0);
+//    }];
+    
 }
 
 - (void)layoutSubviews
@@ -93,7 +105,9 @@
                 [cell.itemButton setTitleColor:dict[@"color"] forState:UIControlStateNormal];
                 [cell.itemButton addTarget:self action:@selector(itemClickdo:) forControlEvents:UIControlEventTouchUpInside];
                 [self.contentView addSubview:cell];
+                self.contentView.mj_h = cell.bottom+10.f;
             }
+            self.mScrollView.contentSize = CGSizeMake(0, self.contentView.mj_h);
         }
     }else{
         [self updateView];

+ 1 - 1
jiaPei/Modules/OtherModules/ExaminationModule/ViewModel/NYExaminationRoomViewModel.h

@@ -10,7 +10,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface NYExaminationRoomViewModel : RQBaseViewModel
+@interface NYExaminationRoomViewModel : RQExerciseViewModel
 
 @end
 

+ 1 - 1
jiaPei/Modules/OtherModules/ExaminationModule/ViewModel/NYExaminationViewModel.h

@@ -10,7 +10,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface NYExaminationViewModel : RQBaseViewModel
+@interface NYExaminationViewModel : RQExerciseViewModel
 
 @property (nonatomic,assign) int km;
 

+ 4 - 0
jiaPei/Modules/OtherModules/ExerciseModule/RQExerciseModule.h

@@ -35,6 +35,8 @@ FOUNDATION_EXTERN NSString * const NYBlockExerciseUpdateNotification;
 typedef NS_ENUM(NSUInteger, RQExerciseType) {
     /// 顺序练习
     RQExerciseType_Sequential,
+    /// 顺序练习-小李
+    RQExerciseType_Sequential_LI,
     /// 背题模式
     RQExerciseType_Recitation,
     /// 随机练习
@@ -93,6 +95,8 @@ typedef NS_ENUM(NSUInteger, RQExerciseType) {
     RQExerciseType_Block_List,
     /// 易错专项
     RQExerciseType_Error_Special_List,
+    /// 模拟考试-小李
+    RQExerciseType_Exam_LI,
 };
 
 

+ 1 - 1
jiaPei/Modules/OtherModules/VIPModule/Model/RQHTTPService+RQPostPrepareOrder.h

@@ -31,7 +31,7 @@ NS_ASSUME_NONNULL_BEGIN
  @param userId 用户Id
  @return Returns a signal which will send complete, or error.
  */
-- (RACSignal *)postPrepareOrderWithDictCode:(NSInteger)dictCode userId:(NSString *)userId;
+- (RACSignal *)postPrepareOrderLIWithDictCode:(NSInteger)dictCode userId:(NSString *)userId goodsType:(RQGoodsType)goodsType;
 
 
 - (RACSignal *)postPrepareOrderWithGoodsId:(NSString *)goodsId userId:(NSString *)userId goodsType:(RQGoodsType)goodsType;

+ 3 - 2
jiaPei/Modules/OtherModules/VIPModule/Model/RQHTTPService+RQPostPrepareOrder.m

@@ -18,13 +18,14 @@
  @param userId 用户Id
  @return Returns a signal which will send complete, or error.
  */
-- (RACSignal *)postPrepareOrderWithDictCode:(NSInteger)dictCode userId:(NSString *)userId {
+- (RACSignal *)postPrepareOrderLIWithDictCode:(NSInteger)dictCode userId:(NSString *)userId goodsType:(RQGoodsType)goodsType {
     /// 1. 配置参数
     RQKeyedSubscript *subscript = [RQKeyedSubscript subscript];
     subscript[@"dictCode"] = @(dictCode);
     subscript[@"userId"] = @([userId integerValue]);
     subscript[@"phoneType"] = @1;
-    
+    /// 商品类型 1:考场 2:实物  4特训
+    subscript[@"goodsType"] = @(goodsType);
     /// 2. 配置参数模型
     RQURLParameters *paramters = [RQURLParameters urlParametersWithMethod:RQ_HTTTP_METHOD_POST path:RQ_POST_PrepareOrder parameters:subscript.dictionary];
     

+ 3 - 3
jiaPei/Modules/OtherModules/VIPModule/ViewModel/itemViewModel/小李/NYLIVipAuthorityNewItemViewModel.m

@@ -23,17 +23,17 @@
         self.chooseTypeModel = chooseTypeModel;
         CGFloat RQVipAuthorityCellWidth = RQ_SCREEN_WIDTH;
         CGFloat RQVipAuthorityCellHeight = RQVipAuthorityCellWidth * (145.f / 375.f) + 10;
-        if ([chooseTypeModel.dictLabel containsString:@"科一特训包"]) {
+        if ([chooseTypeModel.dictLabel isEqualToString:@"科一特训包"]) {
             self.bgImageName = @"li_zu_kbg01";
             self.authorityTitle = @"尊享科一特训包权益";
             self.authorityTitle01 = @"精选 500题,覆盖高频考点";
             self.authorityTitle02 = @"尊分类讲解,深入解析易错题同款题库模拟,助你轻松过关";
-        } else if ([chooseTypeModel.dictLabel containsString:@"科四特训包"]) {
+        } else if ([chooseTypeModel.dictLabel isEqualToString:@"科四特训包"]) {
             self.bgImageName = @"li_zu_kbg02";
             self.authorityTitle = @"尊享科四特训包权益";
             self.authorityTitle01 = @"精选 300题,直击考场重点";
             self.authorityTitle02 = @"分类讲解,掌握技巧与核心内容同款题库模拟,快速提升通过率";
-        } else if ([chooseTypeModel.dictLabel containsString:@"科一科四特训包"]) {
+        } else if ([chooseTypeModel.dictLabel isEqualToString:@"科一科四特训包"]) {
             self.bgImageName = @"li_zu_kbg03";
             self.authorityTitle = @"尊享科一科四特训包权益";
             self.authorityTitle01 = @"包含科目一 500题和科目四300题";

+ 17 - 0
jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailSubPageViewController.h

@@ -0,0 +1,17 @@
+//
+//  NYLIVideoDetailSubPageViewController.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/10.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailSubPageViewController : RQCommonViewController <JXPagerViewListViewDelegate>
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 171 - 0
jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailSubPageViewController.m

@@ -0,0 +1,171 @@
+//
+//  NYLIVideoDetailSubPageViewController.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/10.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailSubPageViewController.h"
+
+@interface NYLIVideoDetailSubPageViewController ()
+/// viewModel
+@property (nonatomic, readonly, strong) NYLIVideoDetailSubPageViewModel *viewModel;
+@property (nonatomic, readwrite, copy) void(^scrollCallback)(UIScrollView *scrollView);
+@property (nonatomic, readwrite, strong) NYLIVideoDetailSubPageSectionHeaderView *videoDetailSubPageSectionHeaderView;
+@property (nonatomic, readwrite, strong) UIView *tableViewBgView;
+/// 顶部视频播放器的高度
+@property (nonatomic, readonly, assign) float videoPlayerHeight;
+
+/// 顶部sectionHeaderView的高度
+@property (nonatomic, readonly, assign) float sectionHeaderViewHeight;
+
+@end
+
+@implementation NYLIVideoDetailSubPageViewController
+@dynamic viewModel, tableView;
+
+#pragma mark - SystemMethod
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    /// 初始化
+    [self rq_setup];
+}
+
+- (void)viewDidLayoutSubviews {
+    [super viewDidLayoutSubviews];
+    @weakify(self)
+    self.tableView.frame = CGRectMake(0, self.sectionHeaderViewHeight, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT - RQ_APPLICATION_STATUS_BAR_HEIGHT - self.videoPlayerHeight - 20 - self.sectionHeaderViewHeight - 16);
+    self.tableViewBgView.frame = CGRectMake(0, 0, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT);
+    [self.view sendSubviewToBack:self.tableViewBgView];
+    
+    [self.videoDetailSubPageSectionHeaderView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        @strongify(self)
+        make.top.mas_equalTo(self.tableViewBgView.mas_top).mas_offset(0);
+        make.centerX.mas_equalTo(self.tableViewBgView);
+        make.size.mas_equalTo(CGSizeMake(RQ_SCREEN_WIDTH, self.sectionHeaderViewHeight));
+    }];
+    
+    //视频同款题库
+    [self.videoDetailSubPageSectionHeaderView.right_btn addTarget:self action:@selector(gotoFooterCell:) forControlEvents:UIControlEventTouchUpInside];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+}
+
+
+#pragma mark - PrivateMethods
+/// 初始化
+- (void)rq_setup {
+    /// set up ...
+    @weakify(self)
+    self.tableView.backgroundColor = UIColor.clearColor;
+    self.tableView.showsVerticalScrollIndicator = NO;
+    [self.view addSubview:self.tableViewBgView];
+//    [self.videoDetailSubPageSectionHeaderView.headerBtn setTitleNormal:self.viewModel.title];
+//    self.videoDetailSubPageSectionHeaderView.headerSubTitleLabel.text = self.viewModel.subTitle;
+    [[RACObserve(self.viewModel, updateDataType) takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id  _Nullable x) {
+        @strongify(self)
+        if (self.viewModel.updateDataType == RQVideoDetailSubPageUpdateDataType_Complete) {
+            [RQNotificationCenter postNotificationName:RQPlayVideoUrlNotification object:@{
+                RQPlayVideoItemKey : self.viewModel.videoArr[0],
+                RQPlayVideoItemArrKey : self.viewModel.videoArr,
+            }];
+        }
+    }];
+}
+
+#pragma mark - OverrideMethods
+- (UIEdgeInsets)contentInset {
+    return UIEdgeInsetsMake(0, 0, 0, 0);
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath {
+    RQCommonGroupViewModel *groupViewModel = self.viewModel.dataSource[indexPath.section];
+    RQCommonItemViewModel *itemViewModel = groupViewModel.itemViewModels[indexPath.row];
+    return [NSClassFromString(itemViewModel.itemClassName) cellWithTableView:tableView];
+}
+
+
+- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath withObject:(id)object {
+    switch (indexPath.section) {
+        case 0: {
+            if([object isKindOfClass:[NYLIVideoDetailSubFooterViewModel class]]){
+                NYLIVideoDetailSubFooterCell *videoDetailSubFooterCell = (NYLIVideoDetailSubFooterCell *)cell;
+                [videoDetailSubFooterCell bindViewModel:object];
+            }else{
+                NYLIVideoDetailSubPageCell *videoDetailSubPageCell = (NYLIVideoDetailSubPageCell *)cell;
+                [videoDetailSubPageCell bindViewModel:object];
+            }
+            break;
+        }
+            
+        default: {
+            [super configureCell:cell atIndexPath:indexPath withObject:object];
+            break;
+        }
+    }
+    
+}
+
+//- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+//    return self.videoDetailSubPageSectionHeaderView;
+//}
+//
+//- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+//    return self.videoDetailSubPageSectionHeaderView.height;
+//}
+
+
+//滚动到底部
+- (void)gotoFooterCell:(UIButton *)btn {
+    RQCommonGroupViewModel *groupViewModel = self.viewModel.dataSource[0];
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:groupViewModel.itemViewModels.count-1 inSection:0];
+    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];
+}
+
+#pragma mark - JXCategoryListViewDelegate
+
+- (UIView *)listView {
+    return self.view;
+}
+
+- (UIScrollView *)listScrollView {
+    return self.tableView;
+}
+
+- (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback {
+    self.scrollCallback = callback;
+}
+
+#pragma mark - LazyLoad
+- (NYLIVideoDetailSubPageSectionHeaderView *)videoDetailSubPageSectionHeaderView {
+    if (!_videoDetailSubPageSectionHeaderView) {
+        _videoDetailSubPageSectionHeaderView = [NYLIVideoDetailSubPageSectionHeaderView videoDetailSubPageSectionHeaderView];
+    }
+    return _videoDetailSubPageSectionHeaderView;
+}
+
+- (float)videoPlayerHeight {
+    return RQ_FIT_HORIZONTAL(210.f);
+}
+
+
+- (UIView *)tableViewBgView {
+    if (!_tableViewBgView) {
+        _tableViewBgView = [[UIView alloc] init];
+        _tableViewBgView.frame = self.tableView.frame;
+        _tableViewBgView.alpha = 1.0;
+        _tableViewBgView.backgroundColor = UIColor.clearColor;
+        [_tableViewBgView addSubview:self.videoDetailSubPageSectionHeaderView];
+        
+    }
+    return _tableViewBgView;
+}
+
+- (float)sectionHeaderViewHeight {
+    return RQ_FIT_HORIZONTAL(94.f);
+}
+
+@end

+ 18 - 0
jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailViewController.h

@@ -0,0 +1,18 @@
+//
+//  NYLIVideoDetailViewController.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/8.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "RQVideoDetailSubPageViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailViewController : RQCommonViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 300 - 0
jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailViewController.m

@@ -0,0 +1,300 @@
+//
+//  NYLIVideoDetailViewController.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/8.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailViewController.h"
+
+@interface NYLIVideoDetailViewController () <JXCategoryViewDelegate, JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate>
+/// viewModel
+@property (nonatomic, readonly, strong) NYLIVideoDetailViewModel *viewModel;
+@property (nonatomic, readwrite, strong) JXPagerView *pagerView;
+@property (nonatomic, readwrite, strong) JXCategoryTitleBackgroundView *categoryView;
+
+@property (nonatomic, readwrite, strong) NYLIVideoDetailHeaderView *lvheaderView;
+
+@property (nonatomic, readwrite, strong) NSArray <NSString *> *titles;
+@property (nonatomic, readwrite, strong) NSArray <NSString *> *imagesArr;
+
+
+@property (nonatomic, readonly, assign) float cycleScrollViewHeight;
+@property (nonatomic, readonly, assign) float cellWeight;
+
+
+@end
+
+@implementation NYLIVideoDetailViewController
+@dynamic viewModel;
+
+#pragma mark - SystemMethod
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    /// 初始化
+    [self rq_setup];
+}
+
+- (void)viewDidLayoutSubviews {
+    [super viewDidLayoutSubviews];
+    self.pagerView.frame = CGRectMake(0, 0, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT);
+}
+
+- (void)dealloc {
+    [RQ_Video_Module.playerController stop];
+    if (self.lvheaderView) {
+        [self.lvheaderView removeFromSuperview];
+        self.lvheaderView = nil;
+    }
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    RQ_Video_Module.playerController.viewControllerDisappear = NO;
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    RQ_Video_Module.playerController.viewControllerDisappear = YES;
+}
+
+- (BOOL)shouldAutorotate {
+    return NO;
+}
+
+- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
+    if (RQ_Video_Module.playerController.player.isFullScreen) {
+        return UIInterfaceOrientationMaskLandscape;
+    }
+    return UIInterfaceOrientationMaskPortrait;
+}
+
+
+#pragma mark - PrivateMethods
+/// 初始化
+- (void)rq_setup {
+    NSMutableArray *typeNameStrArr = @[].mutableCopy;
+    __block NSArray *typeNameArr = @[];
+    @weakify(self)
+    
+    if (!RQObjectIsNil(self.viewModel.placeVideoListModel)) {
+        self.titles = @[@""];
+        [self.pagerView setDefaultSelectedIndex:0];
+        [self.categoryView setDefaultSelectedIndex:0];
+        [self.categoryView reloadData];
+        /// set up ...
+        [self.view addSubview:self.pagerView];
+    }
+    [RQNotificationCenter removeObserver:self name:RQPlayVideoUrlNotification object:nil];
+    /// 播放
+    WeakSelf(weakSelf)
+    [RQ_Video_Module.playerController stop];
+    RQ_Video_Module.videoDetailViewController = self;
+
+    [[[[RQNotificationCenter rac_addObserverForName:RQPlayVideoUrlNotification object:nil] takeUntil:self.rac_willDeallocSignal] deliverOnMainThread] subscribeNext:^(NSNotification * note) {
+        [weakSelf myVideoUrlNotification:note];
+    }];
+    
+    [self.lvheaderView.back_btn addTarget:self action:@selector(backActiondo:) forControlEvents:UIControlEventTouchUpInside];
+}
+
+//返回
+- (void)backActiondo:(UIButton *)btn{
+    
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+
+- (void)myVideoUrlNotification:(NSNotification *)note{
+    NSLog(@"RQNotificationCenter-----播放---AD-广告");
+    VideosItem *videosItem = note.object[RQPlayVideoItemKey];
+    NSArray *videoItemArr = note.object[RQPlayVideoItemArrKey];
+    NYLIVideoDetailSubPageViewController *videoDetailSubPageViewController = (NYLIVideoDetailSubPageViewController *)self.pagerView.listContainerView.validListDict[@(self.pagerView.listContainerView.currentIndex)];
+    if ([RQ_Video_Module isCanWatchWithVideosItem:videosItem]) {
+        [RQ_Video_Module playVideoWithVideosItem:videosItem videosItemArr:videoItemArr playView:self.lvheaderView.play_view scrollView:videoDetailSubPageViewController.tableView];
+    }
+}
+
+- (NSString *)lineFeedWithStr:(NSString *)str {
+    if (str.length > 8) {
+        NSMutableString *strs = [[NSMutableString alloc] initWithString:str];
+        [strs insertString:@"\n" atIndex:8];
+        return strs.copy;
+    } else {
+        return str;
+    }
+}
+
+
+#pragma mark - JXPagerViewDelegate
+- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
+    return self.lvheaderView;
+}
+
+- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
+    return self.cycleScrollViewHeight;
+}
+
+- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return 0;//self.titles.count > 1? self.cellWeight * ((37.f + (4.3f * 2)) / 80.f) : 0;
+}
+
+- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return self.categoryView;
+}
+
+- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
+    //和categoryView的item数量一致
+    return self.categoryView.titles.count;
+}
+
+- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
+
+        if (!RQObjectIsNil(self.viewModel.placeVideoListModel)) {
+            NSArray *videosItemArr = [self.viewModel.placeVideoListModel.items.rac_sequence.signal map:^id _Nullable(RQPlaceVideoListModel *placeVideoListModel) {
+                VideosItem *videosItem = [[VideosItem alloc] init];
+                videosItem.videoType = RQVideoType_KaoChang;
+                videosItem.video_url = placeVideoListModel.videoUrl;
+                videosItem.coverFileUrl = placeVideoListModel.videoCover;
+                videosItem.title = placeVideoListModel.videoName;
+                videosItem.permission = [placeVideoListModel.permission integerValue];
+                videosItem.placeVideoListModel = self.viewModel.placeVideoListModel;
+                return videosItem;
+            }].toArray;
+            NYLIVideoDetailSubPageViewModel *videoDetailSubPageViewModel = [[NYLIVideoDetailSubPageViewModel alloc] initWithServices:self.viewModel.services params:@{
+                RQViewModelTitleKey : self.viewModel.placeVideoListModel.examName,
+                RQViewModelIDKey    : @"",
+                RQViewModelUtilKey  : videosItemArr,
+                RQViewCommonValueKey: self.viewModel.indexPath,
+                RQHomeSubPageTypeKey: @(self.viewModel.homePageSubjectType),
+            }];
+            NYLIVideoDetailSubPageViewController *videoDetailSubPageViewController = [[NYLIVideoDetailSubPageViewController alloc] initWithViewModel:videoDetailSubPageViewModel];
+            return videoDetailSubPageViewController;
+        } else {
+            NYLIVideoDetailSubPageViewModel *videoDetailSubPageViewModel = [[NYLIVideoDetailSubPageViewModel alloc] initWithServices:self.viewModel.services params:@{
+                RQViewModelTitleKey : @"",
+                RQViewModelIDKey    : @"",
+                RQViewModelUtilKey  : @[],
+                RQViewCommonValueKey: [NSIndexPath indexPathForRow:0 inSection:0],
+                RQHomeSubPageTypeKey: @(self.viewModel.homePageSubjectType),
+            }];
+            NYLIVideoDetailSubPageViewController *videoDetailSubPageViewController = [[NYLIVideoDetailSubPageViewController alloc] initWithViewModel:videoDetailSubPageViewModel];
+            return videoDetailSubPageViewController;
+        }
+    
+}
+
+#pragma mark - JXCategoryViewDelegate
+- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
+    self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
+}
+
+- (void)categoryView:(JXCategoryBaseView *)categoryView didClickSelectedItemAtIndex:(NSInteger)index {
+    NYLIVideoDetailSubPageViewController *videoDetailSubPageViewController = (NYLIVideoDetailSubPageViewController *)self.pagerView.listContainerView.validListDict[@(index)];
+    NYLIVideoDetailSubPageViewModel *videoDetailSubPageViewModel = (NYLIVideoDetailSubPageViewModel *)videoDetailSubPageViewController.viewModel;
+    [RQNotificationCenter postNotificationName:RQPlayVideoUrlNotification object:@{
+        RQPlayVideoItemKey : videoDetailSubPageViewModel.videoArr.firstObject,
+        RQPlayVideoItemArrKey : videoDetailSubPageViewModel.videoArr,
+    }];
+}
+
+- (void)categoryView:(JXCategoryBaseView *)categoryView didScrollSelectedItemAtIndex:(NSInteger)index {
+    NYLIVideoDetailSubPageViewController *videoDetailSubPageViewController = (NYLIVideoDetailSubPageViewController *)self.pagerView.listContainerView.validListDict[@(index)];
+    NYLIVideoDetailSubPageViewModel *videoDetailSubPageViewModel = (NYLIVideoDetailSubPageViewModel *)videoDetailSubPageViewController.viewModel;
+    [RQNotificationCenter postNotificationName:RQPlayVideoUrlNotification object:@{
+        RQPlayVideoItemKey : videoDetailSubPageViewModel.videoArr.firstObject,
+        RQPlayVideoItemArrKey : videoDetailSubPageViewModel.videoArr,
+    }];
+}
+
+#pragma mark - JXPagerMainTableViewGestureDelegate
+- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
+    if ([self checkIsNestContentScrollView:(UIScrollView *)gestureRecognizer.view] || [self checkIsNestContentScrollView:(UIScrollView *)otherGestureRecognizer.view]) {
+        //如果交互的是嵌套的contentScrollView,证明在左右滑动,就不允许同时响应
+        return NO;
+    }
+    return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
+}
+
+- (BOOL)checkIsNestContentScrollView:(UIScrollView *)scrollView {
+    for (RQHomeSubPageViewController *list in self.pagerView.validListDict.allValues) {
+        if (list.tableView == scrollView) {
+            return YES;
+        }
+    }
+    return NO;
+}
+
+
+
+#pragma mark - LazyLoad
+- (JXPagerView *)pagerView {
+    if (!_pagerView) {
+        _pagerView = [[JXPagerView alloc] initWithDelegate:self];
+        _pagerView.mainTableView.gestureDelegate = self;
+        _pagerView.mainTableView.bounces = NO;
+        _pagerView.pinSectionHeaderVerticalOffset = self.cycleScrollViewHeight;
+        _pagerView.isMirror = YES;
+    }
+    return _pagerView;
+}
+
+- (JXCategoryTitleBackgroundView *)categoryView {
+    if (!_categoryView) {
+        _categoryView = [[JXCategoryTitleBackgroundView alloc] init];
+        _categoryView.delegate = self;
+        
+        _categoryView.titles = self.titles;
+        _categoryView.titleSelectedColor = UIColor.whiteColor;
+        _categoryView.titleColor = RQ_MAIN_TEXT_COLOR_2;
+        _categoryView.titleFont = RQMediumFont(11);
+        _categoryView.titleNumberOfLines = 0;
+        _categoryView.titleSelectedFont = RQMediumFont(11);
+        _categoryView.titleColorGradientEnabled = YES;
+        
+        _categoryView.contentEdgeInsetLeft = 16;
+        _categoryView.contentEdgeInsetRight = 16;
+        _categoryView.cellWidth = self.cellWeight;
+        _categoryView.cellSpacing = 8;
+        
+        _categoryView.backgroundColor = RQ_BACKGROUNDCOLOR_1;
+        _categoryView.backgroundHeight = 0;
+        
+        JXCategoryIndicatorImageView *indicatorImageView1 = [[JXCategoryIndicatorImageView alloc] init];
+        indicatorImageView1.componentPosition = JXCategoryComponentPosition_Top;
+        indicatorImageView1.indicatorImageView.image = RQImageNamed(@"arrowUP");
+        indicatorImageView1.indicatorImageViewSize = CGSizeMake(self.cellWeight * (11 / 80.f), 0);
+
+        _categoryView.indicators = @[indicatorImageView1];
+        _categoryView.defaultSelectedIndex = 0;
+
+        /// !!!: 将列表容器视图关联到 categoryView
+        _categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
+    }
+    return _categoryView;
+}
+
+- (NYLIVideoDetailHeaderView *)lvheaderView {
+    if (!_lvheaderView) {
+        _lvheaderView = [NYLIVideoDetailHeaderView liVideoDetailHeaderView];
+    }
+    return _lvheaderView;
+}
+
+- (NSArray<NSString *> *)titles {
+    if (!_titles) {
+        _titles = @[@"侧方停车", @"倒车入库", @"坡道定点\n停车与起步", @"曲线行驶"];
+    }
+    return _titles;
+}
+
+
+- (float)cycleScrollViewHeight {
+    return RQ_FIT_HORIZONTAL(280.f);
+}
+
+- (float)cellWeight {
+    return (RQ_SCREEN_WIDTH - (8 * 3) - (16 * 2)) / 4.f;
+}
+@end

+ 28 - 0
jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVipCoachViewController.m

@@ -137,6 +137,7 @@
         if (RQObjectIsNil(RQ_VIP_Module.chooseTypeModel)) {
             [MBProgressHUD rq_showTips:@"暂无可用VIP套餐"];
         } else {
+            
             [self.wpviewModel wwvPLJS:RQ_VIP_Module.chooseTypeModel.dictCode];
         }
     }];
@@ -161,6 +162,33 @@
         if (RQObjectIsNil(RQ_VIP_Module.chooseTypeModel)) {
             [MBProgressHUD rq_showTips:@"暂无可用VIP套餐"];
         } else {
+            [MBProgressHUD rq_showProgressHUD:@"创建订单..."];
+            [[RQ_HTTP_Service postPrepareOrderLIWithDictCode:RQ_VIP_Module.chooseTypeModel.dictCode userId:RQ_USER_MANAGER.currentUser._id goodsType:4] subscribeNext:^(RQPrepareOrderModel *prepareOrderModel) {
+                [MBProgressHUD rq_hideHUD];
+                // 发起微信支付,设置参数
+                //需要创建这个支付对象
+                PayReq *req   = [[PayReq alloc] init];
+                //由用户微信号和AppID组成的唯一标识,用于校验微信用户
+                req.openID = RQ_WECHAT_MANAGER.appID;
+                // 商家id,在注册的时候给的
+                req.partnerId = prepareOrderModel.partnerId;
+                // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
+                req.prepayId  = prepareOrderModel.prepayId;
+                // 根据财付通文档填写的数据和签名
+                req.package  = prepareOrderModel.packageValue;
+                // 随机编码,为了防止重复的,在后台生成
+                req.nonceStr  = prepareOrderModel.nonceStr;
+                // 这个是时间戳,也是在后台生成的,为了验证支付的
+                NSString * stamp = prepareOrderModel.timeStamp;
+                req.timeStamp = (UInt32)stamp.intValue;
+                // 这个签名也是后台做的
+                req.sign = prepareOrderModel.sign;
+                [RQWechatManager hangleWechatPayWith:req];
+            } error:^(NSError * _Nullable error) {
+                [MBProgressHUD rq_hideHUD];
+                [MBProgressHUD rq_showErrorTips:error];
+            }];
+            return;
             [self.wpviewModel wwvPLJS:RQ_VIP_Module.chooseTypeModel.dictCode];
         }
     }];

+ 20 - 0
jiaPei/Modules/OtherModules/XLIModule/Model/RQHTTPService+FiveTeaching.h

@@ -0,0 +1,20 @@
+//
+//  RQHTTPService+FiveTeaching.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/12.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "RQHTTPService.h"
+#define RQ_GET_FiveTeaching                             @"https://jsjp-admin.zzxcx.net/jsjp-admin/open-api/video/fiveTeaching/list"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RQHTTPService (FiveTeaching)
+
+
+- (RACSignal *)getFiveTeachingList:(NSString *)videoSubiect;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 28 - 0
jiaPei/Modules/OtherModules/XLIModule/Model/RQHTTPService+FiveTeaching.m

@@ -0,0 +1,28 @@
+//
+//  RQHTTPService+FiveTeaching.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/12.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "RQHTTPService+FiveTeaching.h"
+
+@implementation RQHTTPService (FiveTeaching)
+
+- (RACSignal *)getFiveTeachingList:(NSString *)videoSubiect {
+    /// 1. 配置参数
+    RQKeyedSubscript *subscript = [RQKeyedSubscript subscript];
+    subscript[@"state"] = @"1";
+    subscript[@"videoSubject"] = videoSubiect;
+    /// 2. 配置参数模型
+    RQURLParameters *paramters = [RQURLParameters urlParametersWithMethod:RQ_HTTTP_METHOD_GET path:RQ_GET_FiveTeaching parameters:subscript.dictionary];
+    
+    /// 3.发起请求
+    return [[[RQHTTPRequest requestWithParameters:paramters]
+             enqueueResultClass:[RQPlaceVideoListModel class]]
+            rq_parsedResults];
+}
+
+
+@end

+ 14 - 2
jiaPei/Modules/OtherModules/XLIModule/NYXLIModule.h

@@ -7,8 +7,9 @@
 //
 
 #import <Foundation/Foundation.h>
-
+#import "NYYDTFIVEQuestionModule.h"
 #pragma mark - Model
+#import "RQHTTPService+FiveTeaching.h"
 #import "NYWPViewModel.h"
 
 #pragma mark - ViewModel
@@ -17,6 +18,12 @@
 #import "NYLIVipContentNewItemViewModel.h"
 #import "NYLIVipAuthorityNewItemViewModel.h"
 #import "NYLIVipSinglePriceItemViewModel.h"
+#import "NYLIVideoDetailViewModel.h"
+#import "NYLIVideoDetailSubPageViewModel.h"
+#import "NYLIVideoDetailSubPageItemViewModel.h"
+#import "NYLIVideoDetailSubGroupViewModel.h"
+#import "NYLIVideoDetailSubFooterViewModel.h"
+
 
 #pragma mark - View
 #import "NYLIVipHeaderImageViewNewReusableView.h"
@@ -24,10 +31,15 @@
 #import "NYLiVipContentNewCell01.h"
 #import "NYLIVipAuthorityNewCell.h"
 #import "NYLIVipPriceCell.h"
+#import "NYLIVideoDetailHeaderView.h"
+#import "NYLIVideoDetailSubPageSectionHeaderView.h"
+#import "NYLIVideoDetailSubPageCell.h"
+#import "NYLIVideoDetailSubFooterCell.h"
 
 #pragma mark - ViewController
 #import "NYLIVipCoachViewController.h"
-
+#import "NYLIVideoDetailViewController.h"
+#import "NYLIVideoDetailSubPageViewController.h"
 
 NS_ASSUME_NONNULL_BEGIN
 

+ 27 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailHeaderView.h

@@ -0,0 +1,27 @@
+//
+//  NYLIVideoDetailHeaderView.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/10.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailHeaderView : UIView
+
+
+@property (weak, nonatomic) IBOutlet UIButton *back_btn;
+
+@property (weak, nonatomic) IBOutlet UILabel *title_label;
+
+@property (weak, nonatomic) IBOutlet UIView *play_view;
+
++ (instancetype)liVideoDetailHeaderView;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 32 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailHeaderView.m

@@ -0,0 +1,32 @@
+//
+//  NYLIVideoDetailHeaderView.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/10.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailHeaderView.h"
+
+
+@interface NYLIVideoDetailHeaderView ()
+
+
+
+@end
+
+@implementation NYLIVideoDetailHeaderView
+
+#pragma mark - PublicMethods
++ (nonnull instancetype)liVideoDetailHeaderView {
+    return [super rq_viewFromXib];
+}
+
+#pragma mark - SystemMethods
+- (void)awakeFromNib {
+    [super awakeFromNib];
+}
+
+
+
+@end

+ 79 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailHeaderView.xib

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="NYLIVideoDetailHeaderView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="300"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8ye-q2-rgL" userLabel="View-top">
+                    <rect key="frame" x="0.0" y="0.0" width="393" height="88"/>
+                    <subviews>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2eB-o1-2H8">
+                            <rect key="frame" x="0.0" y="38" width="50" height="50"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="50" id="AaM-h6-07m"/>
+                                <constraint firstAttribute="height" constant="50" id="YtT-0q-6Fp"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" image="li_back_white"/>
+                        </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="科一专项精品课" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="J2P-4Y-zyO">
+                            <rect key="frame" x="96.666666666666686" y="54" width="200" height="18"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="200" id="CCb-FY-3zk"/>
+                                <constraint firstAttribute="height" constant="18" id="bzR-ec-OuO"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" red="0.28627450980392155" green="0.55686274509803924" blue="0.96078431372549022" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="2eB-o1-2H8" secondAttribute="bottom" id="0xl-iA-hb6"/>
+                        <constraint firstItem="2eB-o1-2H8" firstAttribute="leading" secondItem="8ye-q2-rgL" secondAttribute="leading" id="59N-Eo-nFM"/>
+                        <constraint firstAttribute="height" constant="88" id="PNE-5E-usP"/>
+                        <constraint firstItem="J2P-4Y-zyO" firstAttribute="centerX" secondItem="8ye-q2-rgL" secondAttribute="centerX" id="Yrc-b9-zc4"/>
+                        <constraint firstAttribute="bottom" secondItem="J2P-4Y-zyO" secondAttribute="bottom" constant="16" id="z3a-Z9-7xb"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZEr-g0-phX" userLabel="View-playview">
+                    <rect key="frame" x="0.0" y="88" width="393" height="212"/>
+                    <color key="backgroundColor" red="0.4392156862745098" green="0.4392156862745098" blue="0.4392156862745098" alpha="1" colorSpace="calibratedRGB"/>
+                </view>
+            </subviews>
+            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+            <constraints>
+                <constraint firstItem="ZEr-g0-phX" firstAttribute="top" secondItem="8ye-q2-rgL" secondAttribute="bottom" id="2Je-WI-X5c"/>
+                <constraint firstAttribute="bottom" secondItem="ZEr-g0-phX" secondAttribute="bottom" id="FHA-ax-Rjz"/>
+                <constraint firstAttribute="trailing" secondItem="ZEr-g0-phX" secondAttribute="trailing" id="Jeq-gY-xAr"/>
+                <constraint firstItem="ZEr-g0-phX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="NXs-zZ-KKQ"/>
+                <constraint firstItem="8ye-q2-rgL" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="dIr-6J-hNW"/>
+                <constraint firstAttribute="trailing" secondItem="8ye-q2-rgL" secondAttribute="trailing" id="vSi-5p-b2c"/>
+                <constraint firstItem="8ye-q2-rgL" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="zhM-Qu-mqj"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="back_btn" destination="2eB-o1-2H8" id="E26-Ta-wCe"/>
+                <outlet property="play_view" destination="ZEr-g0-phX" id="hkV-M2-B0e"/>
+                <outlet property="title_label" destination="J2P-4Y-zyO" id="khi-cl-oRI"/>
+            </connections>
+            <point key="canvasLocation" x="12.977099236641221" y="-12.67605633802817"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="li_back_white" width="9.3333330154418945" height="17"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 21 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubFooterCell.h

@@ -0,0 +1,21 @@
+//
+//  NYLIVideoDetailSubFooterCell.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/12.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailSubFooterCell : RQCommonCell
+
+@property (weak, nonatomic) IBOutlet QMUIButton *verticaldb_btn;
+
+@property (weak, nonatomic) IBOutlet QMUIButton *cross_btn;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 80 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubFooterCell.m

@@ -0,0 +1,80 @@
+//
+//  NYLIVideoDetailSubFooterCell.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/12.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailSubFooterCell.h"
+
+@interface NYLIVideoDetailSubFooterCell ()
+@property (nonatomic, readwrite, strong) NYLIVideoDetailSubFooterViewModel *viewModel;
+
+@end
+
+@implementation NYLIVideoDetailSubFooterCell
+#pragma mark - PublicMethods
++ (instancetype)cellWithTableView:(UITableView *)tableView {
+    static NSString *ID = @"NYLIVideoDetailSubFooterCell";
+    NYLIVideoDetailSubFooterCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
+    if (!cell) {
+        cell = [self rq_viewFromXib];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        [cell.cross_btn addTarget:cell action:@selector(callActiondb:) forControlEvents:UIControlEventTouchUpInside];
+        [cell.verticaldb_btn addTarget:cell action:@selector(callActiondb:) forControlEvents:UIControlEventTouchUpInside];
+    }
+    return cell;
+}
+
+- (void)bindViewModel:(NYLIVideoDetailSubFooterViewModel *)viewModel {
+//    @weakify(self)
+//    _viewModel = viewModel;
+
+    
+}
+
+//跳转题库
+- (void)callActiondb:(UIButton *)btn {
+    NSArray *arr = [[NY_YDT_FIVE_Question_Module getQuestionWithSubject:RQ_YDTQuestion_Module.subject exerciseType:RQExerciseType_Sequential_LI].rac_sequence.signal map:^id _Nullable(RQYDTQuestionModel  *ydtQuestionModel) {
+        return [RQExerciseModel exerciseModelWithRQYDTQuestionModel:ydtQuestionModel];
+    }].toArray;
+    if(btn.tag == 10){//竖
+        RQExerciseViewModel *exerciseViewModel = [[RQExerciseViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
+            RQHomePageCarTypeKey        : @(RQ_YDTQuestion_Module.carType),
+            RQHomePageSubjectTypeKey    : @(RQ_YDTQuestion_Module.subject),
+            RQHomeSubPageTypeKey        : @(RQHomeSubPageType_SequentialPractice),
+            RQViewModelIDKey            : @"科一特训题",
+            RQExerciseTypeKey           : @(RQExerciseType_Sequential_LI),
+            RQViewModelUtilKey          : arr,
+        }];
+        [RQ_APPDELEGATE.services pushViewModel:exerciseViewModel animated:YES];
+    }else{//横
+        //显示真实考场
+        NYExaminationViewModel *examinationViewModel = [[NYExaminationViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
+            RQHomePageCarTypeKey        : @(RQ_YDTQuestion_Module.carType),
+            RQHomePageSubjectTypeKey    : @(RQ_YDTQuestion_Module.subject),
+            RQHomeSubPageTypeKey        : @(RQHomeSubPageType_SequentialPractice),
+            RQViewModelIDKey            : @"科一特训题",
+            RQExerciseTypeKey           : @(RQExerciseType_Sequential_LI),
+            RQViewModelUtilKey          : arr,
+        }];
+        examinationViewModel.km = RQ_YDTQuestion_Module.subjectStr.intValue;
+        [RQ_APPDELEGATE.services pushViewModel:examinationViewModel animated:YES];
+    }
+}
+
+#pragma mark - SystemMethods
+- (void)awakeFromNib {
+    [super awakeFromNib];
+
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+
+@end

+ 91 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubFooterCell.xib

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="KGk-i7-Jjw" customClass="NYLIVideoDetailSubFooterCell">
+            <rect key="frame" x="0.0" y="0.0" width="391" height="260"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="391" height="260"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="视频同款题库" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dXc-aT-aR8">
+                        <rect key="frame" x="15" y="20" width="110" height="21"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="110" id="H9J-El-06D"/>
+                            <constraint firstAttribute="height" constant="21" id="nA3-vN-Fdb"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="li_同款题库" translatesAutoresizingMaskIntoConstraints="NO" id="tGx-iO-qbB">
+                        <rect key="frame" x="15" y="51" width="361" height="194"/>
+                    </imageView>
+                    <button opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="m3x-nS-RDI" customClass="QMUIButton">
+                        <rect key="frame" x="33" y="195" width="146" height="30"/>
+                        <color key="backgroundColor" red="0.0" green="0.31372549020000001" blue="0.99215686270000003" alpha="1" colorSpace="calibratedRGB"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="30" id="h5U-Yh-GDH"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                        <inset key="titleEdgeInsets" minX="4" minY="0.0" maxX="0.0" maxY="0.0"/>
+                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                        <state key="normal" title="点击查看竖屏题库"/>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
+                                <integer key="value" value="15"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </button>
+                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tfm-eh-izD" customClass="QMUIButton">
+                        <rect key="frame" x="212" y="195" width="146" height="30"/>
+                        <color key="backgroundColor" red="0.0" green="0.31372549020000001" blue="0.99215686270000003" alpha="1" colorSpace="calibratedRGB"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="30" id="4PD-Sa-sDS"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                        <inset key="titleEdgeInsets" minX="4" minY="0.0" maxX="0.0" maxY="0.0"/>
+                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                        <state key="normal" title="点击查看横屏题库"/>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
+                                <integer key="value" value="15"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </button>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="tGx-iO-qbB" secondAttribute="bottom" constant="15" id="1wT-jF-GOO"/>
+                    <constraint firstItem="dXc-aT-aR8" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="20" id="5pU-9u-Vch"/>
+                    <constraint firstItem="tGx-iO-qbB" firstAttribute="top" secondItem="dXc-aT-aR8" secondAttribute="bottom" constant="10" id="6H3-0Z-v4j"/>
+                    <constraint firstItem="m3x-nS-RDI" firstAttribute="width" secondItem="tfm-eh-izD" secondAttribute="width" id="AVW-Bg-ruz"/>
+                    <constraint firstItem="m3x-nS-RDI" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="33" id="BZp-ai-ZeF"/>
+                    <constraint firstAttribute="bottom" secondItem="m3x-nS-RDI" secondAttribute="bottom" constant="35" id="F8l-Gi-b92"/>
+                    <constraint firstItem="tGx-iO-qbB" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="KoK-NB-EPh"/>
+                    <constraint firstItem="tfm-eh-izD" firstAttribute="leading" secondItem="m3x-nS-RDI" secondAttribute="trailing" constant="33" id="L7p-aE-e4x"/>
+                    <constraint firstAttribute="trailing" secondItem="tfm-eh-izD" secondAttribute="trailing" constant="33" id="PNc-rU-g8d"/>
+                    <constraint firstItem="tfm-eh-izD" firstAttribute="leading" secondItem="m3x-nS-RDI" secondAttribute="trailing" constant="33" id="c6J-EX-4KA"/>
+                    <constraint firstAttribute="bottom" secondItem="tfm-eh-izD" secondAttribute="bottom" constant="35" id="h6M-O9-xJr"/>
+                    <constraint firstItem="dXc-aT-aR8" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="mIL-2A-1nT"/>
+                    <constraint firstAttribute="trailing" secondItem="tGx-iO-qbB" secondAttribute="trailing" constant="15" id="tBq-Av-deM"/>
+                </constraints>
+            </tableViewCellContentView>
+            <connections>
+                <outlet property="cross_btn" destination="tfm-eh-izD" id="gKz-rg-lBc"/>
+                <outlet property="verticaldb_btn" destination="m3x-nS-RDI" id="pCP-7Y-WIj"/>
+            </connections>
+            <point key="canvasLocation" x="9" y="-12"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="li_同款题库" width="345" height="187"/>
+    </resources>
+</document>

+ 17 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageCell.h

@@ -0,0 +1,17 @@
+//
+//  NYLIVideoDetailSubPageCell.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/11.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailSubPageCell : RQCommonCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 83 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageCell.m

@@ -0,0 +1,83 @@
+//
+//  NYLIVideoDetailSubPageCell.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/11.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailSubPageCell.h"
+
+@interface NYLIVideoDetailSubPageCell ()
+@property (nonatomic, readwrite, strong) NYLIVideoDetailSubPageItemViewModel *viewModel;
+@property (nonatomic, readwrite, strong) RQVideoPermissionStateModel *videoPermissionStateModel;
+
+@property (weak, nonatomic) IBOutlet UIImageView *icon_imageview;
+
+@property (weak, nonatomic) IBOutlet UILabel *title_label;
+
+@property (weak, nonatomic) IBOutlet UIView *tag_view;
+
+@property (weak, nonatomic) IBOutlet QMUIButton *call_play_btn;
+
+@property (weak, nonatomic) IBOutlet UIButton *tag_bg_btn;
+
+@end
+
+@implementation NYLIVideoDetailSubPageCell
+#pragma mark - PublicMethods
++ (instancetype)cellWithTableView:(UITableView *)tableView {
+    static NSString *ID = @"NYLIVideoDetailSubPageCell";
+    NYLIVideoDetailSubPageCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
+    if (!cell) {
+        cell = [self rq_viewFromXib];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        [cell.tag_bg_btn setBackgroundImage:[UIImage imageWithGradualChangingColor:^(QQGradualChangingColor *graColor) {
+            graColor.fromColor = [UIColor qmui_colorWithHexString:@"#FFE7B8"];
+            graColor.toColor = [UIColor qmui_colorWithHexString:@"##FDC67F"];
+            graColor.type = QQGradualChangeTypeLeftToRight;
+        } size:cell.tag_bg_btn.bounds.size cornerRadius:QQRadiusMake(5, 5, 5, 5)] forState:UIControlStateNormal];
+//        [cell.call_play_btn addTarget:cell action:@selector(callPlaydoVideo:) forControlEvents:UIControlEventTouchUpInside];
+    }
+    return cell;
+}
+
+- (void)bindViewModel:(NYLIVideoDetailSubPageItemViewModel *)viewModel {
+    @weakify(self)
+    _viewModel = viewModel;
+    [self.icon_imageview sd_setImageWithURL:[NSURL URLWithString:viewModel.videosItem.coverFileUrl] placeholderImage:randomPortrait()];
+    RAC(self.title_label, text) = [[RACObserve(viewModel.videosItem, title) deliverOnMainThread] takeUntil:self.rac_prepareForReuseSignal];
+    
+}
+
+////播放通知
+//- (void)callPlaydoVideo:(UIButton *)btn {
+//    
+////    VideosItem *videosItem = self.viewModel.videosItem;
+////    [RQNotificationCenter postNotificationName:RQPlayVideoUrlNotification object:@{
+////        RQPlayVideoItemKey : videosItem,
+////        RQPlayVideoItemArrKey : @[videosItem],
+////    }];
+//}
+
+#pragma mark - SystemMethods
+- (void)awakeFromNib {
+    [super awakeFromNib];
+
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+#pragma mark - LazyLoad
+- (RQVideoPermissionStateModel *)videoPermissionStateModel {
+    if (!_videoPermissionStateModel) {
+        _videoPermissionStateModel = [[RQVideoPermissionStateModel alloc] init];
+    }
+    return _videoPermissionStateModel;
+}
+
+@end

+ 144 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageCell.xib

@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="2vB-Yi-Qgf" customClass="NYLIVideoDetailSubPageCell">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="150"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="2vB-Yi-Qgf" id="Xrc-WG-d8N">
+                <rect key="frame" x="0.0" y="0.0" width="375" height="150"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="li_icon_1" translatesAutoresizingMaskIntoConstraints="NO" id="uxP-cz-2RS">
+                        <rect key="frame" x="15" y="11" width="102" height="128"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="128" id="5TQ-sR-QpG"/>
+                            <constraint firstAttribute="width" constant="102" id="N23-1r-QYD"/>
+                        </constraints>
+                    </imageView>
+                    <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="Cau-b2-khC">
+                        <rect key="frame" x="129" y="10" width="231" height="50"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="50" id="ess-qp-sQV"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
+                        <color key="textColor" red="0.039215686274509803" green="0.10196078431372549" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tjc-ch-BnL">
+                        <rect key="frame" x="129" y="62" width="231" height="34"/>
+                        <subviews>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3l5-p4-phb">
+                                <rect key="frame" x="0.0" y="0.0" width="231" height="34"/>
+                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            </button>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="先听课后练习" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="P7J-eA-SHv">
+                                <rect key="frame" x="17" y="7" width="85" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="85" id="3Wa-VQ-Udo"/>
+                                    <constraint firstAttribute="height" constant="20" id="GUE-sG-JOl"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.73725490196078436" green="0.4392156862745098" blue="0.047058823529411764" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="li_jp_icon" translatesAutoresizingMaskIntoConstraints="NO" id="uEI-8Q-RF1">
+                                <rect key="frame" x="191" y="6" width="22" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="gYR-Tq-acH"/>
+                                    <constraint firstAttribute="width" constant="22" id="jXe-eU-bWh"/>
+                                </constraints>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="→通过率极高" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wTp-wR-iot">
+                                <rect key="frame" x="102" y="7" width="84" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="84" id="LAr-Z2-bLD"/>
+                                    <constraint firstAttribute="height" constant="20" id="VgJ-VE-ifd"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.99607843137254903" green="0.23137254901960785" blue="0.16862745098039217" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstItem="uEI-8Q-RF1" firstAttribute="centerY" secondItem="tjc-ch-BnL" secondAttribute="centerY" id="1p9-lq-A4V"/>
+                            <constraint firstItem="P7J-eA-SHv" firstAttribute="leading" secondItem="tjc-ch-BnL" secondAttribute="leading" constant="17" id="4ES-Z6-66N"/>
+                            <constraint firstItem="3l5-p4-phb" firstAttribute="top" secondItem="tjc-ch-BnL" secondAttribute="top" id="8GA-4K-BUQ"/>
+                            <constraint firstItem="3l5-p4-phb" firstAttribute="leading" secondItem="tjc-ch-BnL" secondAttribute="leading" id="8a8-eb-ygL"/>
+                            <constraint firstAttribute="height" constant="34" id="AC5-da-V6w"/>
+                            <constraint firstAttribute="bottom" secondItem="3l5-p4-phb" secondAttribute="bottom" id="VnQ-IA-Lzt"/>
+                            <constraint firstAttribute="trailing" secondItem="3l5-p4-phb" secondAttribute="trailing" id="Yvw-4V-9lw"/>
+                            <constraint firstItem="wTp-wR-iot" firstAttribute="leading" secondItem="P7J-eA-SHv" secondAttribute="trailing" id="ZYa-gd-Agd"/>
+                            <constraint firstItem="P7J-eA-SHv" firstAttribute="centerY" secondItem="tjc-ch-BnL" secondAttribute="centerY" id="dEr-0l-16F"/>
+                            <constraint firstItem="uEI-8Q-RF1" firstAttribute="leading" secondItem="wTp-wR-iot" secondAttribute="trailing" constant="5" id="dSq-7n-ohY"/>
+                            <constraint firstItem="wTp-wR-iot" firstAttribute="centerY" secondItem="tjc-ch-BnL" secondAttribute="centerY" id="p5a-58-5kS"/>
+                        </constraints>
+                    </view>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="开启轻松学之旅" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sel-Qy-Vbg">
+                        <rect key="frame" x="129" y="114" width="140" height="21"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="140" id="2Fh-RR-cpr"/>
+                            <constraint firstAttribute="height" constant="21" id="LWw-2Y-Zvn"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
+                        <color key="textColor" red="1" green="0.30196078431372547" blue="0.32549019607843138" alpha="1" colorSpace="calibratedRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DpB-F5-B5K" customClass="QMUIButton">
+                        <rect key="frame" x="272" y="109" width="88" height="30"/>
+                        <color key="backgroundColor" red="0.28627450980392155" green="0.55686274509803924" blue="0.96078431372549022" alpha="1" colorSpace="calibratedRGB"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="88" id="dZt-m8-i2a"/>
+                            <constraint firstAttribute="height" constant="30" id="ncB-hl-eI0"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                        <inset key="titleEdgeInsets" minX="4" minY="0.0" maxX="0.0" maxY="0.0"/>
+                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                        <state key="normal" title="点击播放" image="li_btn播放"/>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
+                                <integer key="value" value="15"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </button>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="uxP-cz-2RS" firstAttribute="centerY" secondItem="Xrc-WG-d8N" secondAttribute="centerY" id="0fZ-yf-Tqc"/>
+                    <constraint firstAttribute="bottom" secondItem="sel-Qy-Vbg" secondAttribute="bottom" constant="15" id="68c-xp-9V9"/>
+                    <constraint firstItem="Cau-b2-khC" firstAttribute="top" secondItem="Xrc-WG-d8N" secondAttribute="top" constant="10" id="BZD-PG-lIF"/>
+                    <constraint firstAttribute="trailing" secondItem="Cau-b2-khC" secondAttribute="trailing" constant="15" id="EjE-qZ-8tc"/>
+                    <constraint firstAttribute="trailing" secondItem="tjc-ch-BnL" secondAttribute="trailing" constant="15" id="KPR-Aa-RQ3"/>
+                    <constraint firstItem="sel-Qy-Vbg" firstAttribute="leading" secondItem="uxP-cz-2RS" secondAttribute="trailing" constant="12" id="Kuv-5P-T8D"/>
+                    <constraint firstItem="tjc-ch-BnL" firstAttribute="leading" secondItem="uxP-cz-2RS" secondAttribute="trailing" constant="12" id="OG3-cl-3wG"/>
+                    <constraint firstAttribute="bottom" secondItem="DpB-F5-B5K" secondAttribute="bottom" constant="11" id="SEK-Dr-3Pz"/>
+                    <constraint firstItem="tjc-ch-BnL" firstAttribute="top" secondItem="Cau-b2-khC" secondAttribute="bottom" constant="2" id="Tlu-4d-G8D"/>
+                    <constraint firstAttribute="trailing" secondItem="DpB-F5-B5K" secondAttribute="trailing" constant="15" id="cWi-Lh-Sg6"/>
+                    <constraint firstItem="uxP-cz-2RS" firstAttribute="leading" secondItem="Xrc-WG-d8N" secondAttribute="leading" constant="15" id="czF-cs-THu"/>
+                    <constraint firstItem="Cau-b2-khC" firstAttribute="leading" secondItem="uxP-cz-2RS" secondAttribute="trailing" constant="12" id="jba-Ht-7tk"/>
+                </constraints>
+            </tableViewCellContentView>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <connections>
+                <outlet property="call_play_btn" destination="DpB-F5-B5K" id="mnm-AA-riF"/>
+                <outlet property="icon_imageview" destination="uxP-cz-2RS" id="b8A-fX-SSo"/>
+                <outlet property="tag_bg_btn" destination="3l5-p4-phb" id="0m3-p8-3ML"/>
+                <outlet property="tag_view" destination="tjc-ch-BnL" id="eX6-QA-lKC"/>
+                <outlet property="title_label" destination="Cau-b2-khC" id="7oo-L1-UHH"/>
+            </connections>
+            <point key="canvasLocation" x="261.83206106870227" y="-3.5211267605633805"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="li_btn播放" width="10.333333015441895" height="12"/>
+        <image name="li_icon_1" width="102" height="128"/>
+        <image name="li_jp_icon" width="22.333333969116211" height="22.666666030883789"/>
+    </resources>
+</document>

+ 26 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageSectionHeaderView.h

@@ -0,0 +1,26 @@
+//
+//  NYLIVideoDetailSubPageSectionHeaderView.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/10.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailSubPageSectionHeaderView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *seg_view;
+
+@property (weak, nonatomic) IBOutlet QMUIButton *right_btn;
+
+@property (strong, nonatomic) QMUISegmentedControl *segmentedControl;
+
+/// init
++ (instancetype)videoDetailSubPageSectionHeaderView;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 37 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageSectionHeaderView.m

@@ -0,0 +1,37 @@
+//
+//  NYLIVideoDetailSubPageSectionHeaderView.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/10.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailSubPageSectionHeaderView.h"
+
+@implementation NYLIVideoDetailSubPageSectionHeaderView
+
++ (nonnull instancetype)videoDetailSubPageSectionHeaderView {
+    return [super rq_viewFromXib];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    
+    self.right_btn.imagePosition = QMUIButtonImagePositionRight;
+    self.right_btn.spacingBetweenImageAndTitle = 5.f;
+    
+    QMUISegmentedControl *segmentedControl = [[QMUISegmentedControl alloc] initWithItems:@[@"科一特训包",@"科四特训包"]];
+    segmentedControl.backgroundColor = [UIColor qmui_colorWithHexString:@"#E3EDFC"];
+    segmentedControl.selectedSegmentIndex = 0;
+    
+    [segmentedControl setBackgroundWithNormalImage:[UIImage imageNamed:@"li_bar_btnbg_bg"] selectedImage:[UIImage imageNamed:@"li_bar_btnbg"] devideImage00:NULL devideImage01:NULL devideImage10:NULL textColor:[UIColor qmui_colorWithHexString:@"#A3B9DB"] selectedTextColor:UIColor.whiteColor fontSize:[UIFont systemFontOfSize:14.f]];
+    [self.seg_view addSubview:segmentedControl];
+    self.segmentedControl = segmentedControl;
+    [segmentedControl mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.top.bottom.right.mas_equalTo(self.seg_view);
+//        make.size.mas_equalTo(CGSizeMake(248.f, 34.f));
+    }];
+}
+
+
+@end

+ 73 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubPageSectionHeaderView.xib

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="G1D-O3-I1A" customClass="NYLIVideoDetailSubPageSectionHeaderView">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="94"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MgI-Mu-FKg">
+                    <rect key="frame" x="70" y="16" width="235" height="34"/>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="34" id="TW2-uB-MO9"/>
+                    </constraints>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="trailing" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lBX-34-aau" customClass="QMUIButton">
+                    <rect key="frame" x="258" y="70" width="102" height="14"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="102" id="5zd-OY-TpQ"/>
+                        <constraint firstAttribute="height" constant="14" id="HTh-6X-y69"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" title="视频同款题库" image="li_箭头">
+                        <color key="titleColor" red="0.039215686274509803" green="0.10196078431372549" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                    </state>
+                </button>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="专项视频" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8a0-3M-h7V">
+                    <rect key="frame" x="15" y="67" width="76" height="23"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="76" id="9ia-ex-Yvw"/>
+                        <constraint firstAttribute="height" constant="23" id="va2-2P-75v"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="19"/>
+                    <color key="textColor" red="0.039215686274509803" green="0.10196078431372549" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="MgI-Mu-FKg" firstAttribute="top" secondItem="G1D-O3-I1A" secondAttribute="top" constant="16" id="6eQ-vW-naU"/>
+                <constraint firstItem="MgI-Mu-FKg" firstAttribute="leading" secondItem="G1D-O3-I1A" secondAttribute="leading" constant="70" id="F7n-Zl-U7K"/>
+                <constraint firstAttribute="trailing" secondItem="lBX-34-aau" secondAttribute="trailing" constant="15" id="Nht-yc-A1e"/>
+                <constraint firstItem="8a0-3M-h7V" firstAttribute="leading" secondItem="G1D-O3-I1A" secondAttribute="leading" constant="15" id="Oy7-YG-Kes"/>
+                <constraint firstAttribute="bottom" secondItem="lBX-34-aau" secondAttribute="bottom" constant="10" id="Q9a-72-2mZ"/>
+                <constraint firstAttribute="trailing" secondItem="MgI-Mu-FKg" secondAttribute="trailing" constant="70" id="RIL-bg-mzD"/>
+                <constraint firstAttribute="bottom" secondItem="8a0-3M-h7V" secondAttribute="bottom" constant="4" id="ahr-AL-m7W"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="right_btn" destination="lBX-34-aau" id="ySa-hw-alK"/>
+                <outlet property="seg_view" destination="MgI-Mu-FKg" id="Mz6-js-xAX"/>
+            </connections>
+            <point key="canvasLocation" x="20.610687022900763" y="2.8169014084507045"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="li_箭头" width="7" height="13"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 17 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubFooterViewModel.h

@@ -0,0 +1,17 @@
+//
+//  NYLIVideoDetailSubFooterViewModel.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/12.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+@interface NYLIVideoDetailSubFooterViewModel : RQCommonItemViewModel
+@property (nonatomic, readonly, strong) VideosItem *videosItem;
+// init
+- (instancetype)initWithVideosItem:(VideosItem *)videosItem;
+@end
+NS_ASSUME_NONNULL_END

+ 28 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubFooterViewModel.m

@@ -0,0 +1,28 @@
+//
+//  NYLIVideoDetailSubFooterViewModel.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/12.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailSubFooterViewModel.h"
+
+@interface NYLIVideoDetailSubFooterViewModel ()
+@property (nonatomic, readwrite, strong) VideosItem *videosItem;
+@end
+
+@implementation NYLIVideoDetailSubFooterViewModel
+// init
+- (instancetype)initWithVideosItem:(VideosItem *)videosItem {
+    if (self = [super init]) {
+        self.videosItem = videosItem;
+    }
+    return self;
+}
+
+- (NSString *)itemClassName{
+    return @"NYLIVideoDetailSubFooterCell";
+}
+
+@end

+ 17 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubGroupViewModel.h

@@ -0,0 +1,17 @@
+//
+//  NYLIVideoDetailSubGroupViewModel.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/12.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailSubGroupViewModel : RQCommonGroupViewModel
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 22 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubGroupViewModel.m

@@ -0,0 +1,22 @@
+//
+//  NYLIVideoDetailSubGroupViewModel.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/12.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailSubGroupViewModel.h"
+
+@implementation NYLIVideoDetailSubGroupViewModel
+
+/// init
+- (instancetype)init {
+    if (self = [super init]) {
+//        self.footerHeight = RQ_FIT_HORIZONTAL(260.f);
+    }
+    return self;
+}
+
+
+@end

+ 20 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubPageItemViewModel.h

@@ -0,0 +1,20 @@
+//
+//  NYLIVideoDetailSubPageItemViewModel.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/11.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "RQCommonItemViewModel.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailSubPageItemViewModel : RQCommonItemViewModel
+@property (nonatomic, readonly, strong) VideosItem *videosItem;
+// init
+- (instancetype)initWithVideosItem:(VideosItem *)videosItem;
+@end
+
+NS_ASSUME_NONNULL_END

+ 29 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubPageItemViewModel.m

@@ -0,0 +1,29 @@
+//
+//  NYLIVideoDetailSubPageItemViewModel.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/11.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailSubPageItemViewModel.h"
+
+@interface NYLIVideoDetailSubPageItemViewModel ()
+@property (nonatomic, readwrite, strong) VideosItem *videosItem;
+@end
+
+@implementation NYLIVideoDetailSubPageItemViewModel
+// init
+- (instancetype)initWithVideosItem:(VideosItem *)videosItem {
+    if (self = [super init]) {
+        self.videosItem = videosItem;
+    }
+    return self;
+}
+
+- (NSString *)itemClassName{
+    return @"NYLIVideoDetailSubPageCell";
+}
+
+
+@end

+ 22 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubPageViewModel.h

@@ -0,0 +1,22 @@
+//
+//  NYLIVideoDetailSubPageViewModel.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/11.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVideoDetailSubPageViewModel : RQCommonViewModel
+@property (nonatomic, readonly, strong) NSArray *videoArr;
+@property (nonatomic, readonly, copy) NSString *subTitle;
+@property (nonatomic, readonly, strong) NSIndexPath *indexPath;
+@property (nonatomic, readonly, assign) RQVideoDetailSubPageUpdateDataType updateDataType;
+
+@end
+
+
+NS_ASSUME_NONNULL_END

+ 108 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailSubPageViewModel.m

@@ -0,0 +1,108 @@
+//
+//  NYLIVideoDetailSubPageViewModel.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/11.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailSubPageViewModel.h"
+
+@interface NYLIVideoDetailSubPageViewModel ()
+@property (nonatomic, readwrite, strong) NSArray *videoArr;
+@property (nonatomic, readwrite, copy) NSString *subTitle;
+@property (nonatomic, readwrite, strong) NSIndexPath *indexPath;
+@property (nonatomic, readwrite, assign) RQVideoDetailSubPageUpdateDataType updateDataType;
+@property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType;
+
+@end
+
+@implementation NYLIVideoDetailSubPageViewModel
+#pragma mark - Public Method
+- (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
+    if (self = [super initWithServices:services params:params]) {
+        self.videoArr = params[RQViewModelUtilKey];
+        self.title = params[RQViewModelTitleKey];
+        self.subTitle = params[RQViewModelIDKey];
+        self.indexPath = params[RQViewCommonValueKey];
+        self.updateDataType = RQVideoDetailSubPageUpdateDataType_Default;
+        self.homePageSubjectType = [params[RQHomeSubPageTypeKey] integerValue];
+    }
+    return self;
+}
+
+- (void)initialize {
+    [super initialize];
+    
+    self.prefersNavigationBarHidden = YES;
+    ///配置数据
+//    [self rq_configureData];
+    [self updateData];
+}
+
+- (void)updateData {
+    @weakify(self);
+    VideosItem *videosItem = self.videoArr.firstObject;
+    if (videosItem.teachingVideoTypeId == 0 && videosItem.id == 0 && RQStringIsEmpty(videosItem.videoDescribe)) {
+        self.updateDataType = RQVideoDetailSubPageUpdateDataType_Request;
+        [QMUITips showLoadingInView:DefaultTipsParentView];
+        [[RACScheduler mainThreadScheduler] afterDelay:1.f schedule:^{
+            @strongify(self)
+            ///配置数据
+            [self rq_configureData];
+            self.updateDataType = RQVideoDetailSubPageUpdateDataType_Complete;
+            [QMUITips hideAllTips];
+        }];
+    } else {
+        self.updateDataType = RQVideoDetailSubPageUpdateDataType_Request;
+        [[RQ_HTTP_Service getTeachingVideoByTypeId:videosItem.teachingVideoTypeId] subscribeNext:^(NSArray *arr) {
+            @strongify(self);
+            self.videoArr = [arr.rac_sequence.signal map:^id _Nullable(VideosItem *videoItem) {
+                return videoItem;
+            }].toArray;
+        } error:^(NSError * _Nullable error) {
+            
+        } completed:^{
+            @strongify(self)
+            ///配置数据
+            [self rq_configureData];
+            self.updateDataType = RQVideoDetailSubPageUpdateDataType_Complete;
+        }];
+    }
+}
+
+
+#pragma mark - PrivateMethod
+- (void)rq_configureData {
+    @weakify(self);
+    ///    第零组
+    NYLIVideoDetailSubGroupViewModel *group0 = [NYLIVideoDetailSubGroupViewModel groupViewModel];
+    group0.headerHeight = CGFLOAT_MIN;
+    group0.footerHeight = CGFLOAT_MIN;
+    
+    NSMutableArray *itemMutableArr = @[].mutableCopy;
+    [self.videoArr.rac_sequence.signal subscribeNext:^(VideosItem *videosItem) {
+        @strongify(self)
+        videosItem.index = [self.videoArr indexOfObject:videosItem] + 1;
+        videosItem.totalNum = self.videoArr.count;
+        videosItem.subject = self.homePageSubjectType;
+        NYLIVideoDetailSubPageItemViewModel *videoDetailSubPageItemViewModel = [[NYLIVideoDetailSubPageItemViewModel alloc] initWithVideosItem:videosItem];
+        videoDetailSubPageItemViewModel.rowHeight = RQ_FIT_HORIZONTAL(150.f);
+        videoDetailSubPageItemViewModel.operation = ^{
+            @strongify(self);
+            [RQNotificationCenter postNotificationName:RQPlayVideoUrlNotification object:@{
+                RQPlayVideoItemKey : videosItem,
+                RQPlayVideoItemArrKey : self.videoArr,
+            }];
+        };
+        [itemMutableArr addObject:videoDetailSubPageItemViewModel];
+    } completed:^{
+        @strongify(self)
+        NYLIVideoDetailSubFooterViewModel *footer = [[NYLIVideoDetailSubFooterViewModel alloc] initWithVideosItem:NULL];
+        footer.rowHeight = RQ_FIT_HORIZONTAL(260.f);
+        [itemMutableArr addObject:footer];
+        group0.itemViewModels = itemMutableArr.copy;
+        self.dataSource = @[group0];
+    }];
+}
+@end

+ 24 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailViewModel.h

@@ -0,0 +1,24 @@
+//
+//  NYLIVideoDetailViewModel.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/8.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "RQCommonViewModel.h"
+#import "RQVideoDetailSubPageViewModel.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@class RQPlaceVideoListModel;
+@interface NYLIVideoDetailViewModel : RQCommonViewModel
+@property (nonatomic, readonly, strong) RQTreeListModel *treeListModel;
+@property (nonatomic, readonly, strong) RQPlaceVideoListModel *placeVideoListModel;
+@property (nonatomic, readonly, assign) NSInteger index;
+@property (nonatomic, readonly, strong) NSIndexPath *indexPath;
+@property (nonatomic, readonly, assign) RQHomePageSubjectType homePageSubjectType;
+@property (nonatomic, readonly, strong) VideosItem *videosItem;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
jiaPei/Modules/OtherModules/YDTQuestionModule/Modules/NYYDTFIVEQuestionModule.h

@@ -0,0 +1,25 @@
+//
+//  NYYDTFIVEQuestionModule.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/13.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "RQYDTJSModel.h"
+
+#define NY_YDT_FIVE_Question_Module [NYYDTFIVEQuestionModule sharedInstance]
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYYDTFIVEQuestionModule : NSObject
+/// 单例
++ (instancetype) sharedInstance;
+- (void)initDatabaseQueueWithResourcePath:(NSString *)resourcePath;
+
+- (NSArray *)getQuestionWithSubject:(RQHomePageSubjectType)subject exerciseType:(RQExerciseType)exerciseType;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 116 - 0
jiaPei/Modules/OtherModules/YDTQuestionModule/Modules/NYYDTFIVEQuestionModule.m

@@ -0,0 +1,116 @@
+//
+//  NYYDTFIVEQuestionModule.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/13.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYYDTFIVEQuestionModule.h"
+
+static NSString *dbNameStr = @"js";
+static NSString *dbTypeStr = @"db";
+static NSString *tableNameStr = @"web_note_five"; //@"question_jsjp_js";
+
+@interface NYYDTFIVEQuestionModule ()
+@property (nonatomic, readwrite, strong) FMDatabaseQueue *databaseQueue;
+
+@end
+
+@implementation NYYDTFIVEQuestionModule
+static id rq_ydtjsQuestionModule = nil;
+ 
+#pragma mark -  init
++ (instancetype)sharedInstance {
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        rq_ydtjsQuestionModule = [[self alloc] init];
+    });
+    return rq_ydtjsQuestionModule;
+}
+
+- (instancetype)init {
+    if (self = [super init]) {
+        NSString *resourcePath = [[NSBundle mainBundle] pathForResource:dbNameStr ofType:dbTypeStr];
+        [self initDatabaseQueueWithResourcePath:resourcePath];
+    }
+    return self;
+}
+
+#pragma mark - PublicMethods
+- (void)initDatabaseQueueWithResourcePath:(NSString *)resourcePath {
+    NSError *error;
+    
+    NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",dbNameStr,dbTypeStr]];
+    
+    if ([RQFileManager isPathExist:dbPath]) {
+        self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
+        NSLog(@"数据库path-----%@",dbPath);
+        if ([self getQuestionVersion] >= [self getQuestionVersionWithResourcePath:resourcePath]) {
+        } else {
+            [[RQFileManager fileManager] removeItemAtPath:dbPath error:&error];
+            [[RQFileManager fileManager] copyItemAtPath:resourcePath toPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",dbNameStr,dbTypeStr]] error:&error];
+            self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
+        }
+    } else {
+        [[RQFileManager fileManager] copyItemAtPath:resourcePath toPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",dbNameStr,dbTypeStr]] error:&error];
+        self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
+        NSLog(@"数据库path-----%@",dbPath);
+    }
+}
+
+- (NSArray *)getQuestionWithSubject:(RQHomePageSubjectType)subject exerciseType:(RQExerciseType)exerciseType {
+    NSMutableArray *arr = @[].mutableCopy;
+    int sub = 0;
+    if(subject == RQHomePageSubjectType_SubjectOne){
+        sub = 1;
+    }else if(subject == RQHomePageSubjectType_SubjectFour){
+        sub = 4;
+    }
+    if (exerciseType == RQExerciseType_Sequential_LI) {
+        NSString *queryStr = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE kemu = %d ORDER BY f_sort ASC",tableNameStr,sub];
+        [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
+            
+            FMResultSet *resultSet = [db executeQuery:queryStr];
+            NSInteger num = 0;
+            while ([resultSet next]) {
+                RQYDTQuestionModel *ydtQuestionModel = [RQYDTQuestionModel ydtQuestionModelWithFMResultSet:resultSet];
+                ydtQuestionModel.num = num;
+                NSLog(@"QT index = %zd ID=%zd qt=%@  Type=%zd",num,ydtQuestionModel.ID,ydtQuestionModel.Question,ydtQuestionModel.Type);
+                [arr addObject:ydtQuestionModel];
+                num ++;
+            }
+            [resultSet close];
+        }];
+    }
+    
+    return arr.copy;
+}
+
+- (NSInteger)getQuestionVersion {
+    __block NSInteger version = 0;
+    if (_databaseQueue) {
+        [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
+            FMResultSet *resultSet;
+            resultSet = [db executeQuery:@"SELECT version FROM t_version"];
+            while ([resultSet next]) {
+                version = [resultSet longForColumn:@"version"];
+            }
+        }];
+    }
+    return version;
+}
+
+- (NSInteger)getQuestionVersionWithResourcePath:(NSString *)resourcePath {
+    __block NSInteger version = 0;
+    [[FMDatabaseQueue databaseQueueWithPath:resourcePath] inDatabase:^(FMDatabase * _Nonnull db) {
+        FMResultSet *resultSet;
+        resultSet = [db executeQuery:@"SELECT version FROM t_version"];
+        while ([resultSet next]) {
+            version = [resultSet longForColumn:@"version"];
+        }
+    }];
+    return version;
+}
+
+@end

BIN
jiaPei/Modules/OtherModules/YDTQuestionModule/Resources/js.db


+ 2 - 1
jiaPei/Utils/Manager/WechatManager/RQWechatManager.h

@@ -24,13 +24,14 @@ FOUNDATION_EXTERN NSString * const RQUserNotificationOrWechatFail;
 @property (nonatomic, readonly, strong) NSString *appSecret;
 @property (nonatomic, readonly, strong) NSString *universalLink;
 - (BOOL)kplchihandleLrvm:(NSString *)str;
+
 /// 初始化
 - (void)initWechatManager;
 /// 调起微信登录
 - (void)wechatLogin;
 + (BOOL)handleOpenUrl:(NSURL *)url;
 
-//+ (void)hangleWechatPayWith:(PayReq *)req;
++ (void)hangleWechatPayWith:(PayReq *)req;
 
 @end
 

+ 9 - 9
jiaPei/Utils/Manager/WechatManager/RQWechatManager.m

@@ -26,15 +26,15 @@ NSString * const RQUserNotificationOrWechatFail = @"RQUserNotificationOrWechatFa
     return [WXApi handleOpenURL:url delegate:[RQWechatManager sharedInstance]];
 }
 
-//+ (void)hangleWechatPayWith:(PayReq *)req {
-//    [WXApi sendReq:req completion:^(BOOL success) {
-//        if (success) {
-//            NSLog(@"微信支付成功");
-//        } else {
-//             NSLog(@"微信支付异常");
-//        }
-//    }];
-//}
++ (void)hangleWechatPayWith:(PayReq *)req {
+    [WXApi sendReq:req completion:^(BOOL success) {
+        if (success) {
+            NSLog(@"微信支付成功");
+        } else {
+             NSLog(@"微信支付异常");
+        }
+    }];
+}
 
 - (NSString *)appID {
     return @"wx606fa102dbc4b8ab";

+ 1 - 0
jiaPei/Utils/Router/RQRouter.m

@@ -138,6 +138,7 @@ static RQRouter *sharedInstance_ = nil;
              @"NYExaminationViewModel"              :               @"NYExaminationViewController",
              @"NYExaminationRoomViewModel"          :               @"NYExaminationRoomViewController",
              @"NYLIVipCoachViewModel"          :               @"NYLIVipCoachViewController",
+             @"NYLIVideoDetailViewModel"              :               @"NYLIVideoDetailViewController",
     };
 }
 @end