|
|
- -- <*
- -- @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("开服第<color=#3be85c>%s</color>天开放社团合并!", self.merge_condition.max_day + 1)
- else
- tip = "社团评价为 <color=#66abff>一般</color> 时才可被合并!"
- 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<color=#ff6519>%s</color>社团的合并请求?\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
|