From cc5bb96750315f7bb8b08c65ee4e992e75b8ffb6 Mon Sep 17 00:00:00 2001 From: ling <1042585959@qq.com> Date: Mon, 15 Apr 2024 23:34:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../luci-static/resources/icons/delsms.png | Bin 0 -> 9221 bytes .../luci-static/resources/icons/delsms2.png | Bin 0 -> 1365 bytes luci-app-modem/luasrc/controller/modem.lua | 186 ++++--- .../luasrc/view/modem/modem_debug.htm | 462 ++++++++++++------ luci-app-modem/po/zh-cn/modem.po | 12 + luci-app-modem/root/etc/init.d/modem | 15 +- .../root/usr/share/modem/fibocom.sh | 43 +- .../usr/share/modem/modem_network_task.sh | 15 +- .../root/usr/share/modem/modem_task.sh | 2 +- .../root/usr/share/modem/quectel.sh | 57 ++- 10 files changed, 542 insertions(+), 250 deletions(-) create mode 100644 luci-app-modem/htdocs/luci-static/resources/icons/delsms.png create mode 100644 luci-app-modem/htdocs/luci-static/resources/icons/delsms2.png diff --git a/luci-app-modem/htdocs/luci-static/resources/icons/delsms.png b/luci-app-modem/htdocs/luci-static/resources/icons/delsms.png new file mode 100644 index 0000000000000000000000000000000000000000..b036e813f546c56ad0e934e1c7ec9ee359f469b4 GIT binary patch literal 9221 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 be4qXWXHQajJ#~#t00000NkvXXu0mjfyr5CZ literal 0 HcmV?d00001 diff --git a/luci-app-modem/htdocs/luci-static/resources/icons/delsms2.png b/luci-app-modem/htdocs/luci-static/resources/icons/delsms2.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb13c5e674a1a826e0f8f0fdb809834922e1d3c GIT binary patch literal 1365 zcmV-b1*-aqP)EX>4Tx04R}tkv&MmKpe$iQ>7}k4(*`gkfAzR5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RRbkxtGNhls^O2g@DIiiS!&O&nHKjq-(z z!wTmu&T6^JTKD8H^yjpd6xV5vAciHxk$?ypRg_SMg$S)0DJGJ%A9e8$H~k56$>b`5 zkz)ZBsF0d|@IUz7t(l*ibdvm0p!>zPKSlxHF3_mi_V=-EH%AO zt%Z+(foN9LZ_VkgwU5&WAWdB@-v9@P zz*vE@*InM-)7jg_CX>@2HM@dakSAh-}0009lNkl3);i_xxh&zU`YW(NM_B_D3B3d(07uYwH%kIooE2pE9_0t8?{g8ocMJ&Yn~AB7-I z+Ae?e?(#S9$Oqf27a_h401ANtPS6r`J@AA;fvyK^5CX^ux!(_vDUoDAxb^4wd^V49 z&B%x_f{x&bU?1lm^c1sEW?}_>3}FG0Awot71m)4iqjB~q{f~ynA;AP^8^;O2qXNgQ zt}{`^QFc&vka!A}5rQKmif3{uPKfou2ROI!sA^kJ;By33^-7QeR3Ql@Hc-wZj1Xxs zGjit!w1gaDej5WWf&nGq zZ`N!m zkc$g}VtuA1;LF`L?*G&h7#1x~!NZPano6TIWNB!lWixgdD@bp#5TUq}&8xyw=XlgB zKYi|bR0NA!&E9*-fkaIzp(M#ne4n3p!Mw^>3FC9L4#RB-uU5}7bCix&OXKt222d@v~Uodcxa!gfjslTV}&Oh7^HfxJdQG= zl;LtF5)ep?Pzu2=1A(Ps@1Ci2bFD(BM7^UjpaH@nFal}FSt1LXAb~U}=O932w^k`9 z!Q(^^`j;e0A6Y8c{jZI{c~S{y%ZFJ zZteQY=9RNdw0vsBiB64t4fN_+N2Z=4sEU3nqE|j&`6JFskRLFn*FkQqzwle|{{sF2 XGLww0Jg8t@00000NkvXXu0mjfu%1_o literal 0 HcmV?d00001 diff --git a/luci-app-modem/luasrc/controller/modem.lua b/luci-app-modem/luasrc/controller/modem.lua index 5067038..61f7b53 100644 --- a/luci-app-modem/luasrc/controller/modem.lua +++ b/luci-app-modem/luasrc/controller/modem.lua @@ -29,8 +29,11 @@ function index() entry({"admin", "network", "modem", "get_quick_commands"}, call("getQuickCommands"), nil).leaf = true entry({"admin", "network", "modem", "send_at_command"}, call("sendATCommand"), nil).leaf = true entry({"admin", "network", "modem", "get_modem_debug_info"}, call("getModemDebugInfo"), nil).leaf = true + entry({"admin", "network", "modem", "get_mode_info"}, call("getModeInfo"), nil).leaf = true entry({"admin", "network", "modem", "set_mode"}, call("setMode"), nil).leaf = true + entry({"admin", "network", "modem", "get_network_prefer_info"}, call("getNetworkPreferInfo"), nil).leaf = true entry({"admin", "network", "modem", "set_network_prefer"}, call("setNetworkPrefer"), nil).leaf = true + entry({"admin", "network", "modem", "get_self_test_info"}, call("getSelfTestInfo"), nil).leaf = true entry({"admin", "network", "modem", "quick_commands_config"}, cbi("modem/quick_commands_config")).leaf = true --AT命令旧界面 @@ -518,74 +521,59 @@ end --[[ @Description 获取拨号模式信息 -@Params - at_port AT串口 - manufacturer 制造商 ]] -function getModeInfo(at_port,manufacturer) +function getModeInfo() + local at_port = http.formvalue("port") - --获取支持的拨号模式 - local modes + --获取制造商 + local manufacturer uci:foreach("modem", "modem-device", function (modem_device) --设置模组AT串口 if at_port == modem_device["at_port"] then - modes=modem_device["modes"] + --获取制造商 + manufacturer=modem_device["manufacturer"] return true --跳出循环 end end) - --获取模组拨号模式 - local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_mode "..at_port) - local opd = odpall:read("*a") - odpall:close() - local mode=string.gsub(opd, "\n", "") - - -- 设置值 + --获取值 local mode_info={} - mode_info["mode"]=mode - mode_info["modes"]=modes + if manufacturer~="unknown" then - return mode_info + --获取支持的拨号模式 + local modes + uci:foreach("modem", "modem-device", function (modem_device) + --设置模组AT串口 + if at_port == modem_device["at_port"] then + modes=modem_device["modes"] + return true --跳出循环 + end + end) + + --获取模组拨号模式 + local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_mode "..at_port) + local opd = odpall:read("*a") + odpall:close() + local mode=string.gsub(opd, "\n", "") + + --设置模式信息 + mode_info["mode"]=mode + mode_info["modes"]=modes + end + + --设置值 + local modem_debug_info={} + modem_debug_info["mode_info"]=mode_info + + -- 写入Web界面 + luci.http.prepare_content("application/json") + luci.http.write_json(modem_debug_info) end --[[ @Description 获取网络偏好信息 -@Params - at_port AT串口 - manufacturer 制造商 ]] -function getNetworkPreferInfo(at_port,manufacturer) - - --获取模组网络偏好 - local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_network_prefer "..at_port) - local opd = odpall:read("*a") - odpall:close() - local network_prefer_info=json.parse(opd) - - return network_prefer_info -end - ---[[ -@Description 获取自检信息 -@Params - at_port AT串口 - manufacturer 制造商 -]] -function getSelfTestInfo(at_port,manufacturer) - - --获取模组自检信息 - local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_self_test_info "..at_port) - local opd = odpall:read("*a") - odpall:close() - local self_test_info=json.parse(opd) - - return self_test_info -end - ---[[ -@Description 获取模组调试信息 -]] -function getModemDebugInfo() +function getNetworkPreferInfo() local at_port = http.formvalue("port") --获取制造商 @@ -600,22 +588,100 @@ function getModemDebugInfo() end) --获取值 - local mode_info={} - local network_prefer_info={} - local self_test_info={} + local network_prefer_info if manufacturer~="unknown" then - mode_info=getModeInfo(at_port,manufacturer) - network_prefer_info=getNetworkPreferInfo(at_port,manufacturer) - self_test_info=getSelfTestInfo(at_port,manufacturer) + --获取模组网络偏好 + local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_network_prefer "..at_port) + local opd = odpall:read("*a") + odpall:close() + network_prefer_info=json.parse(opd) end --设置值 local modem_debug_info={} - modem_debug_info["mode_info"]=mode_info modem_debug_info["network_prefer_info"]=network_prefer_info - modem_debug_info["self_test_info"]=self_test_info -- 写入Web界面 luci.http.prepare_content("application/json") luci.http.write_json(modem_debug_info) end + +--[[ +@Description 获取自检信息 +]] +function getSelfTestInfo() + local at_port = http.formvalue("port") + + --获取制造商 + local manufacturer + uci:foreach("modem", "modem-device", function (modem_device) + --设置模组AT串口 + if at_port == modem_device["at_port"] then + --获取制造商 + manufacturer=modem_device["manufacturer"] + return true --跳出循环 + end + end) + + --获取值 + local self_test_info={} + if manufacturer~="unknown" then + --获取模组电压 + local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_voltage "..at_port) + local opd = odpall:read("*a") + odpall:close() + self_test_info["voltage"]=json.parse(opd) + + --获取模组温度 + local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_temperature "..at_port) + local opd = odpall:read("*a") + odpall:close() + self_test_info["temperature"]=json.parse(opd) + end + + --设置值 + local modem_debug_info={} + modem_debug_info["self_test_info"]=self_test_info + + -- 写入Web界面 + luci.http.prepare_content("application/json") + luci.http.write_json(modem_debug_info) +end + +--[[ +@Description 获取模组调试信息 +]] +-- function getModemDebugInfo() +-- local at_port = http.formvalue("port") + +-- --获取制造商 +-- local manufacturer +-- uci:foreach("modem", "modem-device", function (modem_device) +-- --设置模组AT串口 +-- if at_port == modem_device["at_port"] then +-- --获取制造商 +-- manufacturer=modem_device["manufacturer"] +-- return true --跳出循环 +-- end +-- end) + +-- --获取值 +-- local mode_info={} +-- local network_prefer_info={} +-- local self_test_info={} +-- if manufacturer~="unknown" then +-- mode_info=getModeInfo(at_port,manufacturer) +-- network_prefer_info=getNetworkPreferInfo(at_port,manufacturer) +-- self_test_info=getSelfTestInfo(at_port,manufacturer) +-- end + +-- --设置值 +-- local modem_debug_info={} +-- modem_debug_info["mode_info"]=mode_info +-- modem_debug_info["network_prefer_info"]=network_prefer_info +-- modem_debug_info["self_test_info"]=self_test_info + +-- -- 写入Web界面 +-- luci.http.prepare_content("application/json") +-- luci.http.write_json(modem_debug_info) +-- end diff --git a/luci-app-modem/luasrc/view/modem/modem_debug.htm b/luci-app-modem/luasrc/view/modem/modem_debug.htm index 5643416..926b989 100644 --- a/luci-app-modem/luasrc/view/modem/modem_debug.htm +++ b/luci-app-modem/luasrc/view/modem/modem_debug.htm @@ -11,9 +11,14 @@ //获取快捷命令 get_quick_commands(); //获取模组调试信息 - get_modem_debug_info(); + var debug_params={first_cache:true}; + get_modem_debug_info(debug_params); }); + //获取tab菜单 + var tab_menu = document.getElementsByClassName('cbi-tabmenu')[0]; + set_tab_event(tab_menu); + //获取快捷选项父元素 var quick_option_element = document.getElementById('quick_option_td'); //更换快捷选项时触发 @@ -64,6 +69,46 @@ }); } + //设置tab菜单事件 + function set_tab_event(parent_element) + { + //获取子元素 + var childElements = parent_element.children; + //获取需要禁用的元素 + for (var i = 0; i < childElements.length; i++) + { + // childElements[i].addEventListener('click', function(event) { + // var debug_params={first_cache:true}; + // get_modem_debug_info(debug_params); + // }); + + // 创建一个 MutationObserver 实例 + var observer = new MutationObserver(function(mutationsList) { + for (var mutation of mutationsList) { + if (mutation.type === 'attributes' && mutation.attributeName === 'class') { + //只处理当前变为禁用的tab + if (mutation.target.className=='cbi-tab') { + //获取模组调试信息 + var debug_params={first_cache:true}; + get_modem_debug_info(debug_params); + //只处理一次 + break; + } + } + } + }); + + // 配置观察器选项 + var observerOptions = { + attributes: true, // 监听属性值变化 + attributeFilter: ['class'], // 要监听的属性名称 + }; + + // 开始观察目标元素 + observer.observe(childElements[i], observerOptions); + } + } + // 自动填写到快捷AT命令到输入框 function copy_to_input() { @@ -169,6 +214,59 @@ } } + //获取当前启用的元素 + function get_tab_enable_element(parent_element) + { + var disenable_element; + //获取子元素 + var childElements = parent_element.children; + //获取需要禁用的元素 + for (var i = 0; i < childElements.length; i++) + { + // 检查当前子元素的class属性是否为cbi-tab + if (childElements[i].classList.contains('cbi-tab')) + { + disenable_element=childElements[i]; + break; + } + } + return disenable_element; + } + + // 设置tab显示 + function set_tab_view(disenable_element,enable_element) + { + //获取tab内容父元素 + var tab_context = document.getElementById('tab_context'); + + //禁用tab + disenable_element.classList.remove('cbi-tab'); + disenable_element.classList.add('cbi-tab-disabled'); + //禁用tab内容 + var data_tab_disenable = disenable_element.getAttribute('data-tab'); + var tab_context_disenable_element = tab_context.querySelector('div[data-tab="'+data_tab_disenable+'"]'); + tab_context_disenable_element.setAttribute('data-tab-active','false'); + + //启用tab + enable_element.classList.remove('cbi-tab-disabled'); + enable_element.classList.add('cbi-tab'); + //启用tab内容 + var data_tab_enable = enable_element.getAttribute('data-tab'); + var tab_context_enable_element = tab_context.querySelector('div[data-tab="'+data_tab_enable+'"]'); + tab_context_enable_element.setAttribute('data-tab-active','true'); + } + + // tab事件处理(更新选中的tab及tab内容) + function tab_event(tab_element) + { + //获取需要禁用的tab元素 + var tab_menu = document.getElementsByClassName('cbi-tabmenu')[0]; + var disenable_element=get_tab_enable_element(tab_menu); + if (tab_element != disenable_element) { + set_tab_view(disenable_element,tab_element); + } + } + // 无模组界面 function no_modems_view() { @@ -178,14 +276,10 @@ document.getElementById("cbi-info").style.display="block"; //隐藏模组选择界面 document.getElementById("cbi-modem").style.display="none"; - //隐藏拨号模式界面 - document.getElementById("cbi-mode").style.display="none"; - //隐藏网络偏好界面 - document.getElementById("cbi-network-prefer").style.display="none"; - //隐藏模组自检界面 - document.getElementById("cbi-modem-self-test").style.display="none"; - //隐藏AT界面 - document.getElementById("cbi-at").style.display="none"; + //隐藏tab菜单界面 + document.getElementsByClassName("cbi-tabmenu")[0].style.display="none"; + //隐藏tab内容界面 + document.getElementById("tab_context").style.display="none"; } // 有模组界面 @@ -193,8 +287,8 @@ { //显示模组选择界面 document.getElementById("cbi-modem").style.display="block"; - //显示AT命令界面 - document.getElementById("cbi-at").style.display="block"; + //显示AT命令标题 + document.getElementById("at_command_title").style.display="block"; //隐藏提示信息 // document.getElementById("cbi-info").style.display="none"; } @@ -202,31 +296,36 @@ // 未适配模组界面 function not_adapted_modems_view() { - // 更新提示信息 + //更新提示信息 document.getElementById("info_message").innerHTML="<%:Not adapted to this modem%>"; - // 显示提示信息 + //显示提示信息 document.getElementById("cbi-info").style.display="block"; - //隐藏拨号模式界面 - document.getElementById("cbi-mode").style.display="none"; - //隐藏网络偏好界面 - document.getElementById("cbi-network-prefer").style.display="none"; - //隐藏模组自检界面 - document.getElementById("cbi-modem-self-test").style.display="none"; + //显示tab内容界面 + document.getElementById("tab_context").style.display="block"; + //显示AT命令标题 + document.getElementById("at_command_title").style.display="block"; + //隐藏tab菜单界面 + document.getElementsByClassName("cbi-tabmenu")[0].style.display="none"; + //在tab菜单选中AT命令 + var data_tab="at_command_tab" + var at_command_tab_element = document.querySelector('li[data-tab="'+data_tab+'"]'); + tab_event(at_command_tab_element); + //隐藏tab内容界面 + // document.getElementById("tab_context").style.display="none"; } // 全功能界面 function all_function_view() { - //显示拨号模式界面 - document.getElementById("cbi-mode").style.display="block"; - //显示网络偏好界面 - document.getElementById("cbi-network-prefer").style.display="block"; - //显示模组自检界面 - document.getElementById("cbi-modem-self-test").style.display="block"; + //显示tab菜单界面 + document.getElementsByClassName("cbi-tabmenu")[0].style.display="block"; + //显示tab内容界面 + document.getElementById("tab_context").style.display="block"; + //隐藏AT命令标题 + document.getElementById("at_command_title").style.display="none"; //隐藏提示信息 document.getElementById("cbi-info").style.display="none"; } - // 更新选项 function update_option(select_element,data,order) @@ -495,44 +594,75 @@ // 设置模组自检信息 function set_modem_self_test_info(self_test_info) { - // console.log(self_test_info); - - //获取模组自检 - // var self_test=self_test_info["self_test"]; + //获取电压 + var voltage=self_test_info["voltage"]; + //获取温度 + var temperature=self_test_info["temperature"]; - // //获取自检视图 - // var self_test_view=set_current_self_test_view(self_test); - // //获取 - // var self_test_view=set_current_self_test_view(self_test); - - // //设置当前电压信息 - // document.getElementById('current_voltage').innerHTML=current_self_test_view; - document.getElementById('current_voltage').innerHTML=self_test_info/1000; + //设置当前电压 + document.getElementById('current_voltage').innerHTML=voltage/1000+" V"; + //设置当前温度 + document.getElementById('current_temperature').innerHTML=temperature+" °C"; - // 设置电压状态 + //设置电压状态 var state = ''; var css = ''; - if (self_test_info<3135) + if (voltage<3135) { state = "<%:Abnormal%>"; color = "red"; } - else if (self_test_info>3135 && self_test_info<3300) + else if (voltage>=3135 && voltage<3700) { state = "<%:Low%>"; color = "goldenrod"; } - else //大于3300(3.3V) - { + else if (voltage>=3700 && voltage<4400) { state = "<%:Normal%>"; color = "green"; } + else if (voltage>=4400) { + state = "<%:Abnormal%>"; + color = "red"; + } + else + { + state = "<%:Unknown%>"; + color = "goldenrod"; + } var voltage_status=document.getElementById('voltage_status'); voltage_status.innerHTML=state; voltage_status.style.color=color - // //设置当前温度信息 - // document.getElementById('current_temperature').innerHTML=current_self_test_view; + //设置温度状态 + state = ''; + css = ''; + if (temperature<45) + { + state = "<%:Normal%>"; + color = "green"; + } + else if (temperature>=45 && temperature<75) + { + state = "<%:Somewhat High%>"; + color = "goldenrod"; + } + else if (temperature>=75 && temperature<105) { + state = "<%:Excessively High%>"; + color = "red"; + } + else if (temperature>=105) { + state = "<%:Abnormal%>"; + color = "red"; + } + else + { + state = "<%:Unknown%>"; + color = "goldenrod"; + } + var temperature_status=document.getElementById('temperature_status'); + temperature_status.innerHTML=state; + temperature_status.style.color=color } // 设置网络偏好 @@ -588,35 +718,116 @@ //获取选中的模组 var at_port = document.getElementById("modem_select").value; - //获取调试信息 - XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_modem_debug_info")%>', {"port":at_port}, - function(x, data) - { - var mode_info=data["mode_info"]; - var network_prefer_info=data["network_prefer_info"]; - var self_test_info=data["self_test_info"]; - if (Object.keys(mode_info).length==0||Object.keys(network_prefer_info).length==0) { - //显示未适配模组界面 - not_adapted_modems_view(); - return false + //获取当前启用的tab元素 + var tab_menu = document.getElementsByClassName('cbi-tabmenu')[0]; + var tab_enable_element=get_tab_enable_element(tab_menu); + + //获取当前选中的tab元素 + var data_tab=tab_enable_element.getAttribute("data-tab").replace("_tab",""); + + if (data_tab=="mode") { + //获取拨号模式信息 + XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_mode_info")%>', {"port":at_port}, + function(x, data) + { + var mode_info=data["mode_info"]; + if (Object.keys(mode_info).length==0) + { + //显示未适配模组界面 + not_adapted_modems_view(); + return false + } + + //设置模式信息 + set_mode_info(mode_info,debug_params.first_cache); + + //设置第一次获取数据标志 + debug_params.first_cache=false; + + //显示全功能界面 + all_function_view(); } + ); + } + else if (data_tab=="network_prefer") { + //获取网络偏好信息 + XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_network_prefer_info")%>', {"port":at_port}, + function(x, data) + { + var network_prefer_info=data["network_prefer_info"]; + if (Object.keys(network_prefer_info).length==0) + { + //显示未适配模组界面 + not_adapted_modems_view(); + return false + } - //设置模式信息 - set_mode_info(mode_info,debug_params.first_cache); + //设置网络偏好信息 + set_network_prefer_info(network_prefer_info,debug_params.first_cache); - //设置网络偏好信息 - set_network_prefer_info(network_prefer_info,debug_params.first_cache); + //设置第一次获取数据标志 + debug_params.first_cache=false; - //设置模组自检信息 - set_modem_self_test_info(self_test_info); + //显示全功能界面 + all_function_view(); + } + ); + } + else if (data_tab=="self_test") { + //获取自检信息 + XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_self_test_info")%>', {"port":at_port}, + function(x, data) + { + var self_test_info=data["self_test_info"]; + if (Object.keys(self_test_info).length==0) + { + //显示未适配模组界面 + not_adapted_modems_view(); + return false + } - //设置第一次获取数据标志 - debug_params.first_cache=false; + //设置模组自检信息 + set_modem_self_test_info(self_test_info); + + //设置第一次获取数据标志 + // debug_params.first_cache=false; + + //显示全功能界面 + all_function_view(); + } + ); + } + + //获取调试信息 + // XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_modem_debug_info")%>', {"port":at_port}, + // function(x, data) + // { + // var mode_info=data["mode_info"]; + // var network_prefer_info=data["network_prefer_info"]; + // var self_test_info=data["self_test_info"]; + // if (Object.keys(mode_info).length==0||Object.keys(network_prefer_info).length==0) { + // //显示未适配模组界面 + // not_adapted_modems_view(); + // return false + // } + + // //设置模式信息 + // set_mode_info(mode_info,debug_params.first_cache); + + // //设置网络偏好信息 + // set_network_prefer_info(network_prefer_info,debug_params.first_cache); + + // //设置模组自检信息 + // set_modem_self_test_info(self_test_info); + + // //设置第一次获取数据标志 + // debug_params.first_cache=false; + + // //显示全功能界面 + // all_function_view(); + // } + // ); - //显示全功能界面 - all_function_view(); - } - ); } // 定时触发更新AT串口 @@ -689,6 +900,19 @@ font-size: 15px; } */ + /* 隐藏tab菜单 */ + .cbi-tabmenu { + display: none; + } + /* 隐藏tab内容 */ + #tab_context { + display: none; + } + /* 隐藏AT命令标题 */ + #at_command_title { + display: none; + } + /* 终端 */ textarea { background:#373737; @@ -750,59 +974,19 @@ + + - - - - - - - - - - -