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

356 lines
9.5 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

local FamilySelectNumber = import(".FamilySelectNumber")
--region LOCAL
local BanDesk = {}
local rootLastIndex = 0
local function HideMainView(self)
rootLastIndex = self.root.familyType.selectedIndex
self.root.familyType.selectedIndex = 0
end
local function ShowMainView(self)
self.root.familyType.selectedIndex = rootLastIndex or 1
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
return re
end
local function GetPlayerFromGroupData(playerId, group)
local player = group.memberMap[playerId]
if player then
return player
end
print("玩家不在group中 玩家id=", playerId)
return nil
end
local function AllUid(deskList)
local re = {}
for _, player in pairs(deskList) do
re[#re + 1] = player.uid
end
return re
end
local function Exists(id, deskList)
for _, player in pairs(deskList) do
if id == player.uid then
return true
end
end
return false
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)
if Exists(number.uid, data.deskList) then
ViewUtil.ShowBannerOnScreenCenter("设置失败,成员已经在关系中")
return
end
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
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
function BanDesk:TryShow(r)
local view = BanDesk.New()
self.root = r
HideMainView(self)
view:Show()
end
function BanDesk:Show()
BaseWindow.Show(self)
self:Reflash()
end
function BanDesk:Close()
BaseView.Close(self)
ShowMainView(self)
end
function BanDesk.New()
setmetatable(BanDesk, { __index = BaseView })
local inst = setmetatable({}, { __index = BanDesk })
inst._close_destroy = true
--inst._full = true
inst._scale = 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()
self.sending = false
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')
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)
self.list_banItem.itemRenderer = function(index, obj)
list_banItemRenderer(index, obj, self)
end
end
function BanDesk:Reflash()
local fgCtr = ControllerManager.GetController(NewGroupController)
local groupId = self.root._group.id
fgCtr:FG_GetBanTable1(groupId, function(res)
self:GetBanTableCallback(res)
end)
end
function BanDesk:GetBanTableCallback(res)
self.BanData = Sort(res.Data.ban_list)
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
local fgCtr = ControllerManager.GetController(NewGroupController)
local groupId = self.root._group.id
local banList = {}
fgCtr:FG_SetBanTable1(groupId, -1, banList, "新建关系", function()
self.sending = false
self:Reflash()
end)
end)
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
return BanDesk