tsb_home_page.lua 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. --[[
  2. @module tsb_home_page
  3. @summary 调试宝主页
  4. @version 1.0
  5. @date 2026.03.04
  6. @author 李一玮
  7. @usage
  8. 本文件是调试宝的主页,提供所有功能演示的入口。
  9. ]]
  10. local tsb_home_page = {}
  11. -- 页面UI元素
  12. local main_container = nil
  13. local scroll_container = nil
  14. local common_ui = require("tsb_common_page")
  15. _G.current_tab = _G.current_tab or 0
  16. -- 全局变量:存储当前是否为游客模式
  17. local is_visitor_mode = false
  18. -- 选项卡分类
  19. local tab_names = {"常用功能", "目标设备监测", "目标设备管理", "本机设备管理"}
  20. -- 演示模块列表(按选项卡分类)
  21. local demos_by_tab = {
  22. -- 常用功能
  23. {
  24. {name = "报税口", src = "/luadb/bsk2.png", page = "tsb_bsk_page", color = 0x007AFF},
  25. {name = "液位仪", src = "/luadb/ywy.png", page = "tsb_ywy_page", color = 0x4CAF50},
  26. {name = "提枪信号", src = "/luadb/tq.png", page = "tsb_tq_page", color = 0xF44336},
  27. {name = "编码器", src = "/luadb/bmq.png", page = "tsb_bmq_page", color = 0xFF9800},
  28. {name = "简易示波器", src = "/luadb/sbq.png", page = "tsb_waveform_page", color = 0xFFAB91},
  29. {name = "帮助", src = "/luadb/help.png", page = "tsb_help_page", color = 0xCE93D8},
  30. },
  31. -- 目标设备监测
  32. {
  33. {name = "日志监测", src = "/luadb/rzjc.png", page = "tsb_devlog_page", color = 0x82B1FF},
  34. {name = "485监测", src = "/luadb/4851.png", page = "tsb_485log_page", color = 0xA5D6A7},
  35. {name = "232监测", src = "/luadb/232.png", page = "tsb_232log_page", color = 0xFFCCBC},
  36. {name = "射频局域网监测", src = "/luadb/LoRa.png", page = "tsb_lora_page", color = 0xFFE082},
  37. },
  38. -- 目标设备管理
  39. {
  40. {name = "固件包下载", src = "/luadb/gjb.png", page = "tsb_firm_page", color = 0x2196F3},
  41. {name = "升级", src = "/luadb/upgrade.png", page = "tsb_upgrade_page", color = 0x66BB6A},
  42. {name = "刷机", src = "/luadb/sj.png", page = "tsb_reflash_page", color = 0xF4511E},
  43. {name = "MQTT配置", src = "/luadb/MQTT.png", page = "tsb_mqtt_page", color = 0xFFB74D},
  44. {name = "信道切换", src = "/luadb/xd4.png", page = "tsb_channel_page", color = 0x7E57C2},
  45. },
  46. -- 本机设备管理
  47. {
  48. {name = "本机信息", src = "/luadb/bjxx2.png", page = "tsb_devinfo_page", color = 0xB3E5FC},
  49. {name = "本机升级", src = "/luadb/up1.png", page = "tsb_update_page", color = 0xA5D6A7},
  50. {name = "本机日志", src = "/luadb/bjrz1.png", page = "tsb_log_page", color = 0xFFCCBC},
  51. {name = "亮度管理", src = "/luadb/light.png", page = "tsb_light_page", color = 0xF2E2C5},
  52. {name = "网络设置", src = "/luadb/wlan3.png", page = "tsb_wlan_page", color = 0xCE93D8},
  53. }
  54. }
  55. -- 游客模式演示模块列表(按选项卡分类)
  56. local demos_by_tab_visitor = {
  57. -- 常用功能(全部保留)
  58. {
  59. {name = "报税口", src = "/luadb/bsk2.png", page = "tsb_bsk_page", color = 0x007AFF},
  60. {name = "液位仪", src = "/luadb/ywy.png", page = "tsb_ywy_page", color = 0x4CAF50},
  61. {name = "提枪信号", src = "/luadb/tq.png", page = "tsb_tq_page", color = 0xF44336},
  62. {name = "编码器", src = "/luadb/bmq.png", page = "tsb_bmq_page", color = 0xFF9800},
  63. {name = "简易示波器", src = "/luadb/sbq.png", page = "tsb_waveform_page", color = 0xFFAB91},
  64. {name = "帮助", src = "/luadb/help.png", page = "tsb_help_page", color = 0xCE93D8},
  65. },
  66. -- 目标设备监测(只保留485监测)
  67. {
  68. {name = "485监测", src = "/luadb/4851.png", page = "tsb_485log_page", color = 0xA5D6A7},
  69. },
  70. -- 目标设备管理(全部隐藏)
  71. {},
  72. -- 本机设备管理(只保留本机信息和亮度管理)
  73. {
  74. {name = "本机信息", src = "/luadb/bjxx2.png", page = "tsb_devinfo_page", color = 0xB3E5FC},
  75. {name = "亮度管理", src = "/luadb/light.png", page = "tsb_shutdown_page", color = 0xFFF4E2},
  76. }
  77. }
  78. -- 创建主页UI
  79. function tsb_home_page.create_ui()
  80. -- 创建主容器
  81. main_container = airui.container({
  82. x = 0,
  83. y = 0,
  84. w = 480,
  85. h = 320,
  86. color = 0xF8F9FA,
  87. })
  88. -- 标题栏
  89. local title_bar = airui.container({
  90. parent = main_container,
  91. x = 0,
  92. y = 0,
  93. w = 480,
  94. h = 30,
  95. color = 0x2E6EF4,
  96. })
  97. local battery_label = common_ui.add_battery_display(title_bar)
  98. airui.label({
  99. parent = title_bar,
  100. text = "主界面",
  101. x = 210,
  102. y = 8,
  103. w = 80,
  104. h = 20,
  105. font_size = 16,
  106. color = 0xFFFFFF,
  107. })
  108. -- 返回按钮(仅首页的返回按钮没有调用common_page中的函数)
  109. -- local back_btn = airui.button({
  110. -- parent = title_bar,
  111. -- x = 10,
  112. -- y = 3,
  113. -- w = 45,
  114. -- h = 25,
  115. -- text = "返回",
  116. -- on_click = function()
  117. -- tsb_home_page.cleanup()
  118. -- go_back()
  119. -- end
  120. -- })
  121. local back_img = airui.image({
  122. parent = parent,
  123. x = 5,
  124. y = 4,
  125. w = 20,
  126. h = 25,
  127. src = "/luadb/back1.png",
  128. zoom = 256,
  129. opacity = 255,
  130. on_click = function()
  131. tsb_home_page.cleanup()
  132. go_back()
  133. end
  134. })
  135. local back_label = airui.label({
  136. parent = parent,
  137. text = "返回",
  138. x = 22,
  139. y = 9,
  140. w = 45,
  141. h = 20,
  142. font_size = 15,
  143. color = 0xFFFFFF,
  144. on_click = function()
  145. tsb_home_page.cleanup()
  146. go_back()
  147. end
  148. })
  149. local person_img = airui.image({
  150. parent = title_bar,
  151. x = 70,
  152. y = 3,
  153. w = 20,
  154. h = 25,
  155. src = "/luadb/person3.png",
  156. zoom = 170,
  157. opacity = 255,
  158. })
  159. local person_msg = airui.label({
  160. parent = title_bar,
  161. text = is_visitor_mode and "游客模式" or "lyw...(管理员)",
  162. x = 95,
  163. y = 8,
  164. w = 100,
  165. h = 20,
  166. font_size = 14,
  167. color = 0xFFFFFF,
  168. })
  169. -- 滚动容器
  170. scroll_container = airui.container({
  171. parent = main_container,
  172. x = 0,
  173. y = 30,
  174. w = 480,
  175. h = 270,
  176. color = 0xF8F9FA,
  177. })
  178. -- 创建选项卡组件
  179. local tabview = airui.tabview({
  180. parent = scroll_container,
  181. x = 0,
  182. y = 0,
  183. w = 480,
  184. h = 270,
  185. tabs = tab_names,
  186. active = _G.current_tab,
  187. page_style = {
  188. tabbar_size = 20,
  189. pad = { method = airui.TABVIEW_PAD_ALL, value = 5 },
  190. bg_opa = 200, -- 设置背景透明度,0-255
  191. },
  192. })
  193. -- 为每个选项卡添加内容
  194. local demos_list = is_visitor_mode and demos_by_tab_visitor or demos_by_tab
  195. for i, demos in ipairs(demos_list) do
  196. local tab_content = tabview:get_content(i - 1)
  197. if tab_content then
  198. -- 创建网格布局的演示按钮
  199. local button_width = 150
  200. local button_height = 80
  201. local columns = 3
  202. local padding = 5
  203. local y_offset = 10
  204. for j, demo in ipairs(demos) do
  205. local col = (j - 1) % columns
  206. local row = math.floor((j - 1) / columns)
  207. local x = padding + col * (button_width + padding)
  208. local y = y_offset + row * (button_height + padding)
  209. -- 创建按钮容器(卡片样式)
  210. local card = airui.container({
  211. parent = tab_content,
  212. x = x,
  213. y = y,
  214. w = button_width,
  215. h = button_height,
  216. color = demo.color,
  217. radius = 8,
  218. })
  219. -- 图标或图片
  220. if demo.src then
  221. -- 使用图片
  222. airui.image({
  223. parent = card,
  224. x = 5,
  225. y = 7,
  226. w = 50,
  227. h = 50,
  228. src = demo.src,
  229. zoom = 200,
  230. opacity = 255,
  231. })
  232. elseif demo.icon then
  233. -- 使用图标
  234. airui.label({
  235. parent = card,
  236. text = demo.icon,
  237. x = 15,
  238. y = 20,
  239. w = 40,
  240. h = 40,
  241. font_size = 24, -- 增大图标大小
  242. })
  243. end
  244. -- 演示名称标签
  245. airui.label({
  246. parent = card,
  247. text = demo.name,
  248. x = 50,
  249. y = 25,
  250. w = button_width - 60,
  251. h = 40,
  252. font_size = 14, -- 调整字体大小
  253. on_click = function()
  254. _G.current_tab = i - 1
  255. _G.show_page(demo.page)
  256. end
  257. })
  258. end
  259. end
  260. end
  261. -- 底部状态栏
  262. common_ui.create_status_bar(main_container)
  263. end
  264. -- 初始化页面
  265. function tsb_home_page.init(params)
  266. -- 检查是否为游客模式
  267. is_visitor_mode = params and params.visitor_mode or false
  268. log.info("tsb_home_page", "初始化页面,游客模式:", is_visitor_mode)
  269. tsb_home_page.create_ui()
  270. end
  271. -- 清理页面
  272. function tsb_home_page.cleanup()
  273. -- 清理UI元素
  274. main_container = nil
  275. scroll_container = nil
  276. end
  277. return tsb_home_page