Browse Source

消息模块,曲谱模块

Steven 3 years ago
parent
commit
980cf8cdd2
100 changed files with 4259 additions and 1784 deletions
  1. 42 6
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. 1 1
      KulexiuForStudent/KulexiuForStudent.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist
  3. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  4. 2 34
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  5. 6 0
      KulexiuForStudent/KulexiuForStudent/AppDelegate.h
  6. 42 23
      KulexiuForStudent/KulexiuForStudent/AppDelegate.m
  7. 6 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/Contents.json
  8. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/alert_cancle.imageset/Contents.json
  9. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/alert_cancle.imageset/alert_cancle@2x.png
  10. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/alert_cancle.imageset/alert_cancle@3x.png
  11. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/upAlert_bg.imageset/Contents.json
  12. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/upAlert_bg.imageset/upAlert_bg@2x.png
  13. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/upAlert_bg.imageset/upAlert_bg@3x.png
  14. 6 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/Contents.json
  15. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/clear_notifer.imageset/Contents.json
  16. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/clear_notifer.imageset/clear_notifer@2x.png
  17. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/clear_notifer.imageset/clear_notifer@3x.png
  18. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/course_cell.imageset/Contents.json
  19. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/course_cell.imageset/course_cell@2x.png
  20. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/course_cell.imageset/course_cell@3x.png
  21. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_all.imageset/Contents.json
  22. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_all.imageset/message_all@2x.png
  23. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_all.imageset/message_all@3x.png
  24. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_course.imageset/Contents.json
  25. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_course.imageset/message_course@2x.png
  26. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_course.imageset/message_course@3x.png
  27. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_notice.imageset/Contents.json
  28. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_notice.imageset/message_notice@2x.png
  29. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_notice.imageset/message_notice@3x.png
  30. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_system.imageset/Contents.json
  31. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_system.imageset/message_system@2x.png
  32. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_system.imageset/message_system@3x.png
  33. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/notice_cell.imageset/Contents.json
  34. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/notice_cell.imageset/notice_cell@2x.png
  35. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/notice_cell.imageset/notice_cell@3x.png
  36. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/system_cell.imageset/Contents.json
  37. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/system_cell.imageset/system_cell@2x.png
  38. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/system_cell.imageset/system_cell@3x.png
  39. 2 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSBaseViewController.h
  40. 18 1
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSBaseWKWebViewController.m
  41. 51 1
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h
  42. 78 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m
  43. 1 1
      KulexiuForStudent/KulexiuForStudent/Common/Tools/Custom/KSImageButton.m
  44. 2 0
      KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/NSString+Extension.h
  45. 5 0
      KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/NSString+Extension.m
  46. 3 3
      KulexiuForStudent/KulexiuForStudent/Common/Tools/KSVideoHelper.m
  47. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupApplyChooseCell.m
  48. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupApplyMemberCell.m
  49. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupMemberListCell.m
  50. 2 2
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupSettingBodyView.m
  51. 2 2
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Search/View/KSSearchResultViewCell.m
  52. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Chat/View/GroupListViewCell.m
  53. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Course/AccompanyCourse/View/AccompanyCourseInfoCell.m
  54. 2 2
      KulexiuForStudent/KulexiuForStudent/Module/Course/View/AccompanyCourseCell.m
  55. 73 8
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m
  56. 0 31
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Controller/NoticeMessageViewController.m
  57. 2 2
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Controller/NotiferMessageViewController.h
  58. 333 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Controller/NotiferMessageViewController.m
  59. 34 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Model/NotiferMessageModel.h
  60. 197 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Model/NotiferMessageModel.m
  61. 32 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferHeadView.h
  62. 204 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferHeadView.m
  63. 346 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferHeadView.xib
  64. 21 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferMessageCell.h
  65. 79 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferMessageCell.m
  66. 95 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferMessageCell.xib
  67. 8 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerCell.m
  68. 3 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerCell.xib
  69. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeHotAlbumCell.m
  70. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeInformationCell.m
  71. 8 2
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeLiveCouseCell.m
  72. 8 2
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeVideoCourseCell.m
  73. 27 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSNewsAlert.h
  74. 70 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSNewsAlert.m
  75. 79 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSNewsAlert.xib
  76. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherShowCell.m
  77. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Live/Controller/LiveVideoRoomViewController.m
  78. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Live/View/LiveSeatApplyCell.m
  79. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/SubjectChooseViewController.m
  80. 44 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/AddressList/Controller/AddressListViewController.m
  81. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Controller/MineViewController.m
  82. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Homework/View/HomeworkListCell.m
  83. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/VideoCourseModel.m
  84. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLiveCourseCell.m
  85. 2 2
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/VideoCourseCell.m
  86. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/Controller/SettingViewController.m
  87. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/View/VeriCheckView.m
  88. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/View/MineBodyView.m
  89. 1 0
      KulexiuForStudent/Podfile
  90. 5 1
      KulexiuForStudent/Podfile.lock
  91. 5 1
      KulexiuForStudent/Pods/Manifest.lock
  92. 1995 1614
      KulexiuForStudent/Pods/Pods.xcodeproj/project.pbxproj
  93. 33 26
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist
  94. 17 0
      KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-acknowledgements.markdown
  95. 23 0
      KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-acknowledgements.plist
  96. 1 0
      KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks-Debug-input-files.xcfilelist
  97. 1 0
      KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks-Debug-output-files.xcfilelist
  98. 1 0
      KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks-Release-input-files.xcfilelist
  99. 1 0
      KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks-Release-output-files.xcfilelist
  100. 2 0
      KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks.sh

+ 42 - 6
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -431,7 +431,7 @@
 		BC40BA0C28117B3B00DEC0D1 /* TYPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA0828117B3A00DEC0D1 /* TYPageControl.m */; };
 		BC40BA0C28117B3B00DEC0D1 /* TYPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA0828117B3A00DEC0D1 /* TYPageControl.m */; };
 		BC40BA0D28117B3B00DEC0D1 /* TYCyclePagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA0928117B3A00DEC0D1 /* TYCyclePagerView.m */; };
 		BC40BA0D28117B3B00DEC0D1 /* TYCyclePagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA0928117B3A00DEC0D1 /* TYCyclePagerView.m */; };
 		BC40BA0E28117B3B00DEC0D1 /* TYCyclePagerTransformLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA0A28117B3A00DEC0D1 /* TYCyclePagerTransformLayout.m */; };
 		BC40BA0E28117B3B00DEC0D1 /* TYCyclePagerTransformLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA0A28117B3A00DEC0D1 /* TYCyclePagerTransformLayout.m */; };
-		BC40BA1828124D3D00DEC0D1 /* NoticeMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1728124D3D00DEC0D1 /* NoticeMessageViewController.m */; };
+		BC40BA1828124D3D00DEC0D1 /* NotiferMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1728124D3D00DEC0D1 /* NotiferMessageViewController.m */; };
 		BC40BA1B281251ED00DEC0D1 /* HomeMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1A281251ED00DEC0D1 /* HomeMessageModel.m */; };
 		BC40BA1B281251ED00DEC0D1 /* HomeMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1A281251ED00DEC0D1 /* HomeMessageModel.m */; };
 		BC40BA1F2812552300DEC0D1 /* KSHomeButton.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1C2812552200DEC0D1 /* KSHomeButton.m */; };
 		BC40BA1F2812552300DEC0D1 /* KSHomeButton.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1C2812552200DEC0D1 /* KSHomeButton.m */; };
 		BC40BA202812552300DEC0D1 /* KSHomeButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC40BA1D2812552200DEC0D1 /* KSHomeButton.xib */; };
 		BC40BA202812552300DEC0D1 /* KSHomeButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC40BA1D2812552200DEC0D1 /* KSHomeButton.xib */; };
@@ -440,6 +440,11 @@
 		BC50171227FC0D5600F8BCBC /* SubjectChooseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */; };
 		BC50171227FC0D5600F8BCBC /* SubjectChooseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */; };
 		BC50171527FC0D8300F8BCBC /* SubjectChooseBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */; };
 		BC50171527FC0D8300F8BCBC /* SubjectChooseBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */; };
 		BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */; };
 		BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */; };
+		BC76630E2827E48800C91A1D /* NotiferMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC76630C2827E48800C91A1D /* NotiferMessageModel.m */; };
+		BC7663152827E49900C91A1D /* NotiferHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC76630F2827E49800C91A1D /* NotiferHeadView.m */; };
+		BC7663162827E49900C91A1D /* NotiferHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC7663102827E49800C91A1D /* NotiferHeadView.xib */; };
+		BC7663172827E49900C91A1D /* NotiferMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC7663122827E49800C91A1D /* NotiferMessageCell.m */; };
+		BC7663182827E49900C91A1D /* NotiferMessageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC7663132827E49900C91A1D /* NotiferMessageCell.xib */; };
 		BC8C2C572823F57100FBA5D5 /* AddressDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C452823F57100FBA5D5 /* AddressDetailViewController.m */; };
 		BC8C2C572823F57100FBA5D5 /* AddressDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C452823F57100FBA5D5 /* AddressDetailViewController.m */; };
 		BC8C2C582823F57100FBA5D5 /* AddressListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C462823F57100FBA5D5 /* AddressListViewController.m */; };
 		BC8C2C582823F57100FBA5D5 /* AddressListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C462823F57100FBA5D5 /* AddressListViewController.m */; };
 		BC8C2C592823F57100FBA5D5 /* AddressListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C482823F57100FBA5D5 /* AddressListModel.m */; };
 		BC8C2C592823F57100FBA5D5 /* AddressListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C482823F57100FBA5D5 /* AddressListModel.m */; };
@@ -451,6 +456,8 @@
 		BC8C2C5F2823F57100FBA5D5 /* MyAddressListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C522823F57100FBA5D5 /* MyAddressListCell.m */; };
 		BC8C2C5F2823F57100FBA5D5 /* MyAddressListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C522823F57100FBA5D5 /* MyAddressListCell.m */; };
 		BC8C2C602823F57100FBA5D5 /* AddressBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C532823F57100FBA5D5 /* AddressBottomView.m */; };
 		BC8C2C602823F57100FBA5D5 /* AddressBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C532823F57100FBA5D5 /* AddressBottomView.m */; };
 		BC8C2C612823F57100FBA5D5 /* MyAddressListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC8C2C562823F57100FBA5D5 /* MyAddressListCell.xib */; };
 		BC8C2C612823F57100FBA5D5 /* MyAddressListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC8C2C562823F57100FBA5D5 /* MyAddressListCell.xib */; };
+		BC8C2C7E28265D8E00FBA5D5 /* KSNewsAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C7C28265D8D00FBA5D5 /* KSNewsAlert.m */; };
+		BC8C2C7F28265D8E00FBA5D5 /* KSNewsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC8C2C7D28265D8E00FBA5D5 /* KSNewsAlert.xib */; };
 		BCB6345D27F6D29600ACFDCF /* KSLiveChatroomWelcome.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340D27F6D29500ACFDCF /* KSLiveChatroomWelcome.m */; };
 		BCB6345D27F6D29600ACFDCF /* KSLiveChatroomWelcome.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340D27F6D29500ACFDCF /* KSLiveChatroomWelcome.m */; };
 		BCB6345E27F6D29600ACFDCF /* KSLiveChatroomLeave.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340E27F6D29500ACFDCF /* KSLiveChatroomLeave.m */; };
 		BCB6345E27F6D29600ACFDCF /* KSLiveChatroomLeave.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340E27F6D29500ACFDCF /* KSLiveChatroomLeave.m */; };
 		BCB6345F27F6D29600ACFDCF /* KSLiveChatroomEnter.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340F27F6D29500ACFDCF /* KSLiveChatroomEnter.m */; };
 		BCB6345F27F6D29600ACFDCF /* KSLiveChatroomEnter.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340F27F6D29500ACFDCF /* KSLiveChatroomEnter.m */; };
@@ -1402,8 +1409,8 @@
 		BC40BA0928117B3A00DEC0D1 /* TYCyclePagerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TYCyclePagerView.m; sourceTree = "<group>"; };
 		BC40BA0928117B3A00DEC0D1 /* TYCyclePagerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TYCyclePagerView.m; sourceTree = "<group>"; };
 		BC40BA0A28117B3A00DEC0D1 /* TYCyclePagerTransformLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TYCyclePagerTransformLayout.m; sourceTree = "<group>"; };
 		BC40BA0A28117B3A00DEC0D1 /* TYCyclePagerTransformLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TYCyclePagerTransformLayout.m; sourceTree = "<group>"; };
 		BC40BA0B28117B3A00DEC0D1 /* TYPageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TYPageControl.h; sourceTree = "<group>"; };
 		BC40BA0B28117B3A00DEC0D1 /* TYPageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TYPageControl.h; sourceTree = "<group>"; };
-		BC40BA1628124D3D00DEC0D1 /* NoticeMessageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NoticeMessageViewController.h; sourceTree = "<group>"; };
-		BC40BA1728124D3D00DEC0D1 /* NoticeMessageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NoticeMessageViewController.m; sourceTree = "<group>"; };
+		BC40BA1628124D3D00DEC0D1 /* NotiferMessageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotiferMessageViewController.h; sourceTree = "<group>"; };
+		BC40BA1728124D3D00DEC0D1 /* NotiferMessageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotiferMessageViewController.m; sourceTree = "<group>"; };
 		BC40BA19281251EC00DEC0D1 /* HomeMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeMessageModel.h; sourceTree = "<group>"; };
 		BC40BA19281251EC00DEC0D1 /* HomeMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeMessageModel.h; sourceTree = "<group>"; };
 		BC40BA1A281251ED00DEC0D1 /* HomeMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeMessageModel.m; sourceTree = "<group>"; };
 		BC40BA1A281251ED00DEC0D1 /* HomeMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeMessageModel.m; sourceTree = "<group>"; };
 		BC40BA1C2812552200DEC0D1 /* KSHomeButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSHomeButton.m; sourceTree = "<group>"; };
 		BC40BA1C2812552200DEC0D1 /* KSHomeButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSHomeButton.m; sourceTree = "<group>"; };
@@ -1417,6 +1424,14 @@
 		BC50171327FC0D8300F8BCBC /* SubjectChooseBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectChooseBodyView.h; sourceTree = "<group>"; };
 		BC50171327FC0D8300F8BCBC /* SubjectChooseBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectChooseBodyView.h; sourceTree = "<group>"; };
 		BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubjectChooseBodyView.m; sourceTree = "<group>"; };
 		BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubjectChooseBodyView.m; sourceTree = "<group>"; };
 		BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SubjectChooseBodyView.xib; sourceTree = "<group>"; };
 		BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SubjectChooseBodyView.xib; sourceTree = "<group>"; };
+		BC76630C2827E48800C91A1D /* NotiferMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NotiferMessageModel.m; sourceTree = "<group>"; };
+		BC76630D2827E48800C91A1D /* NotiferMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotiferMessageModel.h; sourceTree = "<group>"; };
+		BC76630F2827E49800C91A1D /* NotiferHeadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NotiferHeadView.m; sourceTree = "<group>"; };
+		BC7663102827E49800C91A1D /* NotiferHeadView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NotiferHeadView.xib; sourceTree = "<group>"; };
+		BC7663112827E49800C91A1D /* NotiferMessageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotiferMessageCell.h; sourceTree = "<group>"; };
+		BC7663122827E49800C91A1D /* NotiferMessageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NotiferMessageCell.m; sourceTree = "<group>"; };
+		BC7663132827E49900C91A1D /* NotiferMessageCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NotiferMessageCell.xib; sourceTree = "<group>"; };
+		BC7663142827E49900C91A1D /* NotiferHeadView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotiferHeadView.h; sourceTree = "<group>"; };
 		BC8C2C432823F57100FBA5D5 /* AddressDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddressDetailViewController.h; sourceTree = "<group>"; };
 		BC8C2C432823F57100FBA5D5 /* AddressDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddressDetailViewController.h; sourceTree = "<group>"; };
 		BC8C2C442823F57100FBA5D5 /* AddressListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddressListViewController.h; sourceTree = "<group>"; };
 		BC8C2C442823F57100FBA5D5 /* AddressListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddressListViewController.h; sourceTree = "<group>"; };
 		BC8C2C452823F57100FBA5D5 /* AddressDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AddressDetailViewController.m; sourceTree = "<group>"; };
 		BC8C2C452823F57100FBA5D5 /* AddressDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AddressDetailViewController.m; sourceTree = "<group>"; };
@@ -1435,6 +1450,9 @@
 		BC8C2C542823F57100FBA5D5 /* AddressDetailBodyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddressDetailBodyView.h; sourceTree = "<group>"; };
 		BC8C2C542823F57100FBA5D5 /* AddressDetailBodyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddressDetailBodyView.h; sourceTree = "<group>"; };
 		BC8C2C552823F57100FBA5D5 /* KSAddressPickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSAddressPickerView.h; sourceTree = "<group>"; };
 		BC8C2C552823F57100FBA5D5 /* KSAddressPickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSAddressPickerView.h; sourceTree = "<group>"; };
 		BC8C2C562823F57100FBA5D5 /* MyAddressListCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyAddressListCell.xib; sourceTree = "<group>"; };
 		BC8C2C562823F57100FBA5D5 /* MyAddressListCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyAddressListCell.xib; sourceTree = "<group>"; };
+		BC8C2C7B28265D8D00FBA5D5 /* KSNewsAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSNewsAlert.h; sourceTree = "<group>"; };
+		BC8C2C7C28265D8D00FBA5D5 /* KSNewsAlert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSNewsAlert.m; sourceTree = "<group>"; };
+		BC8C2C7D28265D8E00FBA5D5 /* KSNewsAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KSNewsAlert.xib; sourceTree = "<group>"; };
 		BCB6340C27F6D29500ACFDCF /* KSRCMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSRCMessageModel.h; sourceTree = "<group>"; };
 		BCB6340C27F6D29500ACFDCF /* KSRCMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSRCMessageModel.h; sourceTree = "<group>"; };
 		BCB6340D27F6D29500ACFDCF /* KSLiveChatroomWelcome.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomWelcome.m; sourceTree = "<group>"; };
 		BCB6340D27F6D29500ACFDCF /* KSLiveChatroomWelcome.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomWelcome.m; sourceTree = "<group>"; };
 		BCB6340E27F6D29500ACFDCF /* KSLiveChatroomLeave.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomLeave.m; sourceTree = "<group>"; };
 		BCB6340E27F6D29500ACFDCF /* KSLiveChatroomLeave.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomLeave.m; sourceTree = "<group>"; };
@@ -2037,6 +2055,9 @@
 		275FA1F627E7356A00CFEA2E /* View */ = {
 		275FA1F627E7356A00CFEA2E /* View */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				BC8C2C7B28265D8D00FBA5D5 /* KSNewsAlert.h */,
+				BC8C2C7C28265D8D00FBA5D5 /* KSNewsAlert.m */,
+				BC8C2C7D28265D8E00FBA5D5 /* KSNewsAlert.xib */,
 				BCBFDF3528110C660052AFE5 /* HomeNavView.h */,
 				BCBFDF3528110C660052AFE5 /* HomeNavView.h */,
 				BCBFDF3628110C660052AFE5 /* HomeNavView.m */,
 				BCBFDF3628110C660052AFE5 /* HomeNavView.m */,
 				BCBFDF3828110C6F0052AFE5 /* HomeNavView.xib */,
 				BCBFDF3828110C6F0052AFE5 /* HomeNavView.xib */,
@@ -3417,8 +3438,8 @@
 		BC40BA1028124D0C00DEC0D1 /* Controller */ = {
 		BC40BA1028124D0C00DEC0D1 /* Controller */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
-				BC40BA1628124D3D00DEC0D1 /* NoticeMessageViewController.h */,
-				BC40BA1728124D3D00DEC0D1 /* NoticeMessageViewController.m */,
+				BC40BA1628124D3D00DEC0D1 /* NotiferMessageViewController.h */,
+				BC40BA1728124D3D00DEC0D1 /* NotiferMessageViewController.m */,
 			);
 			);
 			path = Controller;
 			path = Controller;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -3426,6 +3447,8 @@
 		BC40BA1128124D0C00DEC0D1 /* Model */ = {
 		BC40BA1128124D0C00DEC0D1 /* Model */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				BC76630D2827E48800C91A1D /* NotiferMessageModel.h */,
+				BC76630C2827E48800C91A1D /* NotiferMessageModel.m */,
 			);
 			);
 			path = Model;
 			path = Model;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -3433,6 +3456,12 @@
 		BC40BA1228124D0C00DEC0D1 /* View */ = {
 		BC40BA1228124D0C00DEC0D1 /* View */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				BC7663142827E49900C91A1D /* NotiferHeadView.h */,
+				BC76630F2827E49800C91A1D /* NotiferHeadView.m */,
+				BC7663102827E49800C91A1D /* NotiferHeadView.xib */,
+				BC7663112827E49800C91A1D /* NotiferMessageCell.h */,
+				BC7663122827E49800C91A1D /* NotiferMessageCell.m */,
+				BC7663132827E49900C91A1D /* NotiferMessageCell.xib */,
 			);
 			);
 			path = View;
 			path = View;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -4212,6 +4241,7 @@
 				2723B5C327F157B100E0B90B /* ChatNavView.xib in Resources */,
 				2723B5C327F157B100E0B90B /* ChatNavView.xib in Resources */,
 				BCFE53F22812898700AD6786 /* HomeVideoCourseCell.xib in Resources */,
 				BCFE53F22812898700AD6786 /* HomeVideoCourseCell.xib in Resources */,
 				2723B5BA27F157B100E0B90B /* ChatAddressHeaderView.xib in Resources */,
 				2723B5BA27F157B100E0B90B /* ChatAddressHeaderView.xib in Resources */,
