Commit 87526029 by ludi

完成召回一级页面

parent 33c40c18
Showing with 769 additions and 100 deletions
...@@ -57,6 +57,8 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -57,6 +57,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, assign) BOOL pushFlowSizeSwitch; @property (nonatomic, assign) BOOL pushFlowSizeSwitch;
/// 引导开启通知分钟数(7410起加) /// 引导开启通知分钟数(7410起加)
@property (nonatomic, assign) NSInteger guideTime; @property (nonatomic, assign) NSInteger guideTime;
/// 使者邀请占位:老用戶具體天數
@property (nonatomic, assign) NSInteger inviteDataRecallShowDay;
@end @end
......
...@@ -126,6 +126,21 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -126,6 +126,21 @@ NS_ASSUME_NONNULL_BEGIN
/// 直播奖励網頁地址 /// 直播奖励網頁地址
@property (nonatomic, copy) NSString *liveRewardTaskUrl; @property (nonatomic, copy) NSString *liveRewardTaskUrl;
/// 邀请注册控制开关(0:关、1:开)
@property (nonatomic, assign) NSInteger inviteRegisterSwitch;
/// 使者邀请榜单地址
@property (nonatomic, copy) NSString *agentInviteRankAddress;
/// 主頁是否展示掃碼入口(1:展示)
@property (nonatomic, assign) NSInteger showQrCodeEntrance;
/// 红包宝箱记录H5配置 height:高 width:宽 url:访问地址
@property (nonatomic, copy) NSDictionary *redPacketRecordConfig;
/// 回归大礼包H5配置 height:高 width:宽 url:访问地址
@property (nonatomic, copy) NSDictionary *recallPacketConfig;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
...@@ -7,12 +7,12 @@ ...@@ -7,12 +7,12 @@
<key>FUSChatCenterBundle.xcscheme_^#shared#^_</key> <key>FUSChatCenterBundle.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>83</integer> <integer>79</integer>
</dict> </dict>
<key>FUSChatCenterModule.xcscheme_^#shared#^_</key> <key>FUSChatCenterModule.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>81</integer> <integer>80</integer>
</dict> </dict>
</dict> </dict>
</dict> </dict>
......
...@@ -7,12 +7,12 @@ ...@@ -7,12 +7,12 @@
<key>FUSShowRoomBundle.xcscheme_^#shared#^_</key> <key>FUSShowRoomBundle.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>80</integer> <integer>84</integer>
</dict> </dict>
<key>FUSShowRoomModule.xcscheme_^#shared#^_</key> <key>FUSShowRoomModule.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>82</integer> <integer>83</integer>
</dict> </dict>
</dict> </dict>
</dict> </dict>
......
...@@ -106,6 +106,11 @@ ...@@ -106,6 +106,11 @@
00B778672D12DC21003D7F56 /* FUSBackpackMotorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B778662D12DC21003D7F56 /* FUSBackpackMotorCell.swift */; }; 00B778672D12DC21003D7F56 /* FUSBackpackMotorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B778662D12DC21003D7F56 /* FUSBackpackMotorCell.swift */; };
00BD441C2D1E98650099A96F /* FUSVerifyVersionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BD441B2D1E98650099A96F /* FUSVerifyVersionController.swift */; }; 00BD441C2D1E98650099A96F /* FUSVerifyVersionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BD441B2D1E98650099A96F /* FUSVerifyVersionController.swift */; };
00E501EE2E050FEF00579DB0 /* FUSRegisteredBindAgentInfoAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E501ED2E050FEF00579DB0 /* FUSRegisteredBindAgentInfoAlertView.swift */; }; 00E501EE2E050FEF00579DB0 /* FUSRegisteredBindAgentInfoAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E501ED2E050FEF00579DB0 /* FUSRegisteredBindAgentInfoAlertView.swift */; };
00E502102E0940E100579DB0 /* FUSInviteRewardWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E5020F2E0940E100579DB0 /* FUSInviteRewardWebView.swift */; };
00E502132E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E502122E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.m */; };
00E502142E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 00E502112E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.h */; };
00E502162E095C3B00579DB0 /* FUSInviteRewardInviteRecallClansmanHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E502152E095C3B00579DB0 /* FUSInviteRewardInviteRecallClansmanHeader.swift */; };
00E502182E0960A700579DB0 /* FUSInviteRewardInviteRecallClansmanCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E502172E0960A700579DB0 /* FUSInviteRewardInviteRecallClansmanCell.swift */; };
9E8D0BED6061C8C88FBF8686 /* Pods_FUSUserCenterModule.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BED3EAC4EA2F921CB5B2FEE8 /* Pods_FUSUserCenterModule.framework */; }; 9E8D0BED6061C8C88FBF8686 /* Pods_FUSUserCenterModule.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BED3EAC4EA2F921CB5B2FEE8 /* Pods_FUSUserCenterModule.framework */; };
BE189A2D2C7323FE0008418B /* FSRDynamicImModel.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1899A72C7323FE0008418B /* FSRDynamicImModel.h */; }; BE189A2D2C7323FE0008418B /* FSRDynamicImModel.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1899A72C7323FE0008418B /* FSRDynamicImModel.h */; };
BE189A2E2C7323FE0008418B /* FSRDynamicImModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1899A82C7323FE0008418B /* FSRDynamicImModel.m */; }; BE189A2E2C7323FE0008418B /* FSRDynamicImModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1899A82C7323FE0008418B /* FSRDynamicImModel.m */; };
...@@ -1045,6 +1050,11 @@ ...@@ -1045,6 +1050,11 @@
00B778662D12DC21003D7F56 /* FUSBackpackMotorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSBackpackMotorCell.swift; sourceTree = "<group>"; }; 00B778662D12DC21003D7F56 /* FUSBackpackMotorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSBackpackMotorCell.swift; sourceTree = "<group>"; };
00BD441B2D1E98650099A96F /* FUSVerifyVersionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSVerifyVersionController.swift; sourceTree = "<group>"; }; 00BD441B2D1E98650099A96F /* FUSVerifyVersionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSVerifyVersionController.swift; sourceTree = "<group>"; };
00E501ED2E050FEF00579DB0 /* FUSRegisteredBindAgentInfoAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSRegisteredBindAgentInfoAlertView.swift; sourceTree = "<group>"; }; 00E501ED2E050FEF00579DB0 /* FUSRegisteredBindAgentInfoAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSRegisteredBindAgentInfoAlertView.swift; sourceTree = "<group>"; };
00E5020F2E0940E100579DB0 /* FUSInviteRewardWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSInviteRewardWebView.swift; sourceTree = "<group>"; };
00E502112E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSInviteDataRecallGetInfoModel.h; sourceTree = "<group>"; };
00E502122E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSInviteDataRecallGetInfoModel.m; sourceTree = "<group>"; };
00E502152E095C3B00579DB0 /* FUSInviteRewardInviteRecallClansmanHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSInviteRewardInviteRecallClansmanHeader.swift; sourceTree = "<group>"; };
00E502172E0960A700579DB0 /* FUSInviteRewardInviteRecallClansmanCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSInviteRewardInviteRecallClansmanCell.swift; sourceTree = "<group>"; };
29DC17A1A1D4B29CA3BB6003 /* Pods-FUSUserCenterModule.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FUSUserCenterModule.debug.xcconfig"; path = "Target Support Files/Pods-FUSUserCenterModule/Pods-FUSUserCenterModule.debug.xcconfig"; sourceTree = "<group>"; }; 29DC17A1A1D4B29CA3BB6003 /* Pods-FUSUserCenterModule.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FUSUserCenterModule.debug.xcconfig"; path = "Target Support Files/Pods-FUSUserCenterModule/Pods-FUSUserCenterModule.debug.xcconfig"; sourceTree = "<group>"; };
BE1899A72C7323FE0008418B /* FSRDynamicImModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSRDynamicImModel.h; sourceTree = "<group>"; }; BE1899A72C7323FE0008418B /* FSRDynamicImModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSRDynamicImModel.h; sourceTree = "<group>"; };
BE1899A82C7323FE0008418B /* FSRDynamicImModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSRDynamicImModel.m; sourceTree = "<group>"; }; BE1899A82C7323FE0008418B /* FSRDynamicImModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSRDynamicImModel.m; sourceTree = "<group>"; };
...@@ -2076,6 +2086,8 @@ ...@@ -2076,6 +2086,8 @@
00B45E282D9401CE00FF138F /* FUSInviteRewardInviteCodeCell.swift */, 00B45E282D9401CE00FF138F /* FUSInviteRewardInviteCodeCell.swift */,
00B45E292D9401CE00FF138F /* FUSInviteRewardInviteFunctionCell.swift */, 00B45E292D9401CE00FF138F /* FUSInviteRewardInviteFunctionCell.swift */,
00B45E2A2D9401CE00FF138F /* FUSInviteRewardInviteFunctionHeader.swift */, 00B45E2A2D9401CE00FF138F /* FUSInviteRewardInviteFunctionHeader.swift */,
00E502152E095C3B00579DB0 /* FUSInviteRewardInviteRecallClansmanHeader.swift */,
00E502172E0960A700579DB0 /* FUSInviteRewardInviteRecallClansmanCell.swift */,
00B45E2B2D9401CE00FF138F /* FUSInviteRewardInvitePlanCell.swift */, 00B45E2B2D9401CE00FF138F /* FUSInviteRewardInvitePlanCell.swift */,
00B45E2C2D9401CE00FF138F /* FUSInviteRewardMyClansmanCell.swift */, 00B45E2C2D9401CE00FF138F /* FUSInviteRewardMyClansmanCell.swift */,
00B45E2D2D9401CE00FF138F /* FUSInviteRewardMyClansmanEmptyCell.swift */, 00B45E2D2D9401CE00FF138F /* FUSInviteRewardMyClansmanEmptyCell.swift */,
...@@ -2094,6 +2106,8 @@ ...@@ -2094,6 +2106,8 @@
00B45E772D94049100FF138F /* FUSInviteDataAwardGetListDataModel.m */, 00B45E772D94049100FF138F /* FUSInviteDataAwardGetListDataModel.m */,
00B45E7A2D9408C400FF138F /* FUSInviteDataIndexGetInfoModel.h */, 00B45E7A2D9408C400FF138F /* FUSInviteDataIndexGetInfoModel.h */,
00B45E7B2D9408C400FF138F /* FUSInviteDataIndexGetInfoModel.m */, 00B45E7B2D9408C400FF138F /* FUSInviteDataIndexGetInfoModel.m */,
00E502112E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.h */,
00E502122E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.m */,
00966B942D95014300A80F74 /* FUSInviteDataMyselfDauGetListDataModel.h */, 00966B942D95014300A80F74 /* FUSInviteDataMyselfDauGetListDataModel.h */,
00966B952D95014300A80F74 /* FUSInviteDataMyselfDauGetListDataModel.m */, 00966B952D95014300A80F74 /* FUSInviteDataMyselfDauGetListDataModel.m */,
00966B982D95024100A80F74 /* FUSInviteDataMyselfGetInfoModel.h */, 00966B982D95024100A80F74 /* FUSInviteDataMyselfGetInfoModel.h */,
...@@ -2121,6 +2135,7 @@ ...@@ -2121,6 +2135,7 @@
00B45E442D9401CE00FF138F /* FUSInviteRewardMainView.swift */, 00B45E442D9401CE00FF138F /* FUSInviteRewardMainView.swift */,
00B45E452D9401CE00FF138F /* FUSInviteRewardMyView.swift */, 00B45E452D9401CE00FF138F /* FUSInviteRewardMyView.swift */,
00B45E462D9401CE00FF138F /* FUSInviteRewardTaskView.swift */, 00B45E462D9401CE00FF138F /* FUSInviteRewardTaskView.swift */,
00E5020F2E0940E100579DB0 /* FUSInviteRewardWebView.swift */,
00B45E472D9401CE00FF138F /* FUSMyEmissaryQRCodeView.swift */, 00B45E472D9401CE00FF138F /* FUSMyEmissaryQRCodeView.swift */,
); );
path = View; path = View;
...@@ -3902,6 +3917,7 @@ ...@@ -3902,6 +3917,7 @@
BE189A9B2C7323FE0008418B /* FSRMotordictPrivacyVoiceView.h in Headers */, BE189A9B2C7323FE0008418B /* FSRMotordictPrivacyVoiceView.h in Headers */,
BE78CB762C538D7E00F38855 /* FUSVideoRecordPicker.h in Headers */, BE78CB762C538D7E00F38855 /* FUSVideoRecordPicker.h in Headers */,
BE78CC542C538D7F00F38855 /* FUSPublishNewsFeedViewController.h in Headers */, BE78CC542C538D7F00F38855 /* FUSPublishNewsFeedViewController.h in Headers */,
00E502142E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.h in Headers */,
BE78CB512C538D7E00F38855 /* FUSFollowViewController.h in Headers */, BE78CB512C538D7E00F38855 /* FUSFollowViewController.h in Headers */,
BE189A6B2C7323FE0008418B /* FSRLanguageMineTableViewCell.h in Headers */, BE189A6B2C7323FE0008418B /* FSRLanguageMineTableViewCell.h in Headers */,
BE189A912C7323FE0008418B /* FSRLogindictMinePrivacySearchView.h in Headers */, BE189A912C7323FE0008418B /* FSRLogindictMinePrivacySearchView.h in Headers */,
...@@ -4662,6 +4678,7 @@ ...@@ -4662,6 +4678,7 @@
BED3D0052C57B19E0028E28F /* FUSCustomCollectionViewLayout.m in Sources */, BED3D0052C57B19E0028E28F /* FUSCustomCollectionViewLayout.m in Sources */,
BE189A5E2C7323FE0008418B /* FSRPrivacyViewController.m in Sources */, BE189A5E2C7323FE0008418B /* FSRPrivacyViewController.m in Sources */,
BE189A6E2C7323FE0008418B /* FSRLoginTableViewCell.m in Sources */, BE189A6E2C7323FE0008418B /* FSRLoginTableViewCell.m in Sources */,
00E502162E095C3B00579DB0 /* FUSInviteRewardInviteRecallClansmanHeader.swift in Sources */,
BE189A8C2C7323FE0008418B /* FSRLanguagedictLoginView.m in Sources */, BE189A8C2C7323FE0008418B /* FSRLanguagedictLoginView.m in Sources */,
BE189A322C7323FE0008418B /* FSRImModel.m in Sources */, BE189A322C7323FE0008418B /* FSRImModel.m in Sources */,
BE78CB442C538D7E00F38855 /* FUSFireCountViewController.m in Sources */, BE78CB442C538D7E00F38855 /* FUSFireCountViewController.m in Sources */,
...@@ -4749,6 +4766,7 @@ ...@@ -4749,6 +4766,7 @@
BE189AAC2C7323FF0008418B /* FSRZonedictPrivacyMineView.m in Sources */, BE189AAC2C7323FF0008418B /* FSRZonedictPrivacyMineView.m in Sources */,
BE78CBF42C538D7F00F38855 /* FUSAuthFacePageTwoViewController.m in Sources */, BE78CBF42C538D7F00F38855 /* FUSAuthFacePageTwoViewController.m in Sources */,
BE78CCFB2C538D8000F38855 /* FUSAlbumTableViewCell.m in Sources */, BE78CCFB2C538D8000F38855 /* FUSAlbumTableViewCell.m in Sources */,
00E502182E0960A700579DB0 /* FUSInviteRewardInviteRecallClansmanCell.swift in Sources */,
BE78CBFE2C538D7F00F38855 /* FUSCheckNetworkWebController.m in Sources */, BE78CBFE2C538D7F00F38855 /* FUSCheckNetworkWebController.m in Sources */,
BE189A5A2C7323FE0008418B /* FSRMotorViewController.m in Sources */, BE189A5A2C7323FE0008418B /* FSRMotorViewController.m in Sources */,
BE78CC432C538D7F00F38855 /* FUSNewsFeedLikeModel.m in Sources */, BE78CC432C538D7F00F38855 /* FUSNewsFeedLikeModel.m in Sources */,
...@@ -4768,6 +4786,7 @@ ...@@ -4768,6 +4786,7 @@
BE78CC222C538D7F00F38855 /* FUSBlackListTableViewCell.m in Sources */, BE78CC222C538D7F00F38855 /* FUSBlackListTableViewCell.m in Sources */,
BE78CCD52C538D8000F38855 /* TZPhotoPickerController.m in Sources */, BE78CCD52C538D8000F38855 /* TZPhotoPickerController.m in Sources */,
BE78CC0D2C538D7F00F38855 /* FUSVerifyResultViewController.m in Sources */, BE78CC0D2C538D7F00F38855 /* FUSVerifyResultViewController.m in Sources */,
00E502132E0956FC00579DB0 /* FUSInviteDataRecallGetInfoModel.m in Sources */,
BE78CB332C538D7E00F38855 /* FUSRecieveNotificationHelper.m in Sources */, BE78CB332C538D7E00F38855 /* FUSRecieveNotificationHelper.m in Sources */,
BE78CB352C538D7E00F38855 /* FUSThirdPartyLoginHelper.m in Sources */, BE78CB352C538D7E00F38855 /* FUSThirdPartyLoginHelper.m in Sources */,
BE189A3A2C7323FE0008418B /* FSRMotorMissionModel.m in Sources */, BE189A3A2C7323FE0008418B /* FSRMotorMissionModel.m in Sources */,
...@@ -4846,6 +4865,7 @@ ...@@ -4846,6 +4865,7 @@
BE78CCE12C538D8000F38855 /* FUSPhoneAuthViewController.m in Sources */, BE78CCE12C538D8000F38855 /* FUSPhoneAuthViewController.m in Sources */,
BE189A7C2C7323FE0008418B /* FSRStartTableViewCell.m in Sources */, BE189A7C2C7323FE0008418B /* FSRStartTableViewCell.m in Sources */,
BE78CC5B2C538D7F00F38855 /* WGUploadFileModel.m in Sources */, BE78CC5B2C538D7F00F38855 /* WGUploadFileModel.m in Sources */,
00E502102E0940E100579DB0 /* FUSInviteRewardWebView.swift in Sources */,
0071499F2D92AE6400B3211D /* FUSLoginInviteCodeViewController.m in Sources */, 0071499F2D92AE6400B3211D /* FUSLoginInviteCodeViewController.m in Sources */,
BE78CC322C538D7F00F38855 /* FUSSettingMicTakeDivideView.swift in Sources */, BE78CC322C538D7F00F38855 /* FUSSettingMicTakeDivideView.swift in Sources */,
BE78CC552C538D7F00F38855 /* FUSPublishNewsFeedViewController.m in Sources */, BE78CC552C538D7F00F38855 /* FUSPublishNewsFeedViewController.m in Sources */,
......
...@@ -7,12 +7,12 @@ ...@@ -7,12 +7,12 @@
<key>FUSUserCenterModule.xcscheme_^#shared#^_</key> <key>FUSUserCenterModule.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>84</integer> <integer>81</integer>
</dict> </dict>
<key>FUSUserCenterModuleBundle.xcscheme_^#shared#^_</key> <key>FUSUserCenterModuleBundle.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>79</integer> <integer>82</integer>
</dict> </dict>
</dict> </dict>
</dict> </dict>
......
...@@ -15,7 +15,11 @@ class FUSInviteRewardInviteFunctionHeader: FUSBaseView { ...@@ -15,7 +15,11 @@ class FUSInviteRewardInviteFunctionHeader: FUSBaseView {
/// 使者奖励 /// 使者奖励
case emissaryReward case emissaryReward
/// 使者任务 /// 使者任务
case emisaaryTask case emissaryTask
/// 使者召回
case emissaryRecall
/// 召回方式
case recallFunction
} }
// static public let cellID: String = "FUSInviteRewardInviteFunctionHeader" // static public let cellID: String = "FUSInviteRewardInviteFunctionHeader"
...@@ -93,10 +97,18 @@ class FUSInviteRewardInviteFunctionHeader: FUSBaseView { ...@@ -93,10 +97,18 @@ class FUSInviteRewardInviteFunctionHeader: FUSBaseView {
descLabel.isHidden = true descLabel.isHidden = true
emissaryLineImageView.isHidden = false emissaryLineImageView.isHidden = false
titleLabel.text = .fus_localString("使者奖励") titleLabel.text = .fus_localString("使者奖励")
case .emisaaryTask: case .emissaryTask:
descLabel.isHidden = true descLabel.isHidden = true
emissaryLineImageView.isHidden = false emissaryLineImageView.isHidden = false
titleLabel.text = .fus_localString("使者任务") titleLabel.text = .fus_localString("使者任务")
case .emissaryRecall:
descLabel.isHidden = true
emissaryLineImageView.isHidden = false
titleLabel.text = .fus_versionLocalString("召回任务")
case .recallFunction:
descLabel.isHidden = true
emissaryLineImageView.isHidden = true
titleLabel.text = .fus_versionLocalString("选择召回方式")
} }
let titleSize = titleLabel.text?.size(for: .fus_themeMediumFont(18), maxWidth: Double(MAXFLOAT), maxHeight: 30) let titleSize = titleLabel.text?.size(for: .fus_themeMediumFont(18), maxWidth: Double(MAXFLOAT), maxHeight: 30)
......
...@@ -168,15 +168,25 @@ class FUSInviteRewardInvitePlanCell: UITableViewCell { ...@@ -168,15 +168,25 @@ class FUSInviteRewardInvitePlanCell: UITableViewCell {
// .disposed(by: disposeBag) // .disposed(by: disposeBag)
} }
/// 设置邀请的模型
func fus_setupModel(model: FUSInviteDataIndexGetInfoModel) { func fus_setupModel(model: FUSInviteDataIndexGetInfoModel) {
titleLabel.attributedText = FUSInviteRewardInviteView.FUSInviteRewardInviteViewType.invite.fus_getPlanTitle()
self.fus_setupCell(emissaryContent: model.masterContent, clansmanContent: model.memberContent)
}
/// 设置召回的模型
func fus_setupRecall(model: FUSInviteDataRecallGetInfoModel){
titleLabel.attributedText = FUSInviteRewardInviteView.FUSInviteRewardInviteViewType.recall.fus_getPlanTitle()
self.fus_setupCell(emissaryContent: model.masterContent, clansmanContent: model.memberContent)
}
func fus_setupCell(emissaryContent: String, clansmanContent: String) {
var attrTextFont: UIFont = .fus_themeFont(13) var attrTextFont: UIFont = .fus_themeFont(13)
if self.singleDescWidth < 330 + 18*2 { if self.singleDescWidth < 330 + 18*2 {
attrTextFont = .fus_themeFont(12) attrTextFont = .fus_themeFont(12)
} }
let emissaryContentAttr = FUSInviteDataIndexGetInfoModel.fus_getAttr(withContent: model.masterContent, font: attrTextFont, isCenter: true) let emissaryContentAttr = FUSInviteDataIndexGetInfoModel.fus_getAttr(withContent: emissaryContent, font: attrTextFont, isCenter: true)
let clansmanContentAttr = FUSInviteDataIndexGetInfoModel.fus_getAttr(withContent: model.memberContent, font: attrTextFont, isCenter: true) let clansmanContentAttr = FUSInviteDataIndexGetInfoModel.fus_getAttr(withContent: clansmanContent, font: attrTextFont, isCenter: true)
// 如果有没有内容的情况,那么只显示一个,并且居中 // 如果有没有内容的情况,那么只显示一个,并且居中
if emissaryContentAttr.length <= 0 || clansmanContentAttr.length <= 0{ if emissaryContentAttr.length <= 0 || clansmanContentAttr.length <= 0{
...@@ -287,3 +297,19 @@ class FFInviteRewardInviteRewardDescView: FUSBaseView { ...@@ -287,3 +297,19 @@ class FFInviteRewardInviteRewardDescView: FUSBaseView {
titleBtn.setTitle(" " + self.viewType.fus_getTitle() + " ", for: .normal) titleBtn.setTitle(" " + self.viewType.fus_getTitle() + " ", for: .normal)
} }
} }
extension FUSInviteRewardInviteView.FUSInviteRewardInviteViewType{
func fus_getPlanTitle() -> NSAttributedString {
return .sj.makeText({ make in
if self == .invite {
make.append(.fus_versionLocalString("邀请新玩家加入")).textColor(.fus_textColorRich())
}
else {
make.append(.fus_versionLocalString("召唤老玩家回归")).textColor(.fus_textColorRich())
}
make.append(" ")
make.append("FusiYa").textColor(.fus_diamondBlue())
make.font(.fus_themeMediumFont(18))
})
}
}
//
// FUSInviteRewardInviteRecallClansmanCell.swift
// FUSUserCenterModule
//
// Created by aaa on 2025/6/23.
//
import UIKit
class FUSInviteRewardInviteRecallClansmanCell: UITableViewCell {
enum FUSInviteRewardInviteRecallClansmanType{
case churnClansman
case clansmanRelationship
func fus_getTitle() -> String{
switch self{
case .churnClansman:
return.fus_versionLocalString("流失族人")
case .clansmanRelationship:
return .fus_versionLocalString("族人关系")
}
}
}
static public let cellID: String = "FFInviteRewardInviteRecallClansmanCell"
static public let cellHeight: CGFloat = 58
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.selectionStyle = UITableViewCell.SelectionStyle.none
self.makeUI()
self.bindViewModel()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
let bgView = UIView(frame: CGRectMake(18, 0, UIView.fus_screenW() - 18*2, FUSInviteRewardInviteRecallClansmanCell.cellHeight))
let titleLabel = UILabel()
let descLabel = UILabel()
let lineView = UIView()
func makeUI(){
self.contentView.backgroundColor = .clear
self.backgroundColor = .clear
bgView.backgroundColor = .white
self.contentView.addSubview(bgView)
bgView.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(18)
make.top.bottom.equalToSuperview()
}
titleLabel.font = .fus_themeMediumFont(15)
titleLabel.textColor = .fus_textColorDeep()
bgView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.equalTo(20)
make.centerY.equalToSuperview()
}
let arrowImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("inviteReward_right_arrow_icon"))
bgView.addSubview(arrowImageView)
arrowImageView.snp.makeConstraints { make in
make.right.equalTo(-10)
make.centerY.equalToSuperview()
// make.size.equalTo(CGSizeMake(6, 12))
}
descLabel.font = .fus_themeFont(13)
descLabel.textColor = .fus_textColorMedium()
bgView.addSubview(descLabel)
descLabel.snp.makeConstraints { make in
make.right.equalTo(arrowImageView.snp.left).offset(-6)
make.centerY.equalTo(titleLabel.snp.centerY)
}
lineView.backgroundColor = .fus_separatorLine()
bgView.addSubview(lineView)
lineView.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(16)
make.bottom.equalToSuperview()
make.height.equalTo(1.0/UIScreen.main.scale)
}
}
func bindViewModel(){
}
public func fus_setCell(type: FUSInviteRewardInviteRecallClansmanType, model: FUSInviteDataRecallGetInfoModel, currentRow: Int, maxRowCount: Int){
self.titleLabel.text = type.fus_getTitle()
switch type{
case .churnClansman:
self.descLabel.text = model.drainMember == 0 ? "" : "\(model.drainMember)"
case .clansmanRelationship:
self.descLabel.text = model.drainFollow == 0 ? "" : "\(model.drainFollow)"
}
self.lineView.isHidden = false
// 添加阴影
self.bgView.fus_addInviteCellShadow(currentRow: currentRow, maxRowCount: maxRowCount)
if maxRowCount <= 1 || currentRow == maxRowCount - 1 {
self.lineView.isHidden = true
}
}
}
//
// FUSInviteRewardInviteRecallClansmanHeader.swift
// FUSUserCenterModule
//
// Created by aaa on 2025/6/23.
//
import UIKit
class FUSInviteRewardInviteRecallClansmanHeader: FUSBaseView {
enum FUSInviteRewardInviteRecallClansmanHeaderType {
case recallClansman
func fus_getTitle() -> String {
switch self {
case .recallClansman:
return .fus_versionLocalString("召回流失族人")
}
}
func fus_getDesc() -> String {
switch self {
case .recallClansman:
return .init(format: .fus_versionLocalString("%@天以上未登入FIREFLY的玩家,将会自动断开使者关系"), "\(FUSSwiftCacheDataShare.share.settingConfigModel.value?.inviteDataRecallShowDay ?? 90)")
}
}
}
let titleLabel = UILabel()
let descLabel = UILabel()
override func makeUI() {
super.makeUI()
self.backgroundColor = .clear
descLabel.numberOfLines = 0
descLabel.font = .fus_themeFont(13)
descLabel.textColor = .fus_textColorMedium()
self.addSubview(descLabel)
descLabel.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(18)
make.bottom.equalToSuperview().offset(-4)
}
let titleBgView = UIView()
self.addSubview(titleBgView)
titleBgView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalTo(descLabel.snp.top).offset(0)
make.height.equalTo(38)
}
let dotView = UIView()
dotView.backgroundColor = .fus_diamondBlue()
dotView.layer.cornerRadius = 3
titleBgView.addSubview(dotView)
dotView.snp.makeConstraints { make in
make.left.equalTo(22)
make.centerY.equalToSuperview()
make.size.equalTo(CGSizeMake(6, 6))
}
titleLabel.font = .fus_themeMediumFont(18)
titleLabel.textColor = .black
titleBgView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.equalTo(dotView.snp.right).offset(8)
make.centerY.equalToSuperview()
}
}
func fus_setup(type: FUSInviteRewardInviteRecallClansmanHeaderType){
self.titleLabel.text = type.fus_getTitle()
self.descLabel.text = type.fus_getDesc()
}
static public func fus_getCellHeight(type: FUSInviteRewardInviteRecallClansmanHeaderType) -> CGFloat{
var cellHeight: CGFloat = 0
cellHeight += 38
cellHeight += ceil(type.fus_getDesc().size(for: .fus_themeFont(13), maxWidth: UIView.fus_screenW() - 18*2, maxHeight: Double(MAXFLOAT)).height) + 2
cellHeight += 4
return cellHeight
}
}
...@@ -149,7 +149,9 @@ class FUSInviteRewardTaskCommonCell: UITableViewCell { ...@@ -149,7 +149,9 @@ class FUSInviteRewardTaskCommonCell: UITableViewCell {
// //
// } // }
// } // }
self.titleLabel.attributedText = model.fus_getTitleAttr() model.fus_getTitleAttr {[weak self] attr in
self?.titleLabel.attributedText = attr
}
self.descLabel.text = model.content self.descLabel.text = model.content
let descSize = model.content.size(for: FUSInviteRewardTaskCommonCell.descLabelFont, maxWidth: UIView.fus_screenW() - FUSInviteRewardTaskCommonCell.bgHorizontalMargin*2 - FUSInviteRewardTaskCommonCell.contentHorizontalMargin*2, maxHeight: Double(MAXFLOAT)) let descSize = model.content.size(for: FUSInviteRewardTaskCommonCell.descLabelFont, maxWidth: UIView.fus_screenW() - FUSInviteRewardTaskCommonCell.bgHorizontalMargin*2 - FUSInviteRewardTaskCommonCell.contentHorizontalMargin*2, maxHeight: Double(MAXFLOAT))
...@@ -230,9 +232,13 @@ extension FUSInviteDataAwardGetListDataModel { ...@@ -230,9 +232,13 @@ extension FUSInviteDataAwardGetListDataModel {
return cellHeight return cellHeight
} }
public func fus_getTitleAttr() -> NSAttributedString? { public func fus_getTitleAttr(attrHandle: ((NSAttributedString?) -> Void)?) {
DispatchQueue.global().async(execute: {
return FUSFormatContentHelper.fus_createContentAttributedString(withHTMLString: self.title, font: .fus_themeMediumFont(15), defaultColor: .fus_textColorDeep(), imageSize: CGSizeMake(20, 20)) let attr2 = FUSFormatContentHelper.fus_createContentAttributedString(withHTMLString: self.title, font: .fus_themeMediumFont(15), defaultColor: .fus_textColorDeep(), imageSize: CGSizeMake(20, 20))
DispatchQueue.main.async(execute: {
attrHandle?(attr2)
})
})
} }
} }
......
...@@ -15,22 +15,30 @@ public class FUSInviteRewardController: FUSBaseViewController { ...@@ -15,22 +15,30 @@ public class FUSInviteRewardController: FUSBaseViewController {
/// 邀请 /// 邀请
case invite case invite
/// 奖励 /// 奖励
case reward // case reward
/// 任务 /// 任务
case task case task
/// 榜单
case board
/// 我的 /// 我的
case my case my
/// 召回
case recall
func fus_getTitleName() -> String{ func fus_getTitleName() -> String{
switch self{ switch self{
case .invite: case .invite:
return .fus_localString("邀请") return .fus_localString("邀请")
case .reward: // case .reward:
return .fus_localString("奖励") // return .fus_localString("奖励")
case .task: case .task:
return .fus_localString("任务") return .fus_localString("任务")
case .board:
return .fus_versionLocalString("榜单")
case .my: case .my:
return .fus_localString("我的") return .fus_localString("我的")
case .recall:
return .fus_versionLocalString("召回")
} }
} }
...@@ -39,7 +47,9 @@ public class FUSInviteRewardController: FUSBaseViewController { ...@@ -39,7 +47,9 @@ public class FUSInviteRewardController: FUSBaseViewController {
return .invite return .invite
} }
else if typeStr == "inviteReward_reward"{ else if typeStr == "inviteReward_reward"{
return .reward // 奖励和任务合并了
// return .reward
return .task
} }
else if typeStr == "inviteReward_task"{ else if typeStr == "inviteReward_task"{
return .task return .task
...@@ -47,6 +57,9 @@ public class FUSInviteRewardController: FUSBaseViewController { ...@@ -47,6 +57,9 @@ public class FUSInviteRewardController: FUSBaseViewController {
else if typeStr == "inviteReward_my"{ else if typeStr == "inviteReward_my"{
return .my return .my
} }
else if typeStr == "inviteReward_recall"{
return .recall
}
else { else {
return .invite return .invite
} }
......
//
// FUSInviteDataRecallGetInfoModel.h
// FUSUserCenterModule
//
// Created by aaa on 2025/6/23.
//
#import <FUSFoundation/FUSFoundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface FUSInviteDataRecallGetInfoModel : FUSBaseModel
/// 使者获得
@property (nonatomic, copy) NSString *masterContent;
/// 族人获得
@property (nonatomic, copy) NSString *memberContent;
/// 流失族人
@property (nonatomic, assign) NSInteger drainMember;
/// 流失关系
@property (nonatomic, assign) NSInteger drainFollow;
/// 流失族人H5地址
@property (nonatomic, copy) NSString *drainMemberUrl;
/// 流水关系H5地址
@property (nonatomic, copy) NSString *drainFollowUrl;
@end
NS_ASSUME_NONNULL_END
//
// FUSInviteDataRecallGetInfoModel.m
// FUSUserCenterModule
//
// Created by aaa on 2025/6/23.
//
#import "FUSInviteDataRecallGetInfoModel.h"
@implementation FUSInviteDataRecallGetInfoModel
@end
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#import "FUSInviteDataMyselfGetInfoModel.h" #import "FUSInviteDataMyselfGetInfoModel.h"
#import "FUSInviteDataMyselfDauGetListDataModel.h" #import "FUSInviteDataMyselfDauGetListDataModel.h"
#import "FUSInviteDataQrcodeGetModel.h" #import "FUSInviteDataQrcodeGetModel.h"
#import "FUSInviteDataRecallGetInfoModel.h"
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
...@@ -20,6 +21,10 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -20,6 +21,10 @@ NS_ASSUME_NONNULL_BEGIN
+(void)fus_inviteDataIndexGetInfoWithSuccess:(void(^)(FUSInviteDataIndexGetInfoModel *model))success +(void)fus_inviteDataIndexGetInfoWithSuccess:(void(^)(FUSInviteDataIndexGetInfoModel *model))success
failure:(void(^)(NSString *msg,int code))failure; failure:(void(^)(NSString *msg,int code))failure;
/// 使者邀请-召回首页
+ (void)fus_requestInviteDataRecallGetInfoWithSuccess:(void(^)(FUSInviteDataRecallGetInfoModel *model))success
failure:(void(^)(NSString *msg,int code))failure;
/// 使者邀请-奖励中心 /// 使者邀请-奖励中心
+(void)fus_inviteDataAwardGetListWithSuccess:(void(^)(NSArray<FUSInviteDataAwardGetListDataModel *> *modelList))success +(void)fus_inviteDataAwardGetListWithSuccess:(void(^)(NSArray<FUSInviteDataAwardGetListDataModel *> *modelList))success
failure:(void(^)(NSString *msg,int code))failure; failure:(void(^)(NSString *msg,int code))failure;
...@@ -28,6 +33,10 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -28,6 +33,10 @@ NS_ASSUME_NONNULL_BEGIN
+(void)fus_inviteDataTaskGetListWithSuccess:(void(^)(NSArray<FUSInviteDataAwardGetListDataModel *> *modelList))success +(void)fus_inviteDataTaskGetListWithSuccess:(void(^)(NSArray<FUSInviteDataAwardGetListDataModel *> *modelList))success
failure:(void(^)(NSString *msg,int code))failure; failure:(void(^)(NSString *msg,int code))failure;
/// 使者邀请-召回任务列表
+(void)fus_requestInviteDataTaskRecallGetListWithSuccess:(void(^)(NSArray<FUSInviteDataAwardGetListDataModel *> *modelList))success
failure:(void(^)(NSString *msg,int code))failure;
/// 使者邀请-奖励领取 /// 使者邀请-奖励领取
+(void)fus_inviteDataAwardReceiveWithSid:(NSString *)sid +(void)fus_inviteDataAwardReceiveWithSid:(NSString *)sid
success:(void(^)(FUSInviteDataAwardReceiveItemModel *model))success success:(void(^)(FUSInviteDataAwardReceiveItemModel *model))success
...@@ -38,6 +47,11 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -38,6 +47,11 @@ NS_ASSUME_NONNULL_BEGIN
success:(void(^)(FUSInviteDataAwardReceiveItemModel *model))success success:(void(^)(FUSInviteDataAwardReceiveItemModel *model))success
failure:(void(^)(NSString *msg,int code))failure; failure:(void(^)(NSString *msg,int code))failure;
/// 使者邀请-领取回归任务奖励
+(void)fus_inviteDataTaskRecallReceiveWithSid:(NSString *)sid
success:(void(^)(FUSInviteDataAwardReceiveItemModel *model))success
failure:(void(^)(NSString *msg,int code))failure;
/// 使者邀请-我的信息 /// 使者邀请-我的信息
+(void)fus_inviteDataMyselfGetInfoWithSuccess:(void(^)(FUSInviteDataMyselfGetInfoModel *model))success +(void)fus_inviteDataMyselfGetInfoWithSuccess:(void(^)(FUSInviteDataMyselfGetInfoModel *model))success
failure:(void(^)(NSString *msg,int code))failure; failure:(void(^)(NSString *msg,int code))failure;
......
...@@ -21,6 +21,17 @@ ...@@ -21,6 +21,17 @@
}]; }];
} }
/// 使者邀请-召回首页
+ (void)fus_requestInviteDataRecallGetInfoWithSuccess:(void (^)(FUSInviteDataRecallGetInfoModel * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{
[FUSHttpHelper postRequestBinaryWithUrl:FUSUserCenterURLs.fus_URL_inviteDataRecallGetInfo params:nil success:^(NSDictionary * _Nullable dataDict, int code) {
success([FUSInviteDataRecallGetInfoModel modelWithDictionary:dataDict]);
} failure:^(NSDictionary * _Nullable dataDict, int code) {
if (failure) {
failure(FAILURE_MESSAGE,code);
}
}];
}
/// 使者邀请-奖励中心 /// 使者邀请-奖励中心
+ (void)fus_inviteDataAwardGetListWithSuccess:(void (^)(NSArray<FUSInviteDataAwardGetListDataModel *> * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{ + (void)fus_inviteDataAwardGetListWithSuccess:(void (^)(NSArray<FUSInviteDataAwardGetListDataModel *> * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{
...@@ -45,6 +56,17 @@ ...@@ -45,6 +56,17 @@
}]; }];
} }
/// 使者邀请-召回任务列表
+ (void)fus_requestInviteDataTaskRecallGetListWithSuccess:(void (^)(NSArray<FUSInviteDataAwardGetListDataModel *> * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{
[FUSHttpHelper postRequestBinaryWithUrl:FUSUserCenterURLs.fus_URL_inviteDataTaskRecallGetList params:nil success:^(NSDictionary * _Nullable dataDict, int code) {
success([NSArray modelArrayWithClass:[FUSInviteDataAwardGetListDataModel class] json:dataDict[@"dataList"]]);
} failure:^(NSDictionary * _Nullable dataDict, int code) {
if (failure) {
failure(FAILURE_MESSAGE,code);
}
}];
}
/// 使者邀请-奖励领取 /// 使者邀请-奖励领取
+ (void)fus_inviteDataAwardReceiveWithSid:(NSString *)sid success:(void (^)(FUSInviteDataAwardReceiveItemModel * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{ + (void)fus_inviteDataAwardReceiveWithSid:(NSString *)sid success:(void (^)(FUSInviteDataAwardReceiveItemModel * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{
NSDictionary *parm = @{@"sid": sid}; NSDictionary *parm = @{@"sid": sid};
...@@ -73,6 +95,19 @@ ...@@ -73,6 +95,19 @@
}]; }];
} }
+ (void)fus_inviteDataTaskRecallReceiveWithSid:(NSString *)sid success:(void (^)(FUSInviteDataAwardReceiveItemModel * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{
NSDictionary *parm = @{@"sid": sid};
[FUSHttpHelper postRequestBinaryWithUrl:FUSUserCenterURLs.fus_URL_inviteDataTaskRecallReceive params:parm success:^(NSDictionary * _Nullable dataDict, int code) {
FUSInviteDataAwardReceiveItemModel *model = [FUSInviteDataAwardReceiveItemModel modelWithDictionary:dataDict[@"dataJson"]];
[[FUSRouter userRouter] fus_showAwardAnimateWithCurrency:0 classify:model.classify tips:model.itemName icon:model.itemUrl amount:model.itemNum];
success(model);
} failure:^(NSDictionary * _Nullable dataDict, int code) {
if (failure) {
failure(FAILURE_MESSAGE,code);
}
}];
}
/// 使者邀请-我的信息 /// 使者邀请-我的信息
+ (void)fus_inviteDataMyselfGetInfoWithSuccess:(void (^)(FUSInviteDataMyselfGetInfoModel * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{ + (void)fus_inviteDataMyselfGetInfoWithSuccess:(void (^)(FUSInviteDataMyselfGetInfoModel * _Nonnull))success failure:(void (^)(NSString * _Nonnull, int))failure{
[FUSHttpHelper postRequestBinaryWithUrl:FUSUserCenterURLs.fus_URL_inviteDataMyselfGetInfo params:nil success:^(NSDictionary * _Nullable dataDict, int code) { [FUSHttpHelper postRequestBinaryWithUrl:FUSUserCenterURLs.fus_URL_inviteDataMyselfGetInfo params:nil success:^(NSDictionary * _Nullable dataDict, int code) {
......
...@@ -6,20 +6,35 @@ ...@@ -6,20 +6,35 @@
// //
import UIKit import UIKit
import RxSwift
import RxCocoa
///邀请 ///邀请
class FUSInviteRewardInviteView: FUSInviteRewardBaseView { class FUSInviteRewardInviteView: FUSInviteRewardBaseView {
enum FUSInviteRewardInviteViewType {
case invite
case recall
}
enum FUSInviteRewardInviteViewSectionType { enum FUSInviteRewardInviteViewSectionType {
case plan case plan
case recallClansman
case inviteFunction case inviteFunction
case inviteCode case inviteCode
case myEMissaryCode case myEMissaryCode
} }
private let sectionTypesList: [FUSInviteRewardInviteViewSectionType] = [.plan, .inviteFunction, .inviteCode, .myEMissaryCode] public var viewType: FUSInviteRewardInviteViewType = .invite{
didSet{
fus_reloadUI()
}
}
private var sectionTypesList: [FUSInviteRewardInviteViewSectionType] = [.plan, .inviteFunction, .myEMissaryCode]
private let tableView = UITableView(frame: .zero) private let tableView = UITableView(frame: .zero)
private let inviteFunctionList: [FUSInviteRewardInviteFunctionCell.FUSInviteRewardInviteFunctionType] = [.media, .web, .QRCode, .appStore] private let inviteFunctionList: [FUSInviteRewardInviteFunctionCell.FUSInviteRewardInviteFunctionType] = [.media, .web, .QRCode, .appStore]
private let recallClansmanCellList: [FUSInviteRewardInviteRecallClansmanCell.FUSInviteRewardInviteRecallClansmanType] = [.churnClansman, .clansmanRelationship]
override func makeUI() { override func makeUI() {
super.makeUI() super.makeUI()
...@@ -38,25 +53,71 @@ class FUSInviteRewardInviteView: FUSInviteRewardBaseView { ...@@ -38,25 +53,71 @@ class FUSInviteRewardInviteView: FUSInviteRewardBaseView {
// tableView.register(FUSInviteRewardInviteFunctionHeader.self, forHeaderFooterViewReuseIdentifier: FUSInviteRewardInviteFunctionHeader.cellID) // tableView.register(FUSInviteRewardInviteFunctionHeader.self, forHeaderFooterViewReuseIdentifier: FUSInviteRewardInviteFunctionHeader.cellID)
tableView.register(FUSInviteRewardInviteFunctionCell.self, forCellReuseIdentifier: FUSInviteRewardInviteFunctionCell.cellID) tableView.register(FUSInviteRewardInviteFunctionCell.self, forCellReuseIdentifier: FUSInviteRewardInviteFunctionCell.cellID)
tableView.register(FUSInviteRewardInviteCodeCell.self, forCellReuseIdentifier: FUSInviteRewardInviteCodeCell.cellID) tableView.register(FUSInviteRewardInviteCodeCell.self, forCellReuseIdentifier: FUSInviteRewardInviteCodeCell.cellID)
tableView.register(FUSInviteRewardInviteRecallClansmanCell.self, forCellReuseIdentifier: FUSInviteRewardInviteRecallClansmanCell.cellID)
self.addSubview(tableView) self.addSubview(tableView)
tableView.snp.makeConstraints { make in tableView.snp.makeConstraints { make in
make.edges.equalToSuperview() make.edges.equalToSuperview()
} }
tableView.mj_header = FUSRefreshHeader(refreshingBlock: { tableView.mj_header = FUSRefreshHeader(refreshingBlock: {[weak self] in
guard let self = self else { return }
switch self.viewType {
case .invite:
FUSInviteRewardInviteViewModel.share.fus_requestInviteDataIndexGetInfo() FUSInviteRewardInviteViewModel.share.fus_requestInviteDataIndexGetInfo()
case .recall:
FUSInviteRewardInviteViewModel.share.fus_requestInviteDataRecallGetInfo()
}
}) })
fus_reloadUI()
} }
override func bindViewModel() { // override func bindViewModel() {
super.bindViewModel() // super.bindViewModel()
//
// FUSInviteRewardInviteViewModel.share.inviteDataModel.subscribe(onNext: {[weak self] model in
//
// self?.tableView.reloadData()
// }).disposed(by: disposeBag)
//
// FUSInviteRewardInviteViewModel.share.inviteDateIsLoading.subscribe(onNext: {[weak self] isLoading in
//
// if isLoading == false {
// if self?.tableView.mj_header?.isRefreshing ?? false {
// self?.tableView.mj_header?.endRefreshing()
// }
// }
// })
// .disposed(by: disposeBag)
//
// }
func fus_reloadUI(){
if self.viewType == .invite {
sectionTypesList = [.plan, .inviteFunction/*, .inviteCode*/, .myEMissaryCode]
if FUSCacheDataShare.shareStore().settingInitDataModel.inviteRegisterSwitch == 1{
sectionTypesList = [.plan, .inviteFunction, .inviteCode, .myEMissaryCode]
}
}
else if self.viewType == .recall{
sectionTypesList = [.plan, .recallClansman, .inviteFunction]
}
self.tableView.reloadData()
fus_bindCustomViewModel()
}
var bindViewModelDisposed = DisposeBag()
func fus_bindCustomViewModel() {
bindViewModelDisposed = .init()
if self.viewType == .invite {
FUSInviteRewardInviteViewModel.share.inviteDataModel.subscribe(onNext: {[weak self] model in FUSInviteRewardInviteViewModel.share.inviteDataModel.subscribe(onNext: {[weak self] model in
self?.tableView.reloadData() self?.tableView.reloadData()
}).disposed(by: disposeBag) }).disposed(by: bindViewModelDisposed)
FUSInviteRewardInviteViewModel.share.inviteDateIsLoading.subscribe(onNext: {[weak self] isLoading in FUSInviteRewardInviteViewModel.share.inviteDataIsLoading.subscribe(onNext: {[weak self] isLoading in
if isLoading == false { if isLoading == false {
if self?.tableView.mj_header?.isRefreshing ?? false { if self?.tableView.mj_header?.isRefreshing ?? false {
...@@ -64,8 +125,31 @@ class FUSInviteRewardInviteView: FUSInviteRewardBaseView { ...@@ -64,8 +125,31 @@ class FUSInviteRewardInviteView: FUSInviteRewardBaseView {
} }
} }
}) })
.disposed(by: disposeBag) .disposed(by: bindViewModelDisposed)
}
else if self.viewType == .recall {
FUSInviteRewardInviteViewModel.share.recallDataModel.subscribe(onNext: {[weak self] model in
self?.tableView.reloadData()
}).disposed(by: bindViewModelDisposed)
FUSInviteRewardInviteViewModel.share.recallDataIsLoading.subscribe(onNext: {[weak self] isLoading in
if isLoading == false {
if self?.tableView.mj_header?.isRefreshing ?? false {
self?.tableView.mj_header?.endRefreshing()
}
}
})
.disposed(by: bindViewModelDisposed)
}
}
override func fus_viewDidlLoad() {
super.fus_viewDidlLoad()
if self.viewType == .recall {
FUSInviteRewardInviteViewModel.share.fus_requestInviteDataRecallGetInfo()
}
} }
} }
...@@ -78,6 +162,8 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{ ...@@ -78,6 +162,8 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{
switch sectionTypesList[section]{ switch sectionTypesList[section]{
case .inviteFunction: case .inviteFunction:
return self.inviteFunctionList.count return self.inviteFunctionList.count
case .recallClansman:
return self.recallClansmanCellList.count
default: default:
return 1 return 1
} }
...@@ -93,6 +179,8 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{ ...@@ -93,6 +179,8 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{
return FUSInviteRewardInviteCodeCell.cellHeight return FUSInviteRewardInviteCodeCell.cellHeight
case .myEMissaryCode: case .myEMissaryCode:
return FUSInviteRewardInviteFunctionCell.cellHeight return FUSInviteRewardInviteFunctionCell.cellHeight
case .recallClansman:
return FUSInviteRewardInviteRecallClansmanCell.cellHeight
} }
} }
...@@ -106,6 +194,8 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{ ...@@ -106,6 +194,8 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{
return FUSInviteRewardInviteCodeCell.cellHeight return FUSInviteRewardInviteCodeCell.cellHeight
case .myEMissaryCode: case .myEMissaryCode:
return FUSInviteRewardInviteFunctionCell.cellHeight return FUSInviteRewardInviteFunctionCell.cellHeight
case .recallClansman:
return FUSInviteRewardInviteRecallClansmanCell.cellHeight
} }
} }
...@@ -114,13 +204,16 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{ ...@@ -114,13 +204,16 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{
if sectionType == .plan{ if sectionType == .plan{
if let cell = tableView.dequeueReusableCell(withIdentifier: FUSInviteRewardInvitePlanCell.cellID, for: indexPath) as? FUSInviteRewardInvitePlanCell{ if let cell = tableView.dequeueReusableCell(withIdentifier: FUSInviteRewardInvitePlanCell.cellID, for: indexPath) as? FUSInviteRewardInvitePlanCell{
switch self.viewType{
case .invite:
if let model = FUSInviteRewardInviteViewModel.share.inviteDataModel.value { if let model = FUSInviteRewardInviteViewModel.share.inviteDataModel.value {
cell.fus_setupModel(model: model) cell.fus_setupModel(model: model)
} }
// // 更新了适配 case .recall:
// cell.cellShouldReloadHandler = {[weak self] in if let model = FUSInviteRewardInviteViewModel.share.recallDataModel.value {
// self?.tableView.reloadData() cell.fus_setupRecall(model: model)
// } }
}
return cell return cell
} }
} }
...@@ -141,6 +234,12 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{ ...@@ -141,6 +234,12 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{
return cell return cell
} }
} }
else if sectionType == .recallClansman {
if let cell = tableView.dequeueReusableCell(withIdentifier: FUSInviteRewardInviteRecallClansmanCell.cellID, for: indexPath) as? FUSInviteRewardInviteRecallClansmanCell{
cell.fus_setCell(type: self.recallClansmanCellList[indexPath.row], model: FUSInviteRewardInviteViewModel.share.recallDataModel.value ?? .init(), currentRow: indexPath.row, maxRowCount: self.recallClansmanCellList.count)
return cell
}
}
return .init() return .init()
} }
...@@ -163,12 +262,32 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{ ...@@ -163,12 +262,32 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{
let vc = FUSMyEmissaryQRCodeController() let vc = FUSMyEmissaryQRCodeController()
UIViewController.fus_top()?.navigationController?.pushViewController(vc, animated: true) UIViewController.fus_top()?.navigationController?.pushViewController(vc, animated: true)
} }
else if sectionType == .recallClansman{
// 流失族人
let cellType = self.recallClansmanCellList[indexPath.row]
if let model = FUSInviteRewardInviteViewModel.share.recallDataModel.value {
var url = ""
switch cellType {
case .churnClansman:
url = model.drainMemberUrl
case .clansmanRelationship:
url = model.drainFollowUrl
}
let webVC = FUSWKWebViewController()
webVC.webUrlString = url
webVC.hidesBottomBarWhenPushed = true
UIViewController.fus_top()?.navigationController?.pushViewController(webVC, animated: true)
}
}
} }
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
switch sectionTypesList[section] { switch sectionTypesList[section] {
case .inviteFunction: case .inviteFunction:
return FUSInviteRewardInviteFunctionHeader.cellHeight return FUSInviteRewardInviteFunctionHeader.cellHeight
case .recallClansman:
return FUSInviteRewardInviteRecallClansmanHeader.fus_getCellHeight(type: .recallClansman)
case .plan: case .plan:
return 0 return 0
default: default:
...@@ -176,13 +295,20 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{ ...@@ -176,13 +295,20 @@ extension FUSInviteRewardInviteView: UITableViewDelegate, UITableViewDataSource{
} }
} }
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if sectionTypesList[section] == .inviteFunction{ let sectionType = sectionTypesList[section]
// if let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: FUSInviteRewardInviteFunctionHeader.cellID) as? FUSInviteRewardInviteFunctionHeader { if sectionType == .inviteFunction{
// header.fus_setHeaderType(type: .inviteFunction)
// return header
// }
let header = FUSInviteRewardInviteFunctionHeader(frame: CGRectMake(0, 0, UIView.fus_screenW(), FUSInviteRewardInviteFunctionHeader.cellHeight)) let header = FUSInviteRewardInviteFunctionHeader(frame: CGRectMake(0, 0, UIView.fus_screenW(), FUSInviteRewardInviteFunctionHeader.cellHeight))
switch self.viewType {
case .invite:
header.fus_setHeaderType(type: .inviteFunction) header.fus_setHeaderType(type: .inviteFunction)
case .recall:
header.fus_setHeaderType(type: .recallFunction)
}
return header
}
else if sectionType == .recallClansman {
let header = FUSInviteRewardInviteRecallClansmanHeader(frame: CGRectMake(0, 0, UIView.fus_screenW(), FUSInviteRewardInviteRecallClansmanHeader.fus_getCellHeight(type: .recallClansman)))
header.fus_setup(type: .recallClansman)
return header return header
} }
return .init() return .init()
......
...@@ -37,7 +37,7 @@ class FUSInviteRewardMainView: FUSBaseView { ...@@ -37,7 +37,7 @@ class FUSInviteRewardMainView: FUSBaseView {
private var scrollView = UIScrollView() private var scrollView = UIScrollView()
private let segmentItemTypeList: [FUSInviteRewardController.FUSInviteRewardViewType] = [.invite, .reward, .task, .my] private let segmentItemTypeList: [FUSInviteRewardController.FUSInviteRewardViewType] = [.invite, .recall, .task, .board, .my]
private var segmentViewList: [FUSInviteRewardBaseView] = .init() private var segmentViewList: [FUSInviteRewardBaseView] = .init()
private var currentSegmentIndex = 0 private var currentSegmentIndex = 0
private var isScrolling = false private var isScrolling = false
...@@ -96,7 +96,7 @@ class FUSInviteRewardMainView: FUSBaseView { ...@@ -96,7 +96,7 @@ class FUSInviteRewardMainView: FUSBaseView {
if let model = model { if let model = model {
if model.awardReadRemindnum > 0 { if model.awardReadRemindnum > 0 {
if let viewIndex = self?.segmentItemTypeList.firstIndex(of: .reward){ if let viewIndex = self?.segmentItemTypeList.firstIndex(of: .task){
// 把奖励定为未读 // 把奖励定为未读
self?.segmentView.fus_addUnreadPoint(at: viewIndex, with: .red) self?.segmentView.fus_addUnreadPoint(at: viewIndex, with: .red)
if self?.segmentViewList.count ?? 0 > viewIndex { if self?.segmentViewList.count ?? 0 > viewIndex {
...@@ -131,11 +131,22 @@ class FUSInviteRewardMainView: FUSBaseView { ...@@ -131,11 +131,22 @@ class FUSInviteRewardMainView: FUSBaseView {
var tempView: FUSInviteRewardBaseView? var tempView: FUSInviteRewardBaseView?
switch itemType{ switch itemType{
case .invite: case .invite:
tempView = FUSInviteRewardInviteView() let inviteView = FUSInviteRewardInviteView()
case .reward: inviteView.viewType = .invite
tempView = FUSInviteRewardTaskView(viewType: .reward) tempView = inviteView
case .recall:
let inviteView = FUSInviteRewardInviteView()
inviteView.viewType = .recall
tempView = inviteView
case .task: case .task:
tempView = FUSInviteRewardTaskView(viewType: .task) tempView = FUSInviteRewardTaskView()
case .board:
var url = FUSCacheDataShare.shareStore().settingInitDataModel.agentInviteRankAddress + "?isSpecialUser=\((FUSSwiftCacheDataShare.share.settingConfigModel.value?.specialUserMark == true ? "1" : "0"))"
url = url + "&type=4"
let webView = FUSInviteRewardWebView()
webView.urlStr = url
tempView = webView
case .my: case .my:
tempView = FUSInviteRewardMyView() tempView = FUSInviteRewardMyView()
} }
......
...@@ -6,32 +6,31 @@ ...@@ -6,32 +6,31 @@
// //
import UIKit import UIKit
import RxSwift
import RxCocoa
class FUSInviteRewardTaskView: FUSInviteRewardBaseView { class FUSInviteRewardTaskView: FUSInviteRewardBaseView {
enum FUSInviteRewardTaskViewType { enum FUSInviteRewardTaskViewType {
case reward case reward
case task case task
case recall
} }
let viewType: FUSInviteRewardTaskViewType
private let tableView = UITableView(frame: .zero, style: .grouped) private let tableView = UITableView(frame: .zero, style: .grouped)
var dataList: [FUSInviteDataAwardGetListDataModel] = .init() // tableview 骨架模型
var sectionTypeList: [FUSInviteRewardTaskViewType] = [.reward, .task, .recall]
/// section的cell高度模型
var sectionCellHeightDict: [FUSInviteRewardTaskViewType: [CGFloat]] = .init()
/// 数据列表
var dataDict: [FUSInviteRewardTaskViewType: [FUSInviteDataAwardGetListDataModel]] = .init()
var isLoading = false /// 正在请求的个数,为0则为没有请求
var loadingCount: BehaviorRelay<Int> = .init(value: 0)
// private var socketAwardUserHasUpdate: BehaviorRelay<Bool> = .init(value: false) // private var socketAwardUserHasUpdate: BehaviorRelay<Bool> = .init(value: false)
init(viewType: FUSInviteRewardTaskViewType) {
self.viewType = viewType
super.init(frame: .zero)
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func makeUI() { override func makeUI() {
super.makeUI() super.makeUI()
...@@ -57,6 +56,22 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView { ...@@ -57,6 +56,22 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView {
}) })
} }
override func bindViewModel() {
super.bindViewModel()
self.loadingCount
.skip(1)
.distinctUntilChanged()
.filter({ $0 == 0 })
.subscribe(onNext: {[weak self] _ in
self?.tableView.reloadData()
if self?.tableView.mj_header?.isRefreshing == true{
self?.tableView.mj_header?.endRefreshing()
}
})
.disposed(by: disposeBag)
}
override func fus_viewDidlLoad() { override func fus_viewDidlLoad() {
super.fus_viewDidlLoad() super.fus_viewDidlLoad()
...@@ -65,28 +80,30 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView { ...@@ -65,28 +80,30 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView {
override func fus_viewWillAppear() { override func fus_viewWillAppear() {
super.fus_viewWillAppear() super.fus_viewWillAppear()
if self.isLoading == false && self.dataShouldReloadWhenAppear == true { if self.loadingCount.value == 0 && self.dataShouldReloadWhenAppear == true {
self.tableView.mj_header?.beginRefreshing() self.tableView.mj_header?.beginRefreshing()
} }
} }
func fus_loadData(){ func fus_loadData(){
if self.isLoading == true { if self.loadingCount.value != 0 {
return return
} }
self.isLoading = true
self.dataShouldReloadWhenAppear = false self.dataShouldReloadWhenAppear = false
if self.viewType == .reward { // 奖励
self.loadingCount.accept(self.loadingCount.value + 1)
FUSInviteRewardHttpHelper.fus_inviteDataAwardGetList {[weak self] dataList in FUSInviteRewardHttpHelper.fus_inviteDataAwardGetList {[weak self] dataList in
self?.dataList = dataList guard let self = self else { return }
self?.tableView.reloadData() self.dataDict[.reward] = dataList
if self?.tableView.mj_header?.isRefreshing == true{ // 高度模型
self?.tableView.mj_header?.endRefreshing() var sectionCellHeightList: [CGFloat] = .init()
for dataModel in dataList{
sectionCellHeightList.append(dataModel.fus_getCellHeight())
} }
self?.isLoading = false self.sectionCellHeightDict[.reward] = sectionCellHeightList
self.loadingCount.accept(self.loadingCount.value - 1)
// 如果有未读的,先设置为0,因为如果这时候不设置为0,在别的页面请求前,会先获取先前的数据,先前数据是非0的,就会直接加上未读标志了 // 如果有未读的,先设置为0,因为如果这时候不设置为0,在别的页面请求前,会先获取先前的数据,先前数据是非0的,就会直接加上未读标志了
if let inviteDataModel = FUSInviteRewardInviteViewModel.share.inviteDataModel.value { if let inviteDataModel = FUSInviteRewardInviteViewModel.share.inviteDataModel.value {
...@@ -96,35 +113,52 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView { ...@@ -96,35 +113,52 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView {
} }
} }
} failure: {[weak self] msg, code in } failure: {[weak self] msg, code in
guard let self = self else { return }
FUSDialogView.fus_showDialog(msg) FUSDialogView.fus_showDialog(msg)
if self?.tableView.mj_header?.isRefreshing == true{ self.loadingCount.accept(self.loadingCount.value - 1)
self?.tableView.mj_header?.endRefreshing()
} }
self?.isLoading = false
} // 任务
} self.loadingCount.accept(self.loadingCount.value + 1)
else if self.viewType == .task {
FUSInviteRewardHttpHelper.fus_inviteDataTaskGetList {[weak self] dataList in FUSInviteRewardHttpHelper.fus_inviteDataTaskGetList {[weak self] dataList in
self?.dataList = dataList guard let self = self else { return }
self?.tableView.reloadData() self.dataDict[.task] = dataList
if self?.tableView.mj_header?.isRefreshing == true{ // 高度模型
self?.tableView.mj_header?.endRefreshing() var sectionCellHeightList: [CGFloat] = .init()
} for dataModel in dataList{
self?.isLoading = false sectionCellHeightList.append(dataModel.fus_getCellHeight())
}
self.sectionCellHeightDict[.task] = sectionCellHeightList
self.loadingCount.accept(self.loadingCount.value - 1)
} failure: {[weak self] msg, code in } failure: {[weak self] msg, code in
guard let self = self else { return }
FUSDialogView.fus_showDialog(msg) FUSDialogView.fus_showDialog(msg)
if self?.tableView.mj_header?.isRefreshing == true{ self.loadingCount.accept(self.loadingCount.value - 1)
self?.tableView.mj_header?.endRefreshing()
}
self?.isLoading = false
} }
// 召回
self.loadingCount.accept(self.loadingCount.value + 1)
FUSInviteRewardHttpHelper.fus_requestInviteDataTaskRecallGetList {[weak self] dataList in
guard let self = self else { return }
self.dataDict[.recall] = dataList
// 高度模型
var sectionCellHeightList: [CGFloat] = .init()
for dataModel in dataList{
sectionCellHeightList.append(dataModel.fus_getCellHeight())
} }
self.sectionCellHeightDict[.recall] = sectionCellHeightList
self.loadingCount.accept(self.loadingCount.value - 1)
} failure: {[weak self] msg, code in
guard let self = self else { return }
FUSDialogView.fus_showDialog(msg)
self.loadingCount.accept(self.loadingCount.value - 1)
} }
func fus_draw(userModel: FUSInviteDataAwardGetListDataUserListModel){ }
if self.viewType == .reward { func fus_draw(type: FUSInviteRewardTaskViewType, userModel: FUSInviteDataAwardGetListDataUserListModel){
if type == .reward {
FUSInviteRewardHttpHelper.fus_inviteDataAwardReceive(withSid: userModel.sid) {[weak self] model in FUSInviteRewardHttpHelper.fus_inviteDataAwardReceive(withSid: userModel.sid) {[weak self] model in
userModel.state = 1 userModel.state = 1
userModel.inRead = 1 userModel.inRead = 1
...@@ -133,7 +167,7 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView { ...@@ -133,7 +167,7 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView {
FUSDialogView.fus_showDialog(msg) FUSDialogView.fus_showDialog(msg)
} }
} }
else if self.viewType == .task { else if type == .task {
FUSInviteRewardHttpHelper.fus_inviteDataTaskReceive(withSid: userModel.sid) {[weak self] model in FUSInviteRewardHttpHelper.fus_inviteDataTaskReceive(withSid: userModel.sid) {[weak self] model in
userModel.state = 1 userModel.state = 1
self?.tableView.reloadData() self?.tableView.reloadData()
...@@ -141,56 +175,74 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView { ...@@ -141,56 +175,74 @@ class FUSInviteRewardTaskView: FUSInviteRewardBaseView {
FUSDialogView.fus_showDialog(msg) FUSDialogView.fus_showDialog(msg)
} }
} }
else if type == .recall{
FUSInviteRewardHttpHelper.fus_inviteDataTaskRecallReceive(withSid: userModel.sid) {[weak self] model in
userModel.state = 1
self?.tableView.reloadData()
} failure: { msg, code in
FUSDialogView.fus_showDialog(msg)
}
}
} }
} }
extension FUSInviteRewardTaskView: UITableViewDelegate, UITableViewDataSource{ extension FUSInviteRewardTaskView: UITableViewDelegate, UITableViewDataSource{
func numberOfSections(in tableView: UITableView) -> Int { func numberOfSections(in tableView: UITableView) -> Int {
return 1 return self.sectionTypeList.count
} }
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.dataList.count let sectionType = self.sectionTypeList[section]
return self.dataDict[sectionType]?.count ?? 0
} }
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let model = dataList[indexPath.row] let sectionType = self.sectionTypeList[indexPath.section]
return model.fus_getCellHeight() return self.sectionCellHeightDict[sectionType]?[indexPath.row] ?? 0
} }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: FUSInviteRewardTaskCommonCell.cellID, for: indexPath) as? FUSInviteRewardTaskCommonCell { if let cell = tableView.dequeueReusableCell(withIdentifier: FUSInviteRewardTaskCommonCell.cellID, for: indexPath) as? FUSInviteRewardTaskCommonCell {
let model = dataList[indexPath.row] let type = self.sectionTypeList[indexPath.section]
cell.fus_setup(model: model, type: self.viewType) let model: FUSInviteDataAwardGetListDataModel? = self.dataDict[type]?[indexPath.row]
if let model = model {
cell.fus_setup(model: model, type: type)
cell.drawClickedHandler = {[weak self] userModel in cell.drawClickedHandler = {[weak self] userModel in
self?.fus_draw(userModel: userModel) self?.fus_draw(type:type, userModel: userModel)
} }
cell.avatarClickedHandler = { userModel in cell.avatarClickedHandler = { userModel in
FUSRouter.userRouter().fus_enterUserZone(userModel.uid, isFromLiveRoomChat: false) FUSRouter.userRouter().fus_enterUserZone(userModel.uid, isFromLiveRoomChat: false)
} }
}
return cell return cell
} }
return .init() return .init()
} }
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
if section == 0 {
return FUSInviteRewardInviteFunctionHeader.cellHeight return FUSInviteRewardInviteFunctionHeader.cellHeight
} }
return 0
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == 0{
let header = FUSInviteRewardInviteFunctionHeader(frame: CGRectMake(0, 0, UIView.fus_screenW(), FUSInviteRewardInviteFunctionHeader.cellHeight)) let header = FUSInviteRewardInviteFunctionHeader(frame: CGRectMake(0, 0, UIView.fus_screenW(), FUSInviteRewardInviteFunctionHeader.cellHeight))
if self.viewType == .reward{ if self.sectionTypeList[section] == .reward{
header.fus_setHeaderType(type: .emissaryReward) header.fus_setHeaderType(type: .emissaryReward)
}else { }
header.fus_setHeaderType(type: .emisaaryTask) else if self.sectionTypeList[section] == .recall{
header.fus_setHeaderType(type: .emissaryRecall)
}
else {
header.fus_setHeaderType(type: .emissaryTask)
} }
return header return header
} }
return .init() func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return CGFLOAT_MIN
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footer = UIView(frame: CGRectMake(0, 0, UIView.fus_screenW(), CGFLOAT_MIN))
return footer
} }
} }
//
// FUSInviteRewardWebView.swift
// FUSUserCenterModule
//
// Created by aaa on 2025/6/23.
//
import UIKit
class FUSInviteRewardWebView: FUSInviteRewardBaseView {
var urlStr: String = ""{
didSet{
if viewDidLoad == true{
webView.configWebView(withWebUrl: urlStr)
}
}
}
let webView = FUSWKWebView(frame: CGRectMake(0, 0, UIView.fus_screenW(), UIView.fus_screenH() - UIView.fus_StatusBarAndNavgationBarHeight()))
override func makeUI() {
super.makeUI()
self.addSubview(webView)
webView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
override func fus_viewDidlLoad() {
super.fus_viewDidlLoad()
if urlStr.isEmpty == false {
webView.configWebView(withWebUrl: urlStr)
}
}
}
...@@ -17,7 +17,13 @@ class FUSInviteRewardInviteViewModel: NSObject { ...@@ -17,7 +17,13 @@ class FUSInviteRewardInviteViewModel: NSObject {
/// 数据 /// 数据
let inviteDataModel: BehaviorRelay<FUSInviteDataIndexGetInfoModel?> = .init(value: nil) let inviteDataModel: BehaviorRelay<FUSInviteDataIndexGetInfoModel?> = .init(value: nil)
/// 是否正在请求 /// 是否正在请求
let inviteDateIsLoading: BehaviorRelay<Bool> = .init(value: false) let inviteDataIsLoading: BehaviorRelay<Bool> = .init(value: false)
/// 召回数据
let recallDataModel: BehaviorRelay<FUSInviteDataRecallGetInfoModel?> = .init(value: nil)
/// 召回正在请求
let recallDataIsLoading: BehaviorRelay<Bool> = .init(value: false)
/// socket监听的新增族人 /// socket监听的新增族人
let socketAwardUserModelListObserver: BehaviorRelay<[FUSInviteDataAwardGetListDataUserListModel]> = .init(value: .init()) let socketAwardUserModelListObserver: BehaviorRelay<[FUSInviteDataAwardGetListDataUserListModel]> = .init(value: .init())
/// 新增单独一个推送 /// 新增单独一个推送
...@@ -72,21 +78,44 @@ class FUSInviteRewardInviteViewModel: NSObject { ...@@ -72,21 +78,44 @@ class FUSInviteRewardInviteViewModel: NSObject {
socketAwardUserModelListObserver.accept(.init()) socketAwardUserModelListObserver.accept(.init())
} }
self.inviteDateIsLoading.accept(true) self.inviteDataIsLoading.accept(true)
FUSInviteRewardHttpHelper.fus_inviteDataIndexGetInfo {[weak self] model in FUSInviteRewardHttpHelper.fus_inviteDataIndexGetInfo {[weak self] model in
self?.currentUid = FUSSwiftCacheDataShare.share.userInfo.value?.uid self?.currentUid = FUSSwiftCacheDataShare.share.userInfo.value?.uid
self?.fus_reloadRemainingTimeCountDown(model: model) self?.fus_reloadRemainingTimeCountDown(model: model)
self?.inviteDataModel.accept(model) self?.inviteDataModel.accept(model)
self?.inviteDateIsLoading.accept(false) self?.inviteDataIsLoading.accept(false)
} failure: {[weak self] msg, code in } failure: {[weak self] msg, code in
FUSDialogView.fus_showDialog(msg) FUSDialogView.fus_showDialog(msg)
self?.inviteDateIsLoading.accept(false) self?.inviteDataIsLoading.accept(false)
} }
} }
/// 使者邀请-召回首页
public func fus_requestInviteDataRecallGetInfo(){
if let uid = self.currentUid,
uid != FUSSwiftCacheDataShare.share.userInfo.value?.uid {
recallDataModel.accept(nil)
}
self.recallDataIsLoading.accept(true)
FUSInviteRewardHttpHelper.fus_requestInviteDataRecallGetInfo {[weak self] model in
self?.currentUid = FUSSwiftCacheDataShare.share.userInfo.value?.uid
self?.recallDataModel.accept(model)
self?.recallDataIsLoading.accept(false)
} failure: {[weak self] msg, code in
FUSDialogView.fus_showDialog(msg)
self?.recallDataIsLoading.accept(false)
}
}
var countdownDisposedBag = DisposeBag() var countdownDisposedBag = DisposeBag()
/// 计算倒数识别错误的次数,如果超过次数,则先不请求了
var countdownErrorCount: Int = 0
/// 倒数邀请码 /// 倒数邀请码
func fus_reloadRemainingTimeCountDown(model: FUSInviteDataIndexGetInfoModel){ func fus_reloadRemainingTimeCountDown(model: FUSInviteDataIndexGetInfoModel){
...@@ -103,9 +132,16 @@ class FUSInviteRewardInviteViewModel: NSObject { ...@@ -103,9 +132,16 @@ class FUSInviteRewardInviteViewModel: NSObject {
guard let self = self else { return } guard let self = self else { return }
let remainingTime = Int(self.agentCodeEndTimeInterval - Date().timeIntervalSince1970) let remainingTime = Int(self.agentCodeEndTimeInterval - Date().timeIntervalSince1970)
if remainingTime < 0{ if remainingTime < 0{
self.countdownDisposedBag = .init()
self.countdownErrorCount += 1
if self.countdownErrorCount > 3 {
// 连续3次进入这个地方,那么就是有问题的,先不请求了
return
}
self.fus_requestInviteDataIndexGetInfo() self.fus_requestInviteDataIndexGetInfo()
return return
} }
self.countdownErrorCount = 0
self.remainingTime.accept(remainingTime) self.remainingTime.accept(remainingTime)
}) })
.disposed(by: countdownDisposedBag) .disposed(by: countdownDisposedBag)
......
...@@ -48,5 +48,6 @@ ...@@ -48,5 +48,6 @@
#import "FUSInviteDataMyselfGetInfoModel.h" #import "FUSInviteDataMyselfGetInfoModel.h"
#import "FUSInviteDataQrcodeGetModel.h" #import "FUSInviteDataQrcodeGetModel.h"
#import "FUSInviteRewardHttpHelper.h" #import "FUSInviteRewardHttpHelper.h"
#import "FUSInviteDataRecallGetInfoModel.h"
#endif /* FUSUserCenterOCHeader_h */ #endif /* FUSUserCenterOCHeader_h */
...@@ -416,18 +416,27 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -416,18 +416,27 @@ NS_ASSUME_NONNULL_BEGIN
/// 使者邀请-主页信息 /// 使者邀请-主页信息
+(NSString *)fus_URL_inviteDataIndexGetInfo; +(NSString *)fus_URL_inviteDataIndexGetInfo;
/// 使者邀请-召回首页
+(NSString *)fus_URL_inviteDataRecallGetInfo;
/// 使者邀请-奖励中心 /// 使者邀请-奖励中心
+(NSString *)fus_URL_inviteDataAwardGetList; +(NSString *)fus_URL_inviteDataAwardGetList;
/// 使者邀请-任务中心 /// 使者邀请-任务中心
+(NSString *)fus_URL_inviteDataTaskGetList; +(NSString *)fus_URL_inviteDataTaskGetList;
/// 使者邀请-召回任务列表
+(NSString *)fus_URL_inviteDataTaskRecallGetList;
/// 使者邀请-奖励领取 /// 使者邀请-奖励领取
+(NSString *)fus_URL_inviteDataAwardReceive; +(NSString *)fus_URL_inviteDataAwardReceive;
/// 使者邀请-任务领取 /// 使者邀请-任务领取
+(NSString *)fus_URL_inviteDataTaskReceive; +(NSString *)fus_URL_inviteDataTaskReceive;
/// 使者邀请-领取回归任务奖励
+(NSString *)fus_URL_inviteDataTaskRecallReceive;
/// 使者邀请-我的信息 /// 使者邀请-我的信息
+(NSString *)fus_URL_inviteDataMyselfGetInfo; +(NSString *)fus_URL_inviteDataMyselfGetInfo;
......
...@@ -675,6 +675,11 @@ ...@@ -675,6 +675,11 @@
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/index/getInfo"]; return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/index/getInfo"];
} }
/// 使者邀请-召回首页
+(NSString *)fus_URL_inviteDataRecallGetInfo{
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/recall/getInfo"];
}
/// 使者邀请-奖励中心 /// 使者邀请-奖励中心
+(NSString *)fus_URL_inviteDataAwardGetList{ +(NSString *)fus_URL_inviteDataAwardGetList{
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/award/getList"]; return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/award/getList"];
...@@ -685,6 +690,11 @@ ...@@ -685,6 +690,11 @@
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/task/getList"]; return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/task/getList"];
} }
/// 使者邀请-召回任务列表
+ (NSString *)fus_URL_inviteDataTaskRecallGetList{
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/task/recall/getList"];
}
/// 使者邀请-奖励领取 /// 使者邀请-奖励领取
+(NSString *)fus_URL_inviteDataAwardReceive{ +(NSString *)fus_URL_inviteDataAwardReceive{
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/award/receive"]; return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/award/receive"];
...@@ -695,6 +705,11 @@ ...@@ -695,6 +705,11 @@
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/task/receive"]; return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/task/receive"];
} }
/// 使者邀请-领取回归任务奖励
+(NSString *)fus_URL_inviteDataTaskRecallReceive{
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/task/recall/receive"];
}
/// 使者邀请-我的信息 /// 使者邀请-我的信息
+(NSString *)fus_URL_inviteDataMyselfGetInfo{ +(NSString *)fus_URL_inviteDataMyselfGetInfo{
return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/myself/getInfo"]; return [FUSConfig.sharedInstanced.pathConfigs apiUrl:@"/inviteData/myself/getInfo"];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment