local TimeSettingPanel = import(".TimeSettingPanelTog") local GroupPartnerStatMember = import(".GroupPartnerStatMember") local GroupPartnerStatPlay = import(".GroupPartnerStatPlay") local GroupNumberInputView = import(".GroupNumberInputView") -- 开桌统计 local GroupMngPartnerStatViewAlone = {} local M = GroupMngPartnerStatViewAlone setmetatable(M, { __index = BaseWindow }) function GroupMngPartnerStatViewAlone.new(gid) local self = setmetatable({}, { __index = M }) self.class = "GroupMngPartnerStatViewAlone" self.group_id = gid self:InitView() return self end --初始化数据 function M:initData() self.lst_record.numItems = 0 self.ctr_search = self._view:GetController('search') local now_time = os.date("*t", now) local today = os.time({ year = now_time.year, month = now_time.month, day = now_time.day, hour = 0, min = 0, sec = 0 }) self.begin_time = today self.end_time = today + 86400 self._data_record = {} self._selectIndexList = {} self._selectIndex = 0 self._selectedLev = 0 self:GetRecordData(0) end --初始化页面 function M:InitView() BaseWindow.init(self, "ui://NewGroup/View_GroupPartnerStatAlone") local group = DataManager.groups:get(self.group_id) self:InitListRecord() self.time_panel = TimeSettingPanel.new(self._view, self._view:GetChild("btn_date1"), self._view:GetChild("btn_date2"), -308, 0, function() self.begin_time, self.end_time = self.time_panel:GetDate() self:InitListRecord() if self._view:GetController('search').selectedIndex == 1 then ViewUtil.ShowModalWait(nil) local text = self._view:GetChild('tex_id').text local qid, qnick if text == "" then ViewUtil.CloseModalWait() ViewUtil.ErrorTip(nil, '输入不能为空') return end qid = tonumber(text) or 0 qnick = text local time_type = self._view:GetController("type").selectedIndex if self.begin_time ~= nil and self.end_time ~= nil then time_type = 0 end local fgCtr = ControllerManager.GetController(NewGroupController) fgCtr:FG_FindPartnerStat( self.group_id, qid, 0, 6, time_type, self.begin_time, self.end_time, function(res) -- printlog("aaaaaaaaaaaaaaaa22222222222222222222222222222") -- pt(res) ViewUtil.CloseModalWait() if self._is_destroy then return end if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(res.ReturnCode, '找不到成员') else self:ChangedClear(0) self:InitListRecordFind() self:InsertTableRecord(1, res.Data.members[1]) self._selectedLev = 1 self._selectIndex = 1 self._selectIndexList[self._selectedLev] = self._selectIndex self:GetAllRecordData(0, { lev = 1, index = 1 }) end end ) else self:ChangedClear(0) self:GetRecordData() end end, { showDay = group.lev < 3 and 30 or 7 }) self.begin_time, self.end_time = self.time_panel:GetDate() local ctr_page = self._view:GetController("type") ctr_page.onChanged:Set(function() self.lst_record.numItems = 0 if ctr_page.selectedIndex == 0 then local now_time = os.date("*t", now) local today = os.time({ year = now_time.year, month = now_time.month, day = now_time.day, hour = 0, min = 0, sec = 0 }) self.begin_time = today self.end_time = today + 86400 else local now_time = os.date("*t", now) local today = os.time({ year = now_time.year, month = now_time.month, day = now_time.day, hour = 0, min = 0, sec = 0 }) self.begin_time = today - 86400 * ctr_page.selectedIndex self.end_time = today - 86400 * (ctr_page.selectedIndex - 1) end self:GetRecordData() end) -- 搜索玩家 self._view:GetChild('btn_search').onClick:Set( function() --printlog("aaaaaaaaaa1111111111111111111111111111111111111111111111") ViewUtil.ShowModalWait(nil) local text = self._view:GetChild('tex_id').text local qid, qnick if text == "" then ViewUtil.CloseModalWait() ViewUtil.ErrorTip(nil, '输入不能为空') return end qid = tonumber(text) or 0 qnick = text local time_type = self._view:GetController("type").selectedIndex if self.begin_time ~= nil and self.end_time ~= nil then time_type = 0 end local fgCtr = ControllerManager.GetController(NewGroupController) fgCtr:FG_FindPartnerStat( self.group_id, qid, 0, 6, time_type, self.begin_time, self.end_time, function(res) -- printlog("aaaaaaaaaaaaaaaa22222222222222222222222222222") -- pt(res) ViewUtil.CloseModalWait() if self._is_destroy then return end if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(res.ReturnCode, '找不到成员') else if not res.Data.members or #res.Data.members == 0 then ViewUtil.ErrorTip(res.ReturnCode, '找不到成员') return end self.ctr_search.selectedIndex = 1 self:ChangedClear(0) self:InitListRecordFind() self:InsertTableRecord(1, res.Data.members[1]) self._selectedLev = 1 self._selectIndex = 1 self._selectIndexList[self._selectedLev] = self._selectIndex self:GetAllRecordData(0, { lev = 1, index = 1 }) end end ) end ) local btn_back = self._view:GetChild('btn_back') btn_back.onClick:Set( function() self._view:GetChild('tex_id').text = "" self:ChangedClear(0) self:GetRecordData() end ) end ---comment 根据lev等级添加数据 ---@param lev number 用户所在的等级 ---@param data table 用户信息 function M:InsertTableRecord(lev, data) if self._data_record[lev] then table.insert(self._data_record[lev], data) else self._data_record[lev] = {} table.insert(self._data_record[lev], data) end end -- comment 获取全部数据之后,计算相关参数,count为全部数据的数量,selectCount为点击的用户是第几个子项 function M:GetDataRecordLevList() local count = 0 local selectCount = 0 for i = 1, #self._data_record do count = count + #self._data_record[i] end for i = 1, self._selectIndexList and #self._selectIndexList or 1 do selectCount = selectCount + (self._selectIndexList and self._selectIndexList[i] or 1) end if self._lst_selectIndex then selectCount = selectCount + self._lst_selectIndex self._lst_selectIndex = nil end self._data_record.count = count if self.ctr_search.selectedIndex == 1 then if self.item_result.numItems == self._data_record.count then self.item_result:RefreshVirtualList() else self.item_result.numItems = self._data_record.count end self.item_result:ScrollToView(self._selectedLev == 0 and 0 or selectCount - 1) else if self.lst_record.numItems == self._data_record.count then self.lst_record:RefreshVirtualList() else self.lst_record.numItems = self._data_record.count end self.lst_record:ScrollToView(self._selectedLev == 0 and 0 or selectCount - 1) end end -- comment 根据展开规则,递归得到对应的数据的层级和索引,通过层级索引获得对应数据 ---@param index number 虚拟列表的子项index ---@param lev number 默认为1,表示从第一项开始递归计算,也可以在函数内设置,此处在调用时默认传1 ---@return number 返回子项在数据表中的层级 ---@return number 返回子项在数据表层级中的索引 function M:RecursionGetIndex(index, lev) if lev <= #self._selectIndexList then if self._selectIndexList[lev] == nil then return 1, 1 end if index <= self._selectIndexList[lev] then return lev, index end return self:RecursionGetIndex(index - self._selectIndexList[lev], lev + 1) else local haveXia = self._data_record[self._selectedLev + 1] and 1 or 0 local tempLev = #self._selectIndexList - (lev - self._selectedLev - 1 - haveXia) if index <= #self._data_record[tempLev] - (self._selectIndexList[tempLev] or 0) then return tempLev, (self._selectIndexList[tempLev] or 0) + index end return self:RecursionGetIndex(index - (#self._data_record[tempLev] - (self._selectIndexList[tempLev] or 0)), lev + 1) end end -- comment 搜索和非搜索通用的虚拟列表渲染逻辑 ---@param index any 虚拟列表传输过来的子项索引 ---@param obj any 虚拟列表传输过来的子项 function M:ListRenderer(index, obj) local tempLev, tempIndex = self:RecursionGetIndex(index + 1, 1) local dataInfo = self._data_record[tempLev][tempIndex] local nameStr = ViewUtil.stringEllipsis(dataInfo.nick) if dataInfo.hpall and dataInfo.hpall.total_member and (dataInfo.partnerLev ~= 0 or dataInfo.lev == 1) then nameStr = string.format("%s(%d)", nameStr, dataInfo.hpall.total_member - 1) end obj:GetChild("tex_name").text = nameStr obj:GetChild("tex_id").text = "ID:" .. dataInfo.uid local tex_total_score = obj:GetChild("tex_total_score") local ctr_show_total = obj:GetController("show_total") if dataInfo.hpall then tex_total_score.text = d2ad(dataInfo.hpall.hp) ctr_show_total.selectedIndex = 1 else ctr_show_total.selectedIndex = 0 end obj:GetChild("tex_round_valid").text = d2ad((dataInfo.reward_tongji or dataInfo.reward_hp) + dataInfo .total_win) --d2ad(data.reward_hp) --data.valid_round / 100 obj:GetChild("tex_round_total").text = dataInfo.total_round obj:GetChild("tex_total").text = d2ad(dataInfo.total_win) obj:GetChild("tex_round_youxiao").text = dataInfo.valid_round / 100 obj:GetChild('tex_reward').text = d2ad(dataInfo.reward_tongji or dataInfo.reward_hp) obj:GetChild("btn_more").visible = not dataInfo.partnerLev or dataInfo.partnerLev > 0 obj:GetController("more").onChanged:Set(function() end) if tempLev <= self._selectedLev then obj:GetController("select").selectedIndex = 1 else obj:GetController("select").selectedIndex = 0 end if tempIndex == self._selectIndexList[tempLev] then obj:GetController("more").selectedIndex = 1 else obj:GetController("more").selectedIndex = 0 end obj:GetController("more").onChanged:Set(function(context) self:MoreChanged(context, { lev = tempLev, index = tempIndex }) end) local btn_check_members = obj:GetChild("btn_check_members") btn_check_members.visible = not dataInfo.partnerLev or dataInfo.partnerLev > 0 btn_check_members.onClick:Set(function() ViewUtil.ShowModalWait(self._root_view) local fgCtr = ControllerManager.GetController(NewGroupController) if dataInfo.uid == DataManager.SelfUser.account_id then fgCtr:FG_GetMembersCount(self.group_id, function(res) ViewUtil.CloseModalWait() if res.ReturnCode == 0 then tex_total_score.text = d2ad(res.Data.hp_num1 + res.Data.otherHp) ctr_show_total.selectedIndex = 1 else ViewUtil.ErrorTip(res.ReturnCode, "目标没有总线值") end end) else fgCtr:FG_GetTotalHp(self.group_id, dataInfo.uid, function(res) ViewUtil.CloseModalWait() if res.ReturnCode == 0 then local hp = d2ad(res.Data.hp) tex_total_score.text = hp dataInfo._total_hp = hp ctr_show_total.selectedIndex = 1 end end) end end) obj:GetChild('btn_super').visible = not dataInfo.partnerLev or dataInfo.partnerLev > 0 obj:GetChild('btn_super').onClick:Set(function() local myInfo = self._data_record[tempLev][tempIndex] if myInfo._flag_normol then ViewUtil.ErrorTip(nil, '已获取全部普通用户') return end myInfo._flag_normol = true if obj:GetController("more").selectedIndex == 0 then self:ChangedClear(tempLev) ViewUtil:ShowModalWait() if tempLev == 1 then self._selectedLev = 1 self._selectIndex = tempIndex self._selectIndexList[self._selectedLev] = self._selectIndex self:LevGetRecordData(0, dataInfo, self.GetNumberRecordForLev1(self, 0, { lev = tempLev, index = tempIndex })) else self._selectedLev = tempLev self._selectIndex = tempIndex self._selectIndexList[self._selectedLev] = self._selectIndex self:GetAllRecordData(0, { lev = tempLev, index = tempIndex }, self.GetNumberRecord(self, 0, { lev = tempLev, index = tempIndex })) end else self:ChangedClear(tempIndex + 1) self._selectedLev = tempLev self._selectIndex = tempIndex self._selectIndexList[self._selectedLev] = self._selectIndex if tempLev == 1 and not dataInfo.partnerLev and #self._data_record >= 2 then ViewUtil.ShowModalWait("正在获取成员中") self:GetNumberRecordForLev1(0, { lev = tempLev, index = tempIndex }) ViewUtil.CloseModalWait() else self:GetNumberRecord(0, { lev = tempLev, index = tempIndex }) end end end) end -- comment 初始化初始list function M:InitListRecord() if not self.lst_record then self.lst_record = self._view:GetChild("lst_record") self.lst_record:SetVirtual() self.lst_record.itemRenderer = function(index, obj) self:ListRenderer(index, obj) end end end -- comment 初始化搜索list function M:InitListRecordFind() if not self.item_result then self.item_result = self._view:GetChild("lst_member_find") self.item_result:SetVirtual() self.item_result.itemRenderer = function(index, obj) self:ListRenderer(index, obj) end end end -- comment 第一次获取非搜索的数据 function M:GetRecordData() ViewUtil.ShowModalWait() local group = DataManager.groups:get(self.group_id) local time_type = self._view:GetController("type").selectedIndex if self.begin_time ~= nil and self.end_time ~= nil then time_type = 0 end self:InitListRecord() local fgCtr = ControllerManager.GetController(NewGroupController) if group.lev == 1 then ViewUtil.ShowModalWait("获取盟主数据中") self.groupumberTemp = {} self.groupumberTemp.lev = 1 self.groupumberTemp.uid = group.owner self.groupumberTemp.nick = group.o_nick self.groupumberTemp.total_round = 0 self.groupumberTemp.valid_round = 0 self.groupumberTemp.reward_hp = 0 self.groupumberTemp.total_win = 0 self:GetPropLog(0) else self:GetFristData(fgCtr, 0, time_type) end end -- comment 非盟主第一次获取数据 ---@param fgCtr any 亲友圈控制器 ---@param index number 递归开始下标,默认传0 ---@param time_type number 时间类型 0为拼接传过去的开始时间和结束时间去搜索 function M:GetFristData(fgCtr, index, time_type) fgCtr:FG_GetPartnerStat(self.group_id, index * 67, 67, time_type, self.begin_time, self.end_time, function(res) ViewUtil.CloseModalWait() if res.ReturnCode == 0 then self:InitListRecord() local members = res.Data.members if members and #members then for i = 1, #members do if members[i].uid == DataManager.SelfUser.account_id then self:InsertTableRecord(1, members[i]) self._selectedLev = 1 self._selectIndex = 1 self._selectIndexList[self._selectedLev] = self._selectIndex self:LevGetRecordData(0, members[i]) break end end else if index == 0 and (not members or #members == 0) then ViewUtil.ErrorTip(nil, "你不是合伙人") return end end else ViewUtil.ErrorTip(res.ReturnCode, "当前成员获取失败") end end) end -- comment 盟主第一次获取数据 --- sp:里面包含连续两条协议调用,之后可以只用一条协议就能获取所有内容,或者和获取代理数据的协议合并 ---@param index number 递归开始下标,默认传0 function M:GetPropLog(index) local fgCtr = ControllerManager.GetController(NewGroupController) fgCtr:FG_GetPropLog(self.group_id, index * 67, 67, self.begin_time, self.end_time, function(res) if res.ReturnCode ~= 0 then ViewUtil.CloseModalWait() ViewUtil.ErrorTip(res.ReturnCode, "获取排名信息失败") else local info = res.Data self.groupumberTemp.total_round = info.count self.groupumberTemp.valid_round = info.valid_count * 100 self.groupumberTemp.reward_hp = info.pump self.groupumberTemp.total_win = 0 self.groupumberTemp.hpall = {} self.groupumberTemp.hpall.hp = info.hp_num1 self.groupumberTemp.hpall.total_member = info.member_num or 0 self:InsertTableRecord(1, self.groupumberTemp) self._selectedLev = 1 self._selectIndex = 1 self._selectIndexList[self._selectedLev] = self._selectIndex self:LevGetRecordData(0, self.groupumberTemp) ViewUtil.CloseModalWait() -- fgCtr:FG_GetMembersCount(self.group_id, function(res) -- ViewUtil.CloseModalWait() -- if res.ReturnCode == 0 then -- self.groupumberTemp.hpall = {} -- self.groupumberTemp.hpall.hp = res.Data.hp_num1 + res.Data.otherHp -- self.groupumberTemp.hpall.total_member = res.Data.member_num -- self:InsertTableRecord(1, self.groupumberTemp) -- self._selectedLev = 1 -- self._selectIndex = 1 -- self._selectIndexList[self._selectedLev] = self._selectIndex -- self:LevGetRecordData(0, self.groupumberTemp) -- else -- ViewUtil.ErrorTip(res.ReturnCode, "目标没有总线值") -- end -- end) end end) end -- comment 点击减号触发获取数据 ---@param context any 官方传输的信息 ---@param data table 自己拼接的信息,lev为点击数据所在的层级,index为点击数据所在的索引 function M:MoreChanged(context, data) if context.sender.selectedIndex == 1 then local myInfo = self._data_record[data.lev][data.index] if myInfo then self:ChangedClear(data.lev) ViewUtil:ShowModalWait() if self.ctr_search.selectedIndex == 1 then local time_type = self._view:GetController("type").selectedIndex if self.begin_time ~= nil and self.end_time ~= nil then time_type = 0 end local fgCtr = ControllerManager.GetController(NewGroupController) fgCtr:FG_FindPartnerStat( self.group_id, myInfo.uid, 0, 6, time_type, self.begin_time, self.end_time, function(res) -- printlog("aaaaaaaaaaaaaaaa22222222222222222222222222222") -- pt(res) ViewUtil.CloseModalWait() if self._is_destroy then return end if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(res.ReturnCode, '找不到成员') else if not res.Data.members or #res.Data.members == 0 then ViewUtil.ErrorTip(res.ReturnCode, '找不到成员') return end self.ctr_search.selectedIndex = 1 self:ChangedClear(0) self:InitListRecordFind() self:InsertTableRecord(1, res.Data.members[1]) self._selectedLev = 1 self._selectIndex = 1 self._selectIndexList[self._selectedLev] = self._selectIndex self:GetAllRecordData(0, { lev = 1, index = 1 }) end end ) else if data.lev == 1 then self._selectedLev = 1 self._selectIndex = data.index self._selectIndexList[self._selectedLev] = self._selectIndex self:LevGetRecordData(0, myInfo) else self._selectedLev = data.lev self._selectIndex = data.index self._selectIndexList[self._selectedLev] = self._selectIndex self:GetAllRecordData(0, data) end end else ViewUtil.ErrorTip(nil, "统计页面失效,请重新打开") end else self._lst_selectIndex = self._selectIndexList[data.lev] self:ChangedClear(data.lev) self._selectedLev = data.lev - 1 self._selectIndex = self._selectIndexList[self._selectedLev] or 0 self:GetDataRecordLevList() end end -- comment 清理指定层级一下的所有数据 ---@param lev number 指定的层级,一般是点击数据所在的层级,收缩是是点击层级的上一级 function M:ChangedClear(lev) if lev ~= 0 then self._selectIndexList[lev] = nil end for i = lev + 1, #self._data_record do self._data_record[i] = nil self._selectIndexList[i] = nil end end -- comment 盟主递归获取普通成员数据 ---@param index number 递归开始下标,默认传0 function M:GetNumberRecordForLev1(index) local time_type = self._view:GetController("type").selectedIndex if self.begin_time ~= nil and self.end_time ~= nil then time_type = 0 end local fgCtr = ControllerManager.GetController(NewGroupController) fgCtr:FG_GroupMembers12( self.group_id, index * 67, 67, 1, 2, function(res) if res.ReturnCode ~= 0 then ViewUtil.ErrorTip(res.ReturnCode, '获取成员列表失败') else local numbers = res.Data.members if #numbers == 0 then self:GetDataRecordLevList() else self:ChangedClear(3) for i = 1, #numbers do if numbers[i].lev ~= 1 and numbers[i].partnerLev == 0 then self:InsertTableRecord(2, numbers[i]) end end self:GetNumberRecordForLev1(index + 1) end end end ) end -- comment 非盟主递归获取普通成员数据 ---@param index number 递归开始下标,默认传0 ---@param data table 自己拼接的信息,lev为点击数据所在的层级,index为点击数据所在的索引 function M:GetNumberRecord(index, data) local time_type = self._view:GetController("type").selectedIndex if self.begin_time ~= nil and self.end_time ~= nil then time_type = 0 end local myInfo = self._data_record[data.lev][data.index] ViewUtil.ShowModalWait("正在获取成员中") local fatherInfo if self.ctr_search.selectedIndex == 1 then fatherInfo = {} fatherInfo.uid = DataManager.SelfUser.account_id else fatherInfo = self._data_record[data.lev][data.index] if data.lev > 1 then fatherInfo = self._data_record[data.lev - 1][self._selectIndexList[data.lev - 1]] end end local fgCtr = ControllerManager.GetController(NewGroupController) fgCtr:FG_GetDirectMemberStat(self.group_id, myInfo.uid, fatherInfo.uid, index * 67, 67, time_type, self.begin_time, self.end_time, function(res) ViewUtil.CloseModalWait() if res.ReturnCode == 0 then local members = res.Data.members if #members > 0 then for i = 1, #members do if members[i].partnerLev and members[i].partnerLev == 0 then self:InsertTableRecord(data.lev + 1, members[i]) end end self:GetNumberRecord(index + 1, data) else self:GetDataRecordLevList() end end end) end -- comment 递归获取第一级代理数据 ---@param index number 递归开始下标,默认传0 ---@param data table 自己拼接的信息,lev为点击数据所在的层级,index为点击数据所在的索引 ---@param callback function 用于点击非展开数据的查看下级按钮,一般是对应递归获取普通成员的方法 function M:LevGetRecordData(index, data, callback) local time_type = self._view:GetController("type").selectedIndex if self.begin_time ~= nil and self.end_time ~= nil then time_type = 0 end local fgCtr = ControllerManager.GetController(NewGroupController) fgCtr:FG_GetPartnerStat(self.group_id, index * 67, 67, time_type, self.begin_time, self.end_time, function(res) ViewUtil.CloseModalWait() if res.ReturnCode == 0 then local members = res.Data.members if #members > 0 then if self._data_record[2] then lastIndex = #self._data_record[2] end for i = 1, #members do if data.uid ~= members[i].uid then self:InsertTableRecord(2, members[i]) end end self:LevGetRecordData(index + 1, data) else if callback then callback() return end self:GetDataRecordLevList() end else ViewUtil.ErrorTip(res.ReturnCode, "获取下级合伙人失败") return end end) end -- comment 递归获取指定代理下级数据 ---@param index number 递归开始下标,默认传0 ---@param data table 自己拼接的信息,lev为点击数据所在的层级,index为点击数据所在的索引 ---@param callback function 用于点击非展开数据的查看下级按钮,一般是对应递归获取普通成员的方法 function M:GetAllRecordData(index, data, callback) ViewUtil.ShowModalWait() local time_type = self._view:GetController("type").selectedIndex if self.begin_time ~= nil and self.end_time ~= nil then time_type = 0 end local myInfo = self._data_record[data.lev][data.index] local fatherInfo if self.ctr_search.selectedIndex == 1 then fatherInfo = {} fatherInfo.uid = DataManager.SelfUser.account_id else fatherInfo = self._data_record[data.lev - 1][#self._data_record[data.lev - 1]] end local fgCtr = ControllerManager.GetController(NewGroupController) fgCtr:FG_GetPartnerStatMember(self.group_id, myInfo.uid, fatherInfo.uid, index * 67, 67, time_type, self.begin_time, self.end_time, function(res) ViewUtil.CloseModalWait() if res.ReturnCode == 0 then local members = res.Data.members if #members > 0 then for i = 1, #members do if members[i].uid ~= myInfo.uid then self:InsertTableRecord(self._selectedLev + 1, members[i]) end end self:GetAllRecordData(index + 1, data) else if callback then callback() return end self:GetDataRecordLevList() end else ViewUtil:ErrorTip(res.ReturnCode, "获取下级合伙人失败") return end end) end return M