Ver código fonte

问题修改

Steven 1 ano atrás
pai
commit
b22b6b6348
100 arquivos alterados com 2877 adições e 232 exclusões
  1. 171 24
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 4 0
      KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m
  3. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_tenantGroup_Logo.imageset/Contents.json
  4. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_tenantGroup_Logo.imageset/chat_tenantGroup_Logo@2x.png
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_tenantGroup_Logo.imageset/chat_tenantGroup_Logo@3x.png
  6. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_memberAdd.imageset/Contents.json
  7. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_memberAdd.imageset/group_memberAdd@2x.png
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_memberAdd.imageset/group_memberAdd@3x.png
  9. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_student.imageset/Contents.json
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_student.imageset/group_role_student@2x.png
  11. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_student.imageset/group_role_student@3x.png
  12. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_teacher.imageset/Contents.json
  13. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_teacher.imageset/group_role_teacher@2x.png
  14. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_teacher.imageset/group_role_teacher@3x.png
  15. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_tenant.imageset/Contents.json
  16. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_tenant.imageset/group_tenant@2x.png
  17. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_tenant.imageset/group_tenant@3x.png
  18. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/tenant_chat_chat.imageset/Contents.json
  19. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/tenant_chat_chat.imageset/tenant_chat_chat@2x.png
  20. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/tenant_chat_chat.imageset/tenant_chat_chat@3x.png
  21. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/Contents.json
  22. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/Contents.json
  23. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_choose.imageset/Contents.json
  24. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_choose.imageset/tenant_group_choose@2x.png
  25. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_choose.imageset/tenant_group_choose@3x.png
  26. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_desc.imageset/Contents.json
  27. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_desc.imageset/tenant_group_desc@2x.png
  28. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_desc.imageset/tenant_group_desc@3x.png
  29. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_member.imageset/Contents.json
  30. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_member.imageset/tenant_group_member@2x.png
  31. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_member.imageset/tenant_group_member@3x.png
  32. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_name.imageset/Contents.json
  33. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_name.imageset/tenant_group_name@2x.png
  34. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_name.imageset/tenant_group_name@3x.png
  35. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_type.imageset/Contents.json
  36. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_type.imageset/tenant_group_type@2x.png
  37. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_type.imageset/tenant_group_type@3x.png
  38. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_unchoose.imageset/Contents.json
  39. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_unchoose.imageset/tenant_group_unchoose@2x.png
  40. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_unchoose.imageset/tenant_group_unchoose@3x.png
  41. 44 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/homeTenant_bg.imageset/Contents.json
  42. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/homeTenant_bg.imageset/homeTenant_bg@2x.png
  43. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/homeTenant_bg.imageset/homeTenant_bg@3x.png
  44. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenant_unbind_image.imageset/Contents.json
  45. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenant_unbind_image.imageset/tenant_unbind_image@2x.png
  46. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenant_unbind_image.imageset/tenant_unbind_image@3x.png
  47. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_check.imageset/Contents.json
  48. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_check.imageset/tenatant_album_check@2x.png
  49. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_check.imageset/tenatant_album_check@3x.png
  50. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_desc.imageset/Contents.json
  51. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_desc.imageset/tenatant_album_desc@2x.png
  52. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_desc.imageset/tenatant_album_desc@3x.png
  53. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSHudLoagingManager.m
  54. 55 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  55. 102 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  56. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/KSLoginManager.m
  57. 12 3
      KulexiuForTeacher/KulexiuForTeacher/Common/Define/KSDomain.h
  58. 3 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Define/UserKeyHeader.h
  59. 3 0
      KulexiuForTeacher/KulexiuForTeacher/Common/ThirdPart/FSCalendar/FSCalendarCell.m
  60. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/VoNetworking/VoNetWorking.h
  61. 12 2
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/VoNetworking/VoNetWorking.m
  62. 9 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/ChatViewController.m
  63. 24 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TenantGroup/TenantChooseMemberViewController.h
  64. 218 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TenantGroup/TenantChooseMemberViewController.m
  65. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TenantGroup/TenantCreateGroupViewController.h
  66. 158 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TenantGroup/TenantCreateGroupViewController.m
  67. 49 11
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/Controller/GroupSettingViewController.m
  68. 6 9
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupMemberListCell.m
  69. 42 28
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupMemberListCell.xib
  70. 3 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.h
  71. 86 23
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.m
  72. 4 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.xib
  73. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Model/FriendListModel.h
  74. 54 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Model/Tenant/TenantStuModel.h
  75. 323 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Model/Tenant/TenantStuModel.m
  76. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/ChatAddressBodyView.m
  77. 11 10
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/ContractListCell.xib
  78. 4 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupListViewCell.m
  79. 3 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupListViewCell.xib
  80. 20 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupOwnerTagView.h
  81. 29 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupOwnerTagView.m
  82. 39 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupOwnerTagView.xib
  83. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenangGroupCreateBottomView.h
  84. 51 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenangGroupCreateBottomView.m
  85. 50 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenangGroupCreateBottomView.xib
  86. 36 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateGroupBodyView.h
  87. 180 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateGroupBodyView.m
  88. 340 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateGroupBodyView.xib
  89. 21 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateStuView.h
  90. 37 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateStuView.m
  91. 54 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateStuView.xib
  92. 19 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenentGroupAddMemberCell.h
  93. 41 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenentGroupAddMemberCell.m
  94. 82 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenentGroupAddMemberCell.xib
  95. 4 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/Controller/CourseViewController.m
  96. 58 93
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m
  97. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNavView.h
  98. 14 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNavView.m
  99. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewHeadView.h
  100. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewHeadView.m

+ 171 - 24
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -532,6 +532,26 @@
 		BC14A62628A212CC0086395C /* HomeHotMusicView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC14A62528A212CC0086395C /* HomeHotMusicView.xib */; };
 		BC14E46E2AB2A16A000C4983 /* HomeTenantPageView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E46D2AB2A16A000C4983 /* HomeTenantPageView.m */; };
 		BC14E4702AB2A1A2000C4983 /* HomeTenantPageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC14E46F2AB2A1A2000C4983 /* HomeTenantPageView.xib */; };
+		BC14E4732AB2DAFD000C4983 /* StyleVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4722AB2DAFD000C4983 /* StyleVideo.m */; };
+		BC14E4762AB2E6C2000C4983 /* UnbindTenantViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4752AB2E6C2000C4983 /* UnbindTenantViewController.m */; };
+		BC14E47F2AB2EE58000C4983 /* UnbindBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E47E2AB2EE58000C4983 /* UnbindBottomView.m */; };
+		BC14E4812AB2EE5F000C4983 /* UnbindBottomView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC14E4802AB2EE5F000C4983 /* UnbindBottomView.xib */; };
+		BC14E4842AB2F4C8000C4983 /* TenantUnbindBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4832AB2F4C8000C4983 /* TenantUnbindBodyView.m */; };
+		BC14E4862AB2F4CE000C4983 /* TenantUnbindBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC14E4852AB2F4CE000C4983 /* TenantUnbindBodyView.xib */; };
+		BC14E4892AB2FAE0000C4983 /* TenantUnbindDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4882AB2FAE0000C4983 /* TenantUnbindDetailViewController.m */; };
+		BC14E48C2AB2FBC7000C4983 /* TenantUnbindDetailBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E48B2AB2FBC7000C4983 /* TenantUnbindDetailBodyView.m */; };
+		BC14E48E2AB2FBCD000C4983 /* TenantUnbindDetailBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC14E48D2AB2FBCD000C4983 /* TenantUnbindDetailBodyView.xib */; };
+		BC14E4912AB30F8F000C4983 /* TenantCreateGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4902AB30F8F000C4983 /* TenantCreateGroupViewController.m */; };
+		BC14E4952AB31059000C4983 /* TenantCreateGroupBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4942AB31059000C4983 /* TenantCreateGroupBodyView.m */; };
+		BC14E4972AB3105F000C4983 /* TenantCreateGroupBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC14E4962AB3105F000C4983 /* TenantCreateGroupBodyView.xib */; };
+		BC1553482AB31EEC00C1C347 /* TenangGroupCreateBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1553472AB31EEC00C1C347 /* TenangGroupCreateBottomView.m */; };
+		BC15534A2AB31EF200C1C347 /* TenangGroupCreateBottomView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC1553492AB31EF200C1C347 /* TenangGroupCreateBottomView.xib */; };
+		BC15534E2AB325E200C1C347 /* TenantChooseMemberViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC15534D2AB325E200C1C347 /* TenantChooseMemberViewController.m */; };
+		BC1553522AB3279500C1C347 /* TenentGroupAddMemberCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1553502AB3279500C1C347 /* TenentGroupAddMemberCell.m */; };
+		BC1553532AB3279500C1C347 /* TenentGroupAddMemberCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC1553512AB3279500C1C347 /* TenentGroupAddMemberCell.xib */; };
+		BC1553572AB336A200C1C347 /* TenantStuModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1553562AB336A200C1C347 /* TenantStuModel.m */; };
+		BC15535A2AB33AFD00C1C347 /* TenantCreateStuView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1553592AB33AFD00C1C347 /* TenantCreateStuView.m */; };
+		BC15535C2AB33B0300C1C347 /* TenantCreateStuView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC15535B2AB33B0300C1C347 /* TenantCreateStuView.xib */; };
 		BC221FA128C72B9500F99802 /* MyStyleVideoView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC221F9D28C72B9500F99802 /* MyStyleVideoView.xib */; };
 		BC221FA228C72B9500F99802 /* MyStyleVideoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC221F9E28C72B9500F99802 /* MyStyleVideoCell.xib */; };
 		BC221FA328C72B9500F99802 /* MyStyleVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC221F9F28C72B9500F99802 /* MyStyleVideoView.m */; };
@@ -587,6 +607,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 */; };
+		BC36A50E2AB42B46002FEFB1 /* GroupOwnerTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC36A50C2AB42B46002FEFB1 /* GroupOwnerTagView.m */; };
+		BC36A50F2AB42B46002FEFB1 /* GroupOwnerTagView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC36A50D2AB42B46002FEFB1 /* GroupOwnerTagView.xib */; };
 		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 */; };
@@ -2132,6 +2154,39 @@
 		BC14E46C2AB2A16A000C4983 /* HomeTenantPageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeTenantPageView.h; sourceTree = "<group>"; };
 		BC14E46D2AB2A16A000C4983 /* HomeTenantPageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeTenantPageView.m; sourceTree = "<group>"; };
 		BC14E46F2AB2A1A2000C4983 /* HomeTenantPageView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeTenantPageView.xib; sourceTree = "<group>"; };
+		BC14E4712AB2DAFD000C4983 /* StyleVideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleVideo.h; sourceTree = "<group>"; };
+		BC14E4722AB2DAFD000C4983 /* StyleVideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StyleVideo.m; sourceTree = "<group>"; };
+		BC14E4742AB2E6C2000C4983 /* UnbindTenantViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UnbindTenantViewController.h; sourceTree = "<group>"; };
+		BC14E4752AB2E6C2000C4983 /* UnbindTenantViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UnbindTenantViewController.m; sourceTree = "<group>"; };
+		BC14E47D2AB2EE58000C4983 /* UnbindBottomView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UnbindBottomView.h; sourceTree = "<group>"; };
+		BC14E47E2AB2EE58000C4983 /* UnbindBottomView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UnbindBottomView.m; sourceTree = "<group>"; };
+		BC14E4802AB2EE5F000C4983 /* UnbindBottomView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UnbindBottomView.xib; sourceTree = "<group>"; };
+		BC14E4822AB2F4C8000C4983 /* TenantUnbindBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenantUnbindBodyView.h; sourceTree = "<group>"; };
+		BC14E4832AB2F4C8000C4983 /* TenantUnbindBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenantUnbindBodyView.m; sourceTree = "<group>"; };
+		BC14E4852AB2F4CE000C4983 /* TenantUnbindBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TenantUnbindBodyView.xib; sourceTree = "<group>"; };
+		BC14E4872AB2FAE0000C4983 /* TenantUnbindDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenantUnbindDetailViewController.h; sourceTree = "<group>"; };
+		BC14E4882AB2FAE0000C4983 /* TenantUnbindDetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenantUnbindDetailViewController.m; sourceTree = "<group>"; };
+		BC14E48A2AB2FBC7000C4983 /* TenantUnbindDetailBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenantUnbindDetailBodyView.h; sourceTree = "<group>"; };
+		BC14E48B2AB2FBC7000C4983 /* TenantUnbindDetailBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenantUnbindDetailBodyView.m; sourceTree = "<group>"; };
+		BC14E48D2AB2FBCD000C4983 /* TenantUnbindDetailBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TenantUnbindDetailBodyView.xib; sourceTree = "<group>"; };
+		BC14E48F2AB30F8F000C4983 /* TenantCreateGroupViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenantCreateGroupViewController.h; sourceTree = "<group>"; };
+		BC14E4902AB30F8F000C4983 /* TenantCreateGroupViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenantCreateGroupViewController.m; sourceTree = "<group>"; };
+		BC14E4932AB31059000C4983 /* TenantCreateGroupBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenantCreateGroupBodyView.h; sourceTree = "<group>"; };
+		BC14E4942AB31059000C4983 /* TenantCreateGroupBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenantCreateGroupBodyView.m; sourceTree = "<group>"; };
+		BC14E4962AB3105F000C4983 /* TenantCreateGroupBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TenantCreateGroupBodyView.xib; sourceTree = "<group>"; };
+		BC1553462AB31EEC00C1C347 /* TenangGroupCreateBottomView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenangGroupCreateBottomView.h; sourceTree = "<group>"; };
+		BC1553472AB31EEC00C1C347 /* TenangGroupCreateBottomView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenangGroupCreateBottomView.m; sourceTree = "<group>"; };
+		BC1553492AB31EF200C1C347 /* TenangGroupCreateBottomView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TenangGroupCreateBottomView.xib; sourceTree = "<group>"; };
+		BC15534C2AB325E200C1C347 /* TenantChooseMemberViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenantChooseMemberViewController.h; sourceTree = "<group>"; };
+		BC15534D2AB325E200C1C347 /* TenantChooseMemberViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenantChooseMemberViewController.m; sourceTree = "<group>"; };
+		BC15534F2AB3279500C1C347 /* TenentGroupAddMemberCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenentGroupAddMemberCell.h; sourceTree = "<group>"; };
+		BC1553502AB3279500C1C347 /* TenentGroupAddMemberCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenentGroupAddMemberCell.m; sourceTree = "<group>"; };
+		BC1553512AB3279500C1C347 /* TenentGroupAddMemberCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TenentGroupAddMemberCell.xib; sourceTree = "<group>"; };
+		BC1553552AB336A200C1C347 /* TenantStuModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TenantStuModel.h; sourceTree = "<group>"; };
+		BC1553562AB336A200C1C347 /* TenantStuModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TenantStuModel.m; sourceTree = "<group>"; };
+		BC1553582AB33AFD00C1C347 /* TenantCreateStuView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TenantCreateStuView.h; sourceTree = "<group>"; };
+		BC1553592AB33AFD00C1C347 /* TenantCreateStuView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TenantCreateStuView.m; sourceTree = "<group>"; };
+		BC15535B2AB33B0300C1C347 /* TenantCreateStuView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TenantCreateStuView.xib; sourceTree = "<group>"; };
 		BC221F9B28C72B9500F99802 /* MyStyleVideoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyStyleVideoView.h; sourceTree = "<group>"; };
 		BC221F9C28C72B9500F99802 /* MyStyleVideoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyStyleVideoCell.h; sourceTree = "<group>"; };
 		BC221F9D28C72B9500F99802 /* MyStyleVideoView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyStyleVideoView.xib; sourceTree = "<group>"; };
@@ -2216,6 +2271,9 @@
 		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>"; };
+		BC36A50B2AB42B46002FEFB1 /* GroupOwnerTagView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupOwnerTagView.h; sourceTree = "<group>"; };
+		BC36A50C2AB42B46002FEFB1 /* GroupOwnerTagView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GroupOwnerTagView.m; sourceTree = "<group>"; };
+		BC36A50D2AB42B46002FEFB1 /* GroupOwnerTagView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GroupOwnerTagView.xib; 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>"; };
 		BC38181A2A4026B400B74F26 /* KSDomain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSDomain.h; sourceTree = "<group>"; };
@@ -4247,6 +4305,8 @@
 				27A2F62C27E70D0A009E2380 /* UserInfoManager.m */,
 				27A2F62E27E70E56009E2380 /* UserInfo.h */,
 				27A2F62F27E70E56009E2380 /* UserInfo.m */,
