Steven пре 3 година
родитељ
комит
4a68d8a832
40 измењених фајлова са 1502 додато и 792 уклоњено
  1. 32 0
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 6 38
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/MessageCenter/message_all.imageset/Contents.json
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/MessageCenter/message_all.imageset/message_all@2x.png
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/MessageCenter/message_all.imageset/message_all@3x.png
  7. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/MessageCenter/system_cell.imageset/system_cell@2x.png
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/MessageCenter/system_cell.imageset/system_cell@3x.png
  9. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/choose_instrument.imageset/choose_instrument@2x.png
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/choose_instrument.imageset/choose_instrument@3x.png
  11. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSBaseWKWebViewController.m
  12. 10 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  13. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  14. 2 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/EvaluateCourse/Controller/EvaluateDetailViewController.m
  15. 16 7
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/EvaluateCourse/Model/EvaluateDetailModel.h
  16. 107 44
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/EvaluateCourse/Model/EvaluateDetailModel.m
  17. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHeadView.m
  18. 10 10
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHeadView.xib
  19. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNavView.xib
  20. 7 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/Controller/AddressListViewController.h
  21. 16 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/Controller/AddressListViewController.m
  22. 7 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Controller/MineViewController.m
  23. 35 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Controller/InstrumentChooseViewController.m
  24. 3 204
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/SettingViewController.m
  25. 20 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/UserAuthViewController.h
  26. 85 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/UserAuthViewController.m
  27. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/UserSettingViewController.h
  28. 281 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/UserSettingViewController.m
  29. 1 20
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/SettingBodyView.h
  30. 1 9
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/SettingBodyView.m
  31. 34 452
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/SettingBodyView.xib
  32. 42 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UseBodyView.h
  33. 50 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UseBodyView.m
  34. 428 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UseBodyView.xib
  35. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UserAuthBodyView.h
  36. 66 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UserAuthBodyView.m
  37. 134 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UserAuthBodyView.xib
  38. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBodyView.h
  39. 7 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBodyView.m
  40. 11 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBodyView.xib

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

@@ -477,6 +477,12 @@
 		BC4BCE7A2823AB6500522C8B /* KSAddressPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4BCE792823AB6500522C8B /* KSAddressPickerView.m */; };
 		BC4BCE7D2823B66000522C8B /* AddressDetailBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4BCE7C2823B66000522C8B /* AddressDetailBodyView.m */; };
 		BC4BCE7F2823B66A00522C8B /* AddressDetailBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4BCE7E2823B66A00522C8B /* AddressDetailBodyView.xib */; };
+		BC542E3328406EA400633781 /* UserAuthViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC542E3228406EA400633781 /* UserAuthViewController.m */; };
+		BC542E3628406F7700633781 /* UserAuthBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC542E3528406F7700633781 /* UserAuthBodyView.m */; };
+		BC542E3828406F8000633781 /* UserAuthBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC542E3728406F8000633781 /* UserAuthBodyView.xib */; };
+		BC542E4328407AD200633781 /* UserSettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC542E4228407AD200633781 /* UserSettingViewController.m */; };
+		BC542E4628407B3D00633781 /* UseBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC542E4528407B3D00633781 /* UseBodyView.m */; };
+		BC542E4828407B4400633781 /* UseBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC542E4728407B4400633781 /* UseBodyView.xib */; };
 		BC58E7D3281B9630004B0893 /* PublicNoticeView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC58E7D2281B9630004B0893 /* PublicNoticeView.m */; };
 		BC58E7D5281B9637004B0893 /* PublicNoticeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC58E7D4281B9637004B0893 /* PublicNoticeView.xib */; };
 		BC58E7DD281B969B004B0893 /* MinePageTopView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC58E7DC281B969B004B0893 /* MinePageTopView.m */; };
@@ -1590,6 +1596,16 @@
 		BC4BCE7B2823B66000522C8B /* AddressDetailBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddressDetailBodyView.h; sourceTree = "<group>"; };
 		BC4BCE7C2823B66000522C8B /* AddressDetailBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AddressDetailBodyView.m; sourceTree = "<group>"; };
 		BC4BCE7E2823B66A00522C8B /* AddressDetailBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AddressDetailBodyView.xib; sourceTree = "<group>"; };
+		BC542E3128406EA400633781 /* UserAuthViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserAuthViewController.h; sourceTree = "<group>"; };
+		BC542E3228406EA400633781 /* UserAuthViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserAuthViewController.m; sourceTree = "<group>"; };
+		BC542E3428406F7700633781 /* UserAuthBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserAuthBodyView.h; sourceTree = "<group>"; };
+		BC542E3528406F7700633781 /* UserAuthBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserAuthBodyView.m; sourceTree = "<group>"; };
+		BC542E3728406F8000633781 /* UserAuthBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UserAuthBodyView.xib; sourceTree = "<group>"; };
+		BC542E4128407AD200633781 /* UserSettingViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserSettingViewController.h; sourceTree = "<group>"; };
+		BC542E4228407AD200633781 /* UserSettingViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserSettingViewController.m; sourceTree = "<group>"; };
+		BC542E4428407B3D00633781 /* UseBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UseBodyView.h; sourceTree = "<group>"; };
+		BC542E4528407B3D00633781 /* UseBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UseBodyView.m; sourceTree = "<group>"; };
+		BC542E4728407B4400633781 /* UseBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UseBodyView.xib; sourceTree = "<group>"; };
 		BC58E7D1281B9630004B0893 /* PublicNoticeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PublicNoticeView.h; sourceTree = "<group>"; };
 		BC58E7D2281B9630004B0893 /* PublicNoticeView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PublicNoticeView.m; sourceTree = "<group>"; };
 		BC58E7D4281B9637004B0893 /* PublicNoticeView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PublicNoticeView.xib; sourceTree = "<group>"; };
@@ -3507,6 +3523,10 @@
 				27A54CF027E9BD3B007309A3 /* FeedbackViewController.m */,
 				27A54CF227E9BD53007309A3 /* AboutUsViewController.h */,
 				27A54CF327E9BD53007309A3 /* AboutUsViewController.m */,
+				BC542E3128406EA400633781 /* UserAuthViewController.h */,
+				BC542E3228406EA400633781 /* UserAuthViewController.m */,
+				BC542E4128407AD200633781 /* UserSettingViewController.h */,
+				BC542E4228407AD200633781 /* UserSettingViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -3544,6 +3564,12 @@
 				27A54CFA27E9BDB2007309A3 /* AboutUsBodyView.h */,
 				27A54CFB27E9BDB2007309A3 /* AboutUsBodyView.m */,
 				27A54CFD27E9BDC5007309A3 /* AboutUsBodyView.xib */,
+				BC542E3428406F7700633781 /* UserAuthBodyView.h */,
+				BC542E3528406F7700633781 /* UserAuthBodyView.m */,
+				BC542E3728406F8000633781 /* UserAuthBodyView.xib */,
+				BC542E4428407B3D00633781 /* UseBodyView.h */,
+				BC542E4528407B3D00633781 /* UseBodyView.m */,
+				BC542E4728407B4400633781 /* UseBodyView.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -5048,6 +5074,7 @@
 				BCA9CE4427FD947C00D558C6 /* AccompanyArrangeCell.xib in Resources */,
 				BCF61BF128042FA90000ACFE /* InstrumentChooseBottonView.xib in Resources */,
 				277D433027E9A50800107DB7 /* PhoneChangeBodyView.xib in Resources */,
+				BC542E3828406F8000633781 /* UserAuthBodyView.xib in Resources */,
 				27A54CEE27E9B986007309A3 /* ModifyNameBodyView.xib in Resources */,
 				2708565E27EDA83100EC8E72 /* GroupMemberListCell.xib in Resources */,
 				2780A06627E81E5E00447CFD /* MineNavView.xib in Resources */,
@@ -5101,6 +5128,7 @@
 				BCE6A08727F81B4D00C97704 /* MinePageSubmitView.xib in Resources */,
 				BC73A1F42809693F00FA8F6F /* EvaluateSortView.xib in Resources */,
 				27A54CF927E9BD8B007309A3 /* FeedbackBodyView.xib in Resources */,
+				BC542E4828407B4400633781 /* UseBodyView.xib in Resources */,
 				BCB6340527F6A2F000ACFDCF /* tock.wav in Resources */,
 				BCC03F9A2805681100461B7C /* MyLessonSearchView.xib in Resources */,
 				BCC03F9F280579A500461B7C /* MyLiveCourseCell.xib in Resources */,
@@ -5499,6 +5527,7 @@
 				2779322D27E30FC30010E277 /* ALCalendarDate.m in Sources */,
 				BCEA75262819103300886A86 /* UnbindBodyView.m in Sources */,
 				BCB633FD27F6A18200ACFDCF /* ClassroomMainContainer.m in Sources */,
+				BC542E4328407AD200633781 /* UserSettingViewController.m in Sources */,
 				2779321E27E30FC30010E277 /* LifeButton.m in Sources */,
 				277931E427E30FC20010E277 /* CALayer+Color.m in Sources */,
 				2779360C27E32BE50010E277 /* LoginViewController.m in Sources */,
@@ -5542,6 +5571,7 @@
 				277935E527E328C00010E277 /* CustomNavViewController.m in Sources */,
 				BC5EB5C42804087000B4A3B0 /* MyStyleBottomView.m in Sources */,
 				275E3DE027F467410010EC30 /* KSChatEmojiBoardView.m in Sources */,
+				BC542E4628407B3D00633781 /* UseBodyView.m in Sources */,
 				BCC9F44927F69BD200647449 /* ClassroomService.m in Sources */,
 				277931CC27E30FC20010E277 /* KSGifRefreshFooter.m in Sources */,
 				2779321127E30FC30010E277 /* YKMultiLevelTableView.m in Sources */,
@@ -5596,6 +5626,7 @@
 				277932ED27E310070010E277 /* TZPhotoPickerController.m in Sources */,
 				277932E227E310070010E277 /* TZImageCropManager.m in Sources */,
 				277932B327E30FFE0010E277 /* QWdynamicModel.m in Sources */,
+				BC542E3328406EA400633781 /* UserAuthViewController.m in Sources */,
 				BCF61BE8280425DA0000ACFE /* InstrumentChooseCell.m in Sources */,
 				BCC03F8C280526B300461B7C /* MyStyleVideoChooseView.m in Sources */,
 				2779329627E30FEB0010E277 /* MSSBrowseZoomScrollView.m in Sources */,
@@ -5654,6 +5685,7 @@
 				BC8C2C7A28264CF400FBA5D5 /* ReceiveEvaluateListController.m in Sources */,
 				BCC9F40E27F69BD200647449 /* TimeStampCell.m in Sources */,
 				277932BB27E30FFE0010E277 /* TAAnimatedDotView.m in Sources */,
+				BC542E3628406F7700633781 /* UserAuthBodyView.m in Sources */,
 				2779321827E30FC30010E277 /* SkipTextField.m in Sources */,
 				BCC9F41C27F69BD200647449 /* RecentSharedView.m in Sources */,
 				27A2F63027E70E57009E2380 /* UserInfo.m in Sources */,

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


+ 6 - 38
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -58,8 +58,8 @@
             filePath = "KulexiuForTeacher/Module/Home/EvaluateCourse/Controller/EvaluateDetailViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "106"
-            endingLineNumber = "106"
+            startingLineNumber = "107"
+            endingLineNumber = "107"
             landmarkName = "-evaluateAction:"
             landmarkType = "7">
          </BreakpointContent>
@@ -234,8 +234,8 @@
             filePath = "KulexiuForTeacher/Common/Base/KSBaseWKWebViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1079"
-            endingLineNumber = "1079"
+            startingLineNumber = "1105"
+            endingLineNumber = "1105"
             landmarkName = "-documentPicker:didPickDocumentAtURL:"
             landmarkType = "7">
          </BreakpointContent>
@@ -250,8 +250,8 @@
             filePath = "KulexiuForTeacher/Common/Base/KSBaseWKWebViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1049"
-            endingLineNumber = "1049"
+            startingLineNumber = "1075"
+            endingLineNumber = "1075"
             landmarkName = "-documentPicker:didPickDocumentAtURL:"
             landmarkType = "7">
          </BreakpointContent>
@@ -320,37 +320,5 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "6BFAE737-EFF4-4FD5-ABCA-3C988B517CA0"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Home/EvaluateCourse/View/EvaluateCourseBodyView.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "113"
-            endingLineNumber = "113"
-            landmarkName = "-requestData"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "72B58754-F7FC-4CFF-A8B4-F0D4609A27DD"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Mine/CreateStyle/Controller/MyStyleViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "76"
-            endingLineNumber = "76"
-            landmarkName = "-requestMyStyle"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/MessageCenter/system_cell.imageset/Contents.json → KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/MessageCenter/message_all.imageset/Contents.json

@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "system_cell@2x.png",
+      "filename" : "message_all@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "system_cell@3x.png",
+      "filename" : "message_all@3x.png",
       "idiom" : "universal",
       "scale" : "3x"
     }

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


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


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


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


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/choose_instrument.imageset/choose_instrument@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/choose_instrument.imageset/choose_instrument@3x.png


+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSBaseWKWebViewController.m

@@ -22,6 +22,7 @@
 #import <AVFoundation/AVFoundation.h>
 #import "KSDocumentViewController.h"
 #import "KSICloudManager.h"
+#import "AddressListViewController.h"
 
 typedef NS_ENUM(NSInteger, CHOOSETYPE) {
     CHOOSETYPE_XML,
@@ -424,6 +425,31 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
         [self chooseFileWithType:typeStr maxNumber:maxCount];
         
     }
+    else if ([[parm stringValueForKey:@"api"] isEqualToString:@"setAddress"]) { // 跳转地址选择
+        AddressListViewController *ctrl = [[AddressListViewController alloc] init];
+        ctrl.isChooseAddress = YES;
+        MJWeakSelf;
+        [ctrl chooseAddressAction:^(AddressListModel * _Nonnull model) {
+            [weakSelf sendAddressAction:model];
+        }];
+        [self.navigationController pushViewController:ctrl animated:YES];
+    }
+}
+
+- (void)sendAddressAction:(AddressListModel *)model {
+    NSMutableDictionary *sendParm = [NSMutableDictionary dictionary];
+    [sendParm setValue:@"getAddress" forKey:@"api"];
+    NSMutableDictionary *content = [NSMutableDictionary dictionary];
+    [content setValue:model.internalBaseClassIdentifier forKey:@"id"];
+    [content setValue:model.detailAddress forKey:@"detailAddress"];
+    [content setValue:model.city forKey:@"city"];
+    [content setValue:model.region forKey:@"region"];
+    [content setValue:model.province forKey:@"province"];
+    [content setValue:model.name forKey:@"name"];
+    [content setValue:model.phoneNumber forKey:@"phoneNumber"];
+    [content setValue:model.postCode forKey:@"postCode"];
+    [sendParm setValue:content forKey:@"content"];
+    [self postMessage:sendParm];
 }
 
 - (void)chooseFileWithType:(NSString *)typeStr maxNumber:(NSInteger)maxCount {

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

@@ -276,6 +276,16 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)querySubjectAllRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// /api-auth/user/realNameAuth
+
+/// 实名认证
+/// @param post post
+/// @param idCardNo 身份证
+/// @param realName 姓名
+/// @param success 成功
+/// @param faliure 失败
++ (void)realNameAuthRequest:(NSString *)post idCardNo:(NSString *)idCardNo realName:(NSString *)realName success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 // /api-teacher/home/count
 
 /// 首页统计数据

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

@@ -685,6 +685,24 @@
     NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/subject/subjectSelect"];
     [self request:get andWithUrl:url and:nil success:success faliure:faliure];
 }
