فهرست منبع

提现,提现记录

Steven 3 سال پیش
والد
کامیت
e851787e64
41فایلهای تغییر یافته به همراه2306 افزوده شده و 27 حذف شده
  1. 54 0
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 80 0
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/apply_success.imageset/Contents.json
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/apply_success.imageset/apply_success@2x.png
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/apply_success.imageset/apply_success@3x.png
  7. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/card_icon.imageset/card_icon@2x.png
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/card_icon.imageset/card_icon@3x.png
  9. 31 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  10. 52 2
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  11. 72 5
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/Controller/MyIncomeViewController.m
  12. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/View/IncomeHeaderView.h
  13. 15 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/View/IncomeHeaderView.m
  14. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/View/IncomeHeaderView.xib
  15. 264 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/CashRecordViewController.m
  16. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/WithdrawApplyViewController.h
  17. 86 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/WithdrawApplyViewController.m
  18. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/WithdrawViewController.h
  19. 122 8
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/WithdrawViewController.m
  20. 35 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/FeeRecordModel.h
  21. 200 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/FeeRecordModel.m
  22. 30 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/UserBankCard.h
  23. 169 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/UserBankCard.m
  24. 23 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/WithdrawModel.h
  25. 113 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/WithdrawModel.m
  26. 36 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordHeadView.h
  27. 73 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordHeadView.m
  28. 106 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordHeadView.xib
  29. 3 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordListCell.h
  30. 38 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordListCell.m
  31. 84 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordListCell.xib
  32. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawApplyBodyView.h
  33. 44 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawApplyBodyView.m
  34. 99 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawApplyBodyView.xib
  35. 32 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawBodyView.h
  36. 139 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawBodyView.m
  37. 229 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawBodyView.xib
  38. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonBodyView.m
  39. 0 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonSearchView.m
  40. 1 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/PopView/NewClassPopView.h
  41. 5 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/PopView/NewClassPopView.m

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

@@ -621,6 +621,14 @@
 		BCC9F44927F69BD200647449 /* ClassroomService.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9F40027F69BD200647449 /* ClassroomService.m */; };
 		BCC9F44A27F69BD200647449 /* RTCService.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9F40227F69BD200647449 /* RTCService.m */; };
 		BCC9F44B27F69BD200647449 /* KSIMService.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9F40627F69BD200647449 /* KSIMService.m */; };
+		BCD6D15C281950E9009A773E /* WithdrawModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCD6D15B281950E9009A773E /* WithdrawModel.m */; };
+		BCD6D15F281950F2009A773E /* UserBankCard.m in Sources */ = {isa = PBXBuildFile; fileRef = BCD6D15E281950F2009A773E /* UserBankCard.m */; };
+		BCD6D16228195A17009A773E /* WithdrawApplyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCD6D16128195A17009A773E /* WithdrawApplyViewController.m */; };
+		BCD6D16528195A91009A773E /* WithdrawApplyBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCD6D16428195A91009A773E /* WithdrawApplyBodyView.m */; };
+		BCD6D16728195A98009A773E /* WithdrawApplyBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCD6D16628195A98009A773E /* WithdrawApplyBodyView.xib */; };
+		BCD6D16A28195FBE009A773E /* CashRecordHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCD6D16928195FBE009A773E /* CashRecordHeadView.m */; };
+		BCD6D16C28195FC5009A773E /* CashRecordHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCD6D16B28195FC5009A773E /* CashRecordHeadView.xib */; };
+		BCD6D16F28196756009A773E /* FeeRecordModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCD6D16E28196756009A773E /* FeeRecordModel.m */; };
 		BCDB0931280583C100D0BDAD /* NSObject+KSDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDB0930280583C100D0BDAD /* NSObject+KSDateFormatter.m */; };
 		BCDB093428058A8700D0BDAD /* LiveLessonModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDB093228058A8700D0BDAD /* LiveLessonModel.m */; };
 		BCDB093728058BBE00D0BDAD /* AccompanyLessonModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDB093628058BBE00D0BDAD /* AccompanyLessonModel.m */; };
@@ -654,6 +662,8 @@
 		BCEA75282819103B00886A86 /* UnbindBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCEA75272819103B00886A86 /* UnbindBodyView.xib */; };
 		BCEA752B2819133E00886A86 /* CardBindResultBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCEA752A2819133E00886A86 /* CardBindResultBodyView.m */; };
 		BCEA752D2819134400886A86 /* CardBindResultBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCEA752C2819134400886A86 /* CardBindResultBodyView.xib */; };
+		BCEA75302819336200886A86 /* WithdrawBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCEA752F2819336200886A86 /* WithdrawBodyView.m */; };
+		BCEA75322819336A00886A86 /* WithdrawBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCEA75312819336A00886A86 /* WithdrawBodyView.xib */; };
 		BCF1BA5127F5C4DD00FA36C4 /* KSLiveChatroomMemberCount.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF1BA5027F5C4DD00FA36C4 /* KSLiveChatroomMemberCount.m */; };
 		BCF1BA5427F5CB5800FA36C4 /* LiveSeatApplyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF1BA5327F5CB5800FA36C4 /* LiveSeatApplyView.m */; };
 		BCF1BA5627F5CBA100FA36C4 /* LiveSeatApplyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCF1BA5527F5CBA100FA36C4 /* LiveSeatApplyView.xib */; };
@@ -1819,6 +1829,20 @@
 		BCC9F40327F69BD200647449 /* RTCService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCService.h; sourceTree = "<group>"; };
 		BCC9F40527F69BD200647449 /* KSIMService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSIMService.h; sourceTree = "<group>"; };
 		BCC9F40627F69BD200647449 /* KSIMService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSIMService.m; sourceTree = "<group>"; };
+		BCD6D15A281950E9009A773E /* WithdrawModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WithdrawModel.h; sourceTree = "<group>"; };
+		BCD6D15B281950E9009A773E /* WithdrawModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WithdrawModel.m; sourceTree = "<group>"; };
+		BCD6D15D281950F1009A773E /* UserBankCard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserBankCard.h; sourceTree = "<group>"; };
+		BCD6D15E281950F2009A773E /* UserBankCard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserBankCard.m; sourceTree = "<group>"; };
+		BCD6D16028195A17009A773E /* WithdrawApplyViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WithdrawApplyViewController.h; sourceTree = "<group>"; };
+		BCD6D16128195A17009A773E /* WithdrawApplyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WithdrawApplyViewController.m; sourceTree = "<group>"; };
+		BCD6D16328195A91009A773E /* WithdrawApplyBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WithdrawApplyBodyView.h; sourceTree = "<group>"; };
+		BCD6D16428195A91009A773E /* WithdrawApplyBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WithdrawApplyBodyView.m; sourceTree = "<group>"; };
+		BCD6D16628195A98009A773E /* WithdrawApplyBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WithdrawApplyBodyView.xib; sourceTree = "<group>"; };
+		BCD6D16828195FBD009A773E /* CashRecordHeadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CashRecordHeadView.h; sourceTree = "<group>"; };
+		BCD6D16928195FBE009A773E /* CashRecordHeadView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CashRecordHeadView.m; sourceTree = "<group>"; };
+		BCD6D16B28195FC5009A773E /* CashRecordHeadView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CashRecordHeadView.xib; sourceTree = "<group>"; };
+		BCD6D16D28196756009A773E /* FeeRecordModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeeRecordModel.h; sourceTree = "<group>"; };
+		BCD6D16E28196756009A773E /* FeeRecordModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FeeRecordModel.m; sourceTree = "<group>"; };
 		BCDB092F280583C000D0BDAD /* NSObject+KSDateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+KSDateFormatter.h"; sourceTree = "<group>"; };
 		BCDB0930280583C100D0BDAD /* NSObject+KSDateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+KSDateFormatter.m"; sourceTree = "<group>"; };
 		BCDB093228058A8700D0BDAD /* LiveLessonModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveLessonModel.m; sourceTree = "<group>"; };
@@ -1873,6 +1897,9 @@
 		BCEA75292819133E00886A86 /* CardBindResultBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CardBindResultBodyView.h; sourceTree = "<group>"; };
 		BCEA752A2819133E00886A86 /* CardBindResultBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CardBindResultBodyView.m; sourceTree = "<group>"; };
 		BCEA752C2819134400886A86 /* CardBindResultBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CardBindResultBodyView.xib; sourceTree = "<group>"; };
+		BCEA752E2819336200886A86 /* WithdrawBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WithdrawBodyView.h; sourceTree = "<group>"; };
+		BCEA752F2819336200886A86 /* WithdrawBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WithdrawBodyView.m; sourceTree = "<group>"; };
+		BCEA75312819336A00886A86 /* WithdrawBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WithdrawBodyView.xib; sourceTree = "<group>"; };
 		BCF1BA4F27F5C4DD00FA36C4 /* KSLiveChatroomMemberCount.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSLiveChatroomMemberCount.h; sourceTree = "<group>"; };
 		BCF1BA5027F5C4DD00FA36C4 /* KSLiveChatroomMemberCount.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomMemberCount.m; sourceTree = "<group>"; };
 		BCF1BA5227F5CB5800FA36C4 /* LiveSeatApplyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiveSeatApplyView.h; sourceTree = "<group>"; };
@@ -3954,6 +3981,8 @@
 			children = (
 				BC7CFF9D2817CBD400CAEB21 /* WithdrawViewController.h */,
 				BC7CFF9E2817CBD400CAEB21 /* WithdrawViewController.m */,
+				BCD6D16028195A17009A773E /* WithdrawApplyViewController.h */,
+				BCD6D16128195A17009A773E /* WithdrawApplyViewController.m */,
 				BC7CFFC32817F29800CAEB21 /* CashRecordViewController.h */,
 				BC7CFFC42817F29800CAEB21 /* CashRecordViewController.m */,
 			);
