GetGoodsItem = GetGoodsItem or BaseClass(BaseItem)
|
|
|
|
function GetGoodsItem:__init()
|
|
self.base_file = "common"
|
|
self.layout_file = "GetGoodsItem"
|
|
self.is_delay_callback = true
|
|
self.can_buy = false
|
|
self.model = BagModel:getInstance()
|
|
self.need_refresh = false
|
|
|
|
self.is_default_get_way = false
|
|
self.show_type = false
|
|
self.get_des_id = 0
|
|
|
|
self:Load()
|
|
end
|
|
|
|
function GetGoodsItem:Load_callback()
|
|
local nodes = {
|
|
"buy_group/goods_name:tmp",
|
|
"item_con:obj",
|
|
"go_group/way_name:tmp",
|
|
"bg", "go_group/go:obj",
|
|
"buy_group/price_type:img",
|
|
"buy_group/buy:obj:imgex",
|
|
"buy_group:obj",
|
|
"buy_group/price_num:tmp",
|
|
"buy_group/goods_from:tmp",
|
|
"icon:img:obj",
|
|
"go_group:obj",
|
|
"is_special:obj",
|
|
"buy_group/buy/buy_text:tmp",
|
|
"go_group/get_des:tmp",
|
|
}
|
|
|
|
self:GetChildren(nodes)
|
|
|
|
self:InitEvent()
|
|
|
|
if self.need_refresh then
|
|
self:SetData(self.data, self.type_id, self.callback)
|
|
end
|
|
end
|
|
|
|
function GetGoodsItem:InitEvent()
|
|
local function onBtnClickHandler(target)
|
|
if target == self.go_obj then
|
|
self:GoFunc()
|
|
elseif target == self.buy_obj then
|
|
if self.shop_config and self.can_buy and self.total_cost then
|
|
if self.show_type == "shop" then
|
|
if self.shop_config.money_type == 1 or self.shop_config.money_type == 2 then
|
|
local function ok_callback( ... )
|
|
ShopModel:getInstance():Fire(ShopModel.BUY_GOODS, self.shop_config.key_id, 1)
|
|
end
|
|
local function toggle_function( flag )
|
|
self.model.bag_quick_buy_toggle = flag
|
|
end
|
|
local function use_function( toggle_tip_data,call_fun_sum )
|
|
print('Cat:GetGoodsItem.lua[54] self.model.bag_quick_buy_toggle', self.model.bag_quick_buy_toggle)
|
|
if not self.model.bag_quick_buy_toggle then
|
|
GlobalEventSystem:Fire(EventName.OPEN_COM_TOGGLE_TIP_VIEW, toggle_tip_data)
|
|
else
|
|
call_fun_sum()
|
|
end
|
|
end
|
|
local function recharge_open_call_back()
|
|
self.model:Fire(BagModel.CLOSE_EQUIP_ITEM_GET_WAY_TIPS)
|
|
end
|
|
local buy_tip_data = {
|
|
gold_type = self.shop_config.money_type,--货币类型
|
|
cost_price = self.total_cost,--消耗金额
|
|
ok_callback = ok_callback,--成功
|
|
toggle_function = toggle_function,--多选
|
|
togglePriceStr = string.format("<color=#fdffc2>%s</color> 购买商品",self.total_cost),--提示语
|
|
use_function = use_function,--最终调用
|
|
recharge_open_call_back = recharge_open_call_back,
|
|
}
|
|
CustomActivityModel:getInstance():BuyTips(buy_tip_data)
|
|
else
|
|
ShopModel:getInstance():Fire(ShopModel.BUY_GOODS, self.shop_config.key_id, 1)
|
|
end
|
|
else
|
|
self.model:Fire(BagModel.CLOSE_EQUIP_ITEM_GET_WAY_TIPS)
|
|
local temp_cfg = Config.Shop[self.shop_config.key_id]
|
|
GlobalEventSystem:Fire(EventName.OPEN_SHOP_VIEW, temp_cfg.shop_type, temp_cfg.sub_type, temp_cfg.goods_id, nil, true)
|
|
end
|
|
else
|
|
Message.show("当前商品已售空,请耐心等待补货")
|
|
end
|
|
end
|
|
end
|
|
AddClickEvent(self.go_obj, onBtnClickHandler)
|
|
AddClickEvent(self.buy_obj, onBtnClickHandler)
|
|
|
|
local function buy_suceess()
|
|
self.shop_config = self:GetShopData(self.type_id, self.data)
|
|
self:CheckCanBuy(self.shop_config)
|
|
end
|
|
self:BindEvent(ShopModel:getInstance(),ShopModel.UPDATE_GOODS_LIST, buy_suceess)
|
|
end
|
|
|
|
function GetGoodsItem:GoFunc()
|
|
if self.is_default_get_way then
|
|
Message.show("请前往运营活动")
|
|
return
|
|
end
|
|
GlobalEventSystem:Fire(EventName.GOODS_TOOLS_TIPS_GO_TO_EVENT)
|
|
if self.callback then
|
|
self.callback()
|
|
end
|
|
if self.data[1] == "153" then --商城 ,是商城有可能有s第三个页签的处理
|
|
OpenFun.Open(self.data[1], self.data[2], self.data[4])
|
|
elseif self.data[1] == "151" then
|
|
ComposeModel:getInstance():TryComposeJump(self.type_id)
|
|
elseif self.data[1] == "610" and self.data[2] == "2" then -- 经验副本需要特殊处理,关闭所有的上层打开界面
|
|
DailyModel:getInstance():Fire(DailyModel.OPEN_DAILY_COMMON_TIP_VIEW, false)
|
|
OpenFun.Open(self.data[1], self.data[2])
|
|
else
|
|
OpenFun.Open(self.data[1], self.data[2])
|
|
end
|
|
end
|
|
|
|
function GetGoodsItem:SetData(data, type_id, callback)
|
|
self.data = data
|
|
self.type_id = type_id
|
|
self.callback = callback
|
|
self.show_type = false
|
|
if not self.data then return end
|
|
if self.is_loaded then
|
|
local cfg = OpenFun.GetFunCfg(self.data[1], self.data[2])
|
|
self.get_des_id = self.data[6] and tonumber(self.data[6]) or 0
|
|
self.is_default_get_way = false
|
|
if cfg then
|
|
local show_type = self.data[3] or "normal"
|
|
local is_special = self.data[5] or "0"
|
|
self.show_type = show_type
|
|
|
|
self.shop_config = self:GetShopData(self.type_id, self.data)
|
|
if self.shop_config then
|
|
self.go_group_obj:SetActive(false)
|
|
self.buy_group_obj:SetActive(true)
|
|
self.item_con_obj:SetActive(true)
|
|
self.icon_obj:SetActive(false)
|
|
if not self.icon_item then
|
|
self.icon_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.item_con)
|
|
self.icon_item:SetItemSize(62, 62)
|
|
self.icon_item:ChangeCountVisible(false)
|
|
--self.icon_item:SetEnableClick(false)
|
|
end
|
|
local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(self.type_id)
|
|
self.icon_item:SetData(self.type_id)
|
|
self.goods_name_tmp.text = Language.substitute("<color={0}>{1}</color>", WordManager.GetGoodsColor(basic.color, false), Trim(basic.goods_name))
|
|
self.price_num_tmp.text = tostring(round(self.shop_config.price * self.shop_config.discount/ 100))
|
|
self:CheckCanBuy(self.shop_config)
|
|
local asset, source = WordManager:GetCommonMoneyIcon(self.shop_config.money_type)
|
|
lua_resM:setImageSprite(self, self.price_type_img, asset, source,false)
|
|
if show_type == "shop" then
|
|
-- SetAnchoredPosition(self.price_num, -83, -14)
|
|
-- SetAnchoredPosition(self.price_type, -47, -14)
|
|
-- SetAnchoredPosition(self.buy, 70, 19)
|
|
self.goods_from_tmp.text = ""
|
|
self.price_num_tmp.color = ColorUtil:ConvertHexToRGBColor("#ffffff")
|
|
else --"show_two"
|
|
|
|
local mid = 112
|
|
local w = self.price_num_tmp.preferredWidth + 36
|
|
-- SetAnchoredPosition(self.price_num, mid - w / 2 + 34, 22)
|
|
-- SetAnchoredPosition(self.price_type, mid - w / 2, 22)
|
|
-- SetAnchoredPosition(self.buy, 70, 0)
|
|
self.goods_from_tmp.text = ""
|
|
self.price_num_tmp.color = ColorUtil:ConvertHexToRGBColor("#ffffff")
|
|
end
|
|
|
|
else
|
|
self.go_group_obj:SetActive(true)
|
|
self.buy_group_obj:SetActive(false)
|
|
if self.data[8] then -- 存在传入剩余次数的数据时,显示剩余次数
|
|
self.way_name_tmp.text = self.data[8] == -1 and "次数不限"
|
|
or string.format("剩余 <color=%s>%s</color> 次", self.data[8] > 0 and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK, self.data[8])
|
|
else
|
|
self.way_name_tmp.text = cfg.name
|
|
end
|
|
local show_cfg = self.data[3] or ""
|
|
local show_type_id = 0
|
|
if show_cfg and show_cfg ~= "" then
|
|
local str_list = Split(show_cfg, "_")
|
|
if #str_list >= 2 then
|
|
if str_list[1] == "goods" then
|
|
show_type_id = tonumber(str_list[2])
|
|
end
|
|
end
|
|
end
|
|
if show_type == "normal" then
|
|
self.item_con_obj:SetActive(false)
|
|
self.icon_obj:SetActive(true)
|
|
lua_resM:setImageSprite(self,self.icon_img,"activityIcon_asset",cfg.icon_res, false)
|
|
SetSizeDelta(self.icon,62,62)
|
|
else --"goods"
|
|
self.item_con_obj:SetActive(true)
|
|
self.icon_obj:SetActive(false)
|
|
if not self.icon_item then
|
|
self.icon_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.item_con)
|
|
self.icon_item:SetItemSize(62, 62)
|
|
self.icon_item:ChangeCountVisible(false)
|
|
--self.icon_item:SetEnableClick(false)
|
|
end
|
|
self.icon_item:SetData(show_type_id == 0 and self.type_id or show_type_id)
|
|
end
|
|
self:SetGoodGetDes()
|
|
end
|
|
if self.icon_item then
|
|
if is_special == "1" then
|
|
self.icon_item:SetNumLimitVisible(true, 16)
|
|
else
|
|
self.icon_item:SetNumLimitVisible(false)
|
|
end
|
|
end
|
|
else
|
|
self.is_default_get_way = true
|
|
self.go_group_obj:SetActive(true)
|
|
self.buy_group_obj:SetActive(false)
|
|
self.way_name_tmp.text = "运营活动"
|
|
lua_resM:setImageSprite(self,self.icon_img,"activityIcon_asset","icon_99_1", false)
|
|
self:SetGoodGetDes()
|
|
end
|
|
else
|
|
self.need_refresh = true
|
|
end
|
|
end
|
|
|
|
function GetGoodsItem:__delete()
|
|
if self.icon_item then
|
|
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.icon_item)
|
|
self.icon_item = nil
|
|
end
|
|
end
|
|
|
|
function GetGoodsItem:SetGoodGetDes()
|
|
if self.get_des_id then
|
|
local cfg = GoodsConst.GetWayDes[self.get_des_id]
|
|
if cfg then
|
|
SetAnchoredPositionY(self.way_name, 15)
|
|
local str = ChuanWenManager:getInstance():FormatColorTag2(cfg.des, false)
|
|
self.get_des_tmp.text = str
|
|
else
|
|
SetAnchoredPositionY(self.way_name, 3)
|
|
end
|
|
else
|
|
SetAnchoredPositionY(self.way_name, 3)
|
|
end
|
|
end
|
|
|
|
function GetGoodsItem:GetShopData(type_id, data)
|
|
local shop_config = nil
|
|
if type_id and data and data[1] and data[2] and data[3] and (data[3] == "shop" or data[3] == "shoptwo") then
|
|
local list = ShopModel:getInstance():GetGoodsListInfo(tonumber(data[2]))
|
|
for k,v in pairs(list) do
|
|
for kk,vv in pairs(v) do
|
|
if self.type_id == vv.goods_id then
|
|
shop_config = vv
|
|
break
|
|
end
|
|
end
|
|
if shop_config then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return shop_config
|
|
end
|
|
|
|
function GetGoodsItem:CheckCanBuy(shop_data)
|
|
self.can_buy = false
|
|
self.sold_out = false
|
|
if shop_data then
|
|
local limit_left_num = nil
|
|
if shop_data.quota_type > 0 then
|
|
local left_num = shop_data.quota_num - shop_data.sold_out
|
|
left_num = left_num > 0 and left_num or 0
|
|
limit_left_num = left_num
|
|
else
|
|
limit_left_num = nil
|
|
end
|
|
|
|
price = round(shop_data.price * shop_data.discount / 100)
|
|
local money_num = GoodsModel:getInstance():GetGoodsNumFromType(shop_data.money_type)
|
|
local limit_num = money_num / price
|
|
limit_num = math.floor(limit_num)
|
|
if limit_left_num then--如果是限购 先对比
|
|
limit_num = limit_num > limit_left_num and limit_left_num or limit_num
|
|
end
|
|
limit_num = limit_num > 0 and limit_num or 1
|
|
self.can_buy = limit_num > 0
|
|
self.sold_out = limit_left_num ~= nil and limit_left_num == 0
|
|
self.buy_imgex.gray = self.sold_out
|
|
if self.sold_out then
|
|
self.buy_text_tmp.text =HtmlColorTxt("已售完", "#ffffff")
|
|
SetTMPSharedMaterial(self.buy_text_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
|
|
else
|
|
self.total_cost = price
|
|
self.buy_text_tmp.text = HtmlColorTxt(self.show_type == "shop" and "购买" or "前往购买", "#ffffff")
|
|
SetTMPSharedMaterial(self.buy_text_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
|
|
end
|
|
end
|
|
end
|
|
|