Kaynağa Gözat

个人资料

Steven 4 yıl önce
ebeveyn
işleme
c74b1e9348
23 değiştirilmiş dosya ile 1250 ekleme ve 157 silme
  1. 22 6
      MusicGradeExam/MusicGradeExam.xcodeproj/project.pbxproj
  2. 22 0
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/image_upload.imageset/Contents.json
  3. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/image_upload.imageset/image_upload@2x.png
  4. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/image_upload.imageset/image_upload@3x.png
  5. 22 0
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_choose.imageset/Contents.json
  6. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_choose.imageset/sex_choose@2x.png
  7. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_choose.imageset/sex_choose@3x.png
  8. 22 0
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_unselected.imageset/Contents.json
  9. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_unselected.imageset/sex_unselected@2x.png
  10. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_unselected.imageset/sex_unselected@3x.png
  11. 17 0
      MusicGradeExam/MusicGradeExam/KSRequestManager.h
  12. 37 2
      MusicGradeExam/MusicGradeExam/KSRequestManager.m
  13. 43 0
      MusicGradeExam/MusicGradeExam/UI/Login/Model/SysUser.h
  14. 256 0
      MusicGradeExam/MusicGradeExam/UI/Login/Model/SysUser.m
  15. 26 21
      MusicGradeExam/MusicGradeExam/UI/Login/Model/UserInfo.h
  16. 170 118
      MusicGradeExam/MusicGradeExam/UI/Login/Model/UserInfo.m
  17. 4 4
      MusicGradeExam/MusicGradeExam/UI/Login/View/ModifyBodyView.xib
  18. 164 0
      MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/Mine/Controller/UserViewController.m
  19. 24 0
      MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/Mine/View/UserBodyView.h
  20. 102 0
      MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/Mine/View/UserBodyView.m
  21. 303 0
      MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/Mine/View/UserBodyView.xib
  22. 13 2
      MusicGradeExam/MusicGradeExam/UI/UserCenter/View/UserCenterBodyView.m
  23. 3 4
      MusicGradeExam/MusicGradeExam/UI/UserCenter/View/UserCenterBodyView.xib

+ 22 - 6
MusicGradeExam/MusicGradeExam.xcodeproj/project.pbxproj

@@ -113,7 +113,6 @@
 		274771E724BC0C0500181362 /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2747706624BC0C0100181362 /* RegisterViewController.m */; };
 		274771E824BC0C0500181362 /* VefiLoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2747706724BC0C0100181362 /* VefiLoginViewController.m */; };
 		274771E924BC0C0500181362 /* ModifyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2747706824BC0C0100181362 /* ModifyViewController.m */; };
-		274771EA24BC0C0500181362 /* UserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2747706D24BC0C0100181362 /* UserInfo.m */; };
 		274771EB24BC0C0500181362 /* UserInfoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2747706F24BC0C0100181362 /* UserInfoManager.m */; };
 		274771EC24BC0C0500181362 /* LoginBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2747707224BC0C0100181362 /* LoginBodyView.m */; };
 		274771ED24BC0C0500181362 /* LoginBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2747707324BC0C0100181362 /* LoginBodyView.xib */; };
@@ -311,6 +310,10 @@
 		27A008E924BDA7070002452B /* AboutUsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27A008E724BDA7070002452B /* AboutUsViewController.m */; };
 		27A008ED24BDA7100002452B /* AboutBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 27A008EA24BDA70F0002452B /* AboutBodyView.xib */; };
 		27A008EE24BDA7100002452B /* AboutBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 27A008EB24BDA7100002452B /* AboutBodyView.m */; };
+		27A008F324BDB1E50002452B /* SysUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 27A008F024BDB1E30002452B /* SysUser.m */; };
+		27A008F424BDB1E50002452B /* UserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 27A008F224BDB1E50002452B /* UserInfo.m */; };
+		27A008F724BDB6220002452B /* UserBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 27A008F624BDB6220002452B /* UserBodyView.m */; };
+		27A008F924BDB6310002452B /* UserBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 27A008F824BDB6310002452B /* UserBodyView.xib */; };
 		52771C0027351695CEDB4C8E /* libPods-MusicGradeExam.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C12DE728E343C25BB5998D7 /* libPods-MusicGradeExam.a */; };
 		5577ECF41C84E1BDFEC99DBC /* libPods-MusicGradeExamTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BAA64634BC925E7C2CD7008 /* libPods-MusicGradeExamTests.a */; };
 		A7C23B2E920E232C71C39B0E /* libPods-MusicGradeExam-MusicGradeExamUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F8D13E0A14104E75F7922812 /* libPods-MusicGradeExam-MusicGradeExamUITests.a */; };
@@ -547,10 +550,8 @@
 		2747706924BC0C0100181362 /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = "<group>"; };
 		2747706A24BC0C0100181362 /* FirstSettingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FirstSettingViewController.h; sourceTree = "<group>"; };
 		2747706B24BC0C0100181362 /* RegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterViewController.h; sourceTree = "<group>"; };
-		2747706D24BC0C0100181362 /* UserInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserInfo.m; sourceTree = "<group>"; };
 		2747706E24BC0C0100181362 /* UserInfoManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInfoManager.h; sourceTree = "<group>"; };
 		2747706F24BC0C0100181362 /* UserInfoManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserInfoManager.m; sourceTree = "<group>"; };
-		2747707024BC0C0100181362 /* UserInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInfo.h; sourceTree = "<group>"; };
 		2747707224BC0C0100181362 /* LoginBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginBodyView.m; sourceTree = "<group>"; };
 		2747707324BC0C0100181362 /* LoginBodyView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginBodyView.xib; sourceTree = "<group>"; };
 		2747707424BC0C0100181362 /* LoginBodyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginBodyView.h; sourceTree = "<group>"; };
@@ -904,6 +905,13 @@
 		27A008EA24BDA70F0002452B /* AboutBodyView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AboutBodyView.xib; sourceTree = "<group>"; };
 		27A008EB24BDA7100002452B /* AboutBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutBodyView.m; sourceTree = "<group>"; };
 		27A008EC24BDA7100002452B /* AboutBodyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutBodyView.h; sourceTree = "<group>"; };
+		27A008EF24BDB1E20002452B /* SysUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SysUser.h; sourceTree = "<group>"; };
+		27A008F024BDB1E30002452B /* SysUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SysUser.m; sourceTree = "<group>"; };
+		27A008F124BDB1E30002452B /* UserInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInfo.h; sourceTree = "<group>"; };
+		27A008F224BDB1E50002452B /* UserInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserInfo.m; sourceTree = "<group>"; };
+		27A008F524BDB6220002452B /* UserBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserBodyView.h; sourceTree = "<group>"; };
+		27A008F624BDB6220002452B /* UserBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserBodyView.m; sourceTree = "<group>"; };
+		27A008F824BDB6310002452B /* UserBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UserBodyView.xib; sourceTree = "<group>"; };
 		2BB32BBE582672362BB6E017 /* Pods-MusicGradeExam-MusicGradeExamUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicGradeExam-MusicGradeExamUITests.release.xcconfig"; path = "Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests.release.xcconfig"; sourceTree = "<group>"; };
 		2F7D3758362ED28D51286A60 /* Pods-MusicGradeExam.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicGradeExam.debug.xcconfig"; path = "Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam.debug.xcconfig"; sourceTree = "<group>"; };
 		5402063E714DA9D9107F8070 /* Pods-MusicGradeExamTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicGradeExamTests.debug.xcconfig"; path = "Target Support Files/Pods-MusicGradeExamTests/Pods-MusicGradeExamTests.debug.xcconfig"; sourceTree = "<group>"; };
@@ -1599,8 +1607,10 @@
 			children = (
 				2747706E24BC0C0100181362 /* UserInfoManager.h */,
 				2747706F24BC0C0100181362 /* UserInfoManager.m */,
