Explorar o código

公告和最近课程

Steven %!s(int64=3) %!d(string=hai) anos
pai
achega
c231e10d7d
Modificáronse 63 ficheiros con 1457 adicións e 240 borrados
  1. 22 10
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. BIN=BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 88 56
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 2 2
      KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m
  5. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/course_tips.imageset/Contents.json
  6. BIN=BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/course_tips.imageset/course_tips@2x.png
  7. BIN=BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/course_tips.imageset/course_tips@3x.png
  8. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_icon.imageset/Contents.json
  9. BIN=BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_icon.imageset/notice_icon@2x.png
  10. BIN=BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_icon.imageset/notice_icon@3x.png
  11. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_more.imageset/Contents.json
  12. BIN=BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_more.imageset/notice_more@2x.png
  13. BIN=BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_more.imageset/notice_more@3x.png
  14. 46 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  15. 73 1
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  16. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Custom/KSChoosePicker.h
  17. 18 3
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Custom/KSChoosePicker.m
  18. 7 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Custom/KSFullDatePicker.m
  19. 0 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/GroupNotice/View/NoticeEditBodyView.m
  20. 0 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupCreateView.m
  21. 24 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/AccompanyCourse/Controller/AccompanyDetailViewController.m
  22. 198 7
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m
  23. 4 4
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/Controller/IncomeCountViewController.m
  24. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/View/KSMutilDatePicker.m
  25. 33 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/NoticeSourceModel.h
  26. 190 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/NoticeSourceModel.m
  27. 29 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/RecentCourseModel.h
  28. 158 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/RecentCourseModel.m
  29. 3 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MyMusicBodyView.m
  30. 45 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/Controller/MyCourseViewController.m
  31. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonBodyView.h
  32. 35 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonBodyView.m
  33. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyVideoCourseBodyView.h
  34. 31 5
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyVideoCourseBodyView.m
  35. 5 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/ReceiveEvaluate/Controller/ReceiveEvaluateListController.m
  36. 0 16
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/ClassNoticeView.h
  37. 0 20
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/ClassNoticeView.m
  38. 0 18
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/ClassNoticeView.xib
  39. 20 14
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeBodyView.xib
  40. 30 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecentCourseView.h
  41. 61 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecentCourseView.m
  42. 112 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecentCourseView.xib
  43. 12 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/PublicNoticeView.h
  44. 27 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/PublicNoticeView.m
  45. 84 8
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/PublicNoticeView.xib
  46. 0 7
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/CreateLiveBodyView.m
  47. 0 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/View/FirstSettingBodyView.m
  48. 1 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/View/LoginBodyView.m
  49. 1 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/View/PasswordBodyView.m
  50. 0 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/View/AddressDetailBodyView.m
  51. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/View/KSAddressPickerView.m
  52. 0 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/View/MyAddressListCell.m
  53. 6 5
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/Controller/BandCardViewController.m
  54. 4 5
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/Controller/UnbindCardViewController.m
  55. 1 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/View/CardBandBodyView.m
  56. 1 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/View/UnbindBodyView.m
  57. 0 4
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleIntroduceCell.m
  58. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageCourseView.m
  59. 0 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/FeedbackBodyView.m
  60. 1 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/ModifyBodyView.m
  61. 0 4
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/PhoneChangeBodyView.m
  62. 0 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/PhoneCheckBodyView.m
  63. 0 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/VeriCheckView.m

+ 22 - 10
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -461,6 +461,8 @@
 		BC41104A2806706800800BD9 /* HomeworkListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4110482806706800800BD9 /* HomeworkListCell.xib */; };
 		BC41104D280678E600800BD9 /* HomeworkSortView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC41104C280678E600800BD9 /* HomeworkSortView.m */; };
 		BC41104F280678ED00800BD9 /* HomeworkSortView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC41104E280678ED00800BD9 /* HomeworkSortView.xib */; };
+		BC483231282A646A005F534C /* HomeRecentCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC483230282A646A005F534C /* HomeRecentCourseView.m */; };
+		BC483233282A6473005F534C /* HomeRecentCourseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC483232282A6473005F534C /* HomeRecentCourseView.xib */; };
 		BC48C3AE28292FB600EE65C5 /* ReceiveHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC48C3AD28292FB600EE65C5 /* ReceiveHeaderView.m */; };
 		BC48C3B028292FBE00EE65C5 /* ReceiveHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC48C3AF28292FBE00EE65C5 /* ReceiveHeaderView.xib */; };
 		BC48C3B4282931C000EE65C5 /* ReceiveEvaluateCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC48C3B2282931C000EE65C5 /* ReceiveEvaluateCell.m */; };
@@ -477,8 +479,6 @@
 		BC4BCE7F2823B66A00522C8B /* AddressDetailBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4BCE7E2823B66A00522C8B /* AddressDetailBodyView.xib */; };
 		BC58E7D3281B9630004B0893 /* PublicNoticeView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC58E7D2281B9630004B0893 /* PublicNoticeView.m */; };
 		BC58E7D5281B9637004B0893 /* PublicNoticeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC58E7D4281B9637004B0893 /* PublicNoticeView.xib */; };
-		BC58E7D8281B964A004B0893 /* ClassNoticeView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC58E7D7281B964A004B0893 /* ClassNoticeView.m */; };
-		BC58E7DA281B9650004B0893 /* ClassNoticeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC58E7D9281B9650004B0893 /* ClassNoticeView.xib */; };
 		BC58E7DD281B969B004B0893 /* MinePageTopView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC58E7DC281B969B004B0893 /* MinePageTopView.m */; };
 		BC58E7DF281B96A4004B0893 /* MinePageTopView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC58E7DE281B96A4004B0893 /* MinePageTopView.xib */; };
 		BC5EB5A92803D85300B4A3B0 /* AccompanyAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB5A82803D85300B4A3B0 /* AccompanyAlertView.m */; };
@@ -523,6 +523,8 @@
 		BC8C2C642824EB9000FBA5D5 /* NotiferHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C632824EB9000FBA5D5 /* NotiferHeadView.m */; };
 		BC8C2C662824EB9800FBA5D5 /* NotiferHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC8C2C652824EB9800FBA5D5 /* NotiferHeadView.xib */; };
 		BC8C2C7A28264CF400FBA5D5 /* ReceiveEvaluateListController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8C2C7928264CF400FBA5D5 /* ReceiveEvaluateListController.m */; };
+		BC9473FD282A5E71004B3B27 /* NoticeSourceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC9473FB282A5E71004B3B27 /* NoticeSourceModel.m */; };
+		BCA193B5282A80AA004A585D /* RecentCourseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA193B3282A80A9004A585D /* RecentCourseModel.m */; };
 		BCA723FB2806A96000DA0D0D /* HomeworkDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA723FA2806A96000DA0D0D /* HomeworkDetailViewController.m */; };
 		BCA723FF2806AEA000DA0D0D /* AccompanyHomeworkCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA723FD2806AEA000DA0D0D /* AccompanyHomeworkCell.m */; };
 		BCA724002806AEA000DA0D0D /* AccompanyHomeworkCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCA723FE2806AEA000DA0D0D /* AccompanyHomeworkCell.xib */; };