+				BC8C2C7F28265D8E00FBA5D5 /* KSNewsAlert.xib in Resources */,
 				BC119235280ED97C00A716F7 /* CourseForLiveCell.xib in Resources */,
 				BC119235280ED97C00A716F7 /* CourseForLiveCell.xib in Resources */,
 				2723B62E27F157D500E0B90B /* GroupApplyChooseAllCell.xib in Resources */,
 				2723B62E27F157D500E0B90B /* GroupApplyChooseAllCell.xib in Resources */,
 				275FA23A27E7356B00CFEA2E /* VefiBodyView.xib in Resources */,
 				275FA23A27E7356B00CFEA2E /* VefiBodyView.xib in Resources */,
@@ -4243,6 +4273,7 @@
 				BC119270280FAF7D00A716F7 /* AccompanyCourseInfoCell.xib in Resources */,
 				BC119270280FAF7D00A716F7 /* AccompanyCourseInfoCell.xib in Resources */,
 				BC8C2C5B2823F57100FBA5D5 /* AddressBottomView.xib in Resources */,
 				BC8C2C5B2823F57100FBA5D5 /* AddressBottomView.xib in Resources */,
 				BC40BA202812552300DEC0D1 /* KSHomeButton.xib in Resources */,
 				BC40BA202812552300DEC0D1 /* KSHomeButton.xib in Resources */,
+				BC7663162827E49900C91A1D /* NotiferHeadView.xib in Resources */,
 				2723B5C427F157B100E0B90B /* KSChatListSearchView.xib in Resources */,
 				2723B5C427F157B100E0B90B /* KSChatListSearchView.xib in Resources */,
 				2779359B27E324A80010E277 /* TZImagePickerController.bundle in Resources */,
 				2779359B27E324A80010E277 /* TZImagePickerController.bundle in Resources */,
 				277935C327E324A90010E277 /* SDQWMaskCustomView.xib in Resources */,
 				277935C327E324A90010E277 /* SDQWMaskCustomView.xib in Resources */,
@@ -4259,6 +4290,7 @@
 				275FA24527E73E0100CFEA2E /* InstrumentDescView.xib in Resources */,
 				275FA24527E73E0100CFEA2E /* InstrumentDescView.xib in Resources */,
 				BC11922D280ED8E800A716F7 /* CourseNavView.xib in Resources */,
 				BC11922D280ED8E800A716F7 /* CourseNavView.xib in Resources */,
 				BC11929D280FD2EF00A716F7 /* HomeworkBottomView.xib in Resources */,
 				BC11929D280FD2EF00A716F7 /* HomeworkBottomView.xib in Resources */,
+				BC7663182827E49900C91A1D /* NotiferMessageCell.xib in Resources */,
 				BCB6348127F6D29600ACFDCF /* LiveSeatApplyCell.xib in Resources */,
 				BCB6348127F6D29600ACFDCF /* LiveSeatApplyCell.xib in Resources */,
 				2723B62D27F157D500E0B90B /* GroupApplyMemberCell.xib in Resources */,
 				2723B62D27F157D500E0B90B /* GroupApplyMemberCell.xib in Resources */,
 				BCB6347427F6D29600ACFDCF /* BaseEmoji.plist in Resources */,
 				BCB6347427F6D29600ACFDCF /* BaseEmoji.plist in Resources */,
@@ -4489,6 +4521,7 @@
 				275FA1DC27E7351900CFEA2E /* KSAQRecordManager.m in Sources */,
 				275FA1DC27E7351900CFEA2E /* KSAQRecordManager.m in Sources */,
 				BC40B9F82811767A00DEC0D1 /* HotInformationHeadView.m in Sources */,
 				BC40B9F82811767A00DEC0D1 /* HotInformationHeadView.m in Sources */,
 				BCB6356827F6D2A300ACFDCF /* ApplySpeechResultMessage.m in Sources */,
 				BCB6356827F6D2A300ACFDCF /* ApplySpeechResultMessage.m in Sources */,
+				BC7663152827E49900C91A1D /* NotiferHeadView.m in Sources */,
 				2779351427E324A50010E277 /* NSMutableDictionary+KSSafe.m in Sources */,
 				2779351427E324A50010E277 /* NSMutableDictionary+KSSafe.m in Sources */,
 				2779356F27E324A70010E277 /* SkipTextField.m in Sources */,
 				2779356F27E324A70010E277 /* SkipTextField.m in Sources */,
 				2723B67F27F15D3D00E0B90B /* AboutUsViewController.m in Sources */,
 				2723B67F27F15D3D00E0B90B /* AboutUsViewController.m in Sources */,
@@ -4774,6 +4807,7 @@
 				BCB6356627F6D2A300ACFDCF /* DeviceMessage.m in Sources */,
 				BCB6356627F6D2A300ACFDCF /* DeviceMessage.m in Sources */,
 				BCBFDF3728110C660052AFE5 /* HomeNavView.m in Sources */,
 				BCBFDF3728110C660052AFE5 /* HomeNavView.m in Sources */,
 				277935D127E324A90010E277 /* ALCalendarCollectionView.m in Sources */,
 				277935D127E324A90010E277 /* ALCalendarCollectionView.m in Sources */,
+				BC76630E2827E48800C91A1D /* NotiferMessageModel.m in Sources */,
 				BCFE5406281545C600AD6786 /* HomeAlbumModel.m in Sources */,
 				BCFE5406281545C600AD6786 /* HomeAlbumModel.m in Sources */,
 				2779355427E324A70010E277 /* VoNetWorking.m in Sources */,
 				2779355427E324A70010E277 /* VoNetWorking.m in Sources */,
 				275FA1EE27E7351900CFEA2E /* KSBaseViewController.m in Sources */,
 				275FA1EE27E7351900CFEA2E /* KSBaseViewController.m in Sources */,
@@ -4798,6 +4832,7 @@
 				2779355227E324A70010E277 /* VoMemoryCache.m in Sources */,
 				2779355227E324A70010E277 /* VoMemoryCache.m in Sources */,
 				2779352A27E324A60010E277 /* UIView+Dealloc.m in Sources */,
 				2779352A27E324A60010E277 /* UIView+Dealloc.m in Sources */,
 				2779352D27E324A60010E277 /* NSString+CZHSizeExtension.m in Sources */,
 				2779352D27E324A60010E277 /* NSString+CZHSizeExtension.m in Sources */,
+				BC8C2C7E28265D8E00FBA5D5 /* KSNewsAlert.m in Sources */,
 				BC119259280FA85300A716F7 /* HomeworkListCell.m in Sources */,
 				BC119259280FA85300A716F7 /* HomeworkListCell.m in Sources */,
 				2779353827E324A60010E277 /* UIView+KSExtension.m in Sources */,
 				2779353827E324A60010E277 /* UIView+KSExtension.m in Sources */,
 				2723B5CD27F157BE00E0B90B /* GroupListModel.m in Sources */,
 				2723B5CD27F157BE00E0B90B /* GroupListModel.m in Sources */,
@@ -4863,6 +4898,7 @@
 				2779353D27E324A60010E277 /* UIScrollView+KSTouch.m in Sources */,
 				2779353D27E324A60010E277 /* UIScrollView+KSTouch.m in Sources */,
 				BCB6353227F6D2A300ACFDCF /* InputView.m in Sources */,
 				BCB6353227F6D2A300ACFDCF /* InputView.m in Sources */,
 				275FA23927E7356B00CFEA2E /* FirstSettingBodyView.m in Sources */,
 				275FA23927E7356B00CFEA2E /* FirstSettingBodyView.m in Sources */,
+				BC7663172827E49900C91A1D /* NotiferMessageCell.m in Sources */,
 				BCB6346527F6D29600ACFDCF /* KSLiveChatroomLike.m in Sources */,
 				BCB6346527F6D29600ACFDCF /* KSLiveChatroomLike.m in Sources */,
 				BCB6356927F6D2A300ACFDCF /* TurnPageMessage.m in Sources */,
 				BCB6356927F6D2A300ACFDCF /* TurnPageMessage.m in Sources */,
 				277935CA27E324A90010E277 /* TAAnimatedDotView.m in Sources */,
 				277935CA27E324A90010E277 /* TAAnimatedDotView.m in Sources */,
@@ -4899,7 +4935,7 @@
 				2779357527E324A70010E277 /* LifeButton.m in Sources */,
 				2779357527E324A70010E277 /* LifeButton.m in Sources */,
 				27F9032C27E87C2E00C08A19 /* KSNetworkAlert.m in Sources */,
 				27F9032C27E87C2E00C08A19 /* KSNetworkAlert.m in Sources */,
 				2779353627E324A60010E277 /* CALayer+Layout.m in Sources */,
 				2779353627E324A60010E277 /* CALayer+Layout.m in Sources */,
-				BC40BA1828124D3D00DEC0D1 /* NoticeMessageViewController.m in Sources */,
+				BC40BA1828124D3D00DEC0D1 /* NotiferMessageViewController.m in Sources */,
 				275FA22D27E7356B00CFEA2E /* ChatViewController.m in Sources */,
 				275FA22D27E7356B00CFEA2E /* ChatViewController.m in Sources */,
 				BCB6354127F6D2A300ACFDCF /* VideoListCell.m in Sources */,
 				BCB6354127F6D2A300ACFDCF /* VideoListCell.m in Sources */,
 				2723B5A427F1578300E0B90B /* KSChatConversationViewController.m in Sources */,
 				2723B5A427F1578300E0B90B /* KSChatConversationViewController.m in Sources */,

+ 1 - 1
KulexiuForStudent/KulexiuForStudent.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>KulexiuForStudent.xcscheme_^#shared#^_</key>
 		<key>KulexiuForStudent.xcscheme_^#shared#^_</key>
 		<dict>
 		<dict>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>30</integer>
+			<integer>31</integer>
 		</dict>
 		</dict>
 	</dict>
 	</dict>
 </dict>
 </dict>

BIN
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate


+ 2 - 34
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -62,8 +62,8 @@
             filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
             filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
             startingColumnNumber = "9223372036854775807"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "913"
-            endingLineNumber = "913"
+            startingLineNumber = "931"
+            endingLineNumber = "931"
             landmarkName = "-homeCourseChooseAction:"
             landmarkName = "-homeCourseChooseAction:"
             landmarkType = "7">
             landmarkType = "7">
          </BreakpointContent>
          </BreakpointContent>
@@ -103,38 +103,6 @@
       <BreakpointProxy
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
          <BreakpointContent
-            uuid = "8A2379FD-DD15-49C1-A722-62AE22807377"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Common/Base/KSBaseWKWebViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "54"
-            endingLineNumber = "54"
-            landmarkName = "-operationDealCallbackMessage:"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "88106977-85A3-48AA-A3EE-39F89AF225EF"
-            shouldBeEnabled = "No"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "364"
-            endingLineNumber = "364"
-            landmarkName = "-requestCourseInfo"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
             uuid = "9C309015-F943-43C8-AD3C-0A595D5701FD"
             uuid = "9C309015-F943-43C8-AD3C-0A595D5701FD"
             shouldBeEnabled = "No"
             shouldBeEnabled = "No"
             ignoreCount = "0"
             ignoreCount = "0"

+ 6 - 0
KulexiuForStudent/KulexiuForStudent/AppDelegate.h

@@ -18,6 +18,12 @@
 //记录当前界面是否支持横竖屏旋转
 //记录当前界面是否支持横竖屏旋转
 @property (assign, nonatomic)BOOL allowAutoRotate;
 @property (assign, nonatomic)BOOL allowAutoRotate;
 
 
+@property (nonatomic, assign) BOOL isShowMemoAlert;
+
+@property (nonatomic, assign) BOOL isShowFlashAlert; // 是否显示首页 news alert
+
+- (void)showMemoAlert;
+
 - (void)initTableBar;
 - (void)initTableBar;
 - (void)requestRongCloudToken;
 - (void)requestRongCloudToken;
 - (void)appTrackActionAuth;
 - (void)appTrackActionAuth;

+ 42 - 23
KulexiuForStudent/KulexiuForStudent/AppDelegate.m

@@ -50,6 +50,8 @@
 
 
 @property (nonatomic, strong) KSUpdateAlert *alertView;
 @property (nonatomic, strong) KSUpdateAlert *alertView;
 
 
+@property (nonatomic, strong) NSMutableDictionary *messageDict;
+
 @property (nonatomic, assign) BOOL hasCheckTrackAuth;
 @property (nonatomic, assign) BOOL hasCheckTrackAuth;
 
 
 @end
 @end
@@ -169,28 +171,28 @@
         [KSUpdateManager ks_updateWithAPPID:@"1487057217" withBundleId:nil block:^(NSString * _Nonnull currentVersion, NSString * _Nonnull storeVersion, NSString * _Nonnull openUrl, BOOL isUpdate) {
         [KSUpdateManager ks_updateWithAPPID:@"1487057217" withBundleId:nil block:^(NSString * _Nonnull currentVersion, NSString * _Nonnull storeVersion, NSString * _Nonnull openUrl, BOOL isUpdate) {
             if (isUpdate) {
             if (isUpdate) {
                 
                 
-//                [KSRequestManager appVersionInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
-//                    if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-//
-//                        NSString *serviceVersion = [[dic dictionaryValueForKey:@"data"] stringValueForKey:@"version"];
-//                        if ([serviceVersion isEqualToString:storeVersion] || [self isLowerVersionCompareLocalVersion:currentVersion serviceVersion:serviceVersion]) {
-//                            // desc
-//                            NSString *descMessage = [[dic dictionaryValueForKey:@"data"] stringValueForKey:@"description"];
-//                            // 判断
-//                            if ([[dic dictionaryValueForKey:@"data"] boolValueForKey:@"isForceUpdate"]) {
-//                                self.isNeedUpdate = YES;
-//                                [self showAlertWithMemo:storeVersion descMessage:descMessage isforce:YES openUrl:openUrl];
-//                            }
-//                            else {
-//                                self.isNeedUpdate = NO;
-//                                [self showAlertWithMemo:storeVersion descMessage:descMessage isforce:NO openUrl:openUrl];
-//                            }
-//                        }
-//
-//                    }
-//                } faliure:^(NSError * _Nonnull error) {
-//                    [self showAlertWithMemo:storeVersion descMessage:@"全新版本上线了,赶快来体验吧!" isforce:NO openUrl:openUrl];
-//                }];
+                [KSNetworkingManager appVersionInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+                    if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+                        
+                        NSString *serviceVersion = [[dic dictionaryValueForKey:@"data"] stringValueForKey:@"version"];
+                        if ([serviceVersion isEqualToString:storeVersion] || [self isLowerVersionCompareLocalVersion:currentVersion serviceVersion:serviceVersion]) {
+                            // desc
+                            NSString *descMessage = [[dic dictionaryValueForKey:@"data"] stringValueForKey:@"description"];
+                            // 判断
+                            if ([[dic dictionaryValueForKey:@"data"] boolValueForKey:@"isForceUpdate"]) {
+                                self.isNeedUpdate = YES;
+                                [self showAlertWithMemo:storeVersion descMessage:descMessage isforce:YES openUrl:openUrl];
+                            }
+                            else {
+                                self.isNeedUpdate = NO;
+                                [self showAlertWithMemo:storeVersion descMessage:descMessage isforce:NO openUrl:openUrl];
+                            }
+                        }
+                        
+                    }
+                } faliure:^(NSError * _Nonnull error) {
+                    [self showAlertWithMemo:storeVersion descMessage:@"全新版本上线了,赶快来体验吧!" isforce:NO openUrl:openUrl];
+                }];
             }
             }
             else {
             else {
                 NSLog(@"当前版本%@,商店版本%@,不需要更新",currentVersion,storeVersion);
                 NSLog(@"当前版本%@,商店版本%@,不需要更新",currentVersion,storeVersion);
@@ -515,10 +517,26 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
     }
     }
 }
 }
 
 