@@ -3963,6 +3992,12 @@
 		BC7CFF9B2817CBC400CAEB21 /* Model */ = {
 			isa = PBXGroup;
 			children = (
+				BCD6D15A281950E9009A773E /* WithdrawModel.h */,
+				BCD6D15B281950E9009A773E /* WithdrawModel.m */,
+				BCD6D15D281950F1009A773E /* UserBankCard.h */,
+				BCD6D15E281950F2009A773E /* UserBankCard.m */,
+				BCD6D16D28196756009A773E /* FeeRecordModel.h */,
+				BCD6D16E28196756009A773E /* FeeRecordModel.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -3973,6 +4008,15 @@
 				BC7CFFC62817F2FF00CAEB21 /* CashRecordListCell.h */,
 				BC7CFFC72817F2FF00CAEB21 /* CashRecordListCell.m */,
 				BC7CFFC82817F2FF00CAEB21 /* CashRecordListCell.xib */,
+				BCEA752E2819336200886A86 /* WithdrawBodyView.h */,
+				BCEA752F2819336200886A86 /* WithdrawBodyView.m */,
+				BCEA75312819336A00886A86 /* WithdrawBodyView.xib */,
+				BCD6D16328195A91009A773E /* WithdrawApplyBodyView.h */,
+				BCD6D16428195A91009A773E /* WithdrawApplyBodyView.m */,
+				BCD6D16628195A98009A773E /* WithdrawApplyBodyView.xib */,
+				BCD6D16828195FBD009A773E /* CashRecordHeadView.h */,
+				BCD6D16928195FBE009A773E /* CashRecordHeadView.m */,
+				BCD6D16B28195FC5009A773E /* CashRecordHeadView.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -4833,6 +4877,7 @@
 				27BC3B2B27F2DB9600D81E30 /* MusicUploadView.xib in Resources */,
 				BCE6A09B27F83E8E00C97704 /* MinePageVideoCell.xib in Resources */,
 				BCE06F2D2818147000234817 /* KSConfirmAlertView.xib in Resources */,
+				BCEA75322819336A00886A86 /* WithdrawBodyView.xib in Resources */,
 				2723B68E27F1686100E0B90B /* HomeNavView.xib in Resources */,
 				BC5EB5C62804087700B4A3B0 /* MyStyleBottomView.xib in Resources */,
 				BCDB093F2805C0EF00D0BDAD /* NewClassPopCell.xib in Resources */,
@@ -4862,6 +4907,7 @@
 				BCFE541A2817BE0800AD6786 /* IncomeHeaderView.xib in Resources */,
 				BCE6A0A527F8517900C97704 /* MineVideoCell.xib in Resources */,
 				BCC9F40727F69BD200647449 /* SealClass.strings in Resources */,
+				BCD6D16C28195FC5009A773E /* CashRecordHeadView.xib in Resources */,
 				BC5EB5AB2803D86500B4A3B0 /* AccompanyAlertView.xib in Resources */,
 				BCE6A08C27F823A300C97704 /* AccompanyCourseCell.xib in Resources */,
 				BC7CFFBA2817E9FC00CAEB21 /* echarts.min.js in Resources */,
@@ -4905,6 +4951,7 @@
 				BCA9CE5127FD954800D558C6 /* AccompanyRemarkCell.xib in Resources */,
 				BCF61BDE280417190000ACFE /* MyStyleVideoView.xib in Resources */,
 				BCC03F89280460C000461B7C /* InstrumentHeaderView.xib in Resources */,
+				BCD6D16728195A98009A773E /* WithdrawApplyBodyView.xib in Resources */,
 				BC5EB5BC2804083800B4A3B0 /* MyStyleIntroduceCell.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -4989,6 +5036,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				BCD6D15C281950E9009A773E /* WithdrawModel.m in Sources */,
 				BCE6A08527F81B4200C97704 /* MinePageSubmitView.m in Sources */,
 				2779323227E30FC30010E277 /* ALCalendarManager.m in Sources */,
 				2779326F27E30FD80010E277 /* FSCalendarHeaderView.m in Sources */,
@@ -5005,6 +5053,7 @@
 				2779321927E30FC30010E277 /* UITextView_Toolbar.m in Sources */,
 				BC285833280947BA0024697C /* EvaluateSortView.m in Sources */,
 				275E3DBF27F45EB90010EC30 /* KSLiveChatroomUserQuit.m in Sources */,
+				BCD6D16528195A91009A773E /* WithdrawApplyBodyView.m in Sources */,
 				27A54CE427E9B144007309A3 /* ModifyNameViewController.m in Sources */,
 				BCC9F40C27F69BD200647449 /* InputBarControl.m in Sources */,
 				BCC9F40D27F69BD200647449 /* EmojiBoardView.m in Sources */,
@@ -5020,6 +5069,7 @@
 				277931EB27E30FC20010E277 /* NSArray+zh_SafeAccess.m in Sources */,
 				BCA724042806AFF100DA0D0D /* AccompanyCourseInfoCell.m in Sources */,
 				BCB633F527F6A18200ACFDCF /* NewClassRoomViewController.m in Sources */,
+				BCD6D16228195A17009A773E /* WithdrawApplyViewController.m in Sources */,
 				277932B627E30FFE0010E277 /* UIView+SDExtension.m in Sources */,
 				BCC9F42227F69BD200647449 /* ToolPanelView.m in Sources */,
 				2779335C27E317CD0010E277 /* KSBaseModel.m in Sources */,
@@ -5047,6 +5097,7 @@
 				277932B827E30FFE0010E277 /* SDCollectionViewCell.m in Sources */,
 				2779326527E30FD80010E277 /* FSCalendarDelegationFactory.m in Sources */,
 				277931E127E30FC20010E277 /* NSString+zh_SafeAccess.m in Sources */,
+				BCEA75302819336200886A86 /* WithdrawBodyView.m in Sources */,
 				BC76146A280D4F670080FD1F /* HomeworkDetailModel.m in Sources */,
 				BCC9F40A27F69BD200647449 /* InputView.m in Sources */,
 				BC5EB5B22804027500B4A3B0 /* MyStyleViewController.m in Sources */,
@@ -5095,6 +5146,7 @@
 				BC5EB5BB2804083800B4A3B0 /* MyStyleIntroduceCell.m in Sources */,
 				277931D627E30FC20010E277 /* UIImage+Property.m in Sources */,
 				2779326727E30FD80010E277 /* FSCalendarStickyHeader.m in Sources */,
+				BCD6D16A28195FBE009A773E /* CashRecordHeadView.m in Sources */,
 				277931F027E30FC20010E277 /* UIView+AddConstraints.m in Sources */,
 				277D432527E9A46A00107DB7 /* ModifyPhoneCheckController.m in Sources */,
 				BCC9F43327F69BD200647449 /* KSRemoteUserManager.m in Sources */,
@@ -5475,6 +5527,7 @@
 				BC41103828066C2F00800BD9 /* HomeworkListViewController.m in Sources */,
 				BCC9F42327F69BD200647449 /* MainContainerView.m in Sources */,
 				2779335927E316DD0010E277 /* WMPlayer.m in Sources */,
+				BCD6D16F28196756009A773E /* FeeRecordModel.m in Sources */,
 				2779331127E310960010E277 /* NSObject+ReadDocument.m in Sources */,
 				BC3DE082280D88670027DC0E /* EvaluateListModel.m in Sources */,
 				277931EC27E30FC20010E277 /* UIColor+Extend.m in Sources */,
@@ -5493,6 +5546,7 @@
 				2779329427E30FEB0010E277 /* UIImage+MSSScale.m in Sources */,
 				277931EF27E30FC20010E277 /* NSObject+Parse.m in Sources */,
 				2779362927E33BE40010E277 /* WeakWebViewScriptMessageDelegate.m in Sources */,
+				BCD6D15F281950F2009A773E /* UserBankCard.m in Sources */,
 				BC1191ED280E55CB00A716F7 /* EvaluateDetailModel.m in Sources */,
 				275E3DA927F45A8A0010EC30 /* KSLiveStreamVideo.m in Sources */,
 				BCC9F43E27F69BD200647449 /* AccompanyDownloadMessage.m in Sources */,

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


+ 80 - 0
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -160,5 +160,85 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "8B7D2558-0C18-469C-B50F-B0DEDF3788AE"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Mine/CreateStyle/Controller/MyStyleViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "76"
+            endingLineNumber = "76"
+            landmarkName = "-requestMyStyle"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "F4C2A4F4-F75C-4E8E-A876-92C59B8B9ADE"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonBodyView.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "244"
+            endingLineNumber = "244"
+            landmarkName = "-sortWithType:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "9ED04A41-FB42-4566-AC29-8D04DC19B4B0"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Income/Controller/IncomeCountViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "135"
+            endingLineNumber = "135"
+            landmarkName = "-requestData"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "938061E9-04A7-4726-A9D7-497C8CD0D649"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Course/AccompanyCourse/Controller/AccompanyDetailViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "68"
+            endingLineNumber = "68"
+            landmarkName = "-requestHomeworkMessage"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "F3EC6F01-DE25-44BF-A859-FD947C4E60E3"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Course/AccompanyCourse/Controller/AccompanyDetailViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "93"
+            endingLineNumber = "93"
+            landmarkName = "-requestEvaluateMessage"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/apply_success.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/apply_success.imageset/apply_success@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/apply_success.imageset/apply_success@3x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/card_icon.imageset/card_icon@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/CardBind/card_icon.imageset/card_icon@3x.png


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

@@ -691,5 +691,36 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)teacherAccountDetail:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+#pragma mark ----- 提现
+//  /api-teacher/userWithdrawal/getWithdrawalInfo
+
+/// 查询提现页面信息
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)getWithdrawalInfoRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /api-teacher/userWithdrawal/withdrawal
+
+/// 用户提现
+/// @param post post
+/// @param amountWithdrawal 提现金额
+/// @param bankCardId 用户银行卡id
+/// @param success 成功
+/// @param faliure 失败
++ (void)withdrawalRequest:(NSString *)post amountWithdrawal:(double)amountWithdrawal bankCardId:(NSString *)bankCardId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// api-teacher/userWithdrawal/withdrawalPage
+
+/// 提现记录
+/// @param post post
+/// @param searchDate yyyy-mm
+/// @param status DOING  PASS UNPASS
+/// @param page 分页
+/// @param rows 条数
+/// @param success 成功
+/// @param faliure 失败
++ (void)withdrawalPageRequest:(NSString *)post searchDate:(NSString *)searchDate status:(NSString *)status page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 @end
 NS_ASSUME_NONNULL_END

+ 52 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -1114,8 +1114,7 @@
 /// @param studentId 学员编号
 /// @param success 成功
 /// @param faliure 失败
-+ (void)selectRepliedRequest:(NSString *)post courseGroupId:(NSString *)courseGroupId courseScheduleId:(NSString *)courseScheduleId studentId:(NSString *)studentId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
-{
++ (void)selectRepliedRequest:(NSString *)post courseGroupId:(NSString *)courseGroupId courseScheduleId:(NSString *)courseScheduleId studentId:(NSString *)studentId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
     [self configRequestMethodJSON];
     NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-teacher/courseReplied/selectReplied"];
     NSMutableDictionary *parm = [NSMutableDictionary dictionary];
@@ -1387,4 +1386,55 @@
     NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/userAccount/detail"];
     [self request:get andWithUrl:url and:nil success:success faliure:faliure];
 }
+#pragma mark ----- 提现
+//  /api-teacher/userWithdrawal/getWithdrawalInfo
+
+/// 查询提现页面信息
+/// @param post post
+/// @param success 成功
+/// @param faliure 失败
++ (void)getWithdrawalInfoRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/userWithdrawal/getWithdrawalInfo"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-teacher/userWithdrawal/withdrawal
+
+/// 用户提现
+/// @param post post
+/// @param amountWithdrawal 提现金额
+/// @param bankCardId 用户银行卡id
+/// @param success 成功
+/// @param faliure 失败
++ (void)withdrawalRequest:(NSString *)post amountWithdrawal:(double)amountWithdrawal bankCardId:(NSString *)bankCardId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/userWithdrawal/withdrawal"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@(amountWithdrawal) forKey:@"amountWithdrawal"];
+    [parm setValue:bankCardId forKey:@"bankCardId"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-teacher/userWithdrawal/withdrawalPage
+
+/// 提现记录
+/// @param post post
+/// @param searchDate yyyy-mm
+/// @param status DOING  PASS UNPASS
+/// @param page 分页
+/// @param rows 条数
+/// @param success 成功
+/// @param faliure 失败
++ (void)withdrawalPageRequest:(NSString *)post searchDate:(NSString *)searchDate status:(NSString *)status page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/userWithdrawal/withdrawalPage"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:searchDate forKey:@"searchDate"];
+    [parm setValue:status forKey:@"status"];
+    [parm setValue:@(page) forKey:@"page"];
+    [parm setValue:@(rows) forKey:@"rows"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
 @end

+ 72 - 5
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/Controller/MyIncomeViewController.m

@@ -30,6 +30,7 @@
 
 @property (nonatomic, assign) NSInteger chooseIndex;
 
+
 @end
 
 @implementation MyIncomeViewController
@@ -40,7 +41,6 @@
     [self allocTitle:@"我的收入"];
     [self configUI];
     [self setDefaultConfig];
-    [self requestAccountDetail];
 }
 
 - (void)setDefaultConfig {
@@ -98,6 +98,7 @@
 }
 
 - (void)refreshAndRequestData {
+    [self requestAccountDetail];
     [self resetParamenter];
     [self requestData];
 }
@@ -121,12 +122,13 @@
 - (void)requestAccountDetail {
     [KSNetworkingManager teacherAccountDetail:KS_GET success:^(NSDictionary * _Nonnull dic) {
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-            double amount = [[dic dictionaryValueForKey:@"data"] doubleValueForKey:@"amountTotal"];
+            double amount = [[dic dictionaryValueForKey:@"data"] doubleValueForKey:@"amountUsable"];
             self.headView.moneyLabel.text = [NSString formatMoneyDoubleNum:amount];
         }
         else {
             [self MBPShow:MESSAGEKEY];
         }
+        [self.tableView reloadData];
     } faliure:^(NSError * _Nonnull error) {
         
     }];
@@ -172,9 +174,7 @@
 }
 
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    
     MyIncomeListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIncomeListCell"];
-    
     return cell;
 }
 
