diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index 99fa9060..9e78c6e8 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -246,6 +246,28 @@ 9BEE3D11278584FE00C83219 /* XPNobleCenterEmptyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BEE3D10278584FE00C83219 /* XPNobleCenterEmptyView.m */; }; 9BEE3D142785884A00C83219 /* XPNobleCenterResidueView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BEE3D132785884A00C83219 /* XPNobleCenterResidueView.m */; }; 9BEE3D1727858E5700C83219 /* XPNobleAuthorityDescView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BEE3D1627858E5700C83219 /* XPNobleAuthorityDescView.m */; }; + E800805A27FD34DE0055A8AB /* XPMineClanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E800805927FD34DE0055A8AB /* XPMineClanViewController.m */; }; + E800805D27FD34E90055A8AB /* XPMineGuildViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E800805C27FD34E90055A8AB /* XPMineGuildViewController.m */; }; + E800806227FD373D0055A8AB /* XPClanMemberTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E800806127FD373D0055A8AB /* XPClanMemberTableViewCell.m */; }; + E800806527FD37A20055A8AB /* XPGuildHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = E800806427FD37A20055A8AB /* XPGuildHeaderView.m */; }; + E800806827FD3B520055A8AB /* XPClanMenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = E800806727FD3B520055A8AB /* XPClanMenuView.m */; }; + E800806B27FD42B00055A8AB /* XPClanRoomCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E800806A27FD42B00055A8AB /* XPClanRoomCollectionViewCell.m */; }; + E800806E27FD6BF40055A8AB /* XPGuildPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E800806D27FD6BF40055A8AB /* XPGuildPresenter.m */; }; + E800807227FD6C3D0055A8AB /* XPClanPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E800807127FD6C3D0055A8AB /* XPClanPresenter.m */; }; + E800807627FD6D930055A8AB /* Api+Guild.m in Sources */ = {isa = PBXBuildFile; fileRef = E800807527FD6D930055A8AB /* Api+Guild.m */; }; + E800807927FD84560055A8AB /* ClanInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E800807827FD84560055A8AB /* ClanInfoModel.m */; }; + E800807C27FD84980055A8AB /* GuildInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E800807B27FD84980055A8AB /* GuildInfoModel.m */; }; + E800807F27FD859E0055A8AB /* ClanDetailInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E800807E27FD859E0055A8AB /* ClanDetailInfoModel.m */; }; + E800808527FD8FC20055A8AB /* ClanMemberDetailInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E800808427FD8FC20055A8AB /* ClanMemberDetailInfoModel.m */; }; + E800808827FDA5100055A8AB /* XPClanSectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E800808727FDA5100055A8AB /* XPClanSectionView.m */; }; + E801274027E323C800BAC3F2 /* XPRoomPKViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E801273F27E323C800BAC3F2 /* XPRoomPKViewController.m */; }; + E801274327E323E500BAC3F2 /* XPRoomPKPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E801274227E323E500BAC3F2 /* XPRoomPKPresenter.m */; }; + E801274727E3241700BAC3F2 /* Api+RoomPK.m in Sources */ = {isa = PBXBuildFile; fileRef = E801274627E3241700BAC3F2 /* Api+RoomPK.m */; }; + E801274B27E327DA00BAC3F2 /* XPRoomPKTypeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E801274A27E327DA00BAC3F2 /* XPRoomPKTypeTableViewCell.m */; }; + E801274E27E3280000BAC3F2 /* XPRoomPKVoteTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E801274D27E3280000BAC3F2 /* XPRoomPKVoteTableViewCell.m */; }; + E801275127E3281100BAC3F2 /* XPRoomPKTimeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E801275027E3281100BAC3F2 /* XPRoomPKTimeTableViewCell.m */; }; + E801275527E3326000BAC3F2 /* XPRoomPKUserView.m in Sources */ = {isa = PBXBuildFile; fileRef = E801275427E3326000BAC3F2 /* XPRoomPKUserView.m */; }; + E801275827E347FD00BAC3F2 /* RoomPKRecordModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E801275727E347FD00BAC3F2 /* RoomPKRecordModel.m */; }; E80487652717DDD9008595F2 /* XPRoomMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = E80487642717DDD9008595F2 /* XPRoomMenuItem.m */; }; E80CBDE627D0C1CF001E1EC2 /* HomeMenuSourceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E80CBDE527D0C1CF001E1EC2 /* HomeMenuSourceModel.m */; }; E80CBDEA27D0C53F001E1EC2 /* XPWeakTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = E80CBDE927D0C53F001E1EC2 /* XPWeakTimer.m */; }; @@ -1114,6 +1136,53 @@ 9BEE3D1627858E5700C83219 /* XPNobleAuthorityDescView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPNobleAuthorityDescView.m; sourceTree = ""; }; B66633E061B1B34177CD011C /* Pods-xplan-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-xplan-ios.release.xcconfig"; path = "Target Support Files/Pods-xplan-ios/Pods-xplan-ios.release.xcconfig"; sourceTree = ""; }; CACF623970097D653132D69A /* Pods_xplan_ios.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_xplan_ios.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E800805827FD34DE0055A8AB /* XPMineClanViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineClanViewController.h; sourceTree = ""; }; + E800805927FD34DE0055A8AB /* XPMineClanViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineClanViewController.m; sourceTree = ""; }; + E800805B27FD34E90055A8AB /* XPMineGuildViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineGuildViewController.h; sourceTree = ""; }; + E800805C27FD34E90055A8AB /* XPMineGuildViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineGuildViewController.m; sourceTree = ""; }; + E800806027FD373D0055A8AB /* XPClanMemberTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPClanMemberTableViewCell.h; sourceTree = ""; }; + E800806127FD373D0055A8AB /* XPClanMemberTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPClanMemberTableViewCell.m; sourceTree = ""; }; + E800806327FD37A20055A8AB /* XPGuildHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGuildHeaderView.h; sourceTree = ""; }; + E800806427FD37A20055A8AB /* XPGuildHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGuildHeaderView.m; sourceTree = ""; }; + E800806627FD3B520055A8AB /* XPClanMenuView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPClanMenuView.h; sourceTree = ""; }; + E800806727FD3B520055A8AB /* XPClanMenuView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPClanMenuView.m; sourceTree = ""; }; + E800806927FD42B00055A8AB /* XPClanRoomCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPClanRoomCollectionViewCell.h; sourceTree = ""; }; + E800806A27FD42B00055A8AB /* XPClanRoomCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPClanRoomCollectionViewCell.m; sourceTree = ""; }; + E800806C27FD6BF40055A8AB /* XPGuildPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGuildPresenter.h; sourceTree = ""; }; + E800806D27FD6BF40055A8AB /* XPGuildPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGuildPresenter.m; sourceTree = ""; }; + E800806F27FD6C1B0055A8AB /* XPGuildProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGuildProtocol.h; sourceTree = ""; }; + E800807027FD6C3D0055A8AB /* XPClanPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPClanPresenter.h; sourceTree = ""; }; + E800807127FD6C3D0055A8AB /* XPClanPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPClanPresenter.m; sourceTree = ""; }; + E800807327FD6C590055A8AB /* XPClanProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPClanProtocol.h; sourceTree = ""; }; + E800807427FD6D930055A8AB /* Api+Guild.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+Guild.h"; sourceTree = ""; }; + E800807527FD6D930055A8AB /* Api+Guild.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+Guild.m"; sourceTree = ""; }; + E800807727FD84560055A8AB /* ClanInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClanInfoModel.h; sourceTree = ""; }; + E800807827FD84560055A8AB /* ClanInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClanInfoModel.m; sourceTree = ""; }; + E800807A27FD84980055A8AB /* GuildInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuildInfoModel.h; sourceTree = ""; }; + E800807B27FD84980055A8AB /* GuildInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GuildInfoModel.m; sourceTree = ""; }; + E800807D27FD859E0055A8AB /* ClanDetailInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClanDetailInfoModel.h; sourceTree = ""; }; + E800807E27FD859E0055A8AB /* ClanDetailInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClanDetailInfoModel.m; sourceTree = ""; }; + E800808327FD8FC20055A8AB /* ClanMemberDetailInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClanMemberDetailInfoModel.h; sourceTree = ""; }; + E800808427FD8FC20055A8AB /* ClanMemberDetailInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClanMemberDetailInfoModel.m; sourceTree = ""; }; + E800808627FDA5100055A8AB /* XPClanSectionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPClanSectionView.h; sourceTree = ""; }; + E800808727FDA5100055A8AB /* XPClanSectionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPClanSectionView.m; sourceTree = ""; }; + E801273E27E323C800BAC3F2 /* XPRoomPKViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKViewController.h; sourceTree = ""; }; + E801273F27E323C800BAC3F2 /* XPRoomPKViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKViewController.m; sourceTree = ""; }; + E801274127E323E500BAC3F2 /* XPRoomPKPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKPresenter.h; sourceTree = ""; }; + E801274227E323E500BAC3F2 /* XPRoomPKPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKPresenter.m; sourceTree = ""; }; + E801274427E3240000BAC3F2 /* XPRoomPKProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKProtocol.h; sourceTree = ""; }; + E801274527E3241700BAC3F2 /* Api+RoomPK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+RoomPK.h"; sourceTree = ""; }; + E801274627E3241700BAC3F2 /* Api+RoomPK.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+RoomPK.m"; sourceTree = ""; }; + E801274927E327DA00BAC3F2 /* XPRoomPKTypeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKTypeTableViewCell.h; sourceTree = ""; }; + E801274A27E327DA00BAC3F2 /* XPRoomPKTypeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKTypeTableViewCell.m; sourceTree = ""; }; + E801274C27E3280000BAC3F2 /* XPRoomPKVoteTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKVoteTableViewCell.h; sourceTree = ""; }; + E801274D27E3280000BAC3F2 /* XPRoomPKVoteTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKVoteTableViewCell.m; sourceTree = ""; }; + E801274F27E3281100BAC3F2 /* XPRoomPKTimeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKTimeTableViewCell.h; sourceTree = ""; }; + E801275027E3281100BAC3F2 /* XPRoomPKTimeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKTimeTableViewCell.m; sourceTree = ""; }; + E801275327E3326000BAC3F2 /* XPRoomPKUserView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKUserView.h; sourceTree = ""; }; + E801275427E3326000BAC3F2 /* XPRoomPKUserView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKUserView.m; sourceTree = ""; }; + E801275627E347FD00BAC3F2 /* RoomPKRecordModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RoomPKRecordModel.h; sourceTree = ""; }; + E801275727E347FD00BAC3F2 /* RoomPKRecordModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoomPKRecordModel.m; sourceTree = ""; }; E80487632717DDD9008595F2 /* XPRoomMenuItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomMenuItem.h; sourceTree = ""; }; E80487642717DDD9008595F2 /* XPRoomMenuItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomMenuItem.m; sourceTree = ""; }; E80CBDE427D0C1CF001E1EC2 /* HomeMenuSourceModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeMenuSourceModel.h; sourceTree = ""; }; @@ -3267,6 +3336,216 @@ path = Pods; sourceTree = ""; }; + E800805227FD33950055A8AB /* Guild */ = { + isa = PBXGroup; + children = ( + E800805627FD33E90055A8AB /* Model */, + E800805727FD340F0055A8AB /* Api */, + E800805527FD33DF0055A8AB /* View */, + E800805427FD33CC0055A8AB /* Presenter */, + E800805327FD33C30055A8AB /* Protocol */, + ); + path = Guild; + sourceTree = ""; + }; + E800805327FD33C30055A8AB /* Protocol */ = { + isa = PBXGroup; + children = ( + E800806F27FD6C1B0055A8AB /* XPGuildProtocol.h */, + E800807327FD6C590055A8AB /* XPClanProtocol.h */, + ); + path = Protocol; + sourceTree = ""; + }; + E800805427FD33CC0055A8AB /* Presenter */ = { + isa = PBXGroup; + children = ( + E800806C27FD6BF40055A8AB /* XPGuildPresenter.h */, + E800806D27FD6BF40055A8AB /* XPGuildPresenter.m */, + E800807027FD6C3D0055A8AB /* XPClanPresenter.h */, + E800807127FD6C3D0055A8AB /* XPClanPresenter.m */, + ); + path = Presenter; + sourceTree = ""; + }; + E800805527FD33DF0055A8AB /* View */ = { + isa = PBXGroup; + children = ( + E800805F27FD36EB0055A8AB /* SubViews */, + E800805E27FD36E30055A8AB /* Cell */, + E800805827FD34DE0055A8AB /* XPMineClanViewController.h */, + E800805927FD34DE0055A8AB /* XPMineClanViewController.m */, + E800805B27FD34E90055A8AB /* XPMineGuildViewController.h */, + E800805C27FD34E90055A8AB /* XPMineGuildViewController.m */, + ); + path = View; + sourceTree = ""; + }; + E800805627FD33E90055A8AB /* Model */ = { + isa = PBXGroup; + children = ( + E800807D27FD859E0055A8AB /* ClanDetailInfoModel.h */, + E800807E27FD859E0055A8AB /* ClanDetailInfoModel.m */, + E800807727FD84560055A8AB /* ClanInfoModel.h */, + E800807827FD84560055A8AB /* ClanInfoModel.m */, + E800807A27FD84980055A8AB /* GuildInfoModel.h */, + E800807B27FD84980055A8AB /* GuildInfoModel.m */, + E800808327FD8FC20055A8AB /* ClanMemberDetailInfoModel.h */, + E800808427FD8FC20055A8AB /* ClanMemberDetailInfoModel.m */, + ); + path = Model; + sourceTree = ""; + }; + E800805727FD340F0055A8AB /* Api */ = { + isa = PBXGroup; + children = ( + E800807427FD6D930055A8AB /* Api+Guild.h */, + E800807527FD6D930055A8AB /* Api+Guild.m */, + ); + path = Api; + sourceTree = ""; + }; + E800805E27FD36E30055A8AB /* Cell */ = { + isa = PBXGroup; + children = ( + E800806027FD373D0055A8AB /* XPClanMemberTableViewCell.h */, + E800806127FD373D0055A8AB /* XPClanMemberTableViewCell.m */, + E800806927FD42B00055A8AB /* XPClanRoomCollectionViewCell.h */, + E800806A27FD42B00055A8AB /* XPClanRoomCollectionViewCell.m */, + ); + path = Cell; + sourceTree = ""; + }; + E800805F27FD36EB0055A8AB /* SubViews */ = { + isa = PBXGroup; + children = ( + E800806327FD37A20055A8AB /* XPGuildHeaderView.h */, + E800806427FD37A20055A8AB /* XPGuildHeaderView.m */, + E800806627FD3B520055A8AB /* XPClanMenuView.h */, + E800806727FD3B520055A8AB /* XPClanMenuView.m */, + E800808627FDA5100055A8AB /* XPClanSectionView.h */, + E800808727FDA5100055A8AB /* XPClanSectionView.m */, + ); + path = SubViews; + sourceTree = ""; + }; + E801273827E322D700BAC3F2 /* RoomPK */ = { + isa = PBXGroup; + children = ( + E801273D27E3230F00BAC3F2 /* Model */, + E801273C27E3230400BAC3F2 /* Api */, + E801273B27E322FE00BAC3F2 /* View */, + E801273A27E322F500BAC3F2 /* Presenter */, + E801273927E322E900BAC3F2 /* Protocol */, + ); + path = RoomPK; + sourceTree = ""; + }; + E801273927E322E900BAC3F2 /* Protocol */ = { + isa = PBXGroup; + children = ( + E801274427E3240000BAC3F2 /* XPRoomPKProtocol.h */, + E8664EE027E45EE6000171BA /* XPRoomPKRecordProtocol.h */, + ); + path = Protocol; + sourceTree = ""; + }; + E801273A27E322F500BAC3F2 /* Presenter */ = { + isa = PBXGroup; + children = ( + E801274127E323E500BAC3F2 /* XPRoomPKPresenter.h */, + E801274227E323E500BAC3F2 /* XPRoomPKPresenter.m */, + E8664EDD27E45EC7000171BA /* XPRoomPKRecordPresenter.h */, + E8664EDE27E45EC7000171BA /* XPRoomPKRecordPresenter.m */, + ); + path = Presenter; + sourceTree = ""; + }; + E801273B27E322FE00BAC3F2 /* View */ = { + isa = PBXGroup; + children = ( + E801275227E3321C00BAC3F2 /* SubViews */, + E801274827E3278E00BAC3F2 /* Cell */, + E801273E27E323C800BAC3F2 /* XPRoomPKViewController.h */, + E801273F27E323C800BAC3F2 /* XPRoomPKViewController.m */, + E8664ED427E434D5000171BA /* XPRoomPKRecordViewController.h */, + E8664ED527E434D5000171BA /* XPRoomPKRecordViewController.m */, + E81AF32327F1D5B8003B9E43 /* XPRoomPKProgressView.h */, + E81AF32427F1D5B8003B9E43 /* XPRoomPKProgressView.m */, + E80A086327F318620027B30C /* XPRoomPKPlayingView.h */, + E80A086427F318620027B30C /* XPRoomPKPlayingView.m */, + E84843AD27F59E7E0050D365 /* XPRoomPKResultView.h */, + E84843AE27F59E7E0050D365 /* XPRoomPKResultView.m */, + ); + path = View; + sourceTree = ""; + }; + E801273C27E3230400BAC3F2 /* Api */ = { + isa = PBXGroup; + children = ( + E801274527E3241700BAC3F2 /* Api+RoomPK.h */, + E801274627E3241700BAC3F2 /* Api+RoomPK.m */, + ); + path = Api; + sourceTree = ""; + }; + E801273D27E3230F00BAC3F2 /* Model */ = { + isa = PBXGroup; + children = ( + E801275627E347FD00BAC3F2 /* RoomPKRecordModel.h */, + E801275727E347FD00BAC3F2 /* RoomPKRecordModel.m */, + E8664EE427E482EF000171BA /* RoomPKTeamModel.h */, + E8664EE527E482EF000171BA /* RoomPKTeamModel.m */, + E8664ED127E4258A000171BA /* RoomPKTimeItemModel.h */, + E8664ED227E4258A000171BA /* RoomPKTimeItemModel.m */, + E8A88D2B27E81E8700CA8837 /* RoomPKChooseUserModel.h */, + E8A88D2C27E81E8700CA8837 /* RoomPKChooseUserModel.m */, + E8A88D2E27E85EEA00CA8837 /* RoomPKInfoModel.h */, + E8A88D2F27E85EEA00CA8837 /* RoomPKInfoModel.m */, + E80A086027F2AC190027B30C /* RoomPKDetailInfoModel.h */, + E80A086127F2AC190027B30C /* RoomPKDetailInfoModel.m */, + ); + path = Model; + sourceTree = ""; + }; + E801274827E3278E00BAC3F2 /* Cell */ = { + isa = PBXGroup; + children = ( + E801274927E327DA00BAC3F2 /* XPRoomPKTypeTableViewCell.h */, + E801274A27E327DA00BAC3F2 /* XPRoomPKTypeTableViewCell.m */, + E801274C27E3280000BAC3F2 /* XPRoomPKVoteTableViewCell.h */, + E801274D27E3280000BAC3F2 /* XPRoomPKVoteTableViewCell.m */, + E801274F27E3281100BAC3F2 /* XPRoomPKTimeTableViewCell.h */, + E801275027E3281100BAC3F2 /* XPRoomPKTimeTableViewCell.m */, + E8664ED727E4355C000171BA /* XPRoomPKRecordTableViewCell.h */, + E8664ED827E4355C000171BA /* XPRoomPKRecordTableViewCell.m */, + E8664EDA27E43632000171BA /* XPRoomPKEmptyTableViewCell.h */, + E8664EDB27E43632000171BA /* XPRoomPKEmptyTableViewCell.m */, + E8A88D2827E81C8600CA8837 /* XPRoomPKUserCollectionViewCell.h */, + E8A88D2927E81C8600CA8837 /* XPRoomPKUserCollectionViewCell.m */, + ); + path = Cell; + sourceTree = ""; + }; + E801275227E3321C00BAC3F2 /* SubViews */ = { + isa = PBXGroup; + children = ( + E801275327E3326000BAC3F2 /* XPRoomPKUserView.h */, + E801275427E3326000BAC3F2 /* XPRoomPKUserView.m */, + E8664ECE27E42238000171BA /* XPRoomPKTimePickerView.h */, + E8664ECF27E42238000171BA /* XPRoomPKTimePickerView.m */, + E8664EE127E47711000171BA /* XPRoomPKRecordNickView.h */, + E8664EE227E47711000171BA /* XPRoomPKRecordNickView.m */, + E8A88D2527E8193400CA8837 /* XPRoomPKSelectUserView.h */, + E8A88D2627E8193400CA8837 /* XPRoomPKSelectUserView.m */, + E81AF32627F1EE69003B9E43 /* XPRoomPKPanelUserView.h */, + E81AF32727F1EE69003B9E43 /* XPRoomPKPanelUserView.m */, + E84843B027F5A0740050D365 /* XPRomPKResultTitleLabel.h */, + E84843B127F5A0740050D365 /* XPRomPKResultTitleLabel.m */, + ); + path = SubViews; + sourceTree = ""; + }; E804875F2717DD70008595F2 /* Model */ = { isa = PBXGroup; children = ( @@ -5060,6 +5339,7 @@ E8E70D7126F2EB4900F03460 /* View */ = { isa = PBXGroup; children = ( + E800805227FD33950055A8AB /* Guild */, E896EF912771AA6C00AD2CC1 /* Friend */, 9BC5C8EA277AFEDC007C8719 /* Noble */, 9B92A34B2798068700AD168F /* SkillCard */, @@ -5429,6 +5709,7 @@ E88B5CB226FB1CFF00DA9178 /* XPMineTeenagerProtocol.h in Sources */, 9BD9A18027A0EFC7004186FE /* XPMineVisitorTableViewCell.m in Sources */, E824546626F5FF6000BE8163 /* XPMineResetPayPasswordProtocol.h in Sources */, + E800807227FD6C3D0055A8AB /* XPClanPresenter.m in Sources */, E89DA66427005932008483C1 /* XPIAPHelper.m in Sources */, E824545E26F5EF2200BE8163 /* XPMineVerifIdentityProtocol.h in Sources */, E824545326F5CEAD00BE8163 /* XPMineModifPayProtocol.h in Sources */, @@ -5478,6 +5759,8 @@ E8C6FFD42754AA87004DC9F0 /* XPNoteView.m in Sources */, 9B2EA7C628041EFC00ED17BF /* XPAnchorPkPanelView.m in Sources */, E84150BB27747BAF00A7F548 /* XPFirstRechargePresenter.m in Sources */, + E8A88D2D27E81E8700CA8837 /* RoomPKChooseUserModel.m in Sources */, + E800806B27FD42B00055A8AB /* XPClanRoomCollectionViewCell.m in Sources */, 9BEE3D1727858E5700C83219 /* XPNobleAuthorityDescView.m in Sources */, E82325F9274E2E42003A3332 /* Api+UserCard.m in Sources */, 9BD9A17C27A0EE24004186FE /* XPMineVisitorViewController.m in Sources */, @@ -5513,6 +5796,7 @@ E82325F5274E2E09003A3332 /* XPUserCardPresenter.m in Sources */, E880B39E278BD49E00A83B0D /* XPAcrossRoomPKViewController.m in Sources */, E8AC723D26F4B6AA007D6E91 /* XPLoginBindPhoneResultViewController.m in Sources */, + E800806527FD37A20055A8AB /* XPGuildHeaderView.m in Sources */, 9B2A12D52783EEC700CED41B /* XPNobleCenterTableHeadView.m in Sources */, 9BEE3D11278584FE00C83219 /* XPNobleCenterEmptyView.m in Sources */, 9BCF585F27995363008401A4 /* XPSkillCardSelectPropView.m in Sources */, @@ -5577,6 +5861,7 @@ E82325E6274CCAFA003A3332 /* XPShareInfoModel.m in Sources */, 189DD55A26DE39D200AB55B1 /* BaseMvpPresenter.m in Sources */, E8F9168E27ECA69500F10D8F /* HomeLittleGameRoomModel.m in Sources */, + E800805D27FD34E90055A8AB /* XPMineGuildViewController.m in Sources */, 9BC5C8F9277B02EA007C8719 /* Api+NobleCenter.m in Sources */, 180806D827293794001FD836 /* NSObject+MJExtension.m in Sources */, E88863D3278ED4C0004BCFAB /* Timestamp.m in Sources */, @@ -5609,6 +5894,7 @@ E8C6FFCC27548120004DC9F0 /* Api+Home.m in Sources */, 186A534E26FC6ED900D67B2C /* TTPopupService.m in Sources */, 18A61BD7274F7F6900A09A54 /* NetImageConfig.m in Sources */, + E800806E27FD6BF40055A8AB /* XPGuildPresenter.m in Sources */, E8C21501274B76F60079E6BF /* XPRoomAnimationHitView.m in Sources */, E8AC722426F47E5E007D6E91 /* XPMineFeedbackViewController.m in Sources */, E87E914E2796678D00A7B3F2 /* XPMineDressEmptyTableViewCell.m in Sources */, @@ -5641,6 +5927,7 @@ E8C6FFD027548256004DC9F0 /* XPHomeListCollectionViewCell.m in Sources */, E84BF7DD277C765400EF8877 /* XPRoomRoleEmptyTableViewCell.m in Sources */, E8E5E1A027C36E3F00F457D8 /* HomeBannerInfoModel.m in Sources */, + E800807F27FD859E0055A8AB /* ClanDetailInfoModel.m in Sources */, E8EEB8F426FC2050007C6EBA /* SDBrowserImageView.m in Sources */, E88863CC278EC336004BCFAB /* AcrossRoomPKPrizeModel.m in Sources */, E824544626F5934700BE8163 /* XPMinePayPwdPresenter.m in Sources */, @@ -5665,6 +5952,7 @@ E8E5E19D27C36C3500F457D8 /* XPHomeMenuTableViewCell.m in Sources */, E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */, E81C27A026EEF83D0031E639 /* XPHtmlUrl.m in Sources */, + E800807C27FD84980055A8AB /* GuildInfoModel.m in Sources */, E8A03DF0276303D40098D9EA /* XPCandyTreeRankTableViewCell.m in Sources */, 9BCF58532798FDA1008401A4 /* XPSkillCardModel.m in Sources */, 18E7B1B726E8B2D10064BC9B /* Api+Main.m in Sources */, @@ -5689,6 +5977,7 @@ 9B2EA7C02804037700ED17BF /* AnchorPKStageView.m in Sources */, E811FFF72742367B00918544 /* XPGiftEmptyCollectionViewCell.m in Sources */, E8A86E0827BA38DB001C21F9 /* UIImage+RW.m in Sources */, + E800807927FD84560055A8AB /* ClanInfoModel.m in Sources */, 189DD67E26E1FD8900AB55B1 /* UIImage+Utils.m in Sources */, E824545626F5E51900BE8163 /* XPMineVerifIdentityViewController.m in Sources */, E82D5C73276AE94800858D6D /* CarModel.m in Sources */, @@ -5729,10 +6018,12 @@ E8A03DEC276301EF0098D9EA /* XPCandyTreeRankView.m in Sources */, E880B3A1278BD60C00A83B0D /* XPAcrossRoomPKSelectRoomView.m in Sources */, E8D48250278D68BA003C1D08 /* XPAcrpssRoomPKPanelView.m in Sources */, + E800807627FD6D930055A8AB /* Api+Guild.m in Sources */, 18F404C3276098F100A6C548 /* Api+Message.m in Sources */, E8C6FFED27550CC2004DC9F0 /* HomeSearchResultModel.m in Sources */, 9BB549592782E6A30090CD26 /* XPNobleCenterPresenter.m in Sources */, 9B85B6D7279FDABA00A0A1AC /* XPUserCardSkillCardView.m in Sources */, + E800808827FDA5100055A8AB /* XPClanSectionView.m in Sources */, 9B33E3CB27D85379003B0E62 /* UploadFile.m in Sources */, E8AEAEF327141C7C0017FCE0 /* XPRoomMessageContainerView.m in Sources */, 9B1B729D28002264003FACE9 /* XPMineAnchorFansTeamModel.m in Sources */, @@ -5780,6 +6071,7 @@ 189DD56526DE465A00AB55B1 /* LoginViewController.m in Sources */, E824544B26F5BBB800BE8163 /* XPMineModifPayPwdViewController.m in Sources */, E81C1B2227705F950020D1E4 /* Api+ArrangeMic.m in Sources */, + E800805A27FD34DE0055A8AB /* XPMineClanViewController.m in Sources */, E8ACEFF527C8EF0500F66D1A /* XPHomeHotRoomViewController.m in Sources */, E81EF6DC279AB5CC00FF3EDE /* XPLittleGameRoomOpenView.m in Sources */, E84150C227747BF700A7F548 /* FirstRechargeModel.m in Sources */, @@ -5817,6 +6109,7 @@ 18C17A5D26F338F300C48E11 /* XplanFBFlutterViewContainer.m in Sources */, E89DA67527009ACD008483C1 /* XPMineRechargeNavView.m in Sources */, 1808072D2731598F001FD836 /* XPNetImageYYLabel.m in Sources */, + E800806827FD3B520055A8AB /* XPClanMenuView.m in Sources */, E896EFAF2771AF0F00AD2CC1 /* XPMineFriendEmptyTableViewCell.m in Sources */, 18486213271EA9DA005FC5DC /* RtcManager.m in Sources */, 186A536926FC6F2E00D67B2C /* XPShareView.m in Sources */, @@ -5907,6 +6200,8 @@ E80CBDE627D0C1CF001E1EC2 /* HomeMenuSourceModel.m in Sources */, 189DD75026E21D9000AB55B1 /* GCDHelper.m in Sources */, E82D5C76276AEB5100858D6D /* NameplateModel.m in Sources */, + E800806227FD373D0055A8AB /* XPClanMemberTableViewCell.m in Sources */, + E81AF32827F1EE69003B9E43 /* XPRoomPKPanelUserView.m in Sources */, E84150BF27747BD300A7F548 /* Api+FirstRecharge.m in Sources */, E84B0E422727EE0A008818C6 /* XPRoomMessageHeaderView.m in Sources */, E8C6FFDD2754CF5D004DC9F0 /* HomeRecommendRoomModel.m in Sources */, @@ -5959,6 +6254,7 @@ 9BA8A47227C5D590000365A3 /* XPVoiceCardCircleLayer.m in Sources */, 9B33E3D427D8A1A4003B0E62 /* XPSkillCardPlayerManager.m in Sources */, 9BAA5FF0277A23F4007453F3 /* XPPermissionsViewController.m in Sources */, + E800808527FD8FC20055A8AB /* ClanMemberDetailInfoModel.m in Sources */, E8412FA92779C2ED006E1101 /* XPRoomSettingItemModel.m in Sources */, 9B92A3692798145000AD168F /* XPSkillCardTypeModel.m in Sources */, 189DD58F26DF97E700AB55B1 /* LoginPresenter.m in Sources */, diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/Contents.json b/xplan-ios/Assets.xcassets/Mine/Guild/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Mine/Guild/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/Contents.json b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/Contents.json new file mode 100644 index 00000000..b3351f63 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_guild_clan_header_anchor_income_bg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_guild_clan_header_anchor_income_bg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/mine_guild_clan_header_anchor_income_bg@2x.png b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/mine_guild_clan_header_anchor_income_bg@2x.png new file mode 100644 index 00000000..75d1b43d Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/mine_guild_clan_header_anchor_income_bg@2x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/mine_guild_clan_header_anchor_income_bg@3x.png b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/mine_guild_clan_header_anchor_income_bg@3x.png new file mode 100644 index 00000000..477e151f Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_anchor_income_bg.imageset/mine_guild_clan_header_anchor_income_bg@3x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/Contents.json b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/Contents.json new file mode 100644 index 00000000..2f3f48f3 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_guild_clan_header_bg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_guild_clan_header_bg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/mine_guild_clan_header_bg@2x.png b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/mine_guild_clan_header_bg@2x.png new file mode 100644 index 00000000..96636176 Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/mine_guild_clan_header_bg@2x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/mine_guild_clan_header_bg@3x.png b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/mine_guild_clan_header_bg@3x.png new file mode 100644 index 00000000..7704dea0 Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_bg.imageset/mine_guild_clan_header_bg@3x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/Contents.json b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/Contents.json new file mode 100644 index 00000000..72cbdce2 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_guild_clan_header_income_bg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_guild_clan_header_income_bg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/mine_guild_clan_header_income_bg@2x.png b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/mine_guild_clan_header_income_bg@2x.png new file mode 100644 index 00000000..a5bc218f Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/mine_guild_clan_header_income_bg@2x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/mine_guild_clan_header_income_bg@3x.png b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/mine_guild_clan_header_income_bg@3x.png new file mode 100644 index 00000000..50a2ef26 Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_income_bg.imageset/mine_guild_clan_header_income_bg@3x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/Contents.json b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/Contents.json new file mode 100644 index 00000000..06aad502 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_guild_clan_header_superadmin_set_bg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_guild_clan_header_superadmin_set_bg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/mine_guild_clan_header_superadmin_set_bg@2x.png b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/mine_guild_clan_header_superadmin_set_bg@2x.png new file mode 100644 index 00000000..5249ce45 Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/mine_guild_clan_header_superadmin_set_bg@2x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/mine_guild_clan_header_superadmin_set_bg@3x.png b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/mine_guild_clan_header_superadmin_set_bg@3x.png new file mode 100644 index 00000000..70b6f160 Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/Guild/mine_guild_clan_header_superadmin_set_bg.imageset/mine_guild_clan_header_superadmin_set_bg@3x.png differ diff --git a/xplan-ios/Main/Mine/Model/XPMineItemModel.h b/xplan-ios/Main/Mine/Model/XPMineItemModel.h index 01f354fb..2ae7dda1 100644 --- a/xplan-ios/Main/Mine/Model/XPMineItemModel.h +++ b/xplan-ios/Main/Mine/Model/XPMineItemModel.h @@ -31,6 +31,8 @@ typedef NS_ENUM(NSInteger, XPMineItemType) { XPMineItemType_Skill_Card, ///技能卡 XPMineItemType_Visitor,///访客记录 XPMineItemType_FansTeam,///粉丝团 + ///我的公会 + XPMineItemType_My_Guild, }; diff --git a/xplan-ios/Main/Mine/Presenter/XPMinePresent.m b/xplan-ios/Main/Mine/Presenter/XPMinePresent.m index c19e0828..9436f447 100644 --- a/xplan-ios/Main/Mine/Presenter/XPMinePresent.m +++ b/xplan-ios/Main/Mine/Presenter/XPMinePresent.m @@ -74,6 +74,11 @@ realNameItem.itemImageName = @"mine_normal_real_name_authentic"; realNameItem.type = XPMineItemType_Real_Name_Authentic; realNameItem.cornerType = UIRectCornerBottomLeft | UIRectCornerBottomRight; + + XPMineItemModel * guildItem = [[XPMineItemModel alloc] init]; + guildItem.itemName = @"我的工会"; + guildItem.itemImageName = @"mine_normal_my_guild"; + guildItem.type = XPMineItemType_My_Guild; XPMineItemModel * visitorItem = [[XPMineItemModel alloc] init]; visitorItem.itemName = @"访客记录"; @@ -86,8 +91,8 @@ fansTeamItem.itemName = @"粉丝团"; fansTeamItem.itemImageName = @"mine_normal_anchor_fansTeam"; fansTeamItem.type = XPMineItemType_FansTeam; - - NSArray * array = @[myRoomItem,teenagerItem, myDressUp, inviteFriend, visitorItem, fansTeamItem, realNameItem]; + NSArray * array = @[myRoomItem,teenagerItem, myDressUp, guildItem, inviteFriend, visitorItem,fansTeamItem, realNameItem]; + [[self getView] onGetNormalItemsSuccess:array]; } diff --git a/xplan-ios/Main/Mine/View/Guild/Api/Api+Guild.h b/xplan-ios/Main/Mine/View/Guild/Api/Api+Guild.h new file mode 100644 index 00000000..c4c4753f --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Api/Api+Guild.h @@ -0,0 +1,39 @@ +// +// Api+Guild.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "Api.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface Api (Guild) + +/// 获取家族详情 +/// @param completion 完成 +/// @param uid 族长的uid ++ (void)getClanDetailInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid; + +/// 获取工会中房间列表 +/// @param completion 完成 +/// @param clanId 工会的id ++ (void)getRoomListInClan:(HttpRequestHelperCompletion)completion clanId:(NSString *)clanId; + +/// 工会成员列表 +/// @param completion 完成 +/// @param uid 用户的uid +/// @param page 当前的页数 +/// @param pageSize 每页多少个 ++ (void)getClanMemberList:(HttpRequestHelperCompletion)completion uid:(NSString *)uid page:(NSString *)page pageSize:(NSString *)pageSize; + +/// 房间成员列表 +/// @param completion 完成 +/// @param hallId 用户的uid +/// @param page 当前的页数 +/// @param pageSize 每页多少个 ++ (void)getGuildMemberList:(HttpRequestHelperCompletion)completion hallId:(NSString *)hallId page:(NSString *)page pageSize:(NSString *)pageSize; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/Api/Api+Guild.m b/xplan-ios/Main/Mine/View/Guild/Api/Api+Guild.m new file mode 100644 index 00000000..17984a11 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Api/Api+Guild.m @@ -0,0 +1,46 @@ +// +// Api+Guild.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "Api+Guild.h" + +@implementation Api (Guild) + +/// 获取家族详情 +/// @param completion 完成 +/// @param uid 族长的uid ++ (void)getClanDetailInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid { + [self makeRequest:@"clan/getUserHallAndClan" method:HttpRequestHelperMethodGET completion:completion, __FUNCTION__, uid, nil]; +} + +/// 获取工会中房间列表 +/// @param completion 完成 +/// @param clanId 工会的id ++ (void)getRoomListInClan:(HttpRequestHelperCompletion)completion clanId:(NSString *)clanId { + [self makeRequest:@"clan/listHall" method:HttpRequestHelperMethodGET completion:completion, __FUNCTION__,clanId, nil]; +} + +/// 工会成员列表 +/// @param completion 完成 +/// @param uid 用户的uid +/// @param page 当前的页数 +/// @param pageSize 每页多少个 ++ (void)getClanMemberList:(HttpRequestHelperCompletion)completion uid:(NSString *)uid page:(NSString *)page pageSize:(NSString *)pageSize { + [self makeRequest:@"clan/listMember" method:HttpRequestHelperMethodGET completion:completion, __FUNCTION__, uid, page, pageSize,nil]; +} + +/// 房间成员列表 +/// @param completion 完成 +/// @param hallId 用户的uid +/// @param page 当前的页数 +/// @param pageSize 每页多少个 ++ (void)getGuildMemberList:(HttpRequestHelperCompletion)completion hallId:(NSString *)hallId page:(NSString *)page pageSize:(NSString *)pageSize { + [self makeRequest:@"hall/getAllMembers" method:HttpRequestHelperMethodGET completion:completion, __FUNCTION__, hallId, page, pageSize,nil]; +} + + + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/Model/ClanDetailInfoModel.h b/xplan-ios/Main/Mine/View/Guild/Model/ClanDetailInfoModel.h new file mode 100644 index 00000000..1ff16b25 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Model/ClanDetailInfoModel.h @@ -0,0 +1,22 @@ +// +// ClanDetailInfoModel.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import +#import "ClanInfoModel.h" +#import "GuildInfoModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface ClanDetailInfoModel : NSObject +///家族信息 +@property (nonatomic,strong) ClanInfoModel *clan; +///公会信息 +@property (nonatomic,strong) GuildInfoModel *hall; +///当前用户是否是公会超管 +@property (nonatomic, assign) BOOL manageHall; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/Model/ClanDetailInfoModel.m b/xplan-ios/Main/Mine/View/Guild/Model/ClanDetailInfoModel.m new file mode 100644 index 00000000..49b576d1 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Model/ClanDetailInfoModel.m @@ -0,0 +1,12 @@ +// +// ClanDetailInfoModel.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "ClanDetailInfoModel.h" + +@implementation ClanDetailInfoModel + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/Model/ClanInfoModel.h b/xplan-ios/Main/Mine/View/Guild/Model/ClanInfoModel.h new file mode 100644 index 00000000..ab47c391 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Model/ClanInfoModel.h @@ -0,0 +1,37 @@ +// +// ClanInfoModel.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ClanInfoModel : NSObject +///家族id +@property (nonatomic, copy) NSString *cid; +/// 族长 uid +@property (nonatomic, copy) NSString *elderUid; +/// 族长音游号 +@property (nonatomic, copy) NSString *elderErbanNo; +/// 族长 名称 +@property (nonatomic, copy) NSString *elderName; +/// 家族 名称 +@property (nonatomic, copy) NSString *name; +///家族头像 +@property (nonatomic, copy) NSString *avatar; +///家族成员数量 +@property (nonatomic, strong) NSNumber *clanMemberNum; +///家族公会数量 +@property (nonatomic, strong) NSNumber *clanHallNum; +///是否是家族族长 +@property (nonatomic, assign) BOOL userIsElder; +///家族等级图片 +@property (nonatomic, copy) NSString *levelIcon; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/Model/ClanInfoModel.m b/xplan-ios/Main/Mine/View/Guild/Model/ClanInfoModel.m new file mode 100644 index 00000000..5f1113ed --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Model/ClanInfoModel.m @@ -0,0 +1,15 @@ +// +// ClanInfoModel.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "ClanInfoModel.h" + +@implementation ClanInfoModel + ++ (NSDictionary *)replacedKeyFromPropertyName { + return @{@"cid":@"id"}; +} +@end diff --git a/xplan-ios/Main/Mine/View/Guild/Model/ClanMemberDetailInfoModel.h b/xplan-ios/Main/Mine/View/Guild/Model/ClanMemberDetailInfoModel.h new file mode 100644 index 00000000..e979e8fc --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Model/ClanMemberDetailInfoModel.h @@ -0,0 +1,43 @@ +// +// ClanMemberInfoModel.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import +#import "XPEnum.h" +#import "GuildInfoModel.h" +NS_ASSUME_NONNULL_BEGIN + +@class ClanMemberInfoModel; +@interface ClanMemberDetailInfoModel : NSObject +///总的个数 +@property (nonatomic,assign) NSInteger count; +///用户的实体 +@property (nonatomic,strong) NSArray *members; +@end + +@interface ClanMemberInfoModel : NSObject +///头像 +@property (nonatomic,copy) NSString *avatar; +///平台id +@property (nonatomic,copy) NSString *erbanNo; +///性别 +@property (nonatomic,assign) GenderType gender; +///公会名称 +@property (nonatomic, copy) NSString *hallName; +///昵称 +@property (nonatomic,copy) NSString *nick; +///类型 +@property (nonatomic,assign) GuildRoleType roleType; +///用户的uid +@property (nonatomic,copy) NSString *uid; +//用户等级 +@property (nonatomic, copy) NSString *experUrl; +///魅力等级 +@property (nonatomic, copy) NSString *charmUrl; +@end + + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/Model/ClanMemberDetailInfoModel.m b/xplan-ios/Main/Mine/View/Guild/Model/ClanMemberDetailInfoModel.m new file mode 100644 index 00000000..efcab60f --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Model/ClanMemberDetailInfoModel.m @@ -0,0 +1,25 @@ +// +// ClanMemberInfoModel.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "ClanMemberDetailInfoModel.h" + +@implementation ClanMemberDetailInfoModel ++ (NSDictionary *)objectClassInArray { + return @{@"members": ClanMemberInfoModel.class}; +} +@end + + +@implementation ClanMemberInfoModel + ++ (NSDictionary *)replacedKeyFromPropertyName { + return @{@"experUrl":@"userLevelVo.experUrl", + @"charmUrl":@"userLevelVo.charmUrl" + }; +} + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/Model/GuildInfoModel.h b/xplan-ios/Main/Mine/View/Guild/Model/GuildInfoModel.h new file mode 100644 index 00000000..bf17539a --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Model/GuildInfoModel.h @@ -0,0 +1,46 @@ +// +// GuildInfoModel.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSInteger, GuildRoleType) { + ///会长 + GuildRoleType_Owner = 1, + ///管理 + GuildRoleType_Manager, + ///普通成员 + GuildRoleType_Normal, + ///族长 + GuildRoleType_Elder, + ///组长 房主 + GuildRoleType_Elder_Owner, + ///超管 + GuildRoleType_Super_Admin +}; + +@interface GuildInfoModel : NSObject +///模厅id +@property (nonatomic, copy) NSString *hallId; +/// 模厅名称 +@property (nonatomic, copy) NSString *hallName; +///角色类型 +@property (nonatomic, assign) GuildRoleType roleType; +/// 厅主的 uid +@property (nonatomic, copy) NSString *ownerUid; +/// 厅主的 音游号 +@property (nonatomic, copy) NSString *ownerErbanNo; +/// 模厅名称 +@property (nonatomic, copy) NSString *ownerNick; +/// 模厅头像 +@property (nonatomic, copy) NSString *ownerAvatar; +/// 模厅成员数量 +@property (nonatomic, strong) NSNumber *memberCount; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/Model/GuildInfoModel.m b/xplan-ios/Main/Mine/View/Guild/Model/GuildInfoModel.m new file mode 100644 index 00000000..46eb8083 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Model/GuildInfoModel.m @@ -0,0 +1,12 @@ +// +// GuildInfoModel.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "GuildInfoModel.h" + +@implementation GuildInfoModel + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/Presenter/XPClanPresenter.h b/xplan-ios/Main/Mine/View/Guild/Presenter/XPClanPresenter.h new file mode 100644 index 00000000..ba75a68a --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Presenter/XPClanPresenter.h @@ -0,0 +1,28 @@ +// +// XPClanPresenter.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "BaseMvpPresenter.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XPClanPresenter : BaseMvpPresenter +/// 获取家族相亲的信息 +/// @param uid 用户的uid +- (void)getClanDetailInfo:(NSString *)uid; + +/// 获取家族成员的列表 +/// @param uid 族长的uid +/// @param page 当前的页数 +/// @param pageSize 一页多少个 +- (void)getClanMemberList:(NSString *)uid page:(int)page pageSize:(NSInteger)pageSize state:(int)state; + +/// 获取当前家族房间的列表 +/// @param clanId 族长的id +- (void)getClanRoomList:(NSString *)clanId; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/Presenter/XPClanPresenter.m b/xplan-ios/Main/Mine/View/Guild/Presenter/XPClanPresenter.m new file mode 100644 index 00000000..4c690b65 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Presenter/XPClanPresenter.m @@ -0,0 +1,47 @@ +// +// XPClanPresenter.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "XPClanPresenter.h" +#import "XPClanProtocol.h" +#import "Api+Guild.h" +#import "ClanDetailInfoModel.h" +#import "ClanMemberDetailInfoModel.h" + +@implementation XPClanPresenter + +/// 获取家族相亲的信息 +/// @param uid 用户的uid +- (void)getClanDetailInfo:(NSString *)uid { + [Api getClanDetailInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + ClanDetailInfoModel * clanDetailInfo = [ClanDetailInfoModel modelWithDictionary:data.data]; + [[self getView] getClanDetailInfoSuccess:clanDetailInfo]; + }] uid:uid]; +} + +/// 获取家族成员的列表 +/// @param uid 族长的uid +/// @param page 当前的页数 +/// @param pageSize 一页多少个 +- (void)getClanMemberList:(NSString *)uid page:(int)page pageSize:(NSInteger)pageSize state:(int)state { + NSString * pageStr = [NSString stringWithFormat:@"%d", page]; + NSString * pageSizeStr = [NSString stringWithFormat:@"%ld", pageSize]; + [Api getClanMemberList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + ClanMemberDetailInfoModel * model= [ClanMemberDetailInfoModel modelWithDictionary:data.data]; + [[self getView] getClanMemberListSuccess:model state:state]; + }] uid:uid page:pageStr pageSize:pageSizeStr]; +} + +/// 获取当前家族房间的列表 +/// @param clanId 族长的id +- (void)getClanRoomList:(NSString *)clanId { + [Api getRoomListInClan:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + NSArray * array = [GuildInfoModel modelsWithArray:data.data]; + [[self getView] getClanRoomListSuccess:array]; + }] clanId:clanId]; +} + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/Presenter/XPGuildPresenter.h b/xplan-ios/Main/Mine/View/Guild/Presenter/XPGuildPresenter.h new file mode 100644 index 00000000..04ec0b7c --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Presenter/XPGuildPresenter.h @@ -0,0 +1,25 @@ +// +// XPGuildPresenter.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "BaseMvpPresenter.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XPGuildPresenter : BaseMvpPresenter +/// 获取工会成员列表 +/// @param hallId 工会id +/// @param page 当前的页数 +/// @param pageSize 一页多少个 +/// @param state 状态 +- (void)getGuildMemberList:(NSString *)hallId page:(int)page pageSize:(NSInteger)pageSize state:(int)state; + +/// 获取家族相亲的信息 +/// @param uid 用户的uid +- (void)getClanDetailInfo:(NSString *)uid; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/Presenter/XPGuildPresenter.m b/xplan-ios/Main/Mine/View/Guild/Presenter/XPGuildPresenter.m new file mode 100644 index 00000000..3390ebc9 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Presenter/XPGuildPresenter.m @@ -0,0 +1,42 @@ +// +// XPGuildPresenter.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "XPGuildPresenter.h" +#import "Api+Guild.h" +#import "ClanMemberDetailInfoModel.h" +#import "ClanDetailInfoModel.h" +#import "XPGuildProtocol.h" + +@implementation XPGuildPresenter + + +/// 获取工会成员列表 +/// @param hallId 工会id +/// @param page 当前的页数 +/// @param pageSize 一页多少个 +/// @param state 状态 +- (void)getGuildMemberList:(NSString *)hallId page:(int)page pageSize:(NSInteger)pageSize state:(int)state { + NSString * pageStr = [NSString stringWithFormat:@"%d", page]; + NSString * pageSizeStr = [NSString stringWithFormat:@"%ld", pageSize]; + [Api getGuildMemberList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + ClanMemberDetailInfoModel * memberInfo = [ClanMemberDetailInfoModel modelWithDictionary:data.data]; + [[self getView] getGuildMemberListSuccess:memberInfo state:state]; + }fail:^(NSInteger code, NSString * _Nullable msg) { + [[self getView] getGuildMemberListFail:msg state:state]; + }] hallId:hallId page:pageStr pageSize:pageSizeStr]; +} + +/// 获取家族详细的信息 +/// @param uid 用户的uid +- (void)getClanDetailInfo:(NSString *)uid { + [Api getClanDetailInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + ClanDetailInfoModel * clanDetailInfo = [ClanDetailInfoModel modelWithDictionary:data.data]; + [[self getView] getClanDetailInfoSuccess:clanDetailInfo]; + }] uid:uid]; +} + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/Protocol/XPClanProtocol.h b/xplan-ios/Main/Mine/View/Guild/Protocol/XPClanProtocol.h new file mode 100644 index 00000000..937c0faa --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Protocol/XPClanProtocol.h @@ -0,0 +1,22 @@ +// +// XPClanProtocol.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import +#import "ClanDetailInfoModel.h" +NS_ASSUME_NONNULL_BEGIN +@class ClanDetailInfoModel, ClanMemberDetailInfoModel; +@protocol XPClanProtocol + +///获取家族详情成功 +- (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanDetailInfo; +///获取工会成员列表成功 +- (void)getClanMemberListSuccess:(ClanMemberDetailInfoModel *)memberInfo state:(int)state; +///获取工会房间的列表 +- (void)getClanRoomListSuccess:(NSArray *)array; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/Protocol/XPGuildProtocol.h b/xplan-ios/Main/Mine/View/Guild/Protocol/XPGuildProtocol.h new file mode 100644 index 00000000..6a5ed958 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/Protocol/XPGuildProtocol.h @@ -0,0 +1,21 @@ +// +// XPGuildProtocol.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class ClanMemberDetailInfoModel,ClanDetailInfoModel; +@protocol XPGuildProtocol + +- (void)getGuildMemberListSuccess:(ClanMemberDetailInfoModel *)memberInfo state:(int)state; +- (void)getGuildMemberListFail:(NSString *)msg state:(int)state; + +///获取家族详情成功 +- (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanDetailInfo; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanMemberTableViewCell.h b/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanMemberTableViewCell.h new file mode 100644 index 00000000..3fcbbe69 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanMemberTableViewCell.h @@ -0,0 +1,17 @@ +// +// XPClanMemberTableViewCell.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import +#import "ClanMemberDetailInfoModel.h" +NS_ASSUME_NONNULL_BEGIN +@interface XPClanMemberTableViewCell : UITableViewCell +///是否是最后的一个 +@property (nonatomic,assign) BOOL isLast; +@property (nonatomic,strong) ClanMemberInfoModel *memberInfo; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanMemberTableViewCell.m b/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanMemberTableViewCell.m new file mode 100644 index 00000000..d0cc474e --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanMemberTableViewCell.m @@ -0,0 +1,377 @@ +// +// XPClanMemberTableViewCell.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "XPClanMemberTableViewCell.h" +///Third +#import +///Tool +#import "ThemeColor.h" +#import "NetImageView.h" +#import "UIImage+Utils.h" +#import "XPMacro.h" +///Model +#import "ClanMemberDetailInfoModel.h" + +@interface XPClanMemberTableViewCell () +///背景色 +@property (nonatomic,strong) UIView * backView; +///头像 +@property (nonatomic,strong) NetImageView *avatarImageView; +///头像的边框 +@property (nonatomic,strong) UIImageView *avatarBorderView; +///角色 +@property (nonatomic,strong) UIButton *roleButon; +///昵称的容器 +@property (nonatomic,strong) UIStackView *nickStackView; +///x姓名 +@property (nonatomic,strong) UILabel *nickLabel; +///id +@property (nonatomic,strong) UILabel *idLabel; +///性别 +@property (nonatomic,strong) UIImageView *sexImageView; +///魅力等级 +@property (nonatomic,strong) NetImageView *charmImageView; +///等级 +@property (nonatomic,strong) NetImageView *experImageView; +///所属工会 +@property (nonatomic,strong) UILabel *guildNickLabel; +@property (nonatomic,strong) CAShapeLayer *shapeLayer; +@end + +@implementation XPClanMemberTableViewCell +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [UIColor clearColor]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + [self.contentView addSubview:self.backView]; + [self.backView addSubview:self.avatarBorderView]; + [self.backView addSubview:self.avatarImageView]; + [self.backView addSubview:self.roleButon]; + [self.backView addSubview:self.nickStackView]; + [self.backView addSubview:self.idLabel]; + [self.backView addSubview:self.guildNickLabel]; + + [self.nickStackView addArrangedSubview:self.nickLabel]; + [self.nickStackView addArrangedSubview:self.sexImageView]; + [self.nickStackView addArrangedSubview:self.charmImageView]; + [self.nickStackView addArrangedSubview:self.experImageView]; +} + +- (void)initSubViewConstraints { + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.contentView).inset(15); + make.top.bottom.mas_equalTo(self.contentView); + }]; + + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(54, 54)); + make.centerY.mas_equalTo(self.contentView); + make.left.mas_equalTo(self.backView).offset(9); + }]; + + [self.avatarBorderView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(57, 57)); + make.center.mas_equalTo(self.avatarImageView); + }]; + + [self.roleButon mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(17); + make.width.mas_equalTo(28); + make.bottom.mas_equalTo(self.avatarBorderView); + make.centerX.mas_equalTo(self.avatarImageView); + }]; + [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(18); + }]; + + [self.experImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(24); + }]; + + [self.charmImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(24); + }]; + + [self.nickStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.avatarImageView.mas_right).offset(6); + make.height.mas_equalTo(20); + make.bottom.mas_equalTo(self.avatarImageView.mas_centerY).offset(-3); + }]; + + [self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nickLabel); + make.top.mas_equalTo(self.avatarImageView.mas_centerY).offset(3); + }]; + + [self.guildNickLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self.backView).offset(-15); + make.centerY.mas_equalTo(self.idLabel); + }]; +} +#pragma mark - Getters And Setters +- (void)setMemberInfo:(ClanMemberInfoModel *)memberInfo { + _memberInfo = memberInfo; + if (_memberInfo) { + self.avatarImageView.imageUrl = _memberInfo.avatar; + NSString * nick = _memberInfo.nick; + if (nick.length > 8) { + nick = [nick substringToIndex:8]; + } + self.nickLabel.text = nick; + self.sexImageView.image = _memberInfo.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; + if (_memberInfo.experUrl) { + if (self.experImageView.state == NetImageStateLoaded) { + CGFloat kImageScale = self.experImageView.image.size.width / self.experImageView.image.size.height; + CGFloat imageWidth = 20 * kImageScale; + [self.experImageView mas_updateConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(imageWidth); + }]; + } else { + @kWeakify(self); + [self.experImageView loadImageWithUrl:_memberInfo.experUrl completion:^(UIImage * _Nonnull image, NSURL * _Nonnull url) { + @kStrongify(self); + CGFloat kImageScale = image.size.width / image.size.height; + CGFloat imageWidth = 20 * kImageScale; + [self.experImageView mas_updateConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(imageWidth); + }]; + }]; + } + } + self.experImageView.hidden = _memberInfo.experUrl.length <= 0; + + if (_memberInfo.charmUrl) { + if (self.charmImageView.state == NetImageStateLoaded) { + CGFloat kImageScale = self.charmImageView.image.size.width / self.charmImageView.image.size.height; + CGFloat imageWidth = 20 * kImageScale; + [self.charmImageView mas_updateConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(imageWidth); + }]; + } else { + @kWeakify(self); + [self.charmImageView loadImageWithUrl:_memberInfo.charmUrl completion:^(UIImage * _Nonnull image, NSURL * _Nonnull url) { + @kStrongify(self); + CGFloat kImageScale = image.size.width / image.size.height; + CGFloat imageWidth = 20 * kImageScale; + [self.charmImageView mas_updateConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(imageWidth); + }]; + }]; + } + } + self.charmImageView.hidden = _memberInfo.charmUrl.length <= 0; + self.idLabel.text = [NSString stringWithFormat:@"ID:%@", _memberInfo.erbanNo]; + self.guildNickLabel.text = _memberInfo.hallName; + UIColor * avatarBoderColor; + UIColor * roleGradStartColor; + UIColor * roleGradEndColor; + NSString * roleTitle; + CGFloat roleWidth = 45; + switch (_memberInfo.roleType) { + case GuildRoleType_Elder: + roleTitle = @"会长"; + avatarBoderColor = UIColorFromRGB(0xFFD755); + roleGradStartColor = UIColorFromRGB(0xFF5357); + roleGradEndColor = UIColorFromRGB(0xFFC919); + roleWidth= 45; + break; + case GuildRoleType_Elder_Owner: + roleTitle = @"会长·房主"; + avatarBoderColor = UIColorFromRGB(0xFFD755); + roleGradStartColor = UIColorFromRGB(0xFF5357); + roleGradEndColor = UIColorFromRGB(0xFFC919); + roleWidth = 66; + break; + case GuildRoleType_Owner: + roleTitle = @"房主"; + avatarBoderColor = UIColorFromRGB(0xF86868); + roleGradEndColor = UIColorFromRGB(0xF86868); + roleGradStartColor = UIColorFromRGB(0xF6A945); + roleWidth = 45; + break; + case GuildRoleType_Normal: + roleTitle = @""; + break; + case GuildRoleType_Manager: + roleTitle = @"房间管理"; + avatarBoderColor = UIColorFromRGB(0x248CFE); + roleGradStartColor = UIColorFromRGB(0x5092FE); + roleGradEndColor = UIColorFromRGB(0x6A10B5); + roleWidth = 58; + break; + case GuildRoleType_Super_Admin: + roleTitle = @"公会超管"; + avatarBoderColor = UIColorFromRGB(0x7727E4); + roleGradStartColor = UIColorFromRGB(0x5092FE); + roleGradEndColor = UIColorFromRGB(0x6A10B5); + roleWidth = 58; + break; + + default: + break; + } + if (roleTitle.length > 0) { + self.roleButon.hidden = NO; + self.avatarBorderView.hidden = NO; + [self.roleButon setTitle:roleTitle forState:UIControlStateNormal]; + self.avatarBorderView.layer.borderColor = avatarBoderColor.CGColor; + [self.roleButon setBackgroundImage:[UIImage gradientColorImageFromColors:@[roleGradStartColor, roleGradEndColor] gradientType:GradientTypeUpleftToLowright imgSize:CGSizeMake(roleWidth, 17)] forState:UIControlStateNormal]; + [self.roleButon mas_updateConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(roleWidth); + }]; + } else { + self.avatarBorderView.hidden = YES; + self.roleButon.hidden = YES; + } + } +} + +- (void)setIsLast:(BOOL)isLast { + _isLast = isLast; + if (_isLast) { + self.backView.layer.mask = self.shapeLayer; + } else { + self.backView.layer.mask = nil; + } +} + +- (UIView *)backView { + if (!_backView) { + _backView = [[UIView alloc] init]; + _backView.backgroundColor = [ThemeColor appCellBackgroundColor]; + _backView.layer.masksToBounds = YES; + } + return _backView; +} + +- (NetImageView *)avatarImageView { + if (!_avatarImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeUserIcon; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _avatarImageView = [[NetImageView alloc] initWithConfig:config]; + _avatarImageView.layer.masksToBounds = YES; + _avatarImageView.layer.cornerRadius = 54.0/2.0; + _avatarImageView.layer.borderColor = [ThemeColor appMainColor].CGColor; + } + return _avatarImageView; +} + +- (UIButton *)roleButon { + if (!_roleButon) { + _roleButon = [UIButton buttonWithType:UIButtonTypeCustom]; + [_roleButon setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + _roleButon.titleLabel.font = [UIFont systemFontOfSize:12]; + _roleButon.layer.masksToBounds = YES; + _roleButon.layer.cornerRadius = 17.0 / 2.0; + } + return _roleButon; +} + +- (UILabel *)idLabel { + if (!_idLabel) { + _idLabel = [[UILabel alloc] init]; + _idLabel.font = [UIFont systemFontOfSize:12]; + _idLabel.textColor = [ThemeColor secondTextColor]; + } + return _idLabel; +} + +- (UIStackView *)nickStackView { + if (!_nickStackView) { + _nickStackView = [[UIStackView alloc] init]; + _nickStackView.axis = UILayoutConstraintAxisHorizontal; + _nickStackView.distribution = UIStackViewDistributionFill; + _nickStackView.alignment = UIStackViewAlignmentFill; + _nickStackView.spacing = 7; + } + return _nickStackView; +} + + +- (UILabel *)nickLabel { + if (!_nickLabel) { + _nickLabel = [[UILabel alloc] init]; + _nickLabel.font = [UIFont systemFontOfSize:18]; + _nickLabel.textColor = [ThemeColor mainTextColor]; + } + return _nickLabel; +} + +- (UIImageView *)sexImageView { + if (!_sexImageView) { + _sexImageView = [[UIImageView alloc] init]; + _sexImageView.userInteractionEnabled = YES; + } + return _sexImageView; +} + +- (NetImageView *)experImageView { + if (!_experImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _experImageView = [[NetImageView alloc] initWithConfig:config]; + _experImageView.userInteractionEnabled = YES; + _experImageView.hidden = YES; + _experImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _experImageView; +} + +- (NetImageView *)charmImageView { + if (!_charmImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _charmImageView = [[NetImageView alloc] initWithConfig:config]; + _charmImageView.userInteractionEnabled = YES; + _charmImageView.hidden = YES; + _charmImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _charmImageView; +} + +- (UILabel *)guildNickLabel { + if (!_guildNickLabel) { + _guildNickLabel = [[UILabel alloc] init]; + _guildNickLabel.font = [UIFont systemFontOfSize:13]; + _guildNickLabel.textColor = [ThemeColor secondTextColor]; + } + return _guildNickLabel; +} + +- (UIImageView *)avatarBorderView { + if (!_avatarBorderView) { + _avatarBorderView = [[UIImageView alloc] init]; + _avatarBorderView.userInteractionEnabled = YES; + _avatarBorderView.layer.masksToBounds = YES; + _avatarBorderView.layer.cornerRadius = 57.0 /2.0; + _avatarBorderView.backgroundColor = [ThemeColor appCellBackgroundColor]; + _avatarBorderView.layer.borderWidth = 1; + } + return _avatarBorderView; +} + +- (CAShapeLayer *)shapeLayer { + if (!_shapeLayer) { + _shapeLayer = [CAShapeLayer layer]; + _shapeLayer.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KScreenWidth - 15 * 2, 66) byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(12, 12)].CGPath; + } + return _shapeLayer; +} + + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanRoomCollectionViewCell.h b/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanRoomCollectionViewCell.h new file mode 100644 index 00000000..bd8b7a7c --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanRoomCollectionViewCell.h @@ -0,0 +1,16 @@ +// +// XPClanRoomCollectionViewCell.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class GuildInfoModel; +@interface XPClanRoomCollectionViewCell : UICollectionViewCell +@property (nonatomic,strong) GuildInfoModel *guildInfo; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanRoomCollectionViewCell.m b/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanRoomCollectionViewCell.m new file mode 100644 index 00000000..47a470a4 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/Cell/XPClanRoomCollectionViewCell.m @@ -0,0 +1,105 @@ +// +// XPClanRoomCollectionViewCell.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "XPClanRoomCollectionViewCell.h" +///Third +#import +///Tool +#import "ThemeColor.h" +#import "NetImageView.h" +#import "UIImage+Utils.h" +///Model +#import "GuildInfoModel.h" + +@interface XPClanRoomCollectionViewCell () +///在线 +@property (nonatomic,strong) UIButton *onlineButton; +///房间头像 +@property (nonatomic,strong) NetImageView *avatarImageView; +///标题 +@property (nonatomic,strong) UILabel *titleLabel; +@end + +@implementation XPClanRoomCollectionViewCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self.contentView addSubview:self.avatarImageView]; + [self.contentView addSubview:self.titleLabel]; + [self.avatarImageView addSubview:self.onlineButton]; +} + +- (void)initSubViewConstraints { + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.top.right.mas_equalTo(self.contentView); + make.height.mas_equalTo(self.avatarImageView.mas_width); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.contentView); + make.top.mas_equalTo(self.avatarImageView.mas_bottom).offset(6); + }]; + + [self.onlineButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(28, 14)); + make.left.top.mas_equalTo(self.avatarImageView); + }]; +} + +#pragma mark - Getters And Setters +- (void)setGuildInfo:(GuildInfoModel *)guildInfo { + _guildInfo = guildInfo; + if (_guildInfo) { + self.avatarImageView.imageUrl = _guildInfo.ownerAvatar; + self.titleLabel.text = _guildInfo.hallName; + } +} + +- (NetImageView *)avatarImageView { + if (!_avatarImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeUserIcon; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _avatarImageView = [[NetImageView alloc] initWithConfig:config]; + _avatarImageView.layer.masksToBounds = YES; + _avatarImageView.layer.cornerRadius = 8; + } + return _avatarImageView; +} + +- (UILabel *)titleLabel { + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.textAlignment = NSTextAlignmentCenter; + _titleLabel.font = [UIFont systemFontOfSize:13]; + _titleLabel.textColor = [ThemeColor mainTextColor]; + } + return _titleLabel; +} + +- (UIButton *)onlineButton { + if (!_onlineButton) { + _onlineButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_onlineButton setTitle:@"在线" forState:UIControlStateNormal]; + [_onlineButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + _onlineButton.titleLabel.font = [UIFont systemFontOfSize:12]; + [_onlineButton setBackgroundImage:[UIImage imageWithColor:UIColorFromRGB(0x7727E4)] forState:UIControlStateNormal]; + _onlineButton.layer.masksToBounds = YES; + _onlineButton.layer.cornerRadius = 2; + } + return _onlineButton; +} +@end diff --git a/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanMenuView.h b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanMenuView.h new file mode 100644 index 00000000..351da3ea --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanMenuView.h @@ -0,0 +1,19 @@ +// +// XPClanMenuView.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPClanMenuView : UIView +///显示图片的名称 +@property (nonatomic,copy) NSString * imageName; +///显示标题 +@property (nonatomic,copy) NSString *title; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanMenuView.m b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanMenuView.m new file mode 100644 index 00000000..91735d76 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanMenuView.m @@ -0,0 +1,80 @@ +// +// XPClanMenuView.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "XPClanMenuView.h" +///Third +#import +///Tool +#import "ThemeColor.h" + +@interface XPClanMenuView () +///显示背景图 +@property (nonatomic,strong) UIImageView *logoImageView; +///显示名字 +@property (nonatomic,strong) UILabel *titleLabel; +@end + +@implementation XPClanMenuView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self addSubview:self.logoImageView]; + [self addSubview:self.titleLabel]; +} + +- (void)initSubViewConstraints { + [self.logoImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.top.mas_equalTo(self).offset(8); + }]; +} +#pragma mark - Getters And Setters +- (void)setImageName:(NSString *)imageName { + _imageName = imageName; + if (_imageName) { + self.logoImageView.image = [UIImage imageNamed:_imageName]; + } +} + +- (void)setTitle:(NSString *)title { + _title = title; + if (_title.length > 0) { + self.titleLabel.text = _title; + } +} + +- (UIImageView *)logoImageView { + if (!_logoImageView) { + _logoImageView = [[UIImageView alloc] init]; + _logoImageView.userInteractionEnabled = YES; + } + return _logoImageView; +} + +- (UILabel *)titleLabel { + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.font = [UIFont systemFontOfSize:14]; + _titleLabel.textColor = [UIColor whiteColor]; + } + return _titleLabel; +} + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanSectionView.h b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanSectionView.h new file mode 100644 index 00000000..06764e70 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanSectionView.h @@ -0,0 +1,19 @@ +// +// XPClanSectionView.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPClanSectionView : UIView +///顶部是否切圆角 +@property (nonatomic,assign) BOOL isTopCor; +///显示标题 +@property (nonatomic,copy) NSString *title; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanSectionView.m b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanSectionView.m new file mode 100644 index 00000000..2231bdba --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPClanSectionView.m @@ -0,0 +1,110 @@ +// +// XPClanSectionView.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "XPClanSectionView.h" +///Third +#import +///Tool +#import "ThemeColor.h" +#import "XPMacro.h" + +@interface XPClanSectionView () +///显示背景色 +@property (nonatomic,strong) UIView * backView; +///标题 +@property (nonatomic,strong) UILabel *titleLabel; +///搜索 +@property (nonatomic,strong) UIButton *searchButton; +@end + +@implementation XPClanSectionView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [UIColor clearColor]; + [self addSubview:self.backView]; + [self.backView addSubview:self.titleLabel]; + [self.backView addSubview:self.searchButton]; +} + +- (void)initSubViewConstraints { + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self).inset(15); + make.top.bottom.mas_equalTo(self); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.top.mas_equalTo(self.backView).offset(15); + }]; + + [self.searchButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(22, 22)); + make.centerY.mas_equalTo(self.titleLabel); + make.right.mas_equalTo(self.backView).offset(-15); + }]; +} +#pragma mark - Event Response +- (void)searchButtonAction:(UIButton *)sender { + +} + +#pragma mark - Getters And Setters +- (void)setTitle:(NSString *)title { + _title = title; + if (_title.length > 0) { + self.titleLabel.text = _title; + } +} + +- (void)setIsTopCor:(BOOL)isTopCor { + _isTopCor = isTopCor; + if (_isTopCor) { + CAShapeLayer * layer = [CAShapeLayer layer]; + layer.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KScreenWidth - 30, 37) byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(12, 12)].CGPath; + self.backView.layer.mask = layer; + } +} + +- (UIView *)backView { + if (!_backView) { + _backView = [[UIView alloc] init]; + _backView.backgroundColor = [ThemeColor appCellBackgroundColor]; + _backView.layer.masksToBounds = YES; + } + return _backView; +} + +- (UILabel *)titleLabel { + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.font = [UIFont systemFontOfSize:15]; + _titleLabel.textColor = [ThemeColor secondTextColor]; + } + return _titleLabel; +} + +- (UIButton *)searchButton { + if (!_searchButton) { + _searchButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_searchButton setImage:[UIImage imageNamed:@"mine_guild_section_search"] forState:UIControlStateNormal]; + [_searchButton setImage:[UIImage imageNamed:@"mine_guild_section_search"] forState:UIControlStateSelected]; + [_searchButton addTarget:self action:@selector(searchButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _searchButton; +} + + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPGuildHeaderView.h b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPGuildHeaderView.h new file mode 100644 index 00000000..0a63865b --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPGuildHeaderView.h @@ -0,0 +1,28 @@ +// +// XPGuildHeaderView.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class ClanDetailInfoModel, XPGuildHeaderView, GuildInfoModel; + +@protocol XPGuildHeaderViewDelegate + +- (void)xPGuildHeaderView:(XPGuildHeaderView *)view dicSelectGuild:(GuildInfoModel *)guildInfo; + +@end + +@interface XPGuildHeaderView : UIView +///家族信息 +@property (nonatomic,strong) ClanDetailInfoModel *clanInfo; +///家族房间列表 +@property (nonatomic,strong) NSArray *clanRoomList; +///代理 +@property (nonatomic,weak) id delegate; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPGuildHeaderView.m b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPGuildHeaderView.m new file mode 100644 index 00000000..52b84c6e --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/SubViews/XPGuildHeaderView.m @@ -0,0 +1,326 @@ +// +// XPGuildHeaderView.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "XPGuildHeaderView.h" +///Third +#import +///Tool +#import "ThemeColor.h" +#import "NetImageView.h" +#import "XPMacro.h" +///Model +#import "ClanDetailInfoModel.h" +///View +#import "XPClanMenuView.h" +#import "XPClanRoomCollectionViewCell.h" +@interface XPGuildHeaderView () +///背景图 +@property (nonatomic,strong) UIImageView *backImageView; +///头像 +@property (nonatomic,strong) NetImageView *avatarImageView; +///工会名称 +@property (nonatomic,strong) UILabel *clanNameLabel; +///大鹅id +@property (nonatomic,strong) UILabel *daeIdLabel; +///房间数量 +@property (nonatomic,strong) UILabel *roomNumberLabel; +///家族等级 +@property (nonatomic,strong) NetImageView *clanLevelImageView; +///查看流水 +@property (nonatomic,strong) XPClanMenuView *incomeView; +///个播收入 +@property (nonatomic,strong) XPClanMenuView *anchorIncomeView; +///超管设置 +@property (nonatomic,strong) XPClanMenuView *superAdminSetView; +///工会房间的容器 +@property (nonatomic,strong) UIView * clanRoomView; +///工会房间多少个 +@property (nonatomic,strong) UILabel *numberLabel; +///列表 +@property (nonatomic,strong) UICollectionView *collectionView; +@end + +@implementation XPGuildHeaderView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self addSubview:self.backImageView]; + [self addSubview:self.avatarImageView]; + [self addSubview:self.clanNameLabel]; + [self addSubview:self.daeIdLabel]; + [self addSubview:self.roomNumberLabel]; + [self addSubview:self.clanLevelImageView]; + [self addSubview:self.incomeView]; + [self addSubview:self.anchorIncomeView]; + [self addSubview:self.superAdminSetView]; + [self addSubview:self.clanRoomView]; + + [self.clanRoomView addSubview:self.numberLabel]; + [self.clanRoomView addSubview:self.collectionView]; + +} + +- (void)initSubViewConstraints { + [self mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(KScreenWidth); + make.bottom.mas_equalTo(self.clanRoomView.mas_bottom).offset(15); + }]; + + CGFloat kBackScale = 274.0 / 375.0; + [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self); + make.height.mas_equalTo(KScreenWidth * kBackScale); + }]; + + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(64 * kScreenScale, 64 * kScreenScale)); + make.left.mas_equalTo(self).offset(15); + make.top.mas_equalTo(self).offset(108 * kScreenScale); + }]; + + [self.clanNameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.avatarImageView.mas_right).offset(6); + make.top.mas_equalTo(self.avatarImageView); + make.right.mas_lessThanOrEqualTo(self.clanLevelImageView); + }]; + + [self.daeIdLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.clanNameLabel); + make.top.mas_equalTo(self.clanNameLabel.mas_bottom).offset(6); + }]; + + [self.roomNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.clanNameLabel); + make.top.mas_equalTo(self.daeIdLabel.mas_bottom).offset(6); + }]; + + [self.clanLevelImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(60, 60)); + make.centerY.mas_equalTo(self.avatarImageView); + make.right.mas_equalTo(self).offset(-35); + }]; + + CGFloat kMenuScale = 52.0 / 111.0; + CGFloat kMenuItemWidth = (CGFloat)(KScreenWidth - 15 * 2 - 6 * 2) / 3.0; + [self.incomeView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self).offset(15); + make.top.mas_equalTo(self.avatarImageView.mas_bottom).offset(25); + make.width.mas_equalTo(kMenuItemWidth); + make.height.mas_equalTo(kMenuItemWidth * kMenuScale); + }]; + + [self.anchorIncomeView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.centerY.mas_equalTo(self.incomeView); + make.left.mas_equalTo(self.incomeView.mas_right).offset(6); + }]; + + [self.superAdminSetView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.centerY.mas_equalTo(self.incomeView); + make.left.mas_equalTo(self.anchorIncomeView.mas_right).offset(6); + }]; + + [self.clanRoomView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self).inset(16); + make.height.mas_equalTo(130); + make.top.mas_equalTo(self.incomeView.mas_bottom).offset(15); + }]; + + [self.numberLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.clanRoomView).offset(9); + make.top.mas_equalTo(self.clanRoomView).offset(10); + }]; + + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.clanRoomView).inset(9); + make.top.mas_equalTo(self.numberLabel.mas_bottom).offset(3); + make.bottom.mas_equalTo(self.clanRoomView); + }]; +} + +#pragma mark - UICollectionViewDelegate +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.clanRoomList.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + XPClanRoomCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([ XPClanRoomCollectionViewCell class]) forIndexPath:indexPath]; + cell.guildInfo = [self.clanRoomList objectAtIndex:indexPath.row]; + return cell; +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + [collectionView deselectItemAtIndexPath:indexPath animated:YES]; + if (self.clanRoomList.count > 0) { + GuildInfoModel * guildInfo = [self.clanRoomList objectAtIndex:indexPath.row]; + if (self.delegate && [self.delegate respondsToSelector:@selector(xPGuildHeaderView:dicSelectGuild:)]) { + [self.delegate xPGuildHeaderView:self dicSelectGuild:guildInfo]; + } + } +} + +#pragma mark - Getters And Setters +- (void)setClanInfo:(ClanDetailInfoModel *)clanInfo { + _clanInfo = clanInfo; + if (_clanInfo) { + self.avatarImageView.imageUrl = _clanInfo.clan.avatar; + NSString * elderName = _clanInfo.clan.elderName; + if (elderName.length > 8) { + elderName = [elderName substringToIndex:8]; + } + self.clanNameLabel.text = elderName; + self.daeIdLabel.text = _clanInfo.clan.elderErbanNo; + self.clanLevelImageView.imageUrl = _clanInfo.clan.levelIcon; + } +} + +- (void)setClanRoomList:(NSArray *)clanRoomList { + _clanRoomList = clanRoomList; + if (_clanRoomList.count > 0) { + [self.clanRoomView mas_updateConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(130); + }]; + self.roomNumberLabel.text = [NSString stringWithFormat:@"公会房间数量:%ld", _clanRoomList.count]; + } else { + [self.clanRoomView mas_updateConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(0); + }]; + self.roomNumberLabel.text = @"公会房间数量:0"; + } + [self.collectionView reloadData]; +} + +- (UIImageView *)backImageView { + if (!_backImageView) { + _backImageView = [[UIImageView alloc] init]; + _backImageView.userInteractionEnabled = YES; + _backImageView.image = [UIImage imageNamed:@"mine_guild_clan_header_bg"]; + } + return _backImageView; +} + +- (NetImageView *)avatarImageView { + if (!_avatarImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeUserIcon; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _avatarImageView = [[NetImageView alloc] initWithConfig:config]; + _avatarImageView.layer.masksToBounds = YES; + _avatarImageView.layer.cornerRadius = 32; + _avatarImageView.layer.borderWidth = 2; + _avatarImageView.layer.borderColor = UIColorFromRGB(0xC6C6E9).CGColor; + } + return _avatarImageView; +} + +- (UILabel *)clanNameLabel { + if (!_clanNameLabel) { + _clanNameLabel = [[UILabel alloc] init]; + _clanNameLabel.font = [UIFont systemFontOfSize:18]; + _clanNameLabel.textColor = [UIColor whiteColor]; + } + return _clanNameLabel; +} + +- (UILabel *)daeIdLabel { + if (!_daeIdLabel) { + _daeIdLabel = [[UILabel alloc] init]; + _daeIdLabel.font = [UIFont systemFontOfSize:12]; + _daeIdLabel.textColor = UIColorFromRGB(0xC6C6E9); + } + return _daeIdLabel; +} + +- (UILabel *)roomNumberLabel { + if (!_roomNumberLabel) { + _roomNumberLabel = [[UILabel alloc] init]; + _roomNumberLabel.font = [UIFont systemFontOfSize:12]; + _roomNumberLabel.textColor = UIColorFromRGB(0xC6C6E9); + } + return _roomNumberLabel; +} + +- (NetImageView *)clanLevelImageView { + if (!_clanLevelImageView) { + _clanLevelImageView = [[NetImageView alloc] init]; + } + return _clanLevelImageView; +} + +- (XPClanMenuView *)incomeView { + if (!_incomeView) { + _incomeView = [[XPClanMenuView alloc] init]; + _incomeView.title = @"查看流水"; + _incomeView.imageName = @"mine_guild_clan_header_income_bg"; + } + return _incomeView; +} + +- (XPClanMenuView *)anchorIncomeView { + if (!_anchorIncomeView) { + _anchorIncomeView = [[XPClanMenuView alloc] init]; + _anchorIncomeView.title = @"主播收入"; + _anchorIncomeView.imageName = @"mine_guild_clan_header_anchor_income_bg"; + } + return _anchorIncomeView; +} + +- (XPClanMenuView *)superAdminSetView { + if (!_superAdminSetView) { + _superAdminSetView = [[XPClanMenuView alloc] init]; + _superAdminSetView.title = @"工会超管设置"; + _superAdminSetView.imageName = @"mine_guild_clan_header_superadmin_set_bg"; + } + return _superAdminSetView; +} + +- (UIView *)clanRoomView { + if (!_clanRoomView) { + _clanRoomView = [[UIView alloc] init]; + _clanRoomView.backgroundColor = [ThemeColor appCellBackgroundColor]; + _clanRoomView.layer.masksToBounds = YES; + _clanRoomView.layer.cornerRadius = 10; + } + return _clanRoomView; +} + +- (UILabel *)numberLabel { + if (!_numberLabel) { + _numberLabel = [[UILabel alloc] init]; + _numberLabel.text = @"公会房间(0)"; + _numberLabel.font = [UIFont systemFontOfSize:14]; + _numberLabel.textColor = [ThemeColor mainTextColor]; + } + return _numberLabel; +} + +- (UICollectionView *)collectionView{ + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.minimumLineSpacing = 10; + layout.itemSize = CGSizeMake(60, 80); + layout.minimumInteritemSpacing = 0; + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.backgroundColor = [UIColor clearColor]; + [_collectionView registerClass:[XPClanRoomCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPClanRoomCollectionViewCell class])]; + } + return _collectionView; +} + + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/View/XPMineClanViewController.h b/xplan-ios/Main/Mine/View/Guild/View/XPMineClanViewController.h new file mode 100644 index 00000000..39e3fc66 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/XPMineClanViewController.h @@ -0,0 +1,17 @@ +// +// XPMineClanViewController.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "MvpViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XPMineClanViewController : MvpViewController +///组长的Uid +@property (nonatomic,copy) NSString *uid; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/View/XPMineClanViewController.m b/xplan-ios/Main/Mine/View/Guild/View/XPMineClanViewController.m new file mode 100644 index 00000000..f4204cd6 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/XPMineClanViewController.m @@ -0,0 +1,282 @@ +// +// XPMineClanViewController.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "XPMineClanViewController.h" +///Third +#import +#import +///Tool +#import "XPMacro.h" +#import "ThemeColor.h" +///Model +#import "ClanDetailInfoModel.h" +#import "ClanMemberDetailInfoModel.h" +///View +#import "XPClanMemberTableViewCell.h" +#import "XPGuildHeaderView.h" +#import "XPClanSectionView.h" +#import "XPMineGuildViewController.h" +///P +#import "XPClanPresenter.h" +#import "XPClanProtocol.h" + +@interface XPMineClanViewController () +///顶部视图 +@property (nonatomic,strong) XPGuildHeaderView *headerView; +///导航栏 +@property (nonatomic,strong) UIView * navView; +///返回按钮 +@property (nonatomic,strong) UIButton *backButton; +///标题 +@property (nonatomic,strong) UILabel *titleLabel; +///列表 +@property (nonatomic,strong) UITableView *tableView; +///当前页数 +@property (nonatomic,assign) int page; +///是否有更多的数据 +@property (nonatomic,assign) BOOL hasNoMoreData; +///家族信息详情 +@property (nonatomic,strong) ClanDetailInfoModel *clanDetailInfo; +///成员详情的列表 +@property (nonatomic,strong) ClanMemberDetailInfoModel *memberDetailInfo; +///数据源 +@property (nonatomic,strong) NSMutableArray *datasource; +///区头 +@property (nonatomic,strong) XPClanSectionView *sectionView; +@end + +@implementation XPMineClanViewController + +- (BOOL)isHiddenNavBar { + return YES; +} + +- (XPClanPresenter *)createPresenter { + return [[XPClanPresenter alloc] init]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + [self initSubViews]; + [self initSubViewConstraints]; + [self initHeaderAndFooterRrfresh]; +} +#pragma mark - 下拉刷新 +- (void)initHeaderAndFooterRrfresh { + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [ThemeColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [ThemeColor secondTextColor]; + self.tableView.mj_header = header; + + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [ThemeColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; + + [self headerRefresh]; +} + +#pragma mark - 刷新的fangfa +- (void)headerRefresh { + self.page = 1; + [self.presenter getClanDetailInfo:self.uid]; + [self.presenter getClanMemberList:self.uid page:self.page pageSize:20 state:0]; +} + +- (void)footerRefresh { + if (self.hasNoMoreData) { + [self showErrorToast:@"没有更多数据了"]; + [self.tableView.mj_footer endRefreshing]; + return; + } + self.page++; + [self.presenter getClanMemberList:self.uid page:self.page pageSize:20 state:1]; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self.view addSubview:self.tableView]; + [self.view addSubview:self.navView]; + [self.navView addSubview:self.backButton]; + [self.navView addSubview:self.titleLabel]; + self.tableView.tableHeaderView = self.headerView; +} + +- (void)initSubViewConstraints { + [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.view); + make.height.mas_equalTo(kNavigationHeight); + }]; + + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.view); + make.bottom.mas_equalTo(self.view).offset(-20); + }]; + + [self.backButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.view).mas_offset(10); + make.top.mas_equalTo(statusbarHeight); + make.height.width.mas_equalTo(44); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.mas_equalTo(self.navView); + make.centerY.mas_equalTo(self.backButton); + }]; +} + +#pragma mark - UITableViewDelegate And UITableViewDataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.datasource.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + XPClanMemberTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPClanMemberTableViewCell class])]; + if (cell == nil) { + cell = [[XPClanMemberTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPClanMemberTableViewCell class])]; + } + ClanMemberInfoModel * memberInfo = [self.datasource objectAtIndex:indexPath.row]; + cell.isLast = (self.datasource.count -1) == indexPath.row; + cell.memberInfo = memberInfo; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return 66; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + return 37; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + if (section == 0) { + if (self.sectionView == nil) { + XPClanSectionView * sectionView = [[XPClanSectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 37)]; + sectionView.isTopCor = YES; + self.sectionView = sectionView; + } + return self.sectionView; + } + return [UIView new]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ + return 0.01f; +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ + return [[UIView alloc]init]; +} + +#pragma mark -XPClanProtocol +- (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanDetailInfo { + self.clanDetailInfo = clanDetailInfo; + self.headerView.clanInfo = clanDetailInfo; + self.titleLabel.text = clanDetailInfo.clan.name; + [self.presenter getClanRoomList:clanDetailInfo.clan.cid]; +} + +- (void)getClanMemberListSuccess:(ClanMemberDetailInfoModel *)memberInfo state:(int)state { + self.sectionView.title = [NSString stringWithFormat:@"成员列表 (%ld)", memberInfo.count]; + if (state == 0) { + self.hasNoMoreData = NO; + [self.datasource removeAllObjects]; + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } + + if (memberInfo.members.count > 0) { + [self.datasource addObjectsFromArray:memberInfo.members]; + } else { + self.hasNoMoreData = YES; + } + [self.tableView reloadData]; +} + +- (void)getClanRoomListSuccess:(NSArray *)array { + self.headerView.clanRoomList = array; +} + +#pragma mark - XPGuildHeaderViewDelegate +- (void)xPGuildHeaderView:(XPGuildHeaderView *)view dicSelectGuild:(GuildInfoModel *)guildInfo { + XPMineGuildViewController * guildVC = [[XPMineGuildViewController alloc] init]; + guildVC.ownerUid = guildInfo.ownerUid; + guildVC.guildId = guildInfo.hallId; + [self.navigationController pushViewController:guildVC animated:YES]; +} + +#pragma mark - Event Response +- (void)backButtonAction:(UIButton *)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +#pragma mark - Getters And Setters +- (UIView *)navView { + if (!_navView) { + _navView = [[UIView alloc] init]; + _navView.backgroundColor = [UIColor clearColor]; + } + return _navView; +} + +- (UIButton *)backButton { + if (!_backButton) { + _backButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_backButton setImage:[UIImage imageNamed:@"home_search_white_back"] forState:UIControlStateNormal]; + [_backButton setImage:[UIImage imageNamed:@"home_search_white_back"] forState:UIControlStateSelected]; + [_backButton addTarget:self action:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _backButton; +} + +- (UILabel *)titleLabel { + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.textAlignment = NSTextAlignmentCenter; + _titleLabel.font = [UIFont systemFontOfSize:17]; + _titleLabel.textColor = [UIColor whiteColor]; + } + return _titleLabel; +} + +- (UITableView *)tableView { + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + _tableView.showsVerticalScrollIndicator = NO; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPClanMemberTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPClanMemberTableViewCell class])]; + } + return _tableView; +} + +- (NSMutableArray *)datasource { + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; +} + +- (XPGuildHeaderView *)headerView { + if (!_headerView) { + _headerView = [[XPGuildHeaderView alloc] init]; + _headerView.delegate = self; + } + return _headerView; +} + +@end diff --git a/xplan-ios/Main/Mine/View/Guild/View/XPMineGuildViewController.h b/xplan-ios/Main/Mine/View/Guild/View/XPMineGuildViewController.h new file mode 100644 index 00000000..48858e5a --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/XPMineGuildViewController.h @@ -0,0 +1,17 @@ +// +// XPMineGuildViewController.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// + +#import "MvpViewController.h" + +NS_ASSUME_NONNULL_BEGIN +@interface XPMineGuildViewController : MvpViewController +@property (nonatomic,strong) NSString *ownerUid; +@property (nonatomic,strong) NSString *guildId; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/Guild/View/XPMineGuildViewController.m b/xplan-ios/Main/Mine/View/Guild/View/XPMineGuildViewController.m new file mode 100644 index 00000000..c3bca7f0 --- /dev/null +++ b/xplan-ios/Main/Mine/View/Guild/View/XPMineGuildViewController.m @@ -0,0 +1,387 @@ +// +// XPMineGuildViewController.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/6. +// 工会主页 + +#import "XPMineGuildViewController.h" +///Third +#import +#import +///Tool +#import "XPMacro.h" +#import "ThemeColor.h" +#import "NetImageView.h" +///Model +#import "ClanDetailInfoModel.h" +#import "ClanMemberDetailInfoModel.h" +///View +#import "XPClanMemberTableViewCell.h" +#import "XPClanSectionView.h" +///P +#import "XPGuildPresenter.h" +#import "XPGuildProtocol.h" + +@interface XPMineGuildViewController () +///导航栏 +@property (nonatomic,strong) UIView * navView; +///返回按钮 +@property (nonatomic,strong) UIButton *backButton; +///标题 +@property (nonatomic,strong) UILabel *titleLabel; +///退出房间 +@property (nonatomic,strong) UIButton *exitButton; +///列表 +@property (nonatomic,strong) UITableView *tableView; +///顶部视图 +@property (nonatomic,strong) UIView * headerView; +///显示头像 +@property (nonatomic,strong) NetImageView *avatarImageView; +///显示id +@property (nonatomic,strong) UILabel *idLabel; +///背景图 +@property (nonatomic,strong) NetImageView *backImageView; +///高斯模糊 +@property (nonatomic,strong) UIVisualEffectView * blurView; +///当前页数 +@property (nonatomic,assign) int page; +///是否有更多的数据 +@property (nonatomic,assign) BOOL hasNoMoreData; +///数据源 +@property (nonatomic,strong) NSMutableArray *datasource; +///区头 +@property (nonatomic,strong) XPClanSectionView *sectionView; +@end + +@implementation XPMineGuildViewController + +- (BOOL)isHiddenNavBar { + return YES; +} + +- (XPGuildPresenter *)createPresenter { + return [[XPGuildPresenter alloc] init]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + [self initSubViews]; + [self initSubViewConstraints]; + [self initHeaderAndFooterRrfresh]; +} +#pragma mark - 下拉刷新 +- (void)initHeaderAndFooterRrfresh { + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [ThemeColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [ThemeColor secondTextColor]; + self.tableView.mj_header = header; + + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [ThemeColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; + + [self headerRefresh]; +} + +#pragma mark - 刷新的fangfa +- (void)headerRefresh { + if (self.guildId.length <= 0 || self.ownerUid.length <= 0) { + [self showErrorToast:@"获取信息失败"]; + [self.navigationController popViewControllerAnimated:YES]; + return; + } + self.page = 1; + [self.presenter getClanDetailInfo:self.ownerUid]; + [self.presenter getGuildMemberList:self.guildId page:self.page pageSize:20 state:0]; +} + +- (void)footerRefresh { + if (self.guildId.length <= 0 || self.ownerUid.length <= 0) { + [self showErrorToast:@"获取信息失败"]; + [self.navigationController popViewControllerAnimated:YES]; + return; + } + + if (self.hasNoMoreData) { + [self showErrorToast:@"没有更多数据了"]; + [self.tableView.mj_footer endRefreshing]; + return; + } + self.page++; + [self.presenter getGuildMemberList:self.guildId page:self.page pageSize:20 state:1]; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self.view addSubview:self.backImageView]; + [self.view addSubview:self.tableView]; + [self.view addSubview:self.navView]; + [self.navView addSubview:self.backButton]; + [self.navView addSubview:self.titleLabel]; + [self.navView addSubview:self.exitButton]; + + [self.backImageView addSubview:self.blurView]; + + [self.headerView addSubview:self.avatarImageView]; + [self.headerView addSubview:self.idLabel]; + self.headerView.frame = CGRectMake(0, 0, KScreenWidth, 174); + self.tableView.tableHeaderView = self.headerView; +} + +- (void)initSubViewConstraints { + [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.view); + make.height.mas_equalTo(kNavigationHeight); + }]; + + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.view); + make.bottom.mas_equalTo(self.view).offset(-20); + }]; + + [self.backButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.view).mas_offset(10); + make.top.mas_equalTo(statusbarHeight); + make.height.width.mas_equalTo(44); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.backButton.mas_right); + make.right.mas_equalTo(self.exitButton.mas_left); + make.centerY.mas_equalTo(self.backButton); + }]; + + [self.exitButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self.navView).offset(-15); + make.centerY.mas_equalTo(self.backButton); + }]; + + [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.view); + make.height.mas_equalTo(250); + }]; + + [self.blurView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.backImageView); + }]; + + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(70, 70)); + make.centerX.mas_equalTo(self.headerView); + make.top.mas_equalTo(self.headerView).offset(66); + }]; + + [self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.mas_equalTo(self.headerView); + make.top.mas_equalTo(self.avatarImageView.mas_bottom).offset(10); + }]; +} + +#pragma mark - UITableViewDelegate And UITableViewDataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.datasource.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + XPClanMemberTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPClanMemberTableViewCell class])]; + if (cell == nil) { + cell = [[XPClanMemberTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPClanMemberTableViewCell class])]; + } + ClanMemberInfoModel * memberInfo = [self.datasource objectAtIndex:indexPath.row]; + cell.isLast = (self.datasource.count -1) == indexPath.row; + cell.memberInfo = memberInfo; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return 66; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + return 37; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + if (section == 0) { + if (self.sectionView == nil) { + XPClanSectionView * sectionView = [[XPClanSectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 37)]; + sectionView.isTopCor = YES; + self.sectionView = sectionView; + } + return self.sectionView; + } + return [UIView new]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ + return 0.01f; +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ + return [[UIView alloc]init]; +} + +#pragma mark -XPClanProtocol + +- (void)getGuildMemberListSuccess:(ClanMemberDetailInfoModel *)memberInfo state:(int)state { + self.sectionView.title = [NSString stringWithFormat:@"成员列表 (%ld)人", memberInfo.count]; + if (state == 0) { + self.hasNoMoreData = NO; + [self.datasource removeAllObjects]; + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } + + if (memberInfo.members.count > 0) { + [self.datasource addObjectsFromArray:memberInfo.members]; + } else { + self.hasNoMoreData = YES; + } + [self.tableView reloadData]; +} + +- (void)getGuildMemberListFail:(NSString *)msg state:(int)state { + if (state == 0) { + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } +} + +- (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanDetailInfo { + self.avatarImageView.imageUrl = clanDetailInfo.hall.ownerAvatar; + self.idLabel.text = [NSString stringWithFormat:@"房间ID:%@",clanDetailInfo.hall.ownerErbanNo]; + self.backImageView.imageUrl = clanDetailInfo.hall.ownerAvatar; + self.titleLabel.text = clanDetailInfo.hall.ownerNick; +} + +#pragma mark - Event Response +- (void)backButtonAction:(UIButton *)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)exitButtonAction:(UIButton *)sender { + +} + +#pragma mark - Getters And Setters + +- (UIView *)navView { + if (!_navView) { + _navView = [[UIView alloc] init]; + _navView.backgroundColor = [UIColor clearColor]; + } + return _navView; +} + +- (UIButton *)backButton { + if (!_backButton) { + _backButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_backButton setImage:[UIImage imageNamed:@"home_search_white_back"] forState:UIControlStateNormal]; + [_backButton setImage:[UIImage imageNamed:@"home_search_white_back"] forState:UIControlStateSelected]; + [_backButton addTarget:self action:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _backButton; +} + +- (UILabel *)titleLabel { + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.textAlignment = NSTextAlignmentCenter; + _titleLabel.font = [UIFont systemFontOfSize:17]; + _titleLabel.textColor = [UIColor whiteColor]; + } + return _titleLabel; +} + +- (UIButton *)exitButton { + if (!_exitButton) { + _exitButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_exitButton setTitle:@"退出房间" forState:UIControlStateNormal]; + [_exitButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + _exitButton.titleLabel.font = [UIFont systemFontOfSize:16]; + [_exitButton addTarget:self action:@selector(exitButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _exitButton; +} + +- (UIView *)headerView { + if (!_headerView) { + _headerView = [[UIView alloc] init]; + _headerView.backgroundColor = [UIColor clearColor]; + } + return _headerView; +} + +- (NetImageView *)avatarImageView { + if (!_avatarImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeUserIcon; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _avatarImageView = [[NetImageView alloc] initWithConfig:config]; + _avatarImageView.layer.masksToBounds = YES; + _avatarImageView.layer.cornerRadius = 70/2; + } + return _avatarImageView; +} + +- (UILabel *)idLabel { + if (!_idLabel) { + _idLabel = [[UILabel alloc] init]; + _idLabel.font = [UIFont systemFontOfSize:13]; + _idLabel.textColor = [UIColor whiteColor]; + _idLabel.textAlignment = NSTextAlignmentCenter; + } + return _idLabel; +} + +- (NetImageView *)backImageView { + if (!_backImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeUserIcon; + _backImageView = [[NetImageView alloc] initWithConfig:config]; + _backImageView.contentMode = UIViewContentModeScaleAspectFill; + _backImageView.layer.masksToBounds = YES; + } + return _backImageView; +} + +- (UIVisualEffectView *)blurView { + if (!_blurView) { + UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; + _blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; + _blurView.alpha = 0.3; + } + return _blurView; +} + + +- (UITableView *)tableView { + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + _tableView.showsVerticalScrollIndicator = NO; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPClanMemberTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPClanMemberTableViewCell class])]; + } + return _tableView; +} + +- (NSMutableArray *)datasource { + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; +} +@end diff --git a/xplan-ios/Main/Mine/View/XPMineViewController.m b/xplan-ios/Main/Mine/View/XPMineViewController.m index ff5828ea..e8e51f98 100644 --- a/xplan-ios/Main/Mine/View/XPMineViewController.m +++ b/xplan-ios/Main/Mine/View/XPMineViewController.m @@ -45,6 +45,8 @@ #import "XPSkillCardViewController.h" #import "XPMineVisitorViewController.h" #import "XPMineFansTeamViewController.h" +#import "XPMineClanViewController.h" + @interface XPMineViewController () ///顶部背景 @@ -268,6 +270,13 @@ [self.navigationController pushViewController:fansTeamVc animated:YES]; } break; + case XPMineItemType_My_Guild: + { + XPMineClanViewController * clanVC = [[XPMineClanViewController alloc] init]; + clanVC.uid = [NSString stringWithFormat:@"%ld", self.userInfo.uid]; + [self.navigationController pushViewController:clanVC animated:YES]; + } + break; default: break; }