+- (void)showMemoAlert {
+    if (_isShowFlashAlert == NO && self.messageDict != nil) {
+        [self showAlertWithMemo:[self.messageDict stringValueForKey:@"memo"] descMessage:[self.messageDict stringValueForKey:@"descMessage"] isforce:[self.messageDict boolValueForKey:@"isforce"] openUrl:[self.messageDict stringValueForKey:@"openUrl"]];
+    }
+}
 
 
 - (void)showAlertWithMemo:(NSString *)memo descMessage:(NSString *)descMessage isforce:(BOOL)isforce openUrl:(NSString *)openUrl {
 - (void)showAlertWithMemo:(NSString *)memo descMessage:(NSString *)descMessage isforce:(BOOL)isforce openUrl:(NSString *)openUrl {
-
+    if (_isShowFlashAlert) {
+        NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+        [parm setValue:memo forKey:@"memo"];
+        [parm setValue:descMessage forKey:@"descMessage"];
+        [parm setValue:@(isforce) forKey:@"isforce"];
+        [parm setValue:openUrl forKey:@"openUrl"];
+        self.messageDict = [parm mutableCopy];
+        return;
+    }
+    self.messageDict = nil;
+    MJWeakSelf;
     [self.alertView configWithMemo:memo desc:descMessage isForce:isforce callback:^(BOOL isSure) {
     [self.alertView configWithMemo:memo desc:descMessage isForce:isforce callback:^(BOOL isSure) {
+        weakSelf.isShowMemoAlert = NO;
         if (isSure) {
         if (isSure) {
             if (@available(iOS 10.0, *)) {
             if (@available(iOS 10.0, *)) {
                 if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {
                 if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {
@@ -544,6 +562,7 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
         }
         }
     }];
     }];
     [self.alertView showAlert];
     [self.alertView showAlert];
+    self.isShowMemoAlert = YES;
 }
 }
 
 
 
 

+ 6 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/alert_cancle.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/alert_cancle.imageset/alert_cancle@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/alert_cancle.imageset/alert_cancle@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/upAlert_bg.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/upAlert_bg.imageset/upAlert_bg@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Common/upAlert_bg.imageset/upAlert_bg@3x.png


+ 6 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/clear_notifer.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/clear_notifer.imageset/clear_notifer@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/clear_notifer.imageset/clear_notifer@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/course_cell.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/course_cell.imageset/course_cell@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/course_cell.imageset/course_cell@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_all.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_all.imageset/message_all@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_all.imageset/message_all@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_course.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_course.imageset/message_course@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_course.imageset/message_course@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_notice.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_notice.imageset/message_notice@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_notice.imageset/message_notice@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_system.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_system.imageset/message_system@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/message_system.imageset/message_system@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/notice_cell.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/notice_cell.imageset/notice_cell@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/notice_cell.imageset/notice_cell@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/system_cell.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/system_cell.imageset/system_cell@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MessageCenter/system_cell.imageset/system_cell@3x.png


+ 2 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/KSBaseViewController.h

@@ -64,6 +64,8 @@ NS_ASSUME_NONNULL_BEGIN
 - (void)backAction; // 返回
 - (void)backAction; // 返回
 -(void)allocTitle:(NSString*)Ntitle withColor:(UIColor *)color;
 -(void)allocTitle:(NSString*)Ntitle withColor:(UIColor *)color;
 
 
+- (void)selectBarHomeWithIndex:(NSInteger)index;
+
 //结束页面编辑
 //结束页面编辑
 - (void)endViewEditing;
 - (void)endViewEditing;
 // 重置数据
 // 重置数据

+ 18 - 1
KulexiuForStudent/KulexiuForStudent/Common/Base/KSBaseWKWebViewController.m

@@ -412,7 +412,24 @@
         NSString *infoMessage = [[parm dictionaryValueForKey:@"content"] stringValueForKey:@"payInfo"];
         NSString *infoMessage = [[parm dictionaryValueForKey:@"content"] stringValueForKey:@"payInfo"];
         [KSOrderManager dealWithAliOrder:infoMessage];
         [KSOrderManager dealWithAliOrder:infoMessage];
     }
     }
-    
+    else if ([[parm stringValueForKey:@"api"] isEqualToString:@"joinChatGroup"]) {
+        NSDictionary *valueDic = [parm dictionaryValueForKey:@"content"];
+        NSString *targetId = [valueDic stringValueForKey:@"id"];
+        if ([valueDic stringValueForKey:@"single"]) { // 单聊
+            
+            KSChatConversationViewController *ctrl = [[KSChatConversationViewController alloc] init];
+            ctrl.targetId = targetId;
+            ctrl.conversationType = ConversationType_PRIVATE;
+            [self.navigationController pushViewController:ctrl animated:YES];
+            
+        }
+        else if ([valueDic stringValueForKey:@"multi"]) { // 群聊
+            KSChatConversationViewController *ctrl = [[KSChatConversationViewController alloc] init];
+            ctrl.targetId = targetId;
+            ctrl.conversationType = ConversationType_GROUP;
+            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+    }
 //    else if ([[parm stringValueForKey:@"api"] isEqualToString:@"enterLiveRoom"]) { // 进入直播间
 //    else if ([[parm stringValueForKey:@"api"] isEqualToString:@"enterLiveRoom"]) { // 进入直播间
 //        NSDictionary *valueDic = [parm dictionaryValueForKey:@"content"];
 //        NSDictionary *valueDic = [parm dictionaryValueForKey:@"content"];
 //        NSString *roomId = [valueDic stringValueForKey:@"roomId"];
 //        NSString *roomId = [valueDic stringValueForKey:@"roomId"];

+ 51 - 1
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h

@@ -24,6 +24,10 @@ NS_ASSUME_NONNULL_BEGIN
 // 退出登录操作
 // 退出登录操作
 + (void)logoutAction;
 + (void)logoutAction;
 
 
+#pragma mark ----- version
+// api-admin/appVersionInfo/queryByPlatform
++ (void)appVersionInfoRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 #pragma mark ---- 图片上传
 #pragma mark ---- 图片上传
 /**
 /**
  图片上传
  图片上传
@@ -528,7 +532,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (void)queryAddressDetailRequst:(NSString *)get addressId:(NSString *)addressId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 + (void)queryAddressDetailRequst:(NSString *)get addressId:(NSString *)addressId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
 
 // 修改收货地址
 // 修改收货地址
-// /mall-portal-server/member/address/update/{id}
+// /api-mall-portal/member/address/update/{id}
 
 
 /// 修改收获地址
 /// 修改收获地址
 /// @param post post
 /// @param post post
@@ -544,6 +548,52 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param success 成功
 /// @param success 成功
 /// @param faliure 失败
 /// @param faliure 失败
 + (void)updateAddressRequest:(NSString *)post addressId:(NSString *)addressId name:(NSString *)name phoneNumber:(NSString *)phoneNumber defaultStatus:(NSInteger)defaultStatus detailAddress:(NSString *)detailAddress province:(NSString *)province city:(NSString *)city region:(NSString *)region postCode:(NSString *)postCode success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 + (void)updateAddressRequest:(NSString *)post addressId:(NSString *)addressId name:(NSString *)name phoneNumber:(NSString *)phoneNumber defaultStatus:(NSInteger)defaultStatus detailAddress:(NSString *)detailAddress province:(NSString *)province city:(NSString *)city region:(NSString *)region postCode:(NSString *)postCode success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /api-mall-portal/member/address/delete/{id}
+
+/// 删除收货地址
+/// @param post post
+/// @param addressId 地址id
+/// @param success 成功
+/// @param faliure 失败
++ (void)deleteAddressRequest:(NSString *)post addressId:(NSString *)addressId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+#pragma mark ------- 消息中心
+// /api-student/sysMessage/list
+
+/// 消息列表
+/// @param post post
+/// @param group 消息组 SYSTEM:系统消息 COURSE:课程信息 NOTICE:公告
+/// @param page 分页
+/// @param rows 条数
+/// @param success 成功
+/// @param faliure 失败
++ (void)sysMessageListRequest:(NSString *)post group:(NSString *)group page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /api-student/sysMessage/queryCountOfUnread
+
+/// 获取未读消息条数
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)queryCountOfUnreadRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+    
+// /api-student/sysMessage/setRead/{id}
+
+/// 设置消息已读
+/// @param post post
+/// @param messageId 消息id
+/// @param success 成功
+/// @param faliure 失败
++ (void)setReadMessage:(NSString *)post messageId:(NSString *)messageId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+
+// /api-student/sysMessage/batchSetRead
+
+/// 消息一键已读
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)batchSetReadRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 @end
 @end
 
 
 NS_ASSUME_NONNULL_END
 NS_ASSUME_NONNULL_END

+ 78 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m

@@ -297,6 +297,15 @@
     }];
     }];
 }
 }
 
 
+#pragma mark ----- version
+// api-admin/appVersionInfo/queryByPlatform
++ (void)appVersionInfoRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-admin/appVersionInfo/queryByPlatform"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@"iOS-student" forKey:@"platform"];
+    [self request:get andWithUrl:url and:parm success:success faliure:faliure];
+}
+
 #pragma mark ---- 图片上传
 #pragma mark ---- 图片上传
 /**
 /**
  图片上传
  图片上传
@@ -1122,6 +1131,75 @@
     [parm setValue:region forKey:@"region"];
     [parm setValue:region forKey:@"region"];
     [parm setValue:postCode forKey:@"postCode"];
     [parm setValue:postCode forKey:@"postCode"];
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-mall-portal/member/address/delete/{id}
+
+/// 删除收货地址
+/// @param post post
+/// @param addressId 地址id
+/// @param success 成功
+/// @param faliure 失败
++ (void)deleteAddressRequest:(NSString *)post addressId:(NSString *)addressId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@%@", hostURL, @"/api-mall-portal/member/address/delete/",addressId];
+    [self request:post andWithUrl:url and:nil success:success faliure:faliure];
+}
+
+#pragma mark ------- 消息中心
+// /api-student/sysMessage/list
+
+/// 消息列表
+/// @param post post
+/// @param group 消息组 SYSTEM:系统消息 COURSE:课程信息 NOTICE:公告
+/// @param page 分页
+/// @param rows 条数
+/// @param success 成功
+/// @param faliure 失败
++ (void)sysMessageListRequest:(NSString *)post group:(NSString *)group page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/sysMessage/list"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:group forKey:@"group"];
+    [parm setValue:@(page) forKey:@"page"];
+    [parm setValue:@(rows) forKey:@"rows"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-student/sysMessage/queryCountOfUnread
+
+/// 获取未读消息条数
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)queryCountOfUnreadRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/sysMessage/queryCountOfUnread"];
+    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+}
     
     
+// /api-student/sysMessage/setRead/{id}
+
+/// 设置消息已读
+/// @param post post
+/// @param messageId 消息id
+/// @param success 成功
+/// @param faliure 失败
++ (void)setReadMessage:(NSString *)post messageId:(NSString *)messageId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@%@", hostURL, @"/api-student/sysMessage/setRead/",messageId];
+    [self request:post andWithUrl:url and:nil success:success faliure:faliure];
+}
+
+
+// /api-student/sysMessage/batchSetRead
+
+/// 消息一键已读
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)batchSetReadRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/sysMessage/batchSetRead"];
+    [self request:post andWithUrl:url and:nil success:success faliure:faliure];
 }
 }
 @end
 @end

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Common/Tools/Custom/KSImageButton.m

@@ -28,7 +28,7 @@
     button.frame = frame;
     button.frame = frame;
     
     
     if ([image isKindOfClass:[NSString class]]) {
     if ([image isKindOfClass:[NSString class]]) {
-        [button sd_setBackgroundImageWithURL:[NSURL URLWithString:image] forState:UIControlStateNormal completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
+        [button sd_setBackgroundImageWithURL:[NSURL URLWithString:[image getUrlEndcodeString]] forState:UIControlStateNormal completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
             button.displayImage = image;
             button.displayImage = image;
         }];
         }];
     } else {
     } else {

+ 2 - 0
KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/NSString+Extension.h

@@ -30,6 +30,8 @@ typedef NS_ENUM(NSInteger,CHECKTYPE){
 + (NSString*)deviceVersion;//获取手机型号
 + (NSString*)deviceVersion;//获取手机型号
 + (NSString*)dictionaryToJson:(NSDictionary *)dic;
 + (NSString*)dictionaryToJson:(NSDictionary *)dic;
 - (NSString *)dateFormatString; // 返回年月日 传入格式 YYYY-MM-dd hh:mm:ss
 - (NSString *)dateFormatString; // 返回年月日 传入格式 YYYY-MM-dd hh:mm:ss
+// url encoding
+- (NSString *)getUrlEndcodeString;
 
 
 /**
 /**
  获取字符串首字母(传入汉字字符串,返回大写拼音首字母)
  获取字符串首字母(传入汉字字符串,返回大写拼音首字母)

+ 5 - 0
KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/NSString+Extension.m

@@ -233,6 +233,11 @@
     }
     }
 }
 }
 
 
+// url encoding
+- (NSString *)getUrlEndcodeString {
+    return [self stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];;
+}
+
 /**
 /**
  获取字符串首字母(传入汉字字符串,返回大写拼音首字母)
  获取字符串首字母(传入汉字字符串,返回大写拼音首字母)
  
  

+ 3 - 3
KulexiuForStudent/KulexiuForStudent/Common/Tools/KSVideoHelper.m

@@ -14,7 +14,7 @@
 @implementation KSVideoHelper
 @implementation KSVideoHelper
 
 
 + (void)getVideoPreviewImageUrl:(NSString *)videoUrl forImageView:(UIImageView *)imageView placeholder:(UIImage *)placeHolder {
 + (void)getVideoPreviewImageUrl:(NSString *)videoUrl forImageView:(UIImageView *)imageView placeholder:(UIImage *)placeHolder {
-
+    videoUrl = [videoUrl getUrlEndcodeString];
     [[SDImageCache sharedImageCache] queryCacheOperationForKey:videoUrl done:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) {
     [[SDImageCache sharedImageCache] queryCacheOperationForKey:videoUrl done:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) {
         //是否有缓存图片
         //是否有缓存图片
         if(image){
         if(image){
@@ -29,7 +29,7 @@
 // 获取视频第一帧
 // 获取视频第一帧
 + (void)getVideoFirstViewImage:(NSString *)videoURL forImageView:(UIImageView *)imageView placeHolderImage:(UIImage *)placeHolder {
 + (void)getVideoFirstViewImage:(NSString *)videoURL forImageView:(UIImageView *)imageView placeHolderImage:(UIImage *)placeHolder {
    
    
-    NSString *url = videoURL;
+    NSString *url = [videoURL getUrlEndcodeString];
     __block UIImage *videoImage;
     __block UIImage *videoImage;
     dispatch_async(dispatch_get_global_queue(0, 0), ^{
     dispatch_async(dispatch_get_global_queue(0, 0), ^{
         AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:url] options:nil];
         AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:url] options:nil];
@@ -55,7 +55,7 @@
                 
                 
             }else{
             }else{
                 //如果不是视频就设置图片
                 //如果不是视频就设置图片
-                [imageView sd_setImageWithURL:[NSURL URLWithString:videoURL] placeholderImage:placeHolder];
+                [imageView sd_setImageWithURL:[NSURL URLWithString:[videoURL getUrlEndcodeString]] placeholderImage:placeHolder];
             }
             }
         });
         });
           
           

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupApplyChooseCell.m

@@ -35,7 +35,7 @@
         [self.userAvatal setImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
         [self.userAvatal setImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
     }
     }
     else {
     else {
-        [self.userAvatal sd_setImageWithURL:[NSURL URLWithString:source.avatar] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
+        [self.userAvatal sd_setImageWithURL:[NSURL URLWithString:[source.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
     }
     }
     if ([NSString isEmptyString:source.username]) {
     if ([NSString isEmptyString:source.username]) {
         self.userName.text = [NSString stringWithFormat:@"用户:%@",source.userId];
         self.userName.text = [NSString stringWithFormat:@"用户:%@",source.userId];

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupApplyMemberCell.m

@@ -32,7 +32,7 @@
         [self.userAvatal setImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
         [self.userAvatal setImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
     }
     }
     else {
     else {
-        [self.userAvatal sd_setImageWithURL:[NSURL URLWithString:source.avatar] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
+        [self.userAvatal sd_setImageWithURL:[NSURL URLWithString:[source.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
     }
     }
     if ([NSString isEmptyString:source.username]) {
     if ([NSString isEmptyString:source.username]) {
         self.userName.text = [NSString stringWithFormat:@"用户:%@",source.userId];
         self.userName.text = [NSString stringWithFormat:@"用户:%@",source.userId];

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupMemberListCell.m

@@ -39,7 +39,7 @@
         self.chatButton.userInteractionEnabled = YES;
         self.chatButton.userInteractionEnabled = YES;
         GroupMemberModel *model = source;
         GroupMemberModel *model = source;
         self.sourceModel = source;
         self.sourceModel = source;
-        [self.memberLogo sd_setImageWithURL:[NSURL URLWithString:model.avatar] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
+        [self.memberLogo sd_setImageWithURL:[NSURL URLWithString:[model.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
         if ([NSString isEmptyString:model.nickname]) {
         if ([NSString isEmptyString:model.nickname]) {
             self.memberName.text = [NSString stringWithFormat:@"用户:%@",model.userId];
             self.memberName.text = [NSString stringWithFormat:@"用户:%@",model.userId];
         }
         }

+ 2 - 2
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupSettingBodyView.m

@@ -77,7 +77,7 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     if (callback) {
     if (callback) {
         self.callback = callback;
         self.callback = callback;
     }
     }
-    [self.memberLogo sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
+    [self.memberLogo sd_setImageWithURL:[NSURL URLWithString:[url getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
     self.memberLabel.text = [NSString returnNoNullStringWithString:name];
     self.memberLabel.text = [NSString returnNoNullStringWithString:name];
     self.targetId = targetId;
     self.targetId = targetId;
 }
 }
@@ -117,7 +117,7 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
             [self.groupImage setImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
             [self.groupImage setImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
         }
         }
         else {
         else {
-            [self.groupImage sd_setImageWithURL:[NSURL URLWithString:model.img] placeholderImage:[UIImage imageNamed:GROUP_LOGO]];
+            [self.groupImage sd_setImageWithURL:[NSURL URLWithString:[model.img getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:GROUP_LOGO]];
         }
         }
         
         
         self.groupName.text = [NSString returnNoNullStringWithString:model.name];
         self.groupName.text = [NSString returnNoNullStringWithString:model.name];

+ 2 - 2
KulexiuForStudent/KulexiuForStudent/Module/Chat/Search/View/KSSearchResultViewCell.m

@@ -99,12 +99,12 @@
     } else {
     } else {
         if (model.conversationType == ConversationType_GROUP) {
         if (model.conversationType == ConversationType_GROUP) {
             [self.headerView
             [self.headerView
-                sd_setImageWithURL:[NSURL URLWithString:model.portraitUri]
+                sd_setImageWithURL:[NSURL URLWithString:[model.portraitUri getUrlEndcodeString]]
                   placeholderImage:[self imageNamed:@"default_group_portrait" ofBundle:@"RongCloud.bundle"]];
                   placeholderImage:[self imageNamed:@"default_group_portrait" ofBundle:@"RongCloud.bundle"]];
         }
         }
         else {
         else {
             [self.headerView
             [self.headerView
-                sd_setImageWithURL:[NSURL URLWithString:model.portraitUri]
+                sd_setImageWithURL:[NSURL URLWithString:[model.portraitUri getUrlEndcodeString]]
                   placeholderImage:[self imageNamed:@"default_portrait_msg" ofBundle:@"RongCloud.bundle"]];
                   placeholderImage:[self imageNamed:@"default_portrait_msg" ofBundle:@"RongCloud.bundle"]];
         }
         }
         
         

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Chat/View/GroupListViewCell.m

@@ -46,7 +46,7 @@
             [self.groupLogo setImage:[UIImage imageNamed:defaultLogo]];
             [self.groupLogo setImage:[UIImage imageNamed:defaultLogo]];
         }
         }
         else {
         else {
-            [self.groupLogo sd_setImageWithURL:[NSURL URLWithString:model.img] placeholderImage:[UIImage imageNamed:defaultLogo]];
+            [self.groupLogo sd_setImageWithURL:[NSURL URLWithString:[model.img getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:defaultLogo]];
         }
         }
     }
     }
 }
 }

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Course/AccompanyCourse/View/AccompanyCourseInfoCell.m

@@ -45,7 +45,7 @@
     self.courseTime.text = [NSString stringWithFormat:@"%@~%@",[NSString returnNoNullStringWithString:lessonBegin],[NSString returnNoNullStringWithString:lessonEnd]];
     self.courseTime.text = [NSString stringWithFormat:@"%@~%@",[NSString returnNoNullStringWithString:lessonBegin],[NSString returnNoNullStringWithString:lessonEnd]];
     
     
     self.studentName.text = [NSString returnNoNullStringWithString:teacherName];
     self.studentName.text = [NSString returnNoNullStringWithString:teacherName];
-    [self.studentAvatar sd_setImageWithURL:[NSURL URLWithString:teacherAvatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    [self.studentAvatar sd_setImageWithURL:[NSURL URLWithString:[teacherAvatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
     self.studentSubject.text = [NSString returnNoNullStringWithString:courseSubject];
     self.studentSubject.text = [NSString returnNoNullStringWithString:courseSubject];
 
 
     self.userId = teacherId;
     self.userId = teacherId;

+ 2 - 2
KulexiuForStudent/KulexiuForStudent/Module/Course/View/AccompanyCourseCell.m

@@ -46,7 +46,7 @@
         self.callback = callback;
         self.callback = callback;
     }
     }
     self.sourceModel = model;
     self.sourceModel = model;
-    [self.studentAvatar sd_setImageWithURL:[NSURL URLWithString:model.avatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    [self.studentAvatar sd_setImageWithURL:[NSURL URLWithString:[model.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
     self.studentName.text = [NSString returnNoNullStringWithString:model.userName];
     self.studentName.text = [NSString returnNoNullStringWithString:model.userName];
     self.studentSubject.text = [NSString returnNoNullStringWithString:model.subjectName];
     self.studentSubject.text = [NSString returnNoNullStringWithString:model.subjectName];
     // time
     // time
@@ -102,7 +102,7 @@
     }
     }
     self.lessonModel = model;
     self.lessonModel = model;
     
     
-    [self.studentAvatar sd_setImageWithURL:[NSURL URLWithString:model.cover] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    [self.studentAvatar sd_setImageWithURL:[NSURL URLWithString:[model.cover getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
     self.studentName.text = [NSString returnNoNullStringWithString:model.name];
     self.studentName.text = [NSString returnNoNullStringWithString:model.name];
     self.studentSubject.text = [NSString returnNoNullStringWithString:model.subjectName];
     self.studentSubject.text = [NSString returnNoNullStringWithString:model.subjectName];
     
     

+ 73 - 8
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m

@@ -7,7 +7,7 @@
 
 
 #import "HomeViewController.h"
 #import "HomeViewController.h"
 #import "KSBaseWKWebViewController.h"
 #import "KSBaseWKWebViewController.h"
-#import "NoticeMessageViewController.h"
+#import "NotiferMessageViewController.h"
 #import "SubjectChooseViewController.h"
 #import "SubjectChooseViewController.h"
 #import "HomeNavView.h"
 #import "HomeNavView.h"
 #import "HomeBannerView.h"
 #import "HomeBannerView.h"
@@ -45,6 +45,8 @@
 #import "HomeVideoGroupModel.h"
 #import "HomeVideoGroupModel.h"
 
 
 #import "WMPlayer.h"  // 播放相关
 #import "WMPlayer.h"  // 播放相关
+#import "AppDelegate.h"
+#import "KSNewsAlert.h"
 
 
 #define BUTTONWIDTH (65)
 #define BUTTONWIDTH (65)
 #define BUTTONHEIGHT (80)
 #define BUTTONHEIGHT (80)
@@ -185,8 +187,9 @@
     NSString *accompanyUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/practiceClass"];
     NSString *accompanyUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/practiceClass"];
     NSString *liveUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/liveClass"];
     NSString *liveUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/liveClass"];
     NSString *videoUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/videoClass"];
     NSString *videoUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/videoClass"];
+    NSString *musicUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-songbook"];
     NSString *teacherUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherElegant"];
     NSString *teacherUrl = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherElegant"];
-    NSArray *linkUrlArray = @[accompanyUrl,liveUrl,videoUrl,@"",teacherUrl];
+    NSArray *linkUrlArray = @[accompanyUrl,liveUrl,videoUrl,musicUrl,teacherUrl];
     for (NSInteger i = 0; i < titleArray.count; i++) {
     for (NSInteger i = 0; i < titleArray.count; i++) {
         HomeMessageModel *model = [[HomeMessageModel alloc] init];
         HomeMessageModel *model = [[HomeMessageModel alloc] init];
         model.title = titleArray[i];
         model.title = titleArray[i];
@@ -270,7 +273,7 @@
 }
 }
 
 
 - (void)requestData {
 - (void)requestData {
-    [self requestUserInfo]; // 获取老师声部
+    [self requestUserInfo]; // 获取声部
     [self requestNewsList]; //
     [self requestNewsList]; //
     [self requestCourseInfo];
     [self requestCourseInfo];
     [self requestTeacherStyle];
     [self requestTeacherStyle];
@@ -301,6 +304,13 @@
 //            self.buttonArray = [NSMutableArray arrayWithArray:buttonInfoArray];
 //            self.buttonArray = [NSMutableArray arrayWithArray:buttonInfoArray];
 //            [self showButtonMessage];
 //            [self showButtonMessage];
             
             
+            // news
+            NSArray *flashArray = [result arrayValueForKey:@"flashPage"];
+            if (flashArray.count) {
+                HomeMessageModel *newsModel = [[HomeMessageModel alloc] initWithDictionary:[flashArray firstObject]];
+                [self showNewsWithSource:newsModel];
+            }
+            
             // information
             // information
             NSArray *information = [result arrayValueForKey:@"information"];
             NSArray *information = [result arrayValueForKey:@"information"];
             NSMutableArray *informationInfoArray = [NSMutableArray array];
             NSMutableArray *informationInfoArray = [NSMutableArray array];
@@ -622,6 +632,12 @@
             webCtrl.url = model.linkUrl;
             webCtrl.url = model.linkUrl;
             [self.navigationController pushViewController:webCtrl animated:YES];
             [self.navigationController pushViewController:webCtrl animated:YES];
         }
         }
+        else {
+            // 跳转
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = [NSString stringWithFormat:@"%@%@%@",WEBHOST,@"/#/specialdetail?id=",model.internalBaseClassIdentifier];
+            [self.navigationController pushViewController:webCtrl animated:YES];
+        }
     }
     }
     else if (tableView == self.liveCourseTable) { // 直播课详情
     else if (tableView == self.liveCourseTable) { // 直播课详情
         HomeLiveGroupModel *model = self.liveCourseArray[indexPath.row];
         HomeLiveGroupModel *model = self.liveCourseArray[indexPath.row];
@@ -683,7 +699,10 @@
 
 
 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
     if (collectionView == self.albumCollectionView) { // 专辑详情
     if (collectionView == self.albumCollectionView) { // 专辑详情
-        
+        HomeAlbumModel *model = self.albumArray[indexPath.item];
+        KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+        ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/music-album-detail/",model.internalBaseClassIdentifier];
+        [self.navigationController pushViewController:ctrl animated:YES];
     }
     }
     else { // 老师风采详情
     else { // 老师风采详情
         TeacherStyleModel *model = self.teacherArray[indexPath.item];
         TeacherStyleModel *model = self.teacherArray[indexPath.item];
@@ -821,9 +840,8 @@
 }
 }
 
 
 - (void)moreAlbumDetail {
 - (void)moreAlbumDetail {
-    return;
     KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
     KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
-    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @""];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-album"];
     [self.navigationController pushViewController:ctrl animated:YES];
     [self.navigationController pushViewController:ctrl animated:YES];
 }
 }
 
 
@@ -1044,7 +1062,7 @@
 
 
 - (void)moreInformation {
 - (void)moreInformation {
     KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
     KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
-    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherList"];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/special"];
     [self.navigationController pushViewController:ctrl animated:YES];
     [self.navigationController pushViewController:ctrl animated:YES];
 }
 }
 
 
@@ -1080,7 +1098,7 @@
         [self showInstrumentView];;
         [self showInstrumentView];;
     }
     }
     else { // 消息中心
     else { // 消息中心
-        NoticeMessageViewController *ctrl = [[NoticeMessageViewController alloc] init];
+        NotiferMessageViewController *ctrl = [[NotiferMessageViewController alloc] init];
         [self.navigationController pushViewController:ctrl animated:YES];
         [self.navigationController pushViewController:ctrl animated:YES];
     }
     }
 }
 }
@@ -1152,6 +1170,53 @@
 - (void)dealloc {
 - (void)dealloc {
     [[NSNotificationCenter defaultCenter] removeObserver:self];
     [[NSNotificationCenter defaultCenter] removeObserver:self];
 }
 }
+
+
+- (void)showNewsWithSource:(HomeMessageModel *)sourceModel {
+    // 登录之后才弹窗
+    if ([self checkIsLoginToLoginView:NO]) {
+        NSString *useId = UserDefault(UIDKey);
+        NSMutableArray *newArray = UserDefault(useId);
+        if (newArray.count) {
+            if ([newArray containsObject:sourceModel.coverImage]) {
+                return;
+            }
+            else {
+                [self displayAlert:sourceModel];
+            }
+        }
+        else {
+            [self displayAlert:sourceModel];
+        }
+    }
+}
+
+- (void)displayAlert:(HomeMessageModel *)sourceModel {
+    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+    if (appDelegate.isShowMemoAlert) {
+        return;
+    }
+    NSString *useId = UserDefault(UIDKey);
+    UserDefaultRemoveObjectForKey(useId);
+    NSMutableArray *sourceArray = [NSMutableArray arrayWithArray:UserDefault(useId)];
+    [sourceArray addObject:sourceModel.coverImage];
+    UserDefaultSetObjectForKey(sourceArray, useId);
+    KSNewsAlert *newAlert = [KSNewsAlert shareInstance];
+    MJWeakSelf;
+    [newAlert evaluateWithMessage:sourceModel.coverImage linkUrl:sourceModel.linkUrl callbackAction:^(BOOL isSure, NSString * _Nonnull linkUrl) {
+        appDelegate.isShowFlashAlert = NO;
+        if (isSure) {
+            if (![NSString isEmptyString:linkUrl]) {
+                KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+                webCtrl.url = [linkUrl getUrlEndcodeString];
+                [weakSelf.navigationController pushViewController:webCtrl animated:YES];
+            }
+        }
+        [appDelegate showMemoAlert]; // 检测是否需要弹窗版本更新
+    }];
+    [newAlert showAlert];
+    appDelegate.isShowFlashAlert = YES;
+}
 /*
 /*
 #pragma mark - Navigation
 #pragma mark - Navigation
 
 

+ 0 - 31
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Controller/NoticeMessageViewController.m

@@ -1,31 +0,0 @@
-//
-//  NoticeMessageViewController.m
-//  KulexiuForStudent
-//
-//  Created by 王智 on 2022/4/22.
-//
-
-#import "NoticeMessageViewController.h"
-
-@interface NoticeMessageViewController ()
-
-@end
-
-@implementation NoticeMessageViewController
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    // Do any additional setup after loading the view.
-}
-
-/*
-#pragma mark - Navigation
-
-// In a storyboard-based application, you will often want to do a little preparation before navigation
-- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
-    // Get the new view controller using [segue destinationViewController].
-    // Pass the selected object to the new view controller.
-}
-*/
-
-@end

+ 2 - 2
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Controller/NoticeMessageViewController.h → KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Controller/NotiferMessageViewController.h

@@ -1,5 +1,5 @@
 //
 //
-//  NoticeMessageViewController.h
+//  NotiferMessageViewController.h
 //  KulexiuForStudent
 //  KulexiuForStudent
 //
 //
 //  Created by 王智 on 2022/4/22.
 //  Created by 王智 on 2022/4/22.
@@ -9,7 +9,7 @@
 
 
 NS_ASSUME_NONNULL_BEGIN
 NS_ASSUME_NONNULL_BEGIN
 
 
-@interface NoticeMessageViewController : KSBaseViewController
+@interface NotiferMessageViewController : KSBaseViewController
 
 
 @end
 @end
 
 

+ 333 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Controller/NotiferMessageViewController.m

@@ -0,0 +1,333 @@
+//
+//  NotiferMessageViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/18.
+//
+
+#import "NotiferMessageViewController.h"
+#import "NotiferMessageCell.h"
+#import "NotiferHeadView.h"
+#import "NotiferMessageModel.h"
+#import "KSBaseWKWebViewController.h"
+#import "CustomNavViewController.h"
+//#import "ReceiveEvaluateListController.h"
+#import "HomeworkDetailViewController.h"
+#import "UIButton+EnlargeEdge.h"
+
+@interface NotiferMessageViewController ()<UITableViewDelegate, UITableViewDataSource>
+
+@property (nonatomic, strong) NotiferHeadView *headView;
+
+@property (nonatomic, strong) UITableView *tableView;
+
+@property (nonatomic, strong) NSString *groupType;
+
+@end
+
+@implementation NotiferMessageViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"消息盒子"];
+    [self configRightButton];
+    [self configUI];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self queryUnReadCount];
+    [self resetSourceAndRequest];
+}
+
+- (void)configRightButton {
+    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    [rightButton setTitle:@"全部已读" forState:UIControlStateNormal];
+    [rightButton setTitleColor:HexRGB(0x999999) forState:UIControlStateNormal];
+    [rightButton setImage:[UIImage imageNamed:@"clear_notifer"] forState:UIControlStateNormal];
+    rightButton.frame =CGRectMake(0, 0, 80, 40);
+    //使图片在右边,文字在左边(正常情况下是文字在右边,图片在左边)
+    [rightButton setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft];
+    //设置图片和文字之间的间隙
+    rightButton.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
+    [rightButton.titleLabel setFont:[UIFont systemFontOfSize:11.0f]];
+    [rightButton setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10];
+    [rightButton addTarget:self action:@selector(rightBtnClick) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithCustomView:rightButton];
+    self.navigationItem.rightBarButtonItem = rightItem;
+}
+
+- (void)rightBtnClick {
+    [KSNetworkingManager batchSetReadRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            [self MBPShow:@"清除成功"];
+            [self resetSourceAndRequest];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    [self.view addSubview:self.headView];
+    [self.headView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.view);
+        make.height.mas_equalTo(100);
+    }];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.headView.mas_bottom);
+        make.bottom.mas_equalTo(self.view.mas_bottom).offset(-iPhoneXSafeBottomMargin);
+    }];
+    
+    MJWeakSelf;
+    self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+        [weakSelf resetSourceAndRequest];
+    }];
+    self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
+        if (weakSelf.isLoadMore) {
+            weakSelf.pages += 1;
+            [weakSelf requestData];
+        }
+        else {
+            [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
+        }
+    }];
+}
+
+- (void)resetSourceAndRequest {
+    [self resetParamenter];
+    [self requestData];
+}
+
+- (void)queryUnReadCount {
+    [KSNetworkingManager queryCountOfUnreadRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *countArray = [dic arrayValueForKey:@"data"];
+            NSInteger courseCount = 0;
+            NSInteger sysCount = 0;
+            NSInteger noticeCount = 0;
+            for (NSDictionary *parm in countArray) {
+                if ([[parm stringValueForKey:@"key"] isEqualToString:@"COURSE"]) {
+                    courseCount = [parm integerValueForKey:@"value"];
+                }
+                if ([[parm stringValueForKey:@"key"] isEqualToString:@"SYSTEM"]) {
+                    sysCount = [parm integerValueForKey:@"value"];
+                }
+                if ([[parm stringValueForKey:@"key"] isEqualToString:@"NOTICE"]) {
+                    noticeCount = [parm integerValueForKey:@"value"];
+                }
+            }
+            
+            [self.headView configUnreadCountCourse:0 sysMessage:0 noticeCount:0];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)resetParamenter {
+    self.pages = 1;
+    self.isLoadMore = YES;
+    self.dataArray = [NSMutableArray array];
+    [self.tableView.mj_footer resetNoMoreData];
+    [self setPromptString:@"暂无消息~" imageName:@"empty_message" inView:self.tableView];
+    [self.tableView reloadData];
+}
+
+- (void)endRefresh {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [self.tableView.mj_header endRefreshing];
+        [self.tableView.mj_footer endRefreshing];
+    });
+}
+- (void)requestData {
+    [self showhud];
+    [KSNetworkingManager sysMessageListRequest:KS_POST group:self.groupType page:self.pages rows:self.rows success:^(NSDictionary * _Nonnull dic) {
+        [self removehub];
+        [self endRefresh];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            // rows
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
+            for (NSDictionary *parm in sourceArray) {
+                NotiferMessageModel *model = [[NotiferMessageModel alloc] initWithDictionary:parm];
+                [self.dataArray addObject:model];
+            }
+            if (sourceArray.count < self.rows) {
+                self.isLoadMore = NO;
+            }
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+        [self.tableView reloadData];
+        [self changePromptLabelState];
+
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+        [self endRefresh];
+        if (self.networkAvaiable == NO) {
+            [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
+        }
+        [self.dataArray removeAllObjects];
+        [self.tableView reloadData];
+        [self changePromptLabelState];
+    }];
+}
+
+#pragma mark ----- table data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArray.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    NotiferMessageModel *model = self.dataArray[indexPath.row];
+    NotiferMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NotiferMessageCell"];
+    [cell configCellWithSource:model];
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    // 选择跳转
+    NotiferMessageModel *model = self.dataArray[indexPath.row];
+    if (model.readStatus == 0) {
+        NotiferMessageCell *cell = [tableView cellForRowAtIndexPath:indexPath];
+        [self readMessage:model baseCell:cell];
+    }
+    else {
+        // 跳转页面
+        [self toDetailViewWithTypeString:model.memo];
+    }
+}
+
+- (void)readMessage:(NotiferMessageModel *)model baseCell:(NotiferMessageCell *)cell {
+    [KSNetworkingManager setReadMessage:KS_POST messageId:model.internalBaseClassIdentifier success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            model.readStatus = 1;
+            cell.isRead = YES;
+            // 跳转页面
+            [self toDetailViewWithTypeString:model.memo];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)toDetailViewWithTypeString:(NSString *)memo {
+    if (![NSString isEmptyString:memo]) {
+        NSString *headStr = [[memo componentsSeparatedByString:@"?"] firstObject];
+        if ([headStr isEqualToString:@"buyPractice"] || [headStr isEqualToString:@"courseRemind"]) { // 课表
+            [self toCourseTable];
+        }
+        else if ([headStr isEqualToString:@"evaluate"]) { // 评价页面
+//            ReceiveEvaluateListController *ctrl = [[ReceiveEvaluateListController alloc] init];
+//            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+        else if ([headStr isEqualToString:@"H5"]) { // web
+            NSString *valueStr = [[memo componentsSeparatedByString:@"?"] lastObject];
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = valueStr;
+            CustomNavViewController *navCtrl = self.tabBarController.selectedViewController;
+            [navCtrl pushViewController:webCtrl animated:YES];
+        }
+        else if ([headStr isEqualToString:@"homework"]) { // 作业详情
+            NSString *valueStr = [[memo componentsSeparatedByString:@"?"] lastObject];
+            NSArray *parmArray = [valueStr componentsSeparatedByString:@"&"];
+            NSString *courseId = nil;
+            for (NSString *subStr in parmArray) {
+                if ([subStr containsString:@"courseId"]) {
+                    courseId = [[subStr componentsSeparatedByString:@"="] lastObject];
+                }
+            }
+            HomeworkDetailViewController *detailVC = [[HomeworkDetailViewController alloc] init];
+            detailVC.courseId = courseId;
+            [self.navigationController pushViewController:detailVC animated:YES];
+        }
+    }
+}
+
+- (void)toCourseTable {
+    [self selectBarHomeWithIndex:1];
+    [self.navigationController popToRootViewControllerAnimated:YES];
+}
+
+#pragma mark ---- lazying
+- (NotiferHeadView *)headView {
+    if (!_headView) {
+        _headView = [NotiferHeadView shareIntance];
+        MJWeakSelf;
+        [_headView chooseTypeCallback:^(NOTIFER_TYPE type) {
+            [weakSelf chooseTypeSort:type];
+        }];
+    }
+    return _headView;
+}
+
+- (void)chooseTypeSort:(NOTIFER_TYPE)type {
+    switch (type) {
+        case NOTIFER_TYPE_ALL:
+        {
+            self.groupType = nil;
+        }
+            break;
+        case NOTIFER_TYPE_COURSE:
+        {
+            self.groupType = @"COURSE";
+        }
+            break;
+        case NOTIFER_TYPE_SYSMSG:
+        {
+            self.groupType = @"SYSTEM";
+        }
+            break;
+        case NOTIFER_TYPE_NOTICE:
+        {
+            self.groupType = @"NOTICE";
+        }
+            break;
+        default:
+            break;
+    }
+    [self resetSourceAndRequest];
+}
+
+- (UITableView *)tableView {
+    if (!_tableView) {
+        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+        _tableView.backgroundColor = [UIColor clearColor];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        [_tableView registerNib:[UINib nibWithNibName:@"NotiferMessageCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"NotiferMessageCell"];
+        _tableView.estimatedRowHeight = 125.0f;
+        _tableView.rowHeight = UITableViewAutomaticDimension;
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 15)];
+        bottomView.backgroundColor = HexRGB(0xf6f8f9);
+        _tableView.tableFooterView = bottomView;
+    }
+    return _tableView;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 34 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Model/NotiferMessageModel.h

@@ -0,0 +1,34 @@
+//
+//  NotiferMessageModel.h
+//
+//  Created by Steven  on 2022/5/7
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface NotiferMessageModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *modifyOn;
+@property (nonatomic, strong) NSString *clientId;
+@property (nonatomic, strong) NSString *sendTime;
+@property (nonatomic, strong) NSString *receiver;
+@property (nonatomic, strong) NSString *errorMsg;
+@property (nonatomic, strong) NSString *createOn;
+@property (nonatomic, strong) NSString *memo;
+@property (nonatomic, strong) NSString *content;
+@property (nonatomic, strong) NSString *type;
+@property (nonatomic, strong) NSString *title;
+@property (nonatomic, strong) NSString *userId;
+@property (nonatomic, strong) NSString *group;
+@property (nonatomic, assign) double readStatus;
+@property (nonatomic, strong) NSString *status;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 197 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/Model/NotiferMessageModel.m

@@ -0,0 +1,197 @@
+//
+//  NotiferMessageModel.m
+//
+//  Created by Steven  on 2022/5/7
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "NotiferMessageModel.h"
+
+
+NSString *const kNotiferMessageModelId = @"id";
+NSString *const kNotiferMessageModelModifyOn = @"modifyOn";
+NSString *const kNotiferMessageModelClientId = @"clientId";
+NSString *const kNotiferMessageModelSendTime = @"sendTime";
+NSString *const kNotiferMessageModelReceiver = @"receiver";
+NSString *const kNotiferMessageModelErrorMsg = @"errorMsg";
+NSString *const kNotiferMessageModelCreateOn = @"createOn";
+NSString *const kNotiferMessageModelMemo = @"memo";
+NSString *const kNotiferMessageModelContent = @"content";
+NSString *const kNotiferMessageModelType = @"type";
+NSString *const kNotiferMessageModelTitle = @"title";
+NSString *const kNotiferMessageModelUserId = @"userId";
+NSString *const kNotiferMessageModelGroup = @"group";
+NSString *const kNotiferMessageModelReadStatus = @"readStatus";
+NSString *const kNotiferMessageModelStatus = @"status";
+
+
+@interface NotiferMessageModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation NotiferMessageModel
+
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize modifyOn = _modifyOn;
+@synthesize clientId = _clientId;
+@synthesize sendTime = _sendTime;
+@synthesize receiver = _receiver;
+@synthesize errorMsg = _errorMsg;
+@synthesize createOn = _createOn;
+@synthesize memo = _memo;
+@synthesize content = _content;
+@synthesize type = _type;
+@synthesize title = _title;
+@synthesize userId = _userId;
+@synthesize group = _group;
+@synthesize readStatus = _readStatus;
+@synthesize status = _status;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.internalBaseClassIdentifier = [self objectOrNilForKey:kNotiferMessageModelId fromDictionary:dict];
+            self.modifyOn = [self objectOrNilForKey:kNotiferMessageModelModifyOn fromDictionary:dict];
+            self.clientId = [self objectOrNilForKey:kNotiferMessageModelClientId fromDictionary:dict];
+            self.sendTime = [self objectOrNilForKey:kNotiferMessageModelSendTime fromDictionary:dict];
+            self.receiver = [self objectOrNilForKey:kNotiferMessageModelReceiver fromDictionary:dict];
+            self.errorMsg = [self objectOrNilForKey:kNotiferMessageModelErrorMsg fromDictionary:dict];
+            self.createOn = [self objectOrNilForKey:kNotiferMessageModelCreateOn fromDictionary:dict];
+            self.memo = [self objectOrNilForKey:kNotiferMessageModelMemo fromDictionary:dict];
+            self.content = [self objectOrNilForKey:kNotiferMessageModelContent fromDictionary:dict];
+            self.type = [self objectOrNilForKey:kNotiferMessageModelType fromDictionary:dict];
+            self.title = [self objectOrNilForKey:kNotiferMessageModelTitle fromDictionary:dict];
+            self.userId = [self objectOrNilForKey:kNotiferMessageModelUserId fromDictionary:dict];
+            self.group = [self objectOrNilForKey:kNotiferMessageModelGroup fromDictionary:dict];
+            self.readStatus = [[self objectOrNilForKey:kNotiferMessageModelReadStatus fromDictionary:dict] doubleValue];
+            self.status = [self objectOrNilForKey:kNotiferMessageModelStatus fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.internalBaseClassIdentifier forKey:kNotiferMessageModelId];
+    [mutableDict setValue:self.modifyOn forKey:kNotiferMessageModelModifyOn];
+    [mutableDict setValue:self.clientId forKey:kNotiferMessageModelClientId];
+    [mutableDict setValue:self.sendTime forKey:kNotiferMessageModelSendTime];
+    [mutableDict setValue:self.receiver forKey:kNotiferMessageModelReceiver];
+    [mutableDict setValue:self.errorMsg forKey:kNotiferMessageModelErrorMsg];
+    [mutableDict setValue:self.createOn forKey:kNotiferMessageModelCreateOn];
+    [mutableDict setValue:self.memo forKey:kNotiferMessageModelMemo];
+    [mutableDict setValue:self.content forKey:kNotiferMessageModelContent];
+    [mutableDict setValue:self.type forKey:kNotiferMessageModelType];
+    [mutableDict setValue:self.title forKey:kNotiferMessageModelTitle];
+    [mutableDict setValue:self.userId forKey:kNotiferMessageModelUserId];
+    [mutableDict setValue:self.group forKey:kNotiferMessageModelGroup];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.readStatus] forKey:kNotiferMessageModelReadStatus];
+    [mutableDict setValue:self.status forKey:kNotiferMessageModelStatus];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.internalBaseClassIdentifier = [aDecoder decodeObjectForKey:kNotiferMessageModelId];
+    self.modifyOn = [aDecoder decodeObjectForKey:kNotiferMessageModelModifyOn];
+    self.clientId = [aDecoder decodeObjectForKey:kNotiferMessageModelClientId];
+    self.sendTime = [aDecoder decodeObjectForKey:kNotiferMessageModelSendTime];
+    self.receiver = [aDecoder decodeObjectForKey:kNotiferMessageModelReceiver];
+    self.errorMsg = [aDecoder decodeObjectForKey:kNotiferMessageModelErrorMsg];
+    self.createOn = [aDecoder decodeObjectForKey:kNotiferMessageModelCreateOn];
+    self.memo = [aDecoder decodeObjectForKey:kNotiferMessageModelMemo];
+    self.content = [aDecoder decodeObjectForKey:kNotiferMessageModelContent];
+    self.type = [aDecoder decodeObjectForKey:kNotiferMessageModelType];
+    self.title = [aDecoder decodeObjectForKey:kNotiferMessageModelTitle];
+    self.userId = [aDecoder decodeObjectForKey:kNotiferMessageModelUserId];
+    self.group = [aDecoder decodeObjectForKey:kNotiferMessageModelGroup];
+    self.readStatus = [aDecoder decodeDoubleForKey:kNotiferMessageModelReadStatus];
+    self.status = [aDecoder decodeObjectForKey:kNotiferMessageModelStatus];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_internalBaseClassIdentifier forKey:kNotiferMessageModelId];
+    [aCoder encodeObject:_modifyOn forKey:kNotiferMessageModelModifyOn];
+    [aCoder encodeObject:_clientId forKey:kNotiferMessageModelClientId];
+    [aCoder encodeObject:_sendTime forKey:kNotiferMessageModelSendTime];
+    [aCoder encodeObject:_receiver forKey:kNotiferMessageModelReceiver];
+    [aCoder encodeObject:_errorMsg forKey:kNotiferMessageModelErrorMsg];
+    [aCoder encodeObject:_createOn forKey:kNotiferMessageModelCreateOn];
+    [aCoder encodeObject:_memo forKey:kNotiferMessageModelMemo];
+    [aCoder encodeObject:_content forKey:kNotiferMessageModelContent];
+    [aCoder encodeObject:_type forKey:kNotiferMessageModelType];
+    [aCoder encodeObject:_title forKey:kNotiferMessageModelTitle];
+    [aCoder encodeObject:_userId forKey:kNotiferMessageModelUserId];
+    [aCoder encodeObject:_group forKey:kNotiferMessageModelGroup];
+    [aCoder encodeDouble:_readStatus forKey:kNotiferMessageModelReadStatus];
+    [aCoder encodeObject:_status forKey:kNotiferMessageModelStatus];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    NotiferMessageModel *copy = [[NotiferMessageModel alloc] init];
+    
+    if (copy) {
+
+        copy.internalBaseClassIdentifier = [self.internalBaseClassIdentifier copyWithZone:zone];
+        copy.modifyOn = [self.modifyOn copyWithZone:zone];
+        copy.clientId = [self.clientId copyWithZone:zone];
+        copy.sendTime = [self.sendTime copyWithZone:zone];
+        copy.receiver = [self.receiver copyWithZone:zone];
+        copy.errorMsg = [self.errorMsg copyWithZone:zone];
+        copy.createOn = [self.createOn copyWithZone:zone];
+        copy.memo = [self.memo copyWithZone:zone];
+        copy.content = [self.content copyWithZone:zone];
+        copy.type = [self.type copyWithZone:zone];
+        copy.title = [self.title copyWithZone:zone];
+        copy.userId = [self.userId copyWithZone:zone];
+        copy.group = [self.group copyWithZone:zone];
+        copy.readStatus = self.readStatus;
+        copy.status = [self.status copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 32 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferHeadView.h

@@ -0,0 +1,32 @@
+//
+//  NotiferHeadView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/6.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, NOTIFER_TYPE) {
+    NOTIFER_TYPE_ALL,
+    NOTIFER_TYPE_COURSE,
+    NOTIFER_TYPE_SYSMSG,
+    NOTIFER_TYPE_NOTICE,
+};
+
+typedef void(^NotiferChooseAction)(NOTIFER_TYPE type);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NotiferHeadView : UIView
+
+
++ (instancetype)shareIntance;
+
+- (void)configUnreadCountCourse:(NSInteger)courseCount sysMessage:(NSInteger)sysMessageCount noticeCount:(NSInteger)noticeCount;
+
+- (void)chooseTypeCallback:(NotiferChooseAction)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 204 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferHeadView.m

@@ -0,0 +1,204 @@
+//
+//  NotiferHeadView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/6.
+//
+
+#import "NotiferHeadView.h"
+
+@interface NotiferHeadView ()
+
+@property (weak, nonatomic) IBOutlet UIView *allView;
+
+@property (weak, nonatomic) IBOutlet UILabel *allLabel;
+
+@property (weak, nonatomic) IBOutlet UIView *courseView;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseLabel;
+
+@property (weak, nonatomic) IBOutlet UIView *systemView;
+
+@property (weak, nonatomic) IBOutlet UILabel *systemLabel;
+
+@property (weak, nonatomic) IBOutlet UIView *noticeView;
+
+@property (weak, nonatomic) IBOutlet UILabel *noticeLabel;
+
+@property (nonatomic, assign) NOTIFER_TYPE type;
+
+@property (nonatomic, copy) NotiferChooseAction callback;
+
+@property (weak, nonatomic) IBOutlet UILabel *allCountLabel;
+@property (weak, nonatomic) IBOutlet UILabel *courseCountLabel;
+@property (weak, nonatomic) IBOutlet UILabel *systemCountLabel;
+@property (weak, nonatomic) IBOutlet UILabel *noticeCountLabel;
+
+@end
+
+@implementation NotiferHeadView
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    [self configDefault];
+}
+
+- (void)configDefault {
+    self.type = NOTIFER_TYPE_ALL;
+    [self configUnreadCountCourse:0 sysMessage:0 noticeCount:0];
+}
+
++ (instancetype)shareIntance {
+    NotiferHeadView *view = [[[NSBundle mainBundle] loadNibNamed:@"NotiferHeadView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)chooseTypeCallback:(NotiferChooseAction)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)configUnreadCountCourse:(NSInteger)courseCount sysMessage:(NSInteger)sysMessageCount noticeCount:(NSInteger)noticeCount {
+    NSInteger allCount = courseCount + sysMessageCount + noticeCount;
+    // 全部
+    if (allCount <= 0) {
+        self.allView.hidden = YES;
+    }
+    else {
+        self.allView.hidden = NO;
+        NSString *countString = @"";
+        if (allCount > 99) {
+            countString = @"99+";
+        }
+        else {
+            countString = [NSString stringWithFormat:@"%zd",allCount];
+        }
+        self.allCountLabel.text = countString;
+    }
+    // 课程
+    if (courseCount == 0) {
+        self.courseView.hidden = YES;
+    }
+    else {
+        self.courseView.hidden = NO;
+        NSString *countString = @"";
+        if (courseCount > 99) {
+            countString = @"99+";
+        }
+        else {
+            countString = [NSString stringWithFormat:@"%zd",courseCount];
+        }
+        self.courseCountLabel.text = countString;
+    }
+    
+    // 系统
+    if (sysMessageCount == 0) {
+        self.systemView.hidden = YES;
+    }
+    else {
+        self.systemView.hidden = NO;
+        NSString *countString = @"";
+        if (sysMessageCount > 99) {
+            countString = @"99+";
+        }
+        else {
+            countString = [NSString stringWithFormat:@"%zd",sysMessageCount];
+        }
+        self.noticeCountLabel.text = countString;
+    }
+    
+    // 公共
+    if (noticeCount == 0) {
+        self.noticeView.hidden = YES;
+    }
+    else {
+        self.noticeView.hidden = NO;
+        NSString *countString = @"";
+        if (noticeCount > 99) {
+            countString = @"99+";
+        }
+        else {
+            countString = [NSString stringWithFormat:@"%zd",noticeCount];
+        }
+        self.systemCountLabel.text = countString;
+    }
+}
+
+
+- (IBAction)chooseAll:(id)sender {
+    self.type = NOTIFER_TYPE_ALL;
+    if (self.callback) {
+        self.callback(self.type);
+    }
+}
+
+- (IBAction)chooseCourse:(id)sender {
+    self.type = NOTIFER_TYPE_COURSE;
+    if (self.callback) {
+        self.callback(self.type);
+    }
+}
+
+- (IBAction)chooseSystem:(id)sender {
+    self.type = NOTIFER_TYPE_SYSMSG;
+    if (self.callback) {
+        self.callback(self.type);
+    }
+}
+
+- (IBAction)chooseNotice:(id)sender {
+    self.type = NOTIFER_TYPE_NOTICE;
+    if (self.callback) {
+        self.callback(self.type);
+    }
+}
+
+- (void)setType:(NOTIFER_TYPE)type {
+    _type = type;
+    switch (type) {
+        case NOTIFER_TYPE_ALL:
+        {
+            self.allLabel.textColor = HexRGB(0x3333333);
+            self.courseLabel.textColor = HexRGB(0x999999);
+            self.systemLabel.textColor = HexRGB(0x999999);
+            self.noticeLabel.textColor = HexRGB(0x999999);
+        }
+            break;
+        case NOTIFER_TYPE_COURSE:
+        {
+            self.allLabel.textColor = HexRGB(0x999999);
+            self.courseLabel.textColor = HexRGB(0x3333333);
+            self.systemLabel.textColor = HexRGB(0x999999);
+            self.noticeLabel.textColor = HexRGB(0x999999);
+        }
+            break;
+        case NOTIFER_TYPE_SYSMSG:
+        {
+            self.allLabel.textColor = HexRGB(0x999999);
+            self.courseLabel.textColor = HexRGB(0x999999);
+            self.systemLabel.textColor = HexRGB(0x3333333);
+            self.noticeLabel.textColor = HexRGB(0x999999);
+        }
+            break;
+        case NOTIFER_TYPE_NOTICE:
+        {
+            self.allLabel.textColor = HexRGB(0x999999);
+            self.courseLabel.textColor = HexRGB(0x999999);
+            self.systemLabel.textColor = HexRGB(0x999999);
+            self.noticeLabel.textColor = HexRGB(0x3333333);
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 346 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferHeadView.xib

@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <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="NotiferHeadView">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="100"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3Jh-gC-egy">
+                    <rect key="frame" x="0.0" y="0.0" width="375" height="100"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Pkz-EP-p4Q">
+                            <rect key="frame" x="27" y="0.0" width="80.5" height="100"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="message_all" translatesAutoresizingMaskIntoConstraints="NO" id="N8l-kR-aoj">
+                                    <rect key="frame" x="12" y="22" width="56" height="56"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="56" id="3Wd-gG-xg9"/>
+                                        <constraint firstAttribute="width" constant="56" id="E7d-pn-3mD"/>
+                                    </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="Aal-ZD-MlT">
+                                    <rect key="frame" x="27.5" y="79" width="25" height="14.5"/>
+                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
+                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TI9-h7-JQo">
+                                    <rect key="frame" x="47" y="54" width="21" height="14"/>
+                                    <subviews>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="19" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e5M-E8-SSs">
+                                            <rect key="frame" x="4" y="0.0" width="13" height="14"/>
+                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
+                                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                    </subviews>
+                                    <color key="backgroundColor" red="1" green="0.074509803921568626" blue="0.074509803921568626" alpha="1" colorSpace="calibratedRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="trailing" secondItem="e5M-E8-SSs" secondAttribute="trailing" constant="4" id="EdX-nD-NcK"/>
+                                        <constraint firstAttribute="bottom" secondItem="e5M-E8-SSs" secondAttribute="bottom" id="OFc-sp-NzZ"/>
+                                        <constraint firstItem="e5M-E8-SSs" firstAttribute="leading" secondItem="TI9-h7-JQo" secondAttribute="leading" constant="4" id="Smh-zq-Y7a"/>
+                                        <constraint firstItem="e5M-E8-SSs" firstAttribute="top" secondItem="TI9-h7-JQo" secondAttribute="top" id="Tf2-Fu-sS9"/>
+                                        <constraint firstAttribute="height" constant="14" id="chU-X5-U69"/>
+                                    </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="7"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                            <real key="value" value="1"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Hxb-AV-79g">
+                                    <rect key="frame" x="12" y="22" width="56" height="71.5"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="chooseAll:" destination="iN0-l3-epB" eventType="touchUpInside" id="gxr-MQ-ykS"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="N8l-kR-aoj" firstAttribute="centerX" secondItem="Pkz-EP-p4Q" secondAttribute="centerX" id="5XZ-17-Vec"/>
+                                <constraint firstItem="N8l-kR-aoj" firstAttribute="centerY" secondItem="Pkz-EP-p4Q" secondAttribute="centerY" id="9yG-IL-ewx"/>
+                                <constraint firstItem="Hxb-AV-79g" firstAttribute="top" secondItem="N8l-kR-aoj" secondAttribute="top" id="FRE-eD-FoY"/>
+                                <constraint firstItem="Hxb-AV-79g" firstAttribute="trailing" secondItem="N8l-kR-aoj" secondAttribute="trailing" id="IGS-pH-2yp"/>
+                                <constraint firstItem="Aal-ZD-MlT" firstAttribute="centerX" secondItem="N8l-kR-aoj" secondAttribute="centerX" id="dix-GQ-gSF"/>
+                                <constraint firstItem="Aal-ZD-MlT" firstAttribute="top" secondItem="N8l-kR-aoj" secondAttribute="bottom" constant="1" id="i1g-8e-IRF"/>
+                                <constraint firstItem="Hxb-AV-79g" firstAttribute="leading" secondItem="N8l-kR-aoj" secondAttribute="leading" id="iBg-4z-Iji"/>
+                                <constraint firstItem="TI9-h7-JQo" firstAttribute="trailing" secondItem="N8l-kR-aoj" secondAttribute="trailing" id="l5R-U5-zLe"/>
+                                <constraint firstItem="TI9-h7-JQo" firstAttribute="bottom" secondItem="N8l-kR-aoj" secondAttribute="bottom" constant="-10" id="u2O-gZ-dcJ"/>
+                                <constraint firstItem="Aal-ZD-MlT" firstAttribute="bottom" secondItem="Hxb-AV-79g" secondAttribute="bottom" id="vrV-Ml-Wzc"/>
+                            </constraints>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kR0-tA-2uF">
+                            <rect key="frame" x="107.5" y="0.0" width="80" height="100"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="message_course" translatesAutoresizingMaskIntoConstraints="NO" id="8Z5-lf-RVU">
+                                    <rect key="frame" x="12" y="22" width="56" height="56"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="56" id="bfW-hq-s3W"/>
+                                        <constraint firstAttribute="height" constant="56" id="yLb-Jd-Kfp"/>
+                                    </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="8Ql-22-T6t">
+                                    <rect key="frame" x="15" y="79" width="49.5" height="14.5"/>
+                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oMw-71-EQZ">
+                                    <rect key="frame" x="47" y="54" width="21" height="14"/>
+                                    <subviews>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="19" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Ev-de-Era">
+                                            <rect key="frame" x="4" y="0.0" width="13" height="14"/>
+                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
+                                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                    </subviews>
+                                    <color key="backgroundColor" red="1" green="0.074509803920000006" blue="0.074509803920000006" alpha="1" colorSpace="calibratedRGB"/>
+                                    <constraints>
+                                        <constraint firstItem="0Ev-de-Era" firstAttribute="leading" secondItem="oMw-71-EQZ" secondAttribute="leading" constant="4" id="Gr7-FD-bFG"/>
+                                        <constraint firstAttribute="trailing" secondItem="0Ev-de-Era" secondAttribute="trailing" constant="4" id="KMC-tF-L2A"/>
+                                        <constraint firstItem="0Ev-de-Era" firstAttribute="top" secondItem="oMw-71-EQZ" secondAttribute="top" id="bSk-S2-fGH"/>
+                                        <constraint firstAttribute="bottom" secondItem="0Ev-de-Era" secondAttribute="bottom" id="qc5-26-N56"/>
+                                        <constraint firstAttribute="height" constant="14" id="szo-02-4bz"/>
+                                    </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="7"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                            <real key="value" value="1"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XuM-Lg-sm7">
+                                    <rect key="frame" x="12" y="22" width="56" height="71.5"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="chooseCourse:" destination="iN0-l3-epB" eventType="touchUpInside" id="bWc-aR-VJd"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="oMw-71-EQZ" firstAttribute="trailing" secondItem="8Z5-lf-RVU" secondAttribute="trailing" id="30r-Hx-POG"/>
+                                <constraint firstItem="oMw-71-EQZ" firstAttribute="bottom" secondItem="8Z5-lf-RVU" secondAttribute="bottom" constant="-10" id="C8d-5e-iUn"/>
+                                <constraint firstItem="8Ql-22-T6t" firstAttribute="top" secondItem="8Z5-lf-RVU" secondAttribute="bottom" constant="1" id="EWQ-Yi-Zo0"/>
+                                <constraint firstItem="8Z5-lf-RVU" firstAttribute="top" secondItem="XuM-Lg-sm7" secondAttribute="top" id="Lel-B2-nF4"/>
+                                <constraint firstItem="8Ql-22-T6t" firstAttribute="centerX" secondItem="8Z5-lf-RVU" secondAttribute="centerX" id="Quv-Ys-Rou"/>
+                                <constraint firstItem="8Z5-lf-RVU" firstAttribute="centerY" secondItem="kR0-tA-2uF" secondAttribute="centerY" id="VZU-Ga-Wym"/>
+                                <constraint firstItem="8Z5-lf-RVU" firstAttribute="leading" secondItem="XuM-Lg-sm7" secondAttribute="leading" id="dJw-ip-hsE"/>
+                                <constraint firstItem="8Z5-lf-RVU" firstAttribute="centerX" secondItem="kR0-tA-2uF" secondAttribute="centerX" id="knO-Ib-wqa"/>
+                                <constraint firstItem="8Ql-22-T6t" firstAttribute="bottom" secondItem="XuM-Lg-sm7" secondAttribute="bottom" id="qcI-Mh-jaD"/>
+                                <constraint firstItem="8Z5-lf-RVU" firstAttribute="trailing" secondItem="XuM-Lg-sm7" secondAttribute="trailing" id="seO-ea-nqI"/>
+                            </constraints>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QCV-gH-UT2">
+                            <rect key="frame" x="187.5" y="0.0" width="80.5" height="100"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="message_system" translatesAutoresizingMaskIntoConstraints="NO" id="ALm-DM-xIP">
+                                    <rect key="frame" x="12" y="22" width="56" height="56"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="56" id="Av4-mU-hXq"/>
+                                        <constraint firstAttribute="height" constant="56" id="gta-F5-xNK"/>
+                                    </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="ZT2-JL-dMl">
+                                    <rect key="frame" x="15.5" y="79" width="49.5" height="14.5"/>
+                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PnS-8p-3Z9">
+                                    <rect key="frame" x="47" y="54" width="21" height="14"/>
+                                    <subviews>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="19" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="43u-at-Vor">
+                                            <rect key="frame" x="4" y="0.0" width="13" height="14"/>
+                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
+                                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                    </subviews>
+                                    <color key="backgroundColor" red="1" green="0.074509803920000006" blue="0.074509803920000006" alpha="1" colorSpace="calibratedRGB"/>
+                                    <constraints>
+                                        <constraint firstItem="43u-at-Vor" firstAttribute="leading" secondItem="PnS-8p-3Z9" secondAttribute="leading" constant="4" id="9XC-dG-siH"/>
+                                        <constraint firstAttribute="trailing" secondItem="43u-at-Vor" secondAttribute="trailing" constant="4" id="Kqx-aN-PC2"/>
+                                        <constraint firstAttribute="height" constant="14" id="bNV-H0-xoS"/>
+                                        <constraint firstItem="43u-at-Vor" firstAttribute="top" secondItem="PnS-8p-3Z9" secondAttribute="top" id="vAd-Z8-UfQ"/>
+                                        <constraint firstAttribute="bottom" secondItem="43u-at-Vor" secondAttribute="bottom" id="ya9-SB-vcT"/>
+                                    </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="7"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                            <real key="value" value="1"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="03g-eS-bHv">
+                                    <rect key="frame" x="12" y="22" width="56" height="71.5"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="chooseSystem:" destination="iN0-l3-epB" eventType="touchUpInside" id="baU-me-4pJ"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="PnS-8p-3Z9" firstAttribute="bottom" secondItem="ALm-DM-xIP" secondAttribute="bottom" constant="-10" id="FMk-Tg-HiP"/>
+                                <constraint firstItem="PnS-8p-3Z9" firstAttribute="trailing" secondItem="ALm-DM-xIP" secondAttribute="trailing" id="Iym-n2-dE5"/>
+                                <constraint firstItem="ALm-DM-xIP" firstAttribute="centerY" secondItem="QCV-gH-UT2" secondAttribute="centerY" id="Kzx-C9-hMH"/>
+                                <constraint firstItem="ZT2-JL-dMl" firstAttribute="centerX" secondItem="ALm-DM-xIP" secondAttribute="centerX" id="LK1-Hs-L8w"/>
+                                <constraint firstItem="ALm-DM-xIP" firstAttribute="top" secondItem="03g-eS-bHv" secondAttribute="top" id="Ytj-Ci-mFT"/>
+                                <constraint firstItem="ALm-DM-xIP" firstAttribute="leading" secondItem="03g-eS-bHv" secondAttribute="leading" id="bX9-bz-a35"/>
+                                <constraint firstItem="ALm-DM-xIP" firstAttribute="centerX" secondItem="QCV-gH-UT2" secondAttribute="centerX" id="imn-KT-bbt"/>
+                                <constraint firstItem="ZT2-JL-dMl" firstAttribute="top" secondItem="ALm-DM-xIP" secondAttribute="bottom" constant="1" id="mwG-b9-az2"/>
+                                <constraint firstItem="ALm-DM-xIP" firstAttribute="trailing" secondItem="03g-eS-bHv" secondAttribute="trailing" id="r6X-Rs-3YH"/>
+                                <constraint firstItem="ZT2-JL-dMl" firstAttribute="bottom" secondItem="03g-eS-bHv" secondAttribute="bottom" id="voU-Gi-fym"/>
+                            </constraints>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fQd-6C-OHk">
+                            <rect key="frame" x="268" y="0.0" width="80" height="100"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="message_notice" translatesAutoresizingMaskIntoConstraints="NO" id="pZt-Oo-gp5">
+                                    <rect key="frame" x="12" y="22" width="56" height="56"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="56" id="Kv2-rZ-mvB"/>
+                                        <constraint firstAttribute="width" constant="56" id="PgP-KG-Z5c"/>
+                                    </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="HPj-WQ-UEe">
+                                    <rect key="frame" x="27.5" y="79" width="25" height="14.5"/>
+                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HFT-lc-XxE">
+                                    <rect key="frame" x="47" y="54" width="21" height="14"/>
+                                    <subviews>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="19" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eSf-NN-z0H">
+                                            <rect key="frame" x="4" y="0.0" width="13" height="14"/>
+                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
+                                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                    </subviews>
+                                    <color key="backgroundColor" red="1" green="0.074509803920000006" blue="0.074509803920000006" alpha="1" colorSpace="calibratedRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="bottom" secondItem="eSf-NN-z0H" secondAttribute="bottom" id="Ao6-V2-K7x"/>
+                                        <constraint firstAttribute="trailing" secondItem="eSf-NN-z0H" secondAttribute="trailing" constant="4" id="P8c-bz-7La"/>
+                                        <constraint firstItem="eSf-NN-z0H" firstAttribute="top" secondItem="HFT-lc-XxE" secondAttribute="top" id="g29-vT-Syl"/>
+                                        <constraint firstItem="eSf-NN-z0H" firstAttribute="leading" secondItem="HFT-lc-XxE" secondAttribute="leading" constant="4" id="lcq-U7-od2"/>
+                                        <constraint firstAttribute="height" constant="14" id="nVm-N4-ebc"/>
+                                    </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="7"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                            <real key="value" value="1"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gMB-qb-caO">
+                                    <rect key="frame" x="12" y="22" width="56" height="71.5"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="chooseNotice:" destination="iN0-l3-epB" eventType="touchUpInside" id="NbI-SQ-tv4"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="pZt-Oo-gp5" firstAttribute="trailing" secondItem="gMB-qb-caO" secondAttribute="trailing" id="04x-KE-Efe"/>
+                                <constraint firstItem="HFT-lc-XxE" firstAttribute="trailing" secondItem="pZt-Oo-gp5" secondAttribute="trailing" id="1Ki-Zu-wQ9"/>
+                                <constraint firstItem="pZt-Oo-gp5" firstAttribute="centerY" secondItem="fQd-6C-OHk" secondAttribute="centerY" id="6Uc-tu-c8E"/>
+                                <constraint firstItem="pZt-Oo-gp5" firstAttribute="centerX" secondItem="fQd-6C-OHk" secondAttribute="centerX" id="DGp-cN-87P"/>
+                                <constraint firstItem="HFT-lc-XxE" firstAttribute="bottom" secondItem="pZt-Oo-gp5" secondAttribute="bottom" constant="-10" id="DId-eC-xtY"/>
+                                <constraint firstItem="pZt-Oo-gp5" firstAttribute="top" secondItem="gMB-qb-caO" secondAttribute="top" id="I11-F0-hN5"/>
+                                <constraint firstItem="HPj-WQ-UEe" firstAttribute="centerX" secondItem="pZt-Oo-gp5" secondAttribute="centerX" id="QTq-0M-Qj2"/>
+                                <constraint firstItem="pZt-Oo-gp5" firstAttribute="leading" secondItem="gMB-qb-caO" secondAttribute="leading" id="TY7-WD-hzE"/>
+                                <constraint firstItem="HPj-WQ-UEe" firstAttribute="bottom" secondItem="gMB-qb-caO" secondAttribute="bottom" id="dYO-dM-HQn"/>
+                                <constraint firstItem="HPj-WQ-UEe" firstAttribute="top" secondItem="pZt-Oo-gp5" secondAttribute="bottom" constant="1" id="yJD-DK-Eqd"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="kR0-tA-2uF" firstAttribute="leading" secondItem="Pkz-EP-p4Q" secondAttribute="trailing" id="1Ip-8J-r0Y"/>
+                        <constraint firstItem="QCV-gH-UT2" firstAttribute="leading" secondItem="kR0-tA-2uF" secondAttribute="trailing" id="5XL-gG-2d1"/>
+                        <constraint firstItem="QCV-gH-UT2" firstAttribute="top" secondItem="3Jh-gC-egy" secondAttribute="top" id="83M-kH-ZX2"/>
+                        <constraint firstAttribute="bottom" secondItem="QCV-gH-UT2" secondAttribute="bottom" id="9n2-1w-ajk"/>
+                        <constraint firstAttribute="bottom" secondItem="fQd-6C-OHk" secondAttribute="bottom" id="CkM-y7-C53"/>
+                        <constraint firstItem="fQd-6C-OHk" firstAttribute="leading" secondItem="QCV-gH-UT2" secondAttribute="trailing" id="ICS-ae-fgD"/>
+                        <constraint firstItem="kR0-tA-2uF" firstAttribute="top" secondItem="3Jh-gC-egy" secondAttribute="top" id="Krt-V9-C5o"/>
+                        <constraint firstItem="kR0-tA-2uF" firstAttribute="width" secondItem="Pkz-EP-p4Q" secondAttribute="width" id="KwJ-3g-Oyd"/>
+                        <constraint firstItem="fQd-6C-OHk" firstAttribute="width" secondItem="Pkz-EP-p4Q" secondAttribute="width" id="Lam-1s-b14"/>
+                        <constraint firstItem="fQd-6C-OHk" firstAttribute="top" secondItem="3Jh-gC-egy" secondAttribute="top" id="OmA-Vs-5a4"/>
+                        <constraint firstItem="QCV-gH-UT2" firstAttribute="width" secondItem="Pkz-EP-p4Q" secondAttribute="width" id="UDC-kF-oA1"/>
+                        <constraint firstAttribute="bottom" secondItem="Pkz-EP-p4Q" secondAttribute="bottom" id="Xe3-qK-0uc"/>
+                        <constraint firstAttribute="trailing" secondItem="fQd-6C-OHk" secondAttribute="trailing" constant="27" id="an7-AV-hCa"/>
+                        <constraint firstItem="Pkz-EP-p4Q" firstAttribute="leading" secondItem="3Jh-gC-egy" secondAttribute="leading" constant="27" id="gwc-XA-mID"/>
+                        <constraint firstItem="Pkz-EP-p4Q" firstAttribute="top" secondItem="3Jh-gC-egy" secondAttribute="top" id="hzy-aK-mPq"/>
+                        <constraint firstAttribute="bottom" secondItem="kR0-tA-2uF" secondAttribute="bottom" id="igt-71-5Ke"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="3Jh-gC-egy" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="5cR-eo-oqb"/>
+                <constraint firstItem="3Jh-gC-egy" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Pjl-Eu-PVe"/>
+                <constraint firstAttribute="bottom" secondItem="3Jh-gC-egy" secondAttribute="bottom" id="ceN-NI-xsi"/>
+                <constraint firstAttribute="trailing" secondItem="3Jh-gC-egy" secondAttribute="trailing" id="dWr-Ly-BNN"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="allCountLabel" destination="e5M-E8-SSs" id="K0U-Gl-zvZ"/>
+                <outlet property="allLabel" destination="Aal-ZD-MlT" id="qXn-oy-bSz"/>
+                <outlet property="allView" destination="TI9-h7-JQo" id="qgI-md-1u4"/>
+                <outlet property="courseCountLabel" destination="0Ev-de-Era" id="cKf-js-cO3"/>
+                <outlet property="courseLabel" destination="8Ql-22-T6t" id="8Fh-PC-Qtm"/>
+                <outlet property="courseView" destination="oMw-71-EQZ" id="UtK-s0-Kf4"/>
+                <outlet property="noticeCountLabel" destination="eSf-NN-z0H" id="7yQ-Yb-0Zz"/>
+                <outlet property="noticeLabel" destination="HPj-WQ-UEe" id="i39-mh-PC6"/>
+                <outlet property="noticeView" destination="HFT-lc-XxE" id="AEn-pk-RrT"/>
+                <outlet property="systemCountLabel" destination="43u-at-Vor" id="FPQ-la-BzB"/>
+                <outlet property="systemLabel" destination="ZT2-JL-dMl" id="XSb-em-5Kr"/>
+                <outlet property="systemView" destination="PnS-8p-3Z9" id="QV4-d4-ySy"/>
+            </connections>
+            <point key="canvasLocation" x="28.260869565217394" y="-52.901785714285715"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="message_all" width="56" height="56"/>
+        <image name="message_course" width="56" height="56"/>
+        <image name="message_notice" width="56" height="56"/>
+        <image name="message_system" width="56" height="56"/>
+    </resources>
+</document>

+ 21 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferMessageCell.h

@@ -0,0 +1,21 @@
+//
+//  NotiferMessageCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/18.
+//
+
+#import <UIKit/UIKit.h>
+#import "NotiferMessageModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NotiferMessageCell : UITableViewCell
+
+@property (nonatomic, assign) BOOL isRead; // 是否已读
+
+- (void)configCellWithSource:(NotiferMessageModel *)model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 79 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferMessageCell.m

@@ -0,0 +1,79 @@
+//
+//  NotiferMessageCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/18.
+//
+
+#import "NotiferMessageCell.h"
+
+@interface NotiferMessageCell ()
+
+@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
+
+@property (weak, nonatomic) IBOutlet UIImageView *messageTypeView;
+
+@property (weak, nonatomic) IBOutlet UIView *redDot;
+
+@property (weak, nonatomic) IBOutlet UILabel *topTitleLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *descMessageLabel;
+
+@property (nonatomic, strong) NotiferMessageModel *model;
+
+@end
+
+@implementation NotiferMessageCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+}
+
+- (void)configCellWithSource:(NotiferMessageModel *)model {
+    self.model = model;
+    self.isRead = model.readStatus == 1 ? YES : NO;
+    // 根据type设置图片
+    NSDateFormatter *dateFormatter = [NSObject getDateformatter];
+    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    NSDate *messageDate = [dateFormatter dateFromString:model.createOn];
+    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+    NSString *dateStr = [dateFormatter stringFromDate:messageDate];
+    self.timeLabel.text = [NSString returnNoNullStringWithString:dateStr];
+    self.topTitleLabel.text = [NSString returnNoNullStringWithString:model.title];
+    
+    NSString *messgage = [NSString returnNoNullStringWithString:self.model.content];
+    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
+    [paragraphStyle setLineSpacing:4];//调整行间距
+    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:messgage attributes:@{NSParagraphStyleAttributeName:paragraphStyle,NSFontAttributeName:[UIFont systemFontOfSize:13.0f],NSForegroundColorAttributeName:HexRGB(0x7a7a7a)}];
+    self.descMessageLabel.attributedText = attrStr;
+    if ([model.group isEqualToString:@"COURSE"]) {
+        [self.messageTypeView setImage:[UIImage imageNamed:@"course_cell"]];
+    }
+    else if ([model.group isEqualToString:@"SYSTEM"]) {
+        [self.messageTypeView setImage:[UIImage imageNamed:@"system_cell"]];
+    }
+    else if ([model.group isEqualToString:@"NOTICE"]) {
+        [self.messageTypeView setImage:[UIImage imageNamed:@"notice_cell"]];
+    }
+}
+
+- (void)setIsRead:(BOOL)isRead {
+    _isRead = isRead;
+    if (isRead) {
+        self.redDot.hidden = YES;
+    }
+    else {
+        self.redDot.hidden = NO;
+    }
+}
+
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 95 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/NoticeCenter/View/NotiferMessageCell.xib

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <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 autoresizesSubviews="NO" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="108" id="KGk-i7-Jjw" customClass="NotiferMessageCell">
+            <rect key="frame" x="0.0" y="0.0" width="425" height="108"/>
+            <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="425" height="108"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_cell" translatesAutoresizingMaskIntoConstraints="NO" id="3FS-75-ZgU">
+                        <rect key="frame" x="16" y="32" width="44" height="44"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="44" id="Abw-Pq-4OW"/>
+                            <constraint firstAttribute="width" constant="44" id="cte-lB-Tzl"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="22"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </imageView>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="上课提醒" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dWN-rA-dKm">
+                        <rect key="frame" x="70" y="22" width="66" height="22"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="22" id="Amz-LZ-Qr5"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                        <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="您好,长笛基础教学·李老师的直播课60分钟后…教学·李老师的直播课60分钟后…" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aCp-hw-uSQ">
+                        <rect key="frame" x="70" y="46" width="339" height="40"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                        <color key="textColor" red="0.47843137254901957" green="0.47843137254901957" blue="0.47843137254901957" alpha="1" colorSpace="calibratedRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2022-3-25" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PnY-EC-LkF">
+                        <rect key="frame" x="350" y="26" width="59" height="14"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                        <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="heX-9o-hn0">
+                        <rect key="frame" x="141" y="19" width="6" height="6"/>
+                        <color key="backgroundColor" red="1" green="0.074509803921568626" blue="0.074509803921568626" alpha="1" colorSpace="calibratedRGB"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="6" id="4aE-tI-b0y"/>
+                            <constraint firstAttribute="height" constant="6" id="dxV-BU-vQb"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="3"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="aCp-hw-uSQ" secondAttribute="bottom" constant="22" id="0DI-6H-dc0"/>
+                    <constraint firstItem="dWN-rA-dKm" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="22" id="0gk-xb-9OT"/>
+                    <constraint firstItem="dWN-rA-dKm" firstAttribute="leading" secondItem="3FS-75-ZgU" secondAttribute="trailing" constant="10" id="FNS-ca-wiG"/>
+                    <constraint firstItem="aCp-hw-uSQ" firstAttribute="leading" secondItem="dWN-rA-dKm" secondAttribute="leading" id="GSa-tm-lZr"/>
+                    <constraint firstItem="3FS-75-ZgU" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="Lvw-p8-dTf"/>
+                    <constraint firstItem="heX-9o-hn0" firstAttribute="leading" secondItem="dWN-rA-dKm" secondAttribute="trailing" constant="5" id="Pz3-5h-Y3h"/>
+                    <constraint firstItem="heX-9o-hn0" firstAttribute="centerY" secondItem="dWN-rA-dKm" secondAttribute="top" id="Rcd-NR-oK0"/>
+                    <constraint firstItem="PnY-EC-LkF" firstAttribute="centerY" secondItem="dWN-rA-dKm" secondAttribute="centerY" id="U2W-vQ-SXe"/>
+                    <constraint firstItem="aCp-hw-uSQ" firstAttribute="top" secondItem="dWN-rA-dKm" secondAttribute="bottom" constant="2" id="X0T-fD-Ccl"/>
+                    <constraint firstAttribute="trailing" secondItem="aCp-hw-uSQ" secondAttribute="trailing" constant="16" id="YQg-oV-3Kc"/>
+                    <constraint firstItem="3FS-75-ZgU" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="j1p-Kp-mXl"/>
+                    <constraint firstAttribute="trailing" secondItem="PnY-EC-LkF" secondAttribute="trailing" constant="16" id="qnJ-3l-15h"/>
+                </constraints>
+            </tableViewCellContentView>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <connections>
+                <outlet property="descMessageLabel" destination="aCp-hw-uSQ" id="UbP-ED-VTA"/>
+                <outlet property="messageTypeView" destination="3FS-75-ZgU" id="5O0-dQ-mpQ"/>
+                <outlet property="redDot" destination="heX-9o-hn0" id="tAI-79-1Gy"/>
+                <outlet property="timeLabel" destination="PnY-EC-LkF" id="vJS-8I-7KV"/>
+                <outlet property="topTitleLabel" destination="dWN-rA-dKm" id="lsT-AW-Yo5"/>
+            </connections>
+            <point key="canvasLocation" x="207.97101449275365" y="58.258928571428569"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="course_cell" width="44" height="43"/>
+    </resources>
+</document>

+ 8 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerCell.m

@@ -21,7 +21,14 @@
 }
 }
 
 
 - (void)configCellWithModel:(HomeMessageModel *)sourceModel {
 - (void)configCellWithModel:(HomeMessageModel *)sourceModel {
-    [self.bannerImage sd_setImageWithURL:[NSURL URLWithString:sourceModel.coverImage] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    NSString *url = sourceModel.coverImage;
+    if ([NSString isEmptyString:url]) {
+        [self.bannerImage setImage:[UIImage imageNamed:@"video_placeholder"]];
+    }
+    else {
+        url = [url getUrlEndcodeString];
+        [self.bannerImage sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    }
 }
 }
 
 
 @end
 @end

+ 3 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerCell.xib

@@ -35,6 +35,9 @@
                 <constraint firstItem="KRw-yx-PyP" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="o6d-XR-yAa"/>
                 <constraint firstItem="KRw-yx-PyP" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="o6d-XR-yAa"/>
             </constraints>
             </constraints>
             <size key="customSize" width="389" height="143"/>
             <size key="customSize" width="389" height="143"/>
+            <connections>
+                <outlet property="bannerImage" destination="KRw-yx-PyP" id="DfY-uY-Wlk"/>
+            </connections>
             <point key="canvasLocation" x="377.536231884058" y="102.79017857142857"/>
             <point key="canvasLocation" x="377.536231884058" y="102.79017857142857"/>
         </collectionViewCell>
         </collectionViewCell>
     </objects>
     </objects>

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeHotAlbumCell.m

@@ -25,7 +25,7 @@
 }
 }
 
 
 - (void)configWithAlbumModel:(HomeAlbumModel *)model {
 - (void)configWithAlbumModel:(HomeAlbumModel *)model {
-    [self.albumImage sd_setImageWithURL:[NSURL URLWithString:model.albumCoverUrl] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    [self.albumImage sd_setImageWithURL:[NSURL URLWithString:[model.albumCoverUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
     self.albumNameLabel.text = [NSString returnNoNullStringWithString:model.albumName];
     self.albumNameLabel.text = [NSString returnNoNullStringWithString:model.albumName];
     NSString *collectString = [NSString stringWithFormat:@"%zd人收藏",model.albumFavoriteCount];
     NSString *collectString = [NSString stringWithFormat:@"%zd人收藏",model.albumFavoriteCount];
     NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:collectString attributes:@{NSForegroundColorAttributeName:HexRGB(0x63ffe1),NSFontAttributeName:[UIFont systemFontOfSize:11.0f weight:UIFontWeightMedium]}];
     NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:collectString attributes:@{NSForegroundColorAttributeName:HexRGB(0x63ffe1),NSFontAttributeName:[UIFont systemFontOfSize:11.0f weight:UIFontWeightMedium]}];

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeInformationCell.m

@@ -30,7 +30,7 @@
 - (void)configCellWithSource:(HomeMessageModel *)model rowIndex:(ROWINDEX)rowIndex {
 - (void)configCellWithSource:(HomeMessageModel *)model rowIndex:(ROWINDEX)rowIndex {
     self.messageTitle.text = [NSString returnNoNullStringWithString:model.title];
     self.messageTitle.text = [NSString returnNoNullStringWithString:model.title];
     self.timeLabel.text = [model.updateTime dateFormatString];
     self.timeLabel.text = [model.updateTime dateFormatString];
-    [self.messageImage sd_setImageWithURL:[NSURL URLWithString:model.coverImage] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    [self.messageImage sd_setImageWithURL:[NSURL URLWithString:[model.coverImage getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
     if (rowIndex == ROWINDEX_TOP) {
     if (rowIndex == ROWINDEX_TOP) {
         UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, kScreenWidth - 28, 108) byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(8, 8)];
         UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, kScreenWidth - 28, 108) byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(8, 8)];
         CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
         CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];

+ 8 - 2
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeLiveCouseCell.m

@@ -36,9 +36,15 @@
 }
 }
 
 
 - (void)configWithSource:(HomeLiveGroupModel *)source {
 - (void)configWithSource:(HomeLiveGroupModel *)source {
-    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:source.avatar] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:[source.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
     self.courseName.text = [NSString returnNoNullStringWithString:source.courseGroupName];
     self.courseName.text = [NSString returnNoNullStringWithString:source.courseGroupName];
-    self.teacherName.text = [NSString stringWithFormat:@"老师:%@",[NSString returnNoNullStringWithString:source.teacherName]];
+    
+    if ([NSString isEmptyString:source.teacherName]) {
+        self.teacherName.text = [NSString stringWithFormat:@"老师:游客%@",source.teacherId];
+    }
+    else {
+        self.teacherName.text = [NSString stringWithFormat:@"老师:%@",source.teacherName];
+    }
     self.priceLabel.text = [NSString stringWithFormat:@"¥%.2f",source.courseGroupPrice];
     self.priceLabel.text = [NSString stringWithFormat:@"¥%.2f",source.courseGroupPrice];
     self.courseCountLabel.text = [NSString stringWithFormat:@"%zd课时",source.courseNum];
     self.courseCountLabel.text = [NSString stringWithFormat:@"%zd课时",source.courseNum];
     self.descLabel.text = [NSString stringWithFormat:@"%zd人已购买",source.buyCount];
     self.descLabel.text = [NSString stringWithFormat:@"%zd人已购买",source.buyCount];

+ 8 - 2
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeVideoCourseCell.m

@@ -33,9 +33,15 @@
 }
 }
 
 
 - (void)configWithSource:(HomeVideoGroupModel *)source {
 - (void)configWithSource:(HomeVideoGroupModel *)source {
-    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:source.lessonCoverUrl] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:[source.lessonCoverUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
     self.courseName.text = [NSString returnNoNullStringWithString:source.videoGroupName];
     self.courseName.text = [NSString returnNoNullStringWithString:source.videoGroupName];
-    self.teacherName.text = [NSString stringWithFormat:@"老师:%@",[NSString returnNoNullStringWithString:source.teacherName]];
+    if ([NSString isEmptyString:source.teacherName]) {
+        self.teacherName.text = [NSString stringWithFormat:@"老师:游客%@",source.teacherId];
+    }
+    else {
+        self.teacherName.text = [NSString stringWithFormat:@"老师:%@",source.teacherName];
+
+    }
     self.coursePrice.text = [NSString stringWithFormat:@"¥%.2f",source.lessonPrice];
     self.coursePrice.text = [NSString stringWithFormat:@"¥%.2f",source.lessonPrice];
     self.courseCount.text = [NSString stringWithFormat:@"%zd课时",source.lessonCount];
     self.courseCount.text = [NSString stringWithFormat:@"%zd课时",source.lessonCount];
     self.descLabel.text = [NSString stringWithFormat:@"%zd人已购买",source.buyCount];
     self.descLabel.text = [NSString stringWithFormat:@"%zd人已购买",source.buyCount];

+ 27 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSNewsAlert.h

@@ -0,0 +1,27 @@
+//
+//  KSNewsAlert.h
+//  StudentDaya
+//
+//  Created by Kyle on 2020/2/26.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^NewsCallback)(BOOL isSure, NSString *linkUrl);
+
+@interface KSNewsAlert : UIView
+
++ (instancetype)shareInstance;
+
+- (void)evaluateWithMessage:(NSString *)imgUrl linkUrl:(NSString *)linkUrl callbackAction:(NewsCallback)callback;
+
+- (void)showAlert;
+
+- (void)hiddenAction;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 70 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSNewsAlert.m

@@ -0,0 +1,70 @@
+//
+//  KSNewsAlert.m
+//  StudentDaya
+//
+//  Created by Kyle on 2020/2/26.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import "KSNewsAlert.h"
+#import "UIView+Animation.h"
+
+
+@interface KSNewsAlert ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *newsImage;
+
+@property (nonatomic, copy) NewsCallback callback;
+
+@property (nonatomic, strong) NSString *linkUrl;
+
+@end
+
+@implementation KSNewsAlert
+
+
++ (instancetype)shareInstance {
+    KSNewsAlert *view = [[[NSBundle mainBundle] loadNibNamed:@"KSNewsAlert" owner:nil options:nil] firstObject];
+    view.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);
+    return view;
+};
+
+- (void)evaluateWithMessage:(NSString *)imgUrl linkUrl:(NSString *)linkUrl callbackAction:(NewsCallback)callback {
+    self.linkUrl = linkUrl;
+    [self.newsImage sd_setImageWithURL:[NSURL URLWithString:imgUrl] placeholderImage:[UIImage new]];
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)showAlert {
+    [[UIApplication sharedApplication].keyWindow addSubview:self];
+    [self setPopAnimation];
+}
+
+- (void)hiddenAction {
+    [self removeFromSuperview];
+}
+
+- (IBAction)sureAction:(id)sender {
+    if (self.callback) {
+        self.callback(YES, self.linkUrl);
+    }
+    [self hiddenAction];
+}
+- (IBAction)cancleAction:(id)sender {
+    if (self.callback) {
+        self.callback(NO, self.linkUrl);
+    }
+    [self hiddenAction];
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 79 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSNewsAlert.xib

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <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="KSNewsAlert">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Gsq-Tz-yIf">
+                    <rect key="frame" x="59" y="244" width="296" height="408"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="HXm-Ev-vPb">
+                            <rect key="frame" x="0.0" y="0.0" width="296" height="408"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        </imageView>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="HXm-Ev-vPb" secondAttribute="trailing" id="2P7-XJ-EPD"/>
+                        <constraint firstAttribute="bottom" secondItem="HXm-Ev-vPb" secondAttribute="bottom" id="Qpp-wB-uxm"/>
+                        <constraint firstItem="HXm-Ev-vPb" firstAttribute="leading" secondItem="Gsq-Tz-yIf" secondAttribute="leading" id="XwL-c1-LHh"/>
+                        <constraint firstAttribute="width" secondItem="Gsq-Tz-yIf" secondAttribute="height" multiplier="257:354" id="oFR-jZ-Oa5"/>
+                        <constraint firstItem="HXm-Ev-vPb" firstAttribute="top" secondItem="Gsq-Tz-yIf" secondAttribute="top" id="zBx-Lc-1F1"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7KA-JY-2rT">
+                    <rect key="frame" x="59" y="244" width="296" height="408"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <connections>
+                        <action selector="sureAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="jan-N6-kCS"/>
+                    </connections>
+                </button>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Cj7-J3-MRD">
+                    <rect key="frame" x="187" y="662" width="40" height="40"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="40" id="oFj-tN-HYo"/>
+                        <constraint firstAttribute="width" constant="40" id="s4j-Jf-jr8"/>
+                    </constraints>
+                    <state key="normal" image="alert_cancle"/>
+                    <connections>
+                        <action selector="cancleAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="frR-2Q-pXb"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.46000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="7KA-JY-2rT" firstAttribute="trailing" secondItem="Gsq-Tz-yIf" secondAttribute="trailing" id="2fw-Wf-fCj"/>
+                <constraint firstItem="Cj7-J3-MRD" firstAttribute="top" secondItem="Gsq-Tz-yIf" secondAttribute="bottom" constant="10" id="6rr-Br-qO9"/>
+                <constraint firstItem="7KA-JY-2rT" firstAttribute="bottom" secondItem="Gsq-Tz-yIf" secondAttribute="bottom" id="AB3-bn-Jcm"/>
+                <constraint firstItem="7KA-JY-2rT" firstAttribute="top" secondItem="Gsq-Tz-yIf" secondAttribute="top" id="AVK-Uh-3gL"/>
+                <constraint firstItem="Gsq-Tz-yIf" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="59" id="Q6d-Wn-JeM"/>
+                <constraint firstItem="Gsq-Tz-yIf" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="YbC-cb-sUv"/>
+                <constraint firstAttribute="trailing" secondItem="Gsq-Tz-yIf" secondAttribute="trailing" constant="59" id="lri-IY-MDQ"/>
+                <constraint firstItem="7KA-JY-2rT" firstAttribute="leading" secondItem="Gsq-Tz-yIf" secondAttribute="leading" id="rFm-1T-ygB"/>
+                <constraint firstItem="Cj7-J3-MRD" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="sbo-nk-xsy"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="newsImage" destination="HXm-Ev-vPb" id="Wq2-P3-OeD"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="138.61607142857142"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="alert_cancle" width="28" height="28"/>
+    </resources>
+</document>

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherShowCell.m

@@ -46,7 +46,7 @@
     self.model = sourceModel;
     self.model = sourceModel;
     [KSVideoHelper getVideoPreviewImageUrl:sourceModel.videoUrl forImageView:self.videoCover placeholder:[UIImage imageNamed:@"video_placeholder"]];
     [KSVideoHelper getVideoPreviewImageUrl:sourceModel.videoUrl forImageView:self.videoCover placeholder:[UIImage imageNamed:@"video_placeholder"]];
     self.descLabel.text = [NSString returnNoNullStringWithString:sourceModel.describe];
     self.descLabel.text = [NSString returnNoNullStringWithString:sourceModel.describe];
-    [self.teacherAvatar sd_setImageWithURL:[NSURL URLWithString:sourceModel.avatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    [self.teacherAvatar sd_setImageWithURL:[NSURL URLWithString:[sourceModel.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
     self.teacherNameLabel.text = [NSString returnNoNullStringWithString:sourceModel.username];
     self.teacherNameLabel.text = [NSString returnNoNullStringWithString:sourceModel.username];
     self.watchCount.text = [NSString stringWithFormat:@"%@已观看",sourceModel.browse];
     self.watchCount.text = [NSString stringWithFormat:@"%@已观看",sourceModel.browse];
     
     

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Live/Controller/LiveVideoRoomViewController.m

@@ -183,7 +183,7 @@ static int clickPraiseBtnTimes  = 0;
     [self.view addSubview:self.headView];
     [self.view addSubview:self.headView];
     self.headView.boardcastName.text = [NSString returnNoNullStringWithString:self.createrName];
     self.headView.boardcastName.text = [NSString returnNoNullStringWithString:self.createrName];
     if (![NSString isEmptyString:self.createrAvatal]) {
     if (![NSString isEmptyString:self.createrAvatal]) {
-        [self.headView.boardcastAvatal sd_setImageWithURL:[NSURL URLWithString:self.createrAvatal] placeholderImage:[UIImage imageNamed:@"teacher_logo"]];
+        [self.headView.boardcastAvatal sd_setImageWithURL:[NSURL URLWithString:[self.createrAvatal getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"teacher_logo"]];
     }
     }
     [self countLikeMessageCount];
     [self countLikeMessageCount];
     
     

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Live/View/LiveSeatApplyCell.m

@@ -38,7 +38,7 @@
         self.callback = callback;
         self.callback = callback;
     }
     }
     self.member = member;
     self.member = member;
-    [self.userAvatar sd_setImageWithURL:[NSURL URLWithString:member.avatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    [self.userAvatar sd_setImageWithURL:[NSURL URLWithString:[member.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
     self.userName.text = [NSString returnNoNullStringWithString:member.name];
     self.userName.text = [NSString returnNoNullStringWithString:member.name];
     if (member.isConnected) {
     if (member.isConnected) {
         self.refuseButton.hidden = YES;
         self.refuseButton.hidden = YES;

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/SubjectChooseViewController.m

@@ -179,7 +179,7 @@
 - (__kindof UICollectionViewCell *)cycleScrollView:(ZKCycleScrollView *)cycleScrollView cellForItemAtIndex:(NSInteger)index {
 - (__kindof UICollectionViewCell *)cycleScrollView:(ZKCycleScrollView *)cycleScrollView cellForItemAtIndex:(NSInteger)index {
     SubjectImageCell *cell = [cycleScrollView dequeueReusableCellWithReuseIdentifier:@"SubjectImageCell" forIndex:index];
     SubjectImageCell *cell = [cycleScrollView dequeueReusableCellWithReuseIdentifier:@"SubjectImageCell" forIndex:index];
     InstrumentMessageModel *model = self.imageArray[index];
     InstrumentMessageModel *model = self.imageArray[index];
-    [cell.instrumentImage sd_setImageWithURL:[NSURL URLWithString:model.img]];
+    [cell.instrumentImage sd_setImageWithURL:[NSURL URLWithString:[model.img getUrlEndcodeString]]];
     return cell;
     return cell;
 }
 }
 
 

+ 44 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/AddressList/Controller/AddressListViewController.m

@@ -10,6 +10,7 @@
 #import "AddressBottomView.h"
 #import "AddressBottomView.h"
 #import "AddressDetailViewController.h"
 #import "AddressDetailViewController.h"
 #import "AddressListModel.h"
 #import "AddressListModel.h"
+#import "KSImageAlert.h"
 
 
 @interface AddressListViewController ()<UITableViewDataSource,UITableViewDelegate>
 @interface AddressListViewController ()<UITableViewDataSource,UITableViewDelegate>
 
 
@@ -120,6 +121,49 @@
     [self.navigationController pushViewController:ctrl animated:YES];
     [self.navigationController pushViewController:ctrl animated:YES];
 }
 }
 
 
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    return YES;
+}
+
+- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
+    AddressListModel *model = self.dataArray[indexPath.row];
+    UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
+        [self deleteAddressConfirm:model.internalBaseClassIdentifier];
+    }];
+    deleteRowAction.backgroundColor = THEMECOLOR;
+    
+    return @[deleteRowAction];
+}
+// 删除
+- (void)deleteAddressConfirm:(NSString *)addressId {
+    KSImageAlert *alertView = [KSImageAlert shareInstance];
+    MJWeakSelf;
+    alertView.titleLabel.text = @"确认删除收获地址吗";
+    [alertView.cancleButton setTitle:@"取消" forState:UIControlStateNormal];
+    [alertView.sureButton setTitle:@"确定" forState:UIControlStateNormal];
+    [alertView sureCallback:^(BOOL isSure) {
+        if (isSure) {
+            [weakSelf deleteAddress:addressId];
+        }
+    }];
+    [alertView showAlert];
+}
+
+- (void)deleteAddress:(NSString *)addressId {
+    [self showhud];
+    [KSNetworkingManager deleteAddressRequest:KS_POST addressId:addressId success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200) {
+            [self MBPShow:@"删除成功"];
+            [self refreshAndRequestData];
+        }
+        else {
+            [self MBPShow:[dic stringValueForKey:@"message"]];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
 - (UITableView *)tableView {
 - (UITableView *)tableView {
     if (!_tableView) {
     if (!_tableView) {
         _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
         _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/Controller/MineViewController.m

@@ -161,7 +161,7 @@
         case MINEVIEWTYPE_HELP:
         case MINEVIEWTYPE_HELP:
         {
         {
             KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
             KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
-            webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/help"];
+            webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/helpCenter"];
             [self.navigationController pushViewController:webCtrl animated:YES];
             [self.navigationController pushViewController:webCtrl animated:YES];
         }
         }
             break;
             break;

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/Homework/View/HomeworkListCell.m

@@ -48,7 +48,7 @@
     self.courseTime.text = [NSString stringWithFormat:@"%@~%@",[NSString returnNoNullStringWithString:lessonBegin],[NSString returnNoNullStringWithString:lessonEnd]];
     self.courseTime.text = [NSString stringWithFormat:@"%@~%@",[NSString returnNoNullStringWithString:lessonBegin],[NSString returnNoNullStringWithString:lessonEnd]];
     
     
     self.studentNameLabel.text = [NSString returnNoNullStringWithString:sourceModel.teacherName];
     self.studentNameLabel.text = [NSString returnNoNullStringWithString:sourceModel.teacherName];
-    [self.studentAvatal sd_setImageWithURL:[NSURL URLWithString:sourceModel.teacherAvatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    [self.studentAvatal sd_setImageWithURL:[NSURL URLWithString:[sourceModel.teacherAvatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
     self.subjectLabel.text = [NSString returnNoNullStringWithString:sourceModel.subjectName];
     self.subjectLabel.text = [NSString returnNoNullStringWithString:sourceModel.subjectName];
 
 
     self.userId = sourceModel.studentId;
     self.userId = sourceModel.studentId;

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/VideoCourseModel.m

@@ -19,7 +19,7 @@ NSString *const kVideoCourseModelAvatar = @"avatar";
 NSString *const kVideoCourseModelLessonSubject = @"lessonSubject";
 NSString *const kVideoCourseModelLessonSubject = @"lessonSubject";
 NSString *const kVideoCourseModelTeacherId = @"teacherId";
 NSString *const kVideoCourseModelTeacherId = @"teacherId";
 NSString *const kVideoCourseModelHotFlag = @"hotFlag";
 NSString *const kVideoCourseModelHotFlag = @"hotFlag";
-NSString *const kVideoCourseModelUsername = @"username";
+NSString *const kVideoCourseModelUsername = @"userName";
 NSString *const kVideoCourseModelCreateTime = @"createTime";
 NSString *const kVideoCourseModelCreateTime = @"createTime";
 NSString *const kVideoCourseModelAuditStatus = @"auditStatus";
 NSString *const kVideoCourseModelAuditStatus = @"auditStatus";
 NSString *const kVideoCourseModelSortNumber = @"sortNumber";
 NSString *const kVideoCourseModelSortNumber = @"sortNumber";

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLiveCourseCell.m

@@ -36,7 +36,7 @@
     if (callback) {
     if (callback) {
         self.callback = callback;
         self.callback = callback;
     }
     }
-    [self.courseCoverImage sd_setImageWithURL:[NSURL URLWithString:model.avatar] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    [self.courseCoverImage sd_setImageWithURL:[NSURL URLWithString:[model.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
     
     
     self.courseNameLabel.text = [NSString returnNoNullStringWithString:model.name];
     self.courseNameLabel.text = [NSString returnNoNullStringWithString:model.name];
     self.subjectName.text = [NSString returnNoNullStringWithString:model.subjectName];
     self.subjectName.text = [NSString returnNoNullStringWithString:model.subjectName];

+ 2 - 2
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/VideoCourseCell.m

@@ -33,9 +33,9 @@
 }
 }
 
 
 - (void)configSourceModel:(VideoCourseModel *)model isInCheck:(BOOL)isCheck {
 - (void)configSourceModel:(VideoCourseModel *)model isInCheck:(BOOL)isCheck {
-    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:model.lessonCoverUrl] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:[model.lessonCoverUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
     self.courseTitle.text = [NSString returnNoNullStringWithString:model.lessonName];
     self.courseTitle.text = [NSString returnNoNullStringWithString:model.lessonName];
-    [self.teacherAvatar sd_setImageWithURL:[NSURL URLWithString:model.avatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    [self.teacherAvatar sd_setImageWithURL:[NSURL URLWithString:[model.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
     if ([NSString isEmptyString:model.username]) {
     if ([NSString isEmptyString:model.username]) {
         self.teacherName.text = [NSString stringWithFormat:@"游客%.0f",model.teacherId];
         self.teacherName.text = [NSString stringWithFormat:@"游客%.0f",model.teacherId];
     }
     }

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/Controller/SettingViewController.m

@@ -59,7 +59,7 @@
 
 
 - (void)configMessage {
 - (void)configMessage {
     if (![NSString isEmptyString:self.mineInfo.avatar]) {
     if (![NSString isEmptyString:self.mineInfo.avatar]) {
-        [self.bodyView.userAvatal sd_setImageWithURL:[NSURL URLWithString:self.mineInfo.avatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+        [self.bodyView.userAvatal sd_setImageWithURL:[NSURL URLWithString:[self.mineInfo.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
     }
     }
     else {
     else {
         [self.bodyView.userAvatal setImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
         [self.bodyView.userAvatal setImage:[UIImage imageNamed:USERDEFAULT_LOGO]];

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/View/VeriCheckView.m

@@ -108,7 +108,7 @@
     self.phoneNo = phoneNo;
     self.phoneNo = phoneNo;
     NSString *url = [NSString stringWithFormat:@"%@%@?phone=%@",hostURL, @"/api-student/code/getImageCode",phoneNo];
     NSString *url = [NSString stringWithFormat:@"%@%@?phone=%@",hostURL, @"/api-student/code/getImageCode",phoneNo];
     [[SDImageCache sharedImageCache] removeImageForKey:url withCompletion:^{
     [[SDImageCache sharedImageCache] removeImageForKey:url withCompletion:^{
-        [self.checkImage sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"image_placeholder"] options:SDWebImageRefreshCached];
+        [self.checkImage sd_setImageWithURL:[NSURL URLWithString:[url getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"image_placeholder"] options:SDWebImageRefreshCached];
     }];
     }];
 }
 }
 
 

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/View/MineBodyView.m

@@ -64,7 +64,7 @@
     self.userName.text = userName;
     self.userName.text = userName;
     self.userIdLabel.text = [NSString stringWithFormat:@"学号:%@",sourceModel.userId];
     self.userIdLabel.text = [NSString stringWithFormat:@"学号:%@",sourceModel.userId];
     self.memberCountLabel.text = [NSString stringWithFormat:@"会员有效期剩余%.0f天",sourceModel.membershipDays];
     self.memberCountLabel.text = [NSString stringWithFormat:@"会员有效期剩余%.0f天",sourceModel.membershipDays];
-    [self.userAvatar sd_setImageWithURL:[NSURL URLWithString:sourceModel.heardUrl] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    [self.userAvatar sd_setImageWithURL:[NSURL URLWithString:[sourceModel.heardUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
 }
 }
 
 
 - (IBAction)toMemberDetail:(id)sender {
 - (IBAction)toMemberDetail:(id)sender {

+ 1 - 0
KulexiuForStudent/Podfile

@@ -37,6 +37,7 @@ target 'KulexiuForStudent' do
   pod 'RongCloudIM/Sight',  '~> 5.2.0'
   pod 'RongCloudIM/Sight',  '~> 5.2.0'
   pod 'RongCloudRTC/RongRTCLib','~> 5.2.1'
   pod 'RongCloudRTC/RongRTCLib','~> 5.2.1'
 
 
+  pod "iOS-KS3SDK", "~>1.0.5"
   # Pods for KulexiuForStudent
   # Pods for KulexiuForStudent
 
 
   target 'KulexiuForStudentTests' do
   target 'KulexiuForStudentTests' do

+ 5 - 1
KulexiuForStudent/Podfile.lock

@@ -33,6 +33,7 @@ PODS:
   - CHIPageControl/Paprika (0.2)
   - CHIPageControl/Paprika (0.2)
   - CHIPageControl/Puya (0.2)
   - CHIPageControl/Puya (0.2)
   - dsBridge (3.0.6)
   - dsBridge (3.0.6)
+  - iOS-KS3SDK (1.0.5)
   - IQKeyboardManager (6.5.9)
   - IQKeyboardManager (6.5.9)
   - JCore (2.7.1-noidfa)
   - JCore (2.7.1-noidfa)
   - JPush (4.3.0):
   - JPush (4.3.0):
@@ -108,6 +109,7 @@ DEPENDENCIES:
   - AFNetworking (~> 4.0)
   - AFNetworking (~> 4.0)
   - Bugly
   - Bugly
   - CHIPageControl
   - CHIPageControl
+  - iOS-KS3SDK (~> 1.0.5)
   - IQKeyboardManager
   - IQKeyboardManager
   - JCore (= 2.7.1-noidfa)
   - JCore (= 2.7.1-noidfa)
   - JPush (= 4.3.0)
   - JPush (= 4.3.0)
@@ -138,6 +140,7 @@ SPEC REPOS:
     - Bugly
     - Bugly
     - CHIPageControl
     - CHIPageControl
     - dsBridge
     - dsBridge
+    - iOS-KS3SDK
     - IQKeyboardManager
     - IQKeyboardManager
     - JCore
     - JCore
     - JPush
     - JPush
@@ -166,6 +169,7 @@ SPEC CHECKSUMS:
   Bugly: afe841bba2ea6de6d432a3c125240a5e75949c55
   Bugly: afe841bba2ea6de6d432a3c125240a5e75949c55
   CHIPageControl: a787bf7205c9b7e7fbfc412be36c5e8636b68f86
   CHIPageControl: a787bf7205c9b7e7fbfc412be36c5e8636b68f86
   dsBridge: 48b62ee8a411ad601a88d6f6c8cf6cb634b206b7
   dsBridge: 48b62ee8a411ad601a88d6f6c8cf6cb634b206b7
+  iOS-KS3SDK: 688f6c6a3b91af8e0bd0bd9c1e727cd5315293dd
   IQKeyboardManager: 241cc94ccabc9deb8f8bd7d12f00d73288d13ecc
   IQKeyboardManager: 241cc94ccabc9deb8f8bd7d12f00d73288d13ecc
   JCore: b9d49b2e5364cce65dec86056c60b1b72825893a
   JCore: b9d49b2e5364cce65dec86056c60b1b72825893a
   JPush: 88d6361fbec4be7c8b55b20b7fe1c292228f6bc2
   JPush: 88d6361fbec4be7c8b55b20b7fe1c292228f6bc2
@@ -189,6 +193,6 @@ SPEC CHECKSUMS:
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
   ZKCycleScrollView: 4b353d17b7f469b245a1c606d5a977e72b940895
   ZKCycleScrollView: 4b353d17b7f469b245a1c606d5a977e72b940895
 
 
-PODFILE CHECKSUM: d1525614cc0e9f425131238bd58c1c5c566c494b
+PODFILE CHECKSUM: 3fa48a0c876d24bb53478e9c3b6a588814a4b5df
 
 
 COCOAPODS: 1.11.3
 COCOAPODS: 1.11.3

+ 5 - 1
KulexiuForStudent/Pods/Manifest.lock

@@ -33,6 +33,7 @@ PODS:
   - CHIPageControl/Paprika (0.2)
   - CHIPageControl/Paprika (0.2)
   - CHIPageControl/Puya (0.2)
   - CHIPageControl/Puya (0.2)
   - dsBridge (3.0.6)
   - dsBridge (3.0.6)
+  - iOS-KS3SDK (1.0.5)
   - IQKeyboardManager (6.5.9)
   - IQKeyboardManager (6.5.9)
   - JCore (2.7.1-noidfa)
   - JCore (2.7.1-noidfa)
   - JPush (4.3.0):
   - JPush (4.3.0):
@@ -108,6 +109,7 @@ DEPENDENCIES:
   - AFNetworking (~> 4.0)
   - AFNetworking (~> 4.0)
   - Bugly
   - Bugly
   - CHIPageControl
   - CHIPageControl
+  - iOS-KS3SDK (~> 1.0.5)
   - IQKeyboardManager
   - IQKeyboardManager
   - JCore (= 2.7.1-noidfa)
   - JCore (= 2.7.1-noidfa)
   - JPush (= 4.3.0)
   - JPush (= 4.3.0)
@@ -138,6 +140,7 @@ SPEC REPOS:
     - Bugly
     - Bugly
     - CHIPageControl
     - CHIPageControl
     - dsBridge
     - dsBridge
+    - iOS-KS3SDK
     - IQKeyboardManager
     - IQKeyboardManager
     - JCore
     - JCore
     - JPush
     - JPush
@@ -166,6 +169,7 @@ SPEC CHECKSUMS:
   Bugly: afe841bba2ea6de6d432a3c125240a5e75949c55
   Bugly: afe841bba2ea6de6d432a3c125240a5e75949c55
   CHIPageControl: a787bf7205c9b7e7fbfc412be36c5e8636b68f86
   CHIPageControl: a787bf7205c9b7e7fbfc412be36c5e8636b68f86
   dsBridge: 48b62ee8a411ad601a88d6f6c8cf6cb634b206b7
   dsBridge: 48b62ee8a411ad601a88d6f6c8cf6cb634b206b7
+  iOS-KS3SDK: 688f6c6a3b91af8e0bd0bd9c1e727cd5315293dd
   IQKeyboardManager: 241cc94ccabc9deb8f8bd7d12f00d73288d13ecc
   IQKeyboardManager: 241cc94ccabc9deb8f8bd7d12f00d73288d13ecc
   JCore: b9d49b2e5364cce65dec86056c60b1b72825893a
   JCore: b9d49b2e5364cce65dec86056c60b1b72825893a
   JPush: 88d6361fbec4be7c8b55b20b7fe1c292228f6bc2
   JPush: 88d6361fbec4be7c8b55b20b7fe1c292228f6bc2
@@ -189,6 +193,6 @@ SPEC CHECKSUMS:
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
   ZKCycleScrollView: 4b353d17b7f469b245a1c606d5a977e72b940895
   ZKCycleScrollView: 4b353d17b7f469b245a1c606d5a977e72b940895
 
 
-PODFILE CHECKSUM: d1525614cc0e9f425131238bd58c1c5c566c494b
+PODFILE CHECKSUM: 3fa48a0c876d24bb53478e9c3b6a588814a4b5df
 
 
 COCOAPODS: 1.11.3
 COCOAPODS: 1.11.3

File diff suppressed because it is too large
+ 1995 - 1614
KulexiuForStudent/Pods/Pods.xcodeproj/project.pbxproj


+ 33 - 26
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -30,182 +30,182 @@
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>4</integer>
+			<integer>5</integer>
 		</dict>
 		</dict>
 		<key>JCore.xcscheme</key>
 		<key>JCore.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>5</integer>
+			<integer>6</integer>
 		</dict>
 		</dict>
 		<key>JPush.xcscheme</key>
 		<key>JPush.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>6</integer>
+			<integer>7</integer>
 		</dict>
 		</dict>
 		<key>JXCategoryView.xcscheme</key>
 		<key>JXCategoryView.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>7</integer>
+			<integer>8</integer>
 		</dict>
 		</dict>
 		<key>JXPagingView.xcscheme</key>
 		<key>JXPagingView.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>8</integer>
+			<integer>9</integer>
 		</dict>
 		</dict>
 		<key>MBProgressHUD.xcscheme</key>
 		<key>MBProgressHUD.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>10</integer>
+			<integer>11</integer>
 		</dict>
 		</dict>
 		<key>MJExtension.xcscheme</key>
 		<key>MJExtension.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>11</integer>
+			<integer>12</integer>
 		</dict>
 		</dict>
 		<key>MJRefresh.xcscheme</key>
 		<key>MJRefresh.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>12</integer>
+			<integer>13</integer>
 		</dict>
 		</dict>
 		<key>Masonry.xcscheme</key>
 		<key>Masonry.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>9</integer>
+			<integer>10</integer>
 		</dict>
 		</dict>
 		<key>Pods-KulexiuForStudent-KulexiuForStudentUITests.xcscheme</key>
 		<key>Pods-KulexiuForStudent-KulexiuForStudentUITests.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>14</integer>
+			<integer>15</integer>
 		</dict>
 		</dict>
 		<key>Pods-KulexiuForStudent.xcscheme</key>
 		<key>Pods-KulexiuForStudent.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>13</integer>
+			<integer>14</integer>
 		</dict>
 		</dict>
 		<key>Pods-KulexiuForStudentTests.xcscheme</key>
 		<key>Pods-KulexiuForStudentTests.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>15</integer>
+			<integer>16</integer>
 		</dict>
 		</dict>
 		<key>RSKImageCropper.xcscheme</key>
 		<key>RSKImageCropper.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>19</integer>
+			<integer>20</integer>
 		</dict>
 		</dict>
 		<key>Reachability.xcscheme</key>
 		<key>Reachability.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>16</integer>
+			<integer>17</integer>
 		</dict>
 		</dict>
 		<key>RongCloudIM.xcscheme</key>
 		<key>RongCloudIM.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>17</integer>
+			<integer>18</integer>
 		</dict>
 		</dict>
 		<key>RongCloudRTC.xcscheme</key>
 		<key>RongCloudRTC.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>18</integer>
+			<integer>19</integer>
 		</dict>
 		</dict>
 		<key>SDWebImage.xcscheme</key>
 		<key>SDWebImage.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>20</integer>
+			<integer>21</integer>
 		</dict>
 		</dict>
 		<key>SSZipArchive.xcscheme</key>
 		<key>SSZipArchive.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>22</integer>
+			<integer>23</integer>
 		</dict>
 		</dict>
 		<key>SocketRocket.xcscheme</key>
 		<key>SocketRocket.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>21</integer>
+			<integer>22</integer>
 		</dict>
 		</dict>
 		<key>UMAPM.xcscheme</key>
 		<key>UMAPM.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>23</integer>
+			<integer>24</integer>
 		</dict>
 		</dict>
 		<key>UMCommon.xcscheme</key>
 		<key>UMCommon.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>24</integer>
+			<integer>25</integer>
 		</dict>
 		</dict>
 		<key>UMDevice.xcscheme</key>
 		<key>UMDevice.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>25</integer>
+			<integer>26</integer>
 		</dict>
 		</dict>
 		<key>Whiteboard-Whiteboard.xcscheme</key>
 		<key>Whiteboard-Whiteboard.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>27</integer>
+			<integer>28</integer>
 		</dict>
 		</dict>
 		<key>Whiteboard.xcscheme</key>
 		<key>Whiteboard.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>26</integer>
+			<integer>27</integer>
 		</dict>
 		</dict>
 		<key>YYModel.xcscheme</key>
 		<key>YYModel.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>28</integer>
+			<integer>29</integer>
 		</dict>
 		</dict>
 		<key>ZKCycleScrollView.xcscheme</key>
 		<key>ZKCycleScrollView.xcscheme</key>
 		<dict>
 		<dict>
 			<key>isShown</key>
 			<key>isShown</key>
 			<false/>
 			<false/>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>29</integer>
+			<integer>30</integer>
 		</dict>
 		</dict>
 		<key>dsBridge.xcscheme</key>
 		<key>dsBridge.xcscheme</key>
 		<dict>
 		<dict>
@@ -214,6 +214,13 @@
 			<key>orderHint</key>
 			<key>orderHint</key>
 			<integer>3</integer>
 			<integer>3</integer>
 		</dict>
 		</dict>
+		<key>iOS-KS3SDK.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>4</integer>
+		</dict>
 	</dict>
 	</dict>
 	<key>SuppressBuildableAutocreation</key>
 	<key>SuppressBuildableAutocreation</key>
 	<dict/>
 	<dict/>

+ 17 - 0
KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-acknowledgements.markdown

@@ -440,4 +440,21 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 SOFTWARE.
 
 
+
+## iOS-KS3SDK
+
+Copyright (c) 2017 Kingsoft.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 Generated by CocoaPods - https://cocoapods.org
 Generated by CocoaPods - https://cocoapods.org

+ 23 - 0
KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-acknowledgements.plist

@@ -604,6 +604,29 @@ SOFTWARE.
 		</dict>
 		</dict>
 		<dict>
 		<dict>
 			<key>FooterText</key>
 			<key>FooterText</key>
+			<string>Copyright (c) 2017 Kingsoft.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+</string>
+			<key>License</key>
+			<string>Apache License, Version 2.0</string>
+			<key>Title</key>
+			<string>iOS-KS3SDK</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
 			<string>Generated by CocoaPods - https://cocoapods.org</string>
 			<string>Generated by CocoaPods - https://cocoapods.org</string>
 			<key>Title</key>
 			<key>Title</key>
 			<string></string>
 			<string></string>

+ 1 - 0
KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks-Debug-input-files.xcfilelist

@@ -17,6 +17,7 @@ ${BUILT_PRODUCTS_DIR}/Whiteboard/Whiteboard.framework
 ${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework
 ${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework
 ${BUILT_PRODUCTS_DIR}/ZKCycleScrollView/ZKCycleScrollView.framework
 ${BUILT_PRODUCTS_DIR}/ZKCycleScrollView/ZKCycleScrollView.framework
 ${BUILT_PRODUCTS_DIR}/dsBridge/dsBridge.framework
 ${BUILT_PRODUCTS_DIR}/dsBridge/dsBridge.framework
+${BUILT_PRODUCTS_DIR}/iOS-KS3SDK/iOS_KS3SDK.framework
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/ChatRoom/RongChatRoom.framework/RongChatRoom
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/ChatRoom/RongChatRoom.framework/RongChatRoom
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/CustomerService/RongCustomerService.framework/RongCustomerService
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/CustomerService/RongCustomerService.framework/RongCustomerService
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/Discussion/RongDiscussion.framework/RongDiscussion
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/Discussion/RongDiscussion.framework/RongDiscussion

+ 1 - 0
KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks-Debug-output-files.xcfilelist

@@ -16,6 +16,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Whiteboard.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YYModel.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YYModel.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZKCycleScrollView.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZKCycleScrollView.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/dsBridge.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/dsBridge.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/iOS_KS3SDK.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongChatRoom.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongChatRoom.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongCustomerService.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongCustomerService.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongDiscussion.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongDiscussion.framework

+ 1 - 0
KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks-Release-input-files.xcfilelist

@@ -17,6 +17,7 @@ ${BUILT_PRODUCTS_DIR}/Whiteboard/Whiteboard.framework
 ${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework
 ${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework
 ${BUILT_PRODUCTS_DIR}/ZKCycleScrollView/ZKCycleScrollView.framework
 ${BUILT_PRODUCTS_DIR}/ZKCycleScrollView/ZKCycleScrollView.framework
 ${BUILT_PRODUCTS_DIR}/dsBridge/dsBridge.framework
 ${BUILT_PRODUCTS_DIR}/dsBridge/dsBridge.framework
+${BUILT_PRODUCTS_DIR}/iOS-KS3SDK/iOS_KS3SDK.framework
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/ChatRoom/RongChatRoom.framework/RongChatRoom
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/ChatRoom/RongChatRoom.framework/RongChatRoom
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/CustomerService/RongCustomerService.framework/RongCustomerService
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/CustomerService/RongCustomerService.framework/RongCustomerService
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/Discussion/RongDiscussion.framework/RongDiscussion
 ${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/Discussion/RongDiscussion.framework/RongDiscussion

+ 1 - 0
KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks-Release-output-files.xcfilelist

@@ -16,6 +16,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Whiteboard.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YYModel.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YYModel.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZKCycleScrollView.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZKCycleScrollView.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/dsBridge.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/dsBridge.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/iOS_KS3SDK.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongChatRoom.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongChatRoom.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongCustomerService.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongCustomerService.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongDiscussion.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RongDiscussion.framework

+ 2 - 0
KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-frameworks.sh

@@ -194,6 +194,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ZKCycleScrollView/ZKCycleScrollView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ZKCycleScrollView/ZKCycleScrollView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/dsBridge/dsBridge.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/dsBridge/dsBridge.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/iOS-KS3SDK/iOS_KS3SDK.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/ChatRoom/RongChatRoom.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/ChatRoom/RongChatRoom.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/CustomerService/RongCustomerService.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/CustomerService/RongCustomerService.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/Discussion/RongDiscussion.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/Discussion/RongDiscussion.framework"
@@ -224,6 +225,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ZKCycleScrollView/ZKCycleScrollView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ZKCycleScrollView/ZKCycleScrollView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/dsBridge/dsBridge.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/dsBridge/dsBridge.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/iOS-KS3SDK/iOS_KS3SDK.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/ChatRoom/RongChatRoom.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/ChatRoom/RongChatRoom.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/CustomerService/RongCustomerService.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/CustomerService/RongCustomerService.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/Discussion/RongDiscussion.framework"
   install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/RongCloudIM/Discussion/RongDiscussion.framework"

Some files were not shown because too many files changed in this diff