源战役客户端
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.
 
 
 
 
 

385 lines
16 KiB

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