@@ -214,12 +214,13 @@
     switch (action) {
         case INCOME_ACTION_TIME:
         {
+            [self hiddenPopView];
             [self showPickerView];
         }
             break;
         case INCOME_ACTION_TYPE:
         {
-            
+            [self.popView refreshWithSourceArray:@[@"全部收入",@"陪练课",@"直播课",@"视频课",@"乐谱"] preChooseIndex:self.chooseIndex inView:self.view actionItem:0];
         }
             break;
         case INCOME_ACTION_WITHDRAW:
@@ -257,6 +258,72 @@
 - (void)resetPickerStatus {
     self.headView.firstArrowUp = NO;
 }
+
+- (NewClassPopView *)popView {
+    if (!_popView) {
+        MJWeakSelf;
+        _popView = [[NewClassPopView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.headView.frame), kScreenWidth, CGRectGetHeight(self.tableView.frame)) tableColor:HexRGB(0xf5f5f5) chooseCallback:^(NSString * _Nonnull sortStr, NSInteger chooseIndex, NSInteger item) {
+            if (chooseIndex != 0) {
+                // 回调
+                [weakSelf sortWithChooseIndex:chooseIndex item:item title:sortStr];
+            }
+            weakSelf.headView.secondArrowUp = NO;
+            [weakSelf hiddenPopView];
+        }];
+    }
+    return _popView;
+}
+
+- (void)sortWithChooseIndex:(NSInteger)chooseIndex item:(NSInteger)item title:(NSString *)title {
+    self.chooseIndex = chooseIndex;
+    if (chooseIndex == 1) {
+        self.headView.typeLabel.text = @"全部收入";
+    }
+    else {
+        self.headView.typeLabel.text = title;
+    }
+    switch (chooseIndex) {
+        case 1:
+        {
+            self.bizType = nil;
+        }
+            break;
+        case 2:
+        {
+            self.bizType = @"PRACTICE";
+        }
+            break;
+        case 3:
+        {
+            self.bizType = @"LIVE";
+        }
+            break;
+        case 4:
+        {
+            self.bizType = @"VIDEO";
+        }
+            break;
+        case 5:
+        {
+            self.bizType = @"MUSIC";
+        }
+            break;
+        default:
+            break;
+    }
+    
+    [self resetParamenter];
+    [self requestData];
+    [self requestAccountDetail];
+}
+
+- (void)hiddenPopView {
+    if ([self.view.subviews containsObject:self.popView]) {
+        self.headView.secondArrowUp = NO;
+        [self.popView hiddenView];
+    }
+}
+
 /*
 #pragma mark - Navigation
 

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/View/IncomeHeaderView.h

@@ -35,6 +35,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 + (CGFloat)getViewHeight;
 
+
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 15 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/View/IncomeHeaderView.m

@@ -13,6 +13,8 @@
 
 @property (weak, nonatomic) IBOutlet UIImageView *firstArrow;
 
+@property (weak, nonatomic) IBOutlet UIImageView *secondArrow;
+
 
 @end
 
@@ -30,12 +32,14 @@
 }
 
 - (IBAction)sortTime:(id)sender {
+    self.firstArrowUp = YES;
     if (self.callback) {
         self.callback(INCOME_ACTION_TIME);
     }
 }
 
 - (IBAction)sortType:(id)sender {
+    self.secondArrowUp = YES;
     if (self.callback) {
         self.callback(INCOME_ACTION_TYPE);
     }
@@ -47,6 +51,17 @@
     }
 }
 
+- (void)setFirstArrowUp:(BOOL)firstArrowUp {
+    _firstArrowUp = firstArrowUp;
+    NSString *imageName = firstArrowUp ? @"sort_up" : @"sort_down";
+    [_firstArrow setImage:[UIImage imageNamed:imageName]];
+}
+
+- (void)setSecondArrowUp:(BOOL)secondArrowUp {
+    _secondArrowUp = secondArrowUp;
+    NSString *imageName = secondArrowUp ? @"sort_up" : @"sort_down";
+    [_secondArrow setImage:[UIImage imageNamed:imageName]];
+}
 
 + (CGFloat)getViewHeight {
     return 210;

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/View/IncomeHeaderView.xib

@@ -166,6 +166,7 @@
             <connections>
                 <outlet property="firstArrow" destination="avr-eL-IPb" id="zZQ-0F-8Dr"/>
                 <outlet property="moneyLabel" destination="c3Y-4p-OW4" id="CNg-r1-gFv"/>
+                <outlet property="secondArrow" destination="9AQ-BX-bsj" id="Saj-ih-TLb"/>
                 <outlet property="timeLabel" destination="psQ-m0-LNj" id="k3K-yr-8Rp"/>
                 <outlet property="typeLabel" destination="VcX-wU-9TK" id="kl6-td-b9p"/>
             </connections>

+ 264 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/CashRecordViewController.m

@@ -7,11 +7,27 @@
 
 #import "CashRecordViewController.h"
 #import "CashRecordListCell.h"
+#import "NewClassPopView.h"
+#import "KSFullDatePicker.h"
+#import "CashRecordHeadView.h"
+#import "FeeRecordModel.h"
 
 @interface CashRecordViewController ()<UITableViewDelegate,UITableViewDataSource>
 
+@property (nonatomic, strong) NewClassPopView *popView;
+
+@property (nonatomic, strong) CashRecordHeadView *headView;
+
+@property (nonatomic, strong) NSDateFormatter *dateFormatter;
+
+@property (nonatomic, strong) NSString *searchDate;
+
 @property (nonatomic, strong) UITableView *tableView;
 
+@property (nonatomic, strong) NSString *statusType;
+
+@property (nonatomic, assign) NSInteger chooseIndex;
+
 @end
 
 
@@ -22,10 +38,258 @@
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     [self allocTitle:@"提现记录"];
+    [self configUI];
+    [self setDefaultConfig];
+}
+
+- (void)setDefaultConfig {
+    
+    [self.dateFormatter setDateFormat:@"yyyy-MM"];
+    NSDate *date = [NSDate date];
+    self.searchDate = [self.dateFormatter stringFromDate:date];
+    [self.dateFormatter setDateFormat:@"yyyy年M月"];
+    self.headView.timeLabel.text = [self.dateFormatter stringFromDate:date];
+    self.headView.typeLabel.text = @"全部";
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    [self.view addSubview:self.headView];
+    CGFloat headHeight = [CashRecordHeadView getViewHeight];
+    [self.headView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.view);
+        make.height.mas_equalTo(headHeight);
+    }];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.headView.mas_bottom);
+        make.bottom.mas_equalTo(self.view.mas_bottom).offset(-iPhoneXSafeBottomMargin);
+    }];
+    
+    MJWeakSelf;
+    self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+        [weakSelf refreshAndRequestData];
+    }];
+    self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
+        if (weakSelf.isLoadMore) {
+            weakSelf.pages += 1;
+            [weakSelf requestData];
+        }
+        else {
+            [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
+        }
+    }];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self refreshAndRequestData];
+}
+
+- (void)refreshAndRequestData {
+    [self resetParamenter];
+    [self requestData];
+}
+
+- (void)resetParamenter {
+    self.pages = 1;
+    self.isLoadMore = YES;
+    self.dataArray = [NSMutableArray array];
+    [self.tableView.mj_footer resetNoMoreData];
+    [self setPromptString:@"暂无数据" imageName:@"wd_img_zwsj" inView:self.tableView];
+    [self.tableView reloadData];
+}
+
+- (void)endRefresh {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [self.tableView.mj_header endRefreshing];
+        [self.tableView.mj_footer endRefreshing];
+    });
+}
+
+- (void)requestData {
+    [self showhud];
+    [KSNetworkingManager withdrawalPageRequest:KS_POST searchDate:self.searchDate status:self.statusType page:self.pages rows:self.rows success:^(NSDictionary * _Nonnull dic) {
+        [self removehub];
+        [self endRefresh];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
+            
+            for (NSDictionary *parm in sourceArray) {
+                FeeRecordModel *model = [[FeeRecordModel alloc] initWithDictionary:parm];
+                [self.dataArray addObject:model];
+            }
+            if (sourceArray.count < self.rows) {
+                self.isLoadMore = NO;
+            }
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+        [self.tableView reloadData];
+        [self changePromptLabelState];
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+        [self endRefresh];
+        if (self.networkAvaiable == NO) {
+            [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
+        }
+        [self.dataArray removeAllObjects];
+        [self.tableView reloadData];
+    }];
+}
+
+#pragma mark --- table data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArray.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    FeeRecordModel *model = self.dataArray[indexPath.row];
+    CashRecordListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CashRecordListCell"];
+    [cell configWithSource:model];
+    return cell;
 }
 
 
+#pragma mark ---- lazying
+- (UITableView *)tableView {
+    if (!_tableView) {
+        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+        _tableView.backgroundColor = [UIColor clearColor];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.rowHeight = 94.0f;
+        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        _tableView.showsVerticalScrollIndicator = NO;
+        _tableView.showsHorizontalScrollIndicator = NO;
+        [_tableView registerNib:[UINib nibWithNibName:@"CashRecordListCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"CashRecordListCell"];
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 15)];
+        bottomView.backgroundColor = [UIColor clearColor];
+        _tableView.tableFooterView = bottomView;
+    }
+    return _tableView;
+}
+
+- (NSDateFormatter *)dateFormatter {
+    if (!_dateFormatter) {
+        _dateFormatter = [NSObject getDateformatter];
+    }
+    return _dateFormatter;
+}
 
+- (CashRecordHeadView *)headView {
+    if (!_headView) {
+        _headView = [CashRecordHeadView shareInstance];
+        MJWeakSelf;
+        [_headView sortAtionCallback:^(RECORDACTION action) {
+            [weakSelf sortAction:action];
+        }];
+    }
+    return _headView;
+}
+
+- (void)sortAction:(RECORDACTION)action {
+    switch (action) {
+        case RECORDACTION_TYPE:
+        {
+            [self.popView refreshWithSourceArray:@[@"全部",@"审核中",@"提现成功",@"提现失败"] preChooseIndex:self.chooseIndex inView:self.view actionItem:0];
+        }
+            break;
+        case RECORDACTION_TIME:
+        {
+            [self hiddenPopView];
+            [self showPickerView];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)showPickerView {
+    KSFullDatePicker *pickerView = [[KSFullDatePicker alloc] initWithTitle:@"" date:[NSDate date] pickMode:KSDATEPICKER_MODE_YEAR_MONTH selectDateBlock:^(NSString *date) {
+        self.searchDate = date;
+        NSString *displayTime = [self getTimeDisplay:date];
+        [self.headView.timeLabel setText:displayTime];
+        [self resetPickerStatus];
+        [self refreshAndRequestData];//
+    } cancleBlock:^{
+        [self resetPickerStatus];
+    }];
+    [pickerView show];
+}
+
+- (NSString *)getTimeDisplay:(NSString *)chooseMonth {
+    [self.dateFormatter setDateFormat:@"yyyy-MM"];
+    NSDate *chooseDate = [self.dateFormatter dateFromString:chooseMonth];
+    [self.dateFormatter setDateFormat:@"yyyy年M月"];
+    NSString *displayTime = [self.dateFormatter stringFromDate:chooseDate];
+    return displayTime;
+}
+
+- (void)resetPickerStatus {
+    self.headView.firstArrowUp = NO;
+}
+
+- (NewClassPopView *)popView {
+    if (!_popView) {
+        MJWeakSelf;
+        _popView = [[NewClassPopView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.headView.frame), kScreenWidth, CGRectGetHeight(self.tableView.frame)) tableColor:HexRGB(0xf5f5f5) chooseCallback:^(NSString * _Nonnull sortStr, NSInteger chooseIndex, NSInteger item) {
+            if (chooseIndex != 0) {
+                // 回调
+                [weakSelf sortWithChooseIndex:chooseIndex item:item title:sortStr];
+            }
+            weakSelf.headView.firstArrowUp = NO;
+            [weakSelf hiddenPopView];
+        }];
+    }
+    return _popView;
+}
+
+- (void)sortWithChooseIndex:(NSInteger)chooseIndex item:(NSInteger)item title:(NSString *)title {
+    self.chooseIndex = chooseIndex;
+    if (chooseIndex == 1) {
+        self.headView.typeLabel.text = @"全部";
+    }
+    else {
+        self.headView.typeLabel.text = title;
+    }
+    switch (chooseIndex) {
+        case 1:
+        {
+            self.statusType = nil;
+        }
+            break;
+        case 2:
+        {
+            self.statusType = @"DOING";
+        }
+            break;
+        case 3:
+        {
+            self.statusType = @"PASS";
+        }
+            break;
+        case 4:
+        {
+            self.statusType = @"UNPASS";
+        }
+            break;
+        default:
+            break;
+    }
+    
+    [self refreshAndRequestData];
+}
+
+- (void)hiddenPopView {
+    if ([self.view.subviews containsObject:self.popView]) {
+        self.headView.firstArrowUp = NO;
+        [self.popView hiddenView];
+    }
+}
 /*
 #pragma mark - Navigation
 

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/WithdrawApplyViewController.h

@@ -0,0 +1,22 @@
+//
+//  WithdrawApplyViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/27.
+//
+
+#import "KSBaseViewController.h"
+
+typedef void(^BackRefreshAction)(void);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface WithdrawApplyViewController : KSBaseViewController
+
+@property (nonatomic, strong) NSString *backControllerName;
+
+- (void)successCallback:(BackRefreshAction)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 86 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/WithdrawApplyViewController.m

@@ -0,0 +1,86 @@
+//
+//  WithdrawApplyViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/27.
+//
+
+#import "WithdrawApplyViewController.h"
+#import "WithdrawApplyBodyView.h"
+
+@interface WithdrawApplyViewController ()
+
+@property (nonatomic, copy) BackRefreshAction callback;
+
+@end
+
+@implementation WithdrawApplyViewController
+
+- (void)successCallback:(BackRefreshAction)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"申请成功"];
+    [self configUI];
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    WithdrawApplyBodyView *bodyView = [WithdrawApplyBodyView shareInstance];
+    MJWeakSelf;
+    [bodyView sureCallback:^{
+        [weakSelf backAction];
+    }];
+    [self.view addSubview:bodyView];
+    [bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.view);
+    }];
+}
+
+- (void)backAction {
+    
+    if (![NSString isEmptyString:self.backControllerName]) {
+        UIViewController *ctrl = nil;
+        for (UIViewController *controller in self.navigationController.viewControllers) {
+            if ([controller isKindOfClass:NSClassFromString(self.backControllerName)]) {
+                ctrl = controller;
+                break;
+            }
+        }
+        if (ctrl) {
+            if (self.callback) {
+                self.callback();
+            }
+            [self.navigationController popToViewController:ctrl animated:YES];
+        }
+        else {
+            if (self.callback) {
+                self.callback();
+            }
+            [self.navigationController popViewControllerAnimated:YES];
+        }
+    }
+    else {
+        if (self.callback) {
+            self.callback();
+        }
+        [self.navigationController popViewControllerAnimated:YES];
+    }
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/WithdrawViewController.h

@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface WithdrawViewController : KSBaseViewController
 
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 122 - 8
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Controller/WithdrawViewController.m

@@ -7,9 +7,22 @@
 
 #import "WithdrawViewController.h"
 #import "CashRecordViewController.h"
+#import "WithdrawBodyView.h"
+#import "WithdrawModel.h"
+#import "BandCardViewController.h"
+#import "KSConfirmAlertView.h"
+#import "WithdrawApplyViewController.h"
 
 @interface WithdrawViewController ()
 
+@property (nonatomic, assign) BOOL isEmpty;
+
+@property (nonatomic, strong) WithdrawBodyView *bodyView;
+
+@property (nonatomic, strong) NSString *usableAmount;
+
+@property (nonatomic, strong) WithdrawModel *drawModel;
+
 @end
 
 @implementation WithdrawViewController
@@ -21,8 +34,109 @@
     [self configUIDisplay];
 }
 
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self requestData];
+}
+
+- (void)requestData {
+    [self showhud];
+    [KSNetworkingManager getWithdrawalInfoRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
+        [self removehub];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            self.drawModel = [[WithdrawModel alloc] initWithDictionary:[dic dictionaryValueForKey:@"data"]];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+        [self evaluateSource];
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+    }];
+}
+
+- (void)evaluateSource {
+    self.bodyView.descLabel.text = [NSString stringWithFormat:@"单次收入提现时,平台将收取%.2f元手续费",self.drawModel.withdrawalServiceFee];
+    self.bodyView.amount = self.drawModel.amountWithdrawal;
+    NSString *descAmout = [NSString formatMoneyDoubleNum:self.drawModel.amountWithdrawal];
+    self.bodyView.availableAmoutLabel.text = [NSString returnNoNullStringWithString:[NSString stringWithFormat:@"可提现余额 ¥%@",descAmout]];
+    if (self.drawModel.userBankCard) {
+        NSString *cardNumber = self.drawModel.userBankCard.bankCard;
+        if (cardNumber.length > 4) {
+            self.bodyView.cardDesc.text = [NSString stringWithFormat:@"%@(****%@)",[NSString returnNoNullStringWithString:self.drawModel.userBankCard.bankName],[cardNumber substringFromIndex:cardNumber.length - 4]];
+        }
+        else {
+            self.bodyView.cardDesc.text = @"银行卡信息错误";
+        }
+    }
+    else {
+        self.bodyView.cardDesc.text = @"您未绑定银行卡";
+    }
+}
+
 - (void)configUIDisplay {
+    [self.scrollView removeFromSuperview];
     [self rightButtonTitle:@"提现记录"];
+    self.bodyView = [WithdrawBodyView shareInstance];
+    [self.view addSubview:self.bodyView];
+    [self.bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.mas_equalTo(self.view);
+    }];
+    MJWeakSelf;
+    [self.bodyView withdrawSureCallback:^(NSString *amountString) {
+        [weakSelf submitAction:amountString];
+    }];
+}
+
+- (void)submitAction:(NSString *)amountString {
+    if (self.drawModel.userBankCard == nil) {
+        [self showBandCardAlert];
+        return;
+    }
+    if ([NSString isEmptyString:amountString]) {
+        [self MBPShow:@"请输入提现金额"];
+        return;
+    }
+    [self showhud];
+    [KSNetworkingManager withdrawalRequest:KS_POST amountWithdrawal:[amountString doubleValue] bankCardId:[NSString stringWithFormat:@"%.0f",self.drawModel.userBankCard.userBankCardIdentifier] success:^(NSDictionary * _Nonnull dic) {
+        [self removehub];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            [self showSuccessView];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+    }];
+}
+
+- (void)showSuccessView {
+    WithdrawApplyViewController *ctrl = [[WithdrawApplyViewController alloc] init];
+    ctrl.backControllerName = @"MyIncomeViewController";
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+
+- (void)showBandCardAlert {
+    KSConfirmAlertView *alert = [KSConfirmAlertView shareInstance];
+    alert.frame = self.view.bounds;
+    [alert configWithTitle:@"绑定银行卡" subTitle:@"您需要先绑定银行卡后才能提现"];
+    MJWeakSelf;
+    [alert opreationSure:^{
+        [weakSelf bandCard];
+    } cancel:^{
+        
+    }];
+    [self.view addSubview:alert];
+    
+}
+
+
+
+- (void)bandCard {
+    BandCardViewController *ctrl = [[BandCardViewController alloc] init];
+    [self.navigationController pushViewController:ctrl animated:YES];
 }
 
 - (void)rightBtnClick {
@@ -31,13 +145,13 @@
 }
 
 /*
-#pragma mark - Navigation
-
-// In a storyboard-based application, you will often want to do a little preparation before navigation
-- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
-    // Get the new view controller using [segue destinationViewController].
-    // Pass the selected object to the new view controller.
-}
-*/
+ #pragma mark - Navigation
+ 
+ // In a storyboard-based application, you will often want to do a little preparation before navigation
+ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+ // Get the new view controller using [segue destinationViewController].
+ // Pass the selected object to the new view controller.
+ }
+ */
 
 @end