+				BC14E4712AB2DAFD000C4983 /* StyleVideo.h */,
+				BC14E4722AB2DAFD000C4983 /* StyleVideo.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -4488,6 +4548,7 @@
 		2779360327E32BBF0010E277 /* Controller */ = {
 			isa = PBXGroup;
 			children = (
+				BC15534B2AB325B000C1C347 /* TenantGroup */,
 				BC000D982A84E36A006C5A89 /* TXCustom */,
 				275B171027EB18F10081FDEF /* ChatAddressViewController.h */,
 				275B16FC27EB083C0081FDEF /* ChatAddressViewController.m */,
@@ -4512,6 +4573,7 @@
 		2779360427E32BBF0010E277 /* Model */ = {
 			isa = PBXGroup;
 			children = (
+				BC1553542AB3369A00C1C347 /* Tenant */,
 				BC12638728FEB5E600509E90 /* ChatUserInfo */,
 				BCED5CA8284F5D8D009A42DE /* FriendListModel.h */,
 				BCED5CA9284F5D8D009A42DE /* FriendListModel.m */,
@@ -4532,41 +4594,45 @@
 		2779360527E32BBF0010E277 /* View */ = {
 			isa = PBXGroup;
 			children = (
-				BC12637128FEB5B900509E90 /* ChatUserInfo */,
-				BCDE3590289A7E4900A9A560 /* KSGroupTagImageView.h */,
-				BCDE358F289A7E4900A9A560 /* KSGroupTagImageView.m */,
-				275B16ED27EAF9B10081FDEF /* ChatNavView.h */,
-				275B16EE27EAF9B10081FDEF /* ChatNavView.m */,
-				275B16F027EAF9DD0081FDEF /* ChatNavView.xib */,
-				BC12638E28FEC8C200509E90 /* KSChatTagView.h */,
-				BC12638F28FEC8C200509E90 /* KSChatTagView.m */,
-				275B170927EB14A00081FDEF /* KSChatListSearchView.h */,
-				275B170A27EB14A00081FDEF /* KSChatListSearchView.m */,
-				275B170C27EB14AC0081FDEF /* KSChatListSearchView.xib */,
+				27F9CAEB27EC17AD003E0FE4 /* ChatAddressBodyView.h */,
+				27F9CAEC27EC17AD003E0FE4 /* ChatAddressBodyView.m */,
 				275B172727EB26920081FDEF /* ChatAddressHeaderView.h */,
 				275B172827EB26920081FDEF /* ChatAddressHeaderView.m */,
 				275B172A27EB269F0081FDEF /* ChatAddressHeaderView.xib */,
-				275B172D27EB27860081FDEF /* GroupCreateView.h */,
-				275B172E27EB27860081FDEF /* GroupCreateView.m */,
-				275B173027EB27960081FDEF /* GroupCreateView.xib */,
-				27F9CAEB27EC17AD003E0FE4 /* ChatAddressBodyView.h */,
-				27F9CAEC27EC17AD003E0FE4 /* ChatAddressBodyView.m */,
+				275B16ED27EAF9B10081FDEF /* ChatNavView.h */,
+				275B16EE27EAF9B10081FDEF /* ChatNavView.m */,
+				275B16F027EAF9DD0081FDEF /* ChatNavView.xib */,
+				BC12637128FEB5B900509E90 /* ChatUserInfo */,
 				27F9CAF827EC1AF3003E0FE4 /* ContractListCell.h */,
 				27F9CAF927EC1AF3003E0FE4 /* ContractListCell.m */,
 				27F9CAFA27EC1AF3003E0FE4 /* ContractListCell.xib */,
+				275B172D27EB27860081FDEF /* GroupCreateView.h */,
+				275B172E27EB27860081FDEF /* GroupCreateView.m */,
+				275B173027EB27960081FDEF /* GroupCreateView.xib */,
 				27F9CAFD27EC3D41003E0FE4 /* GroupListViewCell.h */,
 				27F9CAFE27EC3D41003E0FE4 /* GroupListViewCell.m */,
 				27F9CAFF27EC3D42003E0FE4 /* GroupListViewCell.xib */,
+				BC36A50B2AB42B46002FEFB1 /* GroupOwnerTagView.h */,
+				BC36A50C2AB42B46002FEFB1 /* GroupOwnerTagView.m */,
+				BC36A50D2AB42B46002FEFB1 /* GroupOwnerTagView.xib */,
+				275B170927EB14A00081FDEF /* KSChatListSearchView.h */,
+				275B170A27EB14A00081FDEF /* KSChatListSearchView.m */,
+				275B170C27EB14AC0081FDEF /* KSChatListSearchView.xib */,
 				BCED5CB928508823009A42DE /* KSChatLiveShareCell.h */,
 				BCED5CBA28508823009A42DE /* KSChatLiveShareCell.m */,
+				BCED5CBC28508831009A42DE /* KSChatMusicShareCell.h */,
+				BCED5CBD28508831009A42DE /* KSChatMusicShareCell.m */,
+				BC12638E28FEC8C200509E90 /* KSChatTagView.h */,
+				BC12638F28FEC8C200509E90 /* KSChatTagView.m */,
+				BCDE3590289A7E4900A9A560 /* KSGroupTagImageView.h */,
+				BCDE358F289A7E4900A9A560 /* KSGroupTagImageView.m */,
 				BCED5CBF28508F21009A42DE /* ShareLiveCellContentView.h */,
 				BCED5CC028508F21009A42DE /* ShareLiveCellContentView.m */,
 				BC106BB72A8F6EAB000759A9 /* ShareLiveCellContentView.xib */,
-				BCED5CBC28508831009A42DE /* KSChatMusicShareCell.h */,
-				BCED5CBD28508831009A42DE /* KSChatMusicShareCell.m */,
 				BCB908D92850A71100F5FF69 /* ShareMusicCellContentView.h */,
 				BCB908DA2850A71100F5FF69 /* ShareMusicCellContentView.m */,
 				BC106BB52A8F6E93000759A9 /* ShareMusicCellContentView.xib */,
+				BC14E4922AB3101B000C4983 /* TenantGroupCreate */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -4725,6 +4791,10 @@
 				BC542E3228406EA400633781 /* UserAuthViewController.m */,
 				BC542E4128407AD200633781 /* UserSettingViewController.h */,
 				BC542E4228407AD200633781 /* UserSettingViewController.m */,
+				BC14E4742AB2E6C2000C4983 /* UnbindTenantViewController.h */,
+				BC14E4752AB2E6C2000C4983 /* UnbindTenantViewController.m */,
+				BC14E4872AB2FAE0000C4983 /* TenantUnbindDetailViewController.h */,
+				BC14E4882AB2FAE0000C4983 /* TenantUnbindDetailViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -4739,6 +4809,7 @@
 		27F902EE27E8613D00C08A19 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BC14E4772AB2E887000C4983 /* UnbindView */,
 				273C759C27E9680C00F7C26F /* SettingBodyView.h */,
 				273C759D27E9680C00F7C26F /* SettingBodyView.m */,
 				273C759F27E9681700F7C26F /* SettingBodyView.xib */,
@@ -5331,16 +5402,16 @@
 		BC106B922A8F45A9000759A9 /* TXLiveSeat */ = {
 			isa = PBXGroup;
 			children = (
-				BC106B932A8F45A9000759A9 /* TXLiveMemberSeatCell.m */,
 				BC106B942A8F45A9000759A9 /* TXLiveDownSeatView.h */,
-				BC106B952A8F45A9000759A9 /* TXLiveDownSeatView.xib */,
-				BC106B962A8F45A9000759A9 /* TXLiveSeatActionView.m */,
-				BC106B972A8F45A9000759A9 /* TXLiveSeatBodyView.m */,
 				BC106B982A8F45A9000759A9 /* TXLiveDownSeatView.m */,
+				BC106B952A8F45A9000759A9 /* TXLiveDownSeatView.xib */,
 				BC106B992A8F45A9000759A9 /* TXLiveMemberSeatCell.h */,
+				BC106B932A8F45A9000759A9 /* TXLiveMemberSeatCell.m */,
 				BC106B9A2A8F45A9000759A9 /* TXLiveMemberSeatCell.xib */,
-				BC106B9B2A8F45A9000759A9 /* TXLiveSeatBodyView.h */,
 				BC106B9C2A8F45A9000759A9 /* TXLiveSeatActionView.h */,
+				BC106B962A8F45A9000759A9 /* TXLiveSeatActionView.m */,
+				BC106B9B2A8F45A9000759A9 /* TXLiveSeatBodyView.h */,
+				BC106B972A8F45A9000759A9 /* TXLiveSeatBodyView.m */,
 			);
 			path = TXLiveSeat;
 			sourceTree = "<group>";
@@ -5450,6 +5521,61 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		BC14E4772AB2E887000C4983 /* UnbindView */ = {
+			isa = PBXGroup;
+			children = (
+				BC14E47D2AB2EE58000C4983 /* UnbindBottomView.h */,
+				BC14E47E2AB2EE58000C4983 /* UnbindBottomView.m */,
+				BC14E4802AB2EE5F000C4983 /* UnbindBottomView.xib */,
+				BC14E4822AB2F4C8000C4983 /* TenantUnbindBodyView.h */,
+				BC14E4832AB2F4C8000C4983 /* TenantUnbindBodyView.m */,
+				BC14E4852AB2F4CE000C4983 /* TenantUnbindBodyView.xib */,
+				BC14E48A2AB2FBC7000C4983 /* TenantUnbindDetailBodyView.h */,
+				BC14E48B2AB2FBC7000C4983 /* TenantUnbindDetailBodyView.m */,
+				BC14E48D2AB2FBCD000C4983 /* TenantUnbindDetailBodyView.xib */,
+			);
+			path = UnbindView;
+			sourceTree = "<group>";
+		};
+		BC14E4922AB3101B000C4983 /* TenantGroupCreate */ = {
+			isa = PBXGroup;
+			children = (
+				BC14E4932AB31059000C4983 /* TenantCreateGroupBodyView.h */,
+				BC14E4942AB31059000C4983 /* TenantCreateGroupBodyView.m */,
+				BC14E4962AB3105F000C4983 /* TenantCreateGroupBodyView.xib */,
+				BC1553462AB31EEC00C1C347 /* TenangGroupCreateBottomView.h */,
+				BC1553472AB31EEC00C1C347 /* TenangGroupCreateBottomView.m */,
+				BC1553492AB31EF200C1C347 /* TenangGroupCreateBottomView.xib */,
+				BC15534F2AB3279500C1C347 /* TenentGroupAddMemberCell.h */,
+				BC1553502AB3279500C1C347 /* TenentGroupAddMemberCell.m */,
+				BC1553512AB3279500C1C347 /* TenentGroupAddMemberCell.xib */,
+				BC1553582AB33AFD00C1C347 /* TenantCreateStuView.h */,
+				BC1553592AB33AFD00C1C347 /* TenantCreateStuView.m */,
+				BC15535B2AB33B0300C1C347 /* TenantCreateStuView.xib */,
+			);
+			path = TenantGroupCreate;
+			sourceTree = "<group>";
+		};
+		BC15534B2AB325B000C1C347 /* TenantGroup */ = {
+			isa = PBXGroup;
+			children = (
+				BC14E48F2AB30F8F000C4983 /* TenantCreateGroupViewController.h */,
+				BC14E4902AB30F8F000C4983 /* TenantCreateGroupViewController.m */,
+				BC15534C2AB325E200C1C347 /* TenantChooseMemberViewController.h */,
+				BC15534D2AB325E200C1C347 /* TenantChooseMemberViewController.m */,
+			);
+			path = TenantGroup;
+			sourceTree = "<group>";
+		};
+		BC1553542AB3369A00C1C347 /* Tenant */ = {
+			isa = PBXGroup;
+			children = (
+				BC1553552AB336A200C1C347 /* TenantStuModel.h */,
+				BC1553562AB336A200C1C347 /* TenantStuModel.m */,
+			);
+			path = Tenant;
+			sourceTree = "<group>";
+		};
 		BC221F9828C72B2B00F99802 /* Group */ = {
 			isa = PBXGroup;
 			children = (
@@ -7673,6 +7799,7 @@
 				275E8A7227E18F2300DD3F6E /* Main.storyboard in Resources */,
 				BC71DEFE2A89F470003F165E /* TXTimeView.xib in Resources */,
 				BC3673DE28A606A500059721 /* musicRoom_animation_1.png in Resources */,
+				BC1553532AB3279500C1C347 /* TenentGroupAddMemberCell.xib in Resources */,
 				BCC0F7062A8CF13D00C4EFA4 /* TXDanBottomView.xib in Resources */,
 				2780C92927E490CA00A95A4F /* VefiBodyView.xib in Resources */,
 				BCC5840828A9FA8100BAB4CF /* cloud_animation_10.png in Resources */,
@@ -7684,6 +7811,7 @@
 				BCC583F928A9FA8100BAB4CF /* cloud_animation_22.png in Resources */,
 				BC71D1EC2887FDD40010F14B /* img_0.png in Resources */,
 				BC71D1EA2887FDD40010F14B /* img_10.png in Resources */,
+				BC14E4972AB3105F000C4983 /* TenantCreateGroupBodyView.xib in Resources */,
 				BC71D2052887FDD40010F14B /* img_27.png in Resources */,
 				BC542E3828406F8000633781 /* UserAuthBodyView.xib in Resources */,
 				27A54CEE27E9B986007309A3 /* ModifyNameBodyView.xib in Resources */,
@@ -7729,6 +7857,8 @@
 				BC0A22A5284751F80065C1AB /* AccompanySongCell.xib in Resources */,
 				2723B68E27F1686100E0B90B /* HomeNavView.xib in Resources */,
 				BC71D1F22887FDD40010F14B /* img_16.png in Resources */,
+				BC14E4862AB2F4CE000C4983 /* TenantUnbindBodyView.xib in Resources */,
+				BC14E4812AB2EE5F000C4983 /* UnbindBottomView.xib in Resources */,
 				BCDB093F2805C0EF00D0BDAD /* NewClassPopCell.xib in Resources */,
 				BC56C97D2923A3FD00AF301F /* CoursewareAlertCell.xib in Resources */,
 				BCAD01C22872F5560002CC40 /* LiveVideoListView.xib in Resources */,
@@ -7766,6 +7896,7 @@
 				BC106BAA2A8F45AA000759A9 /* TXLiveMemberSeatCell.xib in Resources */,
 				BC71D1F62887FDD40010F14B /* img_29.png in Resources */,
 				BCF1BA5627F5CBA100FA36C4 /* LiveSeatApplyView.xib in Resources */,
+				BC15535C2AB33B0300C1C347 /* TenantCreateStuView.xib in Resources */,
 				BC8B6E562856ED0600866917 /* iOS集成升级必读.pdf in Resources */,
 				BC8B6E6A28575DEE00866917 /* MusicDisplayView.xib in Resources */,
 				BCB9FA21286D53A1005D766B /* ScanNavView.xib in Resources */,
@@ -7784,6 +7915,7 @@
 				BC483233282A6473005F534C /* HomeRecentCourseView.xib in Resources */,
 				2708565927ED961900EC8E72 /* ApplyBottomView.xib in Resources */,
 				BCB399AE27F946AA00AFF376 /* CourseNavView.xib in Resources */,
+				BC36A50F2AB42B46002FEFB1 /* GroupOwnerTagView.xib in Resources */,
 				BCC583FD28A9FA8100BAB4CF /* cloud_animation_25.png in Resources */,
 				BCC583F428A9FA8100BAB4CF /* cloud_animation_9.png in Resources */,
 				BC0A22A8284751F80065C1AB /* DownloadStatusCell.xib in Resources */,
@@ -7796,6 +7928,7 @@
 				BCB9FA41286DA337005D766B /* GuideListView.xib in Resources */,
 				BC3ACDA12891261F00060E97 /* MyMusicNavView.xib in Resources */,
 				BC71D2062887FDD40010F14B /* img_23.png in Resources */,
+				BC14E48E2AB2FBCD000C4983 /* TenantUnbindDetailBodyView.xib in Resources */,
 				BC513E7E28A4D874003F58C4 /* live_animation.json in Resources */,
 				BC106BA32A8F45AA000759A9 /* TXLiveRoomHeadView.xib in Resources */,
 				27D83F5927F4225D00062476 /* LivePreviewBodyView.xib in Resources */,
@@ -7919,6 +8052,7 @@
 				BC71D1F02887FDD40010F14B /* img_3.png in Resources */,
 				BC221FAF28C736C300F99802 /* MyCreateGroupBottomView.xib in Resources */,
 				BCC5841128A9FA8100BAB4CF /* cloud_animation_2.png in Resources */,
+				BC15534A2AB31EF200C1C347 /* TenangGroupCreateBottomView.xib in Resources */,
 				BCDF820D2A8A2955005F8B82 /* MemberSettingMicAlert.xib in Resources */,
 				275E3DE327F467410010EC30 /* BaseEmoji.plist in Resources */,
 				BC71DF072A89F470003F165E /* ClassRoomTitleButton.xib in Resources */,
@@ -8114,6 +8248,7 @@
 				2780C92727E490BD00A95A4F /* VefiBodyView.m in Sources */,
 				277932B827E30FFE0010E277 /* SDCollectionViewCell.m in Sources */,
 				BC5E4B29291E5E26001BBCD2 /* DialPlateView.m in Sources */,
+				BC15535A2AB33AFD00C1C347 /* TenantCreateStuView.m in Sources */,
 				2779326527E30FD80010E277 /* FSCalendarDelegationFactory.m in Sources */,
 				277931E127E30FC20010E277 /* NSString+zh_SafeAccess.m in Sources */,
 				BCEA75302819336200886A86 /* WithdrawBodyView.m in Sources */,
@@ -8132,6 +8267,7 @@
 				BC8B6E7928585C2400866917 /* KSUMShareManager.m in Sources */,
 				BCC03F9228054DC300461B7C /* KSVideoHelper.m in Sources */,
 				2779320527E30FC30010E277 /* KSAudioRecordFileManager.m in Sources */,
+				BC15534E2AB325E200C1C347 /* TenantChooseMemberViewController.m in Sources */,
 				277931C627E30FC20010E277 /* NSObject+KSImpChangeTool.m in Sources */,
 				BC5E4B2C291E5E26001BBCD2 /* WMGaugeViewStyleFlatThin.m in Sources */,
 				275E3DAD27F45BE90010EC30 /* KSChatroomMessageCenter.m in Sources */,
@@ -8223,6 +8359,7 @@
 				BC12638C28FEB5E600509E90 /* ChatUserInfo.m in Sources */,
 				BC2888642A8100EA0064B773 /* KSGroupConversationController.m in Sources */,
 				BCF1BA5A27F5CF3C00FA36C4 /* LiveSeatApplyCell.m in Sources */,
+				BC14E4732AB2DAFD000C4983 /* StyleVideo.m in Sources */,
 				BC7CFFAF2817E6C900CAEB21 /* IncomeCountBottomView.m in Sources */,
 				275E3DD127F463140010EC30 /* KSLiveChatroomSeatApply.m in Sources */,
 				2779322427E30FC30010E277 /* ShopButton.m in Sources */,
@@ -8236,6 +8373,7 @@
 				275FA1A327E7311700CFEA2E /* KSRCIMDataSource.m in Sources */,
 				BC56C97C2923A3FD00AF301F /* CoursewareAlertCell.m in Sources */,
 				275E3DE227F467410010EC30 /* KSChatEmojiCollectionCell.m in Sources */,
+				BC14E4952AB31059000C4983 /* TenantCreateGroupBodyView.m in Sources */,
 				BCA1134828A22A66007FAFB9 /* HomeHotMusicCollectionCell.m in Sources */,
 				275E3DC227F45F3F0010EC30 /* KSLiveChatroomWelcome.m in Sources */,
 				BCDF820E2A8A2955005F8B82 /* MemberSettingMicAlert.m in Sources */,
@@ -8418,6 +8556,7 @@
 				277931C827E30FC20010E277 /* KSVideoEditor.m in Sources */,
 				BCA193B5282A80AA004A585D /* RecentCourseModel.m in Sources */,
 				2779326B27E30FD80010E277 /* FSCalendarSeparatorDecorationView.m in Sources */,
+				BC14E47F2AB2EE58000C4983 /* UnbindBottomView.m in Sources */,
 				277931D327E30FC20010E277 /* UIScrollView+KSTouch.m in Sources */,
 				BC7CFFB22817E6DB00CAEB21 /* KSMutilDatePicker.m in Sources */,
 				277931FE27E30FC30010E277 /* UIImage+Addtions.m in Sources */,
@@ -8510,13 +8649,16 @@
 				BC965AE82925D1D700AB90B0 /* ClassroomCoursewarePlayView.m in Sources */,
 				277931C727E30FC20010E277 /* NSMutableString+KSSafe.m in Sources */,
 				BCA353D82858B18100377661 /* StudentHomeworkList.m in Sources */,
+				BC14E4892AB2FAE0000C4983 /* TenantUnbindDetailViewController.m in Sources */,
 				BCC9F44527F69BD200647449 /* Whiteboard.m in Sources */,
 				BC5E4B2A291E5E26001BBCD2 /* ToneTuningBodyView.m in Sources */,
 				BCAD01C02872F54F0002CC40 /* LiveVideoListView.m in Sources */,
 				2779322327E30FC30010E277 /* PIckView.m in Sources */,
 				BCED5CAE28507E5F009A42DE /* KSChatLiveMessage.m in Sources */,
+				BC14E48C2AB2FBC7000C4983 /* TenantUnbindDetailBodyView.m in Sources */,
 				BC0A22B62847523E0065C1AB /* MemberListBodyView.m in Sources */,
 				275FA55F27F31AAF00EB6240 /* MinePageViewController.m in Sources */,
+				BC14E4842AB2F4C8000C4983 /* TenantUnbindBodyView.m in Sources */,
 				2779323127E30FC30010E277 /* UIView+ALFrame.m in Sources */,
 				BC28886E2A8101310064B773 /* KSSearchViewController.m in Sources */,
 				277932B327E30FFE0010E277 /* QWdynamicModel.m in Sources */,
@@ -8552,6 +8694,7 @@
 				BCB9FA6B2872D57E005D766B /* LiveListModel.m in Sources */,
 				2779320027E30FC30010E277 /* QCCountdownButton.m in Sources */,
 				2779321427E30FC30010E277 /* MBProgressHUD+NJ.m in Sources */,
+				BC14E4762AB2E6C2000C4983 /* UnbindTenantViewController.m in Sources */,
 				BC14A61228A0AC820086395C /* MineTeachToolView.m in Sources */,
 				BC02380F2865C6F9005560CA /* RCChatroomLikeCount.m in Sources */,
 				2779321727E30FC30010E277 /* UITextField_Toolbar.m in Sources */,
@@ -8562,6 +8705,7 @@
 				BC71DE8F2A89C937003F165E /* TXRTCService.m in Sources */,
 				BC106B792A8F4586000759A9 /* TXLiveMessageRejectAllSeat.m in Sources */,
 				BC71DF212A89FABD003F165E /* TxRTCRoomConfig.m in Sources */,
+				BC1553482AB31EEC00C1C347 /* TenangGroupCreateBottomView.m in Sources */,
 				277931EA27E30FC20010E277 /* UIAlertController+Extend.m in Sources */,
 				BCC0F7032A8CF13D00C4EFA4 /* TXDanBottomView.m in Sources */,
 				BC71DE932A89C937003F165E /* TXClassroomDeviceMsg.m in Sources */,
@@ -8646,6 +8790,7 @@
 				BCFE541028178FF600AD6786 /* MyIncomeViewController.m in Sources */,
 				2779322527E30FC30010E277 /* NSString+MD5.m in Sources */,
 				BC0A22A3284751F80065C1AB /* AccompanyView.m in Sources */,
+				BC1553572AB336A200C1C347 /* TenantStuModel.m in Sources */,
 				2779320327E30FC30010E277 /* KSChoosePicker.m in Sources */,
 				BC28582F2809451B0024697C /* EvaluateCouseCell.m in Sources */,
 				BCC9F43027F69BD200647449 /* HTTPResult.m in Sources */,
@@ -8727,9 +8872,11 @@
 				2779335927E316DD0010E277 /* WMPlayer.m in Sources */,
 				BCD6D16F28196756009A773E /* FeeRecordModel.m in Sources */,
 				BC71DEF52A89F470003F165E /* TxClassroomChatOtherCell.m in Sources */,
+				BC14E4912AB30F8F000C4983 /* TenantCreateGroupViewController.m in Sources */,
 				2779331127E310960010E277 /* NSObject+ReadDocument.m in Sources */,
 				BC3DE082280D88670027DC0E /* EvaluateListModel.m in Sources */,
 				BCDF821A2A8A2BEF005F8B82 /* CREmojiCollectionCell.m in Sources */,
+				BC36A50E2AB42B46002FEFB1 /* GroupOwnerTagView.m in Sources */,
 				277931EC27E30FC20010E277 /* UIColor+Extend.m in Sources */,
 				277935E827E32A450010E277 /* KSBaseViewController.m in Sources */,
 				BC7CFFA52817E37300CAEB21 /* IncomeCountViewController.m in Sources */,
@@ -8773,6 +8920,7 @@
 				BC483231282A646A005F534C /* HomeRecentCourseView.m in Sources */,
 				277931C327E30FC20010E277 /* NSArray+KSSafe.m in Sources */,
 				BCB9FA42286DA337005D766B /* GuideListView.m in Sources */,
+				BC1553522AB3279500C1C347 /* TenentGroupAddMemberCell.m in Sources */,
 				BC106B742A8F4586000759A9 /* TXLiveMessageClose.m in Sources */,
 				BCE6A09527F823DC00C97704 /* MinePageMusicCell.m in Sources */,
 				BC56C97829238D6300AF301F /* CoursewareListModel.m in Sources */,
@@ -9033,7 +9181,6 @@
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/SocialLibraries/QQ",
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/UMSocialSDKPlugin",
 				);
-
 				MARKETING_VERSION = 1.4.8;
 				MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
 				MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++17";

+ 4 - 0
KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m

@@ -159,6 +159,10 @@
         }
         else {
             [KSNetworkingManager configRequestHeader];
+            NSInteger tenantId = [UserDefaultObjectForKey(TENANT_ID) integerValue];
+            if (tenantId != -1) {
+                [KSNetworkingManager addHeader:[NSString stringWithFormat:@"%zd", tenantId] forKey:@"coopId"];
+            }
             [USER_MANAGER queryUserInfoSendLoginUMCount];
             [self initTableBar];
             self.window.rootViewController=_tabBarController;

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_tenantGroup_Logo.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_tenantGroup_Logo.imageset/chat_tenantGroup_Logo@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_tenantGroup_Logo.imageset/chat_tenantGroup_Logo@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_memberAdd.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_memberAdd.imageset/group_memberAdd@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_memberAdd.imageset/group_memberAdd@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_student.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_student.imageset/group_role_student@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_student.imageset/group_role_student@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_teacher.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_teacher.imageset/group_role_teacher@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_role_teacher.imageset/group_role_teacher@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_tenant.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_tenant.imageset/group_tenant@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_tenant.imageset/group_tenant@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/tenant_chat_chat.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/tenant_chat_chat.imageset/tenant_chat_chat@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/tenant_chat_chat.imageset/tenant_chat_chat@3x.png


+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/Contents.json

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

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/Contents.json

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

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_choose.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_choose.imageset/tenant_group_choose@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_choose.imageset/tenant_group_choose@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_desc.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_desc.imageset/tenant_group_desc@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_desc.imageset/tenant_group_desc@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_member.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_member.imageset/tenant_group_member@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_member.imageset/tenant_group_member@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_name.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_name.imageset/tenant_group_name@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_name.imageset/tenant_group_name@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_type.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_type.imageset/tenant_group_type@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_type.imageset/tenant_group_type@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_unchoose.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_unchoose.imageset/tenant_group_unchoose@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/groupCreate/tenant_group_unchoose.imageset/tenant_group_unchoose@3x.png


+ 44 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/homeTenant_bg.imageset/Contents.json

@@ -0,0 +1,44 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "homeTenant_bg@2x.png",
+      "idiom" : "universal",
+      "resizing" : {
+        "cap-insets" : {
+          "left" : 665,
+          "right" : 22
+        },
+        "center" : {
+          "mode" : "tile",
+          "width" : 4
+        },
+        "mode" : "3-part-horizontal"
+      },
+      "scale" : "2x"
+    },
+    {
+      "filename" : "homeTenant_bg@3x.png",
+      "idiom" : "universal",
+      "resizing" : {
+        "cap-insets" : {
+          "left" : 1007,
+          "right" : 33
+        },
+        "center" : {
+          "mode" : "tile",
+          "width" : 1
+        },
+        "mode" : "3-part-horizontal"
+      },
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/homeTenant_bg.imageset/homeTenant_bg@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/homeTenant_bg.imageset/homeTenant_bg@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenant_unbind_image.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenant_unbind_image.imageset/tenant_unbind_image@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenant_unbind_image.imageset/tenant_unbind_image@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_check.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_check.imageset/tenatant_album_check@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_check.imageset/tenatant_album_check@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_desc.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_desc.imageset/tenatant_album_desc@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Tenatant/tenatant_album_desc.imageset/tenatant_album_desc@3x.png


+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSHudLoagingManager.m

@@ -44,7 +44,7 @@
 }
 
 - (void)removeHUD {
-    dispatch_delay_block(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC), ^{
+    dispatch_delay_block(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC), ^{
         [self removeLoadingView];
     });
 }

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

@@ -12,6 +12,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 @interface KSNetworkingManager : NSObject
++ (void)addHeader:(NSString *)headValue forKey:(NSString *)headKey;
 
 // 配置请求头
 + (void)configRequestHeader;
@@ -398,6 +399,34 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)imGroupCreate:(NSString *)post name:(NSString *)name introduce:(NSString *)introduce success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// /api-teacher/imGroup/create
+/// 创建粉丝群、机构群
+/// @param post post
+/// @param name 群名称
+/// @param introduce 群简介
+/// @param studentIdArray 学生列表
+/// @param type 群类型
+/// @param success 成功
+/// @param faliure 失败
++ (void)tenantImGroupCreateRequest:(NSString *)post name:(NSString *)name introduce:(NSString *)introduce studentIdArray:(NSMutableArray *)studentIdArray type:(NSString *)type success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+//  imGroup/addGroupMember
+
+/// 添加群成员
+/// @param post post
+/// @param groupId 群id
+/// @param studentIdArray 学生列表
+/// @param success 成功
+/// @param faliure 失败
++ (void)tenantImGroupAddMemberRequest:(NSString *)post groupId:(NSString *)groupId studentIdArray:(NSMutableArray *)studentIdArray success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+// /api-teacher/student/page
+
+/// 查询好友列表
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)tenantImUserFriendRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 // /api-teacher/imGroup/dismiss
 
 /// 解散群聊
@@ -1328,5 +1357,31 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)courseCoursewareRemoveRequest:(NSString *)post ids:(NSString *)ids success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+#pragma mark ----- 机构相关
+
+/// 机构解绑
+/// @param post post
+/// @param reson 原因
+/// @param code 验证码
+/// @param success 成功
+/// @param faliure 失败
++ (void)tenantUnbindRequest:(NSString *)post reson:(NSString *)reson code:(NSString *)code success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /teacher-server/teacher/unbindTenantCancel
+
+/// 撤销申请
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)unbindTenantCancelRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /teacher-server/teacher/unbindTenantDetail
+
+/// 解绑申请记录
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)unbindTenantDetailRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 @end
 NS_ASSUME_NONNULL_END

+ 102 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -15,6 +15,10 @@
 
 @implementation KSNetworkingManager
 
++ (void)addHeader:(NSString *)headValue forKey:(NSString *)headKey {
+    [[VoNetworking sharedManager] addHttpHeader:headValue forKey:headKey];
+}
+
 + (void)configRequestHeader {
     if (![NSString isEmptyString:UserDefault(TokenKey)]) {
         [[VoNetworking sharedManager] configHttpHeader:@{@"Authorization":[NSString stringWithFormat:@"%@ %@", UserDefault(Token_type), UserDefault(TokenKey)]}];
@@ -884,6 +888,61 @@
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
+// /api-teacher/imGroup/create
+/// 创建粉丝群、机构群
+/// @param post post
+/// @param name 群名称
+/// @param introduce 群简介
+/// @param studentIdArray 学生列表
+/// @param type 群类型
+/// @param success 成功
+/// @param faliure 失败
++ (void)tenantImGroupCreateRequest:(NSString *)post name:(NSString *)name introduce:(NSString *)introduce studentIdArray:(NSMutableArray *)studentIdArray type:(NSString *)type success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-teacher/imGroup/create"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:name forKey:@"name"];
+    [parm setValue:introduce forKey:@"introduce"];
+    [parm setValue:type forKey:@"type"];
+    [parm setValue:studentIdArray forKey:@"studentIdList"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+//  imGroup/addGroupMember
+
+/// 添加群成员
+/// @param post post
+/// @param groupId 群id
+/// @param studentIdArray 学生列表
+/// @param success 成功
+/// @param faliure 失败
++ (void)tenantImGroupAddMemberRequest:(NSString *)post groupId:(NSString *)groupId studentIdArray:(NSMutableArray *)studentIdArray success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-teacher/imGroup/addGroupMember"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:groupId forKey:@"groupId"];
+    [parm setValue:studentIdArray forKey:@"studentIdList"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-teacher/student/page
+
+/// 查询好友列表
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)tenantImUserFriendRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-teacher/student/page"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@(1) forKey:@"bindTenant"];
+    [parm setValue:@(1) forKey:@"page"];
+    [parm setValue:@(10000) forKey:@"rows"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+
 // /api-teacher/imGroup/getDetail/{groupId}
 
 /// 获取群信息
@@ -2430,4 +2489,47 @@
     [parm setValue:ids forKey:@"ids"];
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
+
+#pragma mark ----- 机构相关
+
+/// 机构解绑
+/// @param post post
+/// @param reson 原因
+/// @param code 验证码
+/// @param success 成功
+/// @param faliure 失败
++ (void)tenantUnbindRequest:(NSString *)post reson:(NSString *)reson code:(NSString *)code success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/teacher/unbindTenant"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:reson forKey:@"unbindReason"];
+    [parm setValue:code forKey:@"code"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /teacher-server/teacher/unbindTenantCancel
+
+/// 撤销申请
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)unbindTenantCancelRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/teacher/unbindTenantCancel"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /teacher-server/teacher/unbindTenantDetail
+
+/// 解绑申请记录
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)unbindTenantDetailRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/teacher/unbindTenantDetail"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [self request:get andWithUrl:url and:parm success:success faliure:faliure];
+
+}
 @end

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/KSLoginManager.m

@@ -65,6 +65,8 @@
     [[NSUserDefaults standardUserDefaults] removeObjectForKey:Token_type];
     [[NSUserDefaults standardUserDefaults] removeObjectForKey:RefreshToken];
     [[NSUserDefaults standardUserDefaults] removeObjectForKey:IM_TOKEN];
+    [[NSUserDefaults standardUserDefaults] removeObjectForKey:TENANT_ID];
+
     // 返回登录页面
     UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
     if ([vc isKindOfClass:[UITabBarController class]]) {

+ 12 - 3
KulexiuForTeacher/KulexiuForTeacher/Common/Define/KSDomain.h

@@ -9,11 +9,9 @@
 #define KSDomain_h
 
 //#ifdef DEBUG
-
+// 测试环境
 #define hostURL (@"https://dev.colexiu.com")
 #define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
-//#define SEALCLASSHOST (@"http://192.168.3.143:9999")
-
 #define WEBHOST (@"https://dev.colexiu.com/teacher")
 #define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
 #define JSPUSH_ENVIRONMENT (NO)
@@ -22,6 +20,17 @@
 #define CONFIG_TXSDKAPPID (1400805079)
 #define TXOfflinePushCertificateIDForAPNS (39559)
 
+// 开发环境
+//#define hostURL (@"https://test.colexiu.com")
+//#define SEALCLASSHOST (@"https://test.colexiu.com/api-classroom")
+//#define WEBHOST (@"https://test.colexiu.com/teacher")
+//#define SOCKET_URL (@"wss://test.colexiu.com/audioAnalysis")
+//#define JSPUSH_ENVIRONMENT (NO)
+//#define RCIM_KEY (@"0vnjpoad0jbdz")
+//#define SUBMIT_UUID (NO)
+//#define CONFIG_TXSDKAPPID (1400805079)
+//#define TXOfflinePushCertificateIDForAPNS (39559)
+
 //#else
 
 //#define hostURL (@"https://online.colexiu.com")

+ 3 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Define/UserKeyHeader.h

@@ -47,6 +47,7 @@
 
 #define GROUP_FAN_LOGO (@"chat_fansGroup_logo")
 #define GROUP_COURSE_LOGO (@"chat_group_Logo")
+#define GROUP_TENANT_LOGO (@"chat_tenantGroup_Logo")
 
 #define USERDEFAULT_LOGO (@"user_default_avatal")
 #define USER_LOGO_RECTANGLE (@"user_avatarRectangle")
@@ -94,4 +95,6 @@
 
 #define ONLINE_CHECK (@"online_check")  // wangjiao
 
+#define TENANT_ID (@"tenantId")
+
 #endif /* UserKeyHeader_h */

+ 3 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/ThirdPart/FSCalendar/FSCalendarCell.m

@@ -288,6 +288,9 @@
     if (!self.dateIsToday && _isHightlight) {
         return _appearance.backgroundColors[@(FSCalendarCellStateHightlight)];
     }
+    if (self.dateIsToday && _isHightlight) {
+        return _appearance.backgroundColors[@(FSCalendarCellStateHightlight)];
+    }
     return self.preferredFillDefaultColor ?: [self colorForCurrentStateInDictionary:_appearance.backgroundColors];
 }
 

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/VoNetworking/VoNetWorking.h

@@ -121,6 +121,12 @@ typedef VoResponseFailBlock VoDownloadFailBlock;
  */
 - (void)configHttpHeader:(NSDictionary *_Nonnull)httpHeader;
 
+
+/// 添加请求头
+/// @param value value
+/// @param headerKey key
+- (void)addHttpHeader:(NSString *_Nonnull)value forKey:(NSString *_Nonnull)headerKey;
+
 /**
  *  移除请求头
  *

+ 12 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/VoNetworking/VoNetWorking.m

@@ -96,7 +96,7 @@ static NSTimeInterval   requestTimeout = 15.0f;  // 超时时间
     //每次网络请求的时候,检查此时磁盘中的缓存大小,阈值默认是40MB,如果超过阈值,则清理LRU缓存,同时也会清理过期缓存,缓存默认SSL是7天,磁盘缓存的大小和SSL的设置可以通过该方法[YQCacheManager shareManager] setCacheTime: diskCapacity:]设置
     [[VoCacheManager shareManager] clearLRUCache];
     
-    return self.httpSessionManager;
+    return [self manager];
 }
 
 
@@ -149,7 +149,7 @@ static NSTimeInterval   requestTimeout = 15.0f;  // 超时时间
     //将session拷贝到堆中,block内部才可以获取得到session
     __block VoURLSessionTask *session = nil;
     
-    AFHTTPSessionManager *manager = self.httpSessionManager;
+    AFHTTPSessionManager *manager = [self manager];
     
     if (networkStatus == VoNetworkStatusNotReachable) {
         if (failBlock) failBlock(YQ_ERROR);
@@ -423,6 +423,7 @@ static NSTimeInterval   requestTimeout = 15.0f;  // 超时时间
     }
     
     AFHTTPSessionManager *manager = [self manager];
+    [manager.requestSerializer clearAuthorizationHeader];
     manager.requestSerializer.timeoutInterval = 300;
     //响应内容序列化为二进制
     manager.responseSerializer = [AFHTTPResponseSerializer serializer];
@@ -571,6 +572,15 @@ static NSTimeInterval   requestTimeout = 15.0f;  // 超时时间
     }
 }
 
+/// 添加请求头
+/// @param value value
+/// @param headerKey key
+- (void)addHttpHeader:(NSString *)value forKey:(NSString *)headerKey {
+    
+    [self.httpSessionManager.requestSerializer setValue:value forHTTPHeaderField:headerKey];
+}
+
+
 /**
  *  移除请求头
  *

+ 9 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/ChatViewController.m

@@ -12,6 +12,7 @@
 #import "KSChatListViewController.h"
 #import "KSTabBarViewController.h"
 #import "TXIMLinsenter.h"
+#import "TenantCreateGroupViewController.h"
 
 @interface ChatViewController ()<JXCategoryViewDelegate>
 
@@ -209,8 +210,14 @@
             break;
         case CHATNAVACTION_SEND:
         {
-            CreateFansGroupViewController *ctrl = [[CreateFansGroupViewController alloc] init];
-            [self.navigationController pushViewController:ctrl animated:YES];
+            if ([UserDefault(TENANT_ID) integerValue] > -1) {
+                TenantCreateGroupViewController *ctrl = [[TenantCreateGroupViewController alloc] init];
+                [self.navigationController pushViewController:ctrl animated:YES];
+            }
+            else {
+                CreateFansGroupViewController *ctrl = [[CreateFansGroupViewController alloc] init];
+                [self.navigationController pushViewController:ctrl animated:YES];
+            }
         }
             break;
             

+ 24 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TenantGroup/TenantChooseMemberViewController.h

@@ -0,0 +1,24 @@
+//
+//  TenantChooseMemberViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import "KSBaseViewController.h"
+
+typedef void(^TenantMemberChooseCallback)(NSMutableArray * _Nullable memberArray);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TenantChooseMemberViewController : KSBaseViewController
+
+@property (nonatomic, strong) NSMutableArray *groupMemberIdArray;
+
+@property (nonatomic, strong) NSMutableArray *preChooseMember;
+
+- (void)chooseMemberCallback:(TenantMemberChooseCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 218 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TenantGroup/TenantChooseMemberViewController.m

@@ -0,0 +1,218 @@
+//
+//  TenantChooseMemberViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import "TenantChooseMemberViewController.h"
+#import "TenangGroupCreateBottomView.h"
+#import "TenentGroupAddMemberCell.h"
+#import "TenantStuModel.h"
+
+@interface TenantChooseMemberViewController ()<UITableViewDelegate, UITableViewDataSource>
+
+@property (nonatomic, copy) TenantMemberChooseCallback callback;
+
+@property (nonatomic, strong) UITableView *tableView;
+
+@property (nonatomic, strong) TenangGroupCreateBottomView *bottomView;
+
+@property (nonatomic, strong) NSMutableArray *chooseArray;
+
+@end
+
+@implementation TenantChooseMemberViewController
+
+- (void)chooseMemberCallback:(TenantMemberChooseCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"选择群成员"];
+    [self configUI];
+    [self configEmptyStatus];
+    [self requsetData];
+}
+
+- (void)configEmptyStatus {
+    [self setPromptString:@"暂无学员" imageName:@"wd_img_zwsj" inView:self.tableView];
+}
+- (void)requsetData {
+    [KSNetworkingManager tenantImUserFriendRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
+        NSMutableArray *memberArray = [NSMutableArray array];
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
+            for (NSDictionary *parm in sourceArray) {
+                TenantStuModel *model = [[TenantStuModel alloc] initWithDictionary:parm];
+                [memberArray addObject:model];
+            }
+        }
+        else {
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
+        }
+        [self refreshView:memberArray];
+        
+    } faliure:^(NSError * _Nonnull error) {
+        [self changePromptLabelState];
+    }];
+}
+
+- (BOOL)isContainUser:(NSString *)memberId {
+    for (NSString *userId in self.groupMemberIdArray) {
+        if ([memberId isEqualToString:userId]) {
+            return YES;
+        }
+    }
+    return NO;
+}
+
+- (BOOL)getStuChooseStatus:(NSString *)userId {
+    for (TenantStuModel *chooseModel in self.preChooseMember) {
+        if ([userId isEqualToString:chooseModel.userId]) {
+            return YES;
+        }
+    }
+    return NO;
+}
+
+- (void)refreshView:(NSMutableArray *)stuArray {
+    
+    NSMutableArray *memArray = [NSMutableArray array];
+    for (TenantStuModel *model in stuArray) {
+        BOOL isContainUser = [self isContainUser:model.userId];
+        if (isContainUser == NO) {
+            [memArray addObject:model];
+        }
+    }
+    stuArray = [NSMutableArray arrayWithArray:memArray];
+    self.dataArray = [NSMutableArray array];
+    self.chooseArray = [NSMutableArray array];
+    for (TenantStuModel *model in stuArray) {
+        BOOL isChoose = [self getStuChooseStatus:model.userId];
+        if (isChoose) {
+            model.isChoose = YES;
+            [self.chooseArray addObject:model];
+        }
+        [self.dataArray addObject:model];
+    }
+    self.dataArray = [NSMutableArray array];
+    [self.tableView reloadData];
+    [self changePromptLabelState];
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.view);
+    }];
+    
+    CGFloat bottomHeight = [TenangGroupCreateBottomView getViewHeight];
+    [self.view addSubview:self.bottomView];
+    [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.bottom.mas_equalTo(self.view);
+        make.height.mas_equalTo(bottomHeight);
+    }];
+}
+
+
+#pragma marl ---- table data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArray.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    TenantStuModel *model = self.dataArray[indexPath.row];
+    TenentGroupAddMemberCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TenentGroupAddMemberCell"];
+    [cell configWithSource:model];
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    TenantStuModel *model = self.dataArray[indexPath.row];
+    model.isChoose = !model.isChoose;
+    if (model.isChoose) {
+        [self.chooseArray addObject:model];
+    }
+    else {
+        [self.chooseArray removeObject:model];
+    }
+    [self refreshStatus];
+}
+
+- (void)refreshStatus {
+    NSInteger count = self.chooseArray.count;
+    NSString *desc = @"完成";
+    if (count > 0) {
+        desc = [NSString stringWithFormat:@"完成(%zd)",count];
+    }
+
+    [self.bottomView.sureButton setTitle:desc forState:UIControlStateNormal];
+    [self.tableView reloadData];
+}
+
+- (UITableView *)tableView {
+    if (!_tableView) {
+        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+        _tableView.backgroundColor = [UIColor clearColor];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        [_tableView registerNib:[UINib nibWithNibName:@"TenentGroupAddMemberCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"TenentGroupAddMemberCell"];
+        _tableView.rowHeight = 75.0f;
+        CGFloat bottomHeight = [TenangGroupCreateBottomView getViewHeight];
+
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KPortraitWidth, bottomHeight)];
+        bottomView.backgroundColor = [UIColor clearColor];
+        _tableView.tableFooterView = bottomView;
+    }
+    return _tableView;
+}
+
+- (TenangGroupCreateBottomView *)bottomView {
+    if (!_bottomView) {
+        _bottomView = [TenangGroupCreateBottomView shareInstance];
+        [_bottomView.sureButton setTitle:@"完成" forState:UIControlStateNormal];
+        MJWeakSelf;
+        [_bottomView createCallback:^{
+            [weakSelf sureChooseMember];
+        }];
+    }
+    return _bottomView;
+}
+
+- (void)sureChooseMember {
+    if (self.chooseArray.count) {
+        if (self.callback) {
+            self.callback(self.chooseArray);
+            [self backAction];
+        }
+    }
+    else {
+        [LOADING_MANAGER MBShowAUTOHidingInWindow:@"请选择群成员"];
+    }
+}
+
+- (NSMutableArray *)chooseArray {
+    if (!_chooseArray) {
+        _chooseArray = [NSMutableArray array];
+    }
+    return _chooseArray;
+}
+/*
+#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

+ 16 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TenantGroup/TenantCreateGroupViewController.h

@@ -0,0 +1,16 @@
+//
+//  TenantCreateGroupViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TenantCreateGroupViewController : KSBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 158 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TenantGroup/TenantCreateGroupViewController.m

@@ -0,0 +1,158 @@
+//
+//  TenantCreateGroupViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import "TenantCreateGroupViewController.h"
+#import "TenantCreateGroupBodyView.h"
+#import "TenangGroupCreateBottomView.h"
+#import "TenantChooseMemberViewController.h"
+#import "TenantStuModel.h"
+
+@interface TenantCreateGroupViewController ()
+
+@property (nonatomic, strong) TenantCreateGroupBodyView *bodyView;
+
+@property (nonatomic, strong) TenangGroupCreateBottomView *bottomView;
+
+@property (nonatomic, assign) BOOL isFansGroup;
+
+@property (nonatomic, strong) NSMutableArray *memberArray;
+
+@end
+
+@implementation TenantCreateGroupViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"创建粉丝群"];
+    self.isFansGroup = YES;
+    [self configUI];
+}
+
+- (void)configUI {
+    CGFloat bottomHeight = [TenangGroupCreateBottomView getViewHeight];
+    
+    
+    [self.scrollView addSubview:self.bodyView];
+    [self.bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.scrollView.mas_top);
+        make.bottom.mas_equalTo(self.scrollView.mas_bottom).offset(-bottomHeight);
+    }];
+    
+    [self.view addSubview:self.bottomView];
+    [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.bottom.mas_equalTo(self.view);
+        make.height.mas_equalTo(bottomHeight);
+    }];
+}
+
+
+
+
+#pragma mark ---- lazying
+- (TenangGroupCreateBottomView *)bottomView {
+    if (!_bottomView) {
+        _bottomView = [TenangGroupCreateBottomView shareInstance];
+        MJWeakSelf;
+        [_bottomView createCallback:^{
+            [weakSelf createGroupAction];
+        }];
+    }
+    return _bottomView;
+}
+
+- (void)createGroupAction {
+    if ([NSString isEmptyString:self.bodyView.nameField.text]) {
+        [LOADING_MANAGER MBShowAUTOHidingInWindow:@"请输入群聊名称"];
+        return;
+    }
+    
+    NSString *name = self.bodyView.nameField.text;
+    NSString *desc = self.bodyView.inputView.text;
+    NSString *type = self.isFansGroup ? @"FAN" : @"ORG";
+    NSMutableArray *studentIds = [NSMutableArray array];
+    for (TenantStuModel *model in self.memberArray) {
+        [studentIds addObject:model.userId];
+    }
+    [LOADING_MANAGER showHUD];
+    [KSNetworkingManager tenantImGroupCreateRequest:KS_POST name:name introduce:desc studentIdArray:studentIds type:type success:^(NSDictionary * _Nonnull dic) {
+        [LOADING_MANAGER removeHUD];
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            [LOADING_MANAGER KSShowMsg:@"创建群聊成功" promptCompletion:^{
+                [self backAction];
+            }];
+        }
+        else {
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [LOADING_MANAGER removeHUD];
+    }];
+}
+
+- (TenantCreateGroupBodyView *)bodyView {
+    if (!_bodyView) {
+        _bodyView = [TenantCreateGroupBodyView shareInstance];
+        MJWeakSelf;
+        [_bodyView addGroupMember:^(GROUPADDTYPE type) {
+            [weakSelf bodyViewAction:type];
+        }];
+    }
+    return _bodyView;
+}
+
+- (void)bodyViewAction:(GROUPADDTYPE)type {
+    switch (type) {
+        case GROUPADDTYPE_FANS:
+        {
+            [self.memberArray removeAllObjects];
+            [self.bodyView refreshMemberView:self.memberArray];
+            self.isFansGroup = YES;
+        }
+            break;
+        case GROUPADDTYPE_TENANT:
+        {
+            self.isFansGroup = NO;
+        }
+            break;
+        case GROUPADDTYPE_ADDMEMBER:
+        {
+            TenantChooseMemberViewController *ctrl = [[TenantChooseMemberViewController alloc] init];
+            ctrl.preChooseMember = self.memberArray;
+            MJWeakSelf;
+            [ctrl chooseMemberCallback:^(NSMutableArray * _Nullable memberArray) {
+                weakSelf.memberArray = memberArray;
+                [weakSelf.bodyView refreshMemberView:memberArray];
+            }];
+            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+            break;
+            
+        default:
+            break;
+    }
+}
+
+- (NSMutableArray *)memberArray {
+    if (!_memberArray) {
+        _memberArray = [NSMutableArray array];
+    }
+    return _memberArray;
+}
+
+/*
+#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

+ 49 - 11
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/Controller/GroupSettingViewController.m

@@ -18,7 +18,8 @@
 #import "KSPublicAlertView.h"
 #import <ImSDK_Plus/V2TIMManager+Group.h>
 #import "CustomNavViewController.h"
-
+#import "TenantChooseMemberViewController.h"
+#import "TenantStuModel.h"
 
 @interface GroupSettingViewController ()
 
@@ -48,14 +49,6 @@
     self.bodyView = [GroupSettingBodyView shareInstance];
     CGFloat height = kScreenHeight - kNaviBarHeight - iPhoneXSafeBottomMargin > 700 ? kScreenHeight - kNaviBarHeight - iPhoneXSafeBottomMargin : 700;
     self.bodyView.frame = CGRectMake(0, 0, kScreenWidth, height);
-    BOOL isCourseGroup = NO;
-    if ([self.groupId containsString:@"COURSE"]) {
-        isCourseGroup = YES;
-    }
-    else if ([self.groupId containsString:@"FAN"]) {
-        isCourseGroup = NO;
-    }
-    self.bodyView.isCourseGroup = isCourseGroup;
     [self.scrollView addSubview:self.bodyView];
     [self.scrollView setContentSize:CGSizeMake(kScreenWidth, height)];
 }
@@ -67,7 +60,6 @@
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     [self requestData];
-    [self getGroupStudent];
     [self getGroupMessageNotiferStatus];
     [self requestApplyMember];
 }
@@ -88,6 +80,16 @@
 }
 
 - (void)evaluateMessge {
+    NSMutableArray *memberArray = [NSMutableArray array];
+    for (GroupMemberModel *model in self.sourceArray) {
+        if (model.isAdmin) {
+            [memberArray insertObject:model atIndex:0];
+        }
+        else {
+            [memberArray addObject:model];
+        }
+    }
+    self.sourceArray = [NSMutableArray arrayWithArray:memberArray];
     [self.bodyView evaluateStudentArray:self.sourceArray];
 }
 
@@ -101,8 +103,10 @@
         else {
             [self MBPShow:MESSAGEKEY];
         }
+        [self getGroupStudent];
+
     } faliure:^(NSError * _Nonnull error) {
-        
+        [self getGroupStudent];
     }];
 }
 
@@ -213,11 +217,45 @@
             [self showDismissAlert];
         }
             break;
+        case GROUPSETTING_ADDMENBER: // 添加群成员
+        {
+            NSMutableArray *memberArray = [NSMutableArray array];
+            for (GroupMemberModel *model in self.sourceArray) {
+                [memberArray addObject:model.userId];
+            }
+            TenantChooseMemberViewController *ctrl = [[TenantChooseMemberViewController alloc] init];
+            ctrl.groupMemberIdArray = memberArray;
+            MJWeakSelf;
+            [ctrl chooseMemberCallback:^(NSMutableArray * _Nullable memberArray) {
+                [weakSelf addMember:memberArray];
+            }];
+            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+            break;
         default:
             break;
     }
 }
 
+- (void)addMember:(NSMutableArray *)array {
+    NSMutableArray *stuIdArray = [NSMutableArray array];
+    for (TenantStuModel *model in array) {
+        [stuIdArray addObject:model.userId];
+    }
+    [LOADING_MANAGER showHUD];
+    [KSNetworkingManager tenantImGroupAddMemberRequest:KS_POST groupId:self.groupId studentIdArray:stuIdArray success:^(NSDictionary * _Nonnull dic) {
+        [LOADING_MANAGER removeHUD];
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            [self requestData];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [LOADING_MANAGER removeHUD];
+    }];
+}
+
 - (void)showDismissAlert {
     MJWeakSelf;
     self.alertView = [KSPublicAlertView shareInstanceWithTitle:@"提示" descMessage:@"确认解散群聊吗" leftTitle:@"取消" rightTitle:@"确定" cancelAction:^{

+ 6 - 9
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupMemberListCell.m

@@ -10,9 +10,7 @@
 
 @interface GroupMemberListCell ()
 
-@property (weak, nonatomic) IBOutlet UIImageView *ownerImage;
-@property (weak, nonatomic) IBOutlet NSLayoutConstraint *ownerWidth;
-@property (weak, nonatomic) IBOutlet NSLayoutConstraint *nameLeft;
+@property (weak, nonatomic) IBOutlet UIView *ownerTagView;
 
 @property (weak, nonatomic) IBOutlet UIImageView *memberLogo;
 
@@ -25,6 +23,7 @@
 @property (weak, nonatomic) IBOutlet UIButton *chatButton;
 
 @property (weak, nonatomic) IBOutlet UIImageView *typeView;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *typeViewWidth;
 
 @end
 
@@ -59,21 +58,19 @@
         }
         
         if (model.isAdmin) {
-            self.nameLeft.constant = 4.0f;
-            self.ownerWidth.constant = 34.0f;
-            self.ownerImage.hidden = NO;
+            self.ownerTagView.hidden = NO;
         }
         else {
-            self.nameLeft.constant = 0.0f;
-            self.ownerWidth.constant = 0.0f;
-            self.ownerImage.hidden = YES;
+            self.ownerTagView.hidden = YES;
         }
         
         if ([model.roleType isEqualToString:@"TEACHER"]) {
             self.typeView.hidden = NO;
+            self.typeViewWidth.constant = 41.0f;
         }
         else {
             self.typeView.hidden = YES;
+            self.typeViewWidth.constant = 0.0f;
         }
     }
 }

+ 42 - 28
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupMemberListCell.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<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">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" 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="21207"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
         <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"/>
@@ -33,8 +33,31 @@
                                     </userDefinedRuntimeAttribute>
                                 </userDefinedRuntimeAttributes>
                             </imageView>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="12l-lG-OPd">
+                                <rect key="frame" x="16" y="41" width="40" height="15"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="群主" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OuM-YO-EBJ">
+                                        <rect key="frame" x="8.5" y="0.5" width="23" height="14"/>
+                                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
+                                        <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="1" green="0.30196078430000001" blue="0.44705882349999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstItem="OuM-YO-EBJ" firstAttribute="centerX" secondItem="12l-lG-OPd" secondAttribute="centerX" id="1bE-dT-x0R"/>
+                                    <constraint firstAttribute="width" constant="40" id="fcE-JZ-B15"/>
+                                    <constraint firstItem="OuM-YO-EBJ" firstAttribute="centerY" secondItem="12l-lG-OPd" secondAttribute="centerY" id="p6o-Bt-tsl"/>
+                                    <constraint firstAttribute="height" constant="15" id="wxa-LL-7nI"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="7.5"/>
+                                    </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="Vhp-Wi-YsA">
-                                <rect key="frame" x="107" y="21" width="33" height="22"/>
+                                <rect key="frame" x="69" y="21" width="33" height="22"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="22" id="Js9-hD-GW8"/>
                                 </constraints>
@@ -49,39 +72,32 @@
                                     <constraint firstAttribute="width" constant="40" id="Pff-Ye-Fok"/>
                                 </constraints>
                                 <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                                <state key="normal" image="chat_chat"/>
+                                <state key="normal" image="tenant_chat_chat"/>
                                 <connections>
                                     <action selector="chatAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="zCp-eY-UZG"/>
                                 </connections>
                             </button>
-                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="group_ownerList" translatesAutoresizingMaskIntoConstraints="NO" id="Nfh-Ew-S6J">
-                                <rect key="frame" x="69" y="23" width="34" height="18"/>
-                                <constraints>
-                                    <constraint firstAttribute="width" constant="34" id="BzO-fB-1mA"/>
-                                    <constraint firstAttribute="height" constant="18" id="j6N-l8-9Rq"/>
-                                </constraints>
-                            </imageView>
-                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="chat_talentList" translatesAutoresizingMaskIntoConstraints="NO" id="YnH-PP-xYM">
-                                <rect key="frame" x="14" y="40" width="44" height="14"/>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="group_role_teacher" translatesAutoresizingMaskIntoConstraints="NO" id="yFF-v3-2wd">
+                                <rect key="frame" x="105" y="22" width="41" height="20"/>
                                 <constraints>
-                                    <constraint firstAttribute="height" constant="14" id="t60-hF-4xp"/>
-                                    <constraint firstAttribute="width" constant="44" id="uA9-XN-LGN"/>
+                                    <constraint firstAttribute="width" constant="41" id="EXI-uA-XdQ"/>
+                                    <constraint firstAttribute="height" constant="20" id="lsu-FD-LuA"/>
                                 </constraints>
                             </imageView>
                         </subviews>
                         <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                         <constraints>
                             <constraint firstItem="Vhp-Wi-YsA" firstAttribute="centerY" secondItem="GW3-Oz-aPr" secondAttribute="centerY" id="4jm-Nc-ex4"/>
-                            <constraint firstItem="YnH-PP-xYM" firstAttribute="bottom" secondItem="GW3-Oz-aPr" secondAttribute="bottom" id="5mE-Nx-LMv"/>
-                            <constraint firstItem="C2d-wO-ajH" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Vhp-Wi-YsA" secondAttribute="trailing" constant="12" id="Aoh-be-l3n"/>
+                            <constraint firstItem="Vhp-Wi-YsA" firstAttribute="leading" secondItem="GW3-Oz-aPr" secondAttribute="trailing" constant="11" id="CPz-Wp-UKt"/>
                             <constraint firstItem="GW3-Oz-aPr" firstAttribute="centerY" secondItem="3bd-Vo-rTM" secondAttribute="centerY" id="Mw8-KH-Nlc"/>
-                            <constraint firstItem="Nfh-Ew-S6J" firstAttribute="leading" secondItem="GW3-Oz-aPr" secondAttribute="trailing" constant="11" id="ONQ-qG-Yor"/>
-                            <constraint firstItem="Vhp-Wi-YsA" firstAttribute="leading" secondItem="Nfh-Ew-S6J" secondAttribute="trailing" constant="4" id="ZeM-2h-Bbf"/>
+                            <constraint firstItem="12l-lG-OPd" firstAttribute="centerX" secondItem="GW3-Oz-aPr" secondAttribute="centerX" id="NFI-7e-knA"/>
+                            <constraint firstItem="C2d-wO-ajH" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="yFF-v3-2wd" secondAttribute="trailing" constant="12" id="V4a-Gr-ejZ"/>
+                            <constraint firstItem="12l-lG-OPd" firstAttribute="bottom" secondItem="GW3-Oz-aPr" secondAttribute="bottom" constant="2" id="Ypw-XK-x59"/>
                             <constraint firstAttribute="trailing" secondItem="C2d-wO-ajH" secondAttribute="trailing" constant="14" id="a77-uB-Due"/>
                             <constraint firstItem="C2d-wO-ajH" firstAttribute="centerY" secondItem="Vhp-Wi-YsA" secondAttribute="centerY" id="cZb-Vp-Luy"/>
+                            <constraint firstItem="yFF-v3-2wd" firstAttribute="leading" secondItem="Vhp-Wi-YsA" secondAttribute="trailing" constant="3" id="dmE-hu-3Yx"/>
+                            <constraint firstItem="yFF-v3-2wd" firstAttribute="centerY" secondItem="Vhp-Wi-YsA" secondAttribute="centerY" id="eej-Pb-iB4"/>
                             <constraint firstItem="GW3-Oz-aPr" firstAttribute="leading" secondItem="3bd-Vo-rTM" secondAttribute="leading" constant="14" id="g2u-Nh-Bgq"/>
-                            <constraint firstItem="Vhp-Wi-YsA" firstAttribute="centerY" secondItem="Nfh-Ew-S6J" secondAttribute="centerY" id="i5y-pn-1hh"/>
-                            <constraint firstItem="YnH-PP-xYM" firstAttribute="centerX" secondItem="GW3-Oz-aPr" secondAttribute="centerX" id="qfF-7x-9Ag"/>
                         </constraints>
                         <userDefinedRuntimeAttributes>
                             <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -103,18 +119,16 @@
                 <outlet property="chatButton" destination="C2d-wO-ajH" id="F2p-LE-BIc"/>
                 <outlet property="memberLogo" destination="GW3-Oz-aPr" id="sPh-qx-eoq"/>
                 <outlet property="memberName" destination="Vhp-Wi-YsA" id="5VD-Ix-Oua"/>
-                <outlet property="nameLeft" destination="ZeM-2h-Bbf" id="b7i-RH-9Rk"/>
-                <outlet property="ownerImage" destination="Nfh-Ew-S6J" id="lQ9-xF-fQe"/>
-                <outlet property="ownerWidth" destination="BzO-fB-1mA" id="Fcm-vU-JYW"/>
-                <outlet property="typeView" destination="YnH-PP-xYM" id="hA7-Rh-UmY"/>
+                <outlet property="ownerTagView" destination="12l-lG-OPd" id="oFS-Vl-LZ8"/>
+                <outlet property="typeView" destination="yFF-v3-2wd" id="aph-hx-5oh"/>
+                <outlet property="typeViewWidth" destination="EXI-uA-XdQ" id="T7E-mq-S8Q"/>
             </connections>
             <point key="canvasLocation" x="131.8840579710145" y="63.616071428571423"/>
         </tableViewCell>
     </objects>
     <resources>
-        <image name="chat_chat" width="19" height="18"/>
-        <image name="chat_talentList" width="44" height="14"/>
-        <image name="group_ownerList" width="34" height="18"/>
+        <image name="group_role_teacher" width="41" height="20"/>
+        <image name="tenant_chat_chat" width="22" height="22"/>
         <systemColor name="systemBackgroundColor">
             <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
         </systemColor>

+ 3 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.h

@@ -16,6 +16,7 @@ typedef NS_ENUM(NSInteger, GROUPSETTING) {
     GROUPSETTING_NOTICE,  // 群公告
     GROUPSETTING_FEEDBACK, // 反馈
     GROUPSETTING_DISMISS, // 解散群聊
+    GROUPSETTING_ADDMENBER, // 添加成员
 };
 
 
@@ -25,12 +26,12 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface GroupSettingBodyView : UIView
 
+@property (nonatomic, strong) NSString *groupType;
+
 @property (nonatomic, assign) NSInteger applyMember;
 
 @property (nonatomic, assign) BOOL isOn;
 
-@property (nonatomic, assign) BOOL isCourseGroup;
-
 + (instancetype)shareInstance;
 
 - (void)configWithSource:(id)source callback:(GroupSettingBlock)callback;

+ 86 - 23
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.m

@@ -8,6 +8,7 @@
 #import "GroupSettingBodyView.h"
 #import "GroupMemberModel.h"
 #import "GroupListModel.h"
+#import "GroupOwnerTagView.h"
 
 typedef void(^ChooseMemberCallback)(NSString *targetId);
 
@@ -19,12 +20,13 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
 
 @property (nonatomic, strong) NSString *targetId;
 
-@property (nonatomic, strong) UIImageView *roleTypeView;
-
+@property (nonatomic, strong) GroupOwnerTagView *tagView;
 
 @property (nonatomic, copy) ChooseMemberCallback callback;
 
-- (void)configMemberWithUrl:(NSString *)url name:(NSString *)name targetId:(NSString *)targetId roleType:(NSString *)roleType callback:(ChooseMemberCallback)callback;
+- (void)configMemberWithUrl:(NSString *)url name:(NSString *)name targetId:(NSString *)targetId isOwner:(BOOL)isOwner callback:(ChooseMemberCallback)callback;
+
+- (void)configMemberWithNativeImage:(NSString *)imageName name:(NSString *)name callback:(ChooseMemberCallback)callback;
 
 @end
 
@@ -42,12 +44,12 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
 - (void)initView {
     
     self.memberLabel = [[UILabel alloc] init];
-    self.memberLabel.textColor = HexRGB(0x666666);
+    self.memberLabel.textColor = HexRGB(0x777777);
     [self.memberLabel setFont:[UIFont systemFontOfSize:14.0f]];
     [self.memberLabel setTextAlignment:NSTextAlignmentCenter];
     [self addSubview:self.memberLabel];
     [self.memberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.width.mas_equalTo(self.mas_width);
+        make.width.mas_equalTo(45);
         make.centerX.mas_equalTo(self.mas_centerX);
         make.height.mas_equalTo(20);
         make.bottom.mas_equalTo(self.mas_bottom).offset(-19);
@@ -62,21 +64,21 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     [self addSubview:self.memberLogo];
     [self.memberLogo mas_makeConstraints:^(MASConstraintMaker *make) {
         make.centerX.mas_equalTo(self.mas_centerX);
-        make.width.height.mas_equalTo(40);
+        make.width.height.mas_equalTo(45);
         make.bottom.mas_equalTo(self.memberLabel.mas_top).offset(-2);
     }];
     UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
     [self addGestureRecognizer:tapGesture];
     
-    self.roleTypeView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chat_talentTag"]];
-    [self addSubview:self.roleTypeView];
-    [self.roleTypeView mas_makeConstraints:^(MASConstraintMaker *make) {
+    self.tagView = [GroupOwnerTagView shareInstance];
+    [self addSubview:self.tagView];
+    [self.tagView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.width.mas_equalTo(40);
+        make.height.mas_equalTo(15);
         make.centerX.mas_equalTo(self.memberLogo.mas_centerX);
-        make.height.mas_equalTo(13);
-        make.bottom.mas_equalTo(self.memberLogo.mas_bottom);
+        make.bottom.mas_equalTo(self.memberLogo.mas_bottom).offset(2);
     }];
-    self.roleTypeView.hidden = YES;
+    self.tagView.hidden = YES;
     
 }
 
@@ -86,7 +88,7 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     }
 }
 
-- (void)configMemberWithUrl:(NSString *)url name:(NSString *)name targetId:(NSString *)targetId roleType:(NSString *)roleType callback:(ChooseMemberCallback)callback {
+- (void)configMemberWithUrl:(NSString *)url name:(NSString *)name targetId:(NSString *)targetId isOwner:(BOOL)isOwner callback:(ChooseMemberCallback)callback {
     if (callback) {
         self.callback = callback;
     }
@@ -94,12 +96,21 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     self.memberLabel.text = [NSString returnNoNullStringWithString:name];
     self.targetId = targetId;
     
-    if ([roleType isEqualToString:@"TEACHER"]) {
-        self.roleTypeView.hidden = NO;
+    if (isOwner) {
+        self.tagView.hidden = NO;
     }
     else {
-        self.roleTypeView.hidden = YES;
+        self.tagView.hidden = YES;
+    }
+}
+
+
+- (void)configMemberWithNativeImage:(NSString *)imageName name:(NSString *)name callback:(ChooseMemberCallback)callback {
+    if (callback) {
+        self.callback = callback;
     }
+    [self.memberLogo setImage:[UIImage imageNamed:imageName]];
+    self.memberLabel.text = name;
 }
 @end
 
@@ -114,9 +125,13 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
 @property (weak, nonatomic) IBOutlet UIButton *switchButton;
 @property (weak, nonatomic) IBOutlet UIView *memberView;
 @property (weak, nonatomic) IBOutlet UILabel *groupMemberDesc;
+@property (weak, nonatomic) IBOutlet UIView *applyView;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *applyViewHeight;
 
 @property (nonatomic, copy) GroupSettingBlock callback;
 
+@property (nonatomic, assign) BOOL canAddMember;
+
 @end
 
 @implementation GroupSettingBodyView
@@ -129,6 +144,19 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     return view;
 }
 
+- (void)configApplyViewDisplay:(BOOL)isDisplay {
+    if (isDisplay) {
+        self.applyView.hidden = NO;
+        self.applyViewHeight.constant = 55.0f;
+        self.canAddMember = NO;
+    }
+    else {
+        self.applyView.hidden = YES;
+        self.applyViewHeight.constant = 0.0f;
+        self.canAddMember = YES;
+    }
+}
+
 - (void)configWithSource:(id)source callback:(GroupSettingBlock)callback {
     if (callback) {
         self.callback = callback;
@@ -136,12 +164,26 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     
     if ([source isKindOfClass:[GroupListModel class]]) {
         GroupListModel *model = source;
-        NSString *groupPlaceHolder = self.isCourseGroup ? GROUP_COURSE_LOGO : GROUP_FAN_LOGO;
+        NSString *defaultLogo = @"";
+        
+        if ([model.type isEqualToString:@"FAN"]) {
+            defaultLogo = GROUP_FAN_LOGO;
+            [self configApplyViewDisplay:YES];
+        }
+        else if ([model.type isEqualToString:@"ORG"]) {
+            defaultLogo = GROUP_TENANT_LOGO;
+            [self configApplyViewDisplay:NO];
+        }
+        else {
+            defaultLogo = GROUP_COURSE_LOGO;
+            [self configApplyViewDisplay:YES];
+        }
+        
         if ([NSString isEmptyString:model.img]) {
-            [self.groupImage setImage:[UIImage imageNamed:groupPlaceHolder]];
+            [self.groupImage setImage:[UIImage imageNamed:defaultLogo]];
         }
         else {
-            [self.groupImage sd_setImageWithURL:[NSURL URLWithString:[model.img getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:groupPlaceHolder]];
+            [self.groupImage sd_setImageWithURL:[NSURL URLWithString:[model.img getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:defaultLogo]];
         }
         
         self.groupName.text = [NSString returnNoNullStringWithString:model.name];
@@ -165,23 +207,44 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     [self.memberView removeAllSubViews];
     CGFloat width = kScreenWidth / 5;
     NSInteger count = 0;
-    if (studentArray.count < 5) {
+    NSInteger maxDisplay = 5;
+    if (self.canAddMember) {
+        maxDisplay = 4;
+    }
+    if (studentArray.count < maxDisplay) {
         count = studentArray.count;
     }
     else {
-        count = 5;
+        count = maxDisplay;
     }
     for (NSInteger i = 0; i < count; i++) {
         CGRect frame = CGRectMake(width * i, 0, width, 100);
         GroupMemberModel *model = [studentArray objectAtIndex:i];
         MemberView *view = [[MemberView alloc] initWithFrame:frame];
 
-        [view configMemberWithUrl:model.avatar name:model.nickname targetId:model.imUserId roleType:model.roleType callback:^(NSString *targetId) {
-
+        [view configMemberWithUrl:model.avatar name:model.nickname targetId:model.imUserId isOwner:model.isAdmin callback:^(NSString *targetId) {
+                    
         }];
         [self.memberView addSubview:view];
     }
     
+    // 添加按钮
+    if (self.canAddMember) {
+        CGRect frame = CGRectMake(width * count, 0, width, 100);
+        MemberView *view = [[MemberView alloc] initWithFrame:frame];
+        MJWeakSelf;
+        [view configMemberWithNativeImage:@"group_memberAdd" name:@"添加" callback:^(NSString *targetId) {
+            [weakSelf addMember];
+        }];
+        [self.memberView addSubview:view];
+    }
+    
+}
+
+- (void)addMember {
+    if (self.callback) {
+        self.callback(GROUPSETTING_ADDMENBER);
+    }
 }
 
 

+ 4 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.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="21701" 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="21679"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -414,6 +414,8 @@
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
                 <outlet property="applyCount" destination="hPH-bg-uLo" id="17Q-Ua-2GT"/>
+                <outlet property="applyView" destination="DCz-5K-rHE" id="tLd-wb-qgx"/>
+                <outlet property="applyViewHeight" destination="4Ur-wR-24e" id="mZ5-62-3aA"/>
                 <outlet property="groupImage" destination="Pgc-8e-F0o" id="cD2-2v-pf4"/>
                 <outlet property="groupMemberDesc" destination="mGj-Ko-LcU" id="oD7-d5-0hD"/>
                 <outlet property="groupName" destination="hDS-dB-bma" id="Rpk-gW-4hb"/>

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Model/FriendListModel.h

@@ -23,6 +23,8 @@
 @property (nonatomic, strong) NSString *imFriendId;
 @property (nonatomic, strong) NSString *roleType;
 
+@property (nonatomic, assign) BOOL isChoose;
+
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;
 - (NSDictionary *)dictionaryRepresentation;

+ 54 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Model/Tenant/TenantStuModel.h

@@ -0,0 +1,54 @@
+//
+//  TenantStuModel.h
+//
+//  Created by Steven  on 2023/9/14
+//  Copyright (c) 2023 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface TenantStuModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *tenantName;
+@property (nonatomic, assign) double sendActiveCodeNum;
+@property (nonatomic, strong) NSString *birthdate;
+@property (nonatomic, strong) NSString *idCardNo;
+@property (nonatomic, strong) NSString *userId;
+@property (nonatomic, assign) double tenantId;
+@property (nonatomic, assign) double memberRankSettingId;
+@property (nonatomic, assign) double hideFlag;
+@property (nonatomic, strong) NSString *delFlag;
+@property (nonatomic, strong) NSString *membershipEndTime;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *isBank;
+@property (nonatomic, strong) NSString *realName;
+@property (nonatomic, strong) NSString *userStatus;
+@property (nonatomic, strong) NSString *username;
+@property (nonatomic, strong) NSString *subjectId;
+@property (nonatomic, strong) NSString *avatar;
+@property (nonatomic, assign) double isVip;
+@property (nonatomic, assign) double evaluateTime;
+@property (nonatomic, strong) NSString *cloudStudyUseLastDay;
+@property (nonatomic, assign) double cloudStudySequenceDays;
+@property (nonatomic, assign) double gender;
+@property (nonatomic, strong) NSString *userType;
+@property (nonatomic, strong) NSString *imToken;
+@property (nonatomic, assign) double age;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, assign) double unionId;
+@property (nonatomic, assign) double trainTime;
+@property (nonatomic, strong) NSString *subjectName;
+@property (nonatomic, strong) NSString *phone;
+@property (nonatomic, assign) double isReal;
+@property (nonatomic, assign) double lockFlag;
+@property (nonatomic, strong) NSString *membershipStartTime;
+
+@property (nonatomic, assign) BOOL isChoose;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 323 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Model/Tenant/TenantStuModel.m

@@ -0,0 +1,323 @@
+//
+//  TenantStuModel.m
+//
+//  Created by Steven  on 2023/9/14
+//  Copyright (c) 2023 __MyCompanyName__. All rights reserved.
+//
+
+#import "TenantStuModel.h"
+
+
+NSString *const kTenantStuModelTenantName = @"tenantName";
+NSString *const kTenantStuModelSendActiveCodeNum = @"sendActiveCodeNum";
+NSString *const kTenantStuModelBirthdate = @"birthdate";
+NSString *const kTenantStuModelIdCardNo = @"idCardNo";
+NSString *const kTenantStuModelUserId = @"userId";
+NSString *const kTenantStuModelTenantId = @"tenantId";
+NSString *const kTenantStuModelMemberRankSettingId = @"memberRankSettingId";
+NSString *const kTenantStuModelHideFlag = @"hideFlag";
+NSString *const kTenantStuModelDelFlag = @"delFlag";
+NSString *const kTenantStuModelMembershipEndTime = @"membershipEndTime";
+NSString *const kTenantStuModelUpdateTime = @"updateTime";
+NSString *const kTenantStuModelIsBank = @"isBank";
+NSString *const kTenantStuModelRealName = @"realName";
+NSString *const kTenantStuModelUserStatus = @"userStatus";
+NSString *const kTenantStuModelUsername = @"username";
+NSString *const kTenantStuModelSubjectId = @"subjectId";
+NSString *const kTenantStuModelAvatar = @"avatar";
+NSString *const kTenantStuModelIsVip = @"isVip";
+NSString *const kTenantStuModelEvaluateTime = @"evaluateTime";
+NSString *const kTenantStuModelCloudStudyUseLastDay = @"cloudStudyUseLastDay";
+NSString *const kTenantStuModelCloudStudySequenceDays = @"cloudStudySequenceDays";
+NSString *const kTenantStuModelGender = @"gender";
+NSString *const kTenantStuModelUserType = @"userType";
+NSString *const kTenantStuModelImToken = @"imToken";
+NSString *const kTenantStuModelAge = @"age";
+NSString *const kTenantStuModelCreateTime = @"createTime";
+NSString *const kTenantStuModelUnionId = @"unionId";
+NSString *const kTenantStuModelTrainTime = @"trainTime";
+NSString *const kTenantStuModelSubjectName = @"subjectName";
+NSString *const kTenantStuModelPhone = @"phone";
+NSString *const kTenantStuModelIsReal = @"isReal";
+NSString *const kTenantStuModelLockFlag = @"lockFlag";
+NSString *const kTenantStuModelMembershipStartTime = @"membershipStartTime";
+
+
+@interface TenantStuModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation TenantStuModel
+
+@synthesize tenantName = _tenantName;
+@synthesize sendActiveCodeNum = _sendActiveCodeNum;
+@synthesize birthdate = _birthdate;
+@synthesize idCardNo = _idCardNo;
+@synthesize userId = _userId;
+@synthesize tenantId = _tenantId;
+@synthesize memberRankSettingId = _memberRankSettingId;
+@synthesize hideFlag = _hideFlag;
+@synthesize delFlag = _delFlag;
+@synthesize membershipEndTime = _membershipEndTime;
+@synthesize updateTime = _updateTime;
+@synthesize isBank = _isBank;
+@synthesize realName = _realName;
+@synthesize userStatus = _userStatus;
+@synthesize username = _username;
+@synthesize subjectId = _subjectId;
+@synthesize avatar = _avatar;
+@synthesize isVip = _isVip;
+@synthesize evaluateTime = _evaluateTime;
+@synthesize cloudStudyUseLastDay = _cloudStudyUseLastDay;
+@synthesize cloudStudySequenceDays = _cloudStudySequenceDays;
+@synthesize gender = _gender;
+@synthesize userType = _userType;
+@synthesize imToken = _imToken;
+@synthesize age = _age;
+@synthesize createTime = _createTime;
+@synthesize unionId = _unionId;
+@synthesize trainTime = _trainTime;
+@synthesize subjectName = _subjectName;
+@synthesize phone = _phone;
+@synthesize isReal = _isReal;
+@synthesize lockFlag = _lockFlag;
+@synthesize membershipStartTime = _membershipStartTime;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.tenantName = [self objectOrNilForKey:kTenantStuModelTenantName fromDictionary:dict];
+            self.sendActiveCodeNum = [[self objectOrNilForKey:kTenantStuModelSendActiveCodeNum fromDictionary:dict] doubleValue];
+            self.birthdate = [self objectOrNilForKey:kTenantStuModelBirthdate fromDictionary:dict];
+            self.idCardNo = [self objectOrNilForKey:kTenantStuModelIdCardNo fromDictionary:dict];
+            self.userId = [self objectOrNilForKey:kTenantStuModelUserId fromDictionary:dict];
+            self.tenantId = [[self objectOrNilForKey:kTenantStuModelTenantId fromDictionary:dict] doubleValue];
+            self.memberRankSettingId = [[self objectOrNilForKey:kTenantStuModelMemberRankSettingId fromDictionary:dict] doubleValue];
+            self.hideFlag = [[self objectOrNilForKey:kTenantStuModelHideFlag fromDictionary:dict] doubleValue];
+            self.delFlag = [self objectOrNilForKey:kTenantStuModelDelFlag fromDictionary:dict];
+            self.membershipEndTime = [self objectOrNilForKey:kTenantStuModelMembershipEndTime fromDictionary:dict];
+            self.updateTime = [self objectOrNilForKey:kTenantStuModelUpdateTime fromDictionary:dict];
+            self.isBank = [self objectOrNilForKey:kTenantStuModelIsBank fromDictionary:dict];
+            self.realName = [self objectOrNilForKey:kTenantStuModelRealName fromDictionary:dict];
+            self.userStatus = [self objectOrNilForKey:kTenantStuModelUserStatus fromDictionary:dict];
+            self.username = [self objectOrNilForKey:kTenantStuModelUsername fromDictionary:dict];
+            self.subjectId = [self objectOrNilForKey:kTenantStuModelSubjectId fromDictionary:dict];
+            self.avatar = [self objectOrNilForKey:kTenantStuModelAvatar fromDictionary:dict];
+            self.isVip = [[self objectOrNilForKey:kTenantStuModelIsVip fromDictionary:dict] doubleValue];
+            self.evaluateTime = [[self objectOrNilForKey:kTenantStuModelEvaluateTime fromDictionary:dict] doubleValue];
+            self.cloudStudyUseLastDay = [self objectOrNilForKey:kTenantStuModelCloudStudyUseLastDay fromDictionary:dict];
+            self.cloudStudySequenceDays = [[self objectOrNilForKey:kTenantStuModelCloudStudySequenceDays fromDictionary:dict] doubleValue];
+            self.gender = [[self objectOrNilForKey:kTenantStuModelGender fromDictionary:dict] doubleValue];
+            self.userType = [self objectOrNilForKey:kTenantStuModelUserType fromDictionary:dict];
+            self.imToken = [self objectOrNilForKey:kTenantStuModelImToken fromDictionary:dict];
+            self.age = [[self objectOrNilForKey:kTenantStuModelAge fromDictionary:dict] doubleValue];
+            self.createTime = [self objectOrNilForKey:kTenantStuModelCreateTime fromDictionary:dict];
+            self.unionId = [[self objectOrNilForKey:kTenantStuModelUnionId fromDictionary:dict] doubleValue];
+            self.trainTime = [[self objectOrNilForKey:kTenantStuModelTrainTime fromDictionary:dict] doubleValue];
+            self.subjectName = [self objectOrNilForKey:kTenantStuModelSubjectName fromDictionary:dict];
+            self.phone = [self objectOrNilForKey:kTenantStuModelPhone fromDictionary:dict];
+            self.isReal = [[self objectOrNilForKey:kTenantStuModelIsReal fromDictionary:dict] doubleValue];
+            self.lockFlag = [[self objectOrNilForKey:kTenantStuModelLockFlag fromDictionary:dict] doubleValue];
+            self.membershipStartTime = [self objectOrNilForKey:kTenantStuModelMembershipStartTime fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.tenantName forKey:kTenantStuModelTenantName];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.sendActiveCodeNum] forKey:kTenantStuModelSendActiveCodeNum];
+    [mutableDict setValue:self.birthdate forKey:kTenantStuModelBirthdate];
+    [mutableDict setValue:self.idCardNo forKey:kTenantStuModelIdCardNo];
+    [mutableDict setValue:self.userId forKey:kTenantStuModelUserId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.tenantId] forKey:kTenantStuModelTenantId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.memberRankSettingId] forKey:kTenantStuModelMemberRankSettingId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.hideFlag] forKey:kTenantStuModelHideFlag];
+    [mutableDict setValue:self.delFlag forKey:kTenantStuModelDelFlag];
+    [mutableDict setValue:self.membershipEndTime forKey:kTenantStuModelMembershipEndTime];
+    [mutableDict setValue:self.updateTime forKey:kTenantStuModelUpdateTime];
+    [mutableDict setValue:self.isBank forKey:kTenantStuModelIsBank];
+    [mutableDict setValue:self.realName forKey:kTenantStuModelRealName];
+    [mutableDict setValue:self.userStatus forKey:kTenantStuModelUserStatus];
+    [mutableDict setValue:self.username forKey:kTenantStuModelUsername];
+    [mutableDict setValue:self.subjectId forKey:kTenantStuModelSubjectId];
+    [mutableDict setValue:self.avatar forKey:kTenantStuModelAvatar];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.isVip] forKey:kTenantStuModelIsVip];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.evaluateTime] forKey:kTenantStuModelEvaluateTime];
+    [mutableDict setValue:self.cloudStudyUseLastDay forKey:kTenantStuModelCloudStudyUseLastDay];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.cloudStudySequenceDays] forKey:kTenantStuModelCloudStudySequenceDays];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.gender] forKey:kTenantStuModelGender];
+    [mutableDict setValue:self.userType forKey:kTenantStuModelUserType];
+    [mutableDict setValue:self.imToken forKey:kTenantStuModelImToken];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.age] forKey:kTenantStuModelAge];
+    [mutableDict setValue:self.createTime forKey:kTenantStuModelCreateTime];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.unionId] forKey:kTenantStuModelUnionId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.trainTime] forKey:kTenantStuModelTrainTime];
+    [mutableDict setValue:self.subjectName forKey:kTenantStuModelSubjectName];
+    [mutableDict setValue:self.phone forKey:kTenantStuModelPhone];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.isReal] forKey:kTenantStuModelIsReal];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.lockFlag] forKey:kTenantStuModelLockFlag];
+    [mutableDict setValue:self.membershipStartTime forKey:kTenantStuModelMembershipStartTime];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.tenantName = [aDecoder decodeObjectForKey:kTenantStuModelTenantName];
+    self.sendActiveCodeNum = [aDecoder decodeDoubleForKey:kTenantStuModelSendActiveCodeNum];
+    self.birthdate = [aDecoder decodeObjectForKey:kTenantStuModelBirthdate];
+    self.idCardNo = [aDecoder decodeObjectForKey:kTenantStuModelIdCardNo];
+    self.userId = [aDecoder decodeObjectForKey:kTenantStuModelUserId];
+    self.tenantId = [aDecoder decodeDoubleForKey:kTenantStuModelTenantId];
+    self.memberRankSettingId = [aDecoder decodeDoubleForKey:kTenantStuModelMemberRankSettingId];
+    self.hideFlag = [aDecoder decodeDoubleForKey:kTenantStuModelHideFlag];
+    self.delFlag = [aDecoder decodeObjectForKey:kTenantStuModelDelFlag];
+    self.membershipEndTime = [aDecoder decodeObjectForKey:kTenantStuModelMembershipEndTime];
+    self.updateTime = [aDecoder decodeObjectForKey:kTenantStuModelUpdateTime];
+    self.isBank = [aDecoder decodeObjectForKey:kTenantStuModelIsBank];
+    self.realName = [aDecoder decodeObjectForKey:kTenantStuModelRealName];
+    self.userStatus = [aDecoder decodeObjectForKey:kTenantStuModelUserStatus];
+    self.username = [aDecoder decodeObjectForKey:kTenantStuModelUsername];
+    self.subjectId = [aDecoder decodeObjectForKey:kTenantStuModelSubjectId];
+    self.avatar = [aDecoder decodeObjectForKey:kTenantStuModelAvatar];
+    self.isVip = [aDecoder decodeDoubleForKey:kTenantStuModelIsVip];
+    self.evaluateTime = [aDecoder decodeDoubleForKey:kTenantStuModelEvaluateTime];
+    self.cloudStudyUseLastDay = [aDecoder decodeObjectForKey:kTenantStuModelCloudStudyUseLastDay];
+    self.cloudStudySequenceDays = [aDecoder decodeDoubleForKey:kTenantStuModelCloudStudySequenceDays];
+    self.gender = [aDecoder decodeDoubleForKey:kTenantStuModelGender];
+    self.userType = [aDecoder decodeObjectForKey:kTenantStuModelUserType];
+    self.imToken = [aDecoder decodeObjectForKey:kTenantStuModelImToken];
+    self.age = [aDecoder decodeDoubleForKey:kTenantStuModelAge];
+    self.createTime = [aDecoder decodeObjectForKey:kTenantStuModelCreateTime];
+    self.unionId = [aDecoder decodeDoubleForKey:kTenantStuModelUnionId];
+    self.trainTime = [aDecoder decodeDoubleForKey:kTenantStuModelTrainTime];
+    self.subjectName = [aDecoder decodeObjectForKey:kTenantStuModelSubjectName];
+    self.phone = [aDecoder decodeObjectForKey:kTenantStuModelPhone];
+    self.isReal = [aDecoder decodeDoubleForKey:kTenantStuModelIsReal];
+    self.lockFlag = [aDecoder decodeDoubleForKey:kTenantStuModelLockFlag];
+    self.membershipStartTime = [aDecoder decodeObjectForKey:kTenantStuModelMembershipStartTime];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_tenantName forKey:kTenantStuModelTenantName];
+    [aCoder encodeDouble:_sendActiveCodeNum forKey:kTenantStuModelSendActiveCodeNum];
+    [aCoder encodeObject:_birthdate forKey:kTenantStuModelBirthdate];
+    [aCoder encodeObject:_idCardNo forKey:kTenantStuModelIdCardNo];
+    [aCoder encodeObject:_userId forKey:kTenantStuModelUserId];
+    [aCoder encodeDouble:_tenantId forKey:kTenantStuModelTenantId];
+    [aCoder encodeDouble:_memberRankSettingId forKey:kTenantStuModelMemberRankSettingId];
+    [aCoder encodeDouble:_hideFlag forKey:kTenantStuModelHideFlag];
+    [aCoder encodeObject:_delFlag forKey:kTenantStuModelDelFlag];
+    [aCoder encodeObject:_membershipEndTime forKey:kTenantStuModelMembershipEndTime];
+    [aCoder encodeObject:_updateTime forKey:kTenantStuModelUpdateTime];
+    [aCoder encodeObject:_isBank forKey:kTenantStuModelIsBank];
+    [aCoder encodeObject:_realName forKey:kTenantStuModelRealName];
+    [aCoder encodeObject:_userStatus forKey:kTenantStuModelUserStatus];
+    [aCoder encodeObject:_username forKey:kTenantStuModelUsername];
+    [aCoder encodeObject:_subjectId forKey:kTenantStuModelSubjectId];
+    [aCoder encodeObject:_avatar forKey:kTenantStuModelAvatar];
+    [aCoder encodeDouble:_isVip forKey:kTenantStuModelIsVip];
+    [aCoder encodeDouble:_evaluateTime forKey:kTenantStuModelEvaluateTime];
+    [aCoder encodeObject:_cloudStudyUseLastDay forKey:kTenantStuModelCloudStudyUseLastDay];
+    [aCoder encodeDouble:_cloudStudySequenceDays forKey:kTenantStuModelCloudStudySequenceDays];
+    [aCoder encodeDouble:_gender forKey:kTenantStuModelGender];
+    [aCoder encodeObject:_userType forKey:kTenantStuModelUserType];
+    [aCoder encodeObject:_imToken forKey:kTenantStuModelImToken];
+    [aCoder encodeDouble:_age forKey:kTenantStuModelAge];
+    [aCoder encodeObject:_createTime forKey:kTenantStuModelCreateTime];
+    [aCoder encodeDouble:_unionId forKey:kTenantStuModelUnionId];
+    [aCoder encodeDouble:_trainTime forKey:kTenantStuModelTrainTime];
+    [aCoder encodeObject:_subjectName forKey:kTenantStuModelSubjectName];
+    [aCoder encodeObject:_phone forKey:kTenantStuModelPhone];
+    [aCoder encodeDouble:_isReal forKey:kTenantStuModelIsReal];
+    [aCoder encodeDouble:_lockFlag forKey:kTenantStuModelLockFlag];
+    [aCoder encodeObject:_membershipStartTime forKey:kTenantStuModelMembershipStartTime];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    TenantStuModel *copy = [[TenantStuModel alloc] init];
+    
+    if (copy) {
+
+        copy.tenantName = [self.tenantName copyWithZone:zone];
+        copy.sendActiveCodeNum = self.sendActiveCodeNum;
+        copy.birthdate = [self.birthdate copyWithZone:zone];
+        copy.idCardNo = [self.idCardNo copyWithZone:zone];
+        copy.userId = [self.userId copyWithZone:zone];
+        copy.tenantId = self.tenantId;
+        copy.memberRankSettingId = self.memberRankSettingId;
+        copy.hideFlag = self.hideFlag;
+        copy.delFlag = [self.delFlag copyWithZone:zone];
+        copy.membershipEndTime = [self.membershipEndTime copyWithZone:zone];
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.isBank = [self.isBank copyWithZone:zone];
+        copy.realName = [self.realName copyWithZone:zone];
+        copy.userStatus = [self.userStatus copyWithZone:zone];
+        copy.username = [self.username copyWithZone:zone];
+        copy.subjectId = [self.subjectId copyWithZone:zone];
+        copy.avatar = [self.avatar copyWithZone:zone];
+        copy.isVip = self.isVip;
+        copy.evaluateTime = self.evaluateTime;
+        copy.cloudStudyUseLastDay = [self.cloudStudyUseLastDay copyWithZone:zone];
+        copy.cloudStudySequenceDays = self.cloudStudySequenceDays;
+        copy.gender = self.gender;
+        copy.userType = [self.userType copyWithZone:zone];
+        copy.imToken = [self.imToken copyWithZone:zone];
+        copy.age = self.age;
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.unionId = self.unionId;
+        copy.trainTime = self.trainTime;
+        copy.subjectName = [self.subjectName copyWithZone:zone];
+        copy.phone = [self.phone copyWithZone:zone];
+        copy.isReal = self.isReal;
+        copy.lockFlag = self.lockFlag;
+        copy.membershipStartTime = [self.membershipStartTime copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/ChatAddressBodyView.m

@@ -431,14 +431,14 @@
 }
 
 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
-    if (self.selectIndex == 1) {
+    if (self.selectIndex == 0) {
         return CGFLOAT_MIN;
     }
     return 30;
 }
 
 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
-    if (self.selectIndex == 1) {
+    if (self.selectIndex == 0) {
         return [UIView new];
     }
     UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 30)];

+ 11 - 10
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/ContractListCell.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<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">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" 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="21207"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -45,22 +45,23 @@
                             <constraint firstAttribute="height" constant="1" id="pLM-MY-tjk"/>
                         </constraints>
                     </view>
-                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="chat_talentList" translatesAutoresizingMaskIntoConstraints="NO" id="Bwf-x7-UK4">
-                        <rect key="frame" x="14" y="50.5" width="44" height="14"/>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="group_role_teacher" translatesAutoresizingMaskIntoConstraints="NO" id="gE4-tY-dGd">
+                        <rect key="frame" x="121" y="32.5" width="41" height="20"/>
                         <constraints>
-                            <constraint firstAttribute="width" constant="44" id="Obq-lp-4a7"/>
-                            <constraint firstAttribute="height" constant="14" id="hrG-lt-tyy"/>
+                            <constraint firstAttribute="height" constant="20" id="1XY-Ml-PVI"/>
+                            <constraint firstAttribute="width" constant="41" id="ZOO-Kl-p8S"/>
                         </constraints>
                     </imageView>
                 </subviews>
                 <constraints>
                     <constraint firstItem="8fl-pa-IHx" firstAttribute="centerY" secondItem="vI1-v5-uMm" secondAttribute="centerY" id="9PL-c3-9J3"/>
                     <constraint firstItem="ZD7-0R-OoK" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="72" id="DPF-fF-mtx"/>
+                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="gE4-tY-dGd" secondAttribute="trailing" constant="20" id="H6V-ug-KuF"/>
+                    <constraint firstItem="gE4-tY-dGd" firstAttribute="centerY" secondItem="8fl-pa-IHx" secondAttribute="centerY" id="L3q-sA-1sR"/>
                     <constraint firstAttribute="bottom" secondItem="ZD7-0R-OoK" secondAttribute="bottom" id="Qy0-N6-dQU"/>
-                    <constraint firstItem="Bwf-x7-UK4" firstAttribute="centerX" secondItem="vI1-v5-uMm" secondAttribute="centerX" id="RO3-iq-GLY"/>
                     <constraint firstItem="8fl-pa-IHx" firstAttribute="leading" secondItem="vI1-v5-uMm" secondAttribute="trailing" constant="11" id="fdz-o1-pUv"/>
                     <constraint firstAttribute="trailing" secondItem="ZD7-0R-OoK" secondAttribute="trailing" id="qkd-cr-TeW"/>
-                    <constraint firstItem="Bwf-x7-UK4" firstAttribute="bottom" secondItem="vI1-v5-uMm" secondAttribute="bottom" id="sIv-jy-rKN"/>
+                    <constraint firstItem="gE4-tY-dGd" firstAttribute="leading" secondItem="8fl-pa-IHx" secondAttribute="trailing" constant="3" id="v9q-dL-wZX"/>
                     <constraint firstItem="vI1-v5-uMm" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="vgm-ZS-Nds"/>
                     <constraint firstItem="vI1-v5-uMm" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="yHs-ea-3Xd"/>
                 </constraints>
@@ -70,13 +71,13 @@
             <connections>
                 <outlet property="friendAvatar" destination="vI1-v5-uMm" id="Nob-dw-1A8"/>
                 <outlet property="friendName" destination="8fl-pa-IHx" id="o2J-m8-ozl"/>
-                <outlet property="roleTypeView" destination="Bwf-x7-UK4" id="34w-ot-hZ6"/>
+                <outlet property="roleTypeView" destination="gE4-tY-dGd" id="a0F-h7-Cl5"/>
             </connections>
             <point key="canvasLocation" x="178.2608695652174" y="95.424107142857139"/>
         </tableViewCell>
     </objects>
     <resources>
         <image name="chat_personLogo" width="44" height="44"/>
-        <image name="chat_talentList" width="44" height="14"/>
+        <image name="group_role_teacher" width="41" height="20"/>
     </resources>
 </document>

+ 4 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupListViewCell.m

@@ -37,6 +37,10 @@
             defaultLogo = GROUP_FAN_LOGO;
             typeLogo = @"group_fans";
         }
+        else if ([model.type isEqualToString:@"ORG"]) {
+            defaultLogo = GROUP_TENANT_LOGO;
+            typeLogo = @"group_tenant";
+        }
         else {
             defaultLogo = GROUP_COURSE_LOGO;
             typeLogo = @"group_course";

+ 3 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupListViewCell.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" 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="19519"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -58,7 +58,7 @@
                     <constraint firstItem="l1C-Be-pVZ" firstAttribute="centerY" secondItem="4TI-7d-rec" secondAttribute="centerY" id="RHB-Jo-Ft6"/>
                     <constraint firstItem="4TI-7d-rec" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="WEd-Tk-jea"/>
                     <constraint firstItem="4TI-7d-rec" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="oeZ-4h-wV3"/>
-                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="zBG-sk-Qhs" secondAttribute="trailing" constant="10" id="p7v-zE-54A"/>
+                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="zBG-sk-Qhs" secondAttribute="trailing" constant="20" id="p7v-zE-54A"/>
                 </constraints>
             </tableViewCellContentView>
             <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>

+ 20 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupOwnerTagView.h

@@ -0,0 +1,20 @@
+//
+//  GroupOwnerTagView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2023/9/15.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GroupOwnerTagView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)configBgColor:(UIColor *)color;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 29 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupOwnerTagView.m

@@ -0,0 +1,29 @@
+//
+//  GroupOwnerTagView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2023/9/15.
+//
+
+#import "GroupOwnerTagView.h"
+
+@implementation GroupOwnerTagView
+
+
++ (instancetype)shareInstance {
+    GroupOwnerTagView *view = [[[NSBundle mainBundle] loadNibNamed:@"GroupOwnerTagView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)configBgColor:(UIColor *)color {
+    self.backgroundColor = color;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 39 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/GroupOwnerTagView.xib

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="GroupOwnerTagView">
+            <rect key="frame" x="0.0" y="0.0" width="40" height="15"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="群主" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yoi-DH-Nlx">
+                    <rect key="frame" x="8.6666666666666643" y="0.66666666666666696" width="23" height="14"/>
+                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
+                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" red="1" green="0.30196078431372547" blue="0.44705882352941173" alpha="1" colorSpace="calibratedRGB"/>
+            <constraints>
+                <constraint firstItem="Yoi-DH-Nlx" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="8H6-gz-IsM"/>
+                <constraint firstItem="Yoi-DH-Nlx" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="RoA-1a-Bac"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <userDefinedRuntimeAttributes>
+                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                    <real key="value" value="7.5"/>
+                </userDefinedRuntimeAttribute>
+            </userDefinedRuntimeAttributes>
+            <point key="canvasLocation" x="-182.44274809160305" y="-71.83098591549296"/>
+        </view>
+    </objects>
+</document>

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenangGroupCreateBottomView.h

@@ -0,0 +1,26 @@
+//
+//  TenangGroupCreateBottomView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import <UIKit/UIKit.h>
+
+
+typedef void(^TenantGroupCreateCallback)(void);
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TenangGroupCreateBottomView : UIView
+
+@property (weak, nonatomic) IBOutlet UIButton *sureButton;
+
++ (instancetype)shareInstance;
+
+- (void)createCallback:(TenantGroupCreateCallback)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 51 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenangGroupCreateBottomView.m

@@ -0,0 +1,51 @@
+//
+//  TenangGroupCreateBottomView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import "TenangGroupCreateBottomView.h"
+
+@interface TenangGroupCreateBottomView ()
+
+@property (nonatomic, copy) TenantGroupCreateCallback callback;
+
+@end
+
+@implementation TenangGroupCreateBottomView
+
++ (instancetype)shareInstance {
+    TenangGroupCreateBottomView *view = [[[NSBundle mainBundle] loadNibNamed:@"TenangGroupCreateBottomView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)createCallback:(TenantGroupCreateCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+- (IBAction)createAction:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
+
++ (CGFloat)getViewHeight {
+    if (IS_iPhoneX) {
+        return 44 + 30 + iPhoneXSafeBottomMargin;
+    }
+    else {
+        return 44 + 30 + 20;
+    }
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 50 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenangGroupCreateBottomView.xib

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="TenangGroupCreateBottomView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="109"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="c0W-Jk-JZA">
+                    <rect key="frame" x="25" y="30" width="343" height="44"/>
+                    <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="yqU-vP-I0b"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" title="确认创建"/>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="22"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <action selector="createAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="xfi-gO-gti"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="c0W-Jk-JZA" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="25" id="GLh-ON-wxx"/>
+                <constraint firstAttribute="trailing" secondItem="c0W-Jk-JZA" secondAttribute="trailing" constant="25" id="Rth-AB-vpX"/>
+                <constraint firstItem="c0W-Jk-JZA" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="qZz-Hm-6ua"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="sureButton" destination="c0W-Jk-JZA" id="BSn-Tf-Iyd"/>
+            </connections>
+            <point key="canvasLocation" x="172" y="-226"/>
+        </view>
+    </objects>
+</document>

+ 36 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateGroupBodyView.h

@@ -0,0 +1,36 @@
+//
+//  TenantCreateGroupBodyView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, GROUPADDTYPE) {
+    GROUPADDTYPE_FANS,
+    GROUPADDTYPE_TENANT,
+    GROUPADDTYPE_ADDMEMBER,
+};
+
+typedef void(^AddGroupMemberCallback)(GROUPADDTYPE type);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TenantCreateGroupBodyView : UIView
+
+@property (nonatomic, assign) BOOL isFansGroup;
+
+@property (weak, nonatomic) IBOutlet UITextField *nameField;
+
+@property (weak, nonatomic) IBOutlet UITextView *inputView;
+
++ (instancetype)shareInstance;
+
+- (void)refreshMemberView:(NSMutableArray *)array;
+
+- (void)addGroupMember:(AddGroupMemberCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 180 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateGroupBodyView.m

@@ -0,0 +1,180 @@
+//
+//  TenantCreateGroupBodyView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import "TenantCreateGroupBodyView.h"
+#import "TenantStuModel.h"
+#import "TenantCreateStuView.h"
+
+@interface TenantCreateGroupBodyView ()<UITextFieldDelegate, UITextViewDelegate>
+
+@property (nonatomic, copy) AddGroupMemberCallback callback;
+
+@property (weak, nonatomic) IBOutlet UIView *memberView;
+
+@property (weak, nonatomic) IBOutlet UIImageView *fansChooseImage;
+
+@property (weak, nonatomic) IBOutlet UIImageView *tenantChooseImage;
+
+@property (weak, nonatomic) IBOutlet UIView *memberDisplayView;
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *memberDisplayHeigh;
+
+@property (weak, nonatomic) IBOutlet UILabel *tipsLabel;
+
+@property (nonatomic, strong) UIScrollView *scrollView;
+
+@end
+
+@implementation TenantCreateGroupBodyView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    self.isFansGroup = YES;
+    self.nameField.delegate = self;
+    self.inputView.delegate = self;
+    [self.memberDisplayView addSubview:self.scrollView];
+    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.memberDisplayView);
+    }];
+}
+
++ (instancetype)shareInstance {
+    TenantCreateGroupBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"TenantCreateGroupBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)refreshMemberView:(NSMutableArray *)array {
+    if (array.count > 0) {
+        self.memberDisplayHeigh.constant = 94.0f;
+    }
+    else {
+        self.memberDisplayHeigh.constant = 0;
+    }
+    [self.scrollView removeAllSubViews];
+    CGFloat width = (KPortraitWidth - 28) / 5.0f;
+    CGFloat xPosition = 0.0f;
+    for (NSInteger index = 0; index < array.count; index++) {
+        xPosition = index * width;
+        CGRect frame = CGRectMake(xPosition, 0, width, 81);
+        TenantCreateStuView *view = [TenantCreateStuView shareInstance];
+        view.frame = frame;
+        TenantStuModel *model = array[index];
+        [view configWithSource:model];
+        [self.scrollView addSubview:view];
+    }
+    self.scrollView.contentSize = CGSizeMake(width * array.count, 94.0f);
+
+}
+
+- (void)addGroupMember:(AddGroupMemberCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)addMemberAction:(id)sender {
+    if (self.callback) {
+        self.callback(GROUPADDTYPE_ADDMEMBER);
+    }
+}
+
+- (IBAction)chooseFans:(id)sender {
+    self.isFansGroup = YES;
+}
+
+- (IBAction)chooseTenant:(id)sender {
+    self.isFansGroup = NO;
+}
+
+
+
+- (void)setIsFansGroup:(BOOL)isFansGroup {
+    _isFansGroup = isFansGroup;
+    if (isFansGroup) {
+        [self.fansChooseImage setImage:[UIImage imageNamed:@"tenant_group_choose"]];
+        [self.tenantChooseImage setImage:[UIImage imageNamed:@"tenant_group_unchoose"]];
+    }
+    else {
+        [self.fansChooseImage setImage:[UIImage imageNamed:@"tenant_group_unchoose"]];
+        [self.tenantChooseImage setImage:[UIImage imageNamed:@"tenant_group_choose"]];
+    }
+    if (isFansGroup) {
+        self.memberView.hidden = YES;
+    }
+    else {
+        self.memberView.hidden = NO;
+    }
+    GROUPADDTYPE type = isFansGroup ? GROUPADDTYPE_FANS : GROUPADDTYPE_TENANT;
+    if (self.callback) {
+        self.callback(type);
+    }
+}
+
+#pragma mark   ---- delegate
+
+- (void)textViewDidBeginEditing:(UITextView *)textView {
+    self.tipsLabel.hidden = YES;
+}
+
+- (void)textViewDidEndEditing:(UITextView *)textView {
+    if ([NSString isEmptyString:textView.text]) {
+        self.tipsLabel.hidden = NO;
+    }
+}
+
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
+
+    if ([text isEqualToString:@""]) {
+        return YES;
+    }
+    
+    // 输入控制
+    NSString *newString = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    if (newString.length > 500) {
+        return NO;
+    }
+    return YES;
+}
+
+
+- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
+    [self endEditing:YES];
+    return YES;
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    [self endEditing:YES];
+}
+
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+    if ([string isEqualToString:@"\n"]) {
+        [self endEditing:YES];
+        return YES;
+    }
+    // 输入控制
+    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
+    if (newString.length > 50) {
+        return NO;
+    }
+    return YES;
+}
+
+- (UIScrollView *)scrollView {
+    if (!_scrollView) {
+        _scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero];
+    }
+    return _scrollView;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 340 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateGroupBodyView.xib

@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="TenantCreateGroupBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="575"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="y1d-PT-GgT">
+                    <rect key="frame" x="14" y="12" width="365" height="46"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tenant_group_type" translatesAutoresizingMaskIntoConstraints="NO" id="DBh-Ai-t4Z">
+                            <rect key="frame" x="11" y="12" width="24" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="G9h-NJ-Dbd"/>
+                                <constraint firstAttribute="width" constant="24" id="Ubb-WC-cWB"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="群类型" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MGB-cP-wBE">
+                            <rect key="frame" x="38" y="12" width="52" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="dxc-9e-jjC"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <nil key="textColor"/>
+                            <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="UtG-W9-MMn">
+                            <rect key="frame" x="304" y="14.333333333333334" width="49" height="19.333333333333329"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tenant_group_unchoose" translatesAutoresizingMaskIntoConstraints="NO" id="ebv-yn-gUM">
+                            <rect key="frame" x="277" y="14" width="20" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="MKn-j6-Dpj"/>
+                                <constraint firstAttribute="width" constant="20" id="ehk-8h-2xN"/>
+                            </constraints>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aNB-O5-mbj">
+                            <rect key="frame" x="277" y="0.0" width="76" height="46"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="chooseTenant:" destination="iN0-l3-epB" eventType="touchUpInside" id="Nkh-1z-7th"/>
+                            </connections>
+                        </button>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tenant_group_choose" translatesAutoresizingMaskIntoConstraints="NO" id="JaV-aW-48E">
+                            <rect key="frame" x="189" y="14" width="20" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="20" id="Pdi-6f-oIi"/>
+                                <constraint firstAttribute="height" constant="20" id="j5U-Yf-C9g"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="粉丝群" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Z9-Y8-XPg">
+                            <rect key="frame" x="216" y="14.333333333333334" width="49" height="19.333333333333329"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yuV-Ec-TL9">
+                            <rect key="frame" x="189" y="0.0" width="76" height="46"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="chooseFans:" destination="iN0-l3-epB" eventType="touchUpInside" id="2Yg-1b-I0u"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="yuV-Ec-TL9" firstAttribute="top" secondItem="y1d-PT-GgT" secondAttribute="top" id="1yh-ZX-WsM"/>
+                        <constraint firstItem="ebv-yn-gUM" firstAttribute="leading" secondItem="4Z9-Y8-XPg" secondAttribute="trailing" constant="12" id="7Ee-3U-UsG"/>
+                        <constraint firstItem="MGB-cP-wBE" firstAttribute="leading" secondItem="DBh-Ai-t4Z" secondAttribute="trailing" constant="3" id="87V-nL-Isl"/>
+                        <constraint firstAttribute="height" constant="46" id="A7d-v0-6fS"/>
+                        <constraint firstItem="DBh-Ai-t4Z" firstAttribute="leading" secondItem="y1d-PT-GgT" secondAttribute="leading" constant="11" id="Gr4-Je-mma"/>
+                        <constraint firstItem="ebv-yn-gUM" firstAttribute="leading" secondItem="aNB-O5-mbj" secondAttribute="leading" id="Hfx-O8-h7i"/>
+                        <constraint firstItem="4Z9-Y8-XPg" firstAttribute="trailing" secondItem="yuV-Ec-TL9" secondAttribute="trailing" id="Jrq-xW-yBp"/>
+                        <constraint firstItem="UtG-W9-MMn" firstAttribute="centerY" secondItem="MGB-cP-wBE" secondAttribute="centerY" id="KSP-pB-QqK"/>
+                        <constraint firstAttribute="bottom" secondItem="yuV-Ec-TL9" secondAttribute="bottom" id="Lfc-NV-JOs"/>
+                        <constraint firstItem="4Z9-Y8-XPg" firstAttribute="centerY" secondItem="JaV-aW-48E" secondAttribute="centerY" id="QDn-T3-AwR"/>
+                        <constraint firstAttribute="bottom" secondItem="aNB-O5-mbj" secondAttribute="bottom" id="RDs-65-WfO"/>
+                        <constraint firstItem="4Z9-Y8-XPg" firstAttribute="leading" secondItem="JaV-aW-48E" secondAttribute="trailing" constant="7" id="WLi-2q-QUa"/>
+                        <constraint firstItem="JaV-aW-48E" firstAttribute="leading" secondItem="yuV-Ec-TL9" secondAttribute="leading" id="XIJ-kt-iyC"/>
+                        <constraint firstItem="UtG-W9-MMn" firstAttribute="trailing" secondItem="aNB-O5-mbj" secondAttribute="trailing" id="ZVl-Ox-SQu"/>
+                        <constraint firstItem="UtG-W9-MMn" firstAttribute="centerY" secondItem="4Z9-Y8-XPg" secondAttribute="centerY" id="etc-QC-AK3"/>
+                        <constraint firstItem="UtG-W9-MMn" firstAttribute="leading" secondItem="ebv-yn-gUM" secondAttribute="trailing" constant="7" id="gLl-F8-vTn"/>
+                        <constraint firstAttribute="trailing" secondItem="UtG-W9-MMn" secondAttribute="trailing" constant="12" id="gab-Dz-3pL"/>
+                        <constraint firstItem="UtG-W9-MMn" firstAttribute="centerY" secondItem="ebv-yn-gUM" secondAttribute="centerY" id="gev-bb-UeL"/>
+                        <constraint firstItem="MGB-cP-wBE" firstAttribute="leading" secondItem="DBh-Ai-t4Z" secondAttribute="trailing" constant="3" id="ghZ-Ib-SsO"/>
+                        <constraint firstItem="DBh-Ai-t4Z" firstAttribute="top" secondItem="y1d-PT-GgT" secondAttribute="top" constant="12" id="i4G-OJ-zAJ"/>
+                        <constraint firstItem="MGB-cP-wBE" firstAttribute="centerY" secondItem="DBh-Ai-t4Z" secondAttribute="centerY" id="py5-BZ-5qI"/>
+                        <constraint firstItem="aNB-O5-mbj" firstAttribute="top" secondItem="y1d-PT-GgT" secondAttribute="top" id="zPH-8b-UvU"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="r0j-IU-F4S">
+                    <rect key="frame" x="14" y="70" width="365" height="82"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tenant_group_name" translatesAutoresizingMaskIntoConstraints="NO" id="Oo3-kN-pfg">
+                            <rect key="frame" x="11" y="12" width="24" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="W05-DT-Lgn"/>
+                                <constraint firstAttribute="width" constant="24" id="oKX-7h-Hmo"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="*" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QLf-fv-J5F">
+                            <rect key="frame" x="38" y="12" width="8" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="Ihf-AM-boc"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="1" green="0.30588235294117649" blue="0.10196078431372549" 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="zmJ-ak-Ldb">
+                            <rect key="frame" x="46" y="12" width="52" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="J7d-8N-PL9"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入群聊名称" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="d7N-oz-VmI">
+                            <rect key="frame" x="12" y="36" width="341" height="36"/>
+                            <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <textInputTraits key="textInputTraits"/>
+                        </textField>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="Oo3-kN-pfg" firstAttribute="top" secondItem="r0j-IU-F4S" secondAttribute="top" constant="12" id="05U-I7-bZh"/>
+                        <constraint firstAttribute="trailing" secondItem="d7N-oz-VmI" secondAttribute="trailing" constant="12" id="2Se-k8-NXB"/>
+                        <constraint firstItem="zmJ-ak-Ldb" firstAttribute="centerY" secondItem="QLf-fv-J5F" secondAttribute="centerY" id="Abu-nX-xI5"/>
+                        <constraint firstAttribute="height" constant="82" id="G2W-S8-ZqA"/>
+                        <constraint firstItem="d7N-oz-VmI" firstAttribute="leading" secondItem="r0j-IU-F4S" secondAttribute="leading" constant="12" id="LqS-TQ-OJz"/>
+                        <constraint firstItem="d7N-oz-VmI" firstAttribute="top" secondItem="Oo3-kN-pfg" secondAttribute="bottom" id="WYH-lI-mbR"/>
+                        <constraint firstItem="Oo3-kN-pfg" firstAttribute="leading" secondItem="r0j-IU-F4S" secondAttribute="leading" constant="11" id="bUJ-zJ-p75"/>
+                        <constraint firstAttribute="bottom" secondItem="d7N-oz-VmI" secondAttribute="bottom" constant="10" id="bhL-1S-UIo"/>
+                        <constraint firstItem="QLf-fv-J5F" firstAttribute="leading" secondItem="Oo3-kN-pfg" secondAttribute="trailing" constant="3" id="hv8-Fu-AX0"/>
+                        <constraint firstItem="zmJ-ak-Ldb" firstAttribute="leading" secondItem="QLf-fv-J5F" secondAttribute="trailing" id="t4g-Cw-Eea"/>
+                        <constraint firstItem="QLf-fv-J5F" firstAttribute="centerY" secondItem="Oo3-kN-pfg" secondAttribute="centerY" id="vzT-Oa-zpz"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qiK-0S-KTD">
+                    <rect key="frame" x="14" y="164" width="365" height="191"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tenant_group_desc" translatesAutoresizingMaskIntoConstraints="NO" id="1fg-0Z-kz1">
+                            <rect key="frame" x="11" y="12" width="24" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="CZA-aU-VkE"/>
+                                <constraint firstAttribute="width" constant="24" id="Qd5-Dp-Mop"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="群简介" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xns-O1-dch">
+                            <rect key="frame" x="38" y="12" width="52" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="plX-bN-jXB"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="66O-3Q-wUg">
+                            <rect key="frame" x="0.0" y="36" width="365" height="145"/>
+                            <subviews>
+                                <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qHG-Pf-uhv">
+                                    <rect key="frame" x="10" y="0.0" width="345" height="145"/>
+                                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="calibratedRGB"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <textInputTraits key="textInputTraits" autocapitalizationType="sentences" enablesReturnKeyAutomatically="YES"/>
+                                </textView>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="请输入群简介" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vzi-5a-soz">
+                                    <rect key="frame" x="10" y="9" width="92" height="18"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="vzi-5a-soz" firstAttribute="leading" secondItem="66O-3Q-wUg" secondAttribute="leading" constant="10" id="CpR-Kq-KqT"/>
+                                <constraint firstAttribute="bottom" secondItem="qHG-Pf-uhv" secondAttribute="bottom" id="Inf-9R-MB9"/>
+                                <constraint firstAttribute="trailing" secondItem="qHG-Pf-uhv" secondAttribute="trailing" constant="10" id="TsW-JX-0Wu"/>
+                                <constraint firstItem="vzi-5a-soz" firstAttribute="top" secondItem="66O-3Q-wUg" secondAttribute="top" constant="9" id="awg-6c-DtQ"/>
+                                <constraint firstItem="qHG-Pf-uhv" firstAttribute="leading" secondItem="66O-3Q-wUg" secondAttribute="leading" constant="10" id="fEa-vY-1x6"/>
+                                <constraint firstItem="qHG-Pf-uhv" firstAttribute="top" secondItem="66O-3Q-wUg" secondAttribute="top" id="nUo-ZB-U9p"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="xns-O1-dch" firstAttribute="centerY" secondItem="1fg-0Z-kz1" secondAttribute="centerY" id="3xc-jO-MgR"/>
+                        <constraint firstAttribute="bottom" secondItem="66O-3Q-wUg" secondAttribute="bottom" constant="10" id="8xN-2z-HXG"/>
+                        <constraint firstItem="1fg-0Z-kz1" firstAttribute="top" secondItem="qiK-0S-KTD" secondAttribute="top" constant="12" id="H6O-dc-Wd1"/>
+                        <constraint firstItem="66O-3Q-wUg" firstAttribute="leading" secondItem="qiK-0S-KTD" secondAttribute="leading" id="Ke4-De-AFA"/>
+                        <constraint firstAttribute="trailing" secondItem="66O-3Q-wUg" secondAttribute="trailing" id="Mi6-yM-zWr"/>
+                        <constraint firstItem="xns-O1-dch" firstAttribute="leading" secondItem="1fg-0Z-kz1" secondAttribute="trailing" constant="3" id="kcp-iG-J4l"/>
+                        <constraint firstAttribute="height" constant="191" id="rey-Dj-Zmg"/>
+                        <constraint firstItem="66O-3Q-wUg" firstAttribute="top" secondItem="1fg-0Z-kz1" secondAttribute="bottom" id="tvs-zI-4yD"/>
+                        <constraint firstItem="1fg-0Z-kz1" firstAttribute="leading" secondItem="qiK-0S-KTD" secondAttribute="leading" constant="11" id="uLl-BF-513"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wSX-p7-yee">
+                    <rect key="frame" x="14" y="367" width="365" height="46"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tenant_group_member" translatesAutoresizingMaskIntoConstraints="NO" id="MfD-pe-keA">
+                            <rect key="frame" x="11" y="12" width="24" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="RZQ-yj-C9D"/>
+                                <constraint firstAttribute="width" constant="24" id="cTl-oL-kuA"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="群成员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ws1-dG-bjf">
+                            <rect key="frame" x="38" y="12" width="52" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="Uth-Il-W7t"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <nil key="textColor"/>
+                            <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="dB0-UD-meb">
+                            <rect key="frame" x="303" y="13" width="33" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="eir-TT-blV"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PTe-x7-C8x">
+                            <rect key="frame" x="299" y="0.0" width="66" height="40"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="66" id="upL-Dn-33f"/>
+                                <constraint firstAttribute="height" constant="40" id="xyr-Ow-Fge"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="addMemberAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="qXB-fJ-B8d"/>
+                            </connections>
+                        </button>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8vx-yP-45f">
+                            <rect key="frame" x="0.0" y="46" width="365" height="0.0"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstAttribute="height" id="BWs-hq-qjE"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="ws1-dG-bjf" firstAttribute="centerY" secondItem="MfD-pe-keA" secondAttribute="centerY" id="5KN-EY-4Dn"/>
+                        <constraint firstAttribute="trailing" secondItem="8vx-yP-45f" secondAttribute="trailing" id="5yB-ju-772"/>
+                        <constraint firstItem="MfD-pe-keA" firstAttribute="leading" secondItem="wSX-p7-yee" secondAttribute="leading" constant="11" id="D5f-fa-h69"/>
+                        <constraint firstAttribute="trailing" secondItem="dB0-UD-meb" secondAttribute="trailing" constant="29" id="HBl-us-SRD"/>
+                        <constraint firstAttribute="bottom" secondItem="8vx-yP-45f" secondAttribute="bottom" id="HXt-29-M3k"/>
+                        <constraint firstItem="MfD-pe-keA" firstAttribute="top" secondItem="wSX-p7-yee" secondAttribute="top" constant="12" id="Nlt-x3-eZx"/>
+                        <constraint firstItem="dB0-UD-meb" firstAttribute="centerY" secondItem="ws1-dG-bjf" secondAttribute="centerY" id="RNe-aV-sF2"/>
+                        <constraint firstAttribute="trailing" secondItem="PTe-x7-C8x" secondAttribute="trailing" id="TIn-qE-Aej"/>
+                        <constraint firstItem="8vx-yP-45f" firstAttribute="leading" secondItem="wSX-p7-yee" secondAttribute="leading" id="bUn-Sw-M6l"/>
+                        <constraint firstItem="8vx-yP-45f" firstAttribute="top" secondItem="MfD-pe-keA" secondAttribute="bottom" constant="10" id="lRX-o8-QFp"/>
+                        <constraint firstItem="PTe-x7-C8x" firstAttribute="top" secondItem="wSX-p7-yee" secondAttribute="top" id="qL4-HR-A6U"/>
+                        <constraint firstItem="ws1-dG-bjf" firstAttribute="leading" secondItem="MfD-pe-keA" secondAttribute="trailing" constant="3" id="zpe-jy-FKE"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="qiK-0S-KTD" firstAttribute="top" secondItem="r0j-IU-F4S" secondAttribute="bottom" constant="12" id="0LY-jc-2gT"/>
+                <constraint firstItem="y1d-PT-GgT" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="12" id="4LJ-Lf-CZw"/>
+                <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="wSX-p7-yee" secondAttribute="bottom" id="5MN-21-Kzd"/>
+                <constraint firstItem="qiK-0S-KTD" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="C1d-gj-hYA"/>
+                <constraint firstItem="y1d-PT-GgT" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="PMB-RD-YcT"/>
+                <constraint firstItem="r0j-IU-F4S" firstAttribute="top" secondItem="y1d-PT-GgT" secondAttribute="bottom" constant="12" id="Tq7-NM-sSg"/>
+                <constraint firstAttribute="trailing" secondItem="wSX-p7-yee" secondAttribute="trailing" constant="14" id="bIi-Sh-Fwx"/>
+                <constraint firstAttribute="trailing" secondItem="r0j-IU-F4S" secondAttribute="trailing" constant="14" id="eGh-Ep-70n"/>
+                <constraint firstAttribute="trailing" secondItem="qiK-0S-KTD" secondAttribute="trailing" constant="14" id="oiN-Xg-vXP"/>
+                <constraint firstItem="r0j-IU-F4S" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="sW6-PP-b6M"/>
+                <constraint firstItem="wSX-p7-yee" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="spW-cN-q3M"/>
+                <constraint firstItem="wSX-p7-yee" firstAttribute="top" secondItem="qiK-0S-KTD" secondAttribute="bottom" constant="12" id="xkp-kM-F4Y"/>
+                <constraint firstAttribute="trailing" secondItem="y1d-PT-GgT" secondAttribute="trailing" constant="14" id="zBb-Zt-iqP"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="fansChooseImage" destination="JaV-aW-48E" id="Gd2-dk-gA6"/>
+                <outlet property="inputView" destination="qHG-Pf-uhv" id="CrO-nY-EqH"/>
+                <outlet property="memberDisplayHeigh" destination="BWs-hq-qjE" id="qog-be-QTc"/>
+                <outlet property="memberDisplayView" destination="8vx-yP-45f" id="uvU-ba-X76"/>
+                <outlet property="memberView" destination="wSX-p7-yee" id="gWe-kG-M4x"/>
+                <outlet property="nameField" destination="d7N-oz-VmI" id="eFk-kQ-pAu"/>
+                <outlet property="tenantChooseImage" destination="ebv-yn-gUM" id="Qxo-Kk-tpO"/>
+                <outlet property="tipsLabel" destination="vzi-5a-soz" id="uYb-7V-fVE"/>
+            </connections>
+            <point key="canvasLocation" x="78.625954198473281" y="-108.80281690140846"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="tenant_group_choose" width="20" height="20"/>
+        <image name="tenant_group_desc" width="24" height="24"/>
+        <image name="tenant_group_member" width="24" height="24"/>
+        <image name="tenant_group_name" width="24" height="24"/>
+        <image name="tenant_group_type" width="24" height="24"/>
+        <image name="tenant_group_unchoose" width="20" height="20"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 21 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateStuView.h

@@ -0,0 +1,21 @@
+//
+//  TenantCreateStuView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import <UIKit/UIKit.h>
+#import "TenantStuModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TenantCreateStuView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)configWithSource:(TenantStuModel *)model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 37 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateStuView.m

@@ -0,0 +1,37 @@
+//
+//  TenantCreateStuView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import "TenantCreateStuView.h"
+
+@interface TenantCreateStuView ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *userImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *userName;
+
+@end
+
+@implementation TenantCreateStuView
+
++ (instancetype)shareInstance {
+    TenantCreateStuView *view = [[[NSBundle mainBundle] loadNibNamed:@"TenantCreateStuView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)configWithSource:(TenantStuModel *)model {
+    self.userName.text = [NSString returnNoNullStringWithString:model.username];
+    [self.userImage sd_setImageWithURL:[NSURL URLWithString:[model.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 54 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantCreateStuView.xib

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="TenantCreateStuView">
+            <rect key="frame" x="0.0" y="0.0" width="77" height="81"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_avatarRectangle" translatesAutoresizingMaskIntoConstraints="NO" id="zKA-JJ-i2H">
+                    <rect key="frame" x="16" y="10" width="45" height="45"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="45" id="DkF-Xk-vsF"/>
+                        <constraint firstAttribute="width" constant="45" id="kpc-HB-NGl"/>
+                    </constraints>
+                </imageView>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="陈同学" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VCP-zm-SX7">
+                    <rect key="frame" x="18.666666666666671" y="58" width="40" height="18"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="fvp-5G-SoW"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                    <color key="textColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="zKA-JJ-i2H" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="1VP-8s-rIe"/>
+                <constraint firstItem="zKA-JJ-i2H" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="B5W-mb-p6o"/>
+                <constraint firstItem="VCP-zm-SX7" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="iN0-l3-epB" secondAttribute="leading" constant="5" id="Hmv-fd-qx4"/>
+                <constraint firstItem="VCP-zm-SX7" firstAttribute="centerX" secondItem="zKA-JJ-i2H" secondAttribute="centerX" id="b4i-tz-tgr"/>
+                <constraint firstItem="VCP-zm-SX7" firstAttribute="top" secondItem="zKA-JJ-i2H" secondAttribute="bottom" constant="3" id="gR9-3i-pD6"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="userImage" destination="zKA-JJ-i2H" id="Hmh-5R-NQ1"/>
+                <outlet property="userName" destination="VCP-zm-SX7" id="lgD-1j-Lor"/>
+            </connections>
+            <point key="canvasLocation" x="-158.01526717557252" y="-47.535211267605639"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="user_avatarRectangle" width="44" height="44"/>
+    </resources>
+</document>

+ 19 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenentGroupAddMemberCell.h

@@ -0,0 +1,19 @@
+//
+//  TenentGroupAddMemberCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import <UIKit/UIKit.h>
+#import "TenantStuModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TenentGroupAddMemberCell : UITableViewCell
+
+- (void)configWithSource:(TenantStuModel *)model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 41 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenentGroupAddMemberCell.m

@@ -0,0 +1,41 @@
+//
+//  TenentGroupAddMemberCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/9/14.
+//
+
+#import "TenentGroupAddMemberCell.h"
+
+@interface TenentGroupAddMemberCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *studentAvatar;
+
+@property (weak, nonatomic) IBOutlet UILabel *studentName;
+
+@property (weak, nonatomic) IBOutlet UIImageView *chooseImge;
+
+@end
+
+@implementation TenentGroupAddMemberCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+}
+
+- (void)configWithSource:(TenantStuModel *)model {
+    [self.studentAvatar sd_setImageWithURL:[NSURL URLWithString:[model.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:CHAT_USER_DEFAULT_LOGO]];
+    self.studentName.text = [NSString returnNoNullStringWithString:model.username];
+    NSString *statusImage = model.isChoose ? @"tenant_group_choose" : @"tenant_group_unchoose";
+    [self.chooseImge setImage:[UIImage imageNamed:statusImage]];
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 82 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenentGroupAddMemberCell.xib

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="75" id="KGk-i7-Jjw" customClass="TenentGroupAddMemberCell">
+            <rect key="frame" x="0.0" y="0.0" width="320" height="75"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="320" height="75"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_avatarRectangle" translatesAutoresizingMaskIntoConstraints="NO" id="nlI-f2-DdF">
+                        <rect key="frame" x="18" y="18" width="39" height="39"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="39" id="JiH-jP-SLa"/>
+                            <constraint firstAttribute="width" constant="39" id="zec-Qq-d6n"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </imageView>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZLW-LU-SQ0">
+                        <rect key="frame" x="15" y="74" width="280" height="1"/>
+                        <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="1" id="MOs-uI-mtV"/>
+                        </constraints>
+                    </view>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Mvz-r4-out">
+                        <rect key="frame" x="71" y="26" width="0.0" height="24"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="24" id="fga-dz-bG5"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/>
+                        <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tenant_group_unchoose" translatesAutoresizingMaskIntoConstraints="NO" id="MdD-xr-8Fs">
+                        <rect key="frame" x="272" y="27" width="18" height="18"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="18" id="l57-sS-Vc6"/>
+                            <constraint firstAttribute="height" constant="18" id="ul9-P6-e5Q"/>
+                        </constraints>
+                    </imageView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="MdD-xr-8Fs" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Mvz-r4-out" secondAttribute="trailing" constant="10" id="0RG-GH-Z3F"/>
+                    <constraint firstAttribute="trailing" secondItem="ZLW-LU-SQ0" secondAttribute="trailing" constant="25" id="2zM-RJ-PRM"/>
+                    <constraint firstItem="MdD-xr-8Fs" firstAttribute="top" secondItem="nlI-f2-DdF" secondAttribute="top" constant="9" id="LtV-IZ-KoZ"/>
+                    <constraint firstItem="ZLW-LU-SQ0" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="Qao-le-m1c"/>
+                    <constraint firstItem="nlI-f2-DdF" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="18" id="ei7-gW-OVt"/>
+                    <constraint firstAttribute="bottom" secondItem="ZLW-LU-SQ0" secondAttribute="bottom" id="hUW-Nw-qXg"/>
+                    <constraint firstItem="Mvz-r4-out" firstAttribute="leading" secondItem="nlI-f2-DdF" secondAttribute="trailing" constant="14" id="qLy-2I-1cX"/>
+                    <constraint firstItem="Mvz-r4-out" firstAttribute="top" secondItem="nlI-f2-DdF" secondAttribute="top" constant="8" id="svb-aW-kvf"/>
+                    <constraint firstAttribute="trailing" secondItem="MdD-xr-8Fs" secondAttribute="trailing" constant="30" id="vGy-m2-yyQ"/>
+                    <constraint firstItem="nlI-f2-DdF" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="18" id="vse-rB-Xdy"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <connections>
+                <outlet property="chooseImge" destination="MdD-xr-8Fs" id="F2U-2i-DB9"/>
+                <outlet property="studentAvatar" destination="nlI-f2-DdF" id="jed-Ik-PQW"/>
+                <outlet property="studentName" destination="Mvz-r4-out" id="816-Ua-uHs"/>
+            </connections>
+            <point key="canvasLocation" x="80.916030534351137" y="1.7605633802816902"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="tenant_group_unchoose" width="20" height="20"/>
+        <image name="user_avatarRectangle" width="44" height="44"/>
+    </resources>
+</document>

+ 4 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Course/Controller/CourseViewController.m

@@ -201,12 +201,8 @@
             [weakSelf getCourseByDate:weakSelf.chooseDay];
         }
     }];
-    if (@available(iOS 11.0, *)) {
-        self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
-    } else {
-        // Fallback on earlier versions
-        self.automaticallyAdjustsScrollViewInsets = NO;
-    }
+    self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+    
     [self configEmptyView];
 }
 
@@ -250,6 +246,7 @@
     self.calendar.appearance.subtitleTodayColor = HexRGB(0xff6363);
     self.calendar.appearance.subtitleDefaultColor = HexRGB(0xff6363);
     self.calendar.appearance.subtitleSelectionColor = [UIColor whiteColor];
+    self.calendar.appearance.titleTodayColor = THEMECOLOR;
     self.calendar.dataSource = self;
     self.calendar.delegate = self;
     //    self.calendar.firstWeekday = 2;
@@ -284,6 +281,7 @@
     }];
     [self.view layoutIfNeeded];
 }
+
 - (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition
 {
     NSLog(@"did select date %@",[self.dateFormatter stringFromDate:date]);

+ 58 - 93
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m

@@ -6,7 +6,6 @@
 //
 
 #import "HomeViewController.h"
-#import "HomeBodyView.h"
 #import "HomeNavView.h"
 #import "KSBaseWKWebViewController.h"
 #import "MyMusicViewController.h"
@@ -15,7 +14,6 @@
 #import "EvaluateCourseListViewController.h"
 #import "NotiferMessageViewController.h"
 #import "UserInfoManager.h"
-#import "TeacherInfo.h"
 #import "MyIncomeViewController.h"
 #import "ReceiveEvaluateListController.h"
 #import "PublicNoticeView.h"
@@ -61,6 +59,9 @@
 #import "SmallToolViewController.h"
 #import "InstrumentChooseViewController.h"
 
+
+#import "HomeTenantPageView.h"
+
 #define BUTTONWIDTH (65)
 #define BUTTONHEIGHT (70)
 @interface HomeViewController ()<SDCycleScrollViewDelegate,UIScrollViewDelegate,UICollectionViewDelegate, UICollectionViewDelegateFlowLayout,UICollectionViewDataSource,TYCyclePagerViewDataSource,TYCyclePagerViewDelegate>
@@ -69,9 +70,7 @@
 
 @property (nonatomic, strong) HomeNewHeadView *headView;
 
-@property (nonatomic, strong) HomeBodyView *bodyView;
-
-@property (nonatomic, strong) TeacherInfo *mineInfo;
+@property (nonatomic, strong) UserInfo *mineInfo;
 
 @property (nonatomic, strong) PublicNoticeView *noticeView;
 
@@ -133,6 +132,11 @@
 
 @property (nonatomic, assign) BOOL isSettingSubject;
 
+// 机构专辑
+@property (nonatomic, strong) HomeTenantPageView *tenantAlbumView;
+
+@property (nonatomic, assign) CGFloat tenantAlbumHeight;
+
 @end
 
 @implementation HomeViewController
@@ -146,16 +150,8 @@
 }
 
 - (void)requestUserInfo {
-    [KSNetworkingManager queryTeacherInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
-        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
-            self.mineInfo = [[TeacherInfo alloc] initWithDictionary:[dic ks_dictionaryValueForKey:@"data"]];
-            [self requestData];
-        }
-        else {
-            [self MBPShow:MESSAGEKEY];
-            [self requestData];
-        }
-    } faliure:^(NSError * _Nonnull error) {
+    [USER_MANAGER queryUserInfoCallback:^(UserInfo * _Nonnull userInfo) {
+        self.mineInfo = userInfo;
         [self requestData];
     }];
 }
@@ -250,6 +246,9 @@
     [self refreshCourseView:self.recentCourseModel];
     [self refreshAlbumView];
     [self refreshMusicView];
+    
+    // 刷新专辑显示
+    [self refreshTenantBanner];
     // 刷新排序
     [self refreshViewLocation];
     if (self.isCheck) {
@@ -265,6 +264,22 @@
     }
 }
 
+- (void)refreshTenantBanner {
+    
+    if (self.mineInfo.tenantAlbumStatus == 0) {
+        self.tenantAlbumHeight = CGFLOAT_MIN;
+        self.tenantAlbumView.hidden = YES;
+    }
+    else {
+        self.tenantAlbumHeight = [HomeTenantPageView getViewHeight];
+        self.tenantAlbumView.hidden = NO;
+    }
+    
+    [self.tenantAlbumView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.tenantAlbumHeight);
+    }];
+}
+
 - (void)removeFloatWindow {
     if ([self.view.subviews containsObject:self.suspendButton]) {
         [self.suspendButton removeFromSuperview];
@@ -393,7 +408,6 @@
             make.top.mas_equalTo(self.noticeView.mas_bottom);
             make.height.mas_equalTo(courseViewHeight);
         }];
-        
     }
 }
 
@@ -508,7 +522,7 @@
 
 - (void)requestAlbumSource {
     dispatch_group_enter(self.requestGroup);
-    [KSNetworkingManager HomeHotAlbumRequest:KS_POST version:[USER_MANAGER getCurrentVersion] subjectIds:self.mineInfo.defaultSubject success:^(NSDictionary * _Nonnull dic) {
+    [KSNetworkingManager HomeHotAlbumRequest:KS_POST version:[USER_MANAGER getCurrentVersion] subjectIds:[NSString stringWithFormat:@"%.0f",self.mineInfo.defaultSubject] success:^(NSDictionary * _Nonnull dic) {
         dispatch_group_leave(self.requestGroup);
         if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
             NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
@@ -544,7 +558,7 @@
 
 - (void)requestHomeMusicMessage {
     dispatch_group_enter(self.requestGroup);
-    [KSNetworkingManager homeAppMusicSheetRequest:KS_POST version:[USER_MANAGER getCurrentVersion] subjectIds:self.mineInfo.defaultSubject success:^(NSDictionary * _Nonnull dic) {
+    [KSNetworkingManager homeAppMusicSheetRequest:KS_POST version:[USER_MANAGER getCurrentVersion] subjectIds:[NSString stringWithFormat:@"%.0f",self.mineInfo.defaultSubject] success:^(NSDictionary * _Nonnull dic) {
         dispatch_group_leave(self.requestGroup);
         if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
             NSDictionary *result = [dic ks_dictionaryValueForKey:@"data"];
@@ -696,11 +710,19 @@
     }];
     self.courseView.hidden = YES;
     
+    [self.scrollView addSubview:self.tenantAlbumView];
+    self.tenantAlbumHeight = CGFLOAT_MIN;
+    [self.tenantAlbumView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.courseView.mas_bottom);
+        make.height.mas_equalTo(self.tenantAlbumHeight);
+    }];
+    self.tenantAlbumView.hidden = YES;
     [self.scrollView addSubview:self.albumView];
     self.albumViewHeight = [HomeAlbumView getViewHeight];
     [self.albumView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.view);
-        make.top.mas_equalTo(self.courseView.mas_bottom);
+        make.top.mas_equalTo(self.tenantAlbumView.mas_bottom);
         make.height.mas_equalTo(self.albumViewHeight);
     }];
     
@@ -738,7 +760,6 @@
 
 
 - (void)requestData {
-    [self requestUserMemo];
     [self requestUnreadCount];
     [self requestHomeButton];
     [self requestRecentCourse];
@@ -776,19 +797,7 @@
 }
 
 
-- (void)requestUserMemo {
-    [[UserInfoManager shareInstance] requsetconfigCallback:^(BOOL success) {
-        [self refreshBodyView:success];
-    }];
-}
 
-- (void)refreshBodyView:(BOOL)isMemo {
-    self.bodyView.isMemo = isMemo;
-    CGFloat contentMinHeight = [_bodyView getViewHeight];
-    [self.bodyView mas_updateConstraints:^(MASConstraintMaker *make) {
-        make.height.mas_equalTo(contentMinHeight);
-    }];
-}
 
 - (void)requestUnreadCount {
     [KSNetworkingManager queryCountOfUnreadRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
@@ -1117,67 +1126,6 @@
     }
 }
 
-- (HomeBodyView *)bodyView {
-    if (!_bodyView) {
-        _bodyView = [HomeBodyView shareInstance];
-        MJWeakSelf;
-        [_bodyView homebodyViewAction:^(HOMEBODYACTION action) {
-            [weakSelf bodyViewOperation:action];
-        }];
-    }
-    return _bodyView;
-}
-
-- (void)bodyViewOperation:(HOMEBODYACTION)action {
-    switch (action) {
-        case HOMEBODYACTION_COURSE: // 我的课程
-        {
-            MyCourseViewController *ctrl = [[MyCourseViewController alloc] init];
-            [self.navigationController pushViewController:ctrl animated:YES];
-        }
-            break;
-        case HOMEBODYACTION_HOMEWORK: // 课后作业
-        {
-            HomeworkListViewController *ctrl = [[HomeworkListViewController alloc] init];
-            [self.navigationController pushViewController:ctrl animated:YES];
-        }
-            break;
-        case HOMEBODYACTION_EVALUATE:  // 待评价列表
-        {
-            EvaluateCourseListViewController *ctrl = [[EvaluateCourseListViewController alloc] init];
-            [self.navigationController pushViewController:ctrl animated:YES];
-        }
-            break;
-        case HOMEBODYACTION_MUSIC: // 我的曲谱
-        {
-            MyMusicViewController *musicCtrl = [[MyMusicViewController alloc] init];
-            [self.navigationController pushViewController:musicCtrl animated:YES];
-        }
-            break;
-        case HOMEBODYACTION_RECEIVE: // 我收到的评价
-        {
-            ReceiveEvaluateListController *ctrl = [[ReceiveEvaluateListController alloc] init];
-            [self.navigationController pushViewController:ctrl animated:YES];
-        }
-            break;
-        case HOMEBODYACTION_INCOME: // 我的收入
-        {
-            MyIncomeViewController *incomeCtrl = [[MyIncomeViewController alloc] init];
-            [self.navigationController pushViewController:incomeCtrl animated:YES];
-        }
-            break;
-        case HOMEBODYACTION_MUSICROOM: // 琴房
-        {
-            KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
-            ctrl.url = [NSString stringWithFormat:@"%@%@",WEBHOST,@"/#/pianoRoom"];
-            [self.navigationController pushViewController:ctrl animated:YES];
-        }
-            break;
-        default:
-            break;
-    }
-}
-
 
 - (void)displaySongDetail:(NSString *)songId {
     
@@ -1654,6 +1602,23 @@
         }
     }
 }
+
+- (HomeTenantPageView *)tenantAlbumView {
+    if (!_tenantAlbumView) {
+        _tenantAlbumView = [HomeTenantPageView shareInstance];
+        MJWeakSelf;
+        [_tenantAlbumView displayTenatantPage:^{
+            [weakSelf showTenantAlbumPageView];
+        }];
+    }
+    return _tenantAlbumView;
+}
+
+- (void)showTenantAlbumPageView {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@",WEBHOST,@"/#/train-tool"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
 /*
 #pragma mark - Navigation
 

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNavView.h

@@ -6,7 +6,7 @@
 //
 
 #import <UIKit/UIKit.h>
-#import "TeacherInfo.h"
+#import "UserInfo.h"
 
 typedef NS_ENUM(NSInteger, HOMENAV_ACTION) {
     HOMENAV_ACTION_MESSAGE,   // 消息
@@ -22,7 +22,7 @@ typedef void(^HomeNavCallback)(HOMENAV_ACTION action);
 
 + (instancetype)shareInstance;
 
-- (void)configMessage:(TeacherInfo *)infoMessage;
+- (void)configMessage:(UserInfo *)infoMessage;
 
 - (void)displayMessageCenter:(HomeNavCallback)callback;
 

+ 14 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNavView.m

@@ -27,19 +27,27 @@
     return view;
 }
 
-- (void)configMessage:(TeacherInfo *)infoMessage {
-    if ([NSString isEmptyString:infoMessage.username]) {
-        self.nameLabel.text = [NSString stringWithFormat:@"你好,游客%@",[NSString returnNoNullStringWithString:infoMessage.userId]];
+- (void)configMessage:(UserInfo *)infoMessage {
+    
+    if ([NSString isEmptyString:infoMessage.tenantName]) {
+        self.nameLabel.text = [NSString stringWithFormat:@"%@%@", infoMessage.tenantName, [NSString returnNoNullStringWithString:infoMessage.username]];
     }
     else {
-        if (infoMessage.username.length > 4) {
-            self.nameLabel.text = infoMessage.username;
+        if ([NSString isEmptyString:infoMessage.username]) {
+            self.nameLabel.text = [NSString stringWithFormat:@"你好,游客%@",[NSString returnNoNullStringWithString:infoMessage.userId]];
         }
         else {
-            self.nameLabel.text = [NSString stringWithFormat:@"你好,%@",infoMessage.username];
+            if (infoMessage.username.length > 4) {
+                self.nameLabel.text = infoMessage.username;
+            }
+            else {
+                self.nameLabel.text = [NSString stringWithFormat:@"你好,%@",infoMessage.username];
+            }
         }
     }
     
+    
+    
     NSString *viperImage = infoMessage.isVip ? @"mine_vip" : @"mine_nomal";
     [self.viperImage setImage:[UIImage imageNamed:viperImage]];
 }

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewHeadView.h

@@ -6,7 +6,7 @@
 //
 
 #import <UIKit/UIKit.h>
-#import "TeacherInfo.h"
+#import "UserInfo.h"
 
 typedef NS_ENUM(NSInteger, HOMEHEADACTION) {
     HOMEHEADACTION_DESC,   // 勋章介绍
@@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 + (instancetype)shareInstance;
 
-- (void)configMessage:(TeacherInfo *)infoMessage;
+- (void)configMessage:(UserInfo *)infoMessage;
 
 - (void)authDetailAction:(HomeHeadBlock)callback;
 

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewHeadView.m

@@ -64,7 +64,7 @@
     return view;
 }
 
-- (void)configMessage:(TeacherInfo *)infoMessage {
+- (void)configMessage:(UserInfo *)infoMessage {
     
     NSArray *tagArray = [infoMessage.tag componentsSeparatedByString:@","];
     if ([NSString isEmptyString:infoMessage.tag]) {

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff