KLTradeHomePanel.lua 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. ---@class KLTradeHomePanel:UIKmlLuaPanelBase
  2. ---@field view KLTradeHomePanelView
  3. local KLTradeHomePanel = class(UIKmlLuaPanelBase)
  4. local this =KLTradeHomePanel
  5. local CatalogueName = {
  6. {"全部",0},
  7. {"公示区",100},
  8. --{"货币",1},
  9. {"装备",2},
  10. {"技能书",3},
  11. {"材料",4},
  12. {"预购",200}
  13. }
  14. local CatalogueSubName = {
  15. ["全部"]={},
  16. ["公示区"]={},
  17. --["货币"]={{"奇迹币",1},{"钻石",2}},
  18. ["装备"]={{"武器",1},{"头盔",2},{"铠甲",3},{"护腿",4},{"护手",5},{"鞋子",6},{"翅膀",7},{"大天使装备",8}},
  19. ["技能书"]={},
  20. ["材料"]={{"宝石",1},{"门票材料",2},{"翅膀材料",3},{"首饰材料",4},{"技能材料",5},{"荧光材料",6},{"大天使材料",7},{"叠加幸运石",8},{"活动材料",9}},
  21. ["预购"]={}
  22. }
  23. local FilterLevelName = { "阶数","一阶","二阶","三阶","四阶","五阶","六阶","七阶","八阶","九阶","十阶","十一阶","十二阶" }
  24. local SortTypeName = { "排序","时间↑","时间↓","价格↑","价格↓" }
  25. local CareerTypeName = { "职业","剑士","法师","弓箭手" }
  26. local QualityTypeName = {"品质","白装","卓越","首饰","卓越套装"}
  27. ---@class TradeCatalogueItem
  28. ---@field isRoot boolean 是否是根节点
  29. ---@field isCategory boolean 是否是分类节点
  30. ---@field name string 名称
  31. ---@field isCategoryExpand boolean 是否展开分类
  32. ---@field children TradeCatalogueItem[] 子节点
  33. ---@field parent TradeCatalogueItem 父节点
  34. ---@field rootType string
  35. ---@field subType string
  36. ---创建时调用一次
  37. function this:Init()
  38. GUI:OSAScrollView_Initialized(self.view.scrollview_catalogue,nil,self.CatalogueItemUpdateFun,self)
  39. ---@type TradeCatalogueItem[]
  40. self.catalogueDataList = {}
  41. for _, rootNameData in pairs(CatalogueName) do
  42. if (self.args == 3 and (_ == 3 or _ == 4 or _ == 5)) or self.args ~= 3 then
  43. local subNameData = CatalogueSubName[rootNameData[1]]
  44. ---@type TradeCatalogueItem
  45. local catalogueItem = {}
  46. catalogueItem.isRoot = true
  47. catalogueItem.name = rootNameData[1]
  48. if #subNameData ~= 0 then
  49. catalogueItem.isCategory = true
  50. catalogueItem.children = {}
  51. for _, data in ipairs(subNameData) do
  52. ---@type TradeCatalogueItem
  53. local child = {}
  54. child.name = data[1]
  55. child.isCategory = false
  56. child.isRoot = false
  57. child.parent = catalogueItem
  58. child.rootType = rootNameData[2]
  59. child.subType = data[2]
  60. table.insert(catalogueItem.children, child)
  61. end
  62. else
  63. catalogueItem.isCategory = false
  64. catalogueItem.rootType = rootNameData[2]
  65. catalogueItem.subType = 0
  66. end
  67. table.insert(self.catalogueDataList, catalogueItem)
  68. end
  69. end
  70. self.selectedItemData = self.catalogueDataList[1]
  71. self.selectedFilterLevel = 0
  72. self.selectedSortType = 0
  73. self.selectedCareerType = 0
  74. self.selectedFilterQuality = 0
  75. end
  76. function this:GetCurGoodsPanel()
  77. if not self.curGoodsPanel then
  78. if self.args == 1 then
  79. ---@type KLTradeCommonGoodsPanel
  80. self.curGoodsPanel = GUI:UIPanel_Open("dev/outui/Trade/Panel/KLTradeCommonGoods/KLTradeCommonGoodsPanel")
  81. elseif self.args == 2 then
  82. ---@type KLTradeUnionGoodsPanel
  83. self.curGoodsPanel = GUI:UIPanel_Open("dev/outui/Trade/Panel/KLTradeUnionGoods/KLTradeUnionGoodsPanel")
  84. elseif self.args == 3 then
  85. ---@type KLTradeCrossServerGoodsPanel
  86. self.curGoodsPanel = GUI:UIPanel_Open("dev/outui/Trade/Panel/KLTradeCrossServerGoods/KLTradeCrossServerGoodsPanel")
  87. end
  88. end
  89. return self.curGoodsPanel
  90. end
  91. ---@param item UIKmlLuaControl
  92. function this:CatalogueItemUpdateFun(item,index)
  93. local catalogueData = self.catalogueDataList[index+1]
  94. local txtName = GUI:GetChildById(item,"txt_name")
  95. local content = GUI:GetChildById(item,"btn_content")
  96. GUI:Text_setString(txtName,catalogueData.name)
  97. if catalogueData.isCategory then
  98. GUI:AddOnClickEvent(content,self,self.CatalogueGroupOnClick,catalogueData)
  99. else
  100. GUI:AddOnClickEvent(content,self,self.CatalogueItemOnToggle,catalogueData)
  101. end
  102. if catalogueData.isRoot then
  103. GUI:Image_loadTexture(content,self:IsSelectedCatalogueData(catalogueData) and "button_interface_window23" or "button_interface_window20","Atlas/Common.spriteatlas")
  104. --GUI:Toggle_setSrc(item,"Atlas/Common.spriteatlas","button_interface_window20","button_interface_window23")
  105. GUI:setContentSize(content,160,48)
  106. else
  107. GUI:Image_loadTexture(content,self:IsSelectedCatalogueData(catalogueData) and "ty_btn_click_sideeffect" or "ty_btn_click_side_n","Atlas/Common.spriteatlas")
  108. --GUI:Toggle_setSrc(item,"Atlas/Common.spriteatlas","bg1","ty_btn_light")
  109. GUI:setContentSize(content,160,40)
  110. end
  111. end
  112. function this:IsSelectedCatalogueData(catalogueData)
  113. return self.selectedCatalogueData == catalogueData or self.selectedItemData == catalogueData
  114. end
  115. ---@param data TradeCatalogueItem
  116. function this:CatalogueGroupOnClick(_, data)
  117. data.isCategoryExpand = not data.isCategoryExpand
  118. self:RefreshCatalogueDataList()
  119. self.selectedCatalogueData = data
  120. self.selectedItemData = self.selectedCatalogueData.children[1]
  121. self:RequestRefreshGoodsList()
  122. GUI:OSAScrollView_RefreshList(self.view.scrollview_catalogue,#self.catalogueDataList)
  123. end
  124. ---@param data TradeCatalogueItem
  125. function this:CatalogueItemOnToggle(_,data)
  126. if data.isRoot then
  127. self.selectedCatalogueData = nil
  128. else
  129. self.selectedCatalogueData = data.parent
  130. end
  131. self.selectedItemData = data
  132. GUI:OSAScrollView_RefreshList(self.view.scrollview_catalogue,#self.catalogueDataList)
  133. self:RequestRefreshGoodsList()
  134. end
  135. function this:RefreshCatalogueDataList()
  136. local newCatalogueDataList = {}
  137. for _, v in pairs(self.catalogueDataList) do
  138. if v.isRoot then
  139. table.insert(newCatalogueDataList, v)
  140. if v.isCategory and v.isCategoryExpand then
  141. if v.children then
  142. for _, child in pairs(v.children) do
  143. table.insert(newCatalogueDataList, child)
  144. end
  145. end
  146. end
  147. end
  148. end
  149. self.catalogueDataList = newCatalogueDataList
  150. end
  151. ---注册UI事件和服务器消息
  152. function this:RegistEvents()
  153. GUI:AddOnClickEvent(self.view.btn_filter_level,self,self.BtnFilterLevelOnClick)
  154. GUI:AddOnClickEvent(self.view.btn_sort,self,self.BtnSortOnClick)
  155. GUI:AddOnClickEvent(self.view.btn_filter_career,self,self.BtnFilterCareerOnClick)
  156. GUI:AddOnClickEvent(self.view.btn_filter_quality,self,self.BtnFilterQualityOnClick)
  157. GUI:AddOnClickEvent(self.view.btn_dropdown_mask,self,self.BtnDropdownMaskOnClick)
  158. for i = 0, 12 do
  159. GUI:AddOnClickEvent(self.view["btn_filter_level_" .. i],self,self.BtnFilterLevelItemOnClick,i)
  160. end
  161. self.lastSelectedLevelItem = self.view["btn_filter_level_0"]
  162. for i = 0, 4 do
  163. GUI:AddOnClickEvent(self.view["btn_sort_" .. i],self,self.BtnSortItemOnClick,i)
  164. end
  165. self.lastSelectedSortItem = self.view["btn_sort_0"]
  166. for i = 0, 3 do
  167. GUI:AddOnClickEvent(self.view["btn_filter_career_" .. i],self,self.BtnFilterCareerItemOnClick,i)
  168. end
  169. self.lastSelectedCareerItem = self.view["btn_filter_career_0"]
  170. for i = 0, 4 do
  171. GUI:AddOnClickEvent(self.view["btn_filter_quality_".. i],self,self.BtnFilterQualityItemOnClick,i)
  172. end
  173. self.lastSelectedQualityItem = self.view["btn_filter_quality_0"]
  174. SL:RegisterLUAEvent(LUA_EVENT_TRADE_BUY_REQUEST,self.RequestRefreshGoodsList,self)
  175. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_TRADE_MY_PRE_GOODS,self.RequestRefreshGoodsList,self)
  176. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_TRADE_BUY_GOODS,self.RequestRefreshGoodsList,self)
  177. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_TRADE_PRE_ORDER,self.RES_TRADE_PRE_ORDER,self)
  178. end
  179. function this:RES_TRADE_PRE_ORDER(_,message)
  180. if message then
  181. SL:onLUAEvent(LUA_EVENT_TRADE_BUY_REQUEST)
  182. end
  183. end
  184. function this:BtnFilterQualityItemOnClick(item,index)
  185. local qualityName = QualityTypeName[index+1]
  186. self.selectedFilterQuality = index
  187. GUI:Button_setTitleText(self.view.btn_filter_quality,qualityName)
  188. GUI:setVisible(self.view.dropdown_list_quality,false)
  189. GUI:setVisible(self.view.btn_dropdown_mask,false)
  190. self:RequestRefreshGoodsList()
  191. if self.lastSelectedQualityItem then
  192. GUI:setColor(self.lastSelectedQualityItem,"#00000000")
  193. end
  194. self.lastSelectedQualityItem = item
  195. GUI:setColor(item,"#FFFFFFFF")
  196. end
  197. function this:BtnFilterCareerItemOnClick(item,index)
  198. local careerName = CareerTypeName[index+1]
  199. self.selectedCareerType = index
  200. GUI:Button_setTitleText(self.view.btn_filter_career,careerName)
  201. GUI:setVisible(self.view.dropdown_list_career,false)
  202. GUI:setVisible(self.view.btn_dropdown_mask,false)
  203. self:RequestRefreshGoodsList()
  204. if self.lastSelectedCareerItem then
  205. GUI:setColor(self.lastSelectedCareerItem,"#00000000")
  206. end
  207. self.lastSelectedCareerItem = item
  208. GUI:setColor(item,"#FFFFFFFF")
  209. end
  210. function this:BtnSortItemOnClick(item,index)
  211. local sortName = SortTypeName[index+1]
  212. self.selectedSortType = index
  213. GUI:Button_setTitleText(self.view.btn_sort,sortName)
  214. GUI:setVisible(self.view.dropdown_list_order,false)
  215. GUI:setVisible(self.view.btn_dropdown_mask,false)
  216. self:RequestRefreshGoodsList()
  217. if self.lastSelectedSortItem then
  218. GUI:setColor(self.lastSelectedSortItem,"#00000000")
  219. end
  220. self.lastSelectedSortItem = item
  221. GUI:setColor(item,"#FFFFFFFF")
  222. end
  223. function this:BtnFilterLevelItemOnClick(item,index)
  224. local levelName = FilterLevelName[index+1]
  225. self.selectedFilterLevel = index
  226. GUI:Button_setTitleText(self.view.btn_filter_level,levelName)
  227. GUI:setVisible(self.view.dropdown_list_level,false)
  228. GUI:setVisible(self.view.btn_dropdown_mask,false)
  229. self:RequestRefreshGoodsList()
  230. if self.lastSelectedLevelItem then
  231. GUI:setColor(self.lastSelectedLevelItem,"#00000000")
  232. end
  233. self.lastSelectedLevelItem = item
  234. GUI:setColor(item,"#FFFFFFFF")
  235. end
  236. function this:BtnFilterLevelOnClick()
  237. self:CloseAllDropdownList(self.view.dropdown_list_level)
  238. local visible = GUI:getVisible(self.view.dropdown_list_level)
  239. GUI:setVisible(self.view.dropdown_list_level,not visible)
  240. GUI:setVisible(self.view.btn_dropdown_mask,not visible)
  241. end
  242. function this:BtnSortOnClick()
  243. self:CloseAllDropdownList(self.view.dropdown_list_order)
  244. local visible = GUI:getVisible(self.view.dropdown_list_order)
  245. GUI:setVisible(self.view.dropdown_list_order,not visible)
  246. GUI:setVisible(self.view.btn_dropdown_mask,not visible)
  247. end
  248. function this:BtnFilterQualityOnClick()
  249. self:CloseAllDropdownList(self.view.dropdown_list_quality)
  250. local visible = GUI:getVisible(self.view.dropdown_list_quality)
  251. GUI:setVisible(self.view.dropdown_list_quality,not visible)
  252. GUI:setVisible(self.view.btn_dropdown_mask,not visible)
  253. end
  254. function this:BtnFilterCareerOnClick()
  255. self:CloseAllDropdownList(self.view.dropdown_list_career)
  256. local visible = GUI:getVisible(self.view.dropdown_list_career)
  257. GUI:setVisible(self.view.dropdown_list_career,not visible)
  258. GUI:setVisible(self.view.btn_dropdown_mask,not visible)
  259. end
  260. function this:BtnDropdownMaskOnClick()
  261. self:CloseAllDropdownList()
  262. GUI:setVisible(self.view.btn_dropdown_mask,false)
  263. end
  264. function this:CloseAllDropdownList(except)
  265. if except ~= self.view.dropdown_list_career then
  266. GUI:setVisible(self.view.dropdown_list_career,false)
  267. end
  268. if except ~= self.view.dropdown_list_order then
  269. GUI:setVisible(self.view.dropdown_list_order,false)
  270. end
  271. if except ~= self.view.dropdown_list_quality then
  272. GUI:setVisible(self.view.dropdown_list_quality,false)
  273. end
  274. if except ~= self.view.dropdown_list_level then
  275. GUI:setVisible(self.view.dropdown_list_level,false)
  276. end
  277. end
  278. ---创建或者刷新界面数据时调用
  279. function this:Refresh()
  280. GUI:OSAScrollView_RefreshList(self.view.scrollview_catalogue,#self.catalogueDataList)
  281. if self.args == 1 then
  282. GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeUnionGoods/KLTradeUnionGoodsPanel")
  283. elseif self.args == 2 then
  284. GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeCommonGoods/KLTradeCommonGoodsPanel")
  285. elseif self.args == 3 then
  286. GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeCommonGoods/KLTradeCommonGoodsPanel")
  287. end
  288. self:RequestRefreshGoodsList()
  289. end
  290. function this:Close()
  291. GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeCommonGoods/KLTradeCommonGoodsPanel")
  292. GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeUnionGoods/KLTradeUnionGoodsPanel")
  293. GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeCrossServerGoods/KLTradeCrossServerGoodsPanel")
  294. end
  295. function this:RequestRefreshGoodsList()
  296. self:GetCurGoodsPanel():RequestRefreshGoodsList(self.selectedItemData.rootType,self.selectedItemData.subType,self.selectedSortType,self.selectedCareerType,self.selectedFilterLevel,self.selectedFilterQuality)
  297. --SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_TRADE_GOODS,{self.selectedItemData.rootType,self.selectedItemData.subType,self.selectedSortType,self.selectedCareerType,self.selectedFilterLevel,self.selectedFilterQuality})
  298. end
  299. return this