355 lines
9.5 KiB
Lua
355 lines
9.5 KiB
Lua
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._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
|