-- <* -- @Author: Saber -- @Description: 社团申请管理界面 -- *> GuildApplyMgrView = GuildApplyMgrView or BaseClass(BaseView) local GuildApplyMgrView = GuildApplyMgrView function GuildApplyMgrView:__init() self.base_file = "guild" self.layout_file = "GuildApplyMgrView" self.layer_name = "Activity" self.destroy_imm = true self.use_background = G_USING_BG --全屏界面默认使用这个参数,非全屏界面自行设置 self.change_scene_close = true --是否切换场景时关闭(弹出界面使用) self.blur_activity_bg = true self.use_show_anim = true self.use_hide_anim = true self.tab_list = { [1] = {id = 1, name = "入团申请", title = "申请列表"}, [2] = {id = 2, name = "职位申请", title = "申请列表"}, [3] = {id = 3, name = "社团合并", title = "社团合并"}, -- 只处理其他社团发送的合并请求 } self.empty_tips_str_list = { [1] = "暂无申请,到世界频道发布团员招募吧!", [2] = "暂无职位申请,到职位分配中进行分配吧!", } self.tab_index = 1 self.is_first_tab_merge = true -- 首次切换到合并界面需要请求一次社团信息 self.model = GuildModel:getInstance() self.select_index = 0 -- 选中的社团index self.selected_guild_id = nil -- 选中的社团id self.merge_list = {} -- 当前筛选出来的满足条件的社团合并申请列表 self.merge_condition = self.model:GetGuildMergeConditionCfg() -- 自动搜索社团功能参数 self.last_change_input_time = Status.NowTime self.need_search = false -- 请求社团合并信息 self.load_callback = function () self:LoadSuccess() self:AddEvent() self.model:Fire(GuildModel.REQUEST_CCMD_EVENT,40008) self.model:Fire(GuildModel.REQUEST_CCMD_EVENT,40032) self:UpdateTabRed() end self.open_callback = function ( ) self:OpenSuccess() end self.destroy_callback = function ( ) self:DestroySuccess() end end function GuildApplyMgrView:Open(index) self.tab_index = index or self.tab_index BaseView.Open(self) end function GuildApplyMgrView:LoadSuccess() local nodes = { -- 主容器 "content", -- 社团申请节点 "content/join_node:obj", "content/join_node/join_scroll:obj", "content/join_node/join_scroll/Viewport/join_con", "content/join_node/join_setting_btn:obj", "content/join_node/join_all_reject_btn:obj", "content/join_node/join_all_pass_btn:obj", -- 职位申请节点 "content/pos_node:obj", "content/pos_node/pos_scroll:obj", "content/pos_node/pos_scroll/Viewport/pos_con", "content/pos_node/pos_all_pass_btn:obj", "content/pos_node/pos_all_reject_btn:obj", -- 社团合并节点 "content/merge_node:obj", "content/merge_node/merge_scroll:obj", "content/merge_node/merge_scroll/Viewport/merge_con", "content/merge_node/merge_btn_con2:obj", -- 按钮类型2 "content/merge_node/merge_btn_con2/merge_cancel_btn:obj", "content/merge_node/merge_btn_con2/merge_cancel_btn/merge_cancel_lb:tmp", "content/merge_node/merge_btn_con2/agree_merge_btn:obj:imgex", -- 空节点 "content/empty_node:obj", "content/empty_node/empty_girl:raw", "content/empty_node/posmgr_btn:obj", "content/empty_node/recruit_btn:obj", "content/empty_node/empty_tip:tmp", } self:GetChildren(nodes) lua_resM:setOutsideRawImage(self, self.empty_girl_raw, GameResPath.GetRoleBg("guild_empty_girl_697_560"), false) -- 2020年12月22日补充节点 self.agree_merge_btn_lb_tmp = self:GetChild("content/merge_node/merge_btn_con2/agree_merge_btn/text"):GetComponent(typeof(TMPro.TextMeshProUGUI)) self.merge_btn_con2_obj:SetActive(true) local function close_callback() self:Close() end local function select_callback(index) self:SwitchTab(index) end self.tabWindowComponent = UITabWindow.New(self.transform, self.tab_list, select_callback, close_callback, self.background_wnd, self.content, UITabWindow.SizeSmall, nil, nil, false) self.tabWindowComponent:SetTitleText(self.tab_list[self.tab_index].title) self.tabWindowComponent:SetBackgroundRes("WindowNew2_bg") end function GuildApplyMgrView:AddEvent() local function click_event(target) if target == self.join_setting_btn_obj then -- 申请设置按钮 GlobalEventSystem:Fire(EventName.OPEN_GUILD_APPLY_SETTING_VIEW, true) elseif target == self.join_all_reject_btn_obj then -- 一键拒绝所有入团申请 self.model:Fire(GuildModel.RequestAgreeApplyListEvt, 2) elseif target == self.join_all_pass_btn_obj then -- 一键通过所有入团申请 self.model:Fire(GuildModel.RequestAgreeApplyListEvt, 1) elseif target == self.pos_all_reject_btn_obj then -- 一键拒绝所有职位申请 self:ResponedPosApplyRequest(0) elseif target == self.pos_all_pass_btn_obj then -- 一键通过所有职位申请 self:ResponedPosApplyRequest(1) elseif target == self.merge_cancel_btn_obj then -- 拒绝/取消合并请求 self:RespondMergeRequest(0) -- 拒绝合并 elseif target == self.agree_merge_btn_obj then -- 同意合并请求 self:RespondMergeRequest(1) elseif target == self.posmgr_btn_obj then -- 打开职位任命界面 self.model:Fire(GuildModel.OPEN_GUILD_POS_ALLOT_VIEW, true) elseif target == self.recruit_btn_obj then -- 一键招募社团成员 self.model:SendRecruitMsg() end end AddClickEvent(self.join_setting_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.join_all_reject_btn_obj, click_event) AddClickEvent(self.join_all_pass_btn_obj, click_event) AddClickEvent(self.pos_all_reject_btn_obj, click_event) AddClickEvent(self.pos_all_pass_btn_obj, click_event) AddClickEvent(self.merge_cancel_btn_obj, click_event) AddClickEvent(self.agree_merge_btn_obj, click_event) AddClickEvent(self.posmgr_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.recruit_btn_obj, click_event) local function refresh_apply_result() if self.tab_index ~= 3 then self:UpdateView() end end self:BindEvent(self.model, GuildModel.RefreshMemberApplyListEvt, refresh_apply_result) -- 更新申请界面时刷新 40008 self:BindEvent(self.model, GuildModel.RefreshtSetApplyMemberStateEvt, refresh_apply_result) -- 更新申请审批时刷新 40009 local function update_red(view_type) if not view_type or view_type == Config.ConfigGuild.TabId.List then self:UpdateTabRed() end end self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, update_red) local function update_guild_merge_info() self:UpdateMergeGuildList(true) end self:BindEvent(self.model, GuildModel.UPDATE_GUILD_MERGE_INFO, update_guild_merge_info) end function GuildApplyMgrView:OpenSuccess() self:SwitchTab(self.tab_index) end function GuildApplyMgrView:UpdateView() self.join_node_obj:SetActive(self.tab_index == 1) self.pos_node_obj:SetActive(self.tab_index == 2) self.merge_node_obj:SetActive(self.tab_index == 3) if self.tab_index == 3 then -- 社团合并的文本需要动态加载 local tip = "" if self.merge_condition then local guild_info = self.model:GetGuildBaseInfo() local guild_division = guild_info and guild_info.division or 0 local division_lv_list = stringtotable(self.merge_condition.merge_lv) local can_merge = false for k,v in pairs(division_lv_list) do if v == guild_division then can_merge = true end end if not can_merge then -- 这个配置代表这个阶段天数内不开合并,后面需要+1天 if self.merge_condition.id < #Config.Guildmerge then tip = string.format("开服第%s天开放社团合并!", self.merge_condition.max_day + 1) else tip = "社团评价为 一般 时才可被合并!" end else tip = "暂无可合并社团信息" end else tip = "暂无可合并社团信息" end self.empty_tip_tmp.text = tip else self.empty_tip_tmp.text = self.empty_tips_str_list[self.tab_index] end self:UpdateJoinData() self:UpdatePosData() self:UpdateMergeGuildList() end function GuildApplyMgrView:SwitchTab( index ) self.tab_index = index if self.tabWindowComponent then self.tabWindowComponent:SetTabBarIndex(self.tab_index) end self:UpdateView() end -- 更新入团申请界面数据 function GuildApplyMgrView:UpdateJoinData( ) if self.tab_index ~= 1 then return end local data = self.model:GetApplyGuildMemData() local empty_data = IsTableEmpty(data) self.empty_node_obj:SetActive(empty_data) self.recruit_btn_obj:SetActive(empty_data) self.posmgr_btn_obj:SetActive(false) self.join_scroll_obj:SetActive(not empty_data) if not empty_data then self.join_item_creator = self.join_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = data, item_con = self.join_con, scroll_view = self.join_scroll, item_class = GuildApplyMgrItem, item_height = 90, start_y = -2, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) item:SetData(self.tab_index, i, v) end, } self.join_item_creator:UpdateItems(info) end end -- 更新职位申请界面数据 function GuildApplyMgrView:UpdatePosData( ) if self.tab_index ~= 2 then return end local data = self.model:GetApplyPosMemData() local empty_data = IsTableEmpty(data) self.empty_node_obj:SetActive(empty_data) self.recruit_btn_obj:SetActive(false) self.posmgr_btn_obj:SetActive(empty_data) self.pos_scroll_obj:SetActive(not empty_data) if not empty_data then self.pos_item_creator = self.pos_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = data, item_con = self.pos_con, scroll_view = self.pos_scroll, item_class = GuildApplyMgrItem, item_height = 90, start_y = -2, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) item:SetData(self.tab_index, i, v) end, } self.pos_item_creator:UpdateItems(info) end end function GuildApplyMgrView:UpdateMergeGuildList(auto_selected) if self.tab_index ~= 3 then return end auto_selected = auto_selected or self.is_first_tab_merge self.recruit_btn_obj:SetActive(false) self.posmgr_btn_obj:SetActive(false) -- 筛选出合并信息 local merge_info = self.model:GetGuildMergeInfo() self.merge_list = merge_info and merge_info.fapplys or {} local empty_data = IsTableEmpty(self.merge_list) self.empty_node_obj:SetActive(empty_data) self.merge_scroll_obj:SetActive(not empty_data) if empty_data then self.select_index = nil self.selected_guild_id = nil return end ----------------------- local function callback(index, guild_id) self.select_index = index self.merge_item_creator:IterateItems(function( item, i ) item:SetSelected(i == self.select_index) end) -- 记录选中的社团id self.selected_guild_id = guild_id end self.merge_item_creator = self.merge_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = self.merge_list, item_con = self.merge_con, scroll_view = self.merge_scroll, item_class = GuildApplyMergeItem, item_height = 90, start_x = 3, start_y = -5, space_y = 2, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, reuse_item_num = 7, on_update_item = function(item, i, v) item:SetData(v, i, callback) item:SetSelected(i == self.select_index) end, } self.merge_item_creator:UpdateItems(info) if auto_selected then callback(1, self.merge_list[1].guild_id) end self.is_first_tab_merge = false -- 更新按钮表现 self:UpdateMergeNodeBtnCon() end -- 统一处理职位申请 opty:0全部拒绝 1:全部通过 function GuildApplyMgrView:ResponedPosApplyRequest(opty) local data = self.model:GetApplyPosMemData() local role_pos = RoleManager.Instance.mainRoleInfo.position local pos_num_list = {} -- 职位已任命人数和最大任命缓存 for k, v in ipairs(data) do if opty == 0 then -- 全部拒绝 self.model:Fire(GuildModel.RequestSetApplyMemberStateEvt, v.role_id, 0) elseif opty == 1 then -- 全部通过,但理论上不可以对自己职位以上的职位进行任命,同时需要判断这个职位是否满人了 pos_num_list[v.position] = pos_num_list[v.position] or {} local has_permission = self.model:HasAppointPremission(v.position, role_pos) local cur_pos_num = pos_num_list[v.position].cur_num or self.model:GetMemberNum(v.position) local cur_pos_max = pos_num_list[v.position].max_num or self.model:GetPositionNum(v.position) local is_max = cur_pos_num >= cur_pos_max if has_permission and not is_max then -- 这里不能等协议返回,需要前端做缓存 self.model:Fire(GuildModel.RequestSetApplyMemberStateEvt, v.role_id, 1) pos_num_list[v.position].cur_num = cur_pos_num + 1 pos_num_list[v.position].max_num = cur_pos_max end end end end -- 回复合并申请 opty:0拒绝 1同意 function GuildApplyMgrView:RespondMergeRequest(opty) if #self.merge_list > 0 and self.select_index then local guild_data = self.merge_list[self.select_index] if not guild_data then return end local guild_name = guild_data.guild_name or "" local function ok( ... ) self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40033, opty, guild_data.guild_id) end local ask_str = string.format("是否确定%s%s社团的合并请求?\n%s", opty == 0 and "拒绝" or "同意", guild_name, opty == 0 and "(拒绝之后3天内无法与同一社团进行合并)" or "(同意之后立即进行合并)") Alert.show(ask_str,Alert.Type.Two,ok,nil,"确定","取消") end end -- 更新合并页签下的按钮节点 function GuildApplyMgrView:UpdateMergeNodeBtnCon() local gray = not self.select_index and true or false self.agree_merge_btn_imgex.gray = gray -- 主动请求合并时灰化同意按钮 SetTMPSharedMaterial(self.agree_merge_btn_lb_tmp, gray and ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn or ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn) end function GuildApplyMgrView:UpdateTabRed( ) self.tabWindowComponent:ShowRedPoint(1, self.model:GetGuildMemberApplyRed()) self.tabWindowComponent:ShowRedPoint(2, self.model:GetGuildPosApplyRed()) self.tabWindowComponent:ShowRedPoint(3, self.model:GetGuildMemberMergeRed()) end function GuildApplyMgrView:DestroySuccess( ) if self.tabWindowComponent then self.tabWindowComponent:DeleteMe() self.tabWindowComponent = nil end self.model:CheckMemberRedDot() end