Browse Source

1.直播支持关闭和打开麦克风
2.曲谱收费标签。
3.我的曲谱

Steven 2 years ago
parent
commit
ed1eebe635
45 changed files with 941 additions and 280 deletions
  1. 12 0
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 48 16
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOff.imageset/Contents.json
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOff.imageset/live_micOff@2x.png
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOff.imageset/live_micOff@3x.png
  7. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOn.imageset/Contents.json
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOn.imageset/live_micOn@2x.png
  9. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOn.imageset/live_micOn@3x.png
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_myMusic.imageset/tool_myMusic@2x.png
  11. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_myMusic.imageset/tool_myMusic@3x.png
  12. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_uploadMusic.imageset/Contents.json
  13. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_uploadMusic.imageset/tool_uploadMusic@2x.png
  14. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_uploadMusic.imageset/tool_uploadMusic@3x.png
  15. 33 14
      KulexiuForTeacher/KulexiuForTeacher/Common/Define/PrefixHeader.pch
  16. 37 4
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Custom/GRScanManager.m
  17. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/UMShare/KSUMShareManager.m
  18. 3 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/ChatAddressBodyView.h
  19. 26 10
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/ChatAddressBodyView.m
  20. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeHotMusicModel.h
  21. 8 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeHotMusicModel.m
  22. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/Controller/MyMusicViewController.m
  23. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/Model/MusicMessageModel.h
  24. 7 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/Model/MusicMessageModel.m
  25. 50 20
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicMessageCell.m
  26. 9 26
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicMessageCell.xib
  27. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicTagView.h
  28. 55 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicTagView.m
  29. 33 65
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MyMusicBodyView.m
  30. 4 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/ScanView/Controller/KSScanViewController.m
  31. 44 14
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.m
  32. 10 37
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.xib
  33. 25 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m
  34. 5 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.h
  35. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.m
  36. 25 7
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.xib
  37. 34 0
      KulexiuForTeacher/KulexiuForTeacher/Module/MidiPlayer/ShareInChat/Controller/KSImageShareViewController.h
  38. 233 0
      KulexiuForTeacher/KulexiuForTeacher/Module/MidiPlayer/ShareInChat/Controller/KSImageShareViewController.m
  39. 15 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Controller/MineViewController.m
  40. 47 16
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.m
  41. 3 24
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.xib
  42. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineActionView.h
  43. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBottomView.m
  44. 47 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBottomView.xib
  45. 16 9
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineFunctionView.m

+ 12 - 0
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -522,6 +522,8 @@
 		BC3673DD28A606A500059721 /* accomapny_animation_3.png in Resources */ = {isa = PBXBuildFile; fileRef = BC3673D128A606A500059721 /* accomapny_animation_3.png */; };
 		BC3673DE28A606A500059721 /* musicRoom_animation_1.png in Resources */ = {isa = PBXBuildFile; fileRef = BC3673D228A606A500059721 /* musicRoom_animation_1.png */; };
 		BC3673DF28A606A500059721 /* musicRoom_animation_2.png in Resources */ = {isa = PBXBuildFile; fileRef = BC3673D328A606A500059721 /* musicRoom_animation_2.png */; };
+		BC3744D428DB156F004EDFCF /* KSImageShareViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3744D328DB156F004EDFCF /* KSImageShareViewController.m */; };
+		BC3A4EB728DAFCF7001C4428 /* MusicTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3A4EB628DAFCF7001C4428 /* MusicTagView.m */; };
 		BC3ACD942890D60800060E97 /* FreezeListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3ACD932890D60800060E97 /* FreezeListViewController.m */; };
 		BC3ACD972890D61400060E97 /* NoRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3ACD962890D61400060E97 /* NoRecordViewController.m */; };
 		BC3ACD9A2890D88600060E97 /* IncomeRecordHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3ACD992890D88600060E97 /* IncomeRecordHeadView.m */; };
@@ -1946,6 +1948,10 @@
 		BC3673D128A606A500059721 /* accomapny_animation_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = accomapny_animation_3.png; sourceTree = "<group>"; };
 		BC3673D228A606A500059721 /* musicRoom_animation_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicRoom_animation_1.png; sourceTree = "<group>"; };
 		BC3673D328A606A500059721 /* musicRoom_animation_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicRoom_animation_2.png; sourceTree = "<group>"; };
+		BC3744D228DB156E004EDFCF /* KSImageShareViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSImageShareViewController.h; sourceTree = "<group>"; };
+		BC3744D328DB156F004EDFCF /* KSImageShareViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSImageShareViewController.m; sourceTree = "<group>"; };
+		BC3A4EB528DAFCF7001C4428 /* MusicTagView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MusicTagView.h; sourceTree = "<group>"; };
+		BC3A4EB628DAFCF7001C4428 /* MusicTagView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MusicTagView.m; sourceTree = "<group>"; };
 		BC3ACD922890D60800060E97 /* FreezeListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FreezeListViewController.h; sourceTree = "<group>"; };
 		BC3ACD932890D60800060E97 /* FreezeListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FreezeListViewController.m; sourceTree = "<group>"; };
 		BC3ACD952890D61400060E97 /* NoRecordViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NoRecordViewController.h; sourceTree = "<group>"; };
@@ -4544,6 +4550,8 @@
 				27BC3B2227F2B76900D81E30 /* MusicMessageCell.h */,
 				27BC3B2327F2B76900D81E30 /* MusicMessageCell.m */,
 				27BC3B2427F2B76900D81E30 /* MusicMessageCell.xib */,
+				BC3A4EB528DAFCF7001C4428 /* MusicTagView.h */,
+				BC3A4EB628DAFCF7001C4428 /* MusicTagView.m */,
 				27BC3B2727F2DB8600D81E30 /* MusicUploadView.h */,
 				27BC3B2827F2DB8600D81E30 /* MusicUploadView.m */,
 				27BC3B2A27F2DB9600D81E30 /* MusicUploadView.xib */,
@@ -5984,6 +5992,8 @@
 				BCB909032851E25D00F5FF69 /* KSShareChooseViewController.m */,
 				BCB9FA11286C7C6C005D766B /* KSShareGroupViewController.h */,
 				BCB9FA12286C7C6C005D766B /* KSShareGroupViewController.m */,
+				BC3744D228DB156E004EDFCF /* KSImageShareViewController.h */,
+				BC3744D328DB156F004EDFCF /* KSImageShareViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -7198,6 +7208,7 @@
 				27F9CAFB27EC1AF3003E0FE4 /* ContractListCell.m in Sources */,
 				BCC9F44227F69BD200647449 /* TurnPageMessage.m in Sources */,
 				BCDB093728058BBE00D0BDAD /* AccompanyLessonModel.m in Sources */,
+				BC3744D428DB156F004EDFCF /* KSImageShareViewController.m in Sources */,
 				27FC2F6627F1BBFE00FCC239 /* MyMusicViewController.m in Sources */,
 				277D432827E9A48000107DB7 /* ModifyPhoneChangeController.m in Sources */,
 				275FA56227F31AE100EB6240 /* MinePageHeadView.m in Sources */,
@@ -7748,6 +7759,7 @@
 				BC41103828066C2F00800BD9 /* HomeworkListViewController.m in Sources */,
 				BCC9F42327F69BD200647449 /* MainContainerView.m in Sources */,
 				BC0A22A4284751F80065C1AB /* AccompanySongCell.m in Sources */,
+				BC3A4EB728DAFCF7001C4428 /* MusicTagView.m in Sources */,
 				2779335927E316DD0010E277 /* WMPlayer.m in Sources */,
 				BCD6D16F28196756009A773E /* FeeRecordModel.m in Sources */,
 				2779331127E310960010E277 /* NSObject+ReadDocument.m in Sources */,

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


+ 48 - 16
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -62,8 +62,8 @@
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1681"
-            endingLineNumber = "1681"
+            startingLineNumber = "1706"
+            endingLineNumber = "1706"
             landmarkName = "-pauseLiveActionBack:"
             landmarkType = "7">
          </BreakpointContent>
@@ -94,10 +94,10 @@
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1411"
-            endingLineNumber = "1411"
-            landmarkName = "LiveRoomViewController"
-            landmarkType = "3">
+            startingLineNumber = "1416"
+            endingLineNumber = "1416"
+            landmarkName = "-sendMessage:displayMessage:callback:"
+            landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -174,8 +174,8 @@
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "881"
-            endingLineNumber = "881"
+            startingLineNumber = "886"
+            endingLineNumber = "886"
             landmarkName = "-subscribeRemoteResource:isTiny:"
             landmarkType = "7">
          </BreakpointContent>
@@ -206,8 +206,8 @@
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1051"
-            endingLineNumber = "1051"
+            startingLineNumber = "1056"
+            endingLineNumber = "1056"
             landmarkName = "-publishLocalStream"
             landmarkType = "7">
          </BreakpointContent>
@@ -216,14 +216,14 @@
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
             uuid = "A38C24DA-7084-4A4F-8D76-C47B630F4221"
-            shouldBeEnabled = "Yes"
+            shouldBeEnabled = "No"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "241"
-            endingLineNumber = "241"
+            startingLineNumber = "243"
+            endingLineNumber = "243"
             landmarkName = "-configEngine"
             landmarkType = "7">
          </BreakpointContent>
@@ -232,14 +232,14 @@
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
             uuid = "82430F77-3C0C-4AD8-B2D4-98DD57AF1157"
-            shouldBeEnabled = "Yes"
+            shouldBeEnabled = "No"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1718"
-            endingLineNumber = "1718"
+            startingLineNumber = "1743"
+            endingLineNumber = "1743"
             landmarkName = "-quitRoomBackPreView:"
             landmarkType = "7">
             <Locations>
@@ -276,5 +276,37 @@
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "4826AC84-EC7A-4D84-B8D2-42054E550972"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Music/View/MyMusicBodyView.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "118"
+            endingLineNumber = "118"
+            landmarkName = "-requestData"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "95B70B37-01E6-4EE1-ADBA-EA3D4867CFCD"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Controller/HomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "427"
+            endingLineNumber = "427"
+            landmarkName = "-requestHotMusicList"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOff.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOff.imageset/live_micOff@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOff.imageset/live_micOff@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOn.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOn.imageset/live_micOn@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_micOn.imageset/live_micOn@3x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_myMusic.imageset/tool_myMusic@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_myMusic.imageset/tool_myMusic@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_uploadMusic.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_uploadMusic.imageset/tool_uploadMusic@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/NormalTool/tool_uploadMusic.imageset/tool_uploadMusic@3x.png


+ 33 - 14
KulexiuForTeacher/KulexiuForTeacher/Common/Define/PrefixHeader.pch

@@ -110,29 +110,48 @@ shouldPrevent = NO; \
         dispatch_sync(dispatch_get_main_queue(), block);\
     }
 