+
+// /api-auth/user/realNameAuth
+
+/// 实名认证
+/// @param post post
+/// @param idCardNo 身份证
+/// @param realName 姓名
+/// @param success 成功
+/// @param faliure 失败
++ (void)realNameAuthRequest:(NSString *)post idCardNo:(NSString *)idCardNo realName:(NSString *)realName success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-auth/user/realNameAuth"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:idCardNo forKey:@"idCardNo"];
+    [parm setValue:realName forKey:@"realName"];
+    [parm setValue:@(YES) forKey:@"save"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
 // /api-teacher/home/count
 
 /// 首页统计数据

+ 2 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/EvaluateCourse/Controller/EvaluateDetailViewController.m

@@ -46,6 +46,7 @@
     [self showhud];
     [KSNetworkingManager selectRepliedRequest:KS_POST courseGroupId:self.courseGroupId courseScheduleId:self.courseId studentId:self.studentId success:^(NSDictionary * _Nonnull dic) {
         [self removehub];
+        NSLog(@"%@- " , [dic mj_JSONString]);
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
             self.detailModel = [[EvaluateDetailModel alloc] initWithDictionary:[dic dictionaryValueForKey:@"data"]];
         }
@@ -68,7 +69,7 @@
         AccompanyCourseInfoCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AccompanyCourseInfoCell"];
         cell.statusLabel.text = @"已结束";
         cell.statusLabel.textColor = HexRGB(0x999999);
-//        [cell configWithStartTime:self.detailModel.startTime endTime:self.detailModel.endTime studentAvatar:self.detailModel.studentAvatar studentName:self.detailModel.studentName studentId:self.detailModel.studentId studentSubject:self.detailModel.subjectName];
+        [cell configWithStartTime:self.detailModel.startTime endTime:self.detailModel.endTime studentAvatar:self.detailModel.avatar studentName:self.detailModel.userName studentId:self.detailModel.studentId studentSubject:self.detailModel.subjectName];
         cell.hideChatButton = YES;
         return cell;
     }

+ 16 - 7
KulexiuForTeacher/KulexiuForTeacher/Module/Home/EvaluateCourse/Model/EvaluateDetailModel.h

@@ -1,7 +1,7 @@
 //
 //  EvaluateDetailModel.h
 //
-//  Created by Steven  on 2022/4/19
+//  Created by Steven  on 2022/5/27
 //  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
 //
 
@@ -11,16 +11,25 @@
 
 @interface EvaluateDetailModel : NSObject <NSCoding, NSCopying>
 
-@property (nonatomic, strong) NSString *courseGroupType;
-@property (nonatomic, strong) NSString *courseScheduleId;
 @property (nonatomic, strong) NSString *courseGroupId;
+@property (nonatomic, strong) NSString *classDate;
+@property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *realName;
+@property (nonatomic, strong) NSString *studentReplied;
+@property (nonatomic, strong) NSString *status;
 @property (nonatomic, strong) NSString *updateTime;
-@property (nonatomic, strong) NSString *studentId;
 @property (nonatomic, strong) NSString *teacherReplied;
-@property (nonatomic, assign) double score;
-@property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *subjectId;
+@property (nonatomic, strong) NSString *courseGroupType;
+@property (nonatomic, strong) NSString *userName;
+@property (nonatomic, strong) NSString *avatar;
+@property (nonatomic, strong) NSString *endTime;
+@property (nonatomic, strong) NSString *subjectName;
+@property (nonatomic, strong) NSString *courseScheduleId;
 @property (nonatomic, strong) NSString *createTime;
-@property (nonatomic, strong) NSString *studentReplied;
+@property (nonatomic, assign) double score;
+@property (nonatomic, strong) NSString *studentId;
+@property (nonatomic, strong) NSString *startTime;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;

+ 107 - 44
KulexiuForTeacher/KulexiuForTeacher/Module/Home/EvaluateCourse/Model/EvaluateDetailModel.m

@@ -1,23 +1,32 @@
 //
 //  EvaluateDetailModel.m
 //
-//  Created by Steven  on 2022/4/19
+//  Created by Steven  on 2022/5/27
 //  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
 //
 
 #import "EvaluateDetailModel.h"
 
 
-NSString *const kEvaluateDetailModelCourseGroupType = @"courseGroupType";
-NSString *const kEvaluateDetailModelCourseScheduleId = @"courseScheduleId";
 NSString *const kEvaluateDetailModelCourseGroupId = @"courseGroupId";
+NSString *const kEvaluateDetailModelClassDate = @"classDate";
+NSString *const kEvaluateDetailModelId = @"id";
+NSString *const kEvaluateDetailModelRealName = @"realName";
+NSString *const kEvaluateDetailModelStudentReplied = @"studentReplied";
+NSString *const kEvaluateDetailModelStatus = @"status";
 NSString *const kEvaluateDetailModelUpdateTime = @"updateTime";
-NSString *const kEvaluateDetailModelStudentId = @"studentId";
 NSString *const kEvaluateDetailModelTeacherReplied = @"teacherReplied";
-NSString *const kEvaluateDetailModelScore = @"score";
-NSString *const kEvaluateDetailModelId = @"id";
+NSString *const kEvaluateDetailModelSubjectId = @"subjectId";
+NSString *const kEvaluateDetailModelCourseGroupType = @"courseGroupType";
+NSString *const kEvaluateDetailModelUserName = @"userName";
+NSString *const kEvaluateDetailModelAvatar = @"avatar";
+NSString *const kEvaluateDetailModelEndTime = @"endTime";
+NSString *const kEvaluateDetailModelSubjectName = @"subjectName";
+NSString *const kEvaluateDetailModelCourseScheduleId = @"courseScheduleId";
 NSString *const kEvaluateDetailModelCreateTime = @"createTime";
-NSString *const kEvaluateDetailModelStudentReplied = @"studentReplied";
+NSString *const kEvaluateDetailModelScore = @"score";
+NSString *const kEvaluateDetailModelStudentId = @"studentId";
+NSString *const kEvaluateDetailModelStartTime = @"startTime";
 
 
 @interface EvaluateDetailModel ()
@@ -28,16 +37,25 @@ NSString *const kEvaluateDetailModelStudentReplied = @"studentReplied";
 
 @implementation EvaluateDetailModel
 
-@synthesize courseGroupType = _courseGroupType;
-@synthesize courseScheduleId = _courseScheduleId;
 @synthesize courseGroupId = _courseGroupId;
+@synthesize classDate = _classDate;
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize realName = _realName;
+@synthesize studentReplied = _studentReplied;
+@synthesize status = _status;
 @synthesize updateTime = _updateTime;
-@synthesize studentId = _studentId;
 @synthesize teacherReplied = _teacherReplied;
-@synthesize score = _score;
-@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize subjectId = _subjectId;
+@synthesize courseGroupType = _courseGroupType;
+@synthesize userName = _userName;
+@synthesize avatar = _avatar;
+@synthesize endTime = _endTime;
+@synthesize subjectName = _subjectName;
+@synthesize courseScheduleId = _courseScheduleId;
 @synthesize createTime = _createTime;
-@synthesize studentReplied = _studentReplied;
+@synthesize score = _score;
+@synthesize studentId = _studentId;
+@synthesize startTime = _startTime;
 
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
@@ -52,16 +70,25 @@ NSString *const kEvaluateDetailModelStudentReplied = @"studentReplied";
     // 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.courseGroupType = [self objectOrNilForKey:kEvaluateDetailModelCourseGroupType fromDictionary:dict];
-            self.courseScheduleId = [self objectOrNilForKey:kEvaluateDetailModelCourseScheduleId fromDictionary:dict];
             self.courseGroupId = [self objectOrNilForKey:kEvaluateDetailModelCourseGroupId fromDictionary:dict];
+            self.classDate = [self objectOrNilForKey:kEvaluateDetailModelClassDate fromDictionary:dict];
+            self.internalBaseClassIdentifier = [self objectOrNilForKey:kEvaluateDetailModelId fromDictionary:dict];
+            self.realName = [self objectOrNilForKey:kEvaluateDetailModelRealName fromDictionary:dict];
+            self.studentReplied = [self objectOrNilForKey:kEvaluateDetailModelStudentReplied fromDictionary:dict];
+            self.status = [self objectOrNilForKey:kEvaluateDetailModelStatus fromDictionary:dict];
             self.updateTime = [self objectOrNilForKey:kEvaluateDetailModelUpdateTime fromDictionary:dict];
-            self.studentId = [self objectOrNilForKey:kEvaluateDetailModelStudentId fromDictionary:dict];
             self.teacherReplied = [self objectOrNilForKey:kEvaluateDetailModelTeacherReplied fromDictionary:dict];
-            self.score = [[self objectOrNilForKey:kEvaluateDetailModelScore fromDictionary:dict] doubleValue];
-            self.internalBaseClassIdentifier = [self objectOrNilForKey:kEvaluateDetailModelId fromDictionary:dict];
+            self.subjectId = [self objectOrNilForKey:kEvaluateDetailModelSubjectId fromDictionary:dict];
+            self.courseGroupType = [self objectOrNilForKey:kEvaluateDetailModelCourseGroupType fromDictionary:dict];
+            self.userName = [self objectOrNilForKey:kEvaluateDetailModelUserName fromDictionary:dict];
+            self.avatar = [self objectOrNilForKey:kEvaluateDetailModelAvatar fromDictionary:dict];
+            self.endTime = [self objectOrNilForKey:kEvaluateDetailModelEndTime fromDictionary:dict];
+            self.subjectName = [self objectOrNilForKey:kEvaluateDetailModelSubjectName fromDictionary:dict];
+            self.courseScheduleId = [self objectOrNilForKey:kEvaluateDetailModelCourseScheduleId fromDictionary:dict];
             self.createTime = [self objectOrNilForKey:kEvaluateDetailModelCreateTime fromDictionary:dict];
-            self.studentReplied = [self objectOrNilForKey:kEvaluateDetailModelStudentReplied fromDictionary:dict];
+            self.score = [[self objectOrNilForKey:kEvaluateDetailModelScore fromDictionary:dict] doubleValue];
+            self.studentId = [self objectOrNilForKey:kEvaluateDetailModelStudentId fromDictionary:dict];
+            self.startTime = [self objectOrNilForKey:kEvaluateDetailModelStartTime fromDictionary:dict];
 
     }
     
@@ -72,21 +99,30 @@ NSString *const kEvaluateDetailModelStudentReplied = @"studentReplied";
 - (NSDictionary *)dictionaryRepresentation
 {
     NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
-    [mutableDict setValue:self.courseGroupType forKey:kEvaluateDetailModelCourseGroupType];
-    [mutableDict setValue:self.courseScheduleId forKey:kEvaluateDetailModelCourseScheduleId];
     [mutableDict setValue:self.courseGroupId forKey:kEvaluateDetailModelCourseGroupId];
+    [mutableDict setValue:self.classDate forKey:kEvaluateDetailModelClassDate];
+    [mutableDict setValue:self.internalBaseClassIdentifier forKey:kEvaluateDetailModelId];
+    [mutableDict setValue:self.realName forKey:kEvaluateDetailModelRealName];
+    [mutableDict setValue:self.studentReplied forKey:kEvaluateDetailModelStudentReplied];
+    [mutableDict setValue:self.status forKey:kEvaluateDetailModelStatus];
     [mutableDict setValue:self.updateTime forKey:kEvaluateDetailModelUpdateTime];
-    [mutableDict setValue:self.studentId forKey:kEvaluateDetailModelStudentId];
     [mutableDict setValue:self.teacherReplied forKey:kEvaluateDetailModelTeacherReplied];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.score] forKey:kEvaluateDetailModelScore];
-    [mutableDict setValue:self.internalBaseClassIdentifier forKey:kEvaluateDetailModelId];
+    [mutableDict setValue:self.subjectId forKey:kEvaluateDetailModelSubjectId];
+    [mutableDict setValue:self.courseGroupType forKey:kEvaluateDetailModelCourseGroupType];
+    [mutableDict setValue:self.userName forKey:kEvaluateDetailModelUserName];
+    [mutableDict setValue:self.avatar forKey:kEvaluateDetailModelAvatar];
+    [mutableDict setValue:self.endTime forKey:kEvaluateDetailModelEndTime];
+    [mutableDict setValue:self.subjectName forKey:kEvaluateDetailModelSubjectName];
+    [mutableDict setValue:self.courseScheduleId forKey:kEvaluateDetailModelCourseScheduleId];
     [mutableDict setValue:self.createTime forKey:kEvaluateDetailModelCreateTime];
-    [mutableDict setValue:self.studentReplied forKey:kEvaluateDetailModelStudentReplied];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.score] forKey:kEvaluateDetailModelScore];
+    [mutableDict setValue:self.studentId forKey:kEvaluateDetailModelStudentId];
+    [mutableDict setValue:self.startTime forKey:kEvaluateDetailModelStartTime];
 
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
-- (NSString *)description 
+- (NSString *)description
 {
     return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
 }
@@ -109,32 +145,50 @@ NSString *const kEvaluateDetailModelStudentReplied = @"studentReplied";
 {
     self = [super init];
 
-    self.courseGroupType = [aDecoder decodeObjectForKey:kEvaluateDetailModelCourseGroupType];
-    self.courseScheduleId = [aDecoder decodeObjectForKey:kEvaluateDetailModelCourseScheduleId];
     self.courseGroupId = [aDecoder decodeObjectForKey:kEvaluateDetailModelCourseGroupId];
+    self.classDate = [aDecoder decodeObjectForKey:kEvaluateDetailModelClassDate];
+    self.internalBaseClassIdentifier = [aDecoder decodeObjectForKey:kEvaluateDetailModelId];
+    self.realName = [aDecoder decodeObjectForKey:kEvaluateDetailModelRealName];
+    self.studentReplied = [aDecoder decodeObjectForKey:kEvaluateDetailModelStudentReplied];
+    self.status = [aDecoder decodeObjectForKey:kEvaluateDetailModelStatus];
     self.updateTime = [aDecoder decodeObjectForKey:kEvaluateDetailModelUpdateTime];
-    self.studentId = [aDecoder decodeObjectForKey:kEvaluateDetailModelStudentId];
     self.teacherReplied = [aDecoder decodeObjectForKey:kEvaluateDetailModelTeacherReplied];
-    self.score = [aDecoder decodeDoubleForKey:kEvaluateDetailModelScore];
-    self.internalBaseClassIdentifier = [aDecoder decodeObjectForKey:kEvaluateDetailModelId];
+    self.subjectId = [aDecoder decodeObjectForKey:kEvaluateDetailModelSubjectId];
+    self.courseGroupType = [aDecoder decodeObjectForKey:kEvaluateDetailModelCourseGroupType];
+    self.userName = [aDecoder decodeObjectForKey:kEvaluateDetailModelUserName];
+    self.avatar = [aDecoder decodeObjectForKey:kEvaluateDetailModelAvatar];
+    self.endTime = [aDecoder decodeObjectForKey:kEvaluateDetailModelEndTime];
+    self.subjectName = [aDecoder decodeObjectForKey:kEvaluateDetailModelSubjectName];
+    self.courseScheduleId = [aDecoder decodeObjectForKey:kEvaluateDetailModelCourseScheduleId];
     self.createTime = [aDecoder decodeObjectForKey:kEvaluateDetailModelCreateTime];
-    self.studentReplied = [aDecoder decodeObjectForKey:kEvaluateDetailModelStudentReplied];
+    self.score = [aDecoder decodeDoubleForKey:kEvaluateDetailModelScore];
+    self.studentId = [aDecoder decodeObjectForKey:kEvaluateDetailModelStudentId];
+    self.startTime = [aDecoder decodeObjectForKey:kEvaluateDetailModelStartTime];
     return self;
 }
 
 - (void)encodeWithCoder:(NSCoder *)aCoder
 {
 
-    [aCoder encodeObject:_courseGroupType forKey:kEvaluateDetailModelCourseGroupType];
-    [aCoder encodeObject:_courseScheduleId forKey:kEvaluateDetailModelCourseScheduleId];
     [aCoder encodeObject:_courseGroupId forKey:kEvaluateDetailModelCourseGroupId];
+    [aCoder encodeObject:_classDate forKey:kEvaluateDetailModelClassDate];
+    [aCoder encodeObject:_internalBaseClassIdentifier forKey:kEvaluateDetailModelId];
+    [aCoder encodeObject:_realName forKey:kEvaluateDetailModelRealName];
+    [aCoder encodeObject:_studentReplied forKey:kEvaluateDetailModelStudentReplied];
+    [aCoder encodeObject:_status forKey:kEvaluateDetailModelStatus];
     [aCoder encodeObject:_updateTime forKey:kEvaluateDetailModelUpdateTime];
-    [aCoder encodeObject:_studentId forKey:kEvaluateDetailModelStudentId];
     [aCoder encodeObject:_teacherReplied forKey:kEvaluateDetailModelTeacherReplied];
-    [aCoder encodeDouble:_score forKey:kEvaluateDetailModelScore];
-    [aCoder encodeObject:_internalBaseClassIdentifier forKey:kEvaluateDetailModelId];
+    [aCoder encodeObject:_subjectId forKey:kEvaluateDetailModelSubjectId];
+    [aCoder encodeObject:_courseGroupType forKey:kEvaluateDetailModelCourseGroupType];
+    [aCoder encodeObject:_userName forKey:kEvaluateDetailModelUserName];
+    [aCoder encodeObject:_avatar forKey:kEvaluateDetailModelAvatar];
+    [aCoder encodeObject:_endTime forKey:kEvaluateDetailModelEndTime];
+    [aCoder encodeObject:_subjectName forKey:kEvaluateDetailModelSubjectName];
+    [aCoder encodeObject:_courseScheduleId forKey:kEvaluateDetailModelCourseScheduleId];
     [aCoder encodeObject:_createTime forKey:kEvaluateDetailModelCreateTime];
-    [aCoder encodeObject:_studentReplied forKey:kEvaluateDetailModelStudentReplied];
+    [aCoder encodeDouble:_score forKey:kEvaluateDetailModelScore];
+    [aCoder encodeObject:_studentId forKey:kEvaluateDetailModelStudentId];
+    [aCoder encodeObject:_startTime forKey:kEvaluateDetailModelStartTime];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -143,16 +197,25 @@ NSString *const kEvaluateDetailModelStudentReplied = @"studentReplied";
     
     if (copy) {
 
-        copy.courseGroupType = [self.courseGroupType copyWithZone:zone];
-        copy.courseScheduleId = [self.courseScheduleId copyWithZone:zone];
         copy.courseGroupId = [self.courseGroupId copyWithZone:zone];
+        copy.classDate = [self.classDate copyWithZone:zone];
+        copy.internalBaseClassIdentifier = [self.internalBaseClassIdentifier copyWithZone:zone];
+        copy.realName = [self.realName copyWithZone:zone];
+        copy.studentReplied = [self.studentReplied copyWithZone:zone];
+        copy.status = [self.status copyWithZone:zone];
         copy.updateTime = [self.updateTime copyWithZone:zone];
-        copy.studentId = [self.studentId copyWithZone:zone];
         copy.teacherReplied = [self.teacherReplied copyWithZone:zone];
-        copy.score = self.score;
-        copy.internalBaseClassIdentifier = [self.internalBaseClassIdentifier copyWithZone:zone];
+        copy.subjectId = [self.subjectId copyWithZone:zone];
+        copy.courseGroupType = [self.courseGroupType copyWithZone:zone];
+        copy.userName = [self.userName copyWithZone:zone];
+        copy.avatar = [self.avatar copyWithZone:zone];
+        copy.endTime = [self.endTime copyWithZone:zone];
+        copy.subjectName = [self.subjectName copyWithZone:zone];
+        copy.courseScheduleId = [self.courseScheduleId copyWithZone:zone];
         copy.createTime = [self.createTime copyWithZone:zone];
-        copy.studentReplied = [self.studentReplied copyWithZone:zone];
+        copy.score = self.score;
+        copy.studentId = [self.studentId copyWithZone:zone];
+        copy.startTime = [self.startTime copyWithZone:zone];
     }
     
     return copy;

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

@@ -140,7 +140,7 @@
 }
 
 - (CGFloat)getViewHeight {
-    return 180;
+    return 162;
 }
 
 - (IBAction)authDetail:(id)sender {

+ 10 - 10
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHeadView.xib

@@ -10,18 +10,18 @@
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
         <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="HomeHeadView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="180"/>
+            <rect key="frame" x="0.0" y="0.0" width="414" height="162"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_ikon" translatesAutoresizingMaskIntoConstraints="NO" id="Keh-u1-LE5">
-                    <rect key="frame" x="186" y="18" width="228" height="162"/>
+                    <rect key="frame" x="186" y="0.0" width="228" height="162"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="162" id="FOy-ad-3p4"/>
                         <constraint firstAttribute="width" constant="228" id="mGD-5s-cGh"/>
                     </constraints>
                 </imageView>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="Vp5-5Y-h2u">
-                    <rect key="frame" x="14" y="34" width="52" height="52"/>
+                    <rect key="frame" x="14" y="4" width="52" height="52"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="52" id="FJu-vr-s7W"/>
                         <constraint firstAttribute="width" constant="52" id="XJ8-G5-ru8"/>
@@ -33,7 +33,7 @@
                     </userDefinedRuntimeAttributes>
                 </imageView>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Bxq-wl-TlW">
-                    <rect key="frame" x="76" y="67" width="90" height="19"/>
+                    <rect key="frame" x="76" y="37" width="90" height="19"/>
                     <subviews>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lpX-9C-A9n" customClass="KSStarView">
                             <rect key="frame" x="0.0" y="0.0" width="90" height="19"/>
@@ -51,13 +51,13 @@
                     </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="xs8-aA-tdP">
-                    <rect key="frame" x="76" y="40" width="37" height="22"/>
+                    <rect key="frame" x="76" y="10" width="37" height="22"/>
                     <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                     <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QKO-WL-PjF">
-                    <rect key="frame" x="0.0" y="100" width="207" height="80"/>
+                    <rect key="frame" x="0.0" y="70" width="207" height="80"/>
                     <subviews>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ovR-cP-u0n">
                             <rect key="frame" x="0.0" y="0.0" width="69" height="80"/>
@@ -166,7 +166,7 @@
                     </constraints>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ixV-E1-X1x">
-                    <rect key="frame" x="0.0" y="100" width="207" height="80"/>
+                    <rect key="frame" x="0.0" y="70" width="207" height="80"/>
                     <subviews>
                         <view tag="1001" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HsO-mZ-asE">
                             <rect key="frame" x="14" y="5" width="112.5" height="42"/>
@@ -256,14 +256,14 @@
                     </constraints>
                 </view>
                 <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="teacherAuth_logo" translatesAutoresizingMaskIntoConstraints="NO" id="BgO-43-Wsb">
-                    <rect key="frame" x="123" y="40" width="53" height="22"/>
+                    <rect key="frame" x="123" y="10" width="53" height="22"/>
                     <constraints>
                         <constraint firstAttribute="width" constant="53" id="9GO-UE-0ar"/>
                         <constraint firstAttribute="height" constant="22" id="Yi8-08-7BF"/>
                     </constraints>
                 </imageView>
                 <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="musicianAuth_logo" translatesAutoresizingMaskIntoConstraints="NO" id="3fi-Mc-0oP">
-                    <rect key="frame" x="180" y="40" width="61" height="22"/>
+                    <rect key="frame" x="180" y="10" width="61" height="22"/>
                     <constraints>
                         <constraint firstAttribute="width" constant="61" id="3Nz-yk-dD3"/>
                         <constraint firstAttribute="height" constant="22" id="84M-Rs-Qki"/>
@@ -275,7 +275,7 @@
                 <constraint firstItem="Bxq-wl-TlW" firstAttribute="leading" secondItem="xs8-aA-tdP" secondAttribute="leading" id="7RR-w2-2XX"/>
                 <constraint firstItem="QKO-WL-PjF" firstAttribute="top" secondItem="ixV-E1-X1x" secondAttribute="top" id="9ca-DC-xzk"/>
                 <constraint firstItem="BgO-43-Wsb" firstAttribute="leading" secondItem="xs8-aA-tdP" secondAttribute="trailing" constant="10" id="9d8-9B-eG1"/>
-                <constraint firstAttribute="bottom" secondItem="QKO-WL-PjF" secondAttribute="bottom" id="BP0-cm-2XI"/>
+                <constraint firstAttribute="bottom" secondItem="QKO-WL-PjF" secondAttribute="bottom" constant="12" id="BP0-cm-2XI"/>
                 <constraint firstItem="Bxq-wl-TlW" firstAttribute="top" secondItem="xs8-aA-tdP" secondAttribute="bottom" constant="5" id="DCH-Eo-fVc"/>
                 <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="3fi-Mc-0oP" secondAttribute="trailing" constant="10" id="DeN-Bs-2kD"/>
                 <constraint firstItem="3fi-Mc-0oP" firstAttribute="leading" secondItem="BgO-43-Wsb" secondAttribute="trailing" constant="4" id="EfU-XF-s6S"/>

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNavView.xib

@@ -16,7 +16,7 @@
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vOh-9c-b3r">
                     <rect key="frame" x="0.0" y="32" width="414" height="44"/>
                     <subviews>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_head_title" translatesAutoresizingMaskIntoConstraints="NO" id="dZB-va-AMI">
+                        <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_head_title" translatesAutoresizingMaskIntoConstraints="NO" id="dZB-va-AMI">
                             <rect key="frame" x="14" y="11.5" width="75" height="21"/>
                         </imageView>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qSz-FE-UVP">

+ 7 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/Controller/AddressListViewController.h

@@ -6,11 +6,18 @@
 //
 
 #import "KSBaseViewController.h"
+#import "AddressListModel.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
+typedef void(^ChooseAddressCallback)(AddressListModel *model);
+
 @interface AddressListViewController : KSBaseViewController
 
+@property (nonatomic, assign) BOOL isChooseAddress;
+
+- (void)chooseAddressAction:(ChooseAddressCallback)callback;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 16 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/AddressList/Controller/AddressListViewController.m

@@ -9,7 +9,6 @@
 #import "MyAddressListCell.h"
 #import "AddressBottomView.h"
 #import "AddressDetailViewController.h"
-#import "AddressListModel.h"
 #import "KSImageAlert.h"
 @interface AddressListViewController ()<UITableViewDataSource,UITableViewDelegate>
 
@@ -17,10 +16,18 @@
 
 @property (nonatomic, strong) AddressBottomView *bottomView;
 
+@property (nonatomic, copy) ChooseAddressCallback callback;
+
 @end
 
 @implementation AddressListViewController
 
+- (void)chooseAddressAction:(ChooseAddressCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
@@ -120,6 +127,14 @@
     [self.navigationController pushViewController:ctrl animated:YES];
 }
 
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.callback) {
+        AddressListModel *model = self.dataArray[indexPath.row];
+        self.callback(model);
+        [self backAction];
+    }
+}
+
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
     return YES;
 }

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

