local FamilyChooseTimeView = {} local M = FamilyChooseTimeView function FamilyChooseTimeView.new(data, callback) setmetatable(M, { __index = BaseWindow }) local self = setmetatable({}, { __index = M }) self.class = "FamilyChooseTimeView" self._data = data self._callback = callback self._close_destroy = true self:init("ui://Family/FamilyChooseTime") return self end function M:init(url) getmetatable(M).__index.init(self, url) local view = self._view self._viewList = view:GetChild('list') self._viewList:SetVirtual() self._viewList.itemRenderer = handler(self, self.ListRenderer) self._viewList.onClickItem:Set(handler(self, self.ClickListItem)) view:GetChild('btn_confirm').onClick:Set(function() self._callback(self._data_times[self._left_Index], self._data_times[self._right_Index]) self:Destroy() end) view:GetChild('btn_cancel').onClick:Set(function() self:Destroy() end) self:FillData() end function M:InitTime() local dataTable = os.date("*t") dataTable.hour = 0 dataTable.min = 0 dataTable.sec = 0 local timeStasmp = os.time(dataTable) return timeStasmp end function M:ClickListItem(context) local item = context.data local index = self._viewList:GetChildIndex(item) + 1 if index > self._selectedIndex then self._left_Index = self._selectedIndex self._right_Index = index else self._right_Index = self._selectedIndex self._left_Index = index end self._selectedIndex = index self._viewList:RefreshVirtualList() end function M:ListRenderer(index, obj) if index >= self._left_Index - 1 and index < self._right_Index then obj.selected = true else obj.selected = false end if index == 0 then obj.text = "今天" return end if index == 1 then obj.text = "昨天" return end obj.text = os.date("%d", self._data_times[index + 1]) end function M:FillData() local data = self._data local days = data.days or 7 self._data_times = {} local dataTable = os.date("*t") dataTable.hour = 0 dataTable.min = 0 dataTable.sec = 0 local timeStasmp = os.time(dataTable) local leftTime = data.left or timeStasmp local rightTime = data.right or timeStasmp for i = 1, days do local thisTimeStamp = timeStasmp - (i - 1) * 86400 if leftTime == thisTimeStamp then self._left_Index = i end if rightTime == thisTimeStamp then self._right_Index = i end table.insert(self._data_times, thisTimeStamp) end self._selectedIndex = self._left_Index self._viewList.numItems = days self:Show() end -- 打开窗口 function M:Show() getmetatable(M).__index.Show(self) end -- 关闭窗口 function M:Close() getmetatable(M).__index.Close(self) end -- 销毁窗口 function M:Destroy() getmetatable(M).__index.Destroy(self) end return M