+//1. 测试且 ARC 环境
+#ifndef weakObj
+#define weakObj(object) autoreleasepool {} __weak __typeof__(object) object##_##weak_ = object;
+#endif
+
+#ifndef strongObj
+#define strongObj(object) autoreleasepool {} __typeof__(object) object = object##_##weak_;
+#endif
+
+//2. 正式且 ARC 环境
+#ifndef weakObj
+#define weakObj(object) try {} @catch (...){} __weak __typeof__(object) object##_##weak_ = object;
+#endif
+
+#ifndef strongObj
+#define strongObj(object) try {} @catch (...){} __typeof__(object) object = object##_##weak_;
+#endif
+
+
 // Include any system framework and library headers here that should be included in all compilation units.
 // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
 
 
 //#ifdef DEBUG
 
-//#define hostURL (@"https://dev.colexiu.com")
-//#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
-//#define WEBHOST (@"https://dev.colexiu.com/teacher")
-//#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
-//#define JSPUSH_ENVIRONMENT (NO)
-//#define RCIM_KEY (@"0vnjpoad0jbdz")
-//#define SUBMIT_UUID (YES)
+#define hostURL (@"https://dev.colexiu.com")
+#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
+#define WEBHOST (@"https://dev.colexiu.com/teacher")
+#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
+#define JSPUSH_ENVIRONMENT (NO)
+#define RCIM_KEY (@"0vnjpoad0jbdz")
+#define SUBMIT_UUID (YES)
 
 //#else
 
-#define hostURL (@"https://online.colexiu.com")
-#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
-#define WEBHOST (@"https://online.colexiu.com/teacher")
-#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
-#define JSPUSH_ENVIRONMENT (YES)
-#define RCIM_KEY (@"e5t4ouvpe42pa")
-#define SUBMIT_UUID (YES)
+//#define hostURL (@"https://online.colexiu.com")
+//#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
+//#define WEBHOST (@"https://online.colexiu.com/teacher")
+//#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
+//#define JSPUSH_ENVIRONMENT (YES)
+//#define RCIM_KEY (@"e5t4ouvpe42pa")
+//#define SUBMIT_UUID (YES)
 
 
 //#endif

+ 37 - 4
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Custom/GRScanManager.m

@@ -11,10 +11,14 @@
 #import <AudioToolbox/AudioToolbox.h>
 
 @interface GRScanManager()<AVCaptureMetadataOutputObjectsDelegate>
+
 @property (copy, nonatomic) void (^completionBlock) (NSString *);
 
 @property (nonatomic, strong) AVCaptureSession *session;
 
+@property (nonatomic, strong) dispatch_queue_t sessionQueue;
+
+
 @end
 
 @implementation GRScanManager
@@ -24,10 +28,20 @@
     if (self) {
         _supportQRCode = YES;
         _supportBarCode = YES;
+        [self createQueue];
     }
     return self;
 }
 
+/**
+ *  创建一个队列,防止阻塞主线程
+ */
+- (void)createQueue{
+    dispatch_queue_t sessionQueue = dispatch_queue_create("com.Colexiu.KulexiuForStudent.sesson", DISPATCH_QUEUE_SERIAL);
+    self.sessionQueue = sessionQueue;
+}
+
+
 #pragma mark - 扫描二维码
 #pragma mark 开始扫描
 - (void)startScanningQRCodeWithInView:(UIView *)inView scanView:(UIView *)scanView resultCallback:(void(^)(NSString *result))callback {
@@ -108,7 +122,28 @@
     output.rectOfInterest = CGRectMake(x, y, w, h);
     
     // 7.开始扫描
-    [session startRunning];
+    [self sessionStartRunning];
+}
+- (void)sessionStartRunning {
+    
+    @weakObj(self);
+    dispatch_async(self.sessionQueue, ^{
+        @strongObj(self);
+        if (!self.session.running) {
+            [self.session startRunning];
+        }
+    });
+}
+
+-(void)sessionStopRunning{
+    
+    @weakObj(self);
+    dispatch_async(self.sessionQueue, ^{
+        @strongObj(self);
+        if (self.session.running) {
+            [self.session stopRunning];
+        }
+    });
 }
 
 #pragma mark - 实现AVCaptureMetadataOutput代理方法
@@ -185,9 +220,7 @@
 }
 
 - (void)stopScanning {
-    if ([self.session isRunning]) {
-        [self.session stopRunning];
-    }
+    [self sessionStopRunning];
 }
 
 @end

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/UMShare/KSUMShareManager.m

@@ -9,7 +9,7 @@
 #import <UMShare/UMShare.h>
 #import <UShareUI/UShareUI.h>
 #import "TZImageManager.h"
-#import "KSShareGroupViewController.h"
+#import "KSImageShareViewController.h"
 
 @interface KSUMShareManager ()
 