@@ -21,7 +21,7 @@
 #import "MyStyleViewController.h"
 #import "MyBankCardViewController.h"
 #import "MyCourseViewController.h"
-
+#import "UserSettingViewController.h"
 
 @interface MineViewController ()
 
@@ -227,6 +227,12 @@
             [self.navigationController pushViewController:ctrl animated:YES];
         }
             break;
+        case MINEVIEWTYPE_USERSETTING: // 用户设置
+        {
+            UserSettingViewController *ctrl = [[UserSettingViewController alloc] init];
+            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+            break;
         default:
             break;
     }

+ 35 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Controller/InstrumentChooseViewController.m

@@ -50,11 +50,45 @@
         make.bottom.mas_equalTo(self.view.mas_bottom).offset(-iPhoneXSafeBottomMargin);
         make.height.mas_equalTo(90);
     }];
+    
+    UIView *headView = [[UIView alloc] init];
+    headView.layer.backgroundColor = [UIColor whiteColor].CGColor;
+    [self.view addSubview:headView];
+    [headView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(self.view.mas_top).mas_offset(10);
+        make.left.mas_equalTo(self.view.mas_left).offset(14.0f);
+        make.right.mas_equalTo(self.view.mas_right).offset(-14.0f);
+        make.height.mas_equalTo(36.0f);
+    }];
+    
+    
+    CAGradientLayer * gradientLayer = [CAGradientLayer layer];
+    gradientLayer.colors = @[(__bridge id)HexRGB(0xFFF6EE).CGColor,(__bridge id)HexRGB(0xFFECDD).CGColor];
+    gradientLayer.startPoint = CGPointMake(0.04, 0);
+    gradientLayer.endPoint = CGPointMake(0.97, 1.07);
+    gradientLayer.frame = CGRectMake(0, 0, kScreenWidth - 28, 36);
+    gradientLayer.locations = @[@(0),@(1)];
+    [headView.layer addSublayer:gradientLayer];
+    headView.layer.cornerRadius = 10.0f;
+    headView.layer.masksToBounds = YES;
+    
+    UILabel *tipsLabel = [[UILabel alloc] init];
+    tipsLabel.text = @"最多可选择5个乐器";
+    tipsLabel.textColor = HexRGB(0xFF9E5A);
+    tipsLabel.font = [UIFont systemFontOfSize:14.0f];
+    [headView addSubview:tipsLabel];
+    [tipsLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(headView.mas_left).offset(11.0f);
+        make.right.mas_equalTo(headView.mas_right).offset(-11.0f);
+        make.height.mas_equalTo(22.0f);
+        make.centerY.mas_equalTo(headView.mas_centerY);
+    }];
+    
     [self.view addSubview:self.collectionView];
     [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.mas_equalTo(self.view.mas_left).offset(15);
         make.right.mas_equalTo(self.view.mas_right).offset(-15);
-        make.top.mas_equalTo(self.view.mas_top);
+        make.top.mas_equalTo(headView.mas_bottom);
         make.bottom.mas_equalTo(self.bottomView.mas_top);
     }];
 }

+ 3 - 204
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/SettingViewController.m

@@ -7,21 +7,13 @@
 
 #import "SettingViewController.h"
 #import "SettingBodyView.h"
-#import "RCConnectionManager.h"
-#import "LoginViewController.h"
-#import "AppDelegate.h"
-#import "CustomNavViewController.h"
-#import "JPUSHService.h"
 #import "KSBaseWKWebViewController.h"
-#import "ModifyNameViewController.h"
-#import "ModifyViewController.h"
-#import "ModifyPhoneCheckController.h"
-#import "KSChoosePicker.h"
-#import "KSMediaManager.h"
+
 #import "FeedbackViewController.h"
 #import "AboutUsViewController.h"
 #import "UserInfoManager.h"
 #import "AddressListViewController.h"
+#import "UserAuthViewController.h"
 
 @interface SettingViewController ()
  
@@ -29,8 +21,6 @@
 
 @property (nonatomic, strong) NSString *userSex;
 
-@property (nonatomic, strong) KSMediaManager *mediaManager;
-
 @property (nonatomic, strong) UserInfo *mineInfo;
 
 @end
@@ -42,45 +32,9 @@
     // Do any additional setup after loading the view.
     [self allocTitle:@"设置"];
     [self configUI];
-    [self requestUserMessage];
 }
 
-- (void)requestUserMessage {
-    
-    [USER_MANAGER queryUserInfoCallback:^(UserInfo * _Nonnull userInfo) {
-        self.mineInfo = userInfo;
-        [self configMessage];
-    }];
-}
 
