hengyang_client/lua_probject/base_project/Game/View/Family/FamilyBanDesk.lua

350 lines
9.2 KiB
Lua
Raw Normal View History

2025-06-24 14:54:19 +08:00
local FamilySelectNumber = import(".FamilySelectNumber")
2025-06-17 17:51:24 +08:00
--region LOCAL
local BanDesk = {}
local rootLastIndex = 0
local function HideMainView(self)
rootLastIndex = self.root.familyType.selectedIndex
self.root.familyType.selectedIndex = 0
2025-06-17 17:51:24 +08:00
end
local function ShowMainView(self)
self.root.familyType.selectedIndex = rootLastIndex or 1
2025-06-17 17:51:24 +08:00
end
local function RemoveItem(table, condition)
for _,item in pairs(table) do
if condition(item) then
table[_] = nil
end
end
--修复下标
local re = {}
for _,item in pairs(table) do
re[#re + 1] = item
end
2025-06-23 18:12:12 +08:00
return re
2025-06-23 18:12:12 +08:00
end
local function GetPlayerFromGroupData(playerId, group)
local player = group.memberMap[playerId]
if player then
return player
end
print("玩家不在group中 玩家id=",playerId)
return nil
2025-06-23 18:12:12 +08:00
end
local function AllUid(deskList)
local re = {}
pt(deskList)
for _, player in pairs(deskList) do
re[#re + 1] = player.uid
end
return re
end
local function AddPlayer(data, self)
if self.sending then
ViewUtil.ShowBannerOnScreenCenter("正在操作中。。")
return
end
-- 点击弹出选择成员界面
local view = FamilySelectNumber.New()
view:Show(self.root._group.id, function(number)
local players = AllUid(data.deskList)
players[#players + 1] = number.uid
self.sending = true
local fgCtr = ControllerManager.GetController(NewGroupController)
fgCtr:FG_SetBanTable1(self.root._group.id, data.deskId, players, data.deskName, function(res)
self.sending = false
if res.ReturnCode ~= 0 then
ViewUtil.ShowBannerOnScreenCenter("设置失败")
return
end
data.deskList[#data.deskList + 1] = {uid = number.uid}
self:ReflashDesk()
end)
end)
end
local function DelPalyer(data, uid, self)
--print("删除玩家", uid)
if self.sending then
ViewUtil.ShowBannerOnScreenCenter("正在操作中。。")
return
end
local players = AllUid(data.deskList)
for _, id in pairs(players) do
if id == uid then
players[_] = nil
end
end
-- 修复下标的连续性不然json.encode会吧空下标也解析出来
local fix = {}
for _, id in pairs(players) do
fix[#fix + 1] = id
end
players = fix
self.sending = true
local fgCtr = ControllerManager.GetController(NewGroupController)
fgCtr:FG_SetBanTable1(self.root._group.id, data.deskId, players, data.deskName, function(res)
self.sending = false
if res.ReturnCode ~= 0 then
ViewUtil.ShowBannerOnScreenCenter("删除失败")
return
end
data.deskList = RemoveItem(data.deskList, function(item)
if item.uid == uid then
return true
end
end)
self:ReflashDesk()
end)
end
local function DelDesk(data, self)
if self.sending then
ViewUtil.ShowBannerOnScreenCenter("正在操作中。。")
return
end
self.sending = true
local fgCtr = ControllerManager.GetController(NewGroupController)
fgCtr:FG_SetBanTable1(self.root._group.id, data.deskId, {}, data.deskName, function()
self.sending = false
self:Reflash()
end)
end
local function ChangeName(deskData, name, self)
local fgCtr = ControllerManager.GetController(NewGroupController)
fgCtr:FG_SetBanTable1(self.root._group.id, deskData.deskId, AllUid(deskData.deskList), name, function(res)
if res.ReturnCode ~= 0 then
ViewUtil.ShowBannerOnScreenCenter("删除失败")
return
end
deskData.deskName = name
self:ReflashDesk()
self:CloseRemaskWindow()
end)
end
local function Sort(BanData)
-- 把空的桌子放到下面
local emtpy = {}
for index, desk in pairs(BanData) do
if desk.deskList == nil or #desk.deskList == 0 then
emtpy[#emtpy + 1] = desk
BanData[index] = nil
end
end
local re = {}
for _, desk in pairs(BanData) do
re[#re + 1] = desk
end
for _, desk in pairs(emtpy) do
re[#re + 1] = desk
end
return re
end
2025-06-17 17:51:24 +08:00
local function list_BanedPlayersRenderer(index, obj, data, self, fatherIndex)
local loader_icon = obj:GetChild("loader_icon")
local tex_name = obj:GetChild("tex_name")
local uid = data.deskList[index + 1].uid
local player = GetPlayerFromGroupData(uid, self.root._group)
obj:GetController("cStyle").selectedIndex = 0
tex_name.text = player.nick
local img = player.portrait
ImageLoad.Load(img, loader_icon)
local btn_delPlayer = obj:GetChild("btn_delPlayer")
btn_delPlayer.onClick:Set(function()
-- 删除玩家按钮
self.changedIndex = fatherIndex
DelPalyer(data, player.uid, self)
end)
end
local function list_banItemRenderer(index, obj, self)
local data = self.BanData[index +1]
--print("刷新关系")
--pt(data)
local tex_name = obj:GetChild("tex_name")
local list_BanedPlayers = obj:GetChild("list_BanedPlayers")
local btn_del = obj:GetChild("btn_del")
local btn_edit = obj:GetChild("btn_edit")
tex_name.text = data.deskName
obj:GetController("cStyle").selectedIndex = 0
btn_edit.onClick:Set(function()
-- 修改备注
self.changedIndex = index
self.selectBanItem = data
self:OpenRemaskWindow()
end)
btn_del.onClick:Set(function()
-- 删除整个桌子
DelDesk(data, self)
end)
list_BanedPlayers.itemRenderer = function(i, o)
list_BanedPlayersRenderer(i, o, data, self, index)
end
list_BanedPlayers.numItems = #data.deskList
local add_play = list_BanedPlayers:AddItemFromPool()
add_play:GetController("cStyle").selectedIndex = 1
add_play:GetChild("btn_addPlayer").onClick:Set(function()
-- 添加玩家按钮
self.changedIndex = index
AddPlayer(data, self)
end)
end
--endregion
2025-06-23 18:12:12 +08:00
2025-06-17 17:51:24 +08:00
function BanDesk:TryShow(r)
2025-06-24 14:54:19 +08:00
local view = BanDesk.New()
2025-06-17 17:51:24 +08:00
self.root = r
HideMainView(self)
2025-06-24 14:54:19 +08:00
view:Show()
2025-06-17 17:51:24 +08:00
end
2025-06-23 18:12:12 +08:00
function BanDesk:Show()
BaseWindow.Show(self)
self:Reflash()
end
2025-06-17 17:51:24 +08:00
function BanDesk:Close()
BaseView.Close(self)
ShowMainView(self)
2025-06-17 17:51:24 +08:00
end
2025-06-24 14:54:19 +08:00
function BanDesk.New()
2025-06-17 17:51:24 +08:00
setmetatable(BanDesk, {__index = BaseView})
2025-06-24 14:54:19 +08:00
local inst = setmetatable({}, {__index = BanDesk})
inst._close_destroy = true
inst._full = true
inst._animation = false
inst._full_offset = false
inst._anim_pop = 0
BaseWindow.init(inst, 'ui://Family/com_banDesk')
inst:Init()
inst._root_view:GetChild("win_mode").visible = false
return inst
end
function BanDesk:Init()
2025-06-17 17:51:24 +08:00
self.sending = false
2025-06-17 17:51:24 +08:00
self.btn_close = self._view:GetChild("btn_close")
self.list_banItem = self._view:GetChild("list_banItem")
self.cSetName = self._view:GetController("cSetName")
self.btn_bgRemask = self._view:GetChild("btn_bgRemask")
self.btn_confirmRemask = self._view:GetChild("btn_confirmRemask")
self.btn_quitRemask = self._view:GetChild("btn_quitRemask")
self.input_name = self._view:GetChild("input_name")
self.btn_confirmRemask = self._view:GetChild("btn_confirmRemask")
self.input_name = self._view:GetChild('input_name')
2025-06-17 17:51:24 +08:00
self.btn_close.onClick:Set(function()
self:Close()
end)
self.btn_quitRemask.onClick:Set(function()
self:CloseRemaskWindow()
end)
self.btn_bgRemask.onClick:Set(function()
self:CloseRemaskWindow()
end)
self.btn_confirmRemask.onClick:Set(function()
local name = self.input_name.text
ChangeName(self.selectBanItem, name, self)
end)
2025-06-17 17:51:24 +08:00
self.list_banItem.itemRenderer = function(index, obj)
list_banItemRenderer(index, obj, self)
2025-06-17 17:51:24 +08:00
end
2025-06-17 21:49:48 +08:00
end
function BanDesk:Reflash()
2025-06-23 18:12:12 +08:00
local fgCtr = ControllerManager.GetController(NewGroupController)
local groupId = self.root._group.id
2025-06-23 18:12:12 +08:00
fgCtr:FG_GetBanTable1(groupId,function(res)
2025-06-24 14:54:19 +08:00
self:GetBanTableCallback(res)
2025-06-23 18:12:12 +08:00
end)
2025-06-17 17:51:24 +08:00
end
2025-06-24 14:54:19 +08:00
function BanDesk:GetBanTableCallback(res)
self.BanData = Sort(res.Data.ban_list)
2025-06-24 14:54:19 +08:00
self.list_banItem.numItems = #self.BanData
-- 最后一个添加ban按钮
local addBanItem = self.list_banItem:AddItemFromPool()
local btn_addBanItem = addBanItem:GetChild("btn_addBanItem")
addBanItem:GetController("cStyle").selectedIndex = 1
btn_addBanItem.onClick:Set(function()
if self.sending then
ViewUtil.ShowBannerOnScreenCenter("正在操作中。。")
return
end
self.sending = true
2025-06-24 14:54:19 +08:00
local fgCtr = ControllerManager.GetController(NewGroupController)
local groupId = self.root._group.id
2025-06-24 14:54:19 +08:00
local banList = {}
fgCtr:FG_SetBanTable1(groupId, -1, banList, "新建关系", function()
self.sending = false
2025-06-24 14:54:19 +08:00
self:Reflash()
2025-06-23 18:12:12 +08:00
end)
2025-06-24 14:54:19 +08:00
end)
2025-06-23 18:12:12 +08:00
end
function BanDesk:ReflashDesk()
local obj = self.list_banItem:GetChildAt(self.changedIndex)
list_banItemRenderer(self.changedIndex, obj, self)
end
-- 打开备注界面
function BanDesk:OpenRemaskWindow()
self.cSetName.selectedIndex = 1
end
function BanDesk:CloseRemaskWindow()
self.cSetName.selectedIndex = 0
end
2025-06-23 18:12:12 +08:00
2025-06-17 17:51:24 +08:00
return BanDesk