KLRecoverDetailedSettingsPanel.lua 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. ---@class KLRecoverDetailedSettingsPanel:UIKmlLuaPanelBase
  2. ---@field view KLRecoverDetailedSettingsPanelView
  3. ---@field typeList cfg_recovery_column[]
  4. ---@field goodsItem table<KingML.KmlControl,KLRecycleIncomeItemItem>
  5. ---@field getList table<number,{count:number,cfgId:number}>
  6. local KLRecoverDetailedSettingsPanel = class(UIKmlLuaPanelBase)
  7. local this = KLRecoverDetailedSettingsPanel
  8. ---创建时调用一次
  9. function this:Init()
  10. end
  11. function this:RefreshData(data)
  12. self.data = data
  13. ---回收所得列表
  14. self.getList = {}
  15. ---回收所得道具展示
  16. self.goodsItem = {}
  17. ---回收类型列表
  18. self.typeList = {}
  19. self.selectItemList = {}
  20. self.typeList = self.data.typeList
  21. self.jishu_list = {}
  22. self.citiao_list = {}
  23. self.zhiye_list = {}
  24. for i, v in ipairs(self.typeList) do
  25. if v.type == 1 then
  26. table.insert(self.jishu_list, v)
  27. elseif v.type == 2 then
  28. table.insert(self.citiao_list, v)
  29. elseif v.type == 3 then
  30. table.insert(self.zhiye_list, v)
  31. end
  32. end
  33. self.recover_all_item = {}
  34. ---阶数列表
  35. for k, v in ipairs(self.jishu_list) do
  36. local id = v.id
  37. ---@type KLRecoverTypeItem
  38. local homeTab = GUI:UIPanel_Open("dev/ui/Recover/Item/KLRecoverType/KLRecoverTypeItem", self.view.jieshu_content,
  39. self, v, true, function(homeTab)
  40. GUI:SetToggleOnValueChange(homeTab.view.KmlRecycleTypeItemTemplate, self, self.ToggleChange, v.id)
  41. end)
  42. self.recover_all_item[tostring(id)] = homeTab
  43. end
  44. if #self.jishu_list > 0 then
  45. GUI:setVisible(self.view.jieshu_title, true)
  46. else
  47. GUI:setVisible(self.view.jieshu_title, false)
  48. end
  49. --词条数列表
  50. for k, v in ipairs(self.citiao_list) do
  51. local id = v.id
  52. ---@type KLRecoverTypeItem
  53. local homeTab = GUI:UIPanel_Open("dev/ui/Recover/Item/KLRecoverType/KLRecoverTypeItem",
  54. self.view.citiaoshu_content, self, v, true, function(homeTab)
  55. GUI:SetToggleOnValueChange(homeTab.view.KmlRecycleTypeItemTemplate, self, self.ToggleChange, v.id)
  56. end)
  57. self.recover_all_item[tostring(id)] = homeTab
  58. end
  59. if #self.citiao_list > 0 then
  60. GUI:setVisible(self.view.citiaoshu_title, true)
  61. else
  62. GUI:setVisible(self.view.citiaoshu_title, false)
  63. end
  64. --职业列表
  65. for k, v in ipairs(self.zhiye_list) do
  66. local id = v.id
  67. ---@type KLRecoverTypeItem
  68. local homeTab = GUI:UIPanel_Open("dev/ui/Recover/Item/KLRecoverType/KLRecoverTypeItem", self.view.zhiye_content,
  69. self, v, true, function(homeTab)
  70. GUI:SetOnPrefabControlLoaded(homeTab.view.prefab_11, function()
  71. GUI:SetToggleOnValueChange(homeTab.view.KmlRecycleTypeItemTemplate, self, self.ToggleChange, v.id)
  72. end)
  73. end)
  74. self.recover_all_item[tostring(id)] = homeTab
  75. end
  76. if #self.zhiye_list > 0 then
  77. GUI:setVisible(self.view.zhiye_title, true)
  78. else
  79. GUI:setVisible(self.view.zhiye_title, false)
  80. end
  81. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_RECYCLING_TYPE)
  82. -- SL:ScheduleOnce(1, function()
  83. -- SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_RECYCLING_TYPE)
  84. -- end)
  85. end
  86. ---创建或者刷新界面数据时调用
  87. function this:Refresh()
  88. SL.HideMainPanel()
  89. end
  90. ---注册UI事件和服务器消息
  91. function this:RegistEvents()
  92. GUI:AddOnClickEvent(self.view.closeBtn, self, self.BtnCloseOnClick)
  93. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GET_RECYCLING_TYPE, self.RES_GET_RECYCLING_TYPE, self)
  94. end
  95. function this:UnRegistEvents()
  96. SL:UnRegisterLuaNetMsg(LuaMessageIdToClient.RES_GET_RECYCLING_TYPE, self.RES_GET_RECYCLING_TYPE, self)
  97. end
  98. function this:Close()
  99. self:UnRegistEvents()
  100. end
  101. function this:Recycle()
  102. -- if not self.recover_all_item then
  103. -- return
  104. -- end
  105. -- for _, v in pairs(self.recover_all_item) do
  106. -- GUI:UIPanel_Close(nil, v)
  107. -- end
  108. -- table.clear(self.recover_all_item)
  109. end
  110. ---关闭页面
  111. function this:BtnCloseOnClick()
  112. GUI:UIPanel_Close("dev/ui/Recover/Panel/KLRecoverDetailedSettings/KLRecoverDetailedSettingsPanel")
  113. end
  114. function this:GetRecoverTypeSet()
  115. return false
  116. end
  117. -- 返回回收类型
  118. function this:RES_GET_RECYCLING_TYPE(_id, message)
  119. -- SL:LogTable(message,true)
  120. if message then
  121. self.recover_data = message
  122. else
  123. self.recover_data = {}
  124. end
  125. local one_list = self.recover_data[tostring(self.data.id)]
  126. if not one_list or not one_list["1"] then
  127. for k, v in pairs(self.recover_all_item) do
  128. GUI:SetOnPrefabControlLoaded(v.view.prefab_11, function()
  129. GUI:Toggle_setIsOn(v.view.KmlRecycleTypeItemTemplate, false)
  130. end)
  131. end
  132. return
  133. end
  134. local all_true = {}
  135. if one_list then
  136. for i = 1, 100, 1 do
  137. local key = tostring(i)
  138. if not one_list[key] then
  139. break
  140. end
  141. local id_str = tostring(one_list[key])
  142. if self.recover_all_item[id_str] and self.recover_all_item[id_str].view then
  143. GUI:SetOnPrefabControlLoaded(self.recover_all_item[id_str].view.prefab_11, function()
  144. GUI:Toggle_setIsOn(self.recover_all_item[id_str].view.KmlRecycleTypeItemTemplate, true)
  145. end)
  146. table.insert(all_true, id_str)
  147. end
  148. end
  149. end
  150. for k, v in pairs(self.recover_all_item) do
  151. if table.contains(all_true, k) then
  152. else
  153. GUI:Toggle_setIsOn(v.view.KmlRecycleTypeItemTemplate, false)
  154. end
  155. end
  156. end
  157. function this:contain_bg_value(tab, value)
  158. for k, v in pairs(tab) do
  159. if v == value then
  160. return true
  161. end
  162. end
  163. return false
  164. end
  165. function this:get_remove_value(tab, value)
  166. local all_list = {}
  167. local index = 1
  168. for k, v in pairs(tab) do
  169. if v ~= value then
  170. all_list[tostring(index)] = v
  171. index = index + 1
  172. end
  173. end
  174. return all_list
  175. end
  176. function this:get_add_value(tab, value)
  177. local all_list = {}
  178. local index = 1
  179. for k = 1, 100, 1 do
  180. if tab[tostring(k)] then
  181. index = k
  182. all_list[tostring(index)] = tab[tostring(k)]
  183. else
  184. break
  185. end
  186. end
  187. all_list[tostring(index + 1)] = value
  188. return all_list
  189. end
  190. ---勾选类型变更 二级页签
  191. ---@param customData number @cfg_recovery表id
  192. function this:ToggleChange(_, customData, eventData)
  193. if not self.recover_data then
  194. return
  195. end
  196. if not self.data then
  197. return
  198. end
  199. --self.data
  200. local current_id = tostring(self.data.id)
  201. if eventData[1] then
  202. if not self.recover_data[current_id] then
  203. local one_data = {}
  204. one_data["1"] = customData
  205. self.recover_data[current_id] = one_data
  206. else
  207. if self:contain_bg_value(self.recover_data[current_id], customData) then
  208. return
  209. else
  210. self.recover_data[current_id] = self:get_add_value(self.recover_data[current_id], customData)
  211. end
  212. end
  213. else
  214. if not self.recover_data[current_id] then
  215. return
  216. end
  217. if self:contain_bg_value(self.recover_data[current_id], customData) then
  218. local target_list = self:get_remove_value(self.recover_data[current_id], customData)
  219. if target_list["1"] then
  220. self.recover_data[current_id] = target_list
  221. else
  222. self.recover_data[current_id] = nil
  223. end
  224. else
  225. return
  226. end
  227. end
  228. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_SETTING_RECYCLING_TYPE, self.recover_data)
  229. end
  230. return this