tsb_home_page.lua 9.9 KB

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