@@ -1562,6 +1564,9 @@
 		BC41104B280678E600800BD9 /* HomeworkSortView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeworkSortView.h; sourceTree = "<group>"; };
 		BC41104C280678E600800BD9 /* HomeworkSortView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeworkSortView.m; sourceTree = "<group>"; };
 		BC41104E280678ED00800BD9 /* HomeworkSortView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeworkSortView.xib; sourceTree = "<group>"; };
+		BC48322F282A646A005F534C /* HomeRecentCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeRecentCourseView.h; sourceTree = "<group>"; };
+		BC483230282A646A005F534C /* HomeRecentCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeRecentCourseView.m; sourceTree = "<group>"; };
+		BC483232282A6473005F534C /* HomeRecentCourseView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeRecentCourseView.xib; sourceTree = "<group>"; };
 		BC48C3AC28292FB600EE65C5 /* ReceiveHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReceiveHeaderView.h; sourceTree = "<group>"; };
 		BC48C3AD28292FB600EE65C5 /* ReceiveHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReceiveHeaderView.m; sourceTree = "<group>"; };
 		BC48C3AF28292FBE00EE65C5 /* ReceiveHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ReceiveHeaderView.xib; sourceTree = "<group>"; };
@@ -1587,9 +1592,6 @@
 		BC58E7D1281B9630004B0893 /* PublicNoticeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PublicNoticeView.h; sourceTree = "<group>"; };
 		BC58E7D2281B9630004B0893 /* PublicNoticeView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PublicNoticeView.m; sourceTree = "<group>"; };
 		BC58E7D4281B9637004B0893 /* PublicNoticeView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PublicNoticeView.xib; sourceTree = "<group>"; };
-		BC58E7D6281B964A004B0893 /* ClassNoticeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClassNoticeView.h; sourceTree = "<group>"; };
-		BC58E7D7281B964A004B0893 /* ClassNoticeView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClassNoticeView.m; sourceTree = "<group>"; };
-		BC58E7D9281B9650004B0893 /* ClassNoticeView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ClassNoticeView.xib; sourceTree = "<group>"; };
 		BC58E7DB281B969B004B0893 /* MinePageTopView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageTopView.h; sourceTree = "<group>"; };
 		BC58E7DC281B969B004B0893 /* MinePageTopView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageTopView.m; sourceTree = "<group>"; };
 		BC58E7DE281B96A4004B0893 /* MinePageTopView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageTopView.xib; sourceTree = "<group>"; };
@@ -1661,6 +1663,10 @@
 		BC8C2C652824EB9800FBA5D5 /* NotiferHeadView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NotiferHeadView.xib; sourceTree = "<group>"; };
 		BC8C2C7828264CF400FBA5D5 /* ReceiveEvaluateListController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReceiveEvaluateListController.h; sourceTree = "<group>"; };
 		BC8C2C7928264CF400FBA5D5 /* ReceiveEvaluateListController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReceiveEvaluateListController.m; sourceTree = "<group>"; };
+		BC9473FB282A5E71004B3B27 /* NoticeSourceModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NoticeSourceModel.m; sourceTree = "<group>"; };
+		BC9473FC282A5E71004B3B27 /* NoticeSourceModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoticeSourceModel.h; sourceTree = "<group>"; };
+		BCA193B3282A80A9004A585D /* RecentCourseModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecentCourseModel.m; sourceTree = "<group>"; };
+		BCA193B4282A80A9004A585D /* RecentCourseModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecentCourseModel.h; sourceTree = "<group>"; };
 		BCA723F92806A96000DA0D0D /* HomeworkDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeworkDetailViewController.h; sourceTree = "<group>"; };
 		BCA723FA2806A96000DA0D0D /* HomeworkDetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeworkDetailViewController.m; sourceTree = "<group>"; };
 		BCA723FC2806AEA000DA0D0D /* AccompanyHomeworkCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccompanyHomeworkCell.h; sourceTree = "<group>"; };
@@ -3196,6 +3202,10 @@
 		277935FC27E32BBF0010E277 /* Model */ = {
 			isa = PBXGroup;
 			children = (
+				BC9473FC282A5E71004B3B27 /* NoticeSourceModel.h */,
+				BC9473FB282A5E71004B3B27 /* NoticeSourceModel.m */,
+				BCA193B4282A80A9004A585D /* RecentCourseModel.h */,
+				BCA193B3282A80A9004A585D /* RecentCourseModel.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -3215,9 +3225,9 @@
 				BC58E7D1281B9630004B0893 /* PublicNoticeView.h */,
 				BC58E7D2281B9630004B0893 /* PublicNoticeView.m */,
 				BC58E7D4281B9637004B0893 /* PublicNoticeView.xib */,
-				BC58E7D6281B964A004B0893 /* ClassNoticeView.h */,
-				BC58E7D7281B964A004B0893 /* ClassNoticeView.m */,
-				BC58E7D9281B9650004B0893 /* ClassNoticeView.xib */,
+				BC48322F282A646A005F534C /* HomeRecentCourseView.h */,
+				BC483230282A646A005F534C /* HomeRecentCourseView.m */,
+				BC483232282A6473005F534C /* HomeRecentCourseView.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -5066,6 +5076,7 @@
 				BC5EB5C12804085500B4A3B0 /* MyStyleVideoCell.xib in Resources */,
 				BC4BCE772823AA3F00522C8B /* areainfo.json in Resources */,
 				BCF1BA5627F5CBA100FA36C4 /* LiveSeatApplyView.xib in Resources */,
+				BC483233282A6473005F534C /* HomeRecentCourseView.xib in Resources */,
 				2708565927ED961900EC8E72 /* ApplyBottomView.xib in Resources */,
 				BCB399AE27F946AA00AFF376 /* CourseNavView.xib in Resources */,
 				275B170D27EB14AC0081FDEF /* KSChatListSearchView.xib in Resources */,
@@ -5101,7 +5112,6 @@
 				BCA9CE3A27FD93EB00D558C6 /* AccompanyStudentEvaCell.xib in Resources */,
 				BCE6A09627F823DC00C97704 /* MinePageMusicCell.xib in Resources */,
 				BC4BCE722823A03A00522C8B /* AddressBottomView.xib in Resources */,
-				BC58E7DA281B9650004B0893 /* ClassNoticeView.xib in Resources */,
 				277D431F27E999A000107DB7 /* ModifyBodyView.xib in Resources */,
 				BC7CFFBB2817E9FC00CAEB21 /* stacked_line_chart.html in Resources */,
 				27A54CFE27E9BDC5007309A3 /* AboutUsBodyView.xib in Resources */,
@@ -5295,6 +5305,7 @@
 				27A2F62927E6C996009E2380 /* KSImageAlert.m in Sources */,
 				277931FB27E30FC20010E277 /* UIImage+Color.m in Sources */,
 				BCC9F43A27F69BD200647449 /* SongDownloadCallbackMessage.m in Sources */,
+				BC9473FD282A5E71004B3B27 /* NoticeSourceModel.m in Sources */,
 				2779322F27E30FC30010E277 /* ALCalendarHelper.m in Sources */,
 				2779335727E316DD0010E277 /* WMLightView.m in Sources */,
 				277931DA27E30FC20010E277 /* UIImage+UIImageScale.m in Sources */,
@@ -5418,7 +5429,6 @@
 				27F9CB0B27EC5C06003E0FE4 /* KSSelectConversationViewController.m in Sources */,
 				2755C08D27ED5DB2007D9070 /* GroupApplyChooseCell.m in Sources */,
 				2779321A27E30FC30010E277 /* SkipTextView.m in Sources */,
-				BC58E7D8281B964A004B0893 /* ClassNoticeView.m in Sources */,
 				277931C927E30FC20010E277 /* DiskFreeSpaceManager.m in Sources */,
 				2779321627E30FC30010E277 /* StoreShopCaterview.m in Sources */,
 				277931D127E30FC20010E277 /* UrlDecode.m in Sources */,
@@ -5507,6 +5517,7 @@
 				BCC9F43627F69BD200647449 /* SongDownloadMessage.m in Sources */,
 				275B170527EB13420081FDEF /* KSChatListViewController.m in Sources */,
 				277931C827E30FC20010E277 /* KSVideoEditor.m in Sources */,
+				BCA193B5282A80AA004A585D /* RecentCourseModel.m in Sources */,
 				2779326B27E30FD80010E277 /* FSCalendarSeparatorDecorationView.m in Sources */,
 				277932E427E310070010E277 /* TZVideoEditedPreviewController.m in Sources */,
 				277931D327E30FC20010E277 /* UIScrollView+KSTouch.m in Sources */,
@@ -5744,6 +5755,7 @@
 				275E3DB027F45CA60010EC30 /* KSLiveChatroomLike.m in Sources */,
 				2773204727EDB670008FAECA /* GroupNoticeEditController.m in Sources */,
 				277931C427E30FC20010E277 /* NSMutableArray+KSSafe.m in Sources */,
+				BC483231282A646A005F534C /* HomeRecentCourseView.m in Sources */,
 				275B172127EB1BE60081FDEF /* KSSearchResultViewCell.m in Sources */,
 				277931C327E30FC20010E277 /* NSArray+KSSafe.m in Sources */,
 				BCE6A09527F823DC00C97704 /* MinePageMusicCell.m in Sources */,

BIN=BIN
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate


+ 88 - 56
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -106,8 +106,8 @@
             filePath = "KulexiuForTeacher/Module/Home/MyCourse/View/MyVideoCourseBodyView.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "313"
-            endingLineNumber = "313"
+            startingLineNumber = "339"
+            endingLineNumber = "339"
             landmarkName = "-showAuthView"
             landmarkType = "7">
          </BreakpointContent>
@@ -131,56 +131,8 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "F4C2A4F4-F75C-4E8E-A876-92C59B8B9ADE"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonBodyView.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "244"
-            endingLineNumber = "244"
-            landmarkName = "-sortWithType:"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "938061E9-04A7-4726-A9D7-497C8CD0D649"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Course/AccompanyCourse/Controller/AccompanyDetailViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "68"
-            endingLineNumber = "68"
-            landmarkName = "-requestHomeworkMessage"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "F3EC6F01-DE25-44BF-A859-FD947C4E60E3"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Course/AccompanyCourse/Controller/AccompanyDetailViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "93"
-            endingLineNumber = "93"
-            landmarkName = "-requestEvaluateMessage"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
             uuid = "75BE27A9-82AE-4CB6-9829-7AF974E93790"
-            shouldBeEnabled = "Yes"
+            shouldBeEnabled = "No"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoView.m"
@@ -291,16 +243,96 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "EDD42415-D1DA-4F99-AC80-0DE9ED6F86F1"
+            uuid = "46F327E8-372B-4494-B693-F95593F0689E"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Income/Controller/MyIncomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "124"
+            endingLineNumber = "124"
+            landmarkName = "-requestAccountDetail"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "CF1A4725-469A-41BB-9C92-27FFFFCDEFFD"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Home/ReceiveEvaluate/Controller/ReceiveEvaluateListController.m"
+            filePath = "KulexiuForTeacher/Module/Home/Income/Controller/IncomeCountViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "136"
+            endingLineNumber = "136"
+            landmarkName = "-requestData"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "658BE31D-AF13-4821-8CA6-9654A5451024"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Income/Controller/IncomeCountViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "238"
+            endingLineNumber = "238"
+            landmarkName = "-configMessage:headSource:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "AF785028-EFA3-45BA-BAE0-3EA9820B3DFB"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Income/Controller/IncomeCountViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "236"
+            endingLineNumber = "236"
+            landmarkName = "-configMessage:headSource:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "67663265-E51F-447F-A81C-6C7442FBC3B2"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Controller/HomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "251"
+            endingLineNumber = "251"
+            landmarkName = "-cycleScrollView:didSelectItemAtIndex:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "A4E5CD2B-147F-4C71-85D6-01C71191AFE0"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Controller/HomeViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "41"
-            endingLineNumber = "41"
-            landmarkName = "-configDefault"
+            startingLineNumber = "99"
+            endingLineNumber = "99"
+            landmarkName = "-requestRecentCourse"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m

@@ -440,9 +440,9 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
                 ]];
                 [UIApplication sharedApplication].applicationIconBadgeNumber = unreadMsgCount;
                 if (unreadMsgCount >= 1) {
-                    [self.tabBarController noteNewsWithIndex:1 count:unreadMsgCount];
+                    [self.tabBarController noteNewsWithIndex:2 count:unreadMsgCount];
                 } else {
-                    [self.tabBarController clearNewsWithIndex:1];
+                    [self.tabBarController clearNewsWithIndex:2];
                 }
             }
         });

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/course_tips.imageset/Contents.json

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

BIN=BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/course_tips.imageset/course_tips@2x.png


BIN=BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/course_tips.imageset/course_tips@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_icon.imageset/Contents.json

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

BIN=BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_icon.imageset/notice_icon@2x.png


BIN=BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_icon.imageset/notice_icon@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_more.imageset/Contents.json

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

BIN=BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_more.imageset/notice_more@2x.png


BIN=BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/notice_more.imageset/notice_more@3x.png


+ 46 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h

@@ -283,6 +283,52 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)homeCountMessage:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// 首页公告查询
+//  /api-cms/helpCenterContent/list
+
+/// 公告查询
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)helpCenterContentListRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /api-teacher/courseSchedule/queryLiveAndVideo
+
+/// 首页最近课程
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)queryRecentLiveAndVideo:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// 声部查询
+// /api-teacher/teacher/querySubjectItem
+
+/// 获取声部搜索下拉框
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)querySubjectItemRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /api-teacher/sysSuggestion/add
+/**
+ 意见反馈
+ 
+ @param post post
+ @param content 内容
+ @param mobileNo 手机号
+ @param success 成功
+ @param faliure 失败
+ */
++ (void)suggestionAddRequest:(NSString *)post content:(NSString *)content mobileNo:(NSString *)mobileNo success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+
+// /api-teacher/courseSchedule/selectRoomConfig
+
+/// 获取网络教室进入房间参数
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)selectRoomConfigRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 #pragma mark -------- 群组服务
 // /api-teacher/imUserFriend/queryAll
 

+ 73 - 1
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -693,7 +693,79 @@
     NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/home/count"];
     [self request:get andWithUrl:url and:nil success:success faliure:faliure];
 }
+// 首页公告查询
+//  /api-cms/helpCenterContent/list
 
