源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

248 lines
10 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 人员管理界面
  4. -- *>
  5. GuildListView = GuildListView or BaseClass(BaseItem)
  6. local GuildListView = GuildListView
  7. function GuildListView:__init(parent_wnd,prefab_asset,layer_name)
  8. self.base_file = "guild"
  9. self.layout_file = "GuildListView"
  10. self.parent_wnd = parent_wnd
  11. self.layer_name = layer_name
  12. self.tab_index = 1 -- 页签索引(1成员列表,2社团列表)
  13. self.model = GuildModel:getInstance()
  14. self.model:Fire(GuildModel.RequestMemberViewMemberInfoEvt) -- 请求成员信息
  15. self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40008) -- 请求申请列表
  16. self.mem_sort_type = 1 -- 社团成员战力排序规则
  17. -- 申请社团排行相关
  18. self.guild_rank_list = {} -- 社团列表
  19. self.sroll_end_req_evt = false -- 滑动到底时请求协议
  20. self.cur_page = 1 -- 当前加载了多少页的社团数据(搜索用)
  21. self.rank_req_flag = 1 -- 当前加载的排行榜开始标识(默认从1开始请求)
  22. self.rank_max_num = 100 -- 当前榜单最大数据量
  23. self.total_page = 0 -- 总页数
  24. self.page_size = 15 --向服务器发送一页的个数
  25. self.first_switch_tab2 = true -- 首次切换到社团列表标志量
  26. self:Load()
  27. end
  28. function GuildListView:Load_callback()
  29. local nodes = {
  30. -- 顶部页签
  31. "tab_btn1:obj:img", "tab_btn1/tab1_str:tmp",
  32. "tab_btn2:obj:img", "tab_btn2/tab2_str:tmp",
  33. -- 成员管理页签相关
  34. "mem_btn_con:obj",
  35. "mem_btn_con/posmgr_btn:obj:imgex", "mem_btn_con/apply_btn:obj:imgex", "mem_btn_con/recruit_btn:obj:imgex",
  36. "member_scroll:obj", "member_scroll/Viewport/member_con", "member_scroll/Viewport/member_con/pos_scroll_con:obj",
  37. "memlist_title:obj", "memlist_title/t_r_power:obj", "memlist_title/t_r_onlineFlag:obj",
  38. "memlist_title/r_power_arrow:obj", "memlist_title/r_online_arrow:obj",
  39. "mem_btn_con/apply_btn/apply_red:obj",
  40. -- 社团列表页签相关
  41. "guildlist_title:obj",
  42. "guild_scroll:obj", "guild_scroll/Viewport/guild_con",
  43. }
  44. self:GetChildren(nodes)
  45. -- 初始化箭头方向
  46. SetLocalScale(self.r_online_arrow, 1, 1, 1)
  47. self:AddEvents()
  48. self:SwitchTab(1)
  49. self:UpdateApplyBtnRed()
  50. end
  51. function GuildListView:AddEvents( )
  52. local function click_event(target)
  53. if target == self.tab_btn1_obj then -- 点击页签1
  54. self:SwitchTab(1)
  55. elseif target == self.tab_btn2_obj then -- 点击页签2
  56. self:SwitchTab(2)
  57. elseif target == self.posmgr_btn_obj then -- 社团职位任命
  58. self.model:Fire(GuildModel.OPEN_GUILD_POS_ALLOT_VIEW, true)
  59. elseif target == self.apply_btn_obj then -- 社团申请列表
  60. self.model:Fire(GuildModel.OPEN_GUILD_APPLY_MGR_VIEW, true)
  61. elseif target == self.recruit_btn_obj then -- 社团招募
  62. self.model:SendRecruitMsg()
  63. self:OnCloseGuide()
  64. elseif target == self.t_r_power_obj then -- 社团成员战力排序
  65. self:SwitchSortType(self.r_power_arrow.localScale.y < 0 and 1 or 2)
  66. elseif target == self.t_r_onlineFlag_obj then -- 社团成员战力排序
  67. self:SwitchSortType(self.r_online_arrow.localScale.y < 0 and 4 or 3)
  68. end
  69. end
  70. AddClickEvent(self.tab_btn1_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  71. AddClickEvent(self.tab_btn2_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  72. AddClickEvent(self.posmgr_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
  73. AddClickEvent(self.apply_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
  74. AddClickEvent(self.recruit_btn_obj, click_event)
  75. AddClickEvent(self.t_r_power_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  76. AddClickEvent(self.t_r_onlineFlag_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  77. -- 更新社团列表数据
  78. local function update_guild_rank_list(vo, rank_type)
  79. if rank_type == GuildModel.GuildPowerRankType then
  80. self:UpdateGuildRankData(vo)
  81. end
  82. end
  83. self:BindEvent(self.model, GuildModel.UPDATE_GUILDACTIVE_RANK_DATA, update_guild_rank_list)
  84. -- 更新社团申请按钮红点
  85. local function update_apply_red(view_type)
  86. if not view_type or view_type == Config.ConfigGuild.TabId.List then
  87. self:UpdateApplyBtnRed()
  88. end
  89. end
  90. self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, update_apply_red)
  91. local function onGuideTrigger()
  92. self:AddToStageHandler()
  93. end
  94. self:BindEvent(GlobalEventSystem, EventName.TRIGGER_GUIDE_TYPE, onGuideTrigger)
  95. end
  96. function GuildListView:SwitchTab( index )
  97. self.tab_index = index or 1
  98. -- 玩家为社团管理时
  99. lua_resM:setImageSprite(self, self.tab_btn1_img, "guild_asset", self.tab_index == 1 and "guild_tab1_selected" or "guild_tab1_dark", true)
  100. lua_resM:setImageSprite(self, self.tab_btn2_img, "guild_asset", self.tab_index == 2 and "guild_tab1_selected" or "guild_tab1_dark", true)
  101. local select_color = ColorUtil:ConvertHexToRGBColor("ffffff")
  102. local unselect_color = ColorUtil:ConvertHexToRGBColor("9eb3cf")
  103. self.tab1_str_tmp.color = self.tab_index == 1 and select_color or unselect_color
  104. self.tab2_str_tmp.color = self.tab_index == 2 and select_color or unselect_color
  105. if index == 1 and GuildSpeedModel:getInstance().is_act_jump and not self.is_start_help_step then
  106. GuildSpeedModel:getInstance().is_act_jump = false
  107. self.is_start_help_step = true
  108. GlobalEventSystem:Fire(EventName.TEST_HELP_STEP,HelpType.GUILD_SPEED_ACT_CLICK_ID)
  109. end
  110. if index ~= 1 then
  111. self:OnCloseGuide()
  112. end
  113. self.mem_btn_con_obj:SetActive(self.tab_index == 1)
  114. self.member_scroll_obj:SetActive(self.tab_index == 1)
  115. self.memlist_title_obj:SetActive(self.tab_index == 1)
  116. self.guildlist_title_obj:SetActive(self.tab_index == 2)
  117. self.guild_scroll_obj:SetActive(self.tab_index == 2)
  118. if self.tab_index == 2 and self.first_switch_tab2 then
  119. self:RequestGuildRankData()
  120. self.first_switch_tab2 = false
  121. end
  122. self:UpdateGuildMember()
  123. end
  124. function GuildListView:SwitchSortType(type)
  125. self.mem_sort_type = type
  126. if type == 1 or type == 2 then
  127. self.r_power_arrow_obj:SetActive(true)
  128. self.r_online_arrow_obj:SetActive(false)
  129. SetLocalScale(self.r_power_arrow, 1, type == 1 and 1 or -1, 1)
  130. elseif type == 3 or type == 4 then
  131. self.r_power_arrow_obj:SetActive(false)
  132. self.r_online_arrow_obj:SetActive(true)
  133. SetLocalScale(self.r_online_arrow, 1, type == 4 and 1 or -1, 1)
  134. end
  135. self:UpdateGuildMember()
  136. end
  137. -- 更新成员列表
  138. function GuildListView:UpdateGuildMember( )
  139. if self.tab_index ~= 1 then return end
  140. local data = self.model:GetMemDataByOnlineAndPower(self.mem_sort_type)
  141. self.mem_item_creator = self.mem_item_creator or self:AddUIComponent(UI.ItemListCreator)
  142. local info = {
  143. data_list = data,
  144. item_con = self.member_con,
  145. scroll_view = self.member_scroll,
  146. item_class = GuildListMemItem,
  147. item_height = 100,
  148. create_frequency = 0.01,
  149. alignment = UnityEngine.TextAnchor.UpperLeft,
  150. on_update_item = function(item, i, v)
  151. item:SetData(v, i)
  152. end,
  153. }
  154. self.mem_item_creator:UpdateItems(info)
  155. end
  156. -- 更新社团列表(仅通过协议返回进行更新)
  157. function GuildListView:UpdateGuildRankData(vo)
  158. self.rank_max_num = vo.sum
  159. self:UpdateGuildRankList(vo.rank_list)
  160. end
  161. function GuildListView:UpdateGuildRankList(new_list)
  162. local need_auto_select = TableSize(self.guild_rank_list) == 0
  163. -- 有协议返回的列表则更新,没有的话只做刷新处理
  164. if new_list and #new_list > 0 then
  165. for k, data in pairs(new_list) do
  166. self.guild_rank_list[#self.guild_rank_list+1] = data
  167. end
  168. self.sroll_end_req_evt = false
  169. end
  170. -- 为了避免出现的节点超出的问题,这里要干掉创建好的节点
  171. -- if self.guild_rank_item_creator then
  172. -- self.guild_rank_item_creator:Reset()
  173. -- end
  174. self.guild_rank_item_creator = self.guild_rank_item_creator or self:AddUIComponent(UI.ItemListCreator)
  175. local info = {
  176. data_list = self.guild_rank_list,
  177. item_con = self.guild_con,
  178. scroll_view = self.guild_scroll,
  179. item_class = GuildListGuildItem,
  180. item_height = 100,
  181. create_frequency = 0.01,
  182. alignment = UnityEngine.TextAnchor.UpperLeft,
  183. on_update_item = function(item, i, v)
  184. if i == #self.guild_rank_list - 1 and not self.sroll_end_req_evt then
  185. if self.rank_req_flag + self.page_size <= self.rank_max_num then
  186. -- 调整标志量,请求协议
  187. self.rank_req_flag = self.rank_req_flag + self.page_size
  188. self.sroll_end_req_evt = true
  189. self:RequestGuildRankData()
  190. end
  191. end
  192. item:SetData(v, i)
  193. end,
  194. }
  195. self.guild_rank_item_creator:UpdateItems(info)
  196. end
  197. function GuildListView:RequestGuildRankData()
  198. RankModel:getInstance():Fire(RankModel.REQUEST_CCMD_EVENT, 22102, GuildModel.GuildPowerRankType, self.rank_req_flag, self.page_size)
  199. end
  200. function GuildListView:UpdateApplyBtnRed( )
  201. self.apply_red_obj:SetActive(self.model:GetGuildRedDotCache(Config.ConfigGuild.TabId.List))
  202. end
  203. function GuildListView:__delete( )
  204. self:OnCloseGuide()
  205. end
  206. function GuildListView:AddToStageHandler( )
  207. if IsNull(self.gameObject) then
  208. return
  209. end
  210. local help_vo = GuideModel:getInstance():GetHelpVo(HelpType.GUILD_SPEED_ACT_CLICK,1)
  211. if help_vo then
  212. if help_vo.help_type == HelpType.GUILD_SPEED_ACT_CLICK and help_vo.step == 1 then
  213. local button = self.recruit_btn_obj
  214. if button then
  215. local function call_back()
  216. -- self.model:SendRecruitMsg()
  217. end
  218. GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW,button.transform,self.transform,call_back,help_vo)
  219. end
  220. end
  221. end
  222. end
  223. function GuildListView:OnCloseGuide( )
  224. local help_vo = GuideModel:getInstance():GetHelpVo(HelpType.GUILD_SPEED_ACT_CLICK,1)
  225. if help_vo then
  226. GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,help_vo)
  227. end
  228. GlobalEventSystem:Fire(EventName.CLOSE_GUIDE_PROMPT_VIEW)
  229. end