-- <*
|
|
-- @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
|