+/// 公告查询
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)helpCenterContentListRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-cms/helpCenterContent/list"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@"2" forKey:@"catalogIds"];
+    [parm setValue:@"TEACHER" forKey:@"catalogType"];
+    [parm setValue:@(1) forKey:@"page"];
+    [parm setValue:@(5) forKey:@"rows"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-teacher/courseSchedule/queryLiveAndVideo
+
+/// 首页最近课程
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)queryRecentLiveAndVideo:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/courseSchedule/queryLiveAndVideo"];
+    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+}
+
+// /api-teacher/teacher/querySubjectItem
+
+/// 获取声部搜索下拉框
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)querySubjectItemRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/teacher/querySubjectItem"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-teacher/sysSuggestion/add
+/**
+ 意见反馈
+ 
+ @param post post
+ @param content 内容
+ @param mobileNo 手机号
+ @param success 成功
+ @param faliure 失败
+ */
++ (void)suggestionAddRequest:(NSString *)post content:(NSString *)content mobileNo:(NSString *)mobileNo success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@"iOS" forKey:@"clientType"];
+    [parm setValue:content forKey:@"content"];
+    [parm setValue:mobileNo forKey:@"mobileNo"];
+    [parm setValue:@"APP" forKey:@"type"];
+    NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-teacher/sysSuggestion/add"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-teacher/courseSchedule/selectRoomConfig
+
+/// 获取网络教室进入房间参数
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)selectRoomConfigRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-teacher/courseSchedule/selectRoomConfig"];
+    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+}
 #pragma mark -------- 群组服务
 // /api-teacher/imUserFriend/queryAll
 
@@ -1182,7 +1254,7 @@
     [self configRequestMethodJSON];
     NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-teacher/courseReplied/myReplied"];
     NSMutableDictionary *parm = [NSMutableDictionary dictionary];
-    [parm setValue:classMonth forKey:@"classMonth"];
+    [parm setValue:classMonth forKey:@"classDate"];
     [parm setValue:search forKey:@"studentName"];
     [parm setValue:@(page) forKey:@"page"];
     [parm setValue:@(rows) forKey:@"rows"];

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Custom/KSChoosePicker.h

@@ -9,12 +9,12 @@
 #import <UIKit/UIKit.h>
 
 typedef void(^PickerChooseCallback)(NSString * _Nonnull returnValue, NSInteger chooseIndex);
-
+typedef void(^PickerCancelCallback)(void);
 NS_ASSUME_NONNULL_BEGIN
 
 @interface KSChoosePicker : UIView
 
-- (instancetype)initWithTitle:(NSString * __nullable)title sourceData:(NSArray *)sourceData chooseReturnWithBlock:(PickerChooseCallback)callback;
+- (instancetype)initWithTitle:(NSString * __nullable)title sourceData:(NSArray *)sourceData chooseReturnWithBlock:(PickerChooseCallback)callback cancel:(PickerCancelCallback)cancelCallback;
 
 - (void)showPicker;
 @end

+ 18 - 3
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Custom/KSChoosePicker.m

@@ -17,18 +17,21 @@
 @property (nonatomic, strong) UIPickerView *picker;   // 选择器
 
 @property (nonatomic, copy) PickerChooseCallback callback;
-
+@property (nonatomic, copy) PickerCancelCallback cancelCallback;
 @property (nonatomic, assign) NSInteger chooseIndex;
 
 @end
 
 @implementation KSChoosePicker
 
-- (instancetype)initWithTitle:(NSString * __nullable)title sourceData:(NSArray *)sourceData  chooseReturnWithBlock:(PickerChooseCallback)callback {
+- (instancetype)initWithTitle:(NSString * __nullable)title sourceData:(NSArray *)sourceData chooseReturnWithBlock:(PickerChooseCallback)callback cancel:(PickerCancelCallback)cancelCallback {
     if (self = [super init]) {
         if (callback) {
             self.callback = callback;
         }
+        if (cancelCallback) {
+            self.cancelCallback = cancelCallback;
+        }
         self.sourceData = sourceData;
         self.frame = CGRectMake(0, 0, kScreen_Width, kScreen_Height);
         self.backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreen_Width, kScreen_Height)];
@@ -118,6 +121,9 @@
 }
 
 - (void)cancleButtonAction:(UIButton *)sender {
+    if (self.cancelCallback) {
+        self.cancelCallback();
+    }
     [UIView animateWithDuration:0.3f animations:^{
         self.displayView.frame = CGRectMake(0, kScreen_Height, kScreen_Width, 255);
     } completion:^(BOOL finished) {
@@ -138,7 +144,9 @@
 }
 
 - (void)tapAction:(UITapGestureRecognizer *)gesture {
-    
+    if (self.cancelCallback) {
+        self.cancelCallback();
+    }
     [UIView animateWithDuration:0.3f animations:^{
         self.displayView.frame = CGRectMake(0, kScreen_Height, kScreen_Width, 255);
     } completion:^(BOOL finished) {
@@ -146,6 +154,13 @@
     }];
 }
 
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+    if ([touch.view isDescendantOfView:self.displayView]) {
+        return NO;
+    }
+    return YES;
+}
+
 - (void)showPicker {
     UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
     [window addSubview:self];

+ 7 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Custom/KSFullDatePicker.m

@@ -465,6 +465,13 @@ typedef NS_ENUM(NSInteger, PickViewTag) {
     
 }
 
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+    if ([touch.view isDescendantOfView:self.timeView]) {
+        return NO;
+    }
+    return YES;
+}
+
 #pragma mark - UIPickerViewDataSource
 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
     return 1;

+ 0 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/GroupNotice/View/NoticeEditBodyView.m

@@ -90,9 +90,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([text isEqualToString:@""]) {
-        return YES;
-    }
     if (textView == self.titleView) {
         NSString *newText = [[textView text] stringByReplacingCharactersInRange:range withString:text];
         if (newText.length > 25) {

+ 0 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupCreateView.m

@@ -66,9 +66,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([text isEqualToString:@""]) {
-        return YES;
-    }
     return YES;
 }
 
@@ -87,9 +84,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
     return YES;
 }
 /*

+ 24 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/AccompanyCourse/Controller/AccompanyDetailViewController.m

@@ -61,6 +61,22 @@
 - (void)requestCourseInfoMessage {
     [self requestHomeworkMessage];
     [self requestEvaluateMessage];
+    [self requestRoomConfig];
+}
+
+- (void)requestRoomConfig {
+    [KSNetworkingManager selectRoomConfigRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSDictionary *result = [dic dictionaryValueForKey:@"data"];
+            self.joinRoomBeforeTime = [result integerValueForKey:@"practiceStartTime"];
+            self.quitRomeEndTime = [result integerValueForKey:@"practiceEndTime"];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
 }
 
 - (void)requestHomeworkMessage {
@@ -212,6 +228,10 @@
 }
 
 - (void)evaluateCourse {
+    if (![self.homeworkModel.courseStatus isEqualToString:@"COMPLETE"]) {
+        [self MBPShow:@"课程结束之后才可以评价哦~"];
+        return;
+    }
     self.alertView = [AccompanyAlertView shareInstance];
     self.alertView.alertTitle.text = @"评价学员";
     self.alertView.tipsLabel.text = @"请输入您对本次课程学员表现的评价";
@@ -244,6 +264,10 @@
 }
 
 - (void)arrangeHomework {
+    if (![self.homeworkModel.courseStatus isEqualToString:@"COMPLETE"]) {
+        [self MBPShow:@"课程结束之后才可以布置作业哦~"];
+        return;
+    }
     self.alertView = [AccompanyAlertView shareInstance];
     self.alertView.alertTitle.text = @"布置作业";
     self.alertView.tipsLabel.text = @"请输入本次课程作业内容";

+ 198 - 7
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m

@@ -19,8 +19,15 @@
 #import "TeacherInfo.h"
 #import "MyIncomeViewController.h"
 #import "ReceiveEvaluateListController.h"
+#import "PublicNoticeView.h"
+#import "SDCycleScrollView.h"
+#import "NoticeSourceModel.h"
+#import "HomeRecentCourseView.h"
+#import "AccompanyDetailViewController.h"
+#import "RecentCourseModel.h"
 
-@interface HomeViewController ()
+
+@interface HomeViewController ()<SDCycleScrollViewDelegate>
 
 @property (nonatomic, strong) HomeNavView *navView;
 
@@ -30,6 +37,15 @@
 
 @property (nonatomic, strong) TeacherInfo *mineInfo;
 
+@property (nonatomic, strong) PublicNoticeView *noticeView;
+
+@property (nonatomic, strong) SDCycleScrollView *noticeScrollView;
+
+@property (nonatomic, strong) NSMutableArray *bannerArray; // banner数据
+@property (nonatomic, strong) NSMutableArray *titleArray; // 标题数组
+
+@property (nonatomic, strong) HomeRecentCourseView *courseView;
+
 @end
 
 @implementation HomeViewController
@@ -59,6 +75,78 @@
     }];
 }
 
+- (void)requestNotice {
+    [KSNetworkingManager helpCenterContentListRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
+            for (NSDictionary *parm in sourceArray) {
+                NoticeSourceModel *bannerModel = [[NoticeSourceModel alloc] initWithDictionary:parm];
+                [self.bannerArray addObject:bannerModel];
+                [self.titleArray addObject:bannerModel.title];
+            }
+            [self refreshBanner];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)requestRecentCourse {
+    [KSNetworkingManager queryRecentLiveAndVideo:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSDictionary *parm = [[dic dictionaryValueForKey:@"data"] dictionaryValueForKey:@"recentCourses"];
+            if (parm == nil) {
+                [self refreshCourseView:nil];
+            }
+            else {
+                RecentCourseModel *model = [[RecentCourseModel alloc] initWithDictionary:parm];
+                [self refreshCourseView:model];
+            }
+        }
+        else {
+            
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)refreshCourseView:(RecentCourseModel *)model {
+    if (model) {
+        [self.courseView configCourseMessage:model];
+        self.courseView.hidden = NO;
+        [self.courseView mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.mas_equalTo(80.0f);
+        }];
+    }
+    else {
+        self.courseView.hidden = YES;
+        [self.courseView mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.mas_equalTo(CGFLOAT_MIN);
+        }];
+    }
+}
+
+- (void)refreshBanner {
+    if (self.titleArray.count) {
+        self.noticeView.hidden = NO;
+        [self.noticeView mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.mas_equalTo(50.0f);
+        }];
+    }
+    else {
+        self.noticeView.hidden = YES;
+        [self.noticeView mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.mas_equalTo(CGFLOAT_MIN);
+        }];
+    }
+    self.noticeScrollView.titlesGroup = self.titleArray;
+}
+
+
 - (void)requestCountMessage {
     [KSNetworkingManager homeCountMessage:KS_GET success:^(NSDictionary * _Nonnull dic) {
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
@@ -102,27 +190,48 @@
         make.height.mas_equalTo(kNaviBarHeight);
     }];
     
-    [self.view addSubview:self.headView];
+   
+    
+    [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.navView.mas_bottom);
+        make.bottom.mas_equalTo(self.view.mas_bottom);
+    }];
+    self.scrollView.backgroundColor = [UIColor clearColor];
+    
+    [self.scrollView addSubview:self.headView];
     CGFloat headHeight = [self.headView getViewHeight];
     [self.headView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.view);
-        make.top.mas_equalTo(self.navView.mas_bottom);
+        make.top.mas_equalTo(self.scrollView.mas_top);
         make.height.mas_equalTo(headHeight);
     }];
     
-    [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) {
+    [self.scrollView addSubview:self.noticeView];
+    [self.noticeView 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);
+        make.height.mas_equalTo(CGFLOAT_MIN);
+    }];
+    [self.noticeView.adView addSubview:self.noticeScrollView];
+    [self.noticeScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.mas_equalTo(self.noticeView.adView);
+    }];
+    
+    [self.scrollView addSubview:self.courseView];
+    [self.courseView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.noticeView.mas_bottom);
+        make.height.mas_equalTo(CGFLOAT_MIN);
     }];
-    self.scrollView.backgroundColor = [UIColor clearColor];
     
     [self.scrollView addSubview:self.bodyView];
     CGFloat bodyViewHeight = [self.bodyView getViewHeight];
     [self.bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.view);
-        make.top.mas_equalTo(self.scrollView.mas_top);
+        make.top.mas_equalTo(self.courseView.mas_bottom);
         make.height.mas_equalTo(bodyViewHeight);
+        make.bottom.mas_equalTo(self.scrollView.mas_bottom);
     }];
 }
 
@@ -130,8 +239,18 @@
     [super viewWillAppear:animated];
     [self requestUserInfo];
     [self requestCountMessage];
+    [self requestNotice];
+    [self requestRecentCourse];
 }
 
+#pragma mark ----- SDCycleScrollViewDelegate
+- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index {
+    NoticeSourceModel *bannerModel = self.bannerArray[index];
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@/#/helpCenterDetail?id=%@",WEBHOST, bannerModel.internalBaseClassIdentifier];
+    [self.navigationController pushViewController:webCtrl animated:YES];
+    
+}
 #pragma mark ----- lazying
 
 - (HomeNavView *)navView {
@@ -167,6 +286,78 @@
     [self.navigationController pushViewController:webCtrl animated:YES];
 }
 
+- (PublicNoticeView *)noticeView {
+    if (!_noticeView) {
+        _noticeView = [PublicNoticeView shareInstance];
+        MJWeakSelf;
+        [_noticeView moreCallback:^{
+            [weakSelf moreNotice];
+        }];
+    }
+    return _noticeView;
+}
+
+#pragma mark -- lazying
+- (SDCycleScrollView *)noticeScrollView {
+    if (!_noticeScrollView) {
+        _noticeScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectZero delegate:self placeholderImage:[UIImage new]];
+        _noticeScrollView.onlyDisplayText = YES;
+        _noticeScrollView.autoScroll = YES;
+        _noticeScrollView.scrollDirection = UICollectionViewScrollDirectionVertical;
+        _noticeScrollView.titleLabelTextColor = HexRGB(0x1a1a1a);
+        _noticeScrollView.titleLabelBackgroundColor = [UIColor whiteColor];
+        _noticeScrollView.titleLabelTextFont = [UIFont systemFontOfSize:11];
+        _noticeScrollView.titlesGroup = self.titleArray;
+    }
+    return _noticeScrollView;
+}
+
+- (NSMutableArray *)bannerArray {
+    if (!_bannerArray) {
+        _bannerArray = [NSMutableArray array];
+    }
+    return _bannerArray;
+}
+
+- (NSMutableArray *)titleArray {
+    if (!_titleArray) {
+        _titleArray = [NSMutableArray array];
+    }
+    return _titleArray;
+}
+
+- (void)moreNotice {
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/helpCenter?catalogType=2"];
+    [self.navigationController pushViewController:webCtrl animated:YES];
+}
+
+- (HomeRecentCourseView *)courseView {
+    if (!_courseView) {
+        _courseView = [HomeRecentCourseView shareInstance];
+        MJWeakSelf;
+        [_courseView joinRoom:^(RECENTCOURSE_TYPE type, RecentCourseModel * _Nonnull courseModel) {
+            [weakSelf joinRoomAction:type roomId:courseModel];
+        }];
+    }
+    return _courseView;
+}
+
+- (void)joinRoomAction:(RECENTCOURSE_TYPE)type roomId:(RecentCourseModel *)courseModel {
+    if (type == RECENTCOURSE_TYPE_ACCOMPANY) {
+        AccompanyDetailViewController *detailVC = [[AccompanyDetailViewController alloc] init];
+        detailVC.courseId = courseModel.courseId;
+        detailVC.courseGroupId = courseModel.courseGroupId;
+        detailVC.studentId = courseModel.teacherId;
+        [self.navigationController pushViewController:detailVC animated:YES];
+    }
+    else {
+        KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+        ctrl.url = [NSString stringWithFormat:@"%@/#/liveDetail?groupId=%@&classId=%@", WEBHOST, courseModel.courseGroupId,courseModel.courseId];
+        [self.navigationController pushViewController:ctrl animated:YES];
+    }
+}
+
 - (HomeBodyView *)bodyView {
     if (!_bodyView) {
         _bodyView = [HomeBodyView shareInstance];

+ 4 - 4
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/Controller/IncomeCountViewController.m

@@ -211,22 +211,22 @@
         
         float practiceAmount = [dic floatValueForKey:@"practiceAmount"];
         NSString *practiceDescString = @"陪练课";
-        [practiceAmountArray addObject:@(practiceAmount)];
+        [practiceAmountArray addObject:[NSString stringWithFormat:@"%.2f",practiceAmount]];
         [practiceArray addObject:practiceDescString];
         
         float liveAmount = [dic floatValueForKey:@"liveAmount"];
         NSString *liveDesc = @"直播课";
-        [liveAmountArray addObject:@(liveAmount)];
+        [liveAmountArray addObject:[NSString stringWithFormat:@"%.2f",liveAmount]];
         [liveArray addObject:liveDesc];
         
         float videoAmount = [dic floatValueForKey:@"videoAmount"];
         NSString *videoDesc = @"视频课";
-        [videoAmountArray addObject:@(videoAmount)];
+        [videoAmountArray addObject:[NSString stringWithFormat:@"%.2f",videoAmount]];
         [videoArray addObject:videoDesc];
         
         float musicAmount = [dic floatValueForKey:@"musicAmount"];
         NSString *musicDesc = @"乐谱";
-        [musicAmountArray addObject:@(musicAmount)];
+        [musicAmountArray addObject:[NSString stringWithFormat:@"%.2f",musicAmount]];
         [musicArray addObject:musicDesc];
     }
     [valueArray addObject:practiceAmountArray];

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/View/KSMutilDatePicker.m

@@ -505,6 +505,12 @@ typedef NS_ENUM(NSInteger, PickViewTag) {
     
 }
 
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+    if ([touch.view isDescendantOfView:self.timeView]) {
+        return NO;
+    }
+    return YES;
+}
 
 - (void)show
 {

+ 33 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/NoticeSourceModel.h

@@ -0,0 +1,33 @@
+//
+//  NoticeSourceModel.h
+//
+//  Created by Steven  on 2022/5/10
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface NoticeSourceModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *modifyOn;
+@property (nonatomic, strong) NSString *createOn;
+@property (nonatomic, strong) NSString *releaseTime;
+@property (nonatomic, strong) NSString *updateBy;
+@property (nonatomic, assign) double releaseStatus;
+@property (nonatomic, strong) NSString *content;
+@property (nonatomic, strong) NSString *catalogType;
+@property (nonatomic, strong) NSString *title;
+@property (nonatomic, assign) double order;
+@property (nonatomic, strong) NSString *updateName;
+@property (nonatomic, assign) double catalogId;
+@property (nonatomic, assign) double status;
+@property (nonatomic, assign) double createBy;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 190 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/NoticeSourceModel.m

@@ -0,0 +1,190 @@
+//
+//  NoticeSourceModel.m
+//
+//  Created by Steven  on 2022/5/10
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "NoticeSourceModel.h"
+
+
+NSString *const kNoticeSourceModelId = @"id";
+NSString *const kNoticeSourceModelModifyOn = @"modifyOn";
+NSString *const kNoticeSourceModelCreateOn = @"createOn";
+NSString *const kNoticeSourceModelReleaseTime = @"releaseTime";
+NSString *const kNoticeSourceModelUpdateBy = @"updateBy";
+NSString *const kNoticeSourceModelReleaseStatus = @"releaseStatus";
+NSString *const kNoticeSourceModelContent = @"content";
+NSString *const kNoticeSourceModelCatalogType = @"catalogType";
+NSString *const kNoticeSourceModelTitle = @"title";
+NSString *const kNoticeSourceModelOrder = @"order";
+NSString *const kNoticeSourceModelUpdateName = @"updateName";
+NSString *const kNoticeSourceModelCatalogId = @"catalogId";
+NSString *const kNoticeSourceModelStatus = @"status";
+NSString *const kNoticeSourceModelCreateBy = @"createBy";
+
+
+@interface NoticeSourceModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation NoticeSourceModel
+
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize modifyOn = _modifyOn;
+@synthesize createOn = _createOn;
+@synthesize releaseTime = _releaseTime;
+@synthesize updateBy = _updateBy;
+@synthesize releaseStatus = _releaseStatus;
+@synthesize content = _content;
+@synthesize catalogType = _catalogType;
+@synthesize title = _title;
+@synthesize order = _order;
+@synthesize updateName = _updateName;
+@synthesize catalogId = _catalogId;
+@synthesize status = _status;
+@synthesize createBy = _createBy;
+
+
++ (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:kNoticeSourceModelId fromDictionary:dict];
+            self.modifyOn = [self objectOrNilForKey:kNoticeSourceModelModifyOn fromDictionary:dict];
+            self.createOn = [self objectOrNilForKey:kNoticeSourceModelCreateOn fromDictionary:dict];
+            self.releaseTime = [self objectOrNilForKey:kNoticeSourceModelReleaseTime fromDictionary:dict];
+            self.updateBy = [self objectOrNilForKey:kNoticeSourceModelUpdateBy fromDictionary:dict];
+            self.releaseStatus = [[self objectOrNilForKey:kNoticeSourceModelReleaseStatus fromDictionary:dict] doubleValue];
+            self.content = [self objectOrNilForKey:kNoticeSourceModelContent fromDictionary:dict];
+            self.catalogType = [self objectOrNilForKey:kNoticeSourceModelCatalogType fromDictionary:dict];
+            self.title = [self objectOrNilForKey:kNoticeSourceModelTitle fromDictionary:dict];
+            self.order = [[self objectOrNilForKey:kNoticeSourceModelOrder fromDictionary:dict] doubleValue];
+            self.updateName = [self objectOrNilForKey:kNoticeSourceModelUpdateName fromDictionary:dict];
+            self.catalogId = [[self objectOrNilForKey:kNoticeSourceModelCatalogId fromDictionary:dict] doubleValue];
+            self.status = [[self objectOrNilForKey:kNoticeSourceModelStatus fromDictionary:dict] doubleValue];
+            self.createBy = [[self objectOrNilForKey:kNoticeSourceModelCreateBy fromDictionary:dict] doubleValue];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.internalBaseClassIdentifier forKey:kNoticeSourceModelId];
+    [mutableDict setValue:self.modifyOn forKey:kNoticeSourceModelModifyOn];
+    [mutableDict setValue:self.createOn forKey:kNoticeSourceModelCreateOn];
+    [mutableDict setValue:self.releaseTime forKey:kNoticeSourceModelReleaseTime];
+    [mutableDict setValue:self.updateBy forKey:kNoticeSourceModelUpdateBy];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.releaseStatus] forKey:kNoticeSourceModelReleaseStatus];
+    [mutableDict setValue:self.content forKey:kNoticeSourceModelContent];
+    [mutableDict setValue:self.catalogType forKey:kNoticeSourceModelCatalogType];
+    [mutableDict setValue:self.title forKey:kNoticeSourceModelTitle];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.order] forKey:kNoticeSourceModelOrder];
+    [mutableDict setValue:self.updateName forKey:kNoticeSourceModelUpdateName];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.catalogId] forKey:kNoticeSourceModelCatalogId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.status] forKey:kNoticeSourceModelStatus];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.createBy] forKey:kNoticeSourceModelCreateBy];
+
+    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:kNoticeSourceModelId];
+    self.modifyOn = [aDecoder decodeObjectForKey:kNoticeSourceModelModifyOn];
+    self.createOn = [aDecoder decodeObjectForKey:kNoticeSourceModelCreateOn];
+    self.releaseTime = [aDecoder decodeObjectForKey:kNoticeSourceModelReleaseTime];
+    self.updateBy = [aDecoder decodeObjectForKey:kNoticeSourceModelUpdateBy];
+    self.releaseStatus = [aDecoder decodeDoubleForKey:kNoticeSourceModelReleaseStatus];
+    self.content = [aDecoder decodeObjectForKey:kNoticeSourceModelContent];
+    self.catalogType = [aDecoder decodeObjectForKey:kNoticeSourceModelCatalogType];
+    self.title = [aDecoder decodeObjectForKey:kNoticeSourceModelTitle];
+    self.order = [aDecoder decodeDoubleForKey:kNoticeSourceModelOrder];
+    self.updateName = [aDecoder decodeObjectForKey:kNoticeSourceModelUpdateName];
+    self.catalogId = [aDecoder decodeDoubleForKey:kNoticeSourceModelCatalogId];
+    self.status = [aDecoder decodeDoubleForKey:kNoticeSourceModelStatus];
+    self.createBy = [aDecoder decodeDoubleForKey:kNoticeSourceModelCreateBy];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_internalBaseClassIdentifier forKey:kNoticeSourceModelId];
+    [aCoder encodeObject:_modifyOn forKey:kNoticeSourceModelModifyOn];
+    [aCoder encodeObject:_createOn forKey:kNoticeSourceModelCreateOn];
+    [aCoder encodeObject:_releaseTime forKey:kNoticeSourceModelReleaseTime];
+    [aCoder encodeObject:_updateBy forKey:kNoticeSourceModelUpdateBy];
+    [aCoder encodeDouble:_releaseStatus forKey:kNoticeSourceModelReleaseStatus];
+    [aCoder encodeObject:_content forKey:kNoticeSourceModelContent];
+    [aCoder encodeObject:_catalogType forKey:kNoticeSourceModelCatalogType];
+    [aCoder encodeObject:_title forKey:kNoticeSourceModelTitle];
+    [aCoder encodeDouble:_order forKey:kNoticeSourceModelOrder];
+    [aCoder encodeObject:_updateName forKey:kNoticeSourceModelUpdateName];
+    [aCoder encodeDouble:_catalogId forKey:kNoticeSourceModelCatalogId];
+    [aCoder encodeDouble:_status forKey:kNoticeSourceModelStatus];
+    [aCoder encodeDouble:_createBy forKey:kNoticeSourceModelCreateBy];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    NoticeSourceModel *copy = [[NoticeSourceModel alloc] init];
+    
+    if (copy) {
+
+        copy.internalBaseClassIdentifier = [self.internalBaseClassIdentifier copyWithZone:zone];
+        copy.modifyOn = [self.modifyOn copyWithZone:zone];
+        copy.createOn = [self.createOn copyWithZone:zone];
+        copy.releaseTime = [self.releaseTime copyWithZone:zone];
+        copy.updateBy = [self.updateBy copyWithZone:zone];
+        copy.releaseStatus = self.releaseStatus;
+        copy.content = [self.content copyWithZone:zone];
+        copy.catalogType = [self.catalogType copyWithZone:zone];
+        copy.title = [self.title copyWithZone:zone];
+        copy.order = self.order;
+        copy.updateName = [self.updateName copyWithZone:zone];
+        copy.catalogId = self.catalogId;
+        copy.status = self.status;
+        copy.createBy = self.createBy;
+    }
+    
+    return copy;
+}
+
+
+@end

+ 29 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/RecentCourseModel.h

@@ -0,0 +1,29 @@
+//
+//  RecentCourseModel.h
+//
+//  Created by Steven  on 2022/5/10
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface RecentCourseModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *status;
+@property (nonatomic, strong) NSString *courseGroupId;
+@property (nonatomic, strong) NSString *realName;
+@property (nonatomic, strong) NSString *avatar;
+@property (nonatomic, strong) NSString *courseId;
+@property (nonatomic, strong) NSString *courseType;
+@property (nonatomic, strong) NSString *teacherName;
+@property (nonatomic, strong) NSString *courseStartTime;
+@property (nonatomic, strong) NSString *teacherId;
+@property (nonatomic, strong) NSString *courseGroupName;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 158 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/RecentCourseModel.m

@@ -0,0 +1,158 @@
+//
+//  RecentCourseModel.m
+//
+//  Created by Steven  on 2022/5/10
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "RecentCourseModel.h"
+
+
+NSString *const kRecentCourseModelStatus = @"status";
+NSString *const kRecentCourseModelCourseGroupId = @"courseGroupId";
+NSString *const kRecentCourseModelRealName = @"realName";
+NSString *const kRecentCourseModelAvatar = @"avatar";
+NSString *const kRecentCourseModelCourseId = @"courseId";
+NSString *const kRecentCourseModelCourseType = @"courseType";
+NSString *const kRecentCourseModelTeacherName = @"teacherName";
+NSString *const kRecentCourseModelCourseStartTime = @"courseStartTime";
+NSString *const kRecentCourseModelTeacherId = @"teacherId";
+NSString *const kRecentCourseModelCourseGroupName = @"courseGroupName";
+
+
+@interface RecentCourseModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation RecentCourseModel
+
+@synthesize status = _status;
+@synthesize courseGroupId = _courseGroupId;
+@synthesize realName = _realName;
+@synthesize avatar = _avatar;
+@synthesize courseId = _courseId;
+@synthesize courseType = _courseType;
+@synthesize teacherName = _teacherName;
+@synthesize courseStartTime = _courseStartTime;
+@synthesize teacherId = _teacherId;
+@synthesize courseGroupName = _courseGroupName;
+
+
++ (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.status = [self objectOrNilForKey:kRecentCourseModelStatus fromDictionary:dict];
+            self.courseGroupId = [self objectOrNilForKey:kRecentCourseModelCourseGroupId fromDictionary:dict];
+            self.realName = [self objectOrNilForKey:kRecentCourseModelRealName fromDictionary:dict];
+            self.avatar = [self objectOrNilForKey:kRecentCourseModelAvatar fromDictionary:dict];
+            self.courseId = [self objectOrNilForKey:kRecentCourseModelCourseId fromDictionary:dict];
+            self.courseType = [self objectOrNilForKey:kRecentCourseModelCourseType fromDictionary:dict];
+            self.teacherName = [self objectOrNilForKey:kRecentCourseModelTeacherName fromDictionary:dict];
+            self.courseStartTime = [self objectOrNilForKey:kRecentCourseModelCourseStartTime fromDictionary:dict];
+            self.teacherId = [self objectOrNilForKey:kRecentCourseModelTeacherId fromDictionary:dict];
+            self.courseGroupName = [self objectOrNilForKey:kRecentCourseModelCourseGroupName fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.status forKey:kRecentCourseModelStatus];
+    [mutableDict setValue:self.courseGroupId forKey:kRecentCourseModelCourseGroupId];
+    [mutableDict setValue:self.realName forKey:kRecentCourseModelRealName];
+    [mutableDict setValue:self.avatar forKey:kRecentCourseModelAvatar];
+    [mutableDict setValue:self.courseId forKey:kRecentCourseModelCourseId];
+    [mutableDict setValue:self.courseType forKey:kRecentCourseModelCourseType];
+    [mutableDict setValue:self.teacherName forKey:kRecentCourseModelTeacherName];
+    [mutableDict setValue:self.courseStartTime forKey:kRecentCourseModelCourseStartTime];
+    [mutableDict setValue:self.teacherId forKey:kRecentCourseModelTeacherId];
+    [mutableDict setValue:self.courseGroupName forKey:kRecentCourseModelCourseGroupName];
+
+    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];
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.status = [aDecoder decodeObjectForKey:kRecentCourseModelStatus];
+    self.courseGroupId = [aDecoder decodeObjectForKey:kRecentCourseModelCourseGroupId];
+    self.realName = [aDecoder decodeObjectForKey:kRecentCourseModelRealName];
+    self.avatar = [aDecoder decodeObjectForKey:kRecentCourseModelAvatar];
+    self.courseId = [aDecoder decodeObjectForKey:kRecentCourseModelCourseId];
+    self.courseType = [aDecoder decodeObjectForKey:kRecentCourseModelCourseType];
+    self.teacherName = [aDecoder decodeObjectForKey:kRecentCourseModelTeacherName];
+    self.courseStartTime = [aDecoder decodeObjectForKey:kRecentCourseModelCourseStartTime];
+    self.teacherId = [aDecoder decodeObjectForKey:kRecentCourseModelTeacherId];
+    self.courseGroupName = [aDecoder decodeObjectForKey:kRecentCourseModelCourseGroupName];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_status forKey:kRecentCourseModelStatus];
+    [aCoder encodeObject:_courseGroupId forKey:kRecentCourseModelCourseGroupId];
+    [aCoder encodeObject:_realName forKey:kRecentCourseModelRealName];
+    [aCoder encodeObject:_avatar forKey:kRecentCourseModelAvatar];
+    [aCoder encodeObject:_courseId forKey:kRecentCourseModelCourseId];
+    [aCoder encodeObject:_courseType forKey:kRecentCourseModelCourseType];
+    [aCoder encodeObject:_teacherName forKey:kRecentCourseModelTeacherName];
+    [aCoder encodeObject:_courseStartTime forKey:kRecentCourseModelCourseStartTime];
+    [aCoder encodeObject:_teacherId forKey:kRecentCourseModelTeacherId];
+    [aCoder encodeObject:_courseGroupName forKey:kRecentCourseModelCourseGroupName];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    RecentCourseModel *copy = [[RecentCourseModel alloc] init];
+    
+    if (copy) {
+
+        copy.status = [self.status copyWithZone:zone];
+        copy.courseGroupId = [self.courseGroupId copyWithZone:zone];
+        copy.realName = [self.realName copyWithZone:zone];
+        copy.avatar = [self.avatar copyWithZone:zone];
+        copy.courseId = [self.courseId copyWithZone:zone];
+        copy.courseType = [self.courseType copyWithZone:zone];
+        copy.teacherName = [self.teacherName copyWithZone:zone];
+        copy.courseStartTime = [self.courseStartTime copyWithZone:zone];
+        copy.teacherId = [self.teacherId copyWithZone:zone];
+        copy.courseGroupName = [self.courseGroupName copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 3 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MyMusicBodyView.m

@@ -97,13 +97,13 @@
     self.pages = 1;
     self.rows = 10;
     if (self.selectIndex == 0) { // 已上架
-        self.audioStatus = @"1";
+        self.audioStatus = @"PASS";
     }
     else if (self.selectIndex == 1) { // 审核中
-        self.audioStatus = @"0";
+        self.audioStatus = @"DOING";
     }
     else if (self.selectIndex == 2) { // 审核失败
-        self.audioStatus = @"2";
+        self.audioStatus = @"UNPASS";
     }
     self.dataArray = [NSMutableArray array];
     [self.tableView.mj_footer resetNoMoreData];

+ 45 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/Controller/MyCourseViewController.m

@@ -24,6 +24,8 @@
 
 @property (nonatomic, strong) TeacherInfo *teacherInfo;
 
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
 @end
 
 @implementation MyCourseViewController
@@ -102,6 +104,7 @@
     [super viewWillAppear:animated];
     self.navigationController.interactivePopGestureRecognizer.enabled = YES;
     [self requestTeachMessage];
+    [self requestSubjectList];
     if (self.listViewArray.count > self.categoryView.selectedIndex) {
         id value = self.listViewArray[self.categoryView.selectedIndex];
         if ([value isKindOfClass:[MyVideoCourseBodyView class]]) {
@@ -115,6 +118,42 @@
     }
 }
 
+- (void)requestSubjectList {
+    [KSNetworkingManager querySubjectItemRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *dataArray = [NSMutableArray array];
+            dataArray = [dic arrayValueForKey:@"data"];
+            NSMutableArray *subjectArray = [NSMutableArray array];
+            for (NSDictionary *parm in dataArray) {
+                NSMutableDictionary *subjectSource = [NSMutableDictionary dictionary];
+                [subjectSource setValue:[parm stringValueForKey:@"id"] forKey:@"subjectId"];
+                [subjectSource setValue:[parm stringValueForKey:@"name"] forKey:@"subjectName"];
+                [subjectArray addObject:subjectSource];
+            }
+            self.subjectList = [subjectArray mutableCopy];
+            [self refreshSubjectMessage];
+        }
+        else{
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)refreshSubjectMessage {
+    for (NSInteger index = 0; index < self.listViewArray.count; index++) {
+        id view = self.listViewArray[index];
+        if ([view isKindOfClass:[MyLessonBodyView class]]) {
+            MyLessonBodyView *courseView = (MyLessonBodyView *)view;
+            courseView.subjectList = [self.subjectList mutableCopy];
+        }
+        else if ([view isKindOfClass:[MyVideoCourseBodyView class]]) {
+            MyVideoCourseBodyView *videoCourseView = (MyVideoCourseBodyView *)view;
+            videoCourseView.subjectList = [self.subjectList mutableCopy];
+        }
+    }
+}
 - (void)viewDidAppear:(BOOL)animated {
     [super viewDidAppear:animated];
     self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
@@ -160,6 +199,9 @@
         else {
             listView.teaherStatus = @"PASS";
         }
+        if (self.subjectList) {
+            listView.subjectList = [self.subjectList mutableCopy];
+        }
         [listView beginFirstRefresh];
         return listView;
     }
@@ -177,6 +219,9 @@
             listView.liveFlag = YES;
             listView.teaherStatus = @"PASS";
         }
+        if (self.subjectList) {
+            listView.subjectList = [self.subjectList mutableCopy];
+        }
         [listView beginFirstRefresh];
         return listView;
     }

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonBodyView.h

@@ -18,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, assign) BOOL liveFlag; // 是否有直播权限
 
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 35 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonBodyView.m

@@ -17,6 +17,7 @@
 #import "NewClassPopView.h"
 #import "KSFullDatePicker.h"
 #import "AccompanyDetailViewController.h"
+#import "KSChoosePicker.h"
 
 @interface MyLessonBodyView ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -222,7 +223,7 @@
         [_sortView sortAction:^(SORT_TYPE type) {
             [weakSelf sortWithType:type];
         }];
-        [self.dateFormatter setDateFormat:@"yyyy年MM月"];
+        [self.dateFormatter setDateFormat:@"yyyy年M月"];
         NSDate *currentDate = [NSDate date];
         [self.sortView.firstButton setTitle:[self.dateFormatter stringFromDate:currentDate] forState:UIControlStateNormal];
         [self addSubview:self.sortView];
@@ -244,7 +245,35 @@
         [self.popView refreshWithSourceArray:@[@"全部",@"未开始",@"进行中",@"已结束"] preChooseIndex:_secondChooseIndex inView:self actionItem:1];
     }
     else if (type == SORT_TYPE_SUBJECT) {
-//        [self.popView refreshWithSourceArray:@[@"全部",@"请假",@"旷课",@"迟到",@"正常"] preChooseIndex:_thirdChooseIndex inView:self actionItem:2];
+        if (self.subjectList.count) {
+            NSMutableArray *nameArray = [NSMutableArray array];
+            [nameArray addObject:@"全部"];
+            for (NSDictionary *parm in self.subjectList) {
+                [nameArray addObject:[parm stringValueForKey:@"subjectName"]];
+            }
+            MJWeakSelf;
+            KSChoosePicker *picker = [[KSChoosePicker alloc] initWithTitle:@"声部筛选" sourceData:nameArray chooseReturnWithBlock:^(NSString * _Nonnull returnValue, NSInteger chooseIndex) {
+                if (chooseIndex == 0) {
+                    [weakSelf.sortView.thirdButton setTitle:@"全部声部" forState:UIControlStateNormal];
+                    weakSelf.subjectId = @"";
+                }
+                else {
+                    [weakSelf.sortView.thirdButton setTitle:returnValue forState:UIControlStateNormal];
+                    NSDictionary *parm = self.subjectList[chooseIndex-1];
+                    weakSelf.subjectId = [parm stringValueForKey:@"subjectId"];
+                }
+                self.sortView.thirdArrowUp = NO;
+                [weakSelf refreshAndRequestData];
+            } cancel:^{
+                self.sortView.thirdArrowUp = NO;
+            }];
+            [picker showPicker];
+        }
+        else {
+            [self MBPShow:@"无声部信息"];
+            self.sortView.thirdArrowUp = NO;
+        }
+
     }
     else {
         [self hiddenPopView];
@@ -670,6 +699,10 @@
         }
     }
 }
+- (void)setSubjectList:(NSMutableArray *)subjectList {
+    _subjectList = subjectList;
+    self.thirdChooseIndex = 0;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyVideoCourseBodyView.h

@@ -15,6 +15,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, strong) NSString *teaherStatus;
 
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 31 - 5
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyVideoCourseBodyView.m

@@ -12,7 +12,7 @@
 #import "AuthDisplayView.h"
 #import "MyVideoSearchView.h"
 #import "NewClassPopView.h"
-
+#import "KSChoosePicker.h"
 
 @interface MyVideoCourseBodyView ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
 
@@ -33,7 +33,6 @@
 
 @property (nonatomic, strong) AuthDisplayView *authView;
 
-
 @property (nonatomic, copy) MyVideoSearchView *sortView;
 
 @property (nonatomic, strong) NewClassPopView *popView;
@@ -157,7 +156,7 @@
         _sortView.frame = CGRectMake(0, 0, kScreenWidth, 55);
         MJWeakSelf;
         [_sortView sortAction:^{
-            [weakSelf sortView];
+            [weakSelf showSortView];
         }];
 
         [self addSubview:self.sortView];
@@ -170,8 +169,35 @@
     }
 }
 
-- (void)sortAction {
-    
+- (void)showSortView {
+    if (self.subjectList.count) {
+        NSMutableArray *nameArray = [NSMutableArray array];
+        [nameArray addObject:@"全部"];
+        for (NSDictionary *parm in self.subjectList) {
+            [nameArray addObject:[parm stringValueForKey:@"subjectName"]];
+        }
+        MJWeakSelf;
+        KSChoosePicker *picker = [[KSChoosePicker alloc] initWithTitle:@"声部筛选" sourceData:nameArray chooseReturnWithBlock:^(NSString * _Nonnull returnValue, NSInteger chooseIndex) {
+            if (chooseIndex == 0) {
+                weakSelf.sortView.sortTitleLabel.text = @"全部声部";
+                weakSelf.searchKey = @"";
+            }
+            else {
+                weakSelf.sortView.sortTitleLabel.text = returnValue;
+                NSDictionary *parm = self.subjectList[chooseIndex-1];
+                weakSelf.searchKey = [parm stringValueForKey:@"subjectId"];
+            }
+            self.sortView.arrowUp = NO;
+            [weakSelf refreshAndRequestData];
+        } cancel:^{
+            self.sortView.arrowUp = NO;
+        }];
+        [picker showPicker];
+    }
+    else {
+        [self MBPShow:@"无声部信息"];
+        self.sortView.arrowUp = NO;
+    }
 }
 
 - (void)beginFirstRefresh {

+ 5 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/ReceiveEvaluate/Controller/ReceiveEvaluateListController.m

@@ -163,6 +163,11 @@
         [_tableView registerNib:[UINib nibWithNibName:@"ReceiveEvaluateCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"ReceiveEvaluateCell"];
         _tableView.estimatedRowHeight = 125.0f;
         _tableView.rowHeight = UITableViewAutomaticDimension;
+        
+        UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 12)];
+        headView.backgroundColor = HexRGB(0xf6f8f9);
+        _tableView.tableHeaderView = headView;
+        
         UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 15)];
         bottomView.backgroundColor = HexRGB(0xf6f8f9);
         _tableView.tableFooterView = bottomView;

+ 0 - 16
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/ClassNoticeView.h

@@ -1,16 +0,0 @@
-//
-//  ClassNoticeView.h
-//  KulexiuForTeacher
-//
-//  Created by 王智 on 2022/4/29.
-//
-
-#import <UIKit/UIKit.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface ClassNoticeView : UIView
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 20
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/ClassNoticeView.m

@@ -1,20 +0,0 @@
-//
-//  ClassNoticeView.m
-//  KulexiuForTeacher
-//
-//  Created by 王智 on 2022/4/29.
-//
-
-#import "ClassNoticeView.h"
-
-@implementation ClassNoticeView
-
-/*
-// Only override drawRect: if you perform custom drawing.
-// An empty implementation adversely affects performance during animation.
-- (void)drawRect:(CGRect)rect {
-    // Drawing code
-}
-*/
-
-@end

+ 0 - 18
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/ClassNoticeView.xib

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
-    <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view contentMode="scaleToFill" id="iN0-l3-epB">
-            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
-            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-            <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
-        </view>
-    </objects>
-</document>

+ 20 - 14
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeBodyView.xib

@@ -75,11 +75,12 @@
                             <real key="value" value="1"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
-                            <real key="value" value="14"/>
+                            <real key="value" value="2"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
-                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <color key="value" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="NO"/>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="tvD-fE-luX" appends="YES" id="fmi-4x-0Ls"/>
@@ -146,11 +147,12 @@
                             <real key="value" value="1"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
-                            <real key="value" value="14"/>
+                            <real key="value" value="2"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
-                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <color key="value" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="NO"/>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="I8f-yB-Nwl" appends="YES" id="SfJ-sf-7qh"/>
@@ -217,12 +219,13 @@
                         <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
                             <real key="value" value="1"/>
                         </userDefinedRuntimeAttribute>
-                        <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
-                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                        </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
-                            <real key="value" value="14"/>
+                            <real key="value" value="2"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                            <color key="value" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="NO"/>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="jyB-yw-R6D" appends="YES" id="lh4-Gy-BQY"/>
@@ -290,11 +293,12 @@
                             <real key="value" value="1"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
-                            <real key="value" value="14"/>
+                            <real key="value" value="2"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
-                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <color key="value" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="NO"/>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="EYk-rZ-zzc" appends="YES" id="149-8l-yhQ"/>
@@ -362,11 +366,12 @@
                             <real key="value" value="1"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
-                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <color key="value" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
-                            <real key="value" value="14"/>
+                            <real key="value" value="2"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="NO"/>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="ZXG-4s-RpH" appends="YES" id="n0n-0f-4TP"/>
@@ -434,11 +439,12 @@
                             <real key="value" value="1"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
-                            <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <color key="value" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
-                            <real key="value" value="14"/>
+                            <real key="value" value="2"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="NO"/>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="hGO-sJ-BbZ" appends="YES" id="QEh-Wr-3tm"/>

+ 30 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecentCourseView.h

@@ -0,0 +1,30 @@
+//
+//  HomeRecentCourseView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/10.
+//
+
+#import <UIKit/UIKit.h>
+#import "RecentCourseModel.h"
+
+typedef NS_ENUM(NSInteger, RECENTCOURSE_TYPE) {
+    RECENTCOURSE_TYPE_LIVE,
+    RECENTCOURSE_TYPE_ACCOMPANY,
+};
+
+typedef void(^RecentCourseAction)(RECENTCOURSE_TYPE type, RecentCourseModel * _Nonnull courseModel);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeRecentCourseView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)configCourseMessage:(RecentCourseModel *)model;
+
+- (void)joinRoom:(RecentCourseAction)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 61 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecentCourseView.m

@@ -0,0 +1,61 @@
+//
+//  HomeRecentCourseView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/10.
+//
+
+#import "HomeRecentCourseView.h"
+
+@interface HomeRecentCourseView ()
+
+@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
+
+@property (nonatomic, copy) RecentCourseAction callback;
+
+@property (nonatomic, strong) RecentCourseModel *courseModel;
+
+@end
+
+@implementation HomeRecentCourseView
+
++ (instancetype)shareInstance {
+    HomeRecentCourseView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeRecentCourseView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)joinRoom:(RecentCourseAction)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)configCourseMessage:(RecentCourseModel *)model {
+    self.courseModel = model;
+    self.titleLabel.text = [NSString stringWithFormat:@"%@即将开始",[NSString returnNoNullStringWithString:model.courseGroupName]];
+    NSDateFormatter *formatter = [NSObject getDateformatter];
+    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    NSDate *beginDate = [formatter dateFromString:model.courseStartTime];
+    [formatter setDateFormat:@"HH:mm"];
+    self.timeLabel.text = [NSString stringWithFormat:@"今日 %@", [NSString returnNoNullStringWithString:[formatter stringFromDate:beginDate]]];
+}
+
+- (IBAction)joinRoomAction:(id)sender {
+    if (self.callback) {
+        RECENTCOURSE_TYPE type = [self.courseModel.courseType isEqualToString:@"LIVE"] ? RECENTCOURSE_TYPE_LIVE : RECENTCOURSE_TYPE_ACCOMPANY;
+        self.callback(type, self.courseModel);
+    }
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 112 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecentCourseView.xib

@@ -0,0 +1,112 @@
+<?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="HomeRecentCourseView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="104"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jzj-07-uBu">
+                    <rect key="frame" x="14" y="17" width="386" height="70"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="竖笛陪练课即将开始" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lrj-nH-46q">
+                            <rect key="frame" x="18" y="12" width="147" height="28"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="28" id="sH9-HN-Ism"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="CGP-Pi-jWC">
+                            <rect key="frame" x="304" y="21" width="70" height="28"/>
+                            <color key="backgroundColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="70" id="85l-a5-uCz"/>
+                                <constraint firstAttribute="height" constant="28" id="gyr-A9-otj"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="13"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="进入课堂"/>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="14"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="joinRoomAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="qyr-Sw-imf"/>
+                            </connections>
+                        </button>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_tips" translatesAutoresizingMaskIntoConstraints="NO" id="pUs-nj-cKV">
+                            <rect key="frame" x="18" y="42" width="15" height="14"/>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="今日 15:00-15:45" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ebm-D0-ZwZ">
+                            <rect key="frame" x="38" y="41" width="105" height="16"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                            <color key="textColor" red="1" green="0.50196078431372548" blue="0.43529411764705883" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="CGP-Pi-jWC" firstAttribute="centerY" secondItem="Jzj-07-uBu" secondAttribute="centerY" id="2kd-Nt-Oai"/>
+                        <constraint firstItem="ebm-D0-ZwZ" firstAttribute="centerY" secondItem="pUs-nj-cKV" secondAttribute="centerY" id="9ce-nN-JeR"/>
+                        <constraint firstAttribute="trailing" secondItem="CGP-Pi-jWC" secondAttribute="trailing" constant="12" id="SJj-z1-WHO"/>
+                        <constraint firstItem="lrj-nH-46q" firstAttribute="top" secondItem="Jzj-07-uBu" secondAttribute="top" constant="12" id="Xw7-KT-WjY"/>
+                        <constraint firstAttribute="height" constant="70" id="bQc-MO-m30"/>
+                        <constraint firstItem="CGP-Pi-jWC" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="lrj-nH-46q" secondAttribute="trailing" constant="10" id="e2b-mS-laE"/>
+                        <constraint firstItem="ebm-D0-ZwZ" firstAttribute="leading" secondItem="pUs-nj-cKV" secondAttribute="trailing" constant="5" id="h4M-10-9kQ"/>
+                        <constraint firstItem="lrj-nH-46q" firstAttribute="leading" secondItem="Jzj-07-uBu" secondAttribute="leading" constant="18" id="qOf-lx-0rA"/>
+                        <constraint firstItem="pUs-nj-cKV" firstAttribute="top" secondItem="lrj-nH-46q" secondAttribute="bottom" constant="2" id="qbO-gb-XFq"/>
+                        <constraint firstItem="pUs-nj-cKV" firstAttribute="leading" secondItem="lrj-nH-46q" secondAttribute="leading" id="tuQ-H0-4Df"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                            <color key="value" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                            <size key="value" width="0.0" height="2"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                            <color key="value" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                            <real key="value" value="2"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="NO"/>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="Jzj-07-uBu" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="68B-NN-mem"/>
+                <constraint firstItem="Jzj-07-uBu" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="DgC-Xy-byN"/>
+                <constraint firstAttribute="trailing" secondItem="Jzj-07-uBu" secondAttribute="trailing" constant="14" id="feY-bv-SDH"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="timeLabel" destination="ebm-D0-ZwZ" id="N8s-Fo-9jS"/>
+                <outlet property="titleLabel" destination="lrj-nH-46q" id="y9y-NQ-vDX"/>
+            </connections>
+            <point key="canvasLocation" x="89.855072463768124" y="-58.258928571428569"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="course_tips" width="15" height="14"/>
+    </resources>
+</document>

+ 12 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/PublicNoticeView.h

@@ -7,10 +7,22 @@
 
 #import <UIKit/UIKit.h>
 
+typedef void(^NoticeMoreCallback)(void);
+
 NS_ASSUME_NONNULL_BEGIN
 
+
+
 @interface PublicNoticeView : UIView
 
++ (instancetype)shareInstance;
+
+@property (weak, nonatomic) IBOutlet UIView *adView;
+
+- (void)moreCallback:(NoticeMoreCallback)callback;
+
+- (CGFloat)getViewHeight;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 27 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/PublicNoticeView.m

@@ -7,8 +7,35 @@
 
 #import "PublicNoticeView.h"
 
+@interface PublicNoticeView ()
+
+@property (nonatomic, copy) NoticeMoreCallback callback;
+
+@end
+
 @implementation PublicNoticeView
 
++ (instancetype)shareInstance {
+    PublicNoticeView *view = [[[NSBundle mainBundle] loadNibNamed:@"PublicNoticeView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)moreCallback:(NoticeMoreCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)moreAction:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
+
+- (CGFloat)getViewHeight {
+    return 50.0f;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 84 - 8
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/PublicNoticeView.xib

@@ -1,18 +1,94 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<?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>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view contentMode="scaleToFill" id="iN0-l3-epB">
-            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="PublicNoticeView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="94"/>
             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-            <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="18s-Im-HaS">
+                    <rect key="frame" x="14" y="25" width="386" height="44"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="notice_icon" translatesAutoresizingMaskIntoConstraints="NO" id="Emb-yN-fCJ">
+                            <rect key="frame" x="10" y="11" width="23" height="22"/>
+                        </imageView>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FYH-Km-v6L">
+                            <rect key="frame" x="38" y="0.0" width="299" height="44"/>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        </view>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="l4x-1S-fJR">
+                            <rect key="frame" x="342" y="0.0" width="44" height="44"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="44" id="fbW-78-wuS"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" image="notice_more"/>
+                            <connections>
+                                <action selector="moreAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="ISe-v7-tmR"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="l4x-1S-fJR" secondAttribute="bottom" id="1Jd-Qb-ShD"/>
+                        <constraint firstItem="Emb-yN-fCJ" firstAttribute="centerY" secondItem="18s-Im-HaS" secondAttribute="centerY" id="Cfw-Em-J6j"/>
+                        <constraint firstAttribute="bottom" secondItem="FYH-Km-v6L" secondAttribute="bottom" id="GJE-Ly-ZYN"/>
+                        <constraint firstItem="l4x-1S-fJR" firstAttribute="top" secondItem="18s-Im-HaS" secondAttribute="top" id="WxH-ZG-AoU"/>
+                        <constraint firstItem="FYH-Km-v6L" firstAttribute="leading" secondItem="Emb-yN-fCJ" secondAttribute="trailing" constant="5" id="fso-hL-wNN"/>
+                        <constraint firstItem="Emb-yN-fCJ" firstAttribute="leading" secondItem="18s-Im-HaS" secondAttribute="leading" constant="10" id="g2l-c1-CMw"/>
+                        <constraint firstItem="l4x-1S-fJR" firstAttribute="leading" secondItem="FYH-Km-v6L" secondAttribute="trailing" constant="5" id="ipb-KG-e20"/>
+                        <constraint firstAttribute="trailing" secondItem="l4x-1S-fJR" secondAttribute="trailing" id="tbz-Oe-Qqu"/>
+                        <constraint firstItem="FYH-Km-v6L" firstAttribute="top" secondItem="18s-Im-HaS" secondAttribute="top" id="yd3-Yp-Kko"/>
+                        <constraint firstAttribute="height" constant="44" id="ygi-dp-jdw"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                            <size key="value" width="0.0" height="2"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                            <color key="value" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                            <real key="value" value="2"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="NO"/>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="18s-Im-HaS" secondAttribute="trailing" constant="14" id="2VW-dV-Qen"/>
+                <constraint firstItem="18s-Im-HaS" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="KB3-aY-BCZ"/>
+                <constraint firstItem="18s-Im-HaS" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="ujd-aT-oAW"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="adView" destination="FYH-Km-v6L" id="0Wo-bl-ahs"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="-67.633928571428569"/>
         </view>
     </objects>
+    <resources>
+        <image name="notice_icon" width="23" height="22"/>
+        <image name="notice_more" width="18" height="18"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
 </document>

+ 0 - 7
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/CreateLiveBodyView.m

@@ -73,10 +73,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([text isEqualToString:@""]) {
-        return YES;
-    }
-    
     // 长度判断
     // 输入控制
     NSString *newString = [textView.text stringByReplacingCharactersInRange:range withString:text];
@@ -103,9 +99,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
     return YES;
 }
 /*

+ 0 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Login/View/FirstSettingBodyView.m

@@ -67,9 +67,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
     
     return YES;
 }

+ 1 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Login/View/LoginBodyView.m

@@ -99,9 +99,7 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
+
     // 输入控制
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if (newString.length > 11) {

+ 1 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Login/View/PasswordBodyView.m

@@ -68,9 +68,7 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
+
     // 输入控制
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if (textField == self.phoneField) {

+ 0 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/View/AddressDetailBodyView.m

@@ -76,9 +76,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([text isEqualToString:@""]) {
-        return YES;
-    }
     NSString *newText = [[textView text] stringByReplacingCharactersInRange:range withString:text];
     if (newText.length > 100) {
         return NO;
@@ -91,9 +88,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
     
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if (textField == self.phoneField) {

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/View/KSAddressPickerView.m

@@ -211,6 +211,12 @@
     }];
 }
 
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+    if ([touch.view isDescendantOfView:self.displayView]) {
+        return NO;
+    }
+    return YES;
+}
 
 - (void)show {
     UIWindow *window = [[[UIApplication sharedApplication] delegate] window];

+ 0 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/View/MyAddressListCell.m

@@ -43,7 +43,6 @@
         self.phoneLabel.text = [NSString returnNoNullStringWithString:model.phoneNumber];
     }
     self.detailAddress.text = [NSString stringWithFormat:@"%@%@%@ %@", [NSString returnNoNullStringWithString:model.province], [NSString returnNoNullStringWithString:model.city], [NSString returnNoNullStringWithString:model.region], [NSString returnNoNullStringWithString:model.detailAddress]];
-//    self.detailAddress.text = [NSString returnNoNullStringWithString:model.detailAddress];
 }
 
 - (IBAction)modifyAction:(id)sender {

+ 6 - 5
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/Controller/BandCardViewController.m

@@ -99,6 +99,8 @@
         weakSelf.bodyView.bankNameField.text = returnValue;
         BankNameModel *model = weakSelf.dataArray[chooseIndex];
         weakSelf.bankId = model.internalBaseClassIdentifier;
+    } cancel:^{
+        
     }];
     [picker showPicker];
 }
@@ -129,12 +131,11 @@
     [KSNetworkingManager bankCardRequest:KS_POST name:self.bodyView.nameField.text bankCard:self.bodyView.cardNoField.text bankName:self.bodyView.bankNameField.text bankCode:self.bankId idCardNo:self.bodyView.idCardField.text phone:self.bodyView.phoneField.text success:^(NSDictionary * _Nonnull dic) {
         [self removehub];
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-            [self showResultViewSuccess:YES];
+            [self showResultViewSuccess:YES errorMessage:nil];
         }
         else {
-            [self MBPShow:MESSAGEKEY];
             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-                [self showResultViewSuccess:NO];
+                [self showResultViewSuccess:NO errorMessage:MESSAGEKEY];
             });            
         }
     } faliure:^(NSError * _Nonnull error) {
@@ -142,12 +143,12 @@
     }];
 }
 
-- (void)showResultViewSuccess:(BOOL)isSuccess {
+- (void)showResultViewSuccess:(BOOL)isSuccess errorMessage:(NSString *)errorMsg {
     CardBandResultViewController *ctrl = [[CardBandResultViewController alloc] init];
     ctrl.isSuccess = isSuccess;
     ctrl.displayImageName = isSuccess ? @"card_success" : @"card_failed";
     ctrl.topTitle = isSuccess ? @"绑定成功" : @"绑定失败";
-    ctrl.descMessage = isSuccess ? @"恭喜您绑定成功!" : @"绑定失败";
+    ctrl.descMessage = isSuccess ? @"恭喜您绑定成功!" : [NSString stringWithFormat:@"绑定失败 %@",[NSString returnNoNullStringWithString:errorMsg]];
     ctrl.backControllerName = @"MyBankCardViewController";
     [self.navigationController pushViewController:ctrl animated:YES];
 }

+ 4 - 5
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/Controller/UnbindCardViewController.m

@@ -62,12 +62,11 @@
     [KSNetworkingManager unBindCardRequest:KS_POST cardId:self.cardId idCardNo:self.bodyView.cardField.text name:self.bodyView.nameField.text success:^(NSDictionary * _Nonnull dic) {
         [self removehub];
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-            [self showResultViewSuccess:YES];
+            [self showResultViewSuccess:YES errorMsg:nil];
         }
         else {
-            [self MBPShow:MESSAGEKEY];
             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-                [self showResultViewSuccess:NO];
+                [self showResultViewSuccess:NO errorMsg:MESSAGEKEY];
             });
         }
     } faliure:^(NSError * _Nonnull error) {
@@ -75,12 +74,12 @@
     }];
 }
 
-- (void)showResultViewSuccess:(BOOL)isSuccess {
+- (void)showResultViewSuccess:(BOOL)isSuccess errorMsg:(NSString *)errorMsg {
     CardBandResultViewController *ctrl = [[CardBandResultViewController alloc] init];
     ctrl.isSuccess = isSuccess;
     ctrl.displayImageName = isSuccess ? @"card_success" : @"card_failed";
     ctrl.topTitle = isSuccess ? @"解绑成功" : @"解绑失败";
-    ctrl.descMessage = isSuccess ? @"解绑成功" : @"解绑失败";
+    ctrl.descMessage = isSuccess ? @"解绑成功" : [NSString stringWithFormat:@"解绑失败 %@",[NSString returnNoNullStringWithString:errorMsg]];
     ctrl.backControllerName = @"MyBankCardViewController";
     [self.navigationController pushViewController:ctrl animated:YES];
 }

+ 1 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/View/CardBandBodyView.m

@@ -56,9 +56,7 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
+
     // 输入控制
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if (textField == self.idCardField) {

+ 1 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/View/UnbindBodyView.m

@@ -43,9 +43,7 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
+
     // 输入控制
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if (textField == self.cardField) {

+ 0 - 4
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleIntroduceCell.m

@@ -65,10 +65,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([text isEqualToString:@""]) {
-        return YES;
-    }
-    
     // 长度判断
     // 输入控制
     NSString *newString = [textView.text stringByReplacingCharactersInRange:range withString:text];

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageCourseView.m

@@ -169,7 +169,7 @@
         }];
     }
     else if (self.selectIndex == 4) { // 乐谱
-        [KSNetworkingManager musicListRequest:KS_POST auditStatus:@"1" pageNo:self.pages pageSize:self.rows success:^(NSDictionary * _Nonnull dic) {
+        [KSNetworkingManager musicListRequest:KS_POST auditStatus:@"PASS" pageNo:self.pages pageSize:self.rows success:^(NSDictionary * _Nonnull dic) {
             [self endRefresh];
             if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
                 NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];

+ 0 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/FeedbackBodyView.m

@@ -99,9 +99,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
     return YES;
 }
 

+ 1 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/ModifyBodyView.m

@@ -84,9 +84,7 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
+
     // 输入控制
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if (textField == self.pwdField) {

+ 0 - 4
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/PhoneChangeBodyView.m

@@ -72,10 +72,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
-
     // 输入控制
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if (textField == self.phoneField) {

+ 0 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/PhoneCheckBodyView.m

@@ -62,9 +62,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
     // 输入控制
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if (textField == self.phoneField) {

+ 0 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/VeriCheckView.m

@@ -151,9 +151,6 @@
         [self endEditing:YES];
         return YES;
     }
-    if ([string isEqualToString:@""]) {
-        return YES;
-    }
     return YES;
 }
 /*