-				2747707024BC0C0100181362 /* UserInfo.h */,
-				2747706D24BC0C0100181362 /* UserInfo.m */,
+				27A008EF24BDB1E20002452B /* SysUser.h */,
+				27A008F024BDB1E30002452B /* SysUser.m */,
+				27A008F124BDB1E30002452B /* UserInfo.h */,
+				27A008F224BDB1E50002452B /* UserInfo.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -2256,6 +2266,9 @@
 		27A008C024BD99820002452B /* View */ = {
 			isa = PBXGroup;
 			children = (
+				27A008F524BDB6220002452B /* UserBodyView.h */,
+				27A008F624BDB6220002452B /* UserBodyView.m */,
+				27A008F824BDB6310002452B /* UserBodyView.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -2423,6 +2436,7 @@
 				2747718A24BC0C0500181362 /* WMPlayer.bundle in Resources */,
 				27476F5624BBFB5C00181362 /* LaunchScreen.storyboard in Resources */,
 				2747727F24BC0C7C00181362 /* RCColor.plist in Resources */,
+				27A008F924BDB6310002452B /* UserBodyView.xib in Resources */,
 				2794D1C424BD60E900BAF6F3 /* UserCenterBodyView.xib in Resources */,
 				2794D1B224BC605600BAF6F3 /* VefiBodyView.xib in Resources */,
 				2747728324BC0C7D00181362 /* RongCloud.bundle in Resources */,
@@ -2615,7 +2629,6 @@
 				2747721524BC0C0500181362 /* UIScreen+Extend.m in Sources */,
 				274771A324BC0C0500181362 /* MSSBrowseLocalViewController.m in Sources */,
 				2747723024BC0C0500181362 /* KSFullDatePicker.m in Sources */,
-				274771EA24BC0C0500181362 /* UserInfo.m in Sources */,
 				2794D1B824BC699700BAF6F3 /* RegisterBodyView.m in Sources */,
 				2747720A24BC0C0500181362 /* UIColor+Extend.m in Sources */,
 				274771B524BC0C0500181362 /* TYCyclePagerTransformLayout.m in Sources */,
@@ -2650,6 +2663,7 @@
 				27A008C924BD9D550002452B /* KSNetTypeManager.m in Sources */,
 				2747723524BC0C0500181362 /* JXPagerListRefreshView.m in Sources */,
 				274771A824BC0C0500181362 /* UIImage+MSSScale.m in Sources */,
+				27A008F724BDB6220002452B /* UserBodyView.m in Sources */,
 				274771D224BC0C0500181362 /* DisplayCommandMessage.m in Sources */,
 				2747722F24BC0C0500181362 /* KSRecordPowerAnimationView.m in Sources */,
 				2747723C24BC0C0500181362 /* JXCategoryIndicatorCellModel.m in Sources */,
@@ -2757,12 +2771,14 @@
 				2747723B24BC0C0500181362 /* JXCategoryIndicatorBackgroundView.m in Sources */,
 				274771FB24BC0C0500181362 /* NSMutableArray+KSSafe.m in Sources */,
 				274771D724BC0C0500181362 /* RoleChangedMessage.m in Sources */,
+				27A008F324BDB1E50002452B /* SysUser.m in Sources */,
 				2747725824BC0C0500181362 /* SkipTextView.m in Sources */,
 				2747725E24BC0C0500181362 /* KSInputView.m in Sources */,
 				2747719C24BC0C0500181362 /* TZLocationManager.m in Sources */,
 				2747720524BC0C0500181362 /* CALayer+Color.m in Sources */,
 				274771D124BC0C0500181362 /* ApplySpeechMessage.m in Sources */,
 				274771FF24BC0C0500181362 /* NSObject+AssociatedObject.m in Sources */,
+				27A008F424BDB1E50002452B /* UserInfo.m in Sources */,
 				2747726124BC0C0500181362 /* LLPhotoBrowser.m in Sources */,
 				2794D1BD24BD4CF800BAF6F3 /* FSBodyView.m in Sources */,
 				27A008A624BD96C50002452B /* NetworkBodyView.m in Sources */,

+ 22 - 0
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/image_upload.imageset/Contents.json

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

BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/image_upload.imageset/image_upload@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/image_upload.imageset/image_upload@3x.png


+ 22 - 0
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_choose.imageset/Contents.json

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

BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_choose.imageset/sex_choose@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_choose.imageset/sex_choose@3x.png


+ 22 - 0
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_unselected.imageset/Contents.json

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

BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_unselected.imageset/sex_unselected@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/Mine/sex_unselected.imageset/sex_unselected@3x.png


+ 17 - 0
MusicGradeExam/MusicGradeExam/KSRequestManager.h

@@ -35,6 +35,9 @@ NS_ASSUME_NONNULL_BEGIN
  */
 + (void)multiImageUpload:(NSString *)post imgDataArray:(NSArray *)pics success:(void(^)(NSArray *dics))success faliure:(void(^)(NSError *error))faliure;
 
+// 证件照上传
++ (void)cardImageUpload:(NSString *)post imgData:(NSData *)imageData success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 #pragma mark ---- version
 // api-web/appVersionInfo/queryByPlatform
 + (void)appVersionInfoRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
@@ -220,6 +223,20 @@ NS_ASSUME_NONNULL_BEGIN
  */
 + (void)queryUserInfo:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// /api-user/student/updateInfo
+
+/// 用户设置
+/// @param post post
+/// @param idCardNo 身份证号
+/// @param realName 姓名
+/// @param gender 性别
+/// @param birthdate 生日
+/// @param nation 名族
+/// @param avatar 头像
+/// @param success 成功
+/// @param faliure 失败
++ (void)updateInfoRequest:(NSString *)post idCardNo:(NSString *)idCardNo realName:(NSString *)realName gender:(NSString *)gender birthdate:(NSString *)birthdate nation:(NSString *)nation avatar:(NSString *)avatar success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 // /api-user/suggestion/add
 
 /**

+ 37 - 2
MusicGradeExam/MusicGradeExam/KSRequestManager.m

@@ -244,10 +244,19 @@
 /// @param success 成功
 /// @param faliure 失败
 + (void)multiImageUpload:(NSString *)post imgDataArray:(NSArray *)pics success:(void (^)(NSArray * _Nonnull))success faliure:(void (^)(NSError * _Nonnull))faliure {
-    NSString* url = [NSString stringWithFormat:@"%@%@",hostURL,@"/api-student/uploadFile"];
+    NSString* url = [NSString stringWithFormat:@"%@%@",hostURL,@"/api-user/uploadFile"];
     NSString *type = [UIImage typeForImageData:[pics lastObject]];
     [self uploadMultiFileWithFileArray:pics andWithUrl:url parameters:nil type:type name:@"file" mimeType:[NSString stringWithFormat:@"Image/%@",type] progress:nil success:success faliure:faliure];
 }
+
+// 证件照上传
++ (void)cardImageUpload:(NSString *)post imgData:(NSData *)imageData success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString* url = [NSString stringWithFormat:@"%@%@",hostURL,@"/api-user/examRegistration/ocr"];
+    NSString *type = [UIImage typeForImageData:imageData];
+    NSDictionary *parm = @{@"idCardSide" : @"front"};
+    [self uploadFileWithFileData:imageData andWithUrl:url parameters:parm type:type name:@"file" mimeType:[NSString stringWithFormat:@"Image/%@",type] progress:nil success:success faliure:faliure];
+}
+
 #pragma mark --- version
 // api-web/appVersionInfo/queryByPlatform
 + (void)appVersionInfoRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
@@ -522,8 +531,34 @@
 + (void)queryUserInfo:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
     
     NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-user/student/getStudent"];
-    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+    [self request:get url:url parm:nil success:success faliure:faliure];
 }
+
+// /api-user/student/updateInfo
+
+/// 用户设置
+/// @param post post
+/// @param idCardNo 身份证号
+/// @param realName 姓名
+/// @param gender 性别
+/// @param birthdate 生日
+/// @param nation 名族
+/// @param avatar 头像
+/// @param success 成功
+/// @param faliure 失败
++ (void)updateInfoRequest:(NSString *)post idCardNo:(NSString *)idCardNo realName:(NSString *)realName gender:(NSString *)gender birthdate:(NSString *)birthdate nation:(NSString *)nation avatar:(NSString *)avatar success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodForm];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:idCardNo forKey:@"idCardNo"];
+    [parm setValue:realName forKey:@"realName"];
+    [parm setValue:gender forKey:@"gender"];
+    [parm setValue:birthdate forKey:@"birthdate"];
+    [parm setValue:nation forKey:@"nation"];
+    [parm setValue:avatar forKey:@"avatar"];
+    NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-user/student/updateInfo"];
+    [self request:post url:url parm:parm success:success faliure:faliure];
+}
+
 // /api-user/suggestion/add
 
 /**

+ 43 - 0
MusicGradeExam/MusicGradeExam/UI/Login/Model/SysUser.h

@@ -0,0 +1,43 @@
+//
+//  SysUser.h
+//
+//  Created by   on 2020/7/14
+//  Copyright (c) 2020 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface SysUser : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *username;
+@property (nonatomic, assign) BOOL superAdmin;
+@property (nonatomic, assign) double lockFlag;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *realName;
+@property (nonatomic, strong) NSString *userType;
+@property (nonatomic, strong) NSString *wxOpenid;
+@property (nonatomic, assign) double delFlag;
+@property (nonatomic, strong) NSString *nation;
+@property (nonatomic, strong) NSString *salt;
+@property (nonatomic, assign) double sysUserIdentifier;
+@property (nonatomic, assign) double roles;
+@property (nonatomic, assign) double gender;
+@property (nonatomic, strong) NSString *email;
+@property (nonatomic, strong) NSString *phone;
+@property (nonatomic, strong) NSString *birthdate;
+@property (nonatomic, strong) NSString *idCardNo;
+@property (nonatomic, strong) NSString *avatar;
+@property (nonatomic, assign) BOOL isSuperAdmin;
+@property (nonatomic, strong) NSString *imToken;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, strong) NSString *password;
+@property (nonatomic, strong) NSString *qqOpenid;
+@property (nonatomic, strong) NSString *wechatId;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 256 - 0
MusicGradeExam/MusicGradeExam/UI/Login/Model/SysUser.m

@@ -0,0 +1,256 @@
+//
+//  SysUser.m
+//
+//  Created by   on 2020/7/14
+//  Copyright (c) 2020 __MyCompanyName__. All rights reserved.
+//
+
+#import "SysUser.h"
+
+
+NSString *const kSysUserUsername = @"username";
+NSString *const kSysUserSuperAdmin = @"superAdmin";
+NSString *const kSysUserLockFlag = @"lockFlag";
+NSString *const kSysUserUpdateTime = @"updateTime";
+NSString *const kSysUserRealName = @"realName";
+NSString *const kSysUserUserType = @"userType";
+NSString *const kSysUserWxOpenid = @"wxOpenid";
+NSString *const kSysUserDelFlag = @"delFlag";
+NSString *const kSysUserNation = @"nation";
+NSString *const kSysUserSalt = @"salt";
+NSString *const kSysUserId = @"id";
+NSString *const kSysUserRoles = @"roles";
+NSString *const kSysUserGender = @"gender";
+NSString *const kSysUserEmail = @"email";
+NSString *const kSysUserPhone = @"phone";
+NSString *const kSysUserBirthdate = @"birthdate";
+NSString *const kSysUserIdCardNo = @"idCardNo";
+NSString *const kSysUserAvatar = @"avatar";
+NSString *const kSysUserIsSuperAdmin = @"isSuperAdmin";
+NSString *const kSysUserImToken = @"imToken";
+NSString *const kSysUserCreateTime = @"createTime";
+NSString *const kSysUserPassword = @"password";
+NSString *const kSysUserQqOpenid = @"qqOpenid";
+NSString *const kSysUserWechatId = @"wechatId";
+
+
+@interface SysUser ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation SysUser
+
+@synthesize username = _username;
+@synthesize superAdmin = _superAdmin;
+@synthesize lockFlag = _lockFlag;
+@synthesize updateTime = _updateTime;
+@synthesize realName = _realName;
+@synthesize userType = _userType;
+@synthesize wxOpenid = _wxOpenid;
+@synthesize delFlag = _delFlag;
+@synthesize nation = _nation;
+@synthesize salt = _salt;
+@synthesize sysUserIdentifier = _sysUserIdentifier;
+@synthesize roles = _roles;
+@synthesize gender = _gender;
+@synthesize email = _email;
+@synthesize phone = _phone;
+@synthesize birthdate = _birthdate;
+@synthesize idCardNo = _idCardNo;
+@synthesize avatar = _avatar;
+@synthesize isSuperAdmin = _isSuperAdmin;
+@synthesize imToken = _imToken;
+@synthesize createTime = _createTime;
+@synthesize password = _password;
+@synthesize qqOpenid = _qqOpenid;
+@synthesize wechatId = _wechatId;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.username = [self objectOrNilForKey:kSysUserUsername fromDictionary:dict];
+            self.superAdmin = [[self objectOrNilForKey:kSysUserSuperAdmin fromDictionary:dict] boolValue];
+            self.lockFlag = [[self objectOrNilForKey:kSysUserLockFlag fromDictionary:dict] doubleValue];
+            self.updateTime = [self objectOrNilForKey:kSysUserUpdateTime fromDictionary:dict];
+            self.realName = [self objectOrNilForKey:kSysUserRealName fromDictionary:dict];
+            self.userType = [self objectOrNilForKey:kSysUserUserType fromDictionary:dict];
+            self.wxOpenid = [self objectOrNilForKey:kSysUserWxOpenid fromDictionary:dict];
+            self.delFlag = [[self objectOrNilForKey:kSysUserDelFlag fromDictionary:dict] doubleValue];
+            self.nation = [self objectOrNilForKey:kSysUserNation fromDictionary:dict];
+            self.salt = [self objectOrNilForKey:kSysUserSalt fromDictionary:dict];
+            self.sysUserIdentifier = [[self objectOrNilForKey:kSysUserId fromDictionary:dict] doubleValue];
+            self.roles = [[self objectOrNilForKey:kSysUserRoles fromDictionary:dict] doubleValue];
+            self.gender = [[self objectOrNilForKey:kSysUserGender fromDictionary:dict] doubleValue];
+            self.email = [self objectOrNilForKey:kSysUserEmail fromDictionary:dict];
+            self.phone = [self objectOrNilForKey:kSysUserPhone fromDictionary:dict];
+            self.birthdate = [self objectOrNilForKey:kSysUserBirthdate fromDictionary:dict];
+            self.idCardNo = [self objectOrNilForKey:kSysUserIdCardNo fromDictionary:dict];
+            self.avatar = [self objectOrNilForKey:kSysUserAvatar fromDictionary:dict];
+            self.isSuperAdmin = [[self objectOrNilForKey:kSysUserIsSuperAdmin fromDictionary:dict] boolValue];
+            self.imToken = [self objectOrNilForKey:kSysUserImToken fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kSysUserCreateTime fromDictionary:dict];
+            self.password = [self objectOrNilForKey:kSysUserPassword fromDictionary:dict];
+            self.qqOpenid = [self objectOrNilForKey:kSysUserQqOpenid fromDictionary:dict];
+            self.wechatId = [self objectOrNilForKey:kSysUserWechatId fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.username forKey:kSysUserUsername];
+    [mutableDict setValue:[NSNumber numberWithBool:self.superAdmin] forKey:kSysUserSuperAdmin];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.lockFlag] forKey:kSysUserLockFlag];
+    [mutableDict setValue:self.updateTime forKey:kSysUserUpdateTime];
+    [mutableDict setValue:self.realName forKey:kSysUserRealName];
+    [mutableDict setValue:self.userType forKey:kSysUserUserType];
+    [mutableDict setValue:self.wxOpenid forKey:kSysUserWxOpenid];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.delFlag] forKey:kSysUserDelFlag];
+    [mutableDict setValue:self.nation forKey:kSysUserNation];
+    [mutableDict setValue:self.salt forKey:kSysUserSalt];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.sysUserIdentifier] forKey:kSysUserId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.roles] forKey:kSysUserRoles];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.gender] forKey:kSysUserGender];
+    [mutableDict setValue:self.email forKey:kSysUserEmail];
+    [mutableDict setValue:self.phone forKey:kSysUserPhone];
+    [mutableDict setValue:self.birthdate forKey:kSysUserBirthdate];
+    [mutableDict setValue:self.idCardNo forKey:kSysUserIdCardNo];
+    [mutableDict setValue:self.avatar forKey:kSysUserAvatar];
+    [mutableDict setValue:[NSNumber numberWithBool:self.isSuperAdmin] forKey:kSysUserIsSuperAdmin];
+    [mutableDict setValue:self.imToken forKey:kSysUserImToken];
+    [mutableDict setValue:self.createTime forKey:kSysUserCreateTime];
+    [mutableDict setValue:self.password forKey:kSysUserPassword];
+    [mutableDict setValue:self.qqOpenid forKey:kSysUserQqOpenid];
+    [mutableDict setValue:self.wechatId forKey:kSysUserWechatId];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.username = [aDecoder decodeObjectForKey:kSysUserUsername];
+    self.superAdmin = [aDecoder decodeBoolForKey:kSysUserSuperAdmin];
+    self.lockFlag = [aDecoder decodeDoubleForKey:kSysUserLockFlag];
+    self.updateTime = [aDecoder decodeObjectForKey:kSysUserUpdateTime];
+    self.realName = [aDecoder decodeObjectForKey:kSysUserRealName];
+    self.userType = [aDecoder decodeObjectForKey:kSysUserUserType];
+    self.wxOpenid = [aDecoder decodeObjectForKey:kSysUserWxOpenid];
+    self.delFlag = [aDecoder decodeDoubleForKey:kSysUserDelFlag];
+    self.nation = [aDecoder decodeObjectForKey:kSysUserNation];
+    self.salt = [aDecoder decodeObjectForKey:kSysUserSalt];
+    self.sysUserIdentifier = [aDecoder decodeDoubleForKey:kSysUserId];
+    self.roles = [aDecoder decodeDoubleForKey:kSysUserRoles];
+    self.gender = [aDecoder decodeDoubleForKey:kSysUserGender];
+    self.email = [aDecoder decodeObjectForKey:kSysUserEmail];
+    self.phone = [aDecoder decodeObjectForKey:kSysUserPhone];
+    self.birthdate = [aDecoder decodeObjectForKey:kSysUserBirthdate];
+    self.idCardNo = [aDecoder decodeObjectForKey:kSysUserIdCardNo];
+    self.avatar = [aDecoder decodeObjectForKey:kSysUserAvatar];
+    self.isSuperAdmin = [aDecoder decodeBoolForKey:kSysUserIsSuperAdmin];
+    self.imToken = [aDecoder decodeObjectForKey:kSysUserImToken];
+    self.createTime = [aDecoder decodeObjectForKey:kSysUserCreateTime];
+    self.password = [aDecoder decodeObjectForKey:kSysUserPassword];
+    self.qqOpenid = [aDecoder decodeObjectForKey:kSysUserQqOpenid];
+    self.wechatId = [aDecoder decodeObjectForKey:kSysUserWechatId];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_username forKey:kSysUserUsername];
+    [aCoder encodeBool:_superAdmin forKey:kSysUserSuperAdmin];
+    [aCoder encodeDouble:_lockFlag forKey:kSysUserLockFlag];
+    [aCoder encodeObject:_updateTime forKey:kSysUserUpdateTime];
+    [aCoder encodeObject:_realName forKey:kSysUserRealName];
+    [aCoder encodeObject:_userType forKey:kSysUserUserType];
+    [aCoder encodeObject:_wxOpenid forKey:kSysUserWxOpenid];
+    [aCoder encodeDouble:_delFlag forKey:kSysUserDelFlag];
+    [aCoder encodeObject:_nation forKey:kSysUserNation];
+    [aCoder encodeObject:_salt forKey:kSysUserSalt];
+    [aCoder encodeDouble:_sysUserIdentifier forKey:kSysUserId];
+    [aCoder encodeDouble:_roles forKey:kSysUserRoles];
+    [aCoder encodeDouble:_gender forKey:kSysUserGender];
+    [aCoder encodeObject:_email forKey:kSysUserEmail];
+    [aCoder encodeObject:_phone forKey:kSysUserPhone];
+    [aCoder encodeObject:_birthdate forKey:kSysUserBirthdate];
+    [aCoder encodeObject:_idCardNo forKey:kSysUserIdCardNo];
+    [aCoder encodeObject:_avatar forKey:kSysUserAvatar];
+    [aCoder encodeBool:_isSuperAdmin forKey:kSysUserIsSuperAdmin];
+    [aCoder encodeObject:_imToken forKey:kSysUserImToken];
+    [aCoder encodeObject:_createTime forKey:kSysUserCreateTime];
+    [aCoder encodeObject:_password forKey:kSysUserPassword];
+    [aCoder encodeObject:_qqOpenid forKey:kSysUserQqOpenid];
+    [aCoder encodeObject:_wechatId forKey:kSysUserWechatId];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    SysUser *copy = [[SysUser alloc] init];
+    
+    if (copy) {
+
+        copy.username = [self.username copyWithZone:zone];
+        copy.superAdmin = self.superAdmin;
+        copy.lockFlag = self.lockFlag;
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.realName = [self.realName copyWithZone:zone];
+        copy.userType = [self.userType copyWithZone:zone];
+        copy.wxOpenid = [self.wxOpenid copyWithZone:zone];
+        copy.delFlag = self.delFlag;
+        copy.nation = [self.nation copyWithZone:zone];
+        copy.salt = [self.salt copyWithZone:zone];
+        copy.sysUserIdentifier = self.sysUserIdentifier;
+        copy.roles = self.roles;
+        copy.gender = self.gender;
+        copy.email = [self.email copyWithZone:zone];
+        copy.phone = [self.phone copyWithZone:zone];
+        copy.birthdate = [self.birthdate copyWithZone:zone];
+        copy.idCardNo = [self.idCardNo copyWithZone:zone];
+        copy.avatar = [self.avatar copyWithZone:zone];
+        copy.isSuperAdmin = self.isSuperAdmin;
+        copy.imToken = [self.imToken copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.password = [self.password copyWithZone:zone];
+        copy.qqOpenid = [self.qqOpenid copyWithZone:zone];
+        copy.wechatId = [self.wechatId copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 26 - 21
MusicGradeExam/MusicGradeExam/UI/Login/Model/UserInfo.h

@@ -1,40 +1,45 @@
 //
 //  UserInfo.h
-//  MusicGradeExam
 //
-//  Created by Kyle on 2020/7/10.
-//  Copyright © 2020 DayaMusic. All rights reserved.
+//  Created by   on 2020/7/14
+//  Copyright (c) 2020 __MyCompanyName__. All rights reserved.
 //
 
 #import <Foundation/Foundation.h>
-
+#import "SysUser.h"
 
 
 @interface UserInfo : NSObject <NSCoding, NSCopying>
 
 @property (nonatomic, assign) double userId;
-@property (nonatomic, strong) NSString *wxOpenid;
-@property (nonatomic, strong) NSString *delFlag;
-@property (nonatomic, strong) NSString *phone;
+@property (nonatomic, strong) NSString *username;
+@property (nonatomic, assign) BOOL superAdmin;
+@property (nonatomic, assign) double lockFlag;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *realName;
 @property (nonatomic, strong) NSString *userType;
-@property (nonatomic, strong) NSString *imToken;
-@property (nonatomic, strong) NSString *lockFlag;
-@property (nonatomic, assign) double organId;
-@property (nonatomic, strong) NSString *qqOpenid;
+@property (nonatomic, strong) NSString *wxOpenid;
+@property (nonatomic, assign) double delFlag;
+@property (nonatomic, strong) SysUser *sysUser;
 @property (nonatomic, strong) NSString *nation;
-@property (nonatomic, strong) NSString *birthdate;
-@property (nonatomic, strong) NSString *avatar;
-@property (nonatomic, strong) NSString *password;
+@property (nonatomic, assign) double examNum;
+@property (nonatomic, assign) double internalBaseClassIdentifier;
+@property (nonatomic, assign) double roles;
 @property (nonatomic, strong) NSString *salt;
-@property (nonatomic, strong) NSString *createTime;
-@property (nonatomic, strong) NSString *username;
 @property (nonatomic, strong) NSString *email;
 @property (nonatomic, assign) double gender;
-@property (nonatomic, strong) NSString *updateTime;
-@property (nonatomic, strong) NSString *currentGrade;
-@property (nonatomic, strong) NSString *currentClass;
-
-
+@property (nonatomic, strong) NSString *phone;
+@property (nonatomic, strong) NSString *birthdate;
+@property (nonatomic, assign) double organId;
+@property (nonatomic, strong) NSString *avatar;
+@property (nonatomic, assign) BOOL isSuperAdmin;
+@property (nonatomic, strong) NSString *imToken;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, strong) NSString *certificatePhoto;
+@property (nonatomic, strong) NSString *password;
+@property (nonatomic, strong) NSString *qqOpenid;
+@property (nonatomic, strong) NSString *idCardNo;
+@property (nonatomic, strong) NSString *wechatId;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;

+ 170 - 118
MusicGradeExam/MusicGradeExam/UI/Login/Model/UserInfo.m

@@ -1,35 +1,43 @@
 //
 //  UserInfo.m
-//  MusicGradeExam
 //
-//  Created by Kyle on 2020/7/10.
-//  Copyright © 2020 DayaMusic. All rights reserved.
+//  Created by   on 2020/7/14
+//  Copyright (c) 2020 __MyCompanyName__. All rights reserved.
 //
 
 #import "UserInfo.h"
 
 
-NSString *const kUserInfoId = @"id";
+NSString *const kUserInfoUserId = @"userId";
+NSString *const kUserInfoUsername = @"username";
+NSString *const kUserInfoSuperAdmin = @"superAdmin";
+NSString *const kUserInfoLockFlag = @"lockFlag";
+NSString *const kUserInfoUpdateTime = @"updateTime";
+NSString *const kUserInfoRealName = @"realName";
+NSString *const kUserInfoUserType = @"userType";
 NSString *const kUserInfoWxOpenid = @"wxOpenid";
 NSString *const kUserInfoDelFlag = @"delFlag";
-NSString *const kUserInfoPhone = @"phone";
-NSString *const kUserInfoUserType = @"userType";
-NSString *const kUserInfoImToken = @"imToken";
-NSString *const kUserInfoLockFlag = @"lockFlag";
-NSString *const kUserInfoOrganId = @"organId";
-NSString *const kUserInfoQqOpenid = @"qqOpenid";
+NSString *const kUserInfoSysUser = @"sysUser";
 NSString *const kUserInfoNation = @"nation";
-NSString *const kUserInfoBirthdate = @"birthdate";
-NSString *const kUserInfoAvatar = @"avatar";
-NSString *const kUserInfoPassword = @"password";
+NSString *const kUserInfoExamNum = @"examNum";
+NSString *const kUserInfoId = @"id";
+NSString *const kUserInfoRoles = @"roles";
 NSString *const kUserInfoSalt = @"salt";
-NSString *const kUserInfoCreateTime = @"createTime";
-NSString *const kUserInfoUsername = @"username";
 NSString *const kUserInfoEmail = @"email";
 NSString *const kUserInfoGender = @"gender";
-NSString *const kUserInfoUpdateTime = @"updateTime";
-NSString *const kUserInfoCurrentGrade = @"currentGrade";
-NSString *const kUserInfoCurrentClass = @"currentClass";
+NSString *const kUserInfoPhone = @"phone";
+NSString *const kUserInfoBirthdate = @"birthdate";
+NSString *const kUserInfoOrganId = @"organId";
+NSString *const kUserInfoAvatar = @"avatar";
+NSString *const kUserInfoIsSuperAdmin = @"isSuperAdmin";
+NSString *const kUserInfoImToken = @"imToken";
+NSString *const kUserInfoCreateTime = @"createTime";
+NSString *const kUserInfoCertificatePhoto = @"certificatePhoto";
+NSString *const kUserInfoPassword = @"password";
+NSString *const kUserInfoQqOpenid = @"qqOpenid";
+NSString *const kUserInfoIdCardNo = @"idCardNo";
+NSString *const kUserInfoWechatId = @"wechatId";
+
 
 @interface UserInfo ()
 
@@ -40,26 +48,35 @@ NSString *const kUserInfoCurrentClass = @"currentClass";
 @implementation UserInfo
 
 @synthesize userId = _userId;
+@synthesize username = _username;
+@synthesize superAdmin = _superAdmin;
+@synthesize lockFlag = _lockFlag;
+@synthesize updateTime = _updateTime;
+@synthesize realName = _realName;
+@synthesize userType = _userType;
 @synthesize wxOpenid = _wxOpenid;
 @synthesize delFlag = _delFlag;
-@synthesize phone = _phone;
-@synthesize userType = _userType;
-@synthesize imToken = _imToken;
-@synthesize lockFlag = _lockFlag;
-@synthesize organId = _organId;
-@synthesize qqOpenid = _qqOpenid;
+@synthesize sysUser = _sysUser;
 @synthesize nation = _nation;
-@synthesize birthdate = _birthdate;
-@synthesize avatar = _avatar;
-@synthesize password = _password;
+@synthesize examNum = _examNum;
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize roles = _roles;
 @synthesize salt = _salt;
-@synthesize createTime = _createTime;
-@synthesize username = _username;
 @synthesize email = _email;
 @synthesize gender = _gender;
-@synthesize updateTime = _updateTime;
-@synthesize currentGrade = _currentGrade;
-@synthesize currentClass = _currentClass;
+@synthesize phone = _phone;
+@synthesize birthdate = _birthdate;
+@synthesize organId = _organId;
+@synthesize avatar = _avatar;
+@synthesize isSuperAdmin = _isSuperAdmin;
+@synthesize imToken = _imToken;
+@synthesize createTime = _createTime;
+@synthesize certificatePhoto = _certificatePhoto;
+@synthesize password = _password;
+@synthesize qqOpenid = _qqOpenid;
+@synthesize idCardNo = _idCardNo;
+@synthesize wechatId = _wechatId;
+
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
 {
@@ -73,27 +90,35 @@ NSString *const kUserInfoCurrentClass = @"currentClass";
     // 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.userId = [[self objectOrNilForKey:kUserInfoId fromDictionary:dict] doubleValue];
-            self.wxOpenid = [self objectOrNilForKey:kUserInfoWxOpenid fromDictionary:dict];
-            self.delFlag = [self objectOrNilForKey:kUserInfoDelFlag fromDictionary:dict];
-            self.phone = [self objectOrNilForKey:kUserInfoPhone fromDictionary:dict];
+            self.userId = [[self objectOrNilForKey:kUserInfoUserId fromDictionary:dict] doubleValue];
+            self.username = [self objectOrNilForKey:kUserInfoUsername fromDictionary:dict];
+            self.superAdmin = [[self objectOrNilForKey:kUserInfoSuperAdmin fromDictionary:dict] boolValue];
+            self.lockFlag = [[self objectOrNilForKey:kUserInfoLockFlag fromDictionary:dict] doubleValue];
+            self.updateTime = [self objectOrNilForKey:kUserInfoUpdateTime fromDictionary:dict];
+            self.realName = [self objectOrNilForKey:kUserInfoRealName fromDictionary:dict];
             self.userType = [self objectOrNilForKey:kUserInfoUserType fromDictionary:dict];
-            self.imToken = [self objectOrNilForKey:kUserInfoImToken fromDictionary:dict];
-            self.lockFlag = [self objectOrNilForKey:kUserInfoLockFlag fromDictionary:dict];
-            self.organId = [[self objectOrNilForKey:kUserInfoOrganId fromDictionary:dict] doubleValue];
-            self.qqOpenid = [self objectOrNilForKey:kUserInfoQqOpenid fromDictionary:dict];
+            self.wxOpenid = [self objectOrNilForKey:kUserInfoWxOpenid fromDictionary:dict];
+            self.delFlag = [[self objectOrNilForKey:kUserInfoDelFlag fromDictionary:dict] doubleValue];
+            self.sysUser = [SysUser modelObjectWithDictionary:[dict objectForKey:kUserInfoSysUser]];
             self.nation = [self objectOrNilForKey:kUserInfoNation fromDictionary:dict];
-            self.birthdate = [self objectOrNilForKey:kUserInfoBirthdate fromDictionary:dict];
-            self.avatar = [self objectOrNilForKey:kUserInfoAvatar fromDictionary:dict];
-            self.password = [self objectOrNilForKey:kUserInfoPassword fromDictionary:dict];
+            self.examNum = [[self objectOrNilForKey:kUserInfoExamNum fromDictionary:dict] doubleValue];
+            self.internalBaseClassIdentifier = [[self objectOrNilForKey:kUserInfoId fromDictionary:dict] doubleValue];
+            self.roles = [[self objectOrNilForKey:kUserInfoRoles fromDictionary:dict] doubleValue];
             self.salt = [self objectOrNilForKey:kUserInfoSalt fromDictionary:dict];
-            self.createTime = [self objectOrNilForKey:kUserInfoCreateTime fromDictionary:dict];
-            self.username = [self objectOrNilForKey:kUserInfoUsername fromDictionary:dict];
             self.email = [self objectOrNilForKey:kUserInfoEmail fromDictionary:dict];
             self.gender = [[self objectOrNilForKey:kUserInfoGender fromDictionary:dict] doubleValue];
-            self.updateTime = [self objectOrNilForKey:kUserInfoUpdateTime fromDictionary:dict];
-            self.currentGrade = [self objectOrNilForKey:kUserInfoCurrentGrade fromDictionary:dict];
-            self.currentClass = [self objectOrNilForKey:kUserInfoCurrentClass fromDictionary:dict];
+            self.phone = [self objectOrNilForKey:kUserInfoPhone fromDictionary:dict];
+            self.birthdate = [self objectOrNilForKey:kUserInfoBirthdate fromDictionary:dict];
+            self.organId = [[self objectOrNilForKey:kUserInfoOrganId fromDictionary:dict] doubleValue];
+            self.avatar = [self objectOrNilForKey:kUserInfoAvatar fromDictionary:dict];
+            self.isSuperAdmin = [[self objectOrNilForKey:kUserInfoIsSuperAdmin fromDictionary:dict] boolValue];
+            self.imToken = [self objectOrNilForKey:kUserInfoImToken fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kUserInfoCreateTime fromDictionary:dict];
+            self.certificatePhoto = [self objectOrNilForKey:kUserInfoCertificatePhoto fromDictionary:dict];
+            self.password = [self objectOrNilForKey:kUserInfoPassword fromDictionary:dict];
+            self.qqOpenid = [self objectOrNilForKey:kUserInfoQqOpenid fromDictionary:dict];
+            self.idCardNo = [self objectOrNilForKey:kUserInfoIdCardNo fromDictionary:dict];
+            self.wechatId = [self objectOrNilForKey:kUserInfoWechatId fromDictionary:dict];
 
     }
     
@@ -104,32 +129,40 @@ NSString *const kUserInfoCurrentClass = @"currentClass";
 - (NSDictionary *)dictionaryRepresentation
 {
     NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kUserInfoId];
-    [mutableDict setValue:self.wxOpenid forKey:kUserInfoWxOpenid];
-    [mutableDict setValue:self.delFlag forKey:kUserInfoDelFlag];
-    [mutableDict setValue:self.phone forKey:kUserInfoPhone];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kUserInfoUserId];
+    [mutableDict setValue:self.username forKey:kUserInfoUsername];
+    [mutableDict setValue:[NSNumber numberWithBool:self.superAdmin] forKey:kUserInfoSuperAdmin];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.lockFlag] forKey:kUserInfoLockFlag];
+    [mutableDict setValue:self.updateTime forKey:kUserInfoUpdateTime];
+    [mutableDict setValue:self.realName forKey:kUserInfoRealName];
     [mutableDict setValue:self.userType forKey:kUserInfoUserType];
-    [mutableDict setValue:self.imToken forKey:kUserInfoImToken];
-    [mutableDict setValue:self.lockFlag forKey:kUserInfoLockFlag];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.organId] forKey:kUserInfoOrganId];
-    [mutableDict setValue:self.qqOpenid forKey:kUserInfoQqOpenid];
+    [mutableDict setValue:self.wxOpenid forKey:kUserInfoWxOpenid];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.delFlag] forKey:kUserInfoDelFlag];
+    [mutableDict setValue:[self.sysUser dictionaryRepresentation] forKey:kUserInfoSysUser];
     [mutableDict setValue:self.nation forKey:kUserInfoNation];
-    [mutableDict setValue:self.birthdate forKey:kUserInfoBirthdate];
-    [mutableDict setValue:self.avatar forKey:kUserInfoAvatar];
-    [mutableDict setValue:self.password forKey:kUserInfoPassword];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.examNum] forKey:kUserInfoExamNum];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.internalBaseClassIdentifier] forKey:kUserInfoId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.roles] forKey:kUserInfoRoles];
     [mutableDict setValue:self.salt forKey:kUserInfoSalt];
-    [mutableDict setValue:self.createTime forKey:kUserInfoCreateTime];
-    [mutableDict setValue:self.username forKey:kUserInfoUsername];
     [mutableDict setValue:self.email forKey:kUserInfoEmail];
     [mutableDict setValue:[NSNumber numberWithDouble:self.gender] forKey:kUserInfoGender];
-    [mutableDict setValue:self.updateTime forKey:kUserInfoUpdateTime];
-    [mutableDict setValue:self.currentGrade forKey:kUserInfoCurrentGrade];
-    [mutableDict setValue:self.currentClass forKey:kUserInfoCurrentClass];
-    
+    [mutableDict setValue:self.phone forKey:kUserInfoPhone];
+    [mutableDict setValue:self.birthdate forKey:kUserInfoBirthdate];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.organId] forKey:kUserInfoOrganId];
+    [mutableDict setValue:self.avatar forKey:kUserInfoAvatar];
+    [mutableDict setValue:[NSNumber numberWithBool:self.isSuperAdmin] forKey:kUserInfoIsSuperAdmin];
+    [mutableDict setValue:self.imToken forKey:kUserInfoImToken];
+    [mutableDict setValue:self.createTime forKey:kUserInfoCreateTime];
+    [mutableDict setValue:self.certificatePhoto forKey:kUserInfoCertificatePhoto];
+    [mutableDict setValue:self.password forKey:kUserInfoPassword];
+    [mutableDict setValue:self.qqOpenid forKey:kUserInfoQqOpenid];
+    [mutableDict setValue:self.idCardNo forKey:kUserInfoIdCardNo];
+    [mutableDict setValue:self.wechatId forKey:kUserInfoWechatId];
+
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
-- (NSString *)description
+- (NSString *)description 
 {
     return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
 }
@@ -138,10 +171,6 @@ NSString *const kUserInfoCurrentClass = @"currentClass";
 - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
 {
     id object = [dict objectForKey:aKey];
-    if ([object isKindOfClass:[NSNumber class]]) {
-        NSNumber *number = object;
-        object = [number stringValue];
-    }
     return [object isEqual:[NSNull null]] ? nil : object;
 }
 
@@ -152,54 +181,70 @@ NSString *const kUserInfoCurrentClass = @"currentClass";
 {
     self = [super init];
 
-    self.userId = [aDecoder decodeDoubleForKey:kUserInfoId];
-    self.wxOpenid = [aDecoder decodeObjectForKey:kUserInfoWxOpenid];
-    self.delFlag = [aDecoder decodeObjectForKey:kUserInfoDelFlag];
-    self.phone = [aDecoder decodeObjectForKey:kUserInfoPhone];
+    self.userId = [aDecoder decodeDoubleForKey:kUserInfoUserId];
+    self.username = [aDecoder decodeObjectForKey:kUserInfoUsername];
+    self.superAdmin = [aDecoder decodeBoolForKey:kUserInfoSuperAdmin];
+    self.lockFlag = [aDecoder decodeDoubleForKey:kUserInfoLockFlag];
+    self.updateTime = [aDecoder decodeObjectForKey:kUserInfoUpdateTime];
+    self.realName = [aDecoder decodeObjectForKey:kUserInfoRealName];
     self.userType = [aDecoder decodeObjectForKey:kUserInfoUserType];
-    self.imToken = [aDecoder decodeObjectForKey:kUserInfoImToken];
-    self.lockFlag = [aDecoder decodeObjectForKey:kUserInfoLockFlag];
-    self.organId = [aDecoder decodeDoubleForKey:kUserInfoOrganId];
-    self.qqOpenid = [aDecoder decodeObjectForKey:kUserInfoQqOpenid];
+    self.wxOpenid = [aDecoder decodeObjectForKey:kUserInfoWxOpenid];
+    self.delFlag = [aDecoder decodeDoubleForKey:kUserInfoDelFlag];
+    self.sysUser = [aDecoder decodeObjectForKey:kUserInfoSysUser];
     self.nation = [aDecoder decodeObjectForKey:kUserInfoNation];
-    self.birthdate = [aDecoder decodeObjectForKey:kUserInfoBirthdate];
-    self.avatar = [aDecoder decodeObjectForKey:kUserInfoAvatar];
-    self.password = [aDecoder decodeObjectForKey:kUserInfoPassword];
+    self.examNum = [aDecoder decodeDoubleForKey:kUserInfoExamNum];
+    self.internalBaseClassIdentifier = [aDecoder decodeDoubleForKey:kUserInfoId];
+    self.roles = [aDecoder decodeDoubleForKey:kUserInfoRoles];
     self.salt = [aDecoder decodeObjectForKey:kUserInfoSalt];
-    self.createTime = [aDecoder decodeObjectForKey:kUserInfoCreateTime];
-    self.username = [aDecoder decodeObjectForKey:kUserInfoUsername];
     self.email = [aDecoder decodeObjectForKey:kUserInfoEmail];
     self.gender = [aDecoder decodeDoubleForKey:kUserInfoGender];
-    self.updateTime = [aDecoder decodeObjectForKey:kUserInfoUpdateTime];
-    self.currentGrade = [aDecoder decodeObjectForKey:kUserInfoCurrentGrade];
-    self.currentClass = [aDecoder decodeObjectForKey:kUserInfoCurrentClass];
+    self.phone = [aDecoder decodeObjectForKey:kUserInfoPhone];
+    self.birthdate = [aDecoder decodeObjectForKey:kUserInfoBirthdate];
+    self.organId = [aDecoder decodeDoubleForKey:kUserInfoOrganId];
+    self.avatar = [aDecoder decodeObjectForKey:kUserInfoAvatar];
+    self.isSuperAdmin = [aDecoder decodeBoolForKey:kUserInfoIsSuperAdmin];
+    self.imToken = [aDecoder decodeObjectForKey:kUserInfoImToken];
+    self.createTime = [aDecoder decodeObjectForKey:kUserInfoCreateTime];
+    self.certificatePhoto = [aDecoder decodeObjectForKey:kUserInfoCertificatePhoto];
+    self.password = [aDecoder decodeObjectForKey:kUserInfoPassword];
+    self.qqOpenid = [aDecoder decodeObjectForKey:kUserInfoQqOpenid];
+    self.idCardNo = [aDecoder decodeObjectForKey:kUserInfoIdCardNo];
+    self.wechatId = [aDecoder decodeObjectForKey:kUserInfoWechatId];
     return self;
 }
 
 - (void)encodeWithCoder:(NSCoder *)aCoder
 {
 
-    [aCoder encodeDouble:_userId forKey:kUserInfoId];
-    [aCoder encodeObject:_wxOpenid forKey:kUserInfoWxOpenid];
-    [aCoder encodeObject:_delFlag forKey:kUserInfoDelFlag];
-    [aCoder encodeObject:_phone forKey:kUserInfoPhone];
+    [aCoder encodeDouble:_userId forKey:kUserInfoUserId];
+    [aCoder encodeObject:_username forKey:kUserInfoUsername];
+    [aCoder encodeBool:_superAdmin forKey:kUserInfoSuperAdmin];
+    [aCoder encodeDouble:_lockFlag forKey:kUserInfoLockFlag];
+    [aCoder encodeObject:_updateTime forKey:kUserInfoUpdateTime];
+    [aCoder encodeObject:_realName forKey:kUserInfoRealName];
     [aCoder encodeObject:_userType forKey:kUserInfoUserType];
-    [aCoder encodeObject:_imToken forKey:kUserInfoImToken];
-    [aCoder encodeObject:_lockFlag forKey:kUserInfoLockFlag];
-    [aCoder encodeDouble:_organId forKey:kUserInfoOrganId];
-    [aCoder encodeObject:_qqOpenid forKey:kUserInfoQqOpenid];
+    [aCoder encodeObject:_wxOpenid forKey:kUserInfoWxOpenid];
+    [aCoder encodeDouble:_delFlag forKey:kUserInfoDelFlag];
+    [aCoder encodeObject:_sysUser forKey:kUserInfoSysUser];
     [aCoder encodeObject:_nation forKey:kUserInfoNation];
-    [aCoder encodeObject:_birthdate forKey:kUserInfoBirthdate];
-    [aCoder encodeObject:_avatar forKey:kUserInfoAvatar];
-    [aCoder encodeObject:_password forKey:kUserInfoPassword];
+    [aCoder encodeDouble:_examNum forKey:kUserInfoExamNum];
+    [aCoder encodeDouble:_internalBaseClassIdentifier forKey:kUserInfoId];
+    [aCoder encodeDouble:_roles forKey:kUserInfoRoles];
     [aCoder encodeObject:_salt forKey:kUserInfoSalt];
-    [aCoder encodeObject:_createTime forKey:kUserInfoCreateTime];
-    [aCoder encodeObject:_username forKey:kUserInfoUsername];
     [aCoder encodeObject:_email forKey:kUserInfoEmail];
     [aCoder encodeDouble:_gender forKey:kUserInfoGender];
-    [aCoder encodeObject:_updateTime forKey:kUserInfoUpdateTime];
-    [aCoder encodeObject:_currentGrade forKey:kUserInfoCurrentGrade];
-    [aCoder encodeObject:_currentClass forKey:kUserInfoCurrentClass];
+    [aCoder encodeObject:_phone forKey:kUserInfoPhone];
+    [aCoder encodeObject:_birthdate forKey:kUserInfoBirthdate];
+    [aCoder encodeDouble:_organId forKey:kUserInfoOrganId];
+    [aCoder encodeObject:_avatar forKey:kUserInfoAvatar];
+    [aCoder encodeBool:_isSuperAdmin forKey:kUserInfoIsSuperAdmin];
+    [aCoder encodeObject:_imToken forKey:kUserInfoImToken];
+    [aCoder encodeObject:_createTime forKey:kUserInfoCreateTime];
+    [aCoder encodeObject:_certificatePhoto forKey:kUserInfoCertificatePhoto];
+    [aCoder encodeObject:_password forKey:kUserInfoPassword];
+    [aCoder encodeObject:_qqOpenid forKey:kUserInfoQqOpenid];
+    [aCoder encodeObject:_idCardNo forKey:kUserInfoIdCardNo];
+    [aCoder encodeObject:_wechatId forKey:kUserInfoWechatId];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -209,26 +254,34 @@ NSString *const kUserInfoCurrentClass = @"currentClass";
     if (copy) {
 
         copy.userId = self.userId;
-        copy.wxOpenid = [self.wxOpenid copyWithZone:zone];
-        copy.delFlag = [self.delFlag copyWithZone:zone];
-        copy.phone = [self.phone copyWithZone:zone];
+        copy.username = [self.username copyWithZone:zone];
+        copy.superAdmin = self.superAdmin;
+        copy.lockFlag = self.lockFlag;
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.realName = [self.realName copyWithZone:zone];
         copy.userType = [self.userType copyWithZone:zone];
-        copy.imToken = [self.imToken copyWithZone:zone];
-        copy.lockFlag = [self.lockFlag copyWithZone:zone];
-        copy.organId = self.organId;
-        copy.qqOpenid = [self.qqOpenid copyWithZone:zone];
+        copy.wxOpenid = [self.wxOpenid copyWithZone:zone];
+        copy.delFlag = self.delFlag;
+        copy.sysUser = [self.sysUser copyWithZone:zone];
         copy.nation = [self.nation copyWithZone:zone];
-        copy.birthdate = [self.birthdate copyWithZone:zone];
-        copy.avatar = [self.avatar copyWithZone:zone];
-        copy.password = [self.password copyWithZone:zone];
+        copy.examNum = self.examNum;
+        copy.internalBaseClassIdentifier = self.internalBaseClassIdentifier;
+        copy.roles = self.roles;
         copy.salt = [self.salt copyWithZone:zone];
-        copy.createTime = [self.createTime copyWithZone:zone];
-        copy.username = [self.username copyWithZone:zone];
         copy.email = [self.email copyWithZone:zone];
         copy.gender = self.gender;
-        copy.updateTime = [self.updateTime copyWithZone:zone];
-        copy.currentGrade = [self.currentGrade copyWithZone:zone];
-        copy.currentClass = [self.currentClass copyWithZone:zone];
+        copy.phone = [self.phone copyWithZone:zone];
+        copy.birthdate = [self.birthdate copyWithZone:zone];
+        copy.organId = self.organId;
+        copy.avatar = [self.avatar copyWithZone:zone];
+        copy.isSuperAdmin = self.isSuperAdmin;
+        copy.imToken = [self.imToken copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.certificatePhoto = [self.certificatePhoto copyWithZone:zone];
+        copy.password = [self.password copyWithZone:zone];
+        copy.qqOpenid = [self.qqOpenid copyWithZone:zone];
+        copy.idCardNo = [self.idCardNo copyWithZone:zone];
+        copy.wechatId = [self.wechatId copyWithZone:zone];
     }
     
     return copy;
@@ -236,4 +289,3 @@ NSString *const kUserInfoCurrentClass = @"currentClass";
 
 
 @end
-

+ 4 - 4
MusicGradeExam/MusicGradeExam/UI/Login/View/ModifyBodyView.xib

@@ -40,7 +40,7 @@
                             <rect key="frame" x="16" y="0.0" width="285" height="50"/>
                             <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                            <textInputTraits key="textInputTraits"/>
+                            <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                         </textField>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="U4v-l2-m2h">
                             <rect key="frame" x="311" y="10" width="90" height="30"/>
@@ -75,7 +75,7 @@
                             <rect key="frame" x="16" y="0.0" width="382" height="50"/>
                             <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                            <textInputTraits key="textInputTraits"/>
+                            <textInputTraits key="textInputTraits" enablesReturnKeyAutomatically="YES"/>
                         </textField>
                     </subviews>
                     <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
@@ -122,9 +122,9 @@
             <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
             <connections>
                 <outlet property="codeButton" destination="U4v-l2-m2h" id="T0l-m5-k2C"/>
-                <outlet property="codeField" destination="Efg-Kj-Z58" id="yiP-Fp-RQi"/>
+                <outlet property="codeField" destination="WBQ-Pf-zKW" id="4zI-Bk-QPi"/>
                 <outlet property="phoneField" destination="uYT-Fc-zKn" id="1p6-iT-Ara"/>
-                <outlet property="pwdField" destination="WBQ-Pf-zKW" id="G2J-H7-2rC"/>
+                <outlet property="pwdField" destination="Efg-Kj-Z58" id="aQq-gj-O0y"/>
             </connections>
             <point key="canvasLocation" x="132" y="109"/>
         </view>

+ 164 - 0
MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/Mine/Controller/UserViewController.m

@@ -7,9 +7,16 @@
 //
 
 #import "UserViewController.h"
+#import "UserBodyView.h"
+#import "KSMediaManager.h"
+#import "UserInfoManager.h"
 
 @interface UserViewController ()
 
+@property (nonatomic, strong) UserBodyView *bodyView;
+
+@property (nonatomic, strong) KSMediaManager *mediaManager;
+
 @end
 
 @implementation UserViewController
@@ -18,6 +25,163 @@
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     [self allocTitle:@"个人资料"];
+    [self configUI];
+}
+
+- (void)configUI {
+    _bodyView = [UserBodyView shareInstance];
+    _bodyView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight - kNaviBarHeight - iPhoneXSafeBottomMargin);
+    MJWeakSelf;
+    [_bodyView configMessageUploadCall:^(BOOL isAvatal) {
+        if (isAvatal) {
+            [weakSelf chooseAvatal];
+        }
+        else {
+            [weakSelf chooseImageUpload];
+        }
+    }];
+
+    [self.scrollView addSubview:_bodyView];
+}
+
+// 上传头像
+- (void)chooseAvatal {
+    // 调用相册
+    self.mediaManager = [[KSMediaManager alloc] init];
+    self.mediaManager.mediaType = MEDIATYPE_PHOTO;
+    self.mediaManager.maxPhotoNumber = 1;
+    self.mediaManager.baseCtrl = self;
+    MJWeakSelf;
+    [self.mediaManager noAlertCallback:^(NSString * _Nullable videoUrl, NSMutableArray * _Nullable imageArray, NSMutableArray * _Nullable imageAsset) {
+        UIImage *sendImg = [imageArray lastObject];
+        [weakSelf uploadAvatalImage:sendImg];
+    }];
+    [self.mediaManager pushImagePickerController];
+}
+
+- (void)uploadAvatalImage:(UIImage *)avatalImage {
+    [self showhud];
+    NSData *imgData = [UIImage turnsImaegDataByImage:avatalImage];
+    [KSRequestManager multiImageUpload:KS_POST imgDataArray:@[imgData] success:^(NSArray * _Nonnull dics) {
+        NSDictionary *dic = [dics lastObject];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSDictionary *result = [dic dictionaryValueForKey:@"data"];
+            NSString *avatar = [result stringValueForKey:@"url"];
+            [self updateUserIdCardNo:nil realName:nil gender:nil birthdate:nil nation:nil avatar:avatar];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+// 上传证件
+- (void)chooseImageUpload {
+    // 调用相册
+    self.mediaManager = [[KSMediaManager alloc] init];
+    self.mediaManager.mediaType = MEDIATYPE_PHOTO;
+    self.mediaManager.maxPhotoNumber = 1;
+    self.mediaManager.baseCtrl = self;
+    MJWeakSelf;
+    [self.mediaManager noAlertCallback:^(NSString * _Nullable videoUrl, NSMutableArray * _Nullable imageArray, NSMutableArray * _Nullable imageAsset) {
+        UIImage *sendImg = [imageArray lastObject];
+        [weakSelf uploadImage:sendImg];
+    }];
+    [self.mediaManager pushImagePickerController];
+}
+
+- (void)uploadImage:(UIImage *)image {
+    [self showhud];
+    NSData *imgData = [UIImage turnsImaegDataByImage:image];
+    [KSRequestManager cardImageUpload:KS_POST imgData:imgData success:^(NSDictionary * _Nonnull dic) {
+        
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSDictionary *result = [dic dictionaryValueForKey:@"data"];
+            [self getCardMessageSuccess:result];
+        }
+        else {
+            [self removehub];
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+    }];
+}
+
+- (void)getCardMessageSuccess:(NSDictionary *)result {
+    NSString *status = [result stringValueForKey:@"image_status"];
+    if ([status isEqualToString:@"normal"]) {
+        NSDictionary *wordResult = [result dictionaryValueForKey:@"words_result"];
+        NSString *idCardNo = [[wordResult dictionaryValueForKey:@"公民身份号码"] stringValueForKey:@"words"];
+        NSString *realName = [[wordResult dictionaryValueForKey:@"姓名"] stringValueForKey:@"words"];
+        NSString *nation = [[wordResult dictionaryValueForKey:@"民族"] stringValueForKey:@"words"];
+        NSString *gender = [[[wordResult dictionaryValueForKey:@"性别"] stringValueForKey:@"words"] isEqualToString:@"男"] ? @"1" : @"0";
+        NSString *dateStr = [[wordResult dictionaryValueForKey:@"出生"] stringValueForKey:@"words"];
+        
+        NSString *birthday = [self formatBirthDayString:dateStr];
+        [self updateUserIdCardNo:idCardNo realName:realName gender:gender birthdate:birthday nation:nation avatar:nil];
+        
+    }
+    else if ([status isEqualToString:@"reversed_side"]) {
+        [self removehub];
+        [self MBPShow:@"身份证正反面颠倒"];
+    }
+    else if ([status isEqualToString:@"non_idcard"]) {
+        [self removehub];
+        [self MBPShow:@"上传的图片中不包含身份证"];
+    }
+    else if ([status isEqualToString:@"blurred"]) {
+        [self removehub];
+        [self MBPShow:@"身份证模糊"];
+    }
+    else if ([status isEqualToString:@"other_type_card"]) {
+        [self removehub];
+        [self MBPShow:@"身份证关键字段反光或过曝"];
+    }
+    else if ([status isEqualToString:@"over_dark"]) {
+        [self removehub];
+        [self MBPShow:@"身份证欠曝(亮度过低)"];
+    }
+    else {
+        [self removehub];
+        [self MBPShow:@"上传身份证有误"];
+    }
+}
+
+- (NSString *)formatBirthDayString:(NSString *)birthday {
+    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+    [dateFormatter setDateFormat:@"yyyyMMdd"];
+    NSDate *date = [dateFormatter dateFromString:birthday];
+    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+    return [dateFormatter stringFromDate:date];
+}
+
+- (void)updateUserIdCardNo:(NSString *)idCardNo realName:(NSString *)realName gender:(NSString *)gender birthdate:(NSString *)birthdate nation:(NSString *)nation avatar:(NSString *)avatar {
+    [KSRequestManager updateInfoRequest:KS_POST idCardNo:idCardNo realName:realName gender:gender birthdate:birthdate nation:nation avatar:avatar success:^(NSDictionary * _Nonnull dic) {
+        [self removehub];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            UserInfo *info = USER_MANAGER.userInfo;
+            info.realName = realName;
+            info.idCardNo = idCardNo;
+            info.nation = nation;
+            info.birthdate = [[dic dictionaryValueForKey:@"data"] stringValueForKey:@"birthdate"];
+            if (![NSString isEmptyString:avatar]) {
+                info.avatar = avatar;
+            }
+            [self.bodyView refreshView];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+    }];
+}
+
+- (void)loadMessage {
+    
 }
 
 /*

+ 24 - 0
MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/Mine/View/UserBodyView.h

@@ -0,0 +1,24 @@
+//
+//  UserBodyView.h
+//  MusicGradeExam
+//
+//  Created by Kyle on 2020/7/14.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^UploadAction)(BOOL isAvatal);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UserBodyView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)configMessageUploadCall:(UploadAction)callback;
+
+- (void)refreshView;
+@end
+
+NS_ASSUME_NONNULL_END

+ 102 - 0
MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/Mine/View/UserBodyView.m

@@ -0,0 +1,102 @@
+//
+//  UserBodyView.m
+//  MusicGradeExam
+//
+//  Created by Kyle on 2020/7/14.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import "UserBodyView.h"
+#import "UserInfoManager.h"
+@interface UserBodyView ()
+
+@property (weak, nonatomic) IBOutlet UILabel *idLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
+
+@property (weak, nonatomic) IBOutlet UIImageView *sexManImage;
+
+@property (weak, nonatomic) IBOutlet UIImageView *sexWomenImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *birthdayLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *nationLabel;
+
+@property (nonatomic, copy) UploadAction callback;
+
+@property (weak, nonatomic) IBOutlet UIImageView *userImage;
+
+@property (weak, nonatomic) IBOutlet UIButton *uploadButton;
+
+@end
+
+@implementation UserBodyView
+
++ (instancetype)shareInstance {
+    UserBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"UserBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)configMessageUploadCall:(UploadAction)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+    // 赋值
+    [self refreshView];
+}
+
+- (void)refreshView {
+    
+    UserInfo *info = USER_MANAGER.userInfo;
+    if ([NSString isEmptyString:info.idCardNo]) {
+        self.uploadButton.hidden = NO;
+        self.uploadButton.userInteractionEnabled = YES;
+    }
+    else {
+        self.uploadButton.hidden = YES;
+        self.uploadButton.userInteractionEnabled = NO;
+    }
+    self.idLabel.text = [NSString returnNoNullStringWithString:info.idCardNo];
+    self.nameLabel.text = [NSString returnNoNullStringWithString:info.realName];
+    if (info.gender == 1) {
+        [self.sexManImage setImage:[UIImage imageNamed:@"sex_choose"]];
+        [self.sexWomenImage setImage:[UIImage imageNamed:@"sex_unselected"]];
+    }
+    else {
+        [self.sexManImage setImage:[UIImage imageNamed:@"sex_unselected"]];
+        [self.sexWomenImage setImage:[UIImage imageNamed:@"sex_choose"]];
+    }
+    
+    self.birthdayLabel.text = [NSString returnNoNullStringWithString:[[info.birthdate componentsSeparatedByString:@" "] firstObject]];
+    self.nationLabel.text = [NSString returnNoNullStringWithString:info.nation];
+    
+    if ([NSString isEmptyString:info.avatar]) {
+        [self.userImage setImage:[UIImage imageNamed:@"image_upload"]];
+    }
+    else {
+        [self.userImage sd_setImageWithURL:[NSURL URLWithString:info.avatar] placeholderImage:[UIImage imageNamed:@"image_upload"]];
+    }
+}
+
+- (IBAction)uploadAction:(id)sender {
+    if (self.callback) {
+        self.callback(NO);
+    }
+}
+
+- (IBAction)tapAction:(id)sender {
+    if (self.callback) {
+        self.callback(YES);
+    }
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 303 - 0
MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/Mine/View/UserBodyView.xib

@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="UserBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Uro-dI-YD7">
+                    <rect key="frame" x="0.0" y="57" width="414" 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="7SB-XW-Gqo">
+                            <rect key="frame" x="16" y="14.5" width="86" height="21"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="86" id="NIP-PW-qiJ"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7pf-Wz-qqF">
+                            <rect key="frame" x="116" y="0.0" width="232" height="50"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VBa-vD-UCE">
+                            <rect key="frame" x="358" y="9" width="40" height="32"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="40" id="rvd-2w-zoI"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <state key="normal" title="上传">
+                                <color key="titleColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                            </state>
+                            <connections>
+                                <action selector="uploadAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="kK3-W3-Xh4"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="VBa-vD-UCE" secondAttribute="trailing" constant="16" id="IF6-Vb-Srk"/>
+                        <constraint firstItem="7pf-Wz-qqF" firstAttribute="leading" secondItem="7SB-XW-Gqo" secondAttribute="trailing" constant="14" id="SSD-d1-W9W"/>
+                        <constraint firstAttribute="height" constant="50" id="WVE-tH-7wc"/>
+                        <constraint firstItem="VBa-vD-UCE" firstAttribute="leading" secondItem="7pf-Wz-qqF" secondAttribute="trailing" constant="10" id="Wcw-Hr-XLQ"/>
+                        <constraint firstItem="VBa-vD-UCE" firstAttribute="centerY" secondItem="Uro-dI-YD7" secondAttribute="centerY" id="ZAU-fg-7vO"/>
+                        <constraint firstItem="7pf-Wz-qqF" firstAttribute="top" secondItem="Uro-dI-YD7" secondAttribute="top" id="aYB-6H-ukT"/>
+                        <constraint firstItem="7SB-XW-Gqo" firstAttribute="centerY" secondItem="Uro-dI-YD7" secondAttribute="centerY" id="fol-b0-0ZW"/>
+                        <constraint firstAttribute="bottom" secondItem="7pf-Wz-qqF" secondAttribute="bottom" id="hfj-US-xnn"/>
+                        <constraint firstItem="7pf-Wz-qqF" firstAttribute="centerY" secondItem="Uro-dI-YD7" secondAttribute="centerY" id="iX9-7F-ekL"/>
+                        <constraint firstItem="7SB-XW-Gqo" firstAttribute="leading" secondItem="Uro-dI-YD7" secondAttribute="leading" constant="16" id="lsK-Xa-e4D"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4e3-LE-4nu">
+                    <rect key="frame" x="0.0" y="108" width="414" 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="900-lp-l5v">
+                            <rect key="frame" x="16" y="14.5" width="86" height="21"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="86" id="9Jx-D4-gry"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="G1A-Dt-bwf">
+                            <rect key="frame" x="116" y="0.0" width="282" height="50"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="50" id="3NI-6E-vr2"/>
+                        <constraint firstItem="G1A-Dt-bwf" firstAttribute="top" secondItem="4e3-LE-4nu" secondAttribute="top" id="EiM-VW-a4v"/>
+                        <constraint firstAttribute="bottom" secondItem="G1A-Dt-bwf" secondAttribute="bottom" id="JeN-GG-cVG"/>
+                        <constraint firstItem="900-lp-l5v" firstAttribute="centerY" secondItem="4e3-LE-4nu" secondAttribute="centerY" id="OlA-Ih-sfd"/>
+                        <constraint firstItem="G1A-Dt-bwf" firstAttribute="leading" secondItem="900-lp-l5v" secondAttribute="trailing" constant="14" id="Opn-oC-kJm"/>
+                        <constraint firstItem="G1A-Dt-bwf" firstAttribute="centerY" secondItem="4e3-LE-4nu" secondAttribute="centerY" id="Xld-Pz-o7G"/>
+                        <constraint firstAttribute="trailing" secondItem="G1A-Dt-bwf" secondAttribute="trailing" constant="16" id="cKH-0M-CuQ"/>
+                        <constraint firstItem="900-lp-l5v" firstAttribute="leading" secondItem="4e3-LE-4nu" secondAttribute="leading" constant="16" id="x5r-X8-Eun"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="le8-6S-X8a">
+                    <rect key="frame" x="0.0" y="159" width="414" 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="wOF-nh-0Mk">
+                            <rect key="frame" x="16" y="14.5" width="86" height="21"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="86" id="tNb-VU-p1n"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="男" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xwy-ZS-sEJ">
+                            <rect key="frame" x="142" y="15" width="17" height="20"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="sex_unselected" translatesAutoresizingMaskIntoConstraints="NO" id="ntI-E1-f2K">
+                            <rect key="frame" x="179" y="16" width="18" height="18"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="18" id="TRh-zQ-fAk"/>
+                                <constraint firstAttribute="width" constant="18" id="Uii-5v-5Ut"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="女" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="082-ZD-n0k">
+                            <rect key="frame" x="205" y="15" width="17" height="20"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="sex_unselected" translatesAutoresizingMaskIntoConstraints="NO" id="jxc-D7-ayU">
+                            <rect key="frame" x="116" y="16" width="18" height="18"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="18" id="ijG-uY-eyE"/>
+                                <constraint firstAttribute="height" constant="18" id="raW-9j-Jc5"/>
+                            </constraints>
+                        </imageView>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+                    <constraints>
+                        <constraint firstItem="xwy-ZS-sEJ" firstAttribute="centerY" secondItem="le8-6S-X8a" secondAttribute="centerY" id="5XQ-eu-jcn"/>
+                        <constraint firstItem="xwy-ZS-sEJ" firstAttribute="leading" secondItem="jxc-D7-ayU" secondAttribute="trailing" constant="8" id="PQS-4L-IWG"/>
+                        <constraint firstItem="082-ZD-n0k" firstAttribute="leading" secondItem="ntI-E1-f2K" secondAttribute="trailing" constant="8" id="SNf-Bm-I9z"/>
+                        <constraint firstItem="ntI-E1-f2K" firstAttribute="leading" secondItem="xwy-ZS-sEJ" secondAttribute="trailing" constant="20" id="ddv-pF-zdd"/>
+                        <constraint firstItem="ntI-E1-f2K" firstAttribute="centerY" secondItem="le8-6S-X8a" secondAttribute="centerY" id="emn-bv-vU8"/>
+                        <constraint firstItem="jxc-D7-ayU" firstAttribute="centerY" secondItem="le8-6S-X8a" secondAttribute="centerY" id="g6i-BF-GZH"/>
+                        <constraint firstItem="wOF-nh-0Mk" firstAttribute="centerY" secondItem="le8-6S-X8a" secondAttribute="centerY" id="gza-5O-mQ9"/>
+                        <constraint firstItem="jxc-D7-ayU" firstAttribute="leading" secondItem="wOF-nh-0Mk" secondAttribute="trailing" constant="14" id="hUl-Bx-Kva"/>
+                        <constraint firstItem="wOF-nh-0Mk" firstAttribute="leading" secondItem="le8-6S-X8a" secondAttribute="leading" constant="16" id="t7u-kL-v2u"/>
+                        <constraint firstAttribute="height" constant="50" id="vPJ-77-7RN"/>
+                        <constraint firstItem="082-ZD-n0k" firstAttribute="centerY" secondItem="le8-6S-X8a" secondAttribute="centerY" id="wEK-mF-s6u"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="b8y-CG-OGX">
+                    <rect key="frame" x="0.0" y="210" width="414" 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="v8k-5u-S0x">
+                            <rect key="frame" x="16" y="14.5" width="86" height="21"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="86" id="nRl-9v-t1C"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dMZ-YR-IWH">
+                            <rect key="frame" x="116" y="0.0" width="282" height="50"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+                    <constraints>
+                        <constraint firstItem="v8k-5u-S0x" firstAttribute="centerY" secondItem="b8y-CG-OGX" secondAttribute="centerY" id="AlA-5D-yzZ"/>
+                        <constraint firstItem="dMZ-YR-IWH" firstAttribute="leading" secondItem="v8k-5u-S0x" secondAttribute="trailing" constant="14" id="ApS-aG-hvJ"/>
+                        <constraint firstAttribute="trailing" secondItem="dMZ-YR-IWH" secondAttribute="trailing" constant="16" id="DFA-Sj-dv9"/>
+                        <constraint firstItem="dMZ-YR-IWH" firstAttribute="top" secondItem="b8y-CG-OGX" secondAttribute="top" id="DPP-uo-tpK"/>
+                        <constraint firstAttribute="bottom" secondItem="dMZ-YR-IWH" secondAttribute="bottom" id="Fin-Jb-Co7"/>
+                        <constraint firstItem="v8k-5u-S0x" firstAttribute="leading" secondItem="b8y-CG-OGX" secondAttribute="leading" constant="16" id="YQb-Eo-yGD"/>
+                        <constraint firstItem="dMZ-YR-IWH" firstAttribute="centerY" secondItem="b8y-CG-OGX" secondAttribute="centerY" id="mUM-4L-muV"/>
+                        <constraint firstAttribute="height" constant="50" id="ucz-3Q-uep"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kX1-Z7-bp5">
+                    <rect key="frame" x="0.0" y="261" width="414" 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="9DU-LJ-ahF">
+                            <rect key="frame" x="16" y="14.5" width="86" height="21"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="86" id="Df3-qV-obf"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3w1-dw-BQc">
+                            <rect key="frame" x="116" y="0.0" width="282" height="50"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="3w1-dw-BQc" secondAttribute="bottom" id="344-sk-fsL"/>
+                        <constraint firstItem="9DU-LJ-ahF" firstAttribute="centerY" secondItem="kX1-Z7-bp5" secondAttribute="centerY" id="6eM-AC-0jW"/>
+                        <constraint firstItem="3w1-dw-BQc" firstAttribute="centerY" secondItem="kX1-Z7-bp5" secondAttribute="centerY" id="F2Q-md-Q2c"/>
+                        <constraint firstItem="3w1-dw-BQc" firstAttribute="leading" secondItem="9DU-LJ-ahF" secondAttribute="trailing" constant="14" id="Ggg-N5-aM0"/>
+                        <constraint firstItem="9DU-LJ-ahF" firstAttribute="leading" secondItem="kX1-Z7-bp5" secondAttribute="leading" constant="16" id="W9U-dI-isA"/>
+                        <constraint firstAttribute="trailing" secondItem="3w1-dw-BQc" secondAttribute="trailing" constant="16" id="dVg-dH-hXQ"/>
+                        <constraint firstAttribute="height" constant="50" id="jcr-iG-569"/>
+                        <constraint firstItem="3w1-dw-BQc" firstAttribute="top" secondItem="kX1-Z7-bp5" secondAttribute="top" id="wAR-GR-55X"/>
+                    </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="fCi-4q-EvG">
+                    <rect key="frame" x="16" y="320" width="82" height="22"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="22" id="HEw-TR-bag"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wez-D2-DeC">
+                    <rect key="frame" x="0.0" y="351" width="414" height="258"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="image_upload" translatesAutoresizingMaskIntoConstraints="NO" id="EYf-t6-AcS">
+                            <rect key="frame" x="155.5" y="30" width="103" height="144"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="103" id="mU7-kB-Q7r"/>
+                                <constraint firstAttribute="height" constant="144" id="nwP-Mk-b0l"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="t3Z-7C-imG" appends="YES" id="3Sz-OM-rEC"/>
+                            </connections>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yi2-nu-UUW">
+                            <rect key="frame" x="100" y="189" width="214" height="54"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="214" id="jdl-uk-egd"/>
+                            </constraints>
+                            <string key="text">须使用免冠证件照,纯底色
+(纯白、纯蓝或纯红)
+(图像预览可能会异常)</string>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+                    <gestureRecognizers/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="258" id="3le-Er-fIJ"/>
+                        <constraint firstAttribute="bottom" secondItem="yi2-nu-UUW" secondAttribute="bottom" constant="15" id="CxB-Fo-5pV"/>
+                        <constraint firstItem="EYf-t6-AcS" firstAttribute="centerX" secondItem="wez-D2-DeC" secondAttribute="centerX" id="LGm-pd-88F"/>
+                        <constraint firstItem="yi2-nu-UUW" firstAttribute="top" secondItem="EYf-t6-AcS" secondAttribute="bottom" constant="15" id="NWE-19-JzO"/>
+                        <constraint firstItem="yi2-nu-UUW" firstAttribute="centerX" secondItem="wez-D2-DeC" secondAttribute="centerX" id="Nyn-IV-poO"/>
+                        <constraint firstItem="EYf-t6-AcS" firstAttribute="top" secondItem="wez-D2-DeC" secondAttribute="top" constant="30" id="vI5-tW-Q89"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" red="0.95294117647058818" green="0.95686274509803915" blue="0.97254901960784312" alpha="1" colorSpace="calibratedRGB"/>
+            <constraints>
+                <constraint firstItem="wez-D2-DeC" firstAttribute="top" secondItem="fCi-4q-EvG" secondAttribute="bottom" constant="9" id="145-Oh-Ait"/>
+                <constraint firstItem="b8y-CG-OGX" firstAttribute="top" secondItem="le8-6S-X8a" secondAttribute="bottom" constant="1" id="1dI-2e-tdp"/>
+                <constraint firstItem="fCi-4q-EvG" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="16" id="5PR-AH-hLm"/>
+                <constraint firstItem="kX1-Z7-bp5" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="Acc-0R-iEl"/>
+                <constraint firstItem="4e3-LE-4nu" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="AhT-If-fKa"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="le8-6S-X8a" secondAttribute="trailing" id="BES-Kk-vHh"/>
+                <constraint firstItem="kX1-Z7-bp5" firstAttribute="top" secondItem="b8y-CG-OGX" secondAttribute="bottom" constant="1" id="CjF-qN-L4S"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="4e3-LE-4nu" secondAttribute="trailing" id="GhC-m1-RVZ"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="Uro-dI-YD7" secondAttribute="trailing" id="Kba-jy-fHz"/>
+                <constraint firstAttribute="trailing" secondItem="kX1-Z7-bp5" secondAttribute="trailing" id="SSf-d7-bP3"/>
+                <constraint firstItem="fCi-4q-EvG" firstAttribute="top" secondItem="kX1-Z7-bp5" secondAttribute="bottom" constant="9" id="VC8-0f-kdd"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="b8y-CG-OGX" secondAttribute="trailing" id="YvM-Ay-Ycy"/>
+                <constraint firstItem="4e3-LE-4nu" firstAttribute="top" secondItem="Uro-dI-YD7" secondAttribute="bottom" constant="1" id="aA5-us-05r"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="wez-D2-DeC" secondAttribute="trailing" id="aCt-f0-YIa"/>
+                <constraint firstItem="wez-D2-DeC" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="eKH-xj-SZd"/>
+                <constraint firstItem="le8-6S-X8a" firstAttribute="top" secondItem="4e3-LE-4nu" secondAttribute="bottom" constant="1" id="kMC-a7-whe"/>
+                <constraint firstItem="b8y-CG-OGX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="pvD-Y0-aFx"/>
+                <constraint firstItem="le8-6S-X8a" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="tHx-80-dFG"/>
+                <constraint firstItem="Uro-dI-YD7" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" constant="13" id="uMW-tK-jZh"/>
+                <constraint firstItem="Uro-dI-YD7" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="vxK-XE-kFa"/>
+            </constraints>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <connections>
+                <outlet property="birthdayLabel" destination="dMZ-YR-IWH" id="bl7-uy-PsB"/>
+                <outlet property="idLabel" destination="7pf-Wz-qqF" id="u6V-dm-vyD"/>
+                <outlet property="nameLabel" destination="G1A-Dt-bwf" id="acS-fU-6zI"/>
+                <outlet property="nationLabel" destination="3w1-dw-BQc" id="vVa-DG-1Z4"/>
+                <outlet property="sexManImage" destination="jxc-D7-ayU" id="vxE-br-XDf"/>
+                <outlet property="sexWomenImage" destination="ntI-E1-f2K" id="8WZ-1s-McN"/>
+                <outlet property="uploadButton" destination="VBa-vD-UCE" id="rnO-IJ-X9U"/>
+                <outlet property="userImage" destination="EYf-t6-AcS" id="9qw-RY-Txk"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="122.54464285714285"/>
+        </view>
+        <tapGestureRecognizer id="t3Z-7C-imG">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="NA4-Jz-tfP"/>
+            </connections>
+        </tapGestureRecognizer>
+    </objects>
+    <resources>
+        <image name="image_upload" width="103" height="144"/>
+        <image name="sex_unselected" width="18" height="18"/>
+    </resources>
+</document>

+ 13 - 2
MusicGradeExam/MusicGradeExam/UI/UserCenter/View/UserCenterBodyView.m

@@ -7,7 +7,7 @@
 //
 
 #import "UserCenterBodyView.h"
-
+#import "UserInfoManager.h"
 @interface UserCenterBodyView ()
 
 @property (nonatomic, copy) UserCenterAction callback;
@@ -22,7 +22,18 @@
 }
 
 - (void)configMessage {
-    
+    UserInfo *info = USER_MANAGER.userInfo;
+    self.userName.text = [NSString returnNoNullStringWithString:info.realName];
+    if ([NSString isEmptyString:info.birthdate]) {
+        self.birthday.text = @"";
+        self.userNation.text = @"";
+        self.birthday.text = @"";
+    }
+    else {
+        self.userSex.text = info.gender == 1 ? @"男" : @"女";
+        self.userNation.text = [NSString returnNoNullStringWithString:info.nation];
+        self.birthday.text = [[info.birthdate componentsSeparatedByString:@" "] firstObject];
+    }
 }
 
 - (void)tapCallback:(UserCenterAction)callback {

+ 3 - 4
MusicGradeExam/MusicGradeExam/UI/UserCenter/View/UserCenterBodyView.xib

@@ -43,9 +43,8 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2010-06-27" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="85j-TL-W3B">
-                            <rect key="frame" x="87" y="38" width="85" height="20"/>
+                            <rect key="frame" x="87" y="38" width="78.5" height="20"/>
                             <constraints>
-                                <constraint firstAttribute="width" constant="85" id="Q3K-aR-XC3"/>
                                 <constraint firstAttribute="height" constant="20" id="h1Z-Wn-NcE"/>
                             </constraints>
                             <fontDescription key="fontDescription" type="system" pointSize="14"/>
@@ -53,7 +52,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="女" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Jk-n0-UV8">
-                            <rect key="frame" x="187" y="38" width="20" height="20"/>
+                            <rect key="frame" x="180.5" y="38" width="20" height="20"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="20" id="MzM-0V-sK8"/>
                             </constraints>
@@ -62,7 +61,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="汉族" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DTT-Zs-WXV">
-                            <rect key="frame" x="217" y="38" width="29" height="20"/>
+                            <rect key="frame" x="210.5" y="38" width="29" height="20"/>
                             <fontDescription key="fontDescription" type="system" pointSize="14"/>
                             <color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="calibratedRGB"/>
                             <nil key="highlightedColor"/>