@@ -55,7 +55,7 @@
     [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
         if (platformType == UMSocialPlatformType_UserDefine_Begin+1) { // 分享到群组
             if (self.shareType == KSSHARETYPE_IMAGE) {
-                KSShareGroupViewController *shareGroupCtrl = [[KSShareGroupViewController alloc] init];
+                KSImageShareViewController *shareGroupCtrl = [[KSImageShareViewController alloc] init];
                 shareGroupCtrl.shareImage = self.shareImage;
                 MJWeakSelf;
                 [shareGroupCtrl shareGroupCallback:^(BOOL isSuccess, NSString *descMsg) {

+ 3 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/ChatAddressBodyView.h

@@ -7,7 +7,7 @@
 
 #import "KSJXBodyView.h"
 
-typedef void(^ShareCallback)(BOOL isSuccess);
+typedef void(^ShareCallback)(BOOL isSuccess, NSString * _Nonnull desc);
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -15,9 +15,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, strong) NSString *searchKey;
 
-@property (nonatomic, assign) BOOL isShareVideo;
+@property (nonatomic, assign) BOOL isShareImage;
 @property (nonatomic, strong) NSString *message;
-@property (nonatomic, strong) NSString *linkUrl;
+@property (nonatomic, strong) UIImage *shareImage;
 
 - (void)refreshAndRequestData;
 

+ 26 - 10
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/ChatAddressBodyView.m

@@ -286,11 +286,16 @@
     if (self.selectIndex == 0) { // 联系人
         NSArray *filterArray = self.studentArray[indexPath.section];
         FriendListModel *model = filterArray[indexPath.row];
-        [self chatConversationWithTargetId:model.friendId targetName:model.friendNickname isGroup:NO];
+        if (_isShareImage) { // 分享
+            [self sendMessageWithTargetId:model.friendId isGroup:NO];
+        }
+        else { // 聊天
+            [self chatConversationWithTargetId:model.friendId targetName:model.friendNickname isGroup:NO];
+        }
     }
     else { // 群聊
         GroupListModel *model = self.classArray[indexPath.row];
-        if (_isShareVideo) { // 群聊消息
+        if (_isShareImage) { // 群聊消息
             [self sendMessageWithTargetId:model.groupId isGroup:YES];
         }
         else {
@@ -301,19 +306,30 @@
 }
 
 - (void)sendMessageWithTargetId:(NSString *)targetId isGroup:(BOOL)isGroup {
-    RCTextMessage *textMsg = [RCTextMessage messageWithContent:[NSString stringWithFormat:@"%@\n%@",self.message, self.linkUrl]];
-    textMsg.extra = [NSString stringWithFormat:@"dayaedu?type=video&url=%@", [self.linkUrl ks_base64EncodedString]];
+    
+    RCImageMessage *imgMsg = [RCImageMessage messageWithImage:self.shareImage];
+    imgMsg.full = YES;
     RCConversationType type = isGroup ? ConversationType_GROUP : ConversationType_PRIVATE;
-    [[RCIMClient sharedRCIMClient] sendMessage:type targetId:targetId content:textMsg pushContent:nil pushData:nil success:^(long messageId) {
-        dispatch_async(dispatch_get_main_queue(), ^{
+    [[RCIMClient sharedRCIMClient] sendMediaMessage:type targetId:targetId content:imgMsg pushContent:nil pushData:nil progress:^(int progress, long messageId) {
+        
+    } success:^(long messageId) {
+        dispatch_main_async_safe(^{
             if (self.callback) {
-                self.callback(YES);
+                self.callback(YES, @"发送成功");
             }
         });
-    } error:^(RCErrorCode nErrorCode, long messageId) {
-        dispatch_async(dispatch_get_main_queue(), ^{
+        
+    } error:^(RCErrorCode errorCode, long messageId) {
+        dispatch_main_async_safe(^{
+            if (self.callback) {
+                self.callback(NO, @"发送失败");
+            }
+        });
+        
+    } cancel:^(long messageId) {
+        dispatch_main_async_safe(^{
             if (self.callback) {
-                self.callback(NO);
+                self.callback(NO,@"已取消");
             }
         });
     }];

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeHotMusicModel.h

@@ -55,6 +55,7 @@
 @property (nonatomic, assign) double userId;
 @property (nonatomic, strong) NSString *submitAuditTime;
 @property (nonatomic, assign) BOOL exquisiteFlag;
+@property (nonatomic, strong) NSString *paymentType;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;

+ 8 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeHotMusicModel.m

@@ -53,6 +53,8 @@ NSString *const kHomeHotMusicModelUserId = @"userId";
 NSString *const kHomeHotMusicModelSubmitAuditTime = @"submitAuditTime";
 NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
 
+NSString *const kHomeHotMusicModelPaymentType = @"paymentType";
+
 
 @interface HomeHotMusicModel ()
 
@@ -106,7 +108,7 @@ NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
 @synthesize userId = _userId;
 @synthesize submitAuditTime = _submitAuditTime;
 @synthesize exquisiteFlag = _exquisiteFlag;
-
+@synthesize paymentType = _paymentType;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
 {
@@ -164,6 +166,7 @@ NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
             self.userId = [[self objectOrNilForKey:kHomeHotMusicModelUserId fromDictionary:dict] doubleValue];
             self.submitAuditTime = [self objectOrNilForKey:kHomeHotMusicModelSubmitAuditTime fromDictionary:dict];
         self.exquisiteFlag = [[self objectOrNilForKey:kHomeHotMusicModelExquisiteFlag fromDictionary:dict] boolValue];
+        self.paymentType = [self objectOrNilForKey:kHomeHotMusicModelPaymentType fromDictionary:dict];
     }
     
     return self;
@@ -217,6 +220,7 @@ NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
     [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kHomeHotMusicModelUserId];
     [mutableDict setValue:self.submitAuditTime forKey:kHomeHotMusicModelSubmitAuditTime];
     [mutableDict setValue:[NSNumber numberWithBool:self.exquisiteFlag] forKey:kHomeHotMusicModelExquisiteFlag];
+    [mutableDict setValue:self.paymentType forKey:kHomeHotMusicModelPaymentType];
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
@@ -287,6 +291,7 @@ NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
     self.userId = [aDecoder decodeDoubleForKey:kHomeHotMusicModelUserId];
     self.submitAuditTime = [aDecoder decodeObjectForKey:kHomeHotMusicModelSubmitAuditTime];
     self.exquisiteFlag = [aDecoder decodeBoolForKey:kHomeHotMusicModelExquisiteFlag];
+    self.paymentType = [aDecoder decodeObjectForKey:kHomeHotMusicModelPaymentType];
     return self;
 }
 
@@ -337,6 +342,7 @@ NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
     [aCoder encodeDouble:_userId forKey:kHomeHotMusicModelUserId];
     [aCoder encodeObject:_submitAuditTime forKey:kHomeHotMusicModelSubmitAuditTime];
     [aCoder encodeBool:_exquisiteFlag forKey:kHomeHotMusicModelExquisiteFlag];
+    [aCoder encodeObject:_paymentType forKey:kHomeHotMusicModelPaymentType];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -389,6 +395,7 @@ NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
         copy.userId = self.userId;
         copy.submitAuditTime = [self.submitAuditTime copyWithZone:zone];
         copy.exquisiteFlag = self.exquisiteFlag;
+        copy.paymentType = [self.paymentType copyWithZone:zone];
     }
     
     return copy;

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/Controller/MyMusicViewController.m

@@ -56,7 +56,7 @@
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     self.ks_prefersNavigationBarHidden = YES;
-    _titles = @[@"已购买",@"已上架",@"审核中",@"审核失败",@"已下架"];
+    _titles = @[@"已上架",@"审核中",@"审核失败",@"已下架"];
     [self configUI];
 }
 
@@ -342,7 +342,7 @@
 
 - (NSMutableArray *)listViewArray {
     if (!_listViewArray) {
-        _listViewArray = [NSMutableArray arrayWithArray:@[@"",@"",@"",@"",@""]];
+        _listViewArray = [NSMutableArray arrayWithArray:@[@"",@"",@"",@""]];
     }
     return _listViewArray;
 }

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/Model/MusicMessageModel.h

@@ -53,6 +53,7 @@
 
 @property (nonatomic, assign) BOOL isChoose;
 @property (nonatomic, assign) BOOL exquisiteFlag;
+@property (nonatomic, strong) NSString *paymentType;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;

+ 7 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/Model/MusicMessageModel.m

@@ -49,6 +49,7 @@ NSString *const kMusicMessageModelSubmitAuditTime = @"submitAuditTime";
 NSString *const kMusicMessageModelTitleImg = @"titleImg";
 
 NSString *const kMusicMessageModelExquisiteFlag = @"exquisiteFlag";
+NSString *const kMusicMessageModelPaymentType = @"paymentType";
 
 @interface MusicMessageModel ()
 
@@ -98,6 +99,7 @@ NSString *const kMusicMessageModelExquisiteFlag = @"exquisiteFlag";
 @synthesize submitAuditTime = _submitAuditTime;
 @synthesize titleImg = _titleImg;
 @synthesize exquisiteFlag = _exquisiteFlag;
+@synthesize paymentType = _paymentType;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
 {
@@ -151,6 +153,7 @@ NSString *const kMusicMessageModelExquisiteFlag = @"exquisiteFlag";
             self.submitAuditTime = [self objectOrNilForKey:kMusicMessageModelSubmitAuditTime fromDictionary:dict];
             self.titleImg = [self objectOrNilForKey:kMusicMessageModelTitleImg fromDictionary:dict];
         self.exquisiteFlag = [[self objectOrNilForKey:kMusicMessageModelExquisiteFlag fromDictionary:dict] integerValue];
+        self.paymentType = [self objectOrNilForKey:kMusicMessageModelPaymentType fromDictionary:dict];
     }
     
     return self;
@@ -200,6 +203,7 @@ NSString *const kMusicMessageModelExquisiteFlag = @"exquisiteFlag";
     [mutableDict setValue:self.submitAuditTime forKey:kMusicMessageModelSubmitAuditTime];
     [mutableDict setValue:self.titleImg forKey:kMusicMessageModelTitleImg];
     [mutableDict setValue:[NSNumber numberWithBool:self.exquisiteFlag] forKey:kMusicMessageModelExquisiteFlag];
+    [mutableDict setValue:self.paymentType forKey:kMusicMessageModelPaymentType];
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
@@ -266,6 +270,7 @@ NSString *const kMusicMessageModelExquisiteFlag = @"exquisiteFlag";
     self.submitAuditTime = [aDecoder decodeObjectForKey:kMusicMessageModelSubmitAuditTime];
     self.titleImg = [aDecoder decodeObjectForKey:kMusicMessageModelTitleImg];
     self.exquisiteFlag = [aDecoder decodeBoolForKey:kMusicMessageModelExquisiteFlag];
+    self.paymentType = [aDecoder decodeObjectForKey:kMusicMessageModelPaymentType];
     return self;
 }
 
@@ -312,6 +317,7 @@ NSString *const kMusicMessageModelExquisiteFlag = @"exquisiteFlag";
     [aCoder encodeObject:_submitAuditTime forKey:kMusicMessageModelSubmitAuditTime];
     [aCoder encodeObject:_titleImg forKey:kMusicMessageModelTitleImg];
     [aCoder encodeBool:_exquisiteFlag forKey:kMusicMessageModelExquisiteFlag];
+    [aCoder encodeObject:_paymentType forKey:kMusicMessageModelPaymentType];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -360,6 +366,7 @@ NSString *const kMusicMessageModelExquisiteFlag = @"exquisiteFlag";
         copy.submitAuditTime = [self.submitAuditTime copyWithZone:zone];
         copy.titleImg = [self.titleImg copyWithZone:zone];
         copy.exquisiteFlag = self.exquisiteFlag;
+        copy.paymentType = [self.paymentType copyWithZone:zone];
     }
     
     return copy;

+ 50 - 20
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicMessageCell.m

@@ -6,6 +6,7 @@
 //
 
 #import "MusicMessageCell.h"
+#import "MusicTagView.h"
 
 @interface MusicMessageCell ()
 @property (weak, nonatomic) IBOutlet UIView *actionView;
@@ -17,8 +18,10 @@
 
 @property (weak, nonatomic) IBOutlet UIImageView *playImage;
 
-@property (weak, nonatomic) IBOutlet UIView *typeView;
-@property (weak, nonatomic) IBOutlet UILabel *typeLabel;
+@property (weak, nonatomic) IBOutlet UIView *typeView; // 类型
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *typeViewWidth;
+
+
 
 @property (weak, nonatomic) IBOutlet UILabel *songName;
 @property (weak, nonatomic) IBOutlet UILabel *songAuth;
@@ -35,7 +38,6 @@
 @property (weak, nonatomic) IBOutlet UIImageView *qualityMusicTag;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *qualityTagWidth;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *qualityLeft;
-@property (weak, nonatomic) IBOutlet NSLayoutConstraint *qualityRight;
 
 @property (nonatomic, copy) MusicOffCallback callback;
 @end
@@ -130,24 +132,8 @@
     
     CGFloat maxWidth = [self getTagViewMaxWidth:authString];
     [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
-    
-    if ([songMessage.chargeType isEqualToString:@"VIP"]) {
-        self.typeView.layer.borderColor = HexRGB(0xD38535).CGColor;
-        self.typeLabel.text = @"会员";
-        self.typeLabel.textColor = HexRGB(0xCD863E);
-        
-    }
-    else if ([songMessage.chargeType isEqualToString:@"CHARGE"]) {
-        self.typeView.layer.borderColor = HexRGB(0x50A2D8).CGColor;
-        self.typeLabel.text = @"点播";
-        self.typeLabel.textColor = HexRGB(0x3591CE);
-    }
-    else {
-        self.typeView.layer.borderColor = HexRGB(0x01B84F).CGColor;
-        self.typeLabel.text = @"免费";
-        self.typeLabel.textColor = HexRGB(0x01B84F);
-    }
 
+    [self configTypeView:songMessage.paymentType];
     [self.musicCover sd_setImageWithURL:[NSURL URLWithString:[songMessage.titleImg getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"music_logo"]];
     
     if (rowIndex == ROWINDEX_TOP) {
@@ -184,6 +170,50 @@
     }
 }
 
+- (void)configTypeView:(NSString *)musicType {
+    [self.typeView removeAllSubViews];
+    NSArray * chargeArray = [musicType componentsSeparatedByString:@","];
+    CGFloat singleWidth = 30.0f;
+    CGFloat space = 5.0f;
+    CGFloat height = 17.0f;
+    for (NSInteger index = 0; index < chargeArray.count; index++) {
+        NSString *desc = chargeArray[index];
+        NSString *title = nil;
+        UIColor *borderColor = nil;
+        UIColor *titleColor = nil;
+        if ([desc isEqualToString:@"VIP"]) {
+            borderColor = HexRGB(0xD38535);
+            title = @"会员";
+            titleColor = HexRGB(0xCD863E);
+            
+        }
+        else if ([desc isEqualToString:@"CHARGE"]) {
+            borderColor = HexRGB(0x50A2D8);
+            title = @"点播";
+            titleColor = HexRGB(0x3591CE);
+        }
+        else {
+            borderColor = HexRGB(0x01B84F);
+            title = @"免费";
+            titleColor = HexRGB(0x01B84F);
+        }
+        CGRect frame = CGRectMake((singleWidth + space) * index, 0, singleWidth, height);
+        MusicTagView *typeView = [[MusicTagView alloc] initWithTitle:title titleColor:titleColor borderColor:borderColor];
+        typeView.frame = frame;
+        [self.typeView addSubview:typeView];
+    }
+    self.typeViewWidth.constant = [self getWidthWithTypeCount:chargeArray.count singleWidth:singleWidth space:space];
+}
+
+- (CGFloat)getWidthWithTypeCount:(NSInteger)count singleWidth:(CGFloat)singleWidth space:(CGFloat)space {
+    if (count == 1) {
+        return singleWidth;
+    }
+    else {
+        return singleWidth + (singleWidth + space) * (count - 1);
+    }
+}
+
 - (IBAction)downAction:(id)sender {
     if (self.callback) {
         self.callback(self.sourceModel);

+ 9 - 26
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicMessageCell.xib

@@ -1,9 +1,9 @@
 <?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" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -27,6 +27,11 @@
                                     <constraint firstAttribute="width" constant="48" id="XSb-vx-7KM"/>
                                     <constraint firstAttribute="height" constant="48" id="tfw-OT-d72"/>
                                 </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="4"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
                             </imageView>
                             <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="野蜂飞舞" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dl5-Bm-goQ">
                                 <rect key="frame" x="124" y="16" width="57.5" height="17"/>
@@ -52,32 +57,11 @@
                             </view>
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0sg-Qr-0or">
                                 <rect key="frame" x="70" y="16" width="30" height="17"/>
-                                <subviews>
-                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="点播" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HfV-3f-zsp">
-                                        <rect key="frame" x="4.5" y="2.5" width="21" height="12"/>
-                                        <fontDescription key="fontDescription" type="system" pointSize="10"/>
-                                        <color key="textColor" red="0.20784313730000001" green="0.56862745100000001" blue="0.80784313730000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                        <nil key="highlightedColor"/>
-                                    </label>
-                                </subviews>
                                 <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                 <constraints>
-                                    <constraint firstItem="HfV-3f-zsp" firstAttribute="centerX" secondItem="0sg-Qr-0or" secondAttribute="centerX" id="Cyh-Tv-xvT"/>
-                                    <constraint firstItem="HfV-3f-zsp" firstAttribute="centerY" secondItem="0sg-Qr-0or" secondAttribute="centerY" id="EnN-d3-DmG"/>
                                     <constraint firstAttribute="height" constant="17" id="OPA-je-PeY"/>
                                     <constraint firstAttribute="width" constant="30" id="sG9-Hf-9Fa"/>
                                 </constraints>
-                                <userDefinedRuntimeAttributes>
-                                    <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
-                                        <real key="value" value="0.5"/>
-                                    </userDefinedRuntimeAttribute>
-                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                        <real key="value" value="4"/>
-                                    </userDefinedRuntimeAttribute>
-                                    <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
-                                        <color key="value" red="0.20784313730000001" green="0.56862745100000001" blue="0.80784313730000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    </userDefinedRuntimeAttribute>
-                                </userDefinedRuntimeAttributes>
                             </view>
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Zm8-lb-ZEo">
                                 <rect key="frame" x="14" y="79.5" width="318" height="0.5"/>
@@ -169,9 +153,9 @@
                             <constraint firstItem="efH-vf-n5D" firstAttribute="centerY" secondItem="0sg-Qr-0or" secondAttribute="centerY" id="a0E-ob-qWA"/>
                             <constraint firstItem="7XK-Ip-4nf" firstAttribute="centerY" secondItem="sfm-yS-y7g" secondAttribute="centerY" id="gC0-wR-eHn"/>
                             <constraint firstItem="bva-Fc-J3U" firstAttribute="centerY" secondItem="RpH-mG-bAV" secondAttribute="centerY" id="hFT-pZ-tvT"/>
-                            <constraint firstItem="efH-vf-n5D" firstAttribute="leading" secondItem="0sg-Qr-0or" secondAttribute="trailing" constant="5" id="ivg-qq-OKW"/>
                             <constraint firstItem="Zm8-lb-ZEo" firstAttribute="leading" secondItem="sfm-yS-y7g" secondAttribute="leading" constant="14" id="lcg-jT-vjD"/>
                             <constraint firstItem="zQo-zL-Uo4" firstAttribute="bottom" secondItem="u0Q-lP-CEF" secondAttribute="bottom" id="mdH-Xd-Com"/>
+                            <constraint firstItem="efH-vf-n5D" firstAttribute="leading" secondItem="0sg-Qr-0or" secondAttribute="trailing" constant="5" id="mkh-Ux-PW1"/>
                             <constraint firstAttribute="trailing" secondItem="Zm8-lb-ZEo" secondAttribute="trailing" constant="15" id="sCS-HL-jo0"/>
                             <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="dl5-Bm-goQ" secondAttribute="trailing" constant="10" id="sap-V4-hyb"/>
                             <constraint firstItem="zQo-zL-Uo4" firstAttribute="leading" secondItem="u0Q-lP-CEF" secondAttribute="leading" id="tMw-2C-LzA"/>
@@ -203,13 +187,12 @@
                 <outlet property="playImage" destination="ZTx-7w-9HF" id="b4d-YC-5QM"/>
                 <outlet property="qualityLeft" destination="7c3-9k-8hE" id="jiX-xk-lkj"/>
                 <outlet property="qualityMusicTag" destination="efH-vf-n5D" id="vtP-Nc-7QR"/>
-                <outlet property="qualityRight" destination="ivg-qq-OKW" id="yDe-sZ-GwM"/>
                 <outlet property="qualityTagWidth" destination="uo4-Yf-NAJ" id="bCv-Yj-dxq"/>
                 <outlet property="songAuth" destination="RpH-mG-bAV" id="KhE-Bc-yps"/>
                 <outlet property="songName" destination="dl5-Bm-goQ" id="bec-Nd-9g2"/>
                 <outlet property="tagView" destination="bva-Fc-J3U" id="E48-ph-0x7"/>
-                <outlet property="typeLabel" destination="HfV-3f-zsp" id="t0z-kF-06K"/>
                 <outlet property="typeView" destination="0sg-Qr-0or" id="bll-P9-6T7"/>
+                <outlet property="typeViewWidth" destination="sG9-Hf-9Fa" id="ajC-k4-Lo8"/>
             </connections>
             <point key="canvasLocation" x="131.15942028985509" y="91.071428571428569"/>
         </tableViewCell>

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicTagView.h

@@ -0,0 +1,18 @@
+//
+//  MusicTagView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/9/21.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MusicTagView : UIView
+
+- (instancetype)initWithTitle:(NSString *)title titleColor:(UIColor *)titleColor borderColor:(UIColor *)borderColor;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 55 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicTagView.m

@@ -0,0 +1,55 @@
+//
+//  MusicTagView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/9/21.
+//
+
+#import "MusicTagView.h"
+
+@interface MusicTagView ()
+
+@property (nonatomic, strong) UILabel *tagLabel;
+
+@end
+
+@implementation MusicTagView
+
+- (instancetype)initWithTitle:(NSString *)title titleColor:(UIColor *)titleColor borderColor:(UIColor *)borderColor {
+    if (self = [super init]) {
+        [self configUIWithTitle:title titleColor:titleColor borderColor:borderColor];
+    }
+    return self;
+}
+
+- (void)configUIWithTitle:(NSString *)title titleColor:(UIColor *)titleColor borderColor:(UIColor *)borderColor {
+    [self addSubview:self.tagLabel];
+    self.tagLabel.text = title;
+    self.tagLabel.textColor = titleColor;
+    self.layer.borderWidth = 0.5f;
+    self.layer.cornerRadius = 4.0f;
+    self.layer.borderColor = borderColor.CGColor;
+    [self.tagLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self);
+        make.centerY.mas_equalTo(self.mas_centerY);
+    }];
+}
+
+- (UILabel *)tagLabel {
+    if (!_tagLabel) {
+        _tagLabel = [[UILabel alloc] init];
+        _tagLabel.font = [UIFont systemFontOfSize:10.0f];
+        _tagLabel.textAlignment = NSTextAlignmentCenter;
+    }
+    return _tagLabel;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 33 - 65
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MyMusicBodyView.m

@@ -92,16 +92,16 @@
     self.isLoadMore = YES;
     self.pages = 1;
     self.rows = 10;
-    if (self.selectIndex == 1) { // 已上架
+    if (self.selectIndex == 0) { // 已上架
         self.audioStatus = @"PASS";
     }
-    else if (self.selectIndex == 2) { // 审核中
+    else if (self.selectIndex == 1) { // 审核中
         self.audioStatus = @"DOING";
     }
-    else if (self.selectIndex == 3) { // 审核失败
+    else if (self.selectIndex == 2) { // 审核失败
         self.audioStatus = @"UNPASS";
     }
-    else if (self.selectIndex == 4) { // 已下架
+    else if (self.selectIndex == 3) { // 已下架
         self.audioStatus = @"OUT_SALE";
     }
     self.dataArray = [NSMutableArray array];
@@ -112,62 +112,33 @@
 
 
 - (void)requestData {
-    if (self.selectIndex == 0) {
-        [KSNetworkingManager myMusicListRequest:KS_POST page:self.pages rows:self.rows search:self.searchKey subjectIds:self.subjectIds success:^(NSDictionary * _Nonnull dic) {
-            [self endRefresh];
-            if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-                NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
-                for (NSDictionary *parm in sourceArray) {
-                    MusicMessageModel *model = [[MusicMessageModel alloc] initWithDictionary:parm];
-                    [self.dataArray addObject:model];
-                }
-                if (sourceArray.count < self.rows) {
-                    self.isLoadMore = NO;
-                }
-            }
-            else {
-                [self MBPShow:MESSAGEKEY];
-            }
-            [self.tableView reloadData];
-            [self changePromptLabelStateWithArray:self.dataArray];
-        } faliure:^(NSError * _Nonnull error) {
-            [self endRefresh];
-            if (self.networkAvaiable == NO) {
-                [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
-            }
-            [self.dataArray removeAllObjects];
-            [self.tableView reloadData];
-            [self changePromptLabelStateWithArray:self.dataArray];
-        }];
-    }
-    else {
-        [KSNetworkingManager musicListRequest:KS_POST auditStatus:self.audioStatus page:self.pages rows:self.rows search:self.searchKey subjectIds:self.subjectIds success:^(NSDictionary * _Nonnull dic) {
-            [self endRefresh];
-            if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-                NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
-                for (NSDictionary *parm in sourceArray) {
-                    MusicMessageModel *model = [[MusicMessageModel alloc] initWithDictionary:parm];
-                    [self.dataArray addObject:model];
-                }
-                if (sourceArray.count < self.rows) {
-                    self.isLoadMore = NO;
-                }
-            }
-            else {
-                [self MBPShow:MESSAGEKEY];
+    
+    [KSNetworkingManager musicListRequest:KS_POST auditStatus:self.audioStatus page:self.pages rows:self.rows search:self.searchKey subjectIds:self.subjectIds success:^(NSDictionary * _Nonnull dic) {
+        [self endRefresh];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
+            for (NSDictionary *parm in sourceArray) {
+                MusicMessageModel *model = [[MusicMessageModel alloc] initWithDictionary:parm];
+                [self.dataArray addObject:model];
             }
-            [self.tableView reloadData];
-            [self changePromptLabelStateWithArray:self.dataArray];
-        } faliure:^(NSError * _Nonnull error) {
-            [self endRefresh];
-            if (self.networkAvaiable == NO) {
-                [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
+            if (sourceArray.count < self.rows) {
+                self.isLoadMore = NO;
             }
-            [self.dataArray removeAllObjects];
-            [self.tableView reloadData];
-            [self changePromptLabelStateWithArray:self.dataArray];
-        }];
-    }
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+        [self.tableView reloadData];
+        [self changePromptLabelStateWithArray:self.dataArray];
+    } faliure:^(NSError * _Nonnull error) {
+        [self endRefresh];
+        if (self.networkAvaiable == NO) {
+            [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
+        }
+        [self.dataArray removeAllObjects];
+        [self.tableView reloadData];
+        [self changePromptLabelStateWithArray:self.dataArray];
+    }];
 }
 
 
@@ -238,15 +209,12 @@
 
 - (MUSICCELLTYPE)getCellType:(NSInteger)index {
     if (index == 0) {
-        return MUSICCELLTYPE_OWNER;
-    }
-    else if (index == 1) {
         return MUSICCELLTYPE_ING;
     }
-    else if (index == 2) {
+    else if (index == 1) {
         return MUSICCELLTYPE_CHECK;
     }
-    else if (index == 3) {
+    else if (index == 2) {
         return MUSICCELLTYPE_CHECKFAILED;
     }
     else {
@@ -280,7 +248,7 @@
 }
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    if (self.selectIndex == 3 || self.selectIndex == 4) {
+    if (self.selectIndex == 2 || self.selectIndex == 3) {
         MusicMessageModel *model = self.dataArray[indexPath.row];
         KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
         webCtrl.url = [NSString stringWithFormat:@"%@/#/music-upload/%.0f/edit", WEBHOST, model.internalBaseClassIdentifier];
@@ -376,7 +344,7 @@
         self.authStatus = NO;
     }
     
-    if (self.authStatus == NO && self.selectIndex != 0) {
+    if (self.authStatus == NO) {
         [self showAuthView];
     }
     else {

+ 4 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/ScanView/Controller/KSScanViewController.m

@@ -36,6 +36,7 @@
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     self.ks_prefersNavigationBarHidden = YES;
+    self.view.backgroundColor = HexRGB(0x000000);
 }
 
 - (void)viewWillAppear:(BOOL)animated {
@@ -179,7 +180,9 @@
     self.mediaManager.needCropImage = NO;
     MJWeakSelf;
     [self.mediaManager noAlertCallback:^(NSString * _Nullable videoUrl, NSMutableArray * _Nullable imageArray, NSMutableArray * _Nullable imageAsset) {
-        [weakSelf scanImage:[imageArray lastObject]];
+        dispatch_main_async_safe(^{
+            [weakSelf scanImage:[imageArray lastObject]];
+        });
     }];
     [self.mediaManager pushImagePickerController];
 }

+ 44 - 14
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.m

@@ -6,11 +6,13 @@
 //
 
 #import "HomeHotMusicCellView.h"
+#import "MusicTagView.h"
 
 @interface HomeHotMusicCellView ()
 
-@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
-@property (weak, nonatomic) IBOutlet UIView *statusView;
+@property (weak, nonatomic) IBOutlet UIView *typeView;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *typeViewWidth;
+
 @property (weak, nonatomic) IBOutlet UILabel *songNameLabel;
 @property (weak, nonatomic) IBOutlet UILabel *songAuth;
 @property (weak, nonatomic) IBOutlet UILabel *uploadName;
@@ -98,21 +100,49 @@
     CGFloat maxWidth = [self getTagViewMaxWidth:owner];
     [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
     self.lineView.hidden = hideLineView;
-    
-    if ([sourceModel.chargeType isEqualToString:@"VIP"]) {
-        self.statusView.layer.borderColor = HexRGB(0xCD863E).CGColor;
-        self.statusLabel.text = @"会员";
-        self.statusLabel.textColor = HexRGB(0xCD863E);
+    [self configTypeView:sourceModel.paymentType];
+}
+- (void)configTypeView:(NSString *)musicType {
+    [self.typeView removeAllSubViews];
+    NSArray * chargeArray = [musicType componentsSeparatedByString:@","];
+    CGFloat singleWidth = 30.0f;
+    CGFloat space = 5.0f;
+    CGFloat height = 17.0f;
+    for (NSInteger index = 0; index < chargeArray.count; index++) {
+        NSString *desc = chargeArray[index];
+        NSString *title = nil;
+        UIColor *borderColor = nil;
+        UIColor *titleColor = nil;
+        if ([desc isEqualToString:@"VIP"]) {
+            borderColor = HexRGB(0xD38535);
+            title = @"会员";
+            titleColor = HexRGB(0xCD863E);
+            
+        }
+        else if ([desc isEqualToString:@"CHARGE"]) {
+            borderColor = HexRGB(0x50A2D8);
+            title = @"点播";
+            titleColor = HexRGB(0x3591CE);
+        }
+        else {
+            borderColor = HexRGB(0x01B84F);
+            title = @"免费";
+            titleColor = HexRGB(0x01B84F);
+        }
+        CGRect frame = CGRectMake((singleWidth + space) * index, 0, singleWidth, height);
+        MusicTagView *typeView = [[MusicTagView alloc] initWithTitle:title titleColor:titleColor borderColor:borderColor];
+        typeView.frame = frame;
+        [self.typeView addSubview:typeView];
     }
-    else if ([sourceModel.chargeType isEqualToString:@"CHARGE"]) {
-        self.statusView.layer.borderColor = HexRGB(0x3591CE).CGColor;
-        self.statusLabel.text = @"点播";
-        self.statusLabel.textColor = HexRGB(0x3591CE);
+    self.typeViewWidth.constant = [self getWidthWithTypeCount:chargeArray.count singleWidth:singleWidth space:space];
+}
+
+- (CGFloat)getWidthWithTypeCount:(NSInteger)count singleWidth:(CGFloat)singleWidth space:(CGFloat)space {
+    if (count == 1) {
+        return singleWidth;
     }
     else {
-        self.statusView.layer.borderColor = HexRGB(0x01B84F).CGColor;
-        self.statusLabel.text = @"免费";
-        self.statusLabel.textColor = HexRGB(0x01B84F);
+        return singleWidth + (singleWidth + space) * (count - 1);
     }
 }
 

+ 10 - 37
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.xib

@@ -1,9 +1,9 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" 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"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -15,48 +15,21 @@
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="N1D-TV-iWW">
-                    <rect key="frame" x="11" y="19" width="31" height="17"/>
-                    <subviews>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="免费" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Py1-eU-jUO">
-                            <rect key="frame" x="5" y="1" width="21" height="14"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="14" id="tlY-id-hEI"/>
-                            </constraints>
-                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="10"/>
-                            <color key="textColor" red="0.0039215686269999999" green="0.75686274509999996" blue="0.70980392160000005" alpha="1" colorSpace="calibratedRGB"/>
-                            <nil key="highlightedColor"/>
-                            <userDefinedRuntimeAttributes>
-                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="4"/>
-                                </userDefinedRuntimeAttribute>
-                            </userDefinedRuntimeAttributes>
-                        </label>
-                    </subviews>
+                    <rect key="frame" x="11" y="19" width="30" height="17"/>
                     <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                     <constraints>
-                        <constraint firstItem="Py1-eU-jUO" firstAttribute="leading" secondItem="N1D-TV-iWW" secondAttribute="leading" constant="5" id="DGu-KO-U8U"/>
-                        <constraint firstAttribute="width" constant="31" id="Fkh-p3-6cV"/>
-                        <constraint firstAttribute="trailing" secondItem="Py1-eU-jUO" secondAttribute="trailing" constant="5" id="PIY-vI-xI7"/>
-                        <constraint firstItem="Py1-eU-jUO" firstAttribute="top" secondItem="N1D-TV-iWW" secondAttribute="top" constant="1" id="TLG-Bf-Sdj"/>
-                        <constraint firstAttribute="bottom" secondItem="Py1-eU-jUO" secondAttribute="bottom" constant="2" id="rwb-d0-nEK"/>
+                        <constraint firstAttribute="width" constant="30" id="Fkh-p3-6cV"/>
+                        <constraint firstAttribute="height" constant="17" id="ibb-Fp-9vJ"/>
                     </constraints>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="4"/>
-                        </userDefinedRuntimeAttribute>
-                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
-                            <real key="value" value="1"/>
-                        </userDefinedRuntimeAttribute>
-                    </userDefinedRuntimeAttributes>
                 </view>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="最伟大的作品" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7xw-r5-qc1">
-                    <rect key="frame" x="66" y="17.5" width="98" height="20"/>
+                    <rect key="frame" x="65" y="17.5" width="98" height="20"/>
                     <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                     <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="-周杰伦" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jm2-P7-5K9">
-                    <rect key="frame" x="169" y="20" width="43" height="15"/>
+                    <rect key="frame" x="168" y="20" width="43" height="15"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
                     <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
@@ -96,7 +69,7 @@
                     </connections>
                 </button>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="quality_tag" translatesAutoresizingMaskIntoConstraints="NO" id="KtS-XT-IOh">
-                    <rect key="frame" x="47" y="19" width="14" height="17"/>
+                    <rect key="frame" x="46" y="19" width="14" height="17"/>
                     <constraints>
                         <constraint firstAttribute="width" constant="14" id="qbi-AW-4Ra"/>
                         <constraint firstAttribute="height" constant="17" id="xIf-1B-dUw"/>
@@ -139,9 +112,9 @@
                 <outlet property="qualityTagWidth" destination="qbi-AW-4Ra" id="UMO-DU-Z6o"/>
                 <outlet property="songAuth" destination="jm2-P7-5K9" id="rS6-tU-qwV"/>
                 <outlet property="songNameLabel" destination="7xw-r5-qc1" id="fzV-Mi-66B"/>
-                <outlet property="statusLabel" destination="Py1-eU-jUO" id="NYg-Iw-DCP"/>
-                <outlet property="statusView" destination="N1D-TV-iWW" id="wy9-ES-Lla"/>
                 <outlet property="tagView" destination="qrG-kH-VRz" id="za1-QD-1A2"/>
+                <outlet property="typeView" destination="N1D-TV-iWW" id="NlJ-g6-aro"/>
+                <outlet property="typeViewWidth" destination="Fkh-p3-6cV" id="wLC-I3-akC"/>
                 <outlet property="uploadName" destination="yx5-8B-fUi" id="WSv-Gx-SCl"/>
             </connections>
             <point key="canvasLocation" x="101.44927536231884" y="67.299107142857139"/>

+ 25 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m

@@ -160,6 +160,8 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
 
 @property (nonatomic, assign) BOOL needPublishStream;
 
+@property (nonatomic, assign) BOOL micEnable;
+
 @end
 
 
@@ -375,7 +377,9 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
 }
 
 - (void)showLiveView {
+    
     if (self.isPauseLive) { // 直接切换页面
+//        self.micEnable = self.micEnable;
         self.pageType = LIVEPAGE_LIVE;
         [self.view addSubview:self.livePageView];
         [self.livePageView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -428,6 +432,7 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
 }
 
 - (void)createLivePageViewDisplay {
+    self.micEnable = YES;
     self.pageType = LIVEPAGE_LIVE;
     self.isImConnected = [USER_MANAGER checkIMConnected];
     [self registerNotification];
@@ -1623,11 +1628,31 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
         {
             [self showMoreView];
         }
+            break;
+        case LIVEROOMACTION_MICACTION:
+        {
+            self.micEnable = !self.micEnable;
+            [[RCRTCEngine sharedInstance].defaultAudioStream setMicrophoneDisable:!self.micEnable];
+            NSString *desc = @"";
+            if (self.micEnable) {
+                desc = @"你已开启麦克风";
+            }
+            else {
+                desc = @"你已关闭麦克风";
+            }
+            [self MBPShow:desc];
+        }
+            break;
         default:
             break;
     }
 }
 
+- (void)setMicEnable:(BOOL)micEnable {
+    _micEnable = micEnable;
+    self.bottomView.isMicOn = micEnable;
+}
+
 - (void)showMoreView {
     [self.view addSubview:self.moreView];
 }

+ 5 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.h

@@ -13,14 +13,19 @@ typedef NS_ENUM(NSInteger, LIVEROOMACTION) {
     LIVEROOMACTION_CHAT,
     LIVEROOMACTION_SEAT,
     LIVEROOMACTION_QUIT,
+    LIVEROOMACTION_MICACTION,
 };
 
 typedef void(^LiveBottomCallback)(LIVEROOMACTION action);
 
 @interface LiveRoomBottomView : UIView
 
+@property (nonatomic, assign) BOOL isMicOn;
+
 + (instancetype)shareInstance;
 
+@property (weak, nonatomic) IBOutlet UIButton *micButton;
+
 - (void)bottomClickAction:(LiveBottomCallback)callback;
 
 @end

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.m

@@ -43,6 +43,24 @@
     }
 }
 
+- (IBAction)micButtonAction:(id)sender {
+    if (self.callback) {
+        self.callback(LIVEROOMACTION_MICACTION);
+    }
+}
+
+- (void)setIsMicOn:(BOOL)isMicOn {
+    _isMicOn = isMicOn;
+    NSString *imageName = @"";
+    if (isMicOn) {
+        imageName = @"live_micOn";
+    }
+    else {
+        imageName = @"live_micOff";
+    }
+    [self.micButton setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
+}
+
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 25 - 7
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.xib

@@ -1,9 +1,9 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" 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"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -14,7 +14,7 @@
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jTy-ba-b13">
-                    <rect key="frame" x="12" y="24" width="287" height="38"/>
+                    <rect key="frame" x="12" y="24" width="238" height="38"/>
                     <subviews>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="和同学聊两句~" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kYE-Qz-HRk">
                             <rect key="frame" x="14" y="10.5" width="100" height="17"/>
@@ -23,7 +23,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="liveroom_chat" translatesAutoresizingMaskIntoConstraints="NO" id="cPM-ak-zqh">
-                            <rect key="frame" x="250" y="6" width="26" height="26"/>
+                            <rect key="frame" x="201" y="6" width="26" height="26"/>
                         </imageView>
                     </subviews>
                     <color key="backgroundColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="0.25" colorSpace="calibratedRGB"/>
@@ -44,8 +44,8 @@
                         <outletCollection property="gestureRecognizers" destination="NfQ-Px-XVN" appends="YES" id="bAE-zd-lYr"/>
                     </connections>
                 </view>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ggL-eh-YOa">
-                    <rect key="frame" x="309" y="21" width="44" height="44"/>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ggL-eh-YOa">
+                    <rect key="frame" x="260" y="21" width="44" height="44"/>
                     <constraints>
                         <constraint firstAttribute="width" constant="44" id="e86-p7-Vye"/>
                         <constraint firstAttribute="height" constant="44" id="geo-3u-phf"/>
@@ -56,6 +56,18 @@
                         <action selector="seatAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="9mg-Nx-aBn"/>
                     </connections>
                 </button>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HuW-Iz-IGX">
+                    <rect key="frame" x="309" y="21" width="44" height="44"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="44" id="hgb-6c-iv7"/>
+                        <constraint firstAttribute="height" constant="44" id="oEM-kE-U0P"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" image="live_micOn"/>
+                    <connections>
+                        <action selector="micButtonAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="7hE-vy-vbs"/>
+                    </connections>
+                </button>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0Pn-yj-7I8">
                     <rect key="frame" x="358" y="21" width="44" height="44"/>
                     <subviews>
@@ -83,17 +95,22 @@
             </subviews>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
-                <constraint firstItem="0Pn-yj-7I8" firstAttribute="leading" secondItem="ggL-eh-YOa" secondAttribute="trailing" constant="5" id="Ay2-yo-BL4"/>
                 <constraint firstItem="ggL-eh-YOa" firstAttribute="centerY" secondItem="jTy-ba-b13" secondAttribute="centerY" id="Fdf-Xi-1cU"/>
                 <constraint firstItem="0Pn-yj-7I8" firstAttribute="centerY" secondItem="jTy-ba-b13" secondAttribute="centerY" id="JME-zi-czB"/>
                 <constraint firstItem="ggL-eh-YOa" firstAttribute="leading" secondItem="jTy-ba-b13" secondAttribute="trailing" constant="10" id="KRm-Tz-ut5"/>
                 <constraint firstAttribute="trailing" secondItem="0Pn-yj-7I8" secondAttribute="trailing" constant="12" id="UVM-th-SZ5"/>
+                <constraint firstItem="HuW-Iz-IGX" firstAttribute="leading" secondItem="ggL-eh-YOa" secondAttribute="trailing" constant="5" id="Z8T-VD-M7b"/>
                 <constraint firstItem="jTy-ba-b13" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="12" id="dmB-Tj-Bau"/>
+                <constraint firstItem="0Pn-yj-7I8" firstAttribute="leading" secondItem="HuW-Iz-IGX" secondAttribute="trailing" constant="5" id="lbE-Kg-N5J"/>
                 <constraint firstItem="jTy-ba-b13" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="t8u-VX-RG5"/>
+                <constraint firstItem="HuW-Iz-IGX" firstAttribute="centerY" secondItem="ggL-eh-YOa" secondAttribute="centerY" id="tXZ-75-tTf"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="micButton" destination="HuW-Iz-IGX" id="kI6-FK-8sJ"/>
+            </connections>
             <point key="canvasLocation" x="131.8840579710145" y="-12.723214285714285"/>
         </view>
         <tapGestureRecognizer id="NfQ-Px-XVN">
@@ -108,6 +125,7 @@
         </tapGestureRecognizer>
     </objects>
     <resources>
+        <image name="live_micOn" width="38" height="38"/>
         <image name="liveroom_chat" width="26" height="26"/>
         <image name="liveroom_quit" width="38" height="38"/>
         <image name="seat_image" width="38" height="38"/>

+ 34 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/MidiPlayer/ShareInChat/Controller/KSImageShareViewController.h

@@ -0,0 +1,34 @@
+//
+//  KSImageShareViewController.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/9/21.
+//
+
+#import "KSBaseViewController.h"
+#import "JXCategoryView.h"
+#import "JXPagerView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, SHAREGROUP_TYPE) {
+    SHAREGROUP_TYPE_SUCCESS,
+    SHAREGROUP_TYPE_FAIL,
+};
+
+typedef void(^ShareGroupCallback)(BOOL isSuccess, NSString * _Nonnull descMsg);
+
+
+@interface KSImageShareViewController : KSBaseViewController<JXCategoryListContentViewDelegate>
+
+@property (nonatomic, strong) JXPagerView *pagerView;
+@property (nonatomic, strong, readonly) JXCategoryTitleView *categoryView;
+@property (nonatomic, strong) NSArray <NSString *> *titles;
+
+@property (nonatomic, assign) UIImage *shareImage;
+
+- (void)shareGroupCallback:(ShareGroupCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 233 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/MidiPlayer/ShareInChat/Controller/KSImageShareViewController.m

@@ -0,0 +1,233 @@
+//
+//  KSImageShareViewController.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/9/21.
+//
+
+#import "KSImageShareViewController.h"
+#import "ChatAddressHeaderView.h"
+#import "JXCategoryView.h"
+#import "JXPagerListRefreshView.h"
+#import "ChatAddressBodyView.h"
+
+@interface KSImageShareViewController ()<JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate,JXCategoryViewDelegate>
+
+@property (nonatomic, strong) ChatAddressHeaderView *headView;
+
+@property (nonatomic, assign) NSInteger selectedIndex;
+
+@property (nonatomic, strong) NSMutableArray *listViewArray;
+
+@property (nonatomic, copy) ShareGroupCallback callback;
+
+@end
+
+@implementation KSImageShareViewController
+
+- (void)backAction {
+    if (self.callback) {
+        self.callback(NO, @"已取消");
+    }
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)shareGroupCallback:(ShareGroupCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    _titles = @[@"班级",@"老师"];
+    [self allocTitle:@"分享"];
+    [self configUI];
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    self.view.backgroundColor = HexRGB(0xf6f8f9);
+    [self.view addSubview:self.headView];
+    self.headView.frame = CGRectMake(0, 0, kScreenWidth, 100);
+    MJWeakSelf;
+    [self.headView chatAddressbookAction:^(CHATADDRESSTYPE type, NSString * _Nullable searchKey) {
+        [weakSelf topViewAction:type search:searchKey];
+    }];
+    
+    _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 100, kScreenWidth, 10)];
+    _categoryView.backgroundColor = HexRGB(0xf6f8f9);
+    self.categoryView.titles = self.titles;
+    self.categoryView.delegate = self;
+    self.categoryView.titleFont = [UIFont systemFontOfSize:16.0f];
+    self.categoryView.titleSelectedFont = [UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium];
+    self.categoryView.titleSelectedColor = THEMECOLOR;
+    self.categoryView.titleColor = HexRGB(0x777777);
+    self.categoryView.titleColorGradientEnabled = YES;
+    self.categoryView.hidden = YES;
+    _pagerView = [self preferredPagingView];
+    self.pagerView.frame = CGRectMake(0, 100, kScreenWidth, kScreenHeight - kNaviBarHeight-100 - kTabBarHeight);
+    self.pagerView.listContainerView.categoryNestPagingEnabled = YES;
+    self.pagerView.mainTableView.gestureDelegate = self;
+    self.pagerView.backgroundColor = [UIColor clearColor];
+    self.pagerView.mainTableView.backgroundColor = [UIColor clearColor];
+    [self.view addSubview:self.pagerView];
+    self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
+}
+
+
+
+- (void)topViewAction:(CHATADDRESSTYPE)type search:(NSString *)searchKey {
+    switch (type) {
+        case CHATADDRESSTYPE_PERSON: // 联系人
+        {
+            [self.categoryView selectItemAtIndex:0];
+            self.selectedIndex = 0;
+        }
+            break;
+        case CHATADDRESSTYPE_GROUP: // 群组
+        {
+            [self.categoryView selectItemAtIndex:1];
+            self.selectedIndex = 1;
+        }
+            break;
+        case CHATADDRESSTYPE_SEARCH:  // 搜索
+        {
+            [self searchRequest:searchKey];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)searchRequest:(NSString *)searchKey {
+    if (self.listViewArray.count > self.selectedIndex) {
+        ChatAddressBodyView *listView = self.listViewArray[self.selectedIndex];
+        listView.searchKey = searchKey;
+        [listView refreshAndRequestData];
+    }
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+    if (self.listViewArray.count > self.categoryView.selectedIndex) {
+        id value = self.listViewArray[self.categoryView.selectedIndex];
+        if ([value isKindOfClass:[KSJXBodyView class]]) {
+            KSJXBodyView *listView = (KSJXBodyView *)value;
+            [listView beginFirstRefresh];
+        }
+    }
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
+}
+
+- (JXPagerView *)preferredPagingView {
+    return [[JXPagerListRefreshView alloc] initWithDelegate:self];
+}
+
+#pragma mark - JXPagerViewDelegate
+
+- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
+    return [UIView new];
+}
+
+- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
+    return CGFLOAT_MIN;
+}
+
+- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return 10;
+}
+
+- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return self.categoryView;
+}
+
+- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
+    //和categoryView的item数量一致
+    return self.titles.count;
+}
+
+- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
+    ChatAddressBodyView *listView = [[ChatAddressBodyView alloc] init];
+    listView.naviController = self.navigationController;
+    listView.isShareImage = YES;
+    listView.shareImage = self.shareImage;
+    MJWeakSelf;
+    [listView shareCallback:^(BOOL isSuccess, NSString * _Nonnull desc) {
+        if (weakSelf.callback) {
+            weakSelf.callback(isSuccess, desc);
+            [weakSelf.navigationController popViewControllerAnimated:YES];
+        }
+    }];
+    [self.listViewArray addObject:listView];
+    if (index == 0) {
+        listView.selectIndex = 0;
+    }else if (index == 1) {
+        listView.selectIndex = 1;
+    }
+    [listView beginFirstRefresh];
+    return listView;
+}
+
+#pragma mark - JXCategoryViewDelegate
+- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
+    BOOL scrollPersonTable = index == 0;
+    [self.headView scrollPersonTable:scrollPersonTable];
+    self.selectedIndex = index;
+}
+
+#pragma mark - JXPagerMainTableViewGestureDelegate
+
+- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
+    //禁止categoryView左右滑动的时候,上下和左右都可以滚动
+    if (otherGestureRecognizer == self.categoryView.collectionView.panGestureRecognizer) {
+        return NO;
+    }
+    return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
+}
+
+
+- (NSMutableArray *)listViewArray {
+    if (!_listViewArray) {
+        _listViewArray = [NSMutableArray arrayWithArray:@[@"",@""]];
+    }
+    return _listViewArray;
+}
+
+#pragma mark - JXCategoryListContentViewDelegate
+
+- (UIView *)listView {
+    return self.view;
+}
+- (ChatAddressHeaderView *)headView {
+    if (!_headView) {
+        _headView = [ChatAddressHeaderView shareInstance];
+    }
+    return _headView;
+}
+
+- (void)setSelectedIndex:(NSInteger)selectedIndex {
+    _selectedIndex = selectedIndex;
+    
+    ChatAddressBodyView *listView = self.listViewArray[selectedIndex];
+    NSString *searchKey = listView.searchKey;
+    self.headView.searchField.text = searchKey;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 15 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Controller/MineViewController.m

@@ -430,7 +430,7 @@
             [self.navigationController pushViewController:webCtrl animated:YES];
         }
             break;
-        case MINEVIEWTYPE_MUSIC: // 我的曲谱
+        case MINEVIEWTYPE_UPLOADMUSIC: // 上传曲谱
         {
             MyMusicViewController *musicCtrl = [[MyMusicViewController alloc] init];
             [self.navigationController pushViewController:musicCtrl animated:YES];
@@ -468,6 +468,20 @@
             [self.navigationController pushViewController:webCtrl animated:YES];
         }
             break;
+        case MINEVIEWTYPE_CONTACTUS:
+        {
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/contactus"];
+            [self.navigationController pushViewController:webCtrl animated:YES];
+        }
+            break;
+        case MINEVIEWTYPE_MUSIC:
+        {
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/mySheetMusic"];
+            [self.navigationController pushViewController:webCtrl animated:YES];
+        }
+            break;
         default:
             break;
     }

+ 47 - 16
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.m

@@ -6,6 +6,7 @@
 //
 
 #import "MinePageMusicCell.h"
+#import "MusicTagView.h"
 
 @interface MinePageMusicCell ()
 
@@ -16,7 +17,7 @@
 @property (weak, nonatomic) IBOutlet UIImageView *musicCover;
 
 @property (weak, nonatomic) IBOutlet UIView *typeView;
-@property (weak, nonatomic) IBOutlet UILabel *typeLabel;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *typeViewWidth;
 
 @property (weak, nonatomic) IBOutlet UIView *bgView;
 
@@ -93,26 +94,56 @@
    
     CGFloat maxWidth = [self getTagViewMaxWidth:authSting];
     [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
-    
-    if ([songMessage.chargeType isEqualToString:@"VIP"]) {
-        self.typeView.layer.borderColor = HexRGB(0xD38535).CGColor;
-        self.typeLabel.text = @"会员";
-        self.typeLabel.textColor = HexRGB(0xCD863E);
+
+    [self configTypeView:songMessage.paymentType];
+    [self.musicCover sd_setImageWithURL:[NSURL URLWithString:[songMessage.titleImg getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"music_logo"]];
+}
+
+
+
+- (void)configTypeView:(NSString *)musicType {
+    [self.typeView removeAllSubViews];
+    NSArray * chargeArray = [musicType componentsSeparatedByString:@","];
+    CGFloat singleWidth = 30.0f;
+    CGFloat space = 5.0f;
+    CGFloat height = 17.0f;
+    for (NSInteger index = 0; index < chargeArray.count; index++) {
+        NSString *desc = chargeArray[index];
+        NSString *title = nil;
+        UIColor *borderColor = nil;
+        UIColor *titleColor = nil;
+        if ([desc isEqualToString:@"VIP"]) {
+            borderColor = HexRGB(0xD38535);
+            title = @"会员";
+            titleColor = HexRGB(0xCD863E);
+            
+        }
+        else if ([desc isEqualToString:@"CHARGE"]) {
+            borderColor = HexRGB(0x50A2D8);
+            title = @"点播";
+            titleColor = HexRGB(0x3591CE);
+        }
+        else {
+            borderColor = HexRGB(0x01B84F);
+            title = @"免费";
+            titleColor = HexRGB(0x01B84F);
+        }
+        CGRect frame = CGRectMake((singleWidth + space) * index, 0, singleWidth, height);
+        MusicTagView *typeView = [[MusicTagView alloc] initWithTitle:title titleColor:titleColor borderColor:borderColor];
+        typeView.frame = frame;
+        [self.typeView addSubview:typeView];
     }
-    else if ([songMessage.chargeType isEqualToString:@"CHARGE"]) {
-        self.typeView.layer.borderColor = HexRGB(0x50A2D8).CGColor;
-        self.typeLabel.text = @"点播";
-        self.typeLabel.textColor = HexRGB(0x3591CE);
+    self.typeViewWidth.constant = [self getWidthWithTypeCount:chargeArray.count singleWidth:singleWidth space:space];
+}
+
+- (CGFloat)getWidthWithTypeCount:(NSInteger)count singleWidth:(CGFloat)singleWidth space:(CGFloat)space {
+    if (count == 1) {
+        return singleWidth;
     }
     else {
-        self.typeView.layer.borderColor = HexRGB(0x01B84F).CGColor;
-        self.typeLabel.text = @"免费";
-        self.typeLabel.textColor = HexRGB(0x01B84F);
+        return singleWidth + (singleWidth + space) * (count - 1);
     }
-        
-    [self.musicCover sd_setImageWithURL:[NSURL URLWithString:[songMessage.titleImg getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"music_logo"]];
 }
-
 - (CGFloat)getTagViewMaxWidth:(NSString *)teacherName {
     CGFloat width = [self getStringWidthInLabel:teacherName font:[UIFont systemFontOfSize:10.0f]];
     return KPortraitWidth - 70  - 28 - 12 - width - 7;

+ 3 - 24
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.xib

@@ -1,9 +1,9 @@
 <?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" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -52,32 +52,11 @@
                             </view>
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vUL-Jj-5Vt">
                                 <rect key="frame" x="70" y="16" width="30" height="17"/>
-                                <subviews>
-                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="点播" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PP9-cQ-QbK">
-                                        <rect key="frame" x="4.5" y="2.5" width="21" height="12"/>
-                                        <fontDescription key="fontDescription" type="system" pointSize="10"/>
-                                        <color key="textColor" red="0.20784313725490194" green="0.56862745098039214" blue="0.80784313725490198" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                        <nil key="highlightedColor"/>
-                                    </label>
-                                </subviews>
                                 <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                 <constraints>
                                     <constraint firstAttribute="width" constant="30" id="8yi-He-ckM"/>
-                                    <constraint firstItem="PP9-cQ-QbK" firstAttribute="centerX" secondItem="vUL-Jj-5Vt" secondAttribute="centerX" id="DFG-Qm-VbI"/>
                                     <constraint firstAttribute="height" constant="17" id="k4z-6g-o13"/>
-                                    <constraint firstItem="PP9-cQ-QbK" firstAttribute="centerY" secondItem="vUL-Jj-5Vt" secondAttribute="centerY" id="y57-jR-AXO"/>
                                 </constraints>
-                                <userDefinedRuntimeAttributes>
-                                    <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
-                                        <real key="value" value="0.5"/>
-                                    </userDefinedRuntimeAttribute>
-                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                        <real key="value" value="4"/>
-                                    </userDefinedRuntimeAttribute>
-                                    <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
-                                        <color key="value" red="0.20784313725490194" green="0.56862745098039214" blue="0.80784313725490198" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    </userDefinedRuntimeAttribute>
-                                </userDefinedRuntimeAttributes>
                             </view>
                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_music_play" translatesAutoresizingMaskIntoConstraints="NO" id="qyC-cX-e8b">
                                 <rect key="frame" x="347" y="28" width="24" height="24"/>
@@ -144,8 +123,8 @@
                 <outlet property="songAuth" destination="KNo-AM-8Um" id="sE3-sB-pLo"/>
                 <outlet property="songName" destination="5wX-Qg-UK0" id="ibp-Xx-gL2"/>
                 <outlet property="tagView" destination="qO5-Vi-5dQ" id="Jau-UE-yYr"/>
-                <outlet property="typeLabel" destination="PP9-cQ-QbK" id="xTA-1a-Tsm"/>
                 <outlet property="typeView" destination="vUL-Jj-5Vt" id="Epk-ot-lUA"/>
+                <outlet property="typeViewWidth" destination="8yi-He-ckM" id="hDo-BG-yP9"/>
             </connections>
             <point key="canvasLocation" x="199.27536231884059" y="123.21428571428571"/>
         </tableViewCell>

+ 3 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineActionView.h

@@ -29,12 +29,14 @@ typedef NS_ENUM(NSInteger, MINEVIEWTYPE) {
     MINEVIEWTYPE_MEMERCENTER,
     MINEVIEWTYPE_TRADERECORD = 1020,
     MINEVIEWTYPE_INCOME,
-    MINEVIEWTYPE_MUSIC,
+    MINEVIEWTYPE_MUSIC,         // 我的乐谱
     MINEVIEWTYPE_MUSICROOM,
     MINEVIEWTYPE_HOMEWORK,
     MINEVIEWTYPE_EVALUATE,
     MINEVIEWTYPE_SHOWDESC, // 显示弹窗
     MINEVIEWTYPE_TICKET,
+    MINEVIEWTYPE_CONTACTUS = 1028, // 联系我们
+    MINEVIEWTYPE_UPLOADMUSIC, // 上传曲谱
 };
 
 #define FUNCTIONVIEW_WIDTH (80)

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBottomView.m

@@ -40,7 +40,7 @@
 }
 
 - (CGFloat)getViewHeight {
-    CGFloat defaultHeight = 484.0f;
+    CGFloat defaultHeight = 544.0f;
     if (self.isMember == NO) {
         defaultHeight -= 60.0f;
     }

+ 47 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBottomView.xib

@@ -1,9 +1,9 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" 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"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -11,7 +11,7 @@
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
         <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="MineBottomView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="484"/>
+            <rect key="frame" x="0.0" y="0.0" width="414" height="600"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jxJ-0S-mtl">
@@ -240,7 +240,7 @@
                     </userDefinedRuntimeAttributes>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vIt-8T-p6j">
-                    <rect key="frame" x="14" y="332" width="386" height="140"/>
+                    <rect key="frame" x="14" y="332" width="386" height="200"/>
                     <subviews>
                         <view tag="1013" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="440-4e-PTN">
                             <rect key="frame" x="0.0" y="10" width="386" height="60"/>
@@ -308,15 +308,51 @@
                                 <outletCollection property="gestureRecognizers" destination="Rso-CO-zoL" appends="YES" id="DHz-OF-CnK"/>
                             </connections>
                         </view>
+                        <view tag="1028" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lHY-3p-URu">
+                            <rect key="frame" x="0.0" y="130" width="386" height="60"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="联系我们" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SOu-OC-myp">
+                                    <rect key="frame" x="15" y="20.5" width="120" height="19.5"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="120" id="Ho2-tI-AxO"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_next" translatesAutoresizingMaskIntoConstraints="NO" id="kzr-AY-oir">
+                                    <rect key="frame" x="362" y="24.5" width="6" height="11"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="6" id="Ccb-x8-VMh"/>
+                                        <constraint firstAttribute="height" constant="11" id="Y6X-A4-eZb"/>
+                                    </constraints>
+                                </imageView>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstItem="SOu-OC-myp" firstAttribute="centerY" secondItem="lHY-3p-URu" secondAttribute="centerY" id="LAY-Uo-tXr"/>
+                                <constraint firstAttribute="height" constant="60" id="RYb-Xd-5ON"/>
+                                <constraint firstItem="kzr-AY-oir" firstAttribute="centerY" secondItem="lHY-3p-URu" secondAttribute="centerY" id="ZA2-Qv-PWg"/>
+                                <constraint firstItem="SOu-OC-myp" firstAttribute="leading" secondItem="lHY-3p-URu" secondAttribute="leading" constant="15" id="dBP-Tq-zLk"/>
+                                <constraint firstAttribute="trailing" secondItem="kzr-AY-oir" secondAttribute="trailing" constant="18" id="tu3-2U-3eE"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="5MN-g7-38B" appends="YES" id="sa4-AA-TDV"/>
+                            </connections>
+                        </view>
                     </subviews>
                     <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                     <constraints>
+                        <constraint firstItem="lHY-3p-URu" firstAttribute="leading" secondItem="vIt-8T-p6j" secondAttribute="leading" id="716-HL-pbD"/>
+                        <constraint firstItem="lHY-3p-URu" firstAttribute="top" secondItem="9Tk-UG-5sp" secondAttribute="bottom" id="86x-1v-dAS"/>
                         <constraint firstAttribute="trailing" secondItem="9Tk-UG-5sp" secondAttribute="trailing" id="JoA-BX-aI4"/>
                         <constraint firstItem="9Tk-UG-5sp" firstAttribute="top" secondItem="440-4e-PTN" secondAttribute="bottom" id="Otg-dm-WR2"/>
+                        <constraint firstAttribute="bottom" secondItem="lHY-3p-URu" secondAttribute="bottom" constant="10" id="Xq6-kp-Tdp"/>
                         <constraint firstItem="440-4e-PTN" firstAttribute="leading" secondItem="vIt-8T-p6j" secondAttribute="leading" id="e2a-dm-vsW"/>
                         <constraint firstAttribute="trailing" secondItem="440-4e-PTN" secondAttribute="trailing" id="gwb-20-Cz1"/>
                         <constraint firstItem="9Tk-UG-5sp" firstAttribute="leading" secondItem="vIt-8T-p6j" secondAttribute="leading" id="jiX-Bj-4Yq"/>
-                        <constraint firstAttribute="bottom" secondItem="9Tk-UG-5sp" secondAttribute="bottom" constant="10" id="sdk-GH-8gx"/>
+                        <constraint firstAttribute="trailing" secondItem="lHY-3p-URu" secondAttribute="trailing" id="jwp-2m-o1H"/>
                         <constraint firstItem="440-4e-PTN" firstAttribute="top" secondItem="vIt-8T-p6j" secondAttribute="top" constant="10" id="unk-Kp-xjP"/>
                     </constraints>
                     <userDefinedRuntimeAttributes>
@@ -357,7 +393,7 @@
                 <outlet property="tradeView" destination="ZIi-Ty-3ga" id="hrn-TT-mr6"/>
                 <outlet property="tradeViewHeight" destination="XRq-N8-Euc" id="xmq-h3-uku"/>
             </connections>
-            <point key="canvasLocation" x="131.8840579710145" y="-76.674107142857139"/>
+            <point key="canvasLocation" x="131.8840579710145" y="-38.169642857142854"/>
         </view>
         <tapGestureRecognizer id="1RO-aK-3wk">
             <connections>
@@ -394,6 +430,11 @@
                 <action selector="tapAction:" destination="iN0-l3-epB" id="Jda-Nc-9BO"/>
             </connections>
         </tapGestureRecognizer>
+        <tapGestureRecognizer id="5MN-g7-38B">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="S1L-3w-GHp"/>
+            </connections>
+        </tapGestureRecognizer>
     </objects>
     <resources>
         <image name="mine_next" width="6" height="11"/>

+ 16 - 9
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineFunctionView.m

@@ -35,14 +35,16 @@
 - (void)configView {
     [self.containerView removeAllSubViews];
     CGFloat space = (KPortraitWidth - 28 - 4 * FUNCTIONVIEW_WIDTH) / 5.0f;
-    BOOL skipView = NO;
+    BOOL skipIncomeView = NO;
+    BOOL skipTicket = NO;
     for (NSInteger index = 0; index < self.imageArray.count; index++) {
         if (self.isSettlement == NO && index == 1) {
-            skipView = YES;
+            skipIncomeView = YES;
             continue;
         }
-        if (self.isMember == NO && index == 6) {
-            return;
+        if (self.isMember == NO && index == 5) {
+            skipTicket = YES;
+            continue;
         }
         
         MineActionView *functionButton = [MineActionView shareInstance];
@@ -55,8 +57,13 @@
                 weakSelf.callback(type);
             }
         }];
-        NSInteger viewIndex = skipView ? index - 1 : index;
-
+        NSInteger viewIndex = index;
+        if (skipIncomeView) {
+            viewIndex -= 1;
+        }
+        if (skipTicket) {
+            viewIndex -= 1;
+        }
         functionButton.frame = CGRectMake(space + viewIndex % 4 * (space + FUNCTIONVIEW_WIDTH), FUNCTIONVIEW_WIDTH * (viewIndex / 4), FUNCTIONVIEW_WIDTH, FUNCTIONVIEW_HEIGHT);
         [self.containerView addSubview:functionButton];
     }
@@ -76,21 +83,21 @@
 
 - (NSMutableArray *)imageArray {
     if (!_imageArray) {
-        _imageArray = [NSMutableArray arrayWithArray:@[@"tool_minePage",@"tool_mineIncome",@"tool_mineStyle",@"tool_goodsOrder",@"tool_myMusic",@"tool_myCourse",@"tool_ticket"]];
+        _imageArray = [NSMutableArray arrayWithArray:@[@"tool_minePage",@"tool_mineIncome",@"tool_mineStyle",@"tool_goodsOrder",@"tool_myCourse",@"tool_ticket",@"tool_myMusic",@"tool_uploadMusic"]];
     }
     return _imageArray;
 }
 
 - (NSMutableArray *)titleArray {
     if (!_titleArray) {
-        _titleArray = [NSMutableArray arrayWithArray:@[@"我的主页",@"我的收入",@"个人风采",@"我的订单",@"我的乐谱",@"我的课程",@"我的优惠券"]];
+        _titleArray = [NSMutableArray arrayWithArray:@[@"我的主页",@"我的收入",@"个人风采",@"我的订单",@"我的课程",@"我的优惠券",@"我的乐谱",@"上传曲谱"]];
     }
     return _titleArray;
 }
 
 - (NSMutableArray *)tagArray {
     if (!_tagArray) {
-        _tagArray = [NSMutableArray arrayWithArray:@[@(MINEVIEWTYPE_HOMEPAGE),@(MINEVIEWTYPE_INCOME),@(MINEVIEWTYPE_MIEN),@(MINEVIEWTYPE_ORDER),@(MINEVIEWTYPE_MUSIC),@(MINEVIEWTYPE_FINISHCOURSE),@(MINEVIEWTYPE_TICKET)]];
+        _tagArray = [NSMutableArray arrayWithArray:@[@(MINEVIEWTYPE_HOMEPAGE),@(MINEVIEWTYPE_INCOME),@(MINEVIEWTYPE_MIEN),@(MINEVIEWTYPE_ORDER),@(MINEVIEWTYPE_FINISHCOURSE),@(MINEVIEWTYPE_TICKET),@(MINEVIEWTYPE_MUSIC),@(MINEVIEWTYPE_UPLOADMUSIC)]];
     }
     return _tagArray;
 }