-- (void)configMessage {
-    if (![NSString isEmptyString:self.mineInfo.avatar]) {
-        [self.bodyView.userAvatal sd_setImageWithURL:[NSURL URLWithString:[self.mineInfo.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
-    }
-    else {
-        [self.bodyView.userAvatal setImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
-    }
-    self.bodyView.nickNameLabel.text = [NSString returnNoNullStringWithString:self.mineInfo.username];
-    NSString *userSex = @"";
-    if ([self.mineInfo.gender isEqualToString:@"1"]) {
-        userSex = @"男";
-        self.userSex = @"1";
-    }
-    else {
-        userSex = @"女";
-        self.userSex = @"0";
-    }
-    self.bodyView.genderLabel.text = userSex;
-    self.bodyView.phoneLabel.text = [NSString returnNoNullStringWithString:self.mineInfo.phone];
-    NSString *authStatus = @"";
-    if (USER_MANAGER.hasAuth) {
-        authStatus = @"已认证";
-    }
-    else {
-        authStatus = @"未认证";
-    }
-    self.bodyView.authStatusLabel.text = authStatus;
-}
 
 - (void)configUI {
     [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) {
@@ -89,8 +43,7 @@
         make.bottom.mas_equalTo(self.view.mas_bottom).offset(-iPhoneXSafeBottomMargin);
     }];
     self.bodyView = [SettingBodyView shareInstance];
-    CGFloat height = [self.bodyView getViewHeight];
-    CGFloat viewHeight = height > KPortraitHeight - kNaviBarHeight - iPhoneXSafeBottomMargin ? height : KPortraitHeight - kNaviBarHeight - iPhoneXSafeBottomMargin;
+    CGFloat viewHeight = KPortraitHeight - kNaviBarHeight - iPhoneXSafeBottomMargin;
     [self.scrollView addSubview:self.bodyView];
     [self.bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.top.mas_equalTo(self.scrollView.mas_top);
@@ -107,44 +60,6 @@
 
 - (void)operationAction:(SETTINGACTION)type {
     switch (type) {
-        case SETTINGACTION_AVATAL: // 头像
-        {
-            [self chooseImage];
-        }
-            break;
-        case SETTINGACTION_NAME:
-        {
-            ModifyNameViewController *nameCtrl = [[ModifyNameViewController alloc] init];
-            nameCtrl.preNickName = self.mineInfo.username;
-            MJWeakSelf;
-            [nameCtrl successCallback:^{
-                [weakSelf requestUserMessage];
-            }];
-            [self.navigationController pushViewController:nameCtrl animated:YES];
-        }
-            break;
-        case SETTINGACTION_SEX:
-        {
-            [self showModifySexAlert];
-        }
-            break;
-        case SETTINGACTION_PHONE:
-        {
-            ModifyPhoneCheckController *checkCtrl = [[ModifyPhoneCheckController alloc] init];
-            [self.navigationController pushViewController:checkCtrl animated:YES];
-        }
-            break;
-        case SETTINGACTION_PWD:
-        {
-            ModifyViewController *modifyVC = [[ModifyViewController alloc] init];
-            [self.navigationController pushViewController:modifyVC animated:YES];
-        }
-            break;
-        case SETTINGACTION_VEFI:
-        {
-            
-        }
-            break;
         case SETTINGACTION_ADDRESS:
         {
             AddressListViewController *ctrl = [[AddressListViewController alloc] init];
@@ -175,127 +90,11 @@
             [self.navigationController pushViewController:aboutUs animated:YES];
         }
             break;
-        case SETTINGACTION_LOGOUT: // 退出登录
-        {
-            [self logoutAction];
-        }
-            break;
         default:
             break;
     }
 }
 
-- (void)chooseImage {
-    // 调用相册
-    self.mediaManager = [[KSMediaManager alloc] init];
-    self.mediaManager.mediaType = MEDIATYPE_PHOTO;
-    self.mediaManager.maxPhotoNumber = 1;
-    self.mediaManager.baseCtrl = self;
-    self.mediaManager.needCropImage = NO;
-    MJWeakSelf;
-    [self.mediaManager noAlertCallback:^(NSString * _Nullable videoUrl, NSMutableArray * _Nullable imageArray, NSMutableArray * _Nullable imageAsset) {
-        UIImage *sendImg = [imageArray lastObject];
-        [weakSelf updateWithUserLogo:sendImg];
-    }];
-    [self.mediaManager pushImagePickerController];
-}
-
-- (void)updateWithUserLogo:(UIImage *)image {
-    NSData *imgData = [UIImage turnsImaegDataByImage:image];
-    NSString *fileName = @"image";
-    [[KSUploadManager shareInstance] uploadImage:imgData fileName:fileName successCallback:^(NSMutableArray * _Nonnull fileUrlArray) {
-        NSString *avatarUrl = [fileUrlArray lastObject];
-        [self modifyUserMessage:avatarUrl gender:nil];
-    } faliure:^(NSError * _Nullable error, NSString *descMessaeg) {
-        if ([NSString isEmptyString:descMessaeg]) {
-            [self MBPShow:descMessaeg];
-        }
-    }];
-}
-
-- (void)modifyUserMessage:(NSString *)imgUrl gender:(NSString *)gender {
-    NSString *userName = nil;
-    [self showhud];
-    [KSNetworkingManager modifyTeacherMessage:KS_POST avatal:imgUrl gender:gender username:userName success:^(NSDictionary * _Nonnull dic) {
-        [self removehub];
-        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-            [self MBPShow:@"修改成功"];
-            [self requestUserMessage];
-        }
-        else {
-            [self MBPShow:MESSAGEKEY];
-        }
-    } faliure:^(NSError * _Nonnull error) {
-        [self removehub];
-    }];
-}
-
-
-
-- (void)showModifySexAlert {
-    NSString *titleString = @"选择性别";
-    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:titleString preferredStyle:IS_IPAD ? UIAlertControllerStyleAlert : UIAlertControllerStyleActionSheet];
-    NSMutableAttributedString *titleAtt = [[NSMutableAttributedString alloc] initWithString:titleString];
-    [titleAtt addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0f] range:NSMakeRange(0, titleString.length)];
-    [titleAtt addAttribute:NSForegroundColorAttributeName value:HexRGB(0x999999) range:NSMakeRange(0, titleString.length)];
-    [alertVC setValue:titleAtt forKey:@"attributedMessage"];
-    UIAlertAction *actionOne = [UIAlertAction actionWithTitle:@"男" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
-        
-        self.bodyView.genderLabel.text = @"男";
-        self.userSex = @"1";
-        [self modifyUserSex];
-    }];
-    [actionOne setValue:THEMECOLOR forKey:@"_titleTextColor"];
-    [alertVC addAction:actionOne];
-    UIAlertAction *actionTwo = [UIAlertAction actionWithTitle:@"女" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
-        
-        self.bodyView.genderLabel.text = @"女";
-        self.userSex = @"0";
-        [self modifyUserSex];
-    }];
-    [actionTwo setValue:THEMECOLOR forKey:@"_titleTextColor"];
-    [alertVC addAction:actionTwo];
-    
-    UIAlertAction *cancleAlert = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
-        
-    }];
-    [alertVC addAction:cancleAlert];
-    [cancleAlert setValue:HexRGB(0x444444) forKey:@"_titleTextColor"];
-    alertVC.modalPresentationStyle = UIModalPresentationFullScreen;
-    [self presentViewController:alertVC animated:true completion:nil];
-}
-
-- (void)modifyUserSex {
-    // 更新性别
-    [self modifyUserMessage:nil gender:self.userSex];
-}
-
-- (void)logoutAction {
-    [KSNetworkingManager logoutRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
-        [self clearSource];
-    } faliure:^(NSError * _Nonnull error) {
-        [self clearSource];
-    }];
-}
-
-- (void)clearSource {
-    [RCConnectionManager shareManager].isNeedJoin = NO;
-    [RCConnectionManager shareManager].isNeedShowMessage = NO;
-    [[RCIM sharedRCIM] logout];
-    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
-    // 取消推送别名
-    [JPUSHService deleteAlias:nil seq:0];
-    [[NSUserDefaults standardUserDefaults] removeObjectForKey:TokenKey];
-    [[NSUserDefaults standardUserDefaults] removeObjectForKey:Token_type];
-    [[NSUserDefaults standardUserDefaults] removeObjectForKey:RefreshToken];
-    [[NSUserDefaults standardUserDefaults] removeObjectForKey:RongTokenKey];
-    [[NSUserDefaults standardUserDefaults] synchronize];
-    [KSNetworkingManager clearRequestHeader];
-    LoginViewController *loginVC = [[LoginViewController alloc] init];
-    CustomNavViewController *navCtrl = [[CustomNavViewController alloc] initWithRootViewController:loginVC];
-    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
-    appDelegate.window.rootViewController = navCtrl;
-}
 /*
 #pragma mark - Navigation
 

+ 20 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/UserAuthViewController.h

@@ -0,0 +1,20 @@
+//
+//  UserAuthViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/27.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^AuthSuccessCallback)(void);
+/// 实名认证
+@interface UserAuthViewController : KSBaseViewController
+
+- (void)sureCallback:(AuthSuccessCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 85 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/UserAuthViewController.m

@@ -0,0 +1,85 @@
+//
+//  UserAuthViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/27.
+//
+
+#import "UserAuthViewController.h"
+#import "UserAuthBodyView.h"
+
+@interface UserAuthViewController ()
+
+@property (nonatomic, strong) UserAuthBodyView *bodyView;
+
+@property (nonatomic, copy) AuthSuccessCallback callback;
+
+@end
+
+@implementation UserAuthViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"实名认证"];
+    [self configUI];
+}
+
+- (void)configUI {
+    self.bodyView = [UserAuthBodyView shareInstance];
+    [self.scrollView removeFromSuperview];
+    [self.view addSubview:self.bodyView];
+    [self.bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.left.mas_equalTo(self.view);
+    }];
+    MJWeakSelf;
+    [self.bodyView sureAuthCall:^{
+        [weakSelf authAction];
+    }];
+}
+
+- (void)sureCallback:(AuthSuccessCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+- (void)authAction {
+    if ([NSString isEmptyString:self.bodyView.nameField.text]) {
+        [self MBPShow:@"请输入姓名"];
+        return;
+    }
+    else if ([NSString isEmptyString:self.bodyView.cardField.text]) {
+        [self MBPShow:@"请输入身份证号"];
+        return;
+    }
+    [self showhud];
+    [KSNetworkingManager realNameAuthRequest:KS_POST idCardNo:self.bodyView.cardField.text realName:self.bodyView.nameField.text success:^(NSDictionary * _Nonnull dic) {
+        [self removehub];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            MJWeakSelf;
+            [self KSShowMsg:@"认证成功" promptCompletion:^{
+                [weakSelf backAction];
+                if (self.callback) {
+                    self.callback();
+                }
+            }];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+    }];
+}
+
+/*
+#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/Mine/Setting/Controller/UserSettingViewController.h

@@ -0,0 +1,16 @@
+//
+//  UserSettingViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/27.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UserSettingViewController : KSBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 281 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/UserSettingViewController.m

@@ -0,0 +1,281 @@
+//
+//  UserSettingViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/27.
+//
+
+#import "UserSettingViewController.h"
+#import "UseBodyView.h"
+#import "RCConnectionManager.h"
+#import "LoginViewController.h"
+#import "AppDelegate.h"
+#import "CustomNavViewController.h"
+#import "JPUSHService.h"
+#import "KSBaseWKWebViewController.h"
+#import "ModifyNameViewController.h"
+#import "ModifyViewController.h"
+#import "ModifyPhoneCheckController.h"
+#import "KSChoosePicker.h"
+#import "KSMediaManager.h"
+#import "UserAuthViewController.h"
+#import "UserInfoManager.h"
+
+@interface UserSettingViewController ()
+
+@property (nonatomic, strong) UseBodyView *bodyView;
+
+@property (nonatomic, strong) NSString *userSex;
+
+@property (nonatomic, strong) KSMediaManager *mediaManager;
+
+@property (nonatomic, strong) UserInfo *mineInfo;
+@end
+
+@implementation UserSettingViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"设置"];
+    [self configUI];
+    [self requestUserMessage];
+}
+
+- (void)requestUserMessage {
+    
+    [USER_MANAGER queryUserInfoCallback:^(UserInfo * _Nonnull userInfo) {
+        self.mineInfo = userInfo;
+        [self configMessage];
+    }];
+}
+
+- (void)configMessage {
+    if (![NSString isEmptyString:self.mineInfo.avatar]) {
+        [self.bodyView.userAvatal sd_setImageWithURL:[NSURL URLWithString:[self.mineInfo.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    }
+    else {
+        [self.bodyView.userAvatal setImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    }
+    self.bodyView.nickNameLabel.text = [NSString returnNoNullStringWithString:self.mineInfo.username];
+    NSString *userSex = @"";
+    if ([self.mineInfo.gender isEqualToString:@"1"]) {
+        userSex = @"男";
+        self.userSex = @"1";
+    }
+    else {
+        userSex = @"女";
+        self.userSex = @"0";
+    }
+    self.bodyView.genderLabel.text = userSex;
+    self.bodyView.phoneLabel.text = [NSString returnNoNullStringWithString:self.mineInfo.phone];
+    NSString *authStatus = @"";
+    if (USER_MANAGER.hasAuth) {
+        authStatus = @"已认证";
+    }
+    else {
+        authStatus = @"未认证";
+    }
+    self.bodyView.authStatusLabel.text = authStatus;
+}
+
+- (void)configUI {
+    [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.view.mas_top);
+        make.bottom.mas_equalTo(self.view.mas_bottom).offset(-iPhoneXSafeBottomMargin);
+    }];
+    self.bodyView = [UseBodyView shareInstance];
+    CGFloat viewHeight = KPortraitHeight - kNaviBarHeight - iPhoneXSafeBottomMargin;
+    [self.scrollView addSubview:self.bodyView];
+    [self.bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(self.scrollView.mas_top);
+        make.right.left.mas_equalTo(self.view);
+        make.height.mas_equalTo(viewHeight);
+    }];
+    [self.scrollView setContentSize:CGSizeMake(kScreenWidth, viewHeight)];
+    KSWeakSelf(weakSelf);
+    [self.bodyView userSettingAction:^(USERSETTING type) {
+        [weakSelf operationAction:type];
+    }];
+}
+
+- (void)operationAction:(USERSETTING)type {
+    switch (type) {
+        case USERSETTING_AVATAL: // 头像
+        {
+            [self chooseImage];
+        }
+            break;
+        case USERSETTING_NAME:
+        {
+            ModifyNameViewController *nameCtrl = [[ModifyNameViewController alloc] init];
+            nameCtrl.preNickName = self.mineInfo.username;
+            MJWeakSelf;
+            [nameCtrl successCallback:^{
+                [weakSelf requestUserMessage];
+            }];
+            [self.navigationController pushViewController:nameCtrl animated:YES];
+        }
+            break;
+        case USERSETTING_SEX:
+        {
+            [self showModifySexAlert];
+        }
+            break;
+        case USERSETTING_PHONE:
+        {
+            ModifyPhoneCheckController *checkCtrl = [[ModifyPhoneCheckController alloc] init];
+            [self.navigationController pushViewController:checkCtrl animated:YES];
+        }
+            break;
+        case USERSETTING_PWD:
+        {
+            ModifyViewController *modifyVC = [[ModifyViewController alloc] init];
+            [self.navigationController pushViewController:modifyVC animated:YES];
+        }
+            break;
+        case USERSETTING_VEFI:
+        {
+            if (USER_MANAGER.hasAuth == NO) {
+                UserAuthViewController *ctrl = [[UserAuthViewController alloc] init];
+                MJWeakSelf;
+                [ctrl sureCallback:^{
+                    [weakSelf requestUserMessage];
+                }];
+                [self.navigationController pushViewController:ctrl animated:YES];
+            }
+        }
+            break;
+        case USERSETTING_LOGOUT:
+        {
+            [self logoutAction];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)chooseImage {
+    // 调用相册
+    self.mediaManager = [[KSMediaManager alloc] init];
+    self.mediaManager.mediaType = MEDIATYPE_PHOTO;
+    self.mediaManager.maxPhotoNumber = 1;
+    self.mediaManager.baseCtrl = self;
+    self.mediaManager.needCropImage = NO;
+    MJWeakSelf;
+    [self.mediaManager noAlertCallback:^(NSString * _Nullable videoUrl, NSMutableArray * _Nullable imageArray, NSMutableArray * _Nullable imageAsset) {
+        UIImage *sendImg = [imageArray lastObject];
+        [weakSelf updateWithUserLogo:sendImg];
+    }];
+    [self.mediaManager pushImagePickerController];
+}
+
+- (void)updateWithUserLogo:(UIImage *)image {
+    NSData *imgData = [UIImage turnsImaegDataByImage:image];
+    NSString *fileName = @"image";
+    [[KSUploadManager shareInstance] uploadImage:imgData fileName:fileName successCallback:^(NSMutableArray * _Nonnull fileUrlArray) {
+        NSString *avatarUrl = [fileUrlArray lastObject];
+        [self modifyUserMessage:avatarUrl gender:nil];
+    } faliure:^(NSError * _Nullable error, NSString *descMessaeg) {
+        if ([NSString isEmptyString:descMessaeg]) {
+            [self MBPShow:descMessaeg];
+        }
+    }];
+}
+
+- (void)modifyUserMessage:(NSString *)imgUrl gender:(NSString *)gender {
+    NSString *userName = nil;
+    [self showhud];
+    [KSNetworkingManager modifyTeacherMessage:KS_POST avatal:imgUrl gender:gender username:userName success:^(NSDictionary * _Nonnull dic) {
+        [self removehub];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            [self MBPShow:@"修改成功"];
+            [self requestUserMessage];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+    }];
+}
+
+
+
+- (void)showModifySexAlert {
+    NSString *titleString = @"选择性别";
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:titleString preferredStyle:IS_IPAD ? UIAlertControllerStyleAlert : UIAlertControllerStyleActionSheet];
+    NSMutableAttributedString *titleAtt = [[NSMutableAttributedString alloc] initWithString:titleString];
+    [titleAtt addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0f] range:NSMakeRange(0, titleString.length)];
+    [titleAtt addAttribute:NSForegroundColorAttributeName value:HexRGB(0x999999) range:NSMakeRange(0, titleString.length)];
+    [alertVC setValue:titleAtt forKey:@"attributedMessage"];
+    UIAlertAction *actionOne = [UIAlertAction actionWithTitle:@"男" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        
+        self.bodyView.genderLabel.text = @"男";
+        self.userSex = @"1";
+        [self modifyUserSex];
+    }];
+    [actionOne setValue:THEMECOLOR forKey:@"_titleTextColor"];
+    [alertVC addAction:actionOne];
+    UIAlertAction *actionTwo = [UIAlertAction actionWithTitle:@"女" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        
+        self.bodyView.genderLabel.text = @"女";
+        self.userSex = @"0";
+        [self modifyUserSex];
+    }];
+    [actionTwo setValue:THEMECOLOR forKey:@"_titleTextColor"];
+    [alertVC addAction:actionTwo];
+    
+    UIAlertAction *cancleAlert = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
+        
+    }];
+    [alertVC addAction:cancleAlert];
+    [cancleAlert setValue:HexRGB(0x444444) forKey:@"_titleTextColor"];
+    alertVC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:alertVC animated:true completion:nil];
+}
+
+- (void)modifyUserSex {
+    // 更新性别
+    [self modifyUserMessage:nil gender:self.userSex];
+}
+
+- (void)logoutAction {
+    [KSNetworkingManager logoutRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
+        [self clearSource];
+    } faliure:^(NSError * _Nonnull error) {
+        [self clearSource];
+    }];
+}
+
+- (void)clearSource {
+    [RCConnectionManager shareManager].isNeedJoin = NO;
+    [RCConnectionManager shareManager].isNeedShowMessage = NO;
+    [[RCIM sharedRCIM] logout];
+    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
+    // 取消推送别名
+    [JPUSHService deleteAlias:nil seq:0];
+    [[NSUserDefaults standardUserDefaults] removeObjectForKey:TokenKey];
+    [[NSUserDefaults standardUserDefaults] removeObjectForKey:Token_type];
+    [[NSUserDefaults standardUserDefaults] removeObjectForKey:RefreshToken];
+    [[NSUserDefaults standardUserDefaults] removeObjectForKey:RongTokenKey];
+    [[NSUserDefaults standardUserDefaults] synchronize];
+    [KSNetworkingManager clearRequestHeader];
+    LoginViewController *loginVC = [[LoginViewController alloc] init];
+    CustomNavViewController *navCtrl = [[CustomNavViewController alloc] initWithRootViewController:loginVC];
+    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+    appDelegate.window.rootViewController = navCtrl;
+}
+/*
+#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

+ 1 - 20
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/SettingBodyView.h

@@ -8,18 +8,11 @@
 #import <UIKit/UIKit.h>
 
 typedef NS_ENUM(NSInteger, SETTINGACTION) {
-    SETTINGACTION_AVATAL = 1001, // 头像
-    SETTINGACTION_NAME,  // 修改姓名
-    SETTINGACTION_SEX,   // 修改性别
-    SETTINGACTION_PHONE, // 修改手机号
-    SETTINGACTION_PWD,   // 修改密码
-    SETTINGACTION_VEFI,  // 实名认证
-    SETTINGACTION_ADDRESS, // 地址
+    SETTINGACTION_ADDRESS = 1007, // 地址
     SETTINGACTION_ONLINECHECK, // 进入教室检测
     SETTINGACTION_PRIVACY,  // 隐私
     SETTINGACTION_FEEEDBACK, // 反馈
     SETTINGACTION_ABOUTUS,  // 关于我们
-    SETTINGACTION_LOGOUT,   // 退出登录
 };
 
 typedef void(^SettingCallback)(SETTINGACTION type);
@@ -28,24 +21,12 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface SettingBodyView : UIView
 
-@property (weak, nonatomic) IBOutlet UIImageView *userAvatal;
-
-@property (weak, nonatomic) IBOutlet UILabel *nickNameLabel;
-
-@property (weak, nonatomic) IBOutlet UILabel *genderLabel;
-
-@property (weak, nonatomic) IBOutlet UILabel *phoneLabel;
-
-@property (weak, nonatomic) IBOutlet UILabel *authStatusLabel;
-
 @property (nonatomic, assign) BOOL enableCheck;
 
 + (instancetype)shareInstance;
 
 - (void)settingAction:(SettingCallback)callback;
 
-- (CGFloat)getViewHeight;
-
 @end
 
 NS_ASSUME_NONNULL_END

+ 1 - 9
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/SettingBodyView.m

@@ -10,6 +10,7 @@
 @interface SettingBodyView ()
 
 @property (nonatomic, copy) SettingCallback callback;
+
 @property (weak, nonatomic) IBOutlet UIButton *switchButton;
 
 @end
@@ -47,15 +48,6 @@
     [self.switchButton setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
 }
 
-- (IBAction)logoutAction:(id)sender {
-    if (self.callback) {
-        self.callback(SETTINGACTION_LOGOUT);
-    }
-}
-
-- (CGFloat)getViewHeight {
-    return 15 + 64 + 12 + 210 + 12 + 160 + 12 + 160 + 25 + 50 + 15;
-}
 
 /*
  // Only override drawRect: if you perform custom drawing.

+ 34 - 452
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/SettingBodyView.xib

@@ -1,10 +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" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
-        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -14,341 +13,11 @@
             <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
-                <view tag="1001" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GuW-h5-PZ3">
-                    <rect key="frame" x="14" y="15" width="386" height="64"/>
-                    <subviews>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="Y0N-Qr-8Oe">
-                            <rect key="frame" x="12" y="8" width="48" height="48"/>
-                            <constraints>
-                                <constraint firstAttribute="width" constant="48" id="0vg-xx-4vW"/>
-                                <constraint firstAttribute="height" constant="48" id="xfx-Ty-fpC"/>
-                            </constraints>
-                            <userDefinedRuntimeAttributes>
-                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="24"/>
-                                </userDefinedRuntimeAttribute>
-                            </userDefinedRuntimeAttributes>
-                        </imageView>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="修改头像" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Jt4-Rh-F5Z">
-                            <rect key="frame" x="289" y="22" width="66" height="20"/>
-                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <nil key="highlightedColor"/>
-                        </label>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="HJw-YK-ybh">
-                            <rect key="frame" x="365" y="26.5" width="6" height="11"/>
-                            <constraints>
-                                <constraint firstAttribute="width" constant="6" id="DB5-Fb-IAg"/>
-                                <constraint firstAttribute="height" constant="11" id="iCm-IC-8hh"/>
-                            </constraints>
-                        </imageView>
-                    </subviews>
-                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                    <gestureRecognizers/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="64" id="0Mn-3n-m8f"/>
-                        <constraint firstItem="HJw-YK-ybh" firstAttribute="centerY" secondItem="Jt4-Rh-F5Z" secondAttribute="centerY" id="937-LO-krE"/>
-                        <constraint firstItem="Y0N-Qr-8Oe" firstAttribute="centerY" secondItem="GuW-h5-PZ3" secondAttribute="centerY" id="E9p-Wf-cl7"/>
-                        <constraint firstItem="HJw-YK-ybh" firstAttribute="leading" secondItem="Jt4-Rh-F5Z" secondAttribute="trailing" constant="10" id="aoA-ZJ-9Ph"/>
-                        <constraint firstItem="Y0N-Qr-8Oe" firstAttribute="leading" secondItem="GuW-h5-PZ3" secondAttribute="leading" constant="12" id="cQl-FA-RxI"/>
-                        <constraint firstAttribute="trailing" secondItem="HJw-YK-ybh" secondAttribute="trailing" constant="15" id="mu8-Mo-LcX"/>
-                        <constraint firstItem="HJw-YK-ybh" firstAttribute="centerY" secondItem="GuW-h5-PZ3" secondAttribute="centerY" id="n8P-y5-oSA"/>
-                    </constraints>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="10"/>
-                        </userDefinedRuntimeAttribute>
-                    </userDefinedRuntimeAttributes>
-                    <connections>
-                        <outletCollection property="gestureRecognizers" destination="hus-UO-UOG" appends="YES" id="xCJ-Fa-R7o"/>
-                    </connections>
-                </view>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0Pf-RE-eZa">
-                    <rect key="frame" x="14" y="91" width="386" height="210"/>
-                    <subviews>
-                        <view tag="1002" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Q6y-w1-LNd">
-                            <rect key="frame" x="0.0" y="5" width="386" height="50"/>
-                            <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="昵称" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vJz-tn-tZw">
-                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="75" id="DrB-dE-4Ey"/>
-                                    </constraints>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9mw-jx-odd">
-                                    <rect key="frame" x="355" y="0.0" width="0.0" height="49"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="Lgj-eb-Lgx">
-                                    <rect key="frame" x="365" y="19.5" width="6" height="11"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="11" id="b7Q-Bd-SeX"/>
-                                        <constraint firstAttribute="width" constant="6" id="kdm-QC-12c"/>
-                                    </constraints>
-                                </imageView>
-                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eE2-1M-Kb0">
-                                    <rect key="frame" x="11" y="49" width="366" height="1"/>
-                                    <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="1" id="N9h-zf-c97"/>
-                                    </constraints>
-                                </view>
-                            </subviews>
-                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <gestureRecognizers/>
-                            <constraints>
-                                <constraint firstItem="9mw-jx-odd" firstAttribute="top" secondItem="Q6y-w1-LNd" secondAttribute="top" id="FbV-O8-sTf"/>
-                                <constraint firstAttribute="trailing" secondItem="Lgj-eb-Lgx" secondAttribute="trailing" constant="15" id="GMd-RJ-7rC"/>
-                                <constraint firstItem="vJz-tn-tZw" firstAttribute="centerY" secondItem="Q6y-w1-LNd" secondAttribute="centerY" id="N1h-pD-eTX"/>
-                                <constraint firstItem="Lgj-eb-Lgx" firstAttribute="centerY" secondItem="Q6y-w1-LNd" secondAttribute="centerY" id="QPW-14-nRd"/>
-                                <constraint firstItem="vJz-tn-tZw" firstAttribute="leading" secondItem="Q6y-w1-LNd" secondAttribute="leading" constant="12" id="USc-5h-JAw"/>
-                                <constraint firstAttribute="height" constant="50" id="XSc-Nx-EEg"/>
-                                <constraint firstItem="Lgj-eb-Lgx" firstAttribute="leading" secondItem="9mw-jx-odd" secondAttribute="trailing" constant="10" id="ZYR-km-gku"/>
-                                <constraint firstItem="9mw-jx-odd" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="vJz-tn-tZw" secondAttribute="trailing" constant="15" id="cbI-Xi-dLD"/>
-                                <constraint firstAttribute="bottom" secondItem="eE2-1M-Kb0" secondAttribute="bottom" id="dVt-NX-VKa"/>
-                                <constraint firstAttribute="trailing" secondItem="eE2-1M-Kb0" secondAttribute="trailing" constant="9" id="huZ-Vl-tKe"/>
-                                <constraint firstItem="eE2-1M-Kb0" firstAttribute="leading" secondItem="Q6y-w1-LNd" secondAttribute="leading" constant="11" id="mxV-5V-bx0"/>
-                                <constraint firstItem="eE2-1M-Kb0" firstAttribute="top" secondItem="9mw-jx-odd" secondAttribute="bottom" id="oIZ-9n-RQB"/>
-                            </constraints>
-                            <connections>
-                                <outletCollection property="gestureRecognizers" destination="O34-NJ-j90" appends="YES" id="a28-Bc-xU0"/>
-                            </connections>
-                        </view>
-                        <view tag="1003" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Tz3-5D-EcJ">
-                            <rect key="frame" x="0.0" y="55" width="386" height="50"/>
-                            <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="性别" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="64I-71-ROr">
-                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="75" id="NmE-d0-zxg"/>
-                                    </constraints>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="5KE-gt-Kwa">
-                                    <rect key="frame" x="365" y="19.5" width="6" height="11"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="11" id="2MY-TL-bTh"/>
-                                        <constraint firstAttribute="width" constant="6" id="cdR-V1-3AA"/>
-                                    </constraints>
-                                </imageView>
-                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vtb-Eb-ZoP">
-                                    <rect key="frame" x="11" y="49" width="366" height="1"/>
-                                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="1" id="FMd-Hn-Tsw"/>
-                                    </constraints>
-                                </view>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eVe-2E-45u">
-                                    <rect key="frame" x="355" y="0.0" width="0.0" height="49"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                            </subviews>
-                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <gestureRecognizers/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="50" id="3UW-Ic-jgq"/>
-                                <constraint firstAttribute="bottom" secondItem="vtb-Eb-ZoP" secondAttribute="bottom" id="9es-cY-VYR"/>
-                                <constraint firstItem="vtb-Eb-ZoP" firstAttribute="top" secondItem="eVe-2E-45u" secondAttribute="bottom" id="DWe-am-cec"/>
-                                <constraint firstItem="eVe-2E-45u" firstAttribute="top" secondItem="Tz3-5D-EcJ" secondAttribute="top" id="Gan-UP-UQT"/>
-                                <constraint firstItem="5KE-gt-Kwa" firstAttribute="leading" secondItem="eVe-2E-45u" secondAttribute="trailing" constant="10" id="TzB-fD-hgb"/>
-                                <constraint firstItem="64I-71-ROr" firstAttribute="centerY" secondItem="Tz3-5D-EcJ" secondAttribute="centerY" id="a5C-Ud-oHs"/>
-                                <constraint firstAttribute="trailing" secondItem="5KE-gt-Kwa" secondAttribute="trailing" constant="15" id="buz-ed-aS9"/>
-                                <constraint firstItem="vtb-Eb-ZoP" firstAttribute="leading" secondItem="Tz3-5D-EcJ" secondAttribute="leading" constant="11" id="cQ7-2T-zfI"/>
-                                <constraint firstItem="5KE-gt-Kwa" firstAttribute="centerY" secondItem="Tz3-5D-EcJ" secondAttribute="centerY" id="lae-Gt-RV9"/>
-                                <constraint firstAttribute="trailing" secondItem="vtb-Eb-ZoP" secondAttribute="trailing" constant="9" id="nag-dP-nlU"/>
-                                <constraint firstItem="eVe-2E-45u" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="64I-71-ROr" secondAttribute="trailing" constant="15" id="ut0-F5-xdL"/>
-                                <constraint firstItem="64I-71-ROr" firstAttribute="leading" secondItem="Tz3-5D-EcJ" secondAttribute="leading" constant="12" id="v95-QD-M07"/>
-                            </constraints>
-                            <connections>
-                                <outletCollection property="gestureRecognizers" destination="0lQ-SW-kEX" appends="YES" id="PJa-SW-D1n"/>
-                            </connections>
-                        </view>
-                        <view tag="1004" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="y2Z-Pu-GKq">
-                            <rect key="frame" x="0.0" y="105" width="386" height="50"/>
-                            <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="手机号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5x9-qj-kzm">
-                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="75" id="91h-tq-at5"/>
-                                    </constraints>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M6z-rl-5CW">
-                                    <rect key="frame" x="355" y="0.0" width="0.0" height="49"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="hP7-NV-Abx">
-                                    <rect key="frame" x="365" y="19.5" width="6" height="11"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="6" id="Qgt-tm-iIS"/>
-                                        <constraint firstAttribute="height" constant="11" id="x1t-ZK-XUL"/>
-                                    </constraints>
-                                </imageView>
-                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iQs-T6-7jm">
-                                    <rect key="frame" x="11" y="49" width="366" height="1"/>
-                                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="1" id="J3u-DU-AaA"/>
-                                    </constraints>
-                                </view>
-                            </subviews>
-                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <gestureRecognizers/>
-                            <constraints>
-                                <constraint firstItem="M6z-rl-5CW" firstAttribute="top" secondItem="y2Z-Pu-GKq" secondAttribute="top" id="76W-HA-Xyh"/>
-                                <constraint firstItem="iQs-T6-7jm" firstAttribute="leading" secondItem="y2Z-Pu-GKq" secondAttribute="leading" constant="11" id="7eQ-QY-Rsa"/>
-                                <constraint firstItem="hP7-NV-Abx" firstAttribute="leading" secondItem="M6z-rl-5CW" secondAttribute="trailing" constant="10" id="7ic-y9-44s"/>
-                                <constraint firstAttribute="trailing" secondItem="hP7-NV-Abx" secondAttribute="trailing" constant="15" id="Dc9-D9-Yks"/>
-                                <constraint firstItem="M6z-rl-5CW" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="5x9-qj-kzm" secondAttribute="trailing" constant="15" id="MT6-Ss-Cda"/>
-                                <constraint firstItem="iQs-T6-7jm" firstAttribute="top" secondItem="M6z-rl-5CW" secondAttribute="bottom" id="Okg-NK-y9n"/>
-                                <constraint firstItem="hP7-NV-Abx" firstAttribute="centerY" secondItem="y2Z-Pu-GKq" secondAttribute="centerY" id="fiQ-29-ouu"/>
-                                <constraint firstItem="5x9-qj-kzm" firstAttribute="centerY" secondItem="y2Z-Pu-GKq" secondAttribute="centerY" id="iCu-HE-YVf"/>
-                                <constraint firstAttribute="height" constant="50" id="jxi-ow-Mcd"/>
-                                <constraint firstAttribute="trailing" secondItem="iQs-T6-7jm" secondAttribute="trailing" constant="9" id="qGR-dk-Xi4"/>
-                                <constraint firstAttribute="bottom" secondItem="iQs-T6-7jm" secondAttribute="bottom" id="vLv-hH-Gkt"/>
-                                <constraint firstItem="5x9-qj-kzm" firstAttribute="leading" secondItem="y2Z-Pu-GKq" secondAttribute="leading" constant="12" id="zyL-2C-jVb"/>
-                            </constraints>
-                            <connections>
-                                <outletCollection property="gestureRecognizers" destination="91i-mt-ZJq" appends="YES" id="C9x-Ta-t2a"/>
-                            </connections>
-                        </view>
-                        <view tag="1005" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5wD-Uz-Hw3">
-                            <rect key="frame" x="0.0" y="155" width="386" height="50"/>
-                            <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="修改密码" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="duu-hP-dOU">
-                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="75" id="GJF-iP-xbU"/>
-                                    </constraints>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="Ywa-dR-8EE">
-                                    <rect key="frame" x="365" y="19.5" width="6" height="11"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="11" id="7Wr-1k-Q2b"/>
-                                        <constraint firstAttribute="width" constant="6" id="dOC-x9-HrY"/>
-                                    </constraints>
-                                </imageView>
-                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6Cb-bd-BGK">
-                                    <rect key="frame" x="11" y="49" width="366" height="1"/>
-                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="1" id="ae6-X1-DMD"/>
-                                    </constraints>
-                                </view>
-                            </subviews>
-                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <gestureRecognizers/>
-                            <constraints>
-                                <constraint firstItem="6Cb-bd-BGK" firstAttribute="leading" secondItem="5wD-Uz-Hw3" secondAttribute="leading" constant="11" id="76F-fe-sE5"/>
-                                <constraint firstAttribute="trailing" secondItem="Ywa-dR-8EE" secondAttribute="trailing" constant="15" id="FUQ-Dh-dXd"/>
-                                <constraint firstItem="duu-hP-dOU" firstAttribute="leading" secondItem="5wD-Uz-Hw3" secondAttribute="leading" constant="12" id="Kzr-yX-6XQ"/>
-                                <constraint firstAttribute="trailing" secondItem="6Cb-bd-BGK" secondAttribute="trailing" constant="9" id="Xet-DR-WI1"/>
-                                <constraint firstItem="duu-hP-dOU" firstAttribute="centerY" secondItem="5wD-Uz-Hw3" secondAttribute="centerY" id="cSI-to-AW2"/>
-                                <constraint firstAttribute="height" constant="50" id="fOD-FI-0km"/>
-                                <constraint firstItem="Ywa-dR-8EE" firstAttribute="centerY" secondItem="5wD-Uz-Hw3" secondAttribute="centerY" id="kQS-we-Sxv"/>
-                                <constraint firstAttribute="bottom" secondItem="6Cb-bd-BGK" secondAttribute="bottom" id="pVm-VT-blu"/>
-                            </constraints>
-                            <connections>
-                                <outletCollection property="gestureRecognizers" destination="MDo-fW-GMy" appends="YES" id="afo-Gb-wx2"/>
-                            </connections>
-                        </view>
-                    </subviews>
-                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                    <constraints>
-                        <constraint firstAttribute="trailing" secondItem="Q6y-w1-LNd" secondAttribute="trailing" id="C9h-Tz-0GF"/>
-                        <constraint firstItem="y2Z-Pu-GKq" firstAttribute="leading" secondItem="0Pf-RE-eZa" secondAttribute="leading" id="Gph-rN-Y6b"/>
-                        <constraint firstAttribute="bottom" secondItem="5wD-Uz-Hw3" secondAttribute="bottom" constant="5" id="Hrb-zT-zgD"/>
-                        <constraint firstItem="5wD-Uz-Hw3" firstAttribute="top" secondItem="y2Z-Pu-GKq" secondAttribute="bottom" id="I5E-uh-kKN"/>
-                        <constraint firstAttribute="trailing" secondItem="Tz3-5D-EcJ" secondAttribute="trailing" id="Rok-uu-QuL"/>
-                        <constraint firstItem="Tz3-5D-EcJ" firstAttribute="top" secondItem="Q6y-w1-LNd" secondAttribute="bottom" id="YcO-wd-kO6"/>
-                        <constraint firstItem="5wD-Uz-Hw3" firstAttribute="leading" secondItem="0Pf-RE-eZa" secondAttribute="leading" id="atH-c3-wvw"/>
-                        <constraint firstItem="Tz3-5D-EcJ" firstAttribute="leading" secondItem="0Pf-RE-eZa" secondAttribute="leading" id="i8x-zc-spS"/>
-                        <constraint firstAttribute="trailing" secondItem="y2Z-Pu-GKq" secondAttribute="trailing" id="iqg-48-xgS"/>
-                        <constraint firstItem="y2Z-Pu-GKq" firstAttribute="top" secondItem="Tz3-5D-EcJ" secondAttribute="bottom" id="mfq-9S-gB8"/>
-                        <constraint firstItem="Q6y-w1-LNd" firstAttribute="leading" secondItem="0Pf-RE-eZa" secondAttribute="leading" id="r0R-co-pYn"/>
-                        <constraint firstItem="Q6y-w1-LNd" firstAttribute="top" secondItem="0Pf-RE-eZa" secondAttribute="top" constant="5" id="rir-rY-52u"/>
-                        <constraint firstAttribute="trailing" secondItem="5wD-Uz-Hw3" secondAttribute="trailing" id="yiA-Bt-1Uj"/>
-                    </constraints>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="10"/>
-                        </userDefinedRuntimeAttribute>
-                    </userDefinedRuntimeAttributes>
-                </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bvI-vo-wNV">
-                    <rect key="frame" x="14" y="313" width="386" height="160"/>
+                    <rect key="frame" x="14" y="15" width="386" height="258"/>
                     <subviews>
-                        <view tag="1006" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JvN-sN-Dxg">
-                            <rect key="frame" x="0.0" y="5" width="386" height="50"/>
-                            <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="实名认证" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NHC-gP-IUN">
-                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="75" id="UbG-Wd-Od2"/>
-                                    </constraints>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="o5X-9L-JWB">
-                                    <rect key="frame" x="365" y="19.5" width="6" height="11"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="6" id="HaO-PT-fjr"/>
-                                        <constraint firstAttribute="height" constant="11" id="dxZ-d3-MAU"/>
-                                    </constraints>
-                                </imageView>
-                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Lbn-35-utG">
-                                    <rect key="frame" x="11" y="49" width="366" height="1"/>
-                                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="1" id="5xH-dM-cqq"/>
-                                    </constraints>
-                                </view>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="H2U-zy-fP3">
-                                    <rect key="frame" x="355" y="0.0" width="0.0" height="49"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                            </subviews>
-                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <gestureRecognizers/>
-                            <constraints>
-                                <constraint firstItem="H2U-zy-fP3" firstAttribute="top" secondItem="JvN-sN-Dxg" secondAttribute="top" id="49M-b7-egw"/>
-                                <constraint firstItem="Lbn-35-utG" firstAttribute="leading" secondItem="JvN-sN-Dxg" secondAttribute="leading" constant="11" id="D9l-oc-Tba"/>
-                                <constraint firstItem="H2U-zy-fP3" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="NHC-gP-IUN" secondAttribute="trailing" constant="15" id="FjD-mq-iZ2"/>
-                                <constraint firstAttribute="height" constant="50" id="G1X-FT-tM6"/>
-                                <constraint firstItem="Lbn-35-utG" firstAttribute="top" secondItem="H2U-zy-fP3" secondAttribute="bottom" id="JDB-xn-lp2"/>
-                                <constraint firstItem="NHC-gP-IUN" firstAttribute="leading" secondItem="JvN-sN-Dxg" secondAttribute="leading" constant="12" id="KSY-VD-Jbj"/>
-                                <constraint firstItem="o5X-9L-JWB" firstAttribute="leading" secondItem="H2U-zy-fP3" secondAttribute="trailing" constant="10" id="LEU-yB-lAf"/>
-                                <constraint firstAttribute="trailing" secondItem="o5X-9L-JWB" secondAttribute="trailing" constant="15" id="fR6-pD-mdw"/>
-                                <constraint firstItem="o5X-9L-JWB" firstAttribute="centerY" secondItem="JvN-sN-Dxg" secondAttribute="centerY" id="fWA-L5-pJa"/>
-                                <constraint firstAttribute="trailing" secondItem="Lbn-35-utG" secondAttribute="trailing" constant="9" id="h4T-za-c3P"/>
-                                <constraint firstItem="NHC-gP-IUN" firstAttribute="centerY" secondItem="JvN-sN-Dxg" secondAttribute="centerY" id="wOj-pm-OoP"/>
-                                <constraint firstAttribute="bottom" secondItem="Lbn-35-utG" secondAttribute="bottom" id="yXH-jY-1g9"/>
-                            </constraints>
-                            <connections>
-                                <outletCollection property="gestureRecognizers" destination="9FU-oz-u55" appends="YES" id="1ve-Od-JHY"/>
-                            </connections>
-                        </view>
                         <view tag="1007" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="66O-io-Yxa">
-                            <rect key="frame" x="0.0" y="55" width="386" height="50"/>
+                            <rect key="frame" x="0.0" y="0.0" width="386" height="50"/>
                             <subviews>
                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收货地址" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="28H-xl-VfT">
                                     <rect key="frame" x="12" y="15" width="75" height="20"/>
@@ -401,7 +70,7 @@
                             </connections>
                         </view>
                         <view tag="1008" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IrL-hq-2eU">
-                            <rect key="frame" x="0.0" y="105" width="386" height="50"/>
+                            <rect key="frame" x="0.0" y="50" width="386" height="50"/>
                             <subviews>
                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="进入课堂时进行网络&amp;设备检测" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="x6m-6D-CUC">
                                     <rect key="frame" x="12" y="15" width="223.5" height="20"/>
@@ -411,13 +80,13 @@
                                 </label>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qbj-na-VSL">
                                     <rect key="frame" x="11" y="49" width="366" height="1"/>
-                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="1" id="Rjr-Bs-uyG"/>
                                     </constraints>
                                 </view>
                                 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZKM-lu-myi">
-                                    <rect key="frame" x="325" y="0.0" width="47" height="49"/>
+                                    <rect key="frame" x="325" y="13" width="47" height="24"/>
                                     <constraints>
                                         <constraint firstAttribute="width" constant="47" id="K2h-Ky-7TO"/>
                                     </constraints>
@@ -433,39 +102,15 @@
                                 <constraint firstItem="qbj-na-VSL" firstAttribute="leading" secondItem="IrL-hq-2eU" secondAttribute="leading" constant="11" id="0O9-vH-Zk6"/>
                                 <constraint firstItem="x6m-6D-CUC" firstAttribute="centerY" secondItem="IrL-hq-2eU" secondAttribute="centerY" id="0Ob-eE-ogu"/>
                                 <constraint firstAttribute="trailing" secondItem="ZKM-lu-myi" secondAttribute="trailing" constant="14" id="4un-nz-eDu"/>
+                                <constraint firstItem="ZKM-lu-myi" firstAttribute="centerY" secondItem="IrL-hq-2eU" secondAttribute="centerY" id="AgF-zZ-pDm"/>
+                                <constraint firstAttribute="bottom" secondItem="qbj-na-VSL" secondAttribute="bottom" id="FZU-LM-P4Y"/>
                                 <constraint firstItem="x6m-6D-CUC" firstAttribute="leading" secondItem="IrL-hq-2eU" secondAttribute="leading" constant="12" id="KO3-cM-KOh"/>
-                                <constraint firstItem="qbj-na-VSL" firstAttribute="top" secondItem="ZKM-lu-myi" secondAttribute="bottom" id="Rcd-aQ-xg4"/>
-                                <constraint firstAttribute="bottom" secondItem="qbj-na-VSL" secondAttribute="bottom" id="iom-nb-m5P"/>
-                                <constraint firstItem="ZKM-lu-myi" firstAttribute="top" secondItem="IrL-hq-2eU" secondAttribute="top" id="rNr-jO-bwj"/>
                                 <constraint firstAttribute="height" constant="50" id="tgP-q8-ag9"/>
                                 <constraint firstAttribute="trailing" secondItem="qbj-na-VSL" secondAttribute="trailing" constant="9" id="wfV-kR-CF3"/>
                             </constraints>
                         </view>
-                    </subviews>
-                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                    <constraints>
-                        <constraint firstAttribute="trailing" secondItem="66O-io-Yxa" secondAttribute="trailing" id="Bu8-cb-AIo"/>
-                        <constraint firstItem="IrL-hq-2eU" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="CLc-rU-xPU"/>
-                        <constraint firstAttribute="bottom" secondItem="IrL-hq-2eU" secondAttribute="bottom" constant="5" id="DLQ-cM-Nev"/>
-                        <constraint firstItem="66O-io-Yxa" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="Hkj-Fz-5iB"/>
-                        <constraint firstAttribute="trailing" secondItem="JvN-sN-Dxg" secondAttribute="trailing" id="HxN-xe-7wJ"/>
-                        <constraint firstItem="IrL-hq-2eU" firstAttribute="top" secondItem="66O-io-Yxa" secondAttribute="bottom" id="SAO-fg-84E"/>
-                        <constraint firstAttribute="trailing" secondItem="IrL-hq-2eU" secondAttribute="trailing" id="WW8-th-rjC"/>
-                        <constraint firstItem="66O-io-Yxa" firstAttribute="top" secondItem="JvN-sN-Dxg" secondAttribute="bottom" id="fIH-az-ad6"/>
-                        <constraint firstItem="JvN-sN-Dxg" firstAttribute="top" secondItem="bvI-vo-wNV" secondAttribute="top" constant="5" id="gfE-A4-MzG"/>
-                        <constraint firstItem="JvN-sN-Dxg" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="uMr-qB-MN2"/>
-                    </constraints>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="10"/>
-                        </userDefinedRuntimeAttribute>
-                    </userDefinedRuntimeAttributes>
-                </view>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Px3-aY-XMT">
-                    <rect key="frame" x="14" y="485" width="386" height="160"/>
-                    <subviews>
                         <view tag="1009" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="l7Z-Gj-hWL">
-                            <rect key="frame" x="0.0" y="5" width="386" height="50"/>
+                            <rect key="frame" x="0.0" y="100" width="386" height="50"/>
                             <subviews>
                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="安全隐私" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nw6-Cw-1IV">
                                     <rect key="frame" x="12" y="15" width="75" height="20"/>
@@ -508,7 +153,7 @@
                             </connections>
                         </view>
                         <view tag="1010" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="anE-I3-Co0">
-                            <rect key="frame" x="0.0" y="55" width="386" height="50"/>
+                            <rect key="frame" x="0.0" y="150" width="386" height="50"/>
                             <subviews>
                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="意见反馈" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gdi-Lt-ODx">
                                     <rect key="frame" x="12" y="15" width="75" height="20"/>
@@ -561,7 +206,7 @@
                             </connections>
                         </view>
                         <view tag="1011" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fae-Ws-ND6">
-                            <rect key="frame" x="0.0" y="105" width="386" height="50"/>
+                            <rect key="frame" x="0.0" y="200" width="386" height="50"/>
                             <subviews>
                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="关于我们" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7NY-Jl-Fvk">
                                     <rect key="frame" x="12" y="15" width="75" height="20"/>
@@ -606,16 +251,24 @@
                     </subviews>
                     <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
-                        <constraint firstItem="fae-Ws-ND6" firstAttribute="top" secondItem="anE-I3-Co0" secondAttribute="bottom" id="8AZ-HI-FoC"/>
-                        <constraint firstAttribute="trailing" secondItem="fae-Ws-ND6" secondAttribute="trailing" id="HWd-4v-V32"/>
-                        <constraint firstAttribute="bottom" secondItem="fae-Ws-ND6" secondAttribute="bottom" constant="5" id="Hyn-Zx-xg3"/>
-                        <constraint firstItem="l7Z-Gj-hWL" firstAttribute="top" secondItem="Px3-aY-XMT" secondAttribute="top" constant="5" id="Lv3-PF-hc6"/>
-                        <constraint firstAttribute="trailing" secondItem="anE-I3-Co0" secondAttribute="trailing" id="QsR-GM-b2c"/>
-                        <constraint firstItem="anE-I3-Co0" firstAttribute="leading" secondItem="Px3-aY-XMT" secondAttribute="leading" id="YC4-wa-ofv"/>
-                        <constraint firstItem="l7Z-Gj-hWL" firstAttribute="leading" secondItem="Px3-aY-XMT" secondAttribute="leading" id="iOQ-sh-IbU"/>
-                        <constraint firstItem="anE-I3-Co0" firstAttribute="top" secondItem="l7Z-Gj-hWL" secondAttribute="bottom" id="sRv-p6-Srf"/>
-                        <constraint firstItem="fae-Ws-ND6" firstAttribute="leading" secondItem="Px3-aY-XMT" secondAttribute="leading" id="uCC-QL-6Rc"/>
-                        <constraint firstAttribute="trailing" secondItem="l7Z-Gj-hWL" secondAttribute="trailing" id="xkA-wi-SzN"/>
+                        <constraint firstAttribute="trailing" secondItem="l7Z-Gj-hWL" secondAttribute="trailing" id="7lq-jO-way"/>
+                        <constraint firstAttribute="trailing" secondItem="fae-Ws-ND6" secondAttribute="trailing" id="9EJ-XW-BHg"/>
+                        <constraint firstAttribute="trailing" secondItem="anE-I3-Co0" secondAttribute="trailing" id="9WJ-kR-FAO"/>
+                        <constraint firstAttribute="trailing" secondItem="66O-io-Yxa" secondAttribute="trailing" id="Bu8-cb-AIo"/>
+                        <constraint firstItem="IrL-hq-2eU" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="CLc-rU-xPU"/>
+                        <constraint firstAttribute="bottom" secondItem="fae-Ws-ND6" secondAttribute="bottom" constant="8" id="Ddq-qc-uO8"/>
+                        <constraint firstItem="66O-io-Yxa" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="Hkj-Fz-5iB"/>
+                        <constraint firstItem="fae-Ws-ND6" firstAttribute="top" secondItem="anE-I3-Co0" secondAttribute="bottom" id="Ib7-m9-A9b"/>
+                        <constraint firstItem="l7Z-Gj-hWL" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="Kbc-Dl-7SL"/>
+                        <constraint firstItem="anE-I3-Co0" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="Qbx-VX-hTt"/>
+                        <constraint firstItem="anE-I3-Co0" firstAttribute="top" secondItem="l7Z-Gj-hWL" secondAttribute="bottom" id="Rtv-Wk-ot8"/>
+                        <constraint firstItem="IrL-hq-2eU" firstAttribute="top" secondItem="66O-io-Yxa" secondAttribute="bottom" id="SAO-fg-84E"/>
+                        <constraint firstAttribute="trailing" secondItem="IrL-hq-2eU" secondAttribute="trailing" id="WW8-th-rjC"/>
+                        <constraint firstItem="l7Z-Gj-hWL" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="cfZ-dB-AYb"/>
+                        <constraint firstItem="l7Z-Gj-hWL" firstAttribute="top" secondItem="IrL-hq-2eU" secondAttribute="bottom" id="due-IM-u9J"/>
+                        <constraint firstAttribute="trailing" secondItem="l7Z-Gj-hWL" secondAttribute="trailing" id="l5Q-fq-1lq"/>
+                        <constraint firstItem="66O-io-Yxa" firstAttribute="top" secondItem="bvI-vo-wNV" secondAttribute="top" id="rLL-bq-GJ9"/>
+                        <constraint firstItem="fae-Ws-ND6" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="tpl-vX-6ey"/>
                     </constraints>
                     <userDefinedRuntimeAttributes>
                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -623,83 +276,21 @@
                         </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                 </view>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="N6o-wM-RdI">
-                    <rect key="frame" x="14" y="670" width="386" height="50"/>
-                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="50" id="dUm-Pe-IzT"/>
-                    </constraints>
-                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                    <state key="normal" title="退出登录">
-                        <color key="titleColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </state>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="10"/>
-                        </userDefinedRuntimeAttribute>
-                    </userDefinedRuntimeAttributes>
-                    <connections>
-                        <action selector="logoutAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="fBw-ZJ-zxC"/>
-                    </connections>
-                </button>
             </subviews>
-            <color key="backgroundColor" red="0.96470588235294119" green="0.97254901960784312" blue="0.97647058823529409" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
-                <constraint firstItem="GuW-h5-PZ3" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="3HV-ny-8jj"/>
-                <constraint firstItem="Px3-aY-XMT" firstAttribute="trailing" secondItem="bvI-vo-wNV" secondAttribute="trailing" id="4AG-J2-M28"/>
-                <constraint firstItem="Px3-aY-XMT" firstAttribute="top" secondItem="bvI-vo-wNV" secondAttribute="bottom" constant="12" id="DfN-W2-Ecv"/>
-                <constraint firstItem="N6o-wM-RdI" firstAttribute="top" secondItem="Px3-aY-XMT" secondAttribute="bottom" constant="25" id="HdB-Kt-R6Z"/>
-                <constraint firstItem="GuW-h5-PZ3" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="15" id="OlS-2I-ihK"/>
-                <constraint firstItem="N6o-wM-RdI" firstAttribute="trailing" secondItem="Px3-aY-XMT" secondAttribute="trailing" id="PyI-0n-JQs"/>
-                <constraint firstItem="bvI-vo-wNV" firstAttribute="trailing" secondItem="0Pf-RE-eZa" secondAttribute="trailing" id="SED-UA-1GU"/>
-                <constraint firstItem="bvI-vo-wNV" firstAttribute="top" secondItem="0Pf-RE-eZa" secondAttribute="bottom" constant="12" id="UfN-Xn-MB9"/>
-                <constraint firstItem="bvI-vo-wNV" firstAttribute="leading" secondItem="0Pf-RE-eZa" secondAttribute="leading" id="eto-OT-Iqh"/>
-                <constraint firstItem="Px3-aY-XMT" firstAttribute="leading" secondItem="bvI-vo-wNV" secondAttribute="leading" id="oAm-bW-du7"/>
-                <constraint firstItem="0Pf-RE-eZa" firstAttribute="leading" secondItem="GuW-h5-PZ3" secondAttribute="leading" id="qnP-eU-8KZ"/>
-                <constraint firstItem="N6o-wM-RdI" firstAttribute="leading" secondItem="Px3-aY-XMT" secondAttribute="leading" id="t3E-fZ-xRH"/>
-                <constraint firstItem="0Pf-RE-eZa" firstAttribute="trailing" secondItem="GuW-h5-PZ3" secondAttribute="trailing" id="u7h-xp-4zr"/>
-                <constraint firstAttribute="trailing" secondItem="GuW-h5-PZ3" secondAttribute="trailing" constant="14" id="ulP-Ga-09m"/>
-                <constraint firstItem="0Pf-RE-eZa" firstAttribute="top" secondItem="GuW-h5-PZ3" secondAttribute="bottom" constant="12" id="xyf-S9-mCb"/>
+                <constraint firstItem="bvI-vo-wNV" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="15" id="97b-yw-a9c"/>
+                <constraint firstItem="bvI-vo-wNV" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="lgX-k4-l1q"/>
+                <constraint firstAttribute="trailing" secondItem="bvI-vo-wNV" secondAttribute="trailing" constant="14" id="yFd-X3-TR5"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
-                <outlet property="authStatusLabel" destination="H2U-zy-fP3" id="fCh-R8-YRj"/>
-                <outlet property="genderLabel" destination="eVe-2E-45u" id="sLs-3I-LPV"/>
-                <outlet property="nickNameLabel" destination="9mw-jx-odd" id="neH-kw-77Z"/>
-                <outlet property="phoneLabel" destination="M6z-rl-5CW" id="5Ga-fk-N0U"/>
                 <outlet property="switchButton" destination="ZKM-lu-myi" id="Gli-bu-Kkp"/>
-                <outlet property="userAvatal" destination="Y0N-Qr-8Oe" id="ImK-uA-Csp"/>
             </connections>
             <point key="canvasLocation" x="131.8840579710145" y="78.348214285714278"/>
         </view>
-        <tapGestureRecognizer id="hus-UO-UOG">
-            <connections>
-                <action selector="tapAction:" destination="iN0-l3-epB" id="kCP-bf-Smc"/>
-            </connections>
-        </tapGestureRecognizer>
-        <tapGestureRecognizer id="0lQ-SW-kEX">
-            <connections>
-                <action selector="tapAction:" destination="iN0-l3-epB" id="PSd-zJ-77m"/>
-            </connections>
-        </tapGestureRecognizer>
-        <tapGestureRecognizer id="91i-mt-ZJq">
-            <connections>
-                <action selector="tapAction:" destination="iN0-l3-epB" id="Kgr-Zu-6RP"/>
-            </connections>
-        </tapGestureRecognizer>
-        <tapGestureRecognizer id="MDo-fW-GMy">
-            <connections>
-                <action selector="tapAction:" destination="iN0-l3-epB" id="4ji-38-8b4"/>
-            </connections>
-        </tapGestureRecognizer>
-        <tapGestureRecognizer id="9FU-oz-u55">
-            <connections>
-                <action selector="tapAction:" destination="iN0-l3-epB" id="ubl-LK-We3"/>
-            </connections>
-        </tapGestureRecognizer>
         <tapGestureRecognizer id="39y-5f-REt">
             <connections>
                 <action selector="tapAction:" destination="iN0-l3-epB" id="VeN-qZ-UA8"/>
@@ -720,18 +311,9 @@
                 <action selector="tapAction:" destination="iN0-l3-epB" id="oQQ-9p-gfF"/>
             </connections>
         </tapGestureRecognizer>
-        <tapGestureRecognizer id="O34-NJ-j90">
-            <connections>
-                <action selector="tapAction:" destination="iN0-l3-epB" id="Paz-Kq-KK6"/>
-            </connections>
-        </tapGestureRecognizer>
     </objects>
     <resources>
         <image name="setting_next" width="6" height="11"/>
         <image name="switch_on" width="47" height="24"/>
-        <image name="user_default_avatal" width="52" height="52"/>
-        <systemColor name="systemBackgroundColor">
-            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-        </systemColor>
     </resources>
 </document>

+ 42 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UseBodyView.h

@@ -0,0 +1,42 @@
+//
+//  UseBodyView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/27.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, USERSETTING) {
+    USERSETTING_AVATAL = 1001, // 头像
+    USERSETTING_NAME,  // 修改姓名
+    USERSETTING_SEX,   // 修改性别
+    USERSETTING_PHONE, // 修改手机号
+    USERSETTING_PWD,   // 修改密码
+    USERSETTING_VEFI,  // 实名认证
+    USERSETTING_LOGOUT,   // 退出登录
+};
+
+typedef void(^UserSettingCallback)(USERSETTING type);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UseBodyView : UIView
+
+@property (weak, nonatomic) IBOutlet UIImageView *userAvatal;
+
+@property (weak, nonatomic) IBOutlet UILabel *nickNameLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *genderLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *phoneLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *authStatusLabel;
+
++ (instancetype)shareInstance;
+
+- (void)userSettingAction:(UserSettingCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 50 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UseBodyView.m

@@ -0,0 +1,50 @@
+//
+//  UseBodyView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/27.
+//
+
+#import "UseBodyView.h"
+
+@interface UseBodyView ()
+
+@property (nonatomic, copy) UserSettingCallback callback;
+
+
+@end
+
+@implementation UseBodyView
+
++ (instancetype)shareInstance {
+    UseBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"UseBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)userSettingAction:(UserSettingCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)tapAction:(UITapGestureRecognizer *)sender {
+    NSInteger index = sender.view.tag;
+    if (self.callback) {
+        self.callback(index);
+    }
+}
+
+- (IBAction)logoutAction:(id)sender {
+    if (self.callback) {
+        self.callback(USERSETTING_LOGOUT);
+    }
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 428 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UseBodyView.xib

@@ -0,0 +1,428 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="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="UseBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="480"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="63F-2t-FkW">
+                    <rect key="frame" x="14" y="15" width="347" height="340"/>
+                    <subviews>
+                        <view tag="1001" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eQC-GN-6Oa">
+                            <rect key="frame" x="0.0" y="0.0" width="347" height="80"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="DDW-TG-Apx">
+                                    <rect key="frame" x="12" y="13" width="54" height="54"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="54" id="JY4-o0-nhI"/>
+                                        <constraint firstAttribute="height" constant="54" id="guK-Nk-9Rz"/>
+                                    </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="27"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </imageView>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="修改头像" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pOZ-Hd-C1p">
+                                    <rect key="frame" x="250" y="30" width="66" height="20"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Uku-cu-irp">
+                                    <rect key="frame" x="11" y="79" width="327" height="1"/>
+                                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="SuO-MB-FUx"/>
+                                    </constraints>
+                                </view>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="fEE-Xd-Obd">
+                                    <rect key="frame" x="326" y="34.5" width="6" height="11"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="11" id="Ziv-Il-vcc"/>
+                                        <constraint firstAttribute="width" constant="6" id="m3S-7l-2Kw"/>
+                                    </constraints>
+                                </imageView>
+                            </subviews>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="Uku-cu-irp" secondAttribute="bottom" id="2QH-Z5-27k"/>
+                                <constraint firstAttribute="trailing" secondItem="Uku-cu-irp" secondAttribute="trailing" constant="9" id="bki-J6-gMR"/>
+                                <constraint firstItem="fEE-Xd-Obd" firstAttribute="centerY" secondItem="eQC-GN-6Oa" secondAttribute="centerY" id="fZe-5n-hNN"/>
+                                <constraint firstAttribute="trailing" secondItem="fEE-Xd-Obd" secondAttribute="trailing" constant="15" id="gKI-V4-1T5"/>
+                                <constraint firstItem="DDW-TG-Apx" firstAttribute="centerY" secondItem="eQC-GN-6Oa" secondAttribute="centerY" id="gKr-ds-JIN"/>
+                                <constraint firstItem="fEE-Xd-Obd" firstAttribute="leading" secondItem="pOZ-Hd-C1p" secondAttribute="trailing" constant="10" id="h1m-34-qBQ"/>
+                                <constraint firstItem="fEE-Xd-Obd" firstAttribute="centerY" secondItem="pOZ-Hd-C1p" secondAttribute="centerY" id="kof-s3-TOn"/>
+                                <constraint firstItem="Uku-cu-irp" firstAttribute="leading" secondItem="eQC-GN-6Oa" secondAttribute="leading" constant="11" id="ncf-4j-7uK"/>
+                                <constraint firstAttribute="height" constant="80" id="rrF-84-a4S"/>
+                                <constraint firstItem="DDW-TG-Apx" firstAttribute="leading" secondItem="eQC-GN-6Oa" secondAttribute="leading" constant="12" id="teR-p6-ZTU"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="i3F-I1-oNB" appends="YES" id="Bzp-2e-nZo"/>
+                            </connections>
+                        </view>
+                        <view tag="1002" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GZE-Oc-QBZ">
+                            <rect key="frame" x="0.0" y="80" width="347" height="50"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="昵称" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pYS-fp-QIz">
+                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="75" id="Fji-55-dq4"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YD6-xu-fMT">
+                                    <rect key="frame" x="316" y="0.0" width="0.0" height="49"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="JF3-o2-sdy">
+                                    <rect key="frame" x="326" y="19.5" width="6" height="11"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="6" id="C8E-Q4-r80"/>
+                                        <constraint firstAttribute="height" constant="11" id="kwy-R3-dIo"/>
+                                    </constraints>
+                                </imageView>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9Eo-VH-Fng">
+                                    <rect key="frame" x="11" y="49" width="327" height="1"/>
+                                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="pdm-bv-STB"/>
+                                    </constraints>
+                                </view>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstItem="YD6-xu-fMT" firstAttribute="top" secondItem="GZE-Oc-QBZ" secondAttribute="top" id="7Dk-Ib-3S7"/>
+                                <constraint firstItem="pYS-fp-QIz" firstAttribute="leading" secondItem="GZE-Oc-QBZ" secondAttribute="leading" constant="12" id="EXq-hB-Cwt"/>
+                                <constraint firstAttribute="trailing" secondItem="JF3-o2-sdy" secondAttribute="trailing" constant="15" id="JKf-zO-MWd"/>
+                                <constraint firstItem="pYS-fp-QIz" firstAttribute="centerY" secondItem="GZE-Oc-QBZ" secondAttribute="centerY" id="Sqk-3Y-B8f"/>
+                                <constraint firstItem="9Eo-VH-Fng" firstAttribute="top" secondItem="YD6-xu-fMT" secondAttribute="bottom" id="WBZ-Jv-lqi"/>
+                                <constraint firstAttribute="height" constant="50" id="WPk-mD-BZ6"/>
+                                <constraint firstItem="9Eo-VH-Fng" firstAttribute="leading" secondItem="GZE-Oc-QBZ" secondAttribute="leading" constant="11" id="af3-FX-Nl7"/>
+                                <constraint firstAttribute="bottom" secondItem="9Eo-VH-Fng" secondAttribute="bottom" id="fmx-lx-dVh"/>
+                                <constraint firstItem="YD6-xu-fMT" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="pYS-fp-QIz" secondAttribute="trailing" constant="15" id="sIP-mT-CW5"/>
+                                <constraint firstItem="JF3-o2-sdy" firstAttribute="leading" secondItem="YD6-xu-fMT" secondAttribute="trailing" constant="10" id="uIX-Oq-6fL"/>
+                                <constraint firstItem="JF3-o2-sdy" firstAttribute="centerY" secondItem="GZE-Oc-QBZ" secondAttribute="centerY" id="vaV-kS-SKy"/>
+                                <constraint firstAttribute="trailing" secondItem="9Eo-VH-Fng" secondAttribute="trailing" constant="9" id="xoU-db-P04"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="fS0-yU-vfx" appends="YES" id="aYZ-yT-FHo"/>
+                            </connections>
+                        </view>
+                        <view tag="1003" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aw2-z8-Phf">
+                            <rect key="frame" x="0.0" y="130" width="347" height="50"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="性别" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3d9-1w-PDG">
+                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="75" id="AXq-H0-1fl"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="lmf-kX-Eei">
+                                    <rect key="frame" x="326" y="19.5" width="6" height="11"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="11" id="AzH-ur-lzK"/>
+                                        <constraint firstAttribute="width" constant="6" id="obv-tu-WXy"/>
+                                    </constraints>
+                                </imageView>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EiT-my-Qq7">
+                                    <rect key="frame" x="11" y="49" width="327" height="1"/>
+                                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="7XV-2K-LdO"/>
+                                    </constraints>
+                                </view>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oUt-zy-yAh">
+                                    <rect key="frame" x="316" y="0.0" width="0.0" height="49"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstItem="3d9-1w-PDG" firstAttribute="centerY" secondItem="aw2-z8-Phf" secondAttribute="centerY" id="1Bc-Ho-guK"/>
+                                <constraint firstItem="lmf-kX-Eei" firstAttribute="leading" secondItem="oUt-zy-yAh" secondAttribute="trailing" constant="10" id="JCM-zk-iL8"/>
+                                <constraint firstItem="EiT-my-Qq7" firstAttribute="leading" secondItem="aw2-z8-Phf" secondAttribute="leading" constant="11" id="Nyl-dK-Gp6"/>
+                                <constraint firstAttribute="bottom" secondItem="EiT-my-Qq7" secondAttribute="bottom" id="SGM-Qe-veE"/>
+                                <constraint firstItem="EiT-my-Qq7" firstAttribute="top" secondItem="oUt-zy-yAh" secondAttribute="bottom" id="Sgl-Q9-iQ9"/>
+                                <constraint firstItem="oUt-zy-yAh" firstAttribute="top" secondItem="aw2-z8-Phf" secondAttribute="top" id="Zvu-RQ-VSx"/>
+                                <constraint firstAttribute="trailing" secondItem="EiT-my-Qq7" secondAttribute="trailing" constant="9" id="aBK-lM-Eer"/>
+                                <constraint firstItem="oUt-zy-yAh" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="3d9-1w-PDG" secondAttribute="trailing" constant="15" id="cgM-L8-2rJ"/>
+                                <constraint firstItem="3d9-1w-PDG" firstAttribute="leading" secondItem="aw2-z8-Phf" secondAttribute="leading" constant="12" id="lWd-su-DVS"/>
+                                <constraint firstItem="lmf-kX-Eei" firstAttribute="centerY" secondItem="aw2-z8-Phf" secondAttribute="centerY" id="oXw-pj-1Qe"/>
+                                <constraint firstAttribute="trailing" secondItem="lmf-kX-Eei" secondAttribute="trailing" constant="15" id="r0w-R6-tA3"/>
+                                <constraint firstAttribute="height" constant="50" id="yrv-TP-nxm"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="ZXM-kM-mbJ" appends="YES" id="4Dw-N2-FA5"/>
+                            </connections>
+                        </view>
+                        <view tag="1004" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mhj-bw-BBD">
+                            <rect key="frame" x="0.0" y="180" width="347" height="50"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="手机号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Ld-LB-Npe">
+                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="75" id="7J6-xd-eqX"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5cK-te-dwp">
+                                    <rect key="frame" x="316" y="0.0" width="0.0" height="49"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="m90-qI-g4J">
+                                    <rect key="frame" x="326" y="19.5" width="6" height="11"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="11" id="FaZ-iK-YTB"/>
+                                        <constraint firstAttribute="width" constant="6" id="op5-jz-lhj"/>
+                                    </constraints>
+                                </imageView>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tLA-Rn-aXY">
+                                    <rect key="frame" x="11" y="49" width="327" height="1"/>
+                                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="pzC-Ls-Jik"/>
+                                    </constraints>
+                                </view>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstItem="7Ld-LB-Npe" firstAttribute="leading" secondItem="mhj-bw-BBD" secondAttribute="leading" constant="12" id="4Qx-CH-HVO"/>
+                                <constraint firstItem="m90-qI-g4J" firstAttribute="leading" secondItem="5cK-te-dwp" secondAttribute="trailing" constant="10" id="T6Y-xZ-z7h"/>
+                                <constraint firstItem="tLA-Rn-aXY" firstAttribute="top" secondItem="5cK-te-dwp" secondAttribute="bottom" id="VRz-Er-9Sv"/>
+                                <constraint firstAttribute="height" constant="50" id="Vdh-T6-Z2s"/>
+                                <constraint firstItem="m90-qI-g4J" firstAttribute="centerY" secondItem="mhj-bw-BBD" secondAttribute="centerY" id="fyy-RB-6QF"/>
+                                <constraint firstItem="7Ld-LB-Npe" firstAttribute="centerY" secondItem="mhj-bw-BBD" secondAttribute="centerY" id="iUn-w5-ITX"/>
+                                <constraint firstAttribute="bottom" secondItem="tLA-Rn-aXY" secondAttribute="bottom" id="kAF-xQ-mjw"/>
+                                <constraint firstItem="5cK-te-dwp" firstAttribute="top" secondItem="mhj-bw-BBD" secondAttribute="top" id="oUh-ln-dfS"/>
+                                <constraint firstAttribute="trailing" secondItem="m90-qI-g4J" secondAttribute="trailing" constant="15" id="tZO-px-YlZ"/>
+                                <constraint firstItem="tLA-Rn-aXY" firstAttribute="leading" secondItem="mhj-bw-BBD" secondAttribute="leading" constant="11" id="xzs-PP-AR2"/>
+                                <constraint firstItem="5cK-te-dwp" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="7Ld-LB-Npe" secondAttribute="trailing" constant="15" id="yQS-7j-SPQ"/>
+                                <constraint firstAttribute="trailing" secondItem="tLA-Rn-aXY" secondAttribute="trailing" constant="9" id="zJI-3Z-415"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="p5C-5k-0eK" appends="YES" id="UE3-ys-dYt"/>
+                            </connections>
+                        </view>
+                        <view tag="1005" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZgR-n3-ElR">
+                            <rect key="frame" x="0.0" y="230" width="347" height="50"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="修改密码" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="myf-j5-Lnu">
+                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="75" id="b2q-iK-hAz"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="poZ-tj-Q0B">
+                                    <rect key="frame" x="326" y="19.5" width="6" height="11"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="11" id="P33-HL-UpA"/>
+                                        <constraint firstAttribute="width" constant="6" id="QK6-MI-Nfr"/>
+                                    </constraints>
+                                </imageView>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="n4Z-So-dFT">
+                                    <rect key="frame" x="11" y="49" width="327" height="1"/>
+                                    <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="fu3-z3-8ck"/>
+                                    </constraints>
+                                </view>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstItem="myf-j5-Lnu" firstAttribute="centerY" secondItem="ZgR-n3-ElR" secondAttribute="centerY" id="6S5-oq-ymI"/>
+                                <constraint firstAttribute="height" constant="50" id="DaM-R8-ARp"/>
+                                <constraint firstItem="poZ-tj-Q0B" firstAttribute="centerY" secondItem="ZgR-n3-ElR" secondAttribute="centerY" id="Mcj-le-rC8"/>
+                                <constraint firstAttribute="trailing" secondItem="poZ-tj-Q0B" secondAttribute="trailing" constant="15" id="P8R-Yr-Odc"/>
+                                <constraint firstAttribute="trailing" secondItem="n4Z-So-dFT" secondAttribute="trailing" constant="9" id="Pgo-c4-GBc"/>
+                                <constraint firstAttribute="bottom" secondItem="n4Z-So-dFT" secondAttribute="bottom" id="UOp-kJ-onb"/>
+                                <constraint firstItem="myf-j5-Lnu" firstAttribute="leading" secondItem="ZgR-n3-ElR" secondAttribute="leading" constant="12" id="wPW-S0-wRM"/>
+                                <constraint firstItem="n4Z-So-dFT" firstAttribute="leading" secondItem="ZgR-n3-ElR" secondAttribute="leading" constant="11" id="xfy-rV-dSd"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="q28-Qy-yTN" appends="YES" id="mSZ-ER-u5o"/>
+                            </connections>
+                        </view>
+                        <view tag="1006" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vrF-Wi-A3y">
+                            <rect key="frame" x="0.0" y="280" width="347" height="50"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="实名认证" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YCw-bW-AxD">
+                                    <rect key="frame" x="12" y="15" width="75" height="20"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="75" id="kGF-ha-epE"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="OGP-iJ-HWi">
+                                    <rect key="frame" x="326" y="19.5" width="6" height="11"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="6" id="iy4-1Y-udE"/>
+                                        <constraint firstAttribute="height" constant="11" id="n0J-d3-ANf"/>
+                                    </constraints>
+                                </imageView>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bZO-1s-oFA">
+                                    <rect key="frame" x="316" y="0.0" width="0.0" height="50"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="50" id="0B2-00-UdJ"/>
+                                <constraint firstAttribute="bottom" secondItem="bZO-1s-oFA" secondAttribute="bottom" id="C3Q-jk-qO5"/>
+                                <constraint firstItem="bZO-1s-oFA" firstAttribute="top" secondItem="vrF-Wi-A3y" secondAttribute="top" id="Gvl-jx-MJU"/>
+                                <constraint firstAttribute="trailing" secondItem="OGP-iJ-HWi" secondAttribute="trailing" constant="15" id="HgD-5X-Oxc"/>
+                                <constraint firstItem="YCw-bW-AxD" firstAttribute="centerY" secondItem="vrF-Wi-A3y" secondAttribute="centerY" id="Jbt-Ok-n3q"/>
+                                <constraint firstItem="bZO-1s-oFA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="YCw-bW-AxD" secondAttribute="trailing" constant="15" id="MQI-yO-Zah"/>
+                                <constraint firstItem="YCw-bW-AxD" firstAttribute="leading" secondItem="vrF-Wi-A3y" secondAttribute="leading" constant="12" id="O8F-9Y-JVW"/>
+                                <constraint firstItem="OGP-iJ-HWi" firstAttribute="centerY" secondItem="vrF-Wi-A3y" secondAttribute="centerY" id="pTY-hE-sjA"/>
+                                <constraint firstItem="OGP-iJ-HWi" firstAttribute="leading" secondItem="bZO-1s-oFA" secondAttribute="trailing" constant="10" id="ytx-LI-6v6"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="ZTh-Fz-ffA" appends="YES" id="QpX-B1-3wH"/>
+                            </connections>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="vrF-Wi-A3y" secondAttribute="bottom" constant="10" id="8X8-hE-K9b"/>
+                        <constraint firstItem="mhj-bw-BBD" firstAttribute="top" secondItem="aw2-z8-Phf" secondAttribute="bottom" id="ADt-zF-lvl"/>
+                        <constraint firstAttribute="trailing" secondItem="vrF-Wi-A3y" secondAttribute="trailing" id="Ilx-p4-YS5"/>
+                        <constraint firstItem="vrF-Wi-A3y" firstAttribute="top" secondItem="ZgR-n3-ElR" secondAttribute="bottom" id="KSl-sa-Ns5"/>
+                        <constraint firstItem="eQC-GN-6Oa" firstAttribute="leading" secondItem="63F-2t-FkW" secondAttribute="leading" id="MKb-he-bow"/>
+                        <constraint firstItem="ZgR-n3-ElR" firstAttribute="top" secondItem="mhj-bw-BBD" secondAttribute="bottom" id="Pmd-Mg-sFV"/>
+                        <constraint firstItem="vrF-Wi-A3y" firstAttribute="leading" secondItem="63F-2t-FkW" secondAttribute="leading" id="RK5-Sf-iNt"/>
+                        <constraint firstItem="eQC-GN-6Oa" firstAttribute="top" secondItem="63F-2t-FkW" secondAttribute="top" id="Ybz-o3-1of"/>
+                        <constraint firstAttribute="trailing" secondItem="ZgR-n3-ElR" secondAttribute="trailing" id="ZeO-yr-B2T"/>
+                        <constraint firstItem="aw2-z8-Phf" firstAttribute="top" secondItem="GZE-Oc-QBZ" secondAttribute="bottom" id="daJ-4l-eM5"/>
+                        <constraint firstItem="GZE-Oc-QBZ" firstAttribute="leading" secondItem="63F-2t-FkW" secondAttribute="leading" id="id5-ZO-hRw"/>
+                        <constraint firstAttribute="trailing" secondItem="GZE-Oc-QBZ" secondAttribute="trailing" id="ikJ-1Q-bgY"/>
+                        <constraint firstAttribute="trailing" secondItem="mhj-bw-BBD" secondAttribute="trailing" id="jey-sF-y0M"/>
+                        <constraint firstItem="ZgR-n3-ElR" firstAttribute="leading" secondItem="63F-2t-FkW" secondAttribute="leading" id="k6e-hT-2S4"/>
+                        <constraint firstItem="GZE-Oc-QBZ" firstAttribute="top" secondItem="eQC-GN-6Oa" secondAttribute="bottom" id="mrJ-dh-xKC"/>
+                        <constraint firstAttribute="trailing" secondItem="aw2-z8-Phf" secondAttribute="trailing" id="tG9-mR-acN"/>
+                        <constraint firstAttribute="trailing" secondItem="eQC-GN-6Oa" secondAttribute="trailing" id="tc7-Cl-S5f"/>
+                        <constraint firstItem="aw2-z8-Phf" firstAttribute="leading" secondItem="63F-2t-FkW" secondAttribute="leading" id="u4c-yX-1qX"/>
+                        <constraint firstItem="mhj-bw-BBD" firstAttribute="leading" secondItem="63F-2t-FkW" secondAttribute="leading" id="x5k-VO-tXL"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hhh-Gs-c0i">
+                    <rect key="frame" x="14" y="410" width="347" height="50"/>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="50" id="o7G-5n-cqm"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" title="退出登录">
+                        <color key="titleColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    </state>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <action selector="logoutAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="fcA-OB-9pO"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="hhh-Gs-c0i" secondAttribute="trailing" constant="14" id="KYQ-2f-GeR"/>
+                <constraint firstAttribute="trailing" secondItem="63F-2t-FkW" secondAttribute="trailing" constant="14" id="MTX-qk-rku"/>
+                <constraint firstAttribute="bottom" secondItem="hhh-Gs-c0i" secondAttribute="bottom" constant="20" id="VgG-aG-D5D"/>
+                <constraint firstItem="hhh-Gs-c0i" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="aqD-q7-njU"/>
+                <constraint firstItem="63F-2t-FkW" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="15" id="ctV-ht-1Pu"/>
+                <constraint firstItem="63F-2t-FkW" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="vxl-eQ-2ms"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="authStatusLabel" destination="bZO-1s-oFA" id="HMC-Aa-4cv"/>
+                <outlet property="genderLabel" destination="oUt-zy-yAh" id="iAT-LI-iJm"/>
+                <outlet property="nickNameLabel" destination="YD6-xu-fMT" id="8Wm-WH-ZGe"/>
+                <outlet property="phoneLabel" destination="5cK-te-dwp" id="FBA-LR-ez4"/>
+                <outlet property="userAvatal" destination="DDW-TG-Apx" id="rt8-ST-h6N"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="63.616071428571423"/>
+        </view>
+        <tapGestureRecognizer id="i3F-I1-oNB">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="Efu-ed-kbm"/>
+            </connections>
+        </tapGestureRecognizer>
+        <tapGestureRecognizer id="fS0-yU-vfx">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="Jva-Xg-DRN"/>
+            </connections>
+        </tapGestureRecognizer>
+        <tapGestureRecognizer id="ZXM-kM-mbJ">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="O72-0J-AUc"/>
+            </connections>
+        </tapGestureRecognizer>
+        <tapGestureRecognizer id="p5C-5k-0eK">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="XDi-y4-dza"/>
+            </connections>
+        </tapGestureRecognizer>
+        <tapGestureRecognizer id="q28-Qy-yTN">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="Toa-Ep-Gy8"/>
+            </connections>
+        </tapGestureRecognizer>
+        <tapGestureRecognizer id="ZTh-Fz-ffA">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="vY9-XV-ePO"/>
+            </connections>
+        </tapGestureRecognizer>
+    </objects>
+    <resources>
+        <image name="setting_next" width="6" height="11"/>
+        <image name="user_default_avatal" width="52" height="52"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UserAuthBodyView.h

@@ -0,0 +1,26 @@
+//
+//  UserAuthBodyView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/27.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^AuthSureCallback)(void);
+
+@interface UserAuthBodyView : UIView
+
+@property (weak, nonatomic) IBOutlet UITextField *nameField;
+
+@property (weak, nonatomic) IBOutlet UITextField *cardField;
+
++ (instancetype)shareInstance;
+
+- (void)sureAuthCall:(AuthSureCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 66 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UserAuthBodyView.m

@@ -0,0 +1,66 @@
+//
+//  UserAuthBodyView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/5/27.
+//
+
+#import "UserAuthBodyView.h"
+
+@interface UserAuthBodyView ()<UITextFieldDelegate>
+
+@property (nonatomic, copy) AuthSureCallback callback;
+
+
+@end
+
+@implementation UserAuthBodyView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    self.nameField.delegate = self;
+    self.cardField.delegate = self;
+}
+
++ (instancetype)shareInstance {
+    UserAuthBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"UserAuthBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)sureAuthCall:(AuthSureCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)sureAction:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+    [string replaceAll:@" " WithString:@""];
+    if ([string isEqualToString:@"\n"]) {
+        [self endEditing:YES];
+        return YES;
+    }
+
+    // 输入控制
+    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
+    if (textField == self.cardField) {
+        if (newString.length > 18) {
+            return NO;
+        }
+    }
+    return YES;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 134 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/UserAuthBodyView.xib

@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="UserAuthBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="551"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zXT-wQ-9xf">
+                    <rect key="frame" x="27" y="15" width="360" height="70"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="姓名" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nKZ-z7-YcX">
+                            <rect key="frame" x="0.0" y="2" width="37" height="25"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="25" id="6Ub-Ao-xiU"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
+                            <nil key="textColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入真实姓名" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="3vY-NV-dp4">
+                            <rect key="frame" x="0.0" y="27" width="360" height="43"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <textInputTraits key="textInputTraits" enablesReturnKeyAutomatically="YES"/>
+                        </textField>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="55x-la-fYP">
+                            <rect key="frame" x="7" y="69" width="346" height="1"/>
+                            <color key="backgroundColor" red="0.92156862745098034" green="0.92156862745098034" blue="0.92156862745098034" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="1" id="K0d-hL-Taa"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="55x-la-fYP" secondAttribute="bottom" id="7v6-Jp-deP"/>
+                        <constraint firstItem="55x-la-fYP" firstAttribute="leading" secondItem="zXT-wQ-9xf" secondAttribute="leading" constant="7" id="8RL-aU-Iee"/>
+                        <constraint firstAttribute="trailing" secondItem="55x-la-fYP" secondAttribute="trailing" constant="7" id="Pl6-8S-Ttz"/>
+                        <constraint firstItem="nKZ-z7-YcX" firstAttribute="leading" secondItem="zXT-wQ-9xf" secondAttribute="leading" id="RCG-CW-Rqq"/>
+                        <constraint firstAttribute="trailing" secondItem="3vY-NV-dp4" secondAttribute="trailing" id="RFz-AW-LSg"/>
+                        <constraint firstItem="3vY-NV-dp4" firstAttribute="top" secondItem="nKZ-z7-YcX" secondAttribute="bottom" id="T85-ia-27k"/>
+                        <constraint firstItem="3vY-NV-dp4" firstAttribute="leading" secondItem="zXT-wQ-9xf" secondAttribute="leading" id="VQg-7F-vhL"/>
+                        <constraint firstItem="nKZ-z7-YcX" firstAttribute="top" secondItem="zXT-wQ-9xf" secondAttribute="top" constant="2" id="muE-Zf-Uwz"/>
+                        <constraint firstAttribute="bottom" secondItem="3vY-NV-dp4" secondAttribute="bottom" id="oMN-ji-XCo"/>
+                        <constraint firstAttribute="height" constant="70" id="qZQ-tq-IW6"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ffm-T7-ztd">
+                    <rect key="frame" x="27" y="100" width="360" height="70"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="证件号码" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JhR-Bf-KWc">
+                            <rect key="frame" x="0.0" y="2" width="73.5" height="25"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="25" id="mAP-Nm-lwZ"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
+                            <nil key="textColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入身份证号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="JWP-XS-Fwe">
+                            <rect key="frame" x="0.0" y="27" width="360" height="43"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
+                        </textField>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QAx-sk-QrL">
+                            <rect key="frame" x="7" y="69" width="346" height="1"/>
+                            <color key="backgroundColor" red="0.92156862750000001" green="0.92156862750000001" blue="0.92156862750000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="1" id="KjM-3S-Djt"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="70" id="3ps-PH-AH9"/>
+                        <constraint firstItem="JhR-Bf-KWc" firstAttribute="leading" secondItem="Ffm-T7-ztd" secondAttribute="leading" id="5XZ-Kc-um0"/>
+                        <constraint firstAttribute="trailing" secondItem="QAx-sk-QrL" secondAttribute="trailing" constant="7" id="HRA-Ls-7wR"/>
+                        <constraint firstItem="JhR-Bf-KWc" firstAttribute="top" secondItem="Ffm-T7-ztd" secondAttribute="top" constant="2" id="OOt-w3-35m"/>
+                        <constraint firstItem="JWP-XS-Fwe" firstAttribute="top" secondItem="JhR-Bf-KWc" secondAttribute="bottom" id="VWr-LG-nIi"/>
+                        <constraint firstAttribute="bottom" secondItem="QAx-sk-QrL" secondAttribute="bottom" id="W90-SW-YND"/>
+                        <constraint firstAttribute="bottom" secondItem="JWP-XS-Fwe" secondAttribute="bottom" id="XaH-Eg-mGt"/>
+                        <constraint firstAttribute="trailing" secondItem="JWP-XS-Fwe" secondAttribute="trailing" id="cAb-Z5-Q7S"/>
+                        <constraint firstItem="QAx-sk-QrL" firstAttribute="leading" secondItem="Ffm-T7-ztd" secondAttribute="leading" constant="7" id="kqB-ck-9jq"/>
+                        <constraint firstItem="JWP-XS-Fwe" firstAttribute="leading" secondItem="Ffm-T7-ztd" secondAttribute="leading" id="q7a-hm-4Lw"/>
+                    </constraints>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aeI-9x-Zku">
+                    <rect key="frame" x="28" y="197" width="358" 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="ZpX-K1-XGu"/>
+                    </constraints>
+                    <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="sureAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="TbP-ux-Lyc"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="Ffm-T7-ztd" secondAttribute="trailing" constant="27" id="2BE-on-vRw"/>
+                <constraint firstItem="aeI-9x-Zku" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="28" id="8Iw-kG-bru"/>
+                <constraint firstItem="zXT-wQ-9xf" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="15" id="E5t-Aw-Gex"/>
+                <constraint firstItem="zXT-wQ-9xf" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="27" id="TEH-LN-pPI"/>
+                <constraint firstAttribute="trailing" secondItem="zXT-wQ-9xf" secondAttribute="trailing" constant="27" id="WU6-BI-WfH"/>
+                <constraint firstAttribute="trailing" secondItem="aeI-9x-Zku" secondAttribute="trailing" constant="28" id="jQT-ed-bsl"/>
+                <constraint firstItem="aeI-9x-Zku" firstAttribute="top" secondItem="Ffm-T7-ztd" secondAttribute="bottom" constant="27" id="kRA-iQ-sHL"/>
+                <constraint firstItem="Ffm-T7-ztd" firstAttribute="top" secondItem="zXT-wQ-9xf" secondAttribute="bottom" constant="15" id="pXk-lo-3Gc"/>
+                <constraint firstItem="Ffm-T7-ztd" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="27" id="zeY-2I-CA2"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="cardField" destination="JWP-XS-Fwe" id="WSn-8z-FrL"/>
+                <outlet property="nameField" destination="3vY-NV-dp4" id="qPy-wI-AL0"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="-21.763392857142858"/>
+        </view>
+    </objects>
+</document>

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBodyView.h

@@ -25,6 +25,7 @@ typedef NS_ENUM(NSInteger, MINEVIEWTYPE) {
     MINEVIEWTYPE_FANS, // 我的粉丝
     MINEVIEWTYPE_FINISHCOURSE, // 已上课程
     MINEVIEWTYPE_UNFINISHCOURSE, // 未上课程
+    MINEVIEWTYPE_USERSETTING,   // 用户设置
 };
 
 typedef void(^MineViewCallback)(MINEVIEWTYPE type);

+ 7 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBodyView.m

@@ -206,6 +206,13 @@
     USER_MANAGER.hiddenTipsButton = YES;
 }
 
+
+- (IBAction)toUseSetting:(id)sender {
+    if (self.callback) {
+        self.callback(MINEVIEWTYPE_USERSETTING);
+    }
+}
+
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 11 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/View/MineBodyView.xib

@@ -160,18 +160,29 @@
                                 <constraint firstAttribute="width" constant="61" id="d4G-4K-nul"/>
                             </constraints>
                         </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="L9t-OP-Fyp">
+                            <rect key="frame" x="15" y="19" width="52" height="52"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="toUseSetting:" destination="iN0-l3-epB" eventType="touchUpInside" id="vnk-D7-hKQ"/>
+                            </connections>
+                        </button>
                     </subviews>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <gestureRecognizers/>
                     <constraints>
                         <constraint firstItem="czV-qC-BkA" firstAttribute="leading" secondItem="dbv-tC-djl" secondAttribute="trailing" constant="10" id="068-WI-xB5"/>
                         <constraint firstItem="kb3-97-shC" firstAttribute="top" secondItem="dbv-tC-djl" secondAttribute="bottom" constant="5" id="0YH-xY-vAV"/>
+                        <constraint firstItem="L9t-OP-Fyp" firstAttribute="trailing" secondItem="L8h-ZO-2iV" secondAttribute="trailing" id="8hd-RJ-JzL"/>
                         <constraint firstAttribute="height" constant="90" id="Cmo-h9-fJh"/>
                         <constraint firstItem="dbv-tC-djl" firstAttribute="top" secondItem="L8h-ZO-2iV" secondAttribute="top" constant="6" id="GFk-U2-Fr8"/>
                         <constraint firstItem="L8h-ZO-2iV" firstAttribute="centerY" secondItem="K43-Hf-e2b" secondAttribute="centerY" id="Gma-Ix-zQk"/>
+                        <constraint firstItem="L9t-OP-Fyp" firstAttribute="leading" secondItem="L8h-ZO-2iV" secondAttribute="leading" id="HwY-Ff-s31"/>
                         <constraint firstItem="eq0-JE-kle" firstAttribute="top" secondItem="K43-Hf-e2b" secondAttribute="top" id="J4p-MN-ugC"/>
                         <constraint firstItem="kb3-97-shC" firstAttribute="leading" secondItem="dbv-tC-djl" secondAttribute="leading" id="dLD-MG-DWU"/>
                         <constraint firstItem="czV-qC-BkA" firstAttribute="centerY" secondItem="dbv-tC-djl" secondAttribute="centerY" id="kPV-uh-Llt"/>
+                        <constraint firstItem="L9t-OP-Fyp" firstAttribute="bottom" secondItem="L8h-ZO-2iV" secondAttribute="bottom" id="kk1-4C-1Oz"/>
+                        <constraint firstItem="L9t-OP-Fyp" firstAttribute="top" secondItem="L8h-ZO-2iV" secondAttribute="top" id="lA5-Xj-jmk"/>
                         <constraint firstItem="Fd1-bQ-7Kj" firstAttribute="centerY" secondItem="dbv-tC-djl" secondAttribute="centerY" id="myY-J0-sYF"/>
                         <constraint firstItem="eq0-JE-kle" firstAttribute="leading" secondItem="K43-Hf-e2b" secondAttribute="centerX" id="oqT-7s-EtP"/>
                         <constraint firstItem="L8h-ZO-2iV" firstAttribute="leading" secondItem="K43-Hf-e2b" secondAttribute="leading" constant="15" id="pVF-2j-tMt"/>