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.ErrorTip(-1, "正在操作中。。") return end -- 点击弹出选择成员界面 local view = FamilySelectNumber.New(data) view:Show(self.root._group.id, function(number) if Exists(number.uid, data.deskList) then ViewUtil.ErrorTip(-1, "设置失败,成员已经在关系中") return end local players = AllUid(data.deskList) players[#players + 1] = number.uid self.sending = true local fgCtr = ControllerManager.GetController(NewGroupController) ViewUtil.ShowModalWait2() fgCtr:FG_SetBanTable1(self.root._group.id, data.deskId, players, data.deskName, function(res) self.sending = false ViewUtil.CloseModalWait2() if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(-1, "设置失败") 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.ErrorTip(-1, "正在操作中。。") 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) ViewUtil.ShowModalWait2() fgCtr:FG_SetBanTable1(self.root._group.id, data.deskId, players, data.deskName, function(res) self.sending = false ViewUtil.CloseModalWait2() if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(-1, "删除失败") 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.ErrorTip(-1, "正在操作中。。") return end self.sending = true local fgCtr = ControllerManager.GetController(NewGroupController) ViewUtil.ShowModalWait2() fgCtr:FG_SetBanTable1(self.root._group.id, data.deskId, {}, data.deskName, function() ViewUtil.CloseModalWait2() self.sending = false self:Reflash() end) end local function ChangeName(deskData, name, self) local fgCtr = ControllerManager.GetController(NewGroupController) ViewUtil.ShowModalWait2() fgCtr:FG_SetBanTable1(self.root._group.id, deskData.deskId, AllUid(deskData.deskList), name, function(res) ViewUtil.CloseModalWait2() if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(-1, "删除失败") 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() -- 删除玩家按钮 local _curren_msg = MsgWindow.new(self._root_view, '是否确认删除该成员?', MsgWindow.MsgMode.OkAndCancel) _curren_msg.onOk:Add(function() self.changedIndex = fatherIndex DelPalyer(data, player.uid, self) end) _curren_msg:Show() 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() -- 删除整个桌子 local _curren_msg = MsgWindow.new(self._root_view, '是否确认删除该分组关系?', MsgWindow.MsgMode.OkAndCancel) _curren_msg.onOk:Add(function() DelDesk(data, self) end) _curren_msg:Show() 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 ViewUtil.ShowModalWait2() fgCtr:FG_GetBanTable1(groupId, function(res) ViewUtil.CloseModalWait2() 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.ErrorTip(-1, "正在操作中。。") return end self.sending = true local fgCtr = ControllerManager.GetController(NewGroupController) local groupId = self.root._group.id local banList = {} ViewUtil.ShowModalWait2() fgCtr:FG_SetBanTable1(groupId, -1, banList, "新建关系", function() ViewUtil.CloseModalWait2() 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