From f7a578141f40cbdb77955bf67f172b4a18279cd4 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <67171972+IoTManagerProject@users.noreply.github.com> Date: Sun, 11 Jun 2023 17:01:57 +0200 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.svelte | 172 ++++++++++++++++++++-------------------- src/pages/Config.svelte | 2 +- src/pages/List.svelte | 67 +++++++++++++--- 3 files changed, 142 insertions(+), 99 deletions(-) diff --git a/src/App.svelte b/src/App.svelte index f5311ef..b357b16 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -6,6 +6,8 @@ +43 67761588253 */ + //6+49 кб 09/06/2023 + //******************************************************import section*********************************************************/ //*****************************************************************************************************************************/ import { onMount } from "svelte"; @@ -41,7 +43,7 @@ let opened = false; let preventMove = false; const blobDebug = false; - const devMode = true; + const devMode = false; let timeout = reconnectTimeout / 1000; let percent; @@ -58,7 +60,6 @@ let showDropdown = true; let rebootingUpdatingInProgress = false; - let myTimeout = undefined; //dashboard let pages = []; @@ -73,8 +74,6 @@ dev: false, }; - let systemReady = false; - //update esp let versionsList = {}; let choosingVersion = undefined; @@ -116,8 +115,6 @@ paramsJson: false, }; - let chartJsonFlag = {}; - let layoutJsonFlag = {}; //=============================================== //web sockets @@ -125,46 +122,42 @@ let socketConnected = false; let selectedDeviceData = undefined; let selectedWs = 0; + let originalWs = 0; - let firstTime = true; let newDevice = {}; let coreMessages = []; - let timeOut; - - let parcedEvent = 0; - //***********************************************************navigation********************************************************/ let currentPageName = undefined; - //var chartJsonBlobArray = []; - //let chartTopic = ""; - //var chartJsonBlob = new MyBlobBuilder(); - //var layoutJsonBlobArray = []; - router.subscribe(handleNavigation); function handleNavigation() { currentPageName = $router.path.toString(); + currentPageName = currentPageName + "|"; + + console.log("[i]", "user on page:", currentPageName); //не нужно очищать переменные когда переходим на страницу разработчика - if (currentPageName != "/dev") { + if (currentPageName != "/dev|") { clearData(); } - currentPageName = currentPageName + "|"; - console.log("[i]", "user on page:", currentPageName); - - if (currentPageName === "/list|") { - showDropdown = false; - } else { - showDropdown = true; - } - + //если мы на странице dashboard то рассылаем всем устройствам запрос данных if (currentPageName === "/|") { sendToAllDevices(currentPageName); + showDropdown = false; + //в остальных случаях шлем только выбранному устройству запрос данных } else { - sendCurrentPageName(); + //если мы перешли на страницу списка устройств то всегда запрашиваем список только этого устройства + if (currentPageName === "/list|") { + showDropdown = false; + selectedWs = 0; + wsSendMsg(selectedWs, currentPageName); + } else { + sendCurrentPageName(); + showDropdown = true; + } } } @@ -177,7 +170,7 @@ //*******************************************************initialisation********************************************************************/ onMount(async () => { console.log("[i]", "mounted"); - whenDeviceListWasUpdated(); + selectedDeviceDataRefresh(); //флаг первого запроса списка устройств firstDevListRequest = true; //вначале подключимся к известному нам ip этого устройства @@ -251,7 +244,7 @@ } } }); - whenDeviceListWasUpdated(); + selectedDeviceDataRefresh(); deviceList = deviceList; } @@ -259,16 +252,6 @@ layoutJson = layoutJson.filter((item) => item.ws !== ws); } - function getDeviceStatus(ws) { - let ret = false; - deviceList.forEach((device) => { - if (ws === device.ws) { - ret = device.status; - } - }); - return ret; - } - function wsConnect(ws) { let ip = getIP(ws); if (ip === "error") { @@ -431,7 +414,7 @@ incDeviceList = out.json; parsed.incDeviceList = true; if (blobDebug) console.log("[✔]", "incDeviceList: ", incDeviceList); - handleDeviseList(); + initDevList(); } else { parsed.incDeviceList = false; if (blobDebug) console.log("[e]", "incDeviceList parse error"); @@ -568,8 +551,6 @@ async function onParced() { if (currentPageName === "/|") { - //clearParcedFlags(); - //if (debug) console.log("✔", "dashboard data received"); pageReady.dash = true; } @@ -604,25 +585,50 @@ } } - function handleDeviseList() { + function initDevList() { + //при первом запросе листа устройств запишем его целеком if (firstDevListRequest) { - deviceList = incDeviceList; - deviceList[0].status = true; + devListOverride(); } else { //при последующих прилетах списка устройств мы переписываем в массиве только то что изменилось - deviceList = combineArrays(deviceList, incDeviceList); + devListCombine(); } - firstDevListRequest = false; deviceList = deviceList; parsed.deviceListJson = true; if (blobDebug) console.log("[✔]", "deviceList parced"); onParced(); - whenDeviceListWasUpdated(); - console.log("[✔]", deviceList); + selectedDeviceDataRefresh(); //затем подключимся к всему полученному списку устройств connectToAllDevices(); } + //перезапись листа устройств + function devListOverride() { + deviceList = incDeviceList; + sortList(deviceList); + //if (deviceList.length >= 1) deviceList[0].status = true; + console.log("[i]", "[devlist]", "devlist overrided"); + } + //добавление только новых элементов в лист устройств (если такого ip не было) + function devListCombine() { + deviceList = combineArrays(deviceList, incDeviceList); + sortList(deviceList); + console.log("[i]", "[devlist]", "devlist combined"); + } + + function sortList(list) { + let firstDev = list.shift(); + list.sort(function (a, b) { + if (a.name < b.name) { + return -1; + } + if (a.name > b.name) { + return 1; + } + return 0; + }); + list.unshift(firstDev); + } //***********************************************************dashboard***************************************************************/ @@ -835,8 +841,6 @@ let widget = Object.assign({}, widgetsJson[w]); widget.page = config.page; widget.descr = config.descr; - //widget.id = config.id; - //widget.ws = selectedWs; widget.topic = settingsJson.root + "/" + config.id; if (setWidget !== "nil") layout.push(widget); @@ -876,8 +880,6 @@ return layout; } - function layoutOrderForMobileApp() {} - function clearData() { itemsJson = []; widgetsJson = []; @@ -889,15 +891,7 @@ layoutJson = []; paramsJson = {}; //? - //deviceList = [ - // { - // name: "--", - // id: "--", - // ip: myip, - // ws: 0, - // status: false, - // }, - //]; + //incDeviceList = []; for (const [key, value] of Object.entries(pageReady)) { pageReady[key] = false; @@ -939,7 +933,7 @@ setTimeout(wsTestMsgTask, 1000); timeout--; percent = scale(timeout, reconnectTimeout / 1000, 0, 0, 100); - + if (timeout <= 0) { timeout = reconnectTimeout / 1000; //if (!rebootingUpdatingInProgress) { @@ -1013,19 +1007,26 @@ return output; } - function whenDeviceListWasUpdated() { + //всякий раз когда список устройств был обновлен + function selectedDeviceDataRefresh() { + //запишем в переменную selectedDeviceData выбранное устройство, что бы в коде было известно выбранное устройство getSelectedDeviceData(selectedWs); socketConnected = selectedDeviceData.status; } function devicesDropdownChange() { - whenDeviceListWasUpdated(); - clearData(); - handleNavigation(); - //sendCurrentPageName(); - if (debug) console.log("[i]", "user selected device:", selectedDeviceData.name); - if (selectedDeviceData.ip === myip) { - if (debug) console.log("[i]", "user selected original device", selectedDeviceData.name); + if (currentPageName === "/list|") { + console.log("[i]", "user change dropdown on list page!!!"); + } else { + selectedDeviceDataRefresh(); + clearData(); + //запускаем навигацию что дать контроллеру запрос данных + handleNavigation(); + if (debug) console.log("[i]", "user selected device:", selectedDeviceData.name); + if (selectedDeviceData.ip === myip) { + originalWs = selectedWs; + if (debug) console.log("[i]", "user selected original device", selectedDeviceData.name); + } } } @@ -1041,18 +1042,20 @@ } function addDevInList() { - //createDefaultDevice(); if (!showInput) { if (newDevice.name !== undefined && newDevice.ip !== undefined && newDevice.id !== undefined) { newDevice.status = false; - deviceList.push(newDevice); - deviceList = deviceList; - newDevice = {}; - whenDeviceListWasUpdated(); + newDevice.ws = deviceList.length; + incDeviceList.push(newDevice); + devListCombine(); + //onParced(); + //selectedDeviceDataRefresh(); connectToAllDevices(); if (debug) console.log("[i]", "selected device:", selectedDeviceData); + return true; } else { if (debug) console.log("[e]", "wrong data"); + return false; } } } @@ -1217,11 +1220,11 @@ function rebootingTask() { //перезапуск приложения - location.reload(); - //clearTimeout(myTimeout); - //clearData(); - //connectToAllDevices(); - //rebootingUpdatingInProgress = false; + //location.reload(); + clearTimeout(myTimeout); + clearData(); + connectToAllDevices(); + rebootingUpdatingInProgress = false; } function cancelAlarm(alarmKey) { @@ -1308,11 +1311,6 @@ console.log(json); wsSendMsg(selectedWs, "/order|" + JSON.stringify(json)); } - - function test() { - //wsSendMsg(selectedWs, "/test|"); - //console.log("[i]", "test"); - }
@@ -1389,7 +1387,7 @@ rebootEsp()} ssidClick={() => ssidClick()} saveSett={() => saveSett()} saveMqtt={() => saveMqtt()} settingsJson={settingsJson} errorsJson={errorsJson} ssidJson={ssidJson} /> - saveSett()} rebootEsp={() => rebootEsp()} showInput={showInput} addDevInList={() => addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} saveList={() => saveList()} percent={percent} /> + saveSett()} rebootEsp={() => rebootEsp()} showInput={showInput} addDevInList={() => addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} saveList={() => saveList()} percent={percent} devListOverride={() => devListOverride()} /> saveSett()} rebootEsp={() => rebootEsp()} cleanLogs={() => cleanLogs()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} versionsList={versionsList} bind:choosingVersion={choosingVersion} startUpdate={() => startUpdate()} coreMessages={coreMessages} /> diff --git a/src/pages/Config.svelte b/src/pages/Config.svelte index 73555a9..14f2a2d 100644 --- a/src/pages/Config.svelte +++ b/src/pages/Config.svelte @@ -290,7 +290,7 @@
diff --git a/src/pages/List.svelte b/src/pages/List.svelte index d5ee2e5..6ad6e8b 100644 --- a/src/pages/List.svelte +++ b/src/pages/List.svelte @@ -16,8 +16,6 @@ export let addDevInList = () => {}; export let saveList = () => {}; export let saveSett = () => {}; - export let rebootEsp = () => {}; - export let sendToAllDevices = (msg) => {}; let debug = true; @@ -32,6 +30,49 @@ } } } + + function onModeChange() { + show = false; + saveSett(); + location.reload(); + } + + function onSaveList() { + //если ручной режим + if (!settingsJson.udps) { + //если открыли поля для заполнения + if (showInput) { + //если поля были заполнены + if (addDevInList()) { + show = false; + saveList(); + showInput = false; + //window.alert("Устройство было добавленно"); + setTimeout(() => { + location.reload(); + }, 1000); + } else { + showInput = false; + } + //если не открыли поля для заполнения + } else { + show = false; + saveList(); + //window.alert("Список устройств сохранен на ESP"); + setTimeout(() => { + location.reload(); + }, 1000); + } + //если авторежим + } else { + saveList(); + window.alert("Список устройств сохранен в память ESP. Перейдите в ручной режим для использования сохраненного списка"); + show = false; + setTimeout(() => { + location.reload(); + }, 1000); + } + } {#if show} @@ -41,6 +82,7 @@ + @@ -52,11 +94,13 @@ {#each deviceList as device, i} + + {#if i > 0} {/if} @@ -64,9 +108,10 @@ {/each} {#if showInput} - - - + + + {/if} @@ -74,15 +119,15 @@
Название устройства IP адрес Идентификатор
{device.ws + 1} {device.name} {device.ip} {device.id} {device.status ? "online" : "offline"} {device.ping ? device.ping : "-"} deleteLineFromDevlist(i)} />
+
-
+
- {#if !settingsJson.udps} - + {#if !settingsJson.udps && !showInput} + {/if} - - + +
@@ -94,7 +139,7 @@