+ 35 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/FeeRecordModel.h

@@ -0,0 +1,35 @@
+//
+//  FeeRecordModel.h
+//
+//  Created by Steven  on 2022/4/27
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface FeeRecordModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, assign) double internalBaseClassIdentifier;
+@property (nonatomic, assign) double plantformFee;
+@property (nonatomic, strong) NSString *bankCard;
+@property (nonatomic, assign) double amount;
+@property (nonatomic, strong) NSString *bankName;
+@property (nonatomic, assign) double verifyUserId;
+@property (nonatomic, strong) NSString *bankFlowNo;
+@property (nonatomic, assign) double actualAmount;
+@property (nonatomic, strong) NSString *verifyUser;
+@property (nonatomic, strong) NSString *withdrawaUser;
+@property (nonatomic, strong) NSString *verifyReason;
+@property (nonatomic, assign) double userId;
+@property (nonatomic, strong) NSString *transferTime;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, strong) NSString *status;
+@property (nonatomic, strong) NSString *updateTime;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 200 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/FeeRecordModel.m

@@ -0,0 +1,200 @@
+//
+//  FeeRecordModel.m
+//
+//  Created by Steven  on 2022/4/27
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "FeeRecordModel.h"
+
+
+NSString *const kFeeRecordModelId = @"id";
+NSString *const kFeeRecordModelPlantformFee = @"plantformFee";
+NSString *const kFeeRecordModelBankCard = @"bankCard";
+NSString *const kFeeRecordModelAmount = @"amount";
+NSString *const kFeeRecordModelBankName = @"bankName";
+NSString *const kFeeRecordModelVerifyUserId = @"verifyUserId";
+NSString *const kFeeRecordModelBankFlowNo = @"bankFlowNo";
+NSString *const kFeeRecordModelActualAmount = @"actualAmount";
+NSString *const kFeeRecordModelVerifyUser = @"verifyUser";
+NSString *const kFeeRecordModelWithdrawaUser = @"withdrawaUser";
+NSString *const kFeeRecordModelVerifyReason = @"verifyReason";
+NSString *const kFeeRecordModelUserId = @"userId";
+NSString *const kFeeRecordModelTransferTime = @"transferTime";
+NSString *const kFeeRecordModelCreateTime = @"createTime";
+NSString *const kFeeRecordModelStatus = @"status";
+NSString *const kFeeRecordModelUpdateTime = @"updateTime";
+
+
+@interface FeeRecordModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation FeeRecordModel
+
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize plantformFee = _plantformFee;
+@synthesize bankCard = _bankCard;
+@synthesize amount = _amount;
+@synthesize bankName = _bankName;
+@synthesize verifyUserId = _verifyUserId;
+@synthesize bankFlowNo = _bankFlowNo;
+@synthesize actualAmount = _actualAmount;
+@synthesize verifyUser = _verifyUser;
+@synthesize withdrawaUser = _withdrawaUser;
+@synthesize verifyReason = _verifyReason;
+@synthesize userId = _userId;
+@synthesize transferTime = _transferTime;
+@synthesize createTime = _createTime;
+@synthesize status = _status;
+@synthesize updateTime = _updateTime;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.internalBaseClassIdentifier = [[self objectOrNilForKey:kFeeRecordModelId fromDictionary:dict] doubleValue];
+            self.plantformFee = [[self objectOrNilForKey:kFeeRecordModelPlantformFee fromDictionary:dict] doubleValue];
+            self.bankCard = [self objectOrNilForKey:kFeeRecordModelBankCard fromDictionary:dict];
+            self.amount = [[self objectOrNilForKey:kFeeRecordModelAmount fromDictionary:dict] doubleValue];
+            self.bankName = [self objectOrNilForKey:kFeeRecordModelBankName fromDictionary:dict];
+            self.verifyUserId = [[self objectOrNilForKey:kFeeRecordModelVerifyUserId fromDictionary:dict] doubleValue];
+            self.bankFlowNo = [self objectOrNilForKey:kFeeRecordModelBankFlowNo fromDictionary:dict];
+            self.actualAmount = [[self objectOrNilForKey:kFeeRecordModelActualAmount fromDictionary:dict] doubleValue];
+            self.verifyUser = [self objectOrNilForKey:kFeeRecordModelVerifyUser fromDictionary:dict];
+            self.withdrawaUser = [self objectOrNilForKey:kFeeRecordModelWithdrawaUser fromDictionary:dict];
+            self.verifyReason = [self objectOrNilForKey:kFeeRecordModelVerifyReason fromDictionary:dict];
+            self.userId = [[self objectOrNilForKey:kFeeRecordModelUserId fromDictionary:dict] doubleValue];
+            self.transferTime = [self objectOrNilForKey:kFeeRecordModelTransferTime fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kFeeRecordModelCreateTime fromDictionary:dict];
+            self.status = [self objectOrNilForKey:kFeeRecordModelStatus fromDictionary:dict];
+            self.updateTime = [self objectOrNilForKey:kFeeRecordModelUpdateTime fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.internalBaseClassIdentifier] forKey:kFeeRecordModelId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.plantformFee] forKey:kFeeRecordModelPlantformFee];
+    [mutableDict setValue:self.bankCard forKey:kFeeRecordModelBankCard];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.amount] forKey:kFeeRecordModelAmount];
+    [mutableDict setValue:self.bankName forKey:kFeeRecordModelBankName];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.verifyUserId] forKey:kFeeRecordModelVerifyUserId];
+    [mutableDict setValue:self.bankFlowNo forKey:kFeeRecordModelBankFlowNo];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.actualAmount] forKey:kFeeRecordModelActualAmount];
+    [mutableDict setValue:self.verifyUser forKey:kFeeRecordModelVerifyUser];
+    [mutableDict setValue:self.withdrawaUser forKey:kFeeRecordModelWithdrawaUser];
+    [mutableDict setValue:self.verifyReason forKey:kFeeRecordModelVerifyReason];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kFeeRecordModelUserId];
+    [mutableDict setValue:self.transferTime forKey:kFeeRecordModelTransferTime];
+    [mutableDict setValue:self.createTime forKey:kFeeRecordModelCreateTime];
+    [mutableDict setValue:self.status forKey:kFeeRecordModelStatus];
+    [mutableDict setValue:self.updateTime forKey:kFeeRecordModelUpdateTime];
+
+    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.internalBaseClassIdentifier = [aDecoder decodeDoubleForKey:kFeeRecordModelId];
+    self.plantformFee = [aDecoder decodeDoubleForKey:kFeeRecordModelPlantformFee];
+    self.bankCard = [aDecoder decodeObjectForKey:kFeeRecordModelBankCard];
+    self.amount = [aDecoder decodeDoubleForKey:kFeeRecordModelAmount];
+    self.bankName = [aDecoder decodeObjectForKey:kFeeRecordModelBankName];
+    self.verifyUserId = [aDecoder decodeDoubleForKey:kFeeRecordModelVerifyUserId];
+    self.bankFlowNo = [aDecoder decodeObjectForKey:kFeeRecordModelBankFlowNo];
+    self.actualAmount = [aDecoder decodeDoubleForKey:kFeeRecordModelActualAmount];
+    self.verifyUser = [aDecoder decodeObjectForKey:kFeeRecordModelVerifyUser];
+    self.withdrawaUser = [aDecoder decodeObjectForKey:kFeeRecordModelWithdrawaUser];
+    self.verifyReason = [aDecoder decodeObjectForKey:kFeeRecordModelVerifyReason];
+    self.userId = [aDecoder decodeDoubleForKey:kFeeRecordModelUserId];
+    self.transferTime = [aDecoder decodeObjectForKey:kFeeRecordModelTransferTime];
+    self.createTime = [aDecoder decodeObjectForKey:kFeeRecordModelCreateTime];
+    self.status = [aDecoder decodeObjectForKey:kFeeRecordModelStatus];
+    self.updateTime = [aDecoder decodeObjectForKey:kFeeRecordModelUpdateTime];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeDouble:_internalBaseClassIdentifier forKey:kFeeRecordModelId];
+    [aCoder encodeDouble:_plantformFee forKey:kFeeRecordModelPlantformFee];
+    [aCoder encodeObject:_bankCard forKey:kFeeRecordModelBankCard];
+    [aCoder encodeDouble:_amount forKey:kFeeRecordModelAmount];
+    [aCoder encodeObject:_bankName forKey:kFeeRecordModelBankName];
+    [aCoder encodeDouble:_verifyUserId forKey:kFeeRecordModelVerifyUserId];
+    [aCoder encodeObject:_bankFlowNo forKey:kFeeRecordModelBankFlowNo];
+    [aCoder encodeDouble:_actualAmount forKey:kFeeRecordModelActualAmount];
+    [aCoder encodeObject:_verifyUser forKey:kFeeRecordModelVerifyUser];
+    [aCoder encodeObject:_withdrawaUser forKey:kFeeRecordModelWithdrawaUser];
+    [aCoder encodeObject:_verifyReason forKey:kFeeRecordModelVerifyReason];
+    [aCoder encodeDouble:_userId forKey:kFeeRecordModelUserId];
+    [aCoder encodeObject:_transferTime forKey:kFeeRecordModelTransferTime];
+    [aCoder encodeObject:_createTime forKey:kFeeRecordModelCreateTime];
+    [aCoder encodeObject:_status forKey:kFeeRecordModelStatus];
+    [aCoder encodeObject:_updateTime forKey:kFeeRecordModelUpdateTime];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    FeeRecordModel *copy = [[FeeRecordModel alloc] init];
+    
+    if (copy) {
+
+        copy.internalBaseClassIdentifier = self.internalBaseClassIdentifier;
+        copy.plantformFee = self.plantformFee;
+        copy.bankCard = [self.bankCard copyWithZone:zone];
+        copy.amount = self.amount;
+        copy.bankName = [self.bankName copyWithZone:zone];
+        copy.verifyUserId = self.verifyUserId;
+        copy.bankFlowNo = [self.bankFlowNo copyWithZone:zone];
+        copy.actualAmount = self.actualAmount;
+        copy.verifyUser = [self.verifyUser copyWithZone:zone];
+        copy.withdrawaUser = [self.withdrawaUser copyWithZone:zone];
+        copy.verifyReason = [self.verifyReason copyWithZone:zone];
+        copy.userId = self.userId;
+        copy.transferTime = [self.transferTime copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.status = [self.status copyWithZone:zone];
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 30 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/UserBankCard.h

@@ -0,0 +1,30 @@
+//
+//  UserBankCard.h
+//
+//  Created by Steven  on 2022/4/27
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface UserBankCard : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *phone;
+@property (nonatomic, strong) NSString *bankName;
+@property (nonatomic, assign) BOOL delFlag;
+@property (nonatomic, assign) double userBankCardIdentifier;
+@property (nonatomic, assign) double userId;
+@property (nonatomic, strong) NSString *bankCard;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *bankCode;
+@property (nonatomic, assign) BOOL defaultFlag;
+@property (nonatomic, strong) NSString *name;
+@property (nonatomic, strong) NSString *createTime;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 169 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/UserBankCard.m

@@ -0,0 +1,169 @@
+//
+//  UserBankCard.m
+//
+//  Created by Steven  on 2022/4/27
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "UserBankCard.h"
+
+
+NSString *const kUserBankCardPhone = @"phone";
+NSString *const kUserBankCardBankName = @"bankName";
+NSString *const kUserBankCardDelFlag = @"delFlag";
+NSString *const kUserBankCardId = @"id";
+NSString *const kUserBankCardUserId = @"userId";
+NSString *const kUserBankCardBankCard = @"bankCard";
+NSString *const kUserBankCardUpdateTime = @"updateTime";
+NSString *const kUserBankCardBankCode = @"bankCode";
+NSString *const kUserBankCardDefaultFlag = @"defaultFlag";
+NSString *const kUserBankCardName = @"name";
+NSString *const kUserBankCardCreateTime = @"createTime";
+
+
+@interface UserBankCard ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation UserBankCard
+
+@synthesize phone = _phone;
+@synthesize bankName = _bankName;
+@synthesize delFlag = _delFlag;
+@synthesize userBankCardIdentifier = _userBankCardIdentifier;
+@synthesize userId = _userId;
+@synthesize bankCard = _bankCard;
+@synthesize updateTime = _updateTime;
+@synthesize bankCode = _bankCode;
+@synthesize defaultFlag = _defaultFlag;
+@synthesize name = _name;
+@synthesize createTime = _createTime;
+
+
++ (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.phone = [self objectOrNilForKey:kUserBankCardPhone fromDictionary:dict];
+            self.bankName = [self objectOrNilForKey:kUserBankCardBankName fromDictionary:dict];
+            self.delFlag = [[self objectOrNilForKey:kUserBankCardDelFlag fromDictionary:dict] boolValue];
+            self.userBankCardIdentifier = [[self objectOrNilForKey:kUserBankCardId fromDictionary:dict] doubleValue];
+            self.userId = [[self objectOrNilForKey:kUserBankCardUserId fromDictionary:dict] doubleValue];
+            self.bankCard = [self objectOrNilForKey:kUserBankCardBankCard fromDictionary:dict];
+            self.updateTime = [self objectOrNilForKey:kUserBankCardUpdateTime fromDictionary:dict];
+            self.bankCode = [self objectOrNilForKey:kUserBankCardBankCode fromDictionary:dict];
+            self.defaultFlag = [[self objectOrNilForKey:kUserBankCardDefaultFlag fromDictionary:dict] boolValue];
+            self.name = [self objectOrNilForKey:kUserBankCardName fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kUserBankCardCreateTime fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.phone forKey:kUserBankCardPhone];
+    [mutableDict setValue:self.bankName forKey:kUserBankCardBankName];
+    [mutableDict setValue:[NSNumber numberWithBool:self.delFlag] forKey:kUserBankCardDelFlag];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.userBankCardIdentifier] forKey:kUserBankCardId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kUserBankCardUserId];
+    [mutableDict setValue:self.bankCard forKey:kUserBankCardBankCard];
+    [mutableDict setValue:self.updateTime forKey:kUserBankCardUpdateTime];
+    [mutableDict setValue:self.bankCode forKey:kUserBankCardBankCode];
+    [mutableDict setValue:[NSNumber numberWithBool:self.defaultFlag] forKey:kUserBankCardDefaultFlag];
+    [mutableDict setValue:self.name forKey:kUserBankCardName];
+    [mutableDict setValue:self.createTime forKey:kUserBankCardCreateTime];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.phone = [aDecoder decodeObjectForKey:kUserBankCardPhone];
+    self.bankName = [aDecoder decodeObjectForKey:kUserBankCardBankName];
+    self.delFlag = [aDecoder decodeBoolForKey:kUserBankCardDelFlag];
+    self.userBankCardIdentifier = [aDecoder decodeDoubleForKey:kUserBankCardId];
+    self.userId = [aDecoder decodeDoubleForKey:kUserBankCardUserId];
+    self.bankCard = [aDecoder decodeObjectForKey:kUserBankCardBankCard];
+    self.updateTime = [aDecoder decodeObjectForKey:kUserBankCardUpdateTime];
+    self.bankCode = [aDecoder decodeObjectForKey:kUserBankCardBankCode];
+    self.defaultFlag = [aDecoder decodeBoolForKey:kUserBankCardDefaultFlag];
+    self.name = [aDecoder decodeObjectForKey:kUserBankCardName];
+    self.createTime = [aDecoder decodeObjectForKey:kUserBankCardCreateTime];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_phone forKey:kUserBankCardPhone];
+    [aCoder encodeObject:_bankName forKey:kUserBankCardBankName];
+    [aCoder encodeBool:_delFlag forKey:kUserBankCardDelFlag];
+    [aCoder encodeDouble:_userBankCardIdentifier forKey:kUserBankCardId];
+    [aCoder encodeDouble:_userId forKey:kUserBankCardUserId];
+    [aCoder encodeObject:_bankCard forKey:kUserBankCardBankCard];
+    [aCoder encodeObject:_updateTime forKey:kUserBankCardUpdateTime];
+    [aCoder encodeObject:_bankCode forKey:kUserBankCardBankCode];
+    [aCoder encodeBool:_defaultFlag forKey:kUserBankCardDefaultFlag];
+    [aCoder encodeObject:_name forKey:kUserBankCardName];
+    [aCoder encodeObject:_createTime forKey:kUserBankCardCreateTime];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    UserBankCard *copy = [[UserBankCard alloc] init];
+    
+    if (copy) {
+
+        copy.phone = [self.phone copyWithZone:zone];
+        copy.bankName = [self.bankName copyWithZone:zone];
+        copy.delFlag = self.delFlag;
+        copy.userBankCardIdentifier = self.userBankCardIdentifier;
+        copy.userId = self.userId;
+        copy.bankCard = [self.bankCard copyWithZone:zone];
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.bankCode = [self.bankCode copyWithZone:zone];
+        copy.defaultFlag = self.defaultFlag;
+        copy.name = [self.name copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 23 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/WithdrawModel.h

@@ -0,0 +1,23 @@
+//
+//  WithdrawModel.h
+//
+//  Created by Steven  on 2022/4/27
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "UserBankCard.h"
+
+@class UserBankCard;
+
+@interface WithdrawModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, assign) double withdrawalServiceFee;
+@property (nonatomic, assign) double amountWithdrawal;
+@property (nonatomic, strong) UserBankCard *userBankCard;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 113 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/Model/WithdrawModel.m

@@ -0,0 +1,113 @@
+//
+//  WithdrawModel.m
+//
+//  Created by Steven  on 2022/4/27
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "WithdrawModel.h"
+
+
+NSString *const kWithdrawModelWithdrawalServiceFee = @"withdrawalServiceFee";
+NSString *const kWithdrawModelAmountWithdrawal = @"amountWithdrawal";
+NSString *const kWithdrawModelUserBankCard = @"userBankCard";
+
+
+@interface WithdrawModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation WithdrawModel
+
+@synthesize withdrawalServiceFee = _withdrawalServiceFee;
+@synthesize amountWithdrawal = _amountWithdrawal;
+@synthesize userBankCard = _userBankCard;
+
+
++ (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.withdrawalServiceFee = [[self objectOrNilForKey:kWithdrawModelWithdrawalServiceFee fromDictionary:dict] doubleValue];
+            self.amountWithdrawal = [[self objectOrNilForKey:kWithdrawModelAmountWithdrawal fromDictionary:dict] doubleValue];
+            self.userBankCard = [UserBankCard modelObjectWithDictionary:[dict objectForKey:kWithdrawModelUserBankCard]];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.withdrawalServiceFee] forKey:kWithdrawModelWithdrawalServiceFee];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.amountWithdrawal] forKey:kWithdrawModelAmountWithdrawal];
+    [mutableDict setValue:[self.userBankCard dictionaryRepresentation] forKey:kWithdrawModelUserBankCard];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.withdrawalServiceFee = [aDecoder decodeDoubleForKey:kWithdrawModelWithdrawalServiceFee];
+    self.amountWithdrawal = [aDecoder decodeDoubleForKey:kWithdrawModelAmountWithdrawal];
+    self.userBankCard = [aDecoder decodeObjectForKey:kWithdrawModelUserBankCard];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeDouble:_withdrawalServiceFee forKey:kWithdrawModelWithdrawalServiceFee];
+    [aCoder encodeDouble:_amountWithdrawal forKey:kWithdrawModelAmountWithdrawal];
+    [aCoder encodeObject:_userBankCard forKey:kWithdrawModelUserBankCard];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    WithdrawModel *copy = [[WithdrawModel alloc] init];
+    
+    if (copy) {
+
+        copy.withdrawalServiceFee = self.withdrawalServiceFee;
+        copy.amountWithdrawal = self.amountWithdrawal;
+        copy.userBankCard = [self.userBankCard copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 36 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordHeadView.h

@@ -0,0 +1,36 @@
+//
+//  CashRecordHeadView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/27.
+//
+
+#import <UIKit/UIKit.h>
+typedef NS_ENUM(NSInteger, RECORDACTION) {
+    RECORDACTION_TYPE,
+    RECORDACTION_TIME,
+};
+
+typedef void(^RecordSortCallback)(RECORDACTION action);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CashRecordHeadView : UIView
+
+@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *typeLabel;
+
+@property (nonatomic, assign) BOOL firstArrowUp;
+
+@property (nonatomic, assign) BOOL secondArrowUp;
+
++ (instancetype)shareInstance;
+
+- (void)sortAtionCallback:(RecordSortCallback)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 73 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordHeadView.m

@@ -0,0 +1,73 @@
+//
+//  CashRecordHeadView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/27.
+//
+
+#import "CashRecordHeadView.h"
+
+@interface CashRecordHeadView ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *firstArrow;
+
+@property (weak, nonatomic) IBOutlet UIImageView *secondArrow;
+
+@property (nonatomic, copy) RecordSortCallback callback;
+
+@end
+
+
+@implementation CashRecordHeadView
+
++ (instancetype)shareInstance {
+    CashRecordHeadView *view = [[[NSBundle mainBundle] loadNibNamed:@"CashRecordHeadView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)sortAtionCallback:(RecordSortCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)sortType:(id)sender {
+    self.firstArrowUp = YES;
+    if (self.callback) {
+        self.callback(RECORDACTION_TYPE);
+    }
+}
+
+- (IBAction)sortTime:(id)sender {
+    self.secondArrowUp = YES;
+    if (self.callback) {
+        self.callback(RECORDACTION_TIME);
+    }
+}
+
+
+
+- (void)setFirstArrowUp:(BOOL)firstArrowUp {
+    _firstArrowUp = firstArrowUp;
+    NSString *imageName = firstArrowUp ? @"sort_up" : @"sort_down";
+    [_firstArrow setImage:[UIImage imageNamed:imageName]];
+}
+
+- (void)setSecondArrowUp:(BOOL)secondArrowUp {
+    _secondArrowUp = secondArrowUp;
+    NSString *imageName = secondArrowUp ? @"sort_up" : @"sort_down";
+    [_secondArrow setImage:[UIImage imageNamed:imageName]];
+}
+
++ (CGFloat)getViewHeight {
+    return 60;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 106 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordHeadView.xib

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="CashRecordHeadView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="112"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sLn-ZJ-Pt3">
+                    <rect key="frame" x="0.0" y="0.0" width="414" height="112"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="sort_down" translatesAutoresizingMaskIntoConstraints="NO" id="UsY-Z5-hKA">
+                            <rect key="frame" x="48" y="53" width="8" height="6"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="6" id="CLb-Fi-FhI"/>
+                                <constraint firstAttribute="width" constant="8" id="Lde-qX-YOy"/>
+                            </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="8ff-zg-qGP">
+                            <rect key="frame" x="14" y="43.5" width="29" height="25"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="25" id="zI1-Vx-Pvl"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ady-1X-WHs">
+                            <rect key="frame" x="14" y="36" width="42" height="40"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="40" id="Xtc-gQ-fMh"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="sortType:" destination="iN0-l3-epB" eventType="touchUpInside" id="gde-1e-eQV"/>
+                            </connections>
+                        </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2022年9月" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="v5X-UI-tb0">
+                            <rect key="frame" x="102" y="46" width="71" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="Yba-xQ-XI1"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <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="sort_down" translatesAutoresizingMaskIntoConstraints="NO" id="jgr-8B-mhL">
+                            <rect key="frame" x="179" y="53" width="8" height="6"/>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Yb2-rC-0aD">
+                            <rect key="frame" x="102" y="39" width="85" height="34"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="sortTime:" destination="iN0-l3-epB" eventType="touchUpInside" id="p3p-L9-ljE"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="8ff-zg-qGP" firstAttribute="centerY" secondItem="sLn-ZJ-Pt3" secondAttribute="centerY" id="07e-MT-rzN"/>
+                        <constraint firstItem="v5X-UI-tb0" firstAttribute="leading" secondItem="Yb2-rC-0aD" secondAttribute="leading" id="9gX-k0-L2Q"/>
+                        <constraint firstItem="jgr-8B-mhL" firstAttribute="leading" secondItem="v5X-UI-tb0" secondAttribute="trailing" constant="6" id="CxL-bU-6kT"/>
+                        <constraint firstItem="v5X-UI-tb0" firstAttribute="leading" secondItem="UsY-Z5-hKA" secondAttribute="trailing" constant="46" id="EYY-Cc-6uG"/>
+                        <constraint firstItem="jgr-8B-mhL" firstAttribute="centerY" secondItem="v5X-UI-tb0" secondAttribute="centerY" id="Gl3-qe-ZPh"/>
+                        <constraint firstItem="jgr-8B-mhL" firstAttribute="trailing" secondItem="Yb2-rC-0aD" secondAttribute="trailing" id="HIj-09-oJ7"/>
+                        <constraint firstItem="v5X-UI-tb0" firstAttribute="centerY" secondItem="8ff-zg-qGP" secondAttribute="centerY" id="IyT-Vc-1gJ"/>
+                        <constraint firstItem="UsY-Z5-hKA" firstAttribute="trailing" secondItem="Ady-1X-WHs" secondAttribute="trailing" id="Lrl-VD-SBS"/>
+                        <constraint firstItem="8ff-zg-qGP" firstAttribute="leading" secondItem="Ady-1X-WHs" secondAttribute="leading" id="NHL-2T-6aF"/>
+                        <constraint firstItem="UsY-Z5-hKA" firstAttribute="leading" secondItem="8ff-zg-qGP" secondAttribute="trailing" constant="5" id="NRN-al-Hug"/>
+                        <constraint firstItem="8ff-zg-qGP" firstAttribute="centerY" secondItem="Ady-1X-WHs" secondAttribute="centerY" id="YXx-cC-yPf"/>
+                        <constraint firstItem="jgr-8B-mhL" firstAttribute="centerY" secondItem="Yb2-rC-0aD" secondAttribute="centerY" id="gej-Bk-gzx"/>
+                        <constraint firstItem="8ff-zg-qGP" firstAttribute="leading" secondItem="sLn-ZJ-Pt3" secondAttribute="leading" constant="14" id="hYW-cW-5yc"/>
+                        <constraint firstItem="UsY-Z5-hKA" firstAttribute="centerY" secondItem="8ff-zg-qGP" secondAttribute="centerY" id="zx7-wR-Saf"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="sLn-ZJ-Pt3" secondAttribute="bottom" id="M0M-jK-k3H"/>
+                <constraint firstItem="sLn-ZJ-Pt3" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="Z2T-Ni-P3d"/>
+                <constraint firstItem="sLn-ZJ-Pt3" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="crd-Sy-ZSq"/>
+                <constraint firstAttribute="trailing" secondItem="sLn-ZJ-Pt3" secondAttribute="trailing" id="h12-3R-iox"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="firstArrow" destination="UsY-Z5-hKA" id="LiL-h3-cWf"/>
+                <outlet property="secondArrow" destination="jgr-8B-mhL" id="604-Rh-34o"/>
+                <outlet property="timeLabel" destination="v5X-UI-tb0" id="Ad9-KI-oTS"/>
+                <outlet property="typeLabel" destination="8ff-zg-qGP" id="Tb4-vQ-JHo"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="-184.82142857142856"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="sort_down" width="8" height="6"/>
+    </resources>
+</document>

+ 3 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordListCell.h

@@ -6,11 +6,14 @@
 //
 
 #import <UIKit/UIKit.h>
+#import "FeeRecordModel.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface CashRecordListCell : UITableViewCell
 
+- (void)configWithSource:(FeeRecordModel *)sourceModel;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 38 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordListCell.m

@@ -7,6 +7,19 @@
 
 #import "CashRecordListCell.h"
 
+@interface CashRecordListCell ()
+
+@property (weak, nonatomic) IBOutlet UILabel *cardNumberLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *amountLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
+
+@end
+
+
 @implementation CashRecordListCell
 
 - (void)awakeFromNib {
@@ -15,6 +28,31 @@
     self.selectionStyle = UITableViewCellSelectionStyleNone;
 }
 
+- (void)configWithSource:(FeeRecordModel *)sourceModel {
+    self.cardNumberLabel.text = [NSString returnNoNullStringWithString:sourceModel.bankCard];
+    self.amountLabel.text = [NSString stringWithFormat:@"¥%.2f",sourceModel.amount];
+    
+    // time
+    NSDateFormatter *formatter = [NSObject getDateformatter];
+    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    NSDate *applyDate = [formatter dateFromString:sourceModel.createTime];
+    [formatter setDateFormat:@"yyyy/MM/dd HH:mm"];
+    NSString *applyTime = [formatter stringFromDate:applyDate];
+    self.timeLabel.text = [NSString returnNoNullStringWithString:applyTime];
+    if ([sourceModel.status isEqualToString:@"DOING"]) {
+        self.statusLabel.text = @"审核中";
+        self.statusLabel.textColor = HexRGB(0x666666);
+    }
+    else if ([sourceModel.status isEqualToString:@"PASS"]) {
+        self.statusLabel.text = @"提现成功";
+        self.statusLabel.textColor = THEMECOLOR;
+    }
+    else {
+        self.statusLabel.text = @"提现失败";
+        self.statusLabel.textColor = HexRGB(0xff5c5f);
+    }
+}
+
 - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
     [super setSelected:selected animated:animated];
 

+ 84 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/CashRecordListCell.xib

@@ -1,21 +1,99 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="KGk-i7-Jjw" customClass="CashRecordListCell">
-            <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
+        <tableViewCell autoresizesSubviews="NO" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="114" id="KGk-i7-Jjw" customClass="CashRecordListCell">
+            <rect key="frame" x="0.0" y="0.0" width="383" height="94"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
             <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
-                <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
+                <rect key="frame" x="0.0" y="0.0" width="383" height="94"/>
                 <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NMW-eb-opf">
+                        <rect key="frame" x="14" y="0.0" width="355" height="82"/>
+                        <subviews>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="6222** ****9877" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yuy-4u-txv">
+                                <rect key="frame" x="13" y="16" width="125.5" height="28"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="28" id="gVs-te-4OD"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                                <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2021/09/17 14:00~14:25" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="26y-JJ-GEt">
+                                <rect key="frame" x="13" y="48" width="147" height="18"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="18" id="2yi-ca-oRc"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥20" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZVi-Iq-qvh">
+                                <rect key="frame" x="303" y="17.5" width="41" height="25"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="25" id="oDC-ww-XzF"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
+                                <color key="textColor" red="1" green="0.30588235294117649" blue="0.098039215686274508" 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="xWM-rr-5WK">
+                                <rect key="frame" x="301" y="46.5" width="43" height="17"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="ZVi-Iq-qvh" firstAttribute="centerY" secondItem="yuy-4u-txv" secondAttribute="centerY" id="53b-ZQ-Yl8"/>
+                            <constraint firstItem="yuy-4u-txv" firstAttribute="top" secondItem="NMW-eb-opf" secondAttribute="top" constant="16" id="HXM-LG-cb5"/>
+                            <constraint firstItem="xWM-rr-5WK" firstAttribute="top" secondItem="ZVi-Iq-qvh" secondAttribute="bottom" constant="4" id="WrA-zE-ae7"/>
+                            <constraint firstItem="26y-JJ-GEt" firstAttribute="top" secondItem="yuy-4u-txv" secondAttribute="bottom" constant="4" id="Zcz-8F-dii"/>
+                            <constraint firstAttribute="trailing" secondItem="xWM-rr-5WK" secondAttribute="trailing" constant="11" id="d22-5Y-HyW"/>
+                            <constraint firstItem="yuy-4u-txv" firstAttribute="leading" secondItem="NMW-eb-opf" secondAttribute="leading" constant="13" id="qlU-wL-h1s"/>
+                            <constraint firstAttribute="trailing" secondItem="ZVi-Iq-qvh" secondAttribute="trailing" constant="11" id="v6y-TN-NFw"/>
+                            <constraint firstItem="26y-JJ-GEt" firstAttribute="leading" secondItem="yuy-4u-txv" secondAttribute="leading" id="xwJ-fm-sCD"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="NMW-eb-opf" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="3AK-xt-RXs"/>
+                    <constraint firstAttribute="trailing" secondItem="NMW-eb-opf" secondAttribute="trailing" constant="14" id="UOH-qL-OGu"/>
+                    <constraint firstItem="NMW-eb-opf" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="kja-Sv-MVe"/>
+                    <constraint firstAttribute="bottom" secondItem="NMW-eb-opf" secondAttribute="bottom" constant="12" id="o6d-SN-ACq"/>
+                </constraints>
             </tableViewCellContentView>
             <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <connections>
+                <outlet property="amountLabel" destination="ZVi-Iq-qvh" id="x9S-Ph-6Y4"/>
+                <outlet property="cardNumberLabel" destination="yuy-4u-txv" id="k09-f0-rxE"/>
+                <outlet property="statusLabel" destination="xWM-rr-5WK" id="1Ex-Qd-6kL"/>
+                <outlet property="timeLabel" destination="26y-JJ-GEt" id="Lvf-eS-lxR"/>
+            </connections>
+            <point key="canvasLocation" x="177.536231884058" y="101.11607142857143"/>
         </tableViewCell>
     </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
 </document>

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawApplyBodyView.h

@@ -0,0 +1,22 @@
+//
+//  WithdrawApplyBodyView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/27.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^ApplyCallback)(void);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface WithdrawApplyBodyView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)sureCallback:(ApplyCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 44 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawApplyBodyView.m

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

+ 99 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawApplyBodyView.xib

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="WithdrawApplyBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="722"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="apply_success" translatesAutoresizingMaskIntoConstraints="NO" id="gE5-bz-cOR">
+                    <rect key="frame" x="77" y="20" width="260" height="230"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="230" id="Do7-xN-T1J"/>
+                        <constraint firstAttribute="width" constant="260" id="jVf-K3-gOU"/>
+                    </constraints>
+                </imageView>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="您已成功提交提现申请" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zNT-zc-fnl">
+                    <rect key="frame" x="130.5" y="262" width="153" height="27"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="27" id="E6B-bT-PHc"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8ob-Ni-H4W">
+                    <rect key="frame" x="109" y="365" width="196" height="44"/>
+                    <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="196" id="HFu-y6-qnF"/>
+                        <constraint firstAttribute="height" constant="44" id="Onf-6H-iRe"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" title="我知道了"/>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="22"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <action selector="sureAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="wNQ-pc-Rxz"/>
+                    </connections>
+                </button>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vhp-hV-vrO">
+                    <rect key="frame" x="46" y="300" width="322" height="43"/>
+                    <attributedString key="attributedText">
+                        <fragment content="平台将在">
+                            <attributes>
+                                <color key="NSColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <font key="NSFont" size="15" name=".PingFangSC-Regular"/>
+                                <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                            </attributes>
+                        </fragment>
+                        <fragment content="2">
+                            <attributes>
+                                <color key="NSColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <font key="NSFont" metaFont="system" size="15"/>
+                                <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                            </attributes>
+                        </fragment>
+                        <fragment content="个工作日内将提现金额转账至你所绑定的银行卡,请留意银行卡收入信息">
+                            <attributes>
+                                <color key="NSColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <font key="NSFont" size="15" name=".PingFangSC-Regular"/>
+                                <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                            </attributes>
+                        </fragment>
+                    </attributedString>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="zNT-zc-fnl" firstAttribute="top" secondItem="gE5-bz-cOR" secondAttribute="bottom" constant="12" id="Lh0-In-9PR"/>
+                <constraint firstAttribute="trailing" secondItem="vhp-hV-vrO" secondAttribute="trailing" constant="46" id="Mdg-M3-6s9"/>
+                <constraint firstItem="vhp-hV-vrO" firstAttribute="top" secondItem="zNT-zc-fnl" secondAttribute="bottom" constant="11" id="ayP-Vu-2RL"/>
+                <constraint firstItem="zNT-zc-fnl" firstAttribute="centerX" secondItem="gE5-bz-cOR" secondAttribute="centerX" id="c3b-TY-RgV"/>
+                <constraint firstItem="gE5-bz-cOR" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="20" id="dDf-Le-izq"/>
+                <constraint firstItem="gE5-bz-cOR" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="iQd-po-M11"/>
+                <constraint firstItem="8ob-Ni-H4W" firstAttribute="top" secondItem="vhp-hV-vrO" secondAttribute="bottom" constant="22" id="trt-6T-esI"/>
+                <constraint firstItem="vhp-hV-vrO" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="46" id="xA5-Lj-Q6k"/>
+                <constraint firstItem="8ob-Ni-H4W" firstAttribute="centerX" secondItem="gE5-bz-cOR" secondAttribute="centerX" id="z28-ay-KMj"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="131.8840579710145" y="19.419642857142858"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="apply_success" width="260" height="230"/>
+    </resources>
+</document>

+ 32 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawBodyView.h

@@ -0,0 +1,32 @@
+//
+//  WithdrawBodyView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/27.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^WithdrawCallback)(NSString * _Nullable amountString);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface WithdrawBodyView : UIView
+
+@property (weak, nonatomic) IBOutlet UILabel *descLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *cardDesc;
+
+@property (weak, nonatomic) IBOutlet UILabel *availableAmoutLabel;
+
+@property (weak, nonatomic) IBOutlet UITextField *amountField;
+
+@property (nonatomic, assign) double amount;
+
++ (instancetype)shareInstance;
+
+- (void)withdrawSureCallback:(WithdrawCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 139 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawBodyView.m

@@ -0,0 +1,139 @@
+//
+//  WithdrawBodyView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/27.
+//
+
+#import "WithdrawBodyView.h"
+
+@interface WithdrawBodyView ()<UITextFieldDelegate>
+
+@property(nonatomic,assign) BOOL hasDot;
+
+@property (nonatomic, copy) WithdrawCallback callback;
+
+@property (weak, nonatomic) IBOutlet UIView *backView;
+
+@end
+
+@implementation WithdrawBodyView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    CAGradientLayer * gradientLayer = [CAGradientLayer layer];
+    gradientLayer.colors = @[(__bridge id)HexRGB(0xfff6ee).CGColor,(__bridge id)HexRGB(0xffecdd).CGColor];
+    gradientLayer.startPoint = CGPointMake(0, 0);
+    gradientLayer.endPoint = CGPointMake(0, 1);
+    gradientLayer.frame = CGRectMake(0, 0, (KPortraitWidth - 28), 37);
+    [self.backView.layer addSublayer:gradientLayer];
+    self.amountField.delegate = self;
+}
+
++ (instancetype)shareInstance {
+    WithdrawBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"WithdrawBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)withdrawSureCallback:(WithdrawCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)allWithdrawAction:(id)sender {
+    [self endEditing:YES];
+    self.amountField.text = [NSString stringWithFormat:@"%.2f",self.amount];
+}
+
+- (IBAction)submitAction:(id)sender {
+    [self endEditing:YES];
+    if (self.callback) {
+        self.callback(self.amountField.text);
+    }
+}
+
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+    /*
+     * 不能输入.0-9以外的字符。
+     * 设置输入框输入的内容格式
+     * 只能有一个小数点
+     * 小数点后最多能输入两位
+     * 如果第一位是.则前面加上0.
+     * 如果第一位是0则后面必须输入点,否则不能输入。
+     */
+    
+    // 判断是否有小数点
+    if ([textField.text containsString:@"."]) {
+        self.hasDot = YES;
+    }else{
+        self.hasDot = NO;
+    }
+    
+    if (string.length > 0) {
+        
+        //当前输入的字符
+        unichar single = [string characterAtIndex:0];
+        
+        
+        // 不能输入.0-9以外的字符
+        if (!((single >= '0' && single <= '9') || single == '.'))
+        {
+            
+            return NO;
+        }
+        
+        // 只能有一个小数点
+        if (self.hasDot && single == '.') {
+            
+            return NO;
+        }
+        
+        // 如果第一位是.则前面加上0.
+        if ((textField.text.length == 0) && (single == '.')) {
+            textField.text = @"0";
+        }
+        
+        // 如果第一位是0则后面必须输入点,否则不能输入。
+        if ([textField.text hasPrefix:@"0"]) {
+            if (textField.text.length > 1) {
+                NSString *secondStr = [textField.text substringWithRange:NSMakeRange(1, 1)];
+                if (![secondStr isEqualToString:@"."]) {
+                    
+                    return NO;
+                }
+            }else{
+                if (![string isEqualToString:@"."]) {
+                    
+                    return NO;
+                }
+            }
+        }
+        // 小数点后最多能输入两位
+        if (self.hasDot) {
+            NSRange ran = [textField.text rangeOfString:@"."];
+            // 由于range.location是NSUInteger类型的,所以这里不能通过(range.location - ran.location)>2来判断
+            if (range.location > ran.location) {
+                if ([textField.text pathExtension].length > 1) {
+                    
+                    return NO;
+                }
+            }
+        }
+        
+    }
+    NSString *str = [textField.text stringByReplacingCharactersInRange:range withString:string];
+    if (str.doubleValue > self.amount) {
+        return NO;
+    }
+    return YES;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 229 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/WithDraw/View/WithdrawBodyView.xib

@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="WithdrawBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="394" height="440"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YF6-BH-p4o">
+                    <rect key="frame" x="14" y="10" width="366" height="117"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="到账银行卡" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ftz-jG-0oB">
+                            <rect key="frame" x="12" y="12" width="82" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="YHY-1t-4VD"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.89803921568627454" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="card_icon" translatesAutoresizingMaskIntoConstraints="NO" id="FoF-7R-YW8">
+                            <rect key="frame" x="10" y="49" width="30" height="30"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="30" id="FoS-8I-RvD"/>
+                                <constraint firstAttribute="width" constant="30" id="VKe-Zw-weN"/>
+                            </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="p4E-43-dK7">
+                            <rect key="frame" x="47" y="53" width="309" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="r8J-vA-TTv"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.89803921568627454" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="p4E-43-dK7" firstAttribute="leading" secondItem="FoF-7R-YW8" secondAttribute="trailing" constant="7" id="1kb-nw-JeJ"/>
+                        <constraint firstItem="p4E-43-dK7" firstAttribute="centerY" secondItem="FoF-7R-YW8" secondAttribute="centerY" id="1wj-je-viU"/>
+                        <constraint firstAttribute="height" constant="117" id="7Ez-gj-2My"/>
+                        <constraint firstItem="ftz-jG-0oB" firstAttribute="top" secondItem="YF6-BH-p4o" secondAttribute="top" constant="12" id="GMj-YB-Y3t"/>
+                        <constraint firstItem="FoF-7R-YW8" firstAttribute="top" secondItem="ftz-jG-0oB" secondAttribute="bottom" constant="15" id="HBE-Dh-XiM"/>
+                        <constraint firstAttribute="trailing" secondItem="p4E-43-dK7" secondAttribute="trailing" constant="10" id="g1Q-M2-h23"/>
+                        <constraint firstItem="FoF-7R-YW8" firstAttribute="leading" secondItem="YF6-BH-p4o" secondAttribute="leading" constant="10" id="qWQ-ii-S20"/>
+                        <constraint firstItem="ftz-jG-0oB" firstAttribute="leading" secondItem="YF6-BH-p4o" secondAttribute="leading" constant="12" id="v7q-PF-0fl"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mtd-rZ-pVF">
+                    <rect key="frame" x="14" y="141" width="366" height="156"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="提现金额" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cnO-cN-4BH">
+                            <rect key="frame" x="11" y="10" width="65.5" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="38c-lq-W6r"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.8980392157" 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="3Yt-yf-Y5I">
+                            <rect key="frame" x="12" y="68" width="16" height="37"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="37" id="Wzt-cb-mmd"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="26"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入金额" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Dcf-8y-D2f">
+                            <rect key="frame" x="42" y="64" width="310" height="45"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="45" id="bUe-xu-35a"/>
+                            </constraints>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="32"/>
+                            <textInputTraits key="textInputTraits" keyboardType="decimalPad"/>
+                        </textField>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="en8-sD-dA6">
+                            <rect key="frame" x="10" y="114" width="346" height="1"/>
+                            <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="1" id="Sd6-jr-7g7"/>
+                            </constraints>
+                        </view>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YIe-sz-mf0">
+                            <rect key="frame" x="291" y="115" width="65" height="41"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="65" id="TUi-6F-q4H"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="全部提现">
+                                <color key="titleColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                            </state>
+                            <connections>
+                                <action selector="allWithdrawAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="5Nq-kt-ffa"/>
+                            </connections>
+                        </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="可提现余额 " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yfw-hh-XkE">
+                            <rect key="frame" x="14" y="115" width="75.5" height="41"/>
+                            <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"/>
+                    <constraints>
+                        <constraint firstItem="Yfw-hh-XkE" firstAttribute="top" secondItem="en8-sD-dA6" secondAttribute="bottom" id="0rO-gd-lG8"/>
+                        <constraint firstItem="en8-sD-dA6" firstAttribute="top" secondItem="Dcf-8y-D2f" secondAttribute="bottom" constant="5" id="80m-0L-AZL"/>
+                        <constraint firstItem="Dcf-8y-D2f" firstAttribute="leading" secondItem="3Yt-yf-Y5I" secondAttribute="trailing" constant="14" id="C4H-vh-W4u"/>
+                        <constraint firstAttribute="trailing" secondItem="Dcf-8y-D2f" secondAttribute="trailing" constant="14" id="IPL-DV-OZE"/>
+                        <constraint firstAttribute="bottom" secondItem="YIe-sz-mf0" secondAttribute="bottom" id="JIe-PV-bAS"/>
+                        <constraint firstItem="en8-sD-dA6" firstAttribute="leading" secondItem="mtd-rZ-pVF" secondAttribute="leading" constant="10" id="Qlx-Q9-LA3"/>
+                        <constraint firstItem="3Yt-yf-Y5I" firstAttribute="top" secondItem="cnO-cN-4BH" secondAttribute="bottom" constant="36" id="QnW-VS-prX"/>
+                        <constraint firstItem="Yfw-hh-XkE" firstAttribute="leading" secondItem="mtd-rZ-pVF" secondAttribute="leading" constant="14" id="UV1-ei-Iee"/>
+                        <constraint firstItem="cnO-cN-4BH" firstAttribute="top" secondItem="mtd-rZ-pVF" secondAttribute="top" constant="10" id="XFD-Pg-Sxm"/>
+                        <constraint firstItem="cnO-cN-4BH" firstAttribute="leading" secondItem="mtd-rZ-pVF" secondAttribute="leading" constant="11" id="eB3-VM-xsM"/>
+                        <constraint firstItem="3Yt-yf-Y5I" firstAttribute="leading" secondItem="mtd-rZ-pVF" secondAttribute="leading" constant="12" id="epS-CG-IE4"/>
+                        <constraint firstAttribute="bottom" secondItem="Yfw-hh-XkE" secondAttribute="bottom" id="gFy-KN-BKA"/>
+                        <constraint firstAttribute="height" constant="156" id="kqX-bf-WZN"/>
+                        <constraint firstAttribute="trailing" secondItem="en8-sD-dA6" secondAttribute="trailing" constant="10" id="kuc-n1-gZh"/>
+                        <constraint firstItem="Dcf-8y-D2f" firstAttribute="centerY" secondItem="3Yt-yf-Y5I" secondAttribute="centerY" id="l5v-2x-fI3"/>
+                        <constraint firstItem="YIe-sz-mf0" firstAttribute="top" secondItem="en8-sD-dA6" secondAttribute="bottom" id="rR3-n6-A8k"/>
+                        <constraint firstAttribute="trailing" secondItem="YIe-sz-mf0" secondAttribute="trailing" constant="10" id="zlP-0v-mEL"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7V5-UT-Z1J">
+                    <rect key="frame" x="14" y="309" width="366" height="37"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="47x-GX-Jrs">
+                            <rect key="frame" x="0.0" y="0.0" width="366" height="37"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        </view>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="单次收入提现时,平台将收取2元手续费" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="us0-rn-BWY">
+                            <rect key="frame" x="11" y="10" width="252" height="17"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.8784313725490196" green="0.58039215686274503" blue="0.3529411764705882" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="47x-GX-Jrs" firstAttribute="leading" secondItem="7V5-UT-Z1J" secondAttribute="leading" id="8V2-Xd-Sxk"/>
+                        <constraint firstAttribute="bottom" secondItem="47x-GX-Jrs" secondAttribute="bottom" id="Lmd-s8-USY"/>
+                        <constraint firstAttribute="trailing" secondItem="47x-GX-Jrs" secondAttribute="trailing" id="bQ5-vC-R7g"/>
+                        <constraint firstItem="us0-rn-BWY" firstAttribute="leading" secondItem="7V5-UT-Z1J" secondAttribute="leading" constant="11" id="hyF-KO-NZH"/>
+                        <constraint firstAttribute="height" constant="37" id="lPy-sg-9wZ"/>
+                        <constraint firstItem="47x-GX-Jrs" firstAttribute="top" secondItem="7V5-UT-Z1J" secondAttribute="top" id="uVZ-iY-bFt"/>
+                        <constraint firstItem="us0-rn-BWY" firstAttribute="centerY" secondItem="7V5-UT-Z1J" secondAttribute="centerY" id="yaU-A1-obg"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nVS-6g-C1a">
+                    <rect key="frame" x="28" y="375" width="338" height="44"/>
+                    <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="2tv-U1-iXk"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" title="确认提现"/>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="22"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <action selector="submitAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="TMU-tn-YE5"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="nVS-6g-C1a" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="28" id="3QC-Vn-mkc"/>
+                <constraint firstItem="YF6-BH-p4o" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="4Pw-rB-Wjh"/>
+                <constraint firstItem="mtd-rZ-pVF" firstAttribute="top" secondItem="YF6-BH-p4o" secondAttribute="bottom" constant="14" id="51O-kB-C6x"/>
+                <constraint firstItem="mtd-rZ-pVF" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="7li-Xi-bbt"/>
+                <constraint firstAttribute="trailing" secondItem="mtd-rZ-pVF" secondAttribute="trailing" constant="14" id="IAO-Ee-VtS"/>
+                <constraint firstItem="7V5-UT-Z1J" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="Loz-kt-tyc"/>
+                <constraint firstItem="7V5-UT-Z1J" firstAttribute="top" secondItem="mtd-rZ-pVF" secondAttribute="bottom" constant="12" id="N0v-5u-3Kf"/>
+                <constraint firstAttribute="trailing" secondItem="YF6-BH-p4o" secondAttribute="trailing" constant="14" id="dZf-jO-Fk9"/>
+                <constraint firstAttribute="trailing" secondItem="7V5-UT-Z1J" secondAttribute="trailing" constant="14" id="o8x-WO-21A"/>
+                <constraint firstItem="nVS-6g-C1a" firstAttribute="top" secondItem="7V5-UT-Z1J" secondAttribute="bottom" constant="29" id="wic-fG-9l1"/>
+                <constraint firstAttribute="trailing" secondItem="nVS-6g-C1a" secondAttribute="trailing" constant="28" id="zG6-7m-NXj"/>
+                <constraint firstItem="YF6-BH-p4o" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="zUZ-th-ghV"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="amountField" destination="Dcf-8y-D2f" id="ODz-uA-tcR"/>
+                <outlet property="availableAmoutLabel" destination="Yfw-hh-XkE" id="LZh-hE-HLY"/>
+                <outlet property="backView" destination="47x-GX-Jrs" id="07x-ZQ-DAl"/>
+                <outlet property="cardDesc" destination="p4E-43-dK7" id="ebb-9J-F4a"/>
+                <outlet property="descLabel" destination="us0-rn-BWY" id="gu7-Iv-hp3"/>
+            </connections>
+            <point key="canvasLocation" x="146.37681159420291" y="-2.0089285714285712"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="card_icon" width="44" height="44"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonBodyView.m

@@ -281,7 +281,7 @@
 - (NewClassPopView *)popView {
     if (!_popView) {
         MJWeakSelf;
-        _popView = [[NewClassPopView alloc] initWithFrame:CGRectMake(0, 55, kScreenWidth, kScreenHeight - 55 - kNaviBarHeight - iPhoneXSafeBottomMargin) chooseCallback:^(NSString * _Nonnull sortStr, NSInteger chooseIndex, NSInteger item) {
+        _popView = [[NewClassPopView alloc] initWithFrame:CGRectMake(0, 55, kScreenWidth, kScreenHeight - 55 - kNaviBarHeight - iPhoneXSafeBottomMargin) tableColor:HexRGB(0xf6f8f9) chooseCallback:^(NSString * _Nonnull sortStr, NSInteger chooseIndex, NSInteger item) {
             if (chooseIndex != 0) {
                 // 回调
                 [weakSelf sortWithChooseIndex:chooseIndex item:item title:sortStr];

+ 0 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyLessonSearchView.m

@@ -77,8 +77,6 @@
     _secondArrowUp = secondArrowUp;
     NSString *imageName = secondArrowUp ? @"sort_up" : @"sort_down";
     [_secondArrow setImage:[UIImage imageNamed:imageName]];
-
-
 }
 
 - (void)setThirdArrowUp:(BOOL)thirdArrowUp {

+ 1 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/PopView/NewClassPopView.h

@@ -13,14 +13,13 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface NewClassPopView : UIView
 
-- (instancetype)initWithFrame:(CGRect)frame chooseCallback:(ChooseReturnBlock)callback;
+- (instancetype)initWithFrame:(CGRect)frame tableColor:(UIColor *)tableColor chooseCallback:(ChooseReturnBlock)callback;
 
 - (void)refreshWithSourceArray:(NSArray *)sourceArray preChooseIndex:(NSInteger)preIndex inView:(UIView *)view actionItem:(NSInteger)item;
 
 - (void)showInView:(UIView *)view;
 
 - (void)hiddenView;
-
 @end
 
 NS_ASSUME_NONNULL_END

+ 5 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/PopView/NewClassPopView.m

@@ -24,13 +24,16 @@
 
 @property (nonatomic, assign) NSInteger actionItem;
 
+@property (nonatomic, strong) UIColor *tableColor;
+
 @end
 
 @implementation NewClassPopView
 
-- (instancetype)initWithFrame:(CGRect)frame chooseCallback:(ChooseReturnBlock)callback {
+- (instancetype)initWithFrame:(CGRect)frame tableColor:(UIColor *)tableColor chooseCallback:(ChooseReturnBlock)callback {
     if (self = [super initWithFrame:frame]) {
         self.backgroundColor = HexRGBAlpha(0x000000, 0.5f);
+        self.tableColor = tableColor;
         if (callback) {
             self.callback = callback;
             [self configUI];
@@ -41,6 +44,7 @@
 
 - (void)configUI {
     [self addSubview:self.tableView];
+    self.tableView.backgroundColor = self.tableColor;
     [self addSubview:self.tapView];
     UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHiddenView)];
     [self.tapView addGestureRecognizer:gesture];