源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

657 regels
21 KiB

SocialityMailView = SocialityMailView or BaseClass(BaseItem)
function SocialityMailView:__init()
self.base_file = "sociality"
self.layout_file = "SocialityMailView"
self.model = MailModel:getInstance()
self.loop_mgr = LoopScrowViewMgr.New()
self.column_num = 1 --一行多少个图标
self.show_count = 8
--存放 Item 的列表
self.mail_item_list = {} --存放 mailItem
self.award_item_list = {} --存放 awardItem
self.event_id_list = {} --存放事件ID
self.need_refresh = false --是否需要重新调用
self.have_mail = true --是否拥有邮件
self:Load()
end
function SocialityMailView:Load_callback()
self:LoadSuccess()
self:InitEvent()
if self.need_refresh then
self:RefreshMailList()
end
-- MsgManager:getInstance():Remove(Config.ConfigMainIcon.TipType.mail) -- 2020/3/26 邮件红点只在接到邮件的时候才闪5s
end
function SocialityMailView:LoadSuccess()
self.scroll,
self.scroll_content,
self.parent,
self.mail_content_parent,
self.mail_content_tra,
self.mail_award_parent
= GetChildTransforms(self.transform,
{
"ItemScrollView",
"ItemScrollView/Viewport/Content",
"ItemScrollView/Viewport/Content/parent",
"Detail/DetailScrollView/Viewport/Content",
"Detail/DetailScrollView/Viewport/Content/txtDetail",
"Detail/Attachment/AwardScrollView/Viewport/Content",
})
self.mail_delBtn = self:GetChild("mailBottom/delBtn").gameObject
self.mail_takeBtn = self:GetChild("mailBottom/takeBtn").gameObject
self.mail_empty = self:GetChild("Empty").gameObject
self.mail_detail = self:GetChild("Detail").gameObject
self.mail_bottom = self:GetChild("mailBottom").gameObject
self.oneKeyGet = self:GetChild("oneKeyGet").gameObject
self.oneKeyDelete = self:GetChild("oneKeyDelete").gameObject
self.businessTab = self:GetChild("topBarCon/businessTab").gameObject
self.systemTab = self:GetChild("topBarCon/systemTab").gameObject
self.systemRed = self:GetChild("topBarCon/systemTab/systemRed").gameObject
self.businessRed = self:GetChild("topBarCon/businessTab/businessRed").gameObject
self.received_obj = self:GetChild("Detail/Attachment/received").gameObject
self.mail_takeBtn_image,
self.businessTabImg,
self.systemTabImg,
self.mailBg2,
self.mailListBg,
self.mail_head
= GetChildImages(self.transform,
{
"mailBottom/takeBtn",
"topBarCon/businessTab",
"topBarCon/systemTab",
"Detail/image",
"mailListBg",
"Detail/Sender/mail_head",
})
self.DetailScrollView_tran = self:GetChild("Detail/DetailScrollView")
self.mail_sender = self:GetChild("Detail/Sender/txtTitle"):GetComponent("TextMeshProUGUI")
self.mail_title = self:GetChild("Detail/Title/txtTitle"):GetComponent("TextMeshProUGUI")
self.mail_content = self:GetChild("Detail/DetailScrollView/Viewport/Content/txtDetail"):GetComponent("Text")
self.systemTabTxt = self:GetChild("topBarCon/systemTab/Text"):GetComponent("TextMeshProUGUI")
self.businessTabTxt = self:GetChild("topBarCon/businessTab/Text"):GetComponent("TextMeshProUGUI")
self.mailTimeTxt = self:GetChild("Detail/Sender/mailTime"):GetComponent("TextMeshProUGUI")
self.deadTime = self:GetChild("Detail/Sender/deadTime"):GetComponent("TextMeshProUGUI")
self.takeBtn_txt = self:GetChild("mailBottom/takeBtn/Text"):GetComponent("TextMeshProUGUI")
self.empty_girl = self:GetChild("Empty/empty/girl"):GetComponent("RawImage")
self.empty_talk_bg = self:GetChild("Empty/empty/image"):GetComponent("RawImage")
lua_resM:setOutsideImageSprite(self, self.mailListBg, GameResPath.GetSocialityImage("sociality_friend_list_bg"))
lua_resM:setOutsideImageSprite(self, self.mailBg2, GameResPath.GetSocialityImage("sociality_chat_bg"))
lua_resM:setOutsideRawImage(self, self.empty_girl, GameResPath.GetRoleBg("team_empty_bg_267_589"))
lua_resM:setOutsideRawImage(self, self.empty_talk_bg, GameResPath.GetViewBigBg("com_empty_bg1"))
self.mail_empty:SetActive(false)
self.mail_detail:SetActive(false)
-- SetAnchoredPosition(self.DetailScrollView_tran,15,-170)
-- SetSizeDelta(self.DetailScrollView_tran, 667, 276)
self.model.mail_tab_index = 1
local system_red,business_red = self:RefreshMailTabRed()--打开界面时处理一下topbar的红点
if system_red then
self.model.mail_tab_index = 1
elseif not system_red and business_red then
self.model.mail_tab_index = 2
else
self.model.mail_tab_index = 1
end
end
function SocialityMailView:InitEvent()
--注册点击事件
local function onBtnClickHandler(target)
if target == self.mail_delBtn then
if self.have_mail then
self:DeleteMail()
else
Message.show("没有邮件")
end
elseif target == self.mail_takeBtn then
if self.have_mail then
self:TakeAttachment()
else
Message.show("没有邮件")
end
elseif target == self.oneKeyGet then
self:GetAllMail()
elseif target == self.oneKeyDelete then
self:DeleteAllMail()
elseif target == self.systemTab then
if self.model.mail_tab_index == 1 then return end
self.model.mail_tab_index = 1
self.model.now_select_mail = nil
self:RefreshMailList()
elseif target == self.businessTab then
if self.model.mail_tab_index == 2 then return end
self.model.mail_tab_index = 2
self.model.now_select_mail = nil
self:RefreshMailList()
end
end
AddClickEvent(self.mail_delBtn, onBtnClickHandler)
AddClickEvent(self.mail_takeBtn, onBtnClickHandler)
AddClickEvent(self.oneKeyGet, onBtnClickHandler)
AddClickEvent(self.oneKeyDelete, onBtnClickHandler)
AddClickEvent(self.systemTab, onBtnClickHandler)
AddClickEvent(self.businessTab, onBtnClickHandler)
--绑定更新邮件列表的方法
local update_mail_list_fun = function()
self:ShowPanel()
end
table.insert(self.event_id_list, self.model:Bind(MailEvent.UPDATE_MAIL_LIST, update_mail_list_fun))
--绑定更新邮件内容的方法
local update_mail_detail_fun = function(vo)
self:ShowMailDetail(vo)
end
table.insert(self.event_id_list, self.model:Bind(MailEvent.UPDATE_MAIL_DETAIL, update_mail_detail_fun))
function select_fun()
self:SetBtnGray()
end
table.insert(self.event_id_list, self.model:Bind(MailEvent.SELECT_MAIL_ITEM, select_fun))
--刷新topbar的红点
function on_update_top_bar_red()
self:RefreshMailTabRed()
end
table.insert(self.event_id_list, self.model:Bind(MailEvent.UPDATE_TOP_BAR_RED, on_update_top_bar_red))
end
--刷新topbar“系统”“交易”按钮的红点
function SocialityMailView:RefreshMailTabRed()
local system_red = self.model:CheckSystemMailRedDot()
local business_red = self.model:CheckBusinessMailRedDot()
self.systemRed:SetActive(system_red)
self.businessRed:SetActive(business_red)
--哪里有红点,界面就打开哪个界面,同时有红点时,系统邮件优先
return system_red,business_red
end
function SocialityMailView:SetBtnGray()
for i, v in pairs(self.model.select_mail_list) do
if v.is_attach == 1 and v.state ~= 3 then
self.mail_takeBtn_image.gray = false
SetTMPSharedMaterial(self.takeBtn_txt, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
self.mail_takeBtn:SetActive(false)
return
elseif v.is_attach ~= 1 then
self.mail_takeBtn:SetActive(true)
end
end
if self.model.now_select_mail then
for i, v in ipairs(self.curr_list) do
if v.mail_id == self.model.now_select_mail.mail_id then
if v.is_attach == 1 and v.state ~= 3 then
self.mail_takeBtn_image.gray = false
SetTMPSharedMaterial(self.takeBtn_txt, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
return
end
end
end
end
self.mail_takeBtn_image.gray = true
SetTMPSharedMaterial(self.takeBtn_txt, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
end
--打开界面
function SocialityMailView:ShowPanel()
if self.is_loaded then
self.need_refresh = false
self:RefreshMailList() --更新邮件列表
else
self.need_refresh = true
end
end
--清除界面
function SocialityMailView:__delete()
self.model:Clear()
self.model:Fire(MailEvent.GET_MAIL_INFORM) --获取邮件通知
if self.loop_mgr then
self.loop_mgr:DeleteMe()
self.loop_mgr = nil
end
for i, v in pairs(self.mail_item_list) do
v:DeleteMe()
end
self.mail_item_list = {}
for i, v in pairs(self.award_item_list) do
v:DeleteMe()
-- v:ReleaseObj()
v = nil
end
self.award_item_list = {}
for i, v in pairs(self.event_id_list) do
self.model:UnBind(v)
end
self.event_id_list = {}
end
function SocialityMailView:SetTabBtnImg()
local businessTabAb = self.model.mail_tab_index == 1 and "uiComponent_asset" or "sociality_asset"
local businessTabStr = self.model.mail_tab_index == 1 and "com_empty" or "sociality_tab_on"
local systemTabAb = self.model.mail_tab_index == 1 and "sociality_asset" or "uiComponent_asset"
local systemTabStr = self.model.mail_tab_index == 1 and "sociality_tab_on" or "com_empty"
lua_resM:setImageSprite(self,self.businessTabImg, businessTabAb, businessTabStr)
lua_resM:setImageSprite(self,self.systemTabImg, systemTabAb, systemTabStr)
self.systemTabTxt.text = self.model.mail_tab_index == 1 and "<#ffffff>系统</color>" or "<#9eb3cf>系统</color>"
self.businessTabTxt.text = self.model.mail_tab_index == 1 and "<#9eb3cf>交易</color>" or "<#ffffff>交易</color>"
local systemTabMat = self.model.mail_tab_index == 1 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault
local businessTabMat = self.model.mail_tab_index == 1 and ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault or ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab
SetTMPSharedMaterial(self.systemTabTxt, systemTabMat)
SetTMPSharedMaterial(self.businessTabTxt, businessTabMat)
end
--更新邮件列表
function SocialityMailView:RefreshMailList()
self:SetTabBtnImg()
--隐藏所有Item
for i, v in ipairs(self.mail_item_list) do
v:Hide()
v.gameObject:SetActive(false)
end
local mail_list
local total_mail_list_num = 0
local sys_mail_list = self.model:GetMailList()
local business_mail_list = self.model:GetBusinessMailList()
total_mail_list_num = #sys_mail_list + #business_mail_list
if self.model.mail_tab_index == 1 then
mail_list = sys_mail_list
else
mail_list = business_mail_list
end
if total_mail_list_num > 98 then
Message.show("当前邮件列表已达上限,清理邮箱后才可继续收取邮件")
end
if #mail_list < 1 then
self.have_mail = false
self.mail_empty:SetActive(true)
self.oneKeyDelete:SetActive(false)
self.oneKeyGet:SetActive(false)
self.mail_detail:SetActive(false)
self.mail_bottom:SetActive(false)
self.curr_list = {} --以下为一键删除多于7个以上的邮件时 重新刷新邮件的列表 不然loop_mgr还会刷新出可见的item
for k, v in ipairs(mail_list) do
self.curr_list[k] = v
self.curr_list[k].index = k
end
self.loop_mgr:Init(self.scroll, self.scroll_content, self.column_num, 360, 106, function(item,index,realIndex)
if item and realIndex > 0 and realIndex <= #self.curr_list then item:SetData(self.curr_list[realIndex]) end
end)
self.loop_mgr:InitChildren(self.mail_item_list, #self.curr_list)
self.loop_mgr:RestToBeginning()
self.loop_mgr:SetContentSizeData()
return
end
self.have_mail = true
self.mail_empty:SetActive(false)
self.oneKeyDelete:SetActive(true)
self.oneKeyGet:SetActive(true)
self.mail_detail:SetActive(true)
self.mail_bottom:SetActive(true)
self.curr_list = {}
for k, v in ipairs(mail_list) do
self.curr_list[k] = v
self.curr_list[k].index = k
end
local create_count = math.min(self.show_count, #mail_list)
for k = 1, create_count do
local item = self.mail_item_list[k]
if item == nil then
item = MailItem.New(self.parent, nil, self.layer_name)
self.mail_item_list[k] = item
end
end
self.loop_mgr:Init(self.scroll,self.scroll_content, self.column_num, 360, 106+3, function(item,index,realIndex)
self:OnInitializeItem(item,index,realIndex)
end)
self.loop_mgr:InitChildren(self.mail_item_list, #self.curr_list)
self.loop_mgr:RestToBeginning()
self.loop_mgr:SetContentSizeData()
--设置选中邮件
local id
if self.model.now_select_mail == nil then
id = self.mail_item_list[1].data.mail_id --点选item列表中的第一个
else
id = self.model.now_select_mail.mail_id
end
for i, v in ipairs(self.mail_item_list) do
v:OnClickHandler(id)
end
self:RefreshMailTabRed()--处理一次红点
GlobalEventSystem:Fire(EventName.REFRESH_SOCIAL_RED_DOT)
end
function SocialityMailView:OnInitializeItem(item,index,realIndex)
if item and realIndex > 0 and realIndex <= #self.curr_list then
item:SetData(self.curr_list[realIndex])
-- item:SetChoice()
self:UpdateItemState(item)
end
end
function SocialityMailView:UpdateItemState(item)
for k,v in pairs(self.mail_item_list) do
if v.data and self.model.now_select_mail and v.data.mail_id == self.model.now_select_mail.mail_id then
v:SetSelect(true)
else
v:SetSelect(false)
end
end
end
--显示邮件内容
function SocialityMailView:ShowMailDetail(vo)
if vo == nil then return end
if self.model.now_select_mail and self.model.now_select_mail.mail_id ~= vo.mail_id then return end
--邮件类型图标
local mail_type = self.model:GetMailType(vo.mail_id)
if mail_type == 5 then
lua_resM:setImageSprite(self,self.mail_head,"sociality_asset","sociality_mail_head_2")
else
lua_resM:setImageSprite(self,self.mail_head,"sociality_asset","sociality_mail_head_1")
end
local sender_str
if vo.sender and vo.sender ~= "" then
sender_str = vo.sender
else
sender_str = mail_type == 5 and "交易系统管理员" or "系统管理员"
end
self.mail_sender.text = sender_str
self.mail_title.text = vo.title
self.mailTimeTxt.text = TimeUtil:timeConversion(vo.time, "yyyy-mm-dd hh:mm:ss")
local effect_et = self.model:GetMailEffectTime(vo.mail_id)
local now_time = TimeUtil:getServerTime()
if effect_et and effect_et - now_time > 0 then
local dead_time, f = math.modf((effect_et - now_time) / 86400)
if dead_time>=1 then
if f > 0 then
dead_time = dead_time + 1
end
self.deadTime.text = string.format("有效期剩余:<#60f448>%d天</color>",dead_time)
else
local hour_time, f2 = math.modf((effect_et - now_time) / 3600)
if hour_time>=1 then
if f2>0 then
hour_time = hour_time + 1
end
self.deadTime.text = string.format("有效期剩余:<#60f448>%d小时</color>",hour_time)
else
local minute_time, f3 = math.modf((effect_et - now_time) / 60)
if f3>0 then
minute_time = minute_time +1
end
self.deadTime.text = string.format("有效期剩余:<#60f448>%d分</color>",minute_time)
end
end
else
self.deadTime.text = "已过期"
end
--超链接处理
self.mail_content.text = ""
if vo.content and vo.content ~= ""then
local call_func = function ( param_list )
ChatModel:getInstance().clicked_item = self
ChatModel:getInstance().chick_hyperlink_mark = true
ChatModel:getInstance():FireSpecialTab(param_list)
end
AddInlineLickEvent(self.mail_content, call_func)
--把坑爹的半角空格变成全角空格,inlietext组件用半角空格时会像英文一样在空格后面的文字太长时转成换行
vo.content = string.gsub(vo.content, " ", " ")
--把换行换成换行加两个全角空格,使其变成首行自动缩进两字符
-- vo.content = string.gsub(vo.content, "\n ", "\n  ")
vo.content = string.gsub(vo.content, "\n", "\n  ")
--如果根本就没用到<color@颜色值>这种格式就不要再去特殊解析了
if not string.find(vo.content,"color@") then
SetInlineText(self.mail_content, vo.content)
else
SetInlineText(self.mail_content, ChuanWenManager:FormatColorTag(vo.content))
end
local height = self.mail_content.preferredHeight
self.mail_content_parent.sizeDelta = Vector2(self.mail_content_parent.sizeDelta.x, height + 10)
self.mail_content_tra.sizeDelta = Vector2(self.mail_content_parent.sizeDelta.x, height + 10)
end
if vo.is_receive == 1 then --附件已领取
self.mail_takeBtn_image.gray = true
SetTMPSharedMaterial(self.takeBtn_txt, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
-- self.received_obj:SetActive(true)
else
self.mail_takeBtn_image.gray = false
SetTMPSharedMaterial(self.takeBtn_txt, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
-- self.received_obj:SetActive(false)
end
for i, v in pairs(self.award_item_list) do
v:SetVisible(false)
end
if vo.attachment and #vo.attachment > 0 then
local new_attachment = {}
local other_attachment = {}
for k,v in pairs(vo.attachment) do
local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.type_id)
if basic and basic.color then
v.color = tonumber(basic.color)
table.insert(new_attachment, v)
else
table.insert(other_attachment, v)
end
end
local sort_func = function(a,b)
return a.color > b.color
end
table.sort(new_attachment, sort_func)
for k,v in pairs(other_attachment) do
table.insert(new_attachment, v)
end
vo.attachment = new_attachment
for i, v in ipairs(vo.attachment) do
local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(v.object_type, v.type_id)
local item = self.award_item_list[i]
if item == nil then
item = MailAwardItem.New(self.mail_award_parent)
self.award_item_list[i] = item
end
item:SetData(vo.is_receive,typeId, v.num, nil, v, v.lock, nil, false)
item:SetVisible(true)
item:SetItemSize(80, 80)
end
self.mail_award_parent.sizeDelta = Vector2(100 * #vo.attachment, 100)
else
self.mail_takeBtn_image.gray = true
SetTMPSharedMaterial(self.takeBtn_txt, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
end
if #self.model.select_mail_list > 0 then
self:SetBtnGray()
end
end
--设置附件是否只显示背景
function SocialityMailView:OnlyShowBg(item, b)
if b then
item.bg_trams.gameObject:SetActive(true)
item.icon.gameObject:SetActive(false)
item.numTextT.gameObject:SetActive(false)
item.lock:SetActive(false)
lua_resM:setImageSprite(item,item.bg,"common_asset","com_icon_bg_0")
else
item.bg_trams.gameObject:SetActive(true)
item.icon.gameObject:SetActive(true)
item.numTextT.gameObject:SetActive(true)
end
end
--接受附件
function SocialityMailView:TakeAttachment()
local list = {}
if #self.model.select_mail_list > 0 then --有勾选邮件
--对邮件进行排序(按接受时间排序,最新收到的邮件最高)
local sort_fun = function(a, b)
if a and b then
return a.time > b.time
end
end
table.sort(self.model.select_mail_list, sort_fun)
for i, v in ipairs(self.model.select_mail_list) do
if v.is_attach == 1 then
table.insert(list, v.mail_id)
end
end
end
if self.model.now_select_mail and self.model.now_select_mail.is_attach == 1 then
local have = false
for i, v in ipairs(list) do
if v == self.model.now_select_mail.mail_id then
have = true
break
end
end
if not have then
table.insert(list, self.model.now_select_mail.mail_id)
end
end
local mail_type = self.model:GetMailType(list[1])
if mail_type then
self.model:Fire(MailEvent.GET_MAIL_ATTACHMENT, list,mail_type)
end
end
--删除单个邮件
function SocialityMailView:DeleteMail()
local list = {}
if #self.model.select_mail_list > 0 then --有勾选邮件
for i, v in ipairs(self.model.select_mail_list) do
table.insert(list, v.mail_id)
end
else --无勾选邮件
if not self.model.now_select_mail or not self.model.now_select_mail.mail_id then
return
end
table.insert(list, self.model.now_select_mail.mail_id)
end
local mail_type = self.model:GetMailType(list[1])
if mail_type then
self.model:Fire(MailEvent.DELETE_MAIL, list, mail_type)
end
end
--一键删除
function SocialityMailView:DeleteAllMail( ... )
local list = {}
if self.model.mail_tab_index == 2 then
for i, v in ipairs(self.model.business_mail_list ) do
if v.is_attach~=1 then
if v.important == 1 then
if v.state ~=2 then
table.insert(list, v.mail_id)
end
else
table.insert(list, v.mail_id)
end
end
end
else
for i, v in ipairs(self.model.mail_list ) do
if v.is_attach~=1 then
if v.important == 1 then
if v.state ~=2 then
table.insert(list, v.mail_id)
end
else
table.insert(list, v.mail_id)
end
end
end
end
if #list>0 then
local mail_type = self.model:GetMailType(list[1])
if mail_type then
self.model:Fire(MailEvent.DELETE_MAIL, list, mail_type)
end
end
end
--一键领取
function SocialityMailView:GetAllMail( ... )
local list = {}
if self.model.mail_tab_index == 2 then
for i, v in ipairs(self.model.business_mail_list ) do
if v.is_attach ==1 then
if v.important == 1 then--如果是重要邮件,一定要先读了才能一键领取
if v.state == 1 then
table.insert(list, v.mail_id)
end
else
table.insert(list, v.mail_id)
end
end
end
else
for i, v in ipairs(self.model.mail_list ) do
if v.is_attach ==1 then
if v.important == 1 then--如果是重要邮件,一定要先读了才能一键领取
if v.state == 1 then
table.insert(list, v.mail_id)
end
else
table.insert(list, v.mail_id)
end
end
end
end
if #list>0 then
local mail_type = self.model:GetMailType(list[1])
if mail_type then
self.model:Fire(MailEvent.GET_MAIL_ATTACHMENT, list,mail_type)
end
else
Message.show("没有可领取的附件哦~")
end
end