mirror of
https://github.com/IoTManagerProject/IoTManagerWeb.git
synced 2026-03-30 11:59:21 +03:00
список устройств
This commit is contained in:
158
src/App.svelte
158
src/App.svelte
@@ -6,6 +6,8 @@
|
|||||||
+43 67761588253
|
+43 67761588253
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//6+49 кб 09/06/2023
|
||||||
|
|
||||||
//******************************************************import section*********************************************************/
|
//******************************************************import section*********************************************************/
|
||||||
//*****************************************************************************************************************************/
|
//*****************************************************************************************************************************/
|
||||||
import { onMount } from "svelte";
|
import { onMount } from "svelte";
|
||||||
@@ -41,7 +43,7 @@
|
|||||||
let opened = false;
|
let opened = false;
|
||||||
let preventMove = false;
|
let preventMove = false;
|
||||||
const blobDebug = false;
|
const blobDebug = false;
|
||||||
const devMode = true;
|
const devMode = false;
|
||||||
|
|
||||||
let timeout = reconnectTimeout / 1000;
|
let timeout = reconnectTimeout / 1000;
|
||||||
let percent;
|
let percent;
|
||||||
@@ -58,7 +60,6 @@
|
|||||||
let showDropdown = true;
|
let showDropdown = true;
|
||||||
|
|
||||||
let rebootingUpdatingInProgress = false;
|
let rebootingUpdatingInProgress = false;
|
||||||
let myTimeout = undefined;
|
|
||||||
|
|
||||||
//dashboard
|
//dashboard
|
||||||
let pages = [];
|
let pages = [];
|
||||||
@@ -73,8 +74,6 @@
|
|||||||
dev: false,
|
dev: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let systemReady = false;
|
|
||||||
|
|
||||||
//update esp
|
//update esp
|
||||||
let versionsList = {};
|
let versionsList = {};
|
||||||
let choosingVersion = undefined;
|
let choosingVersion = undefined;
|
||||||
@@ -116,8 +115,6 @@
|
|||||||
paramsJson: false,
|
paramsJson: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let chartJsonFlag = {};
|
|
||||||
let layoutJsonFlag = {};
|
|
||||||
//===============================================
|
//===============================================
|
||||||
|
|
||||||
//web sockets
|
//web sockets
|
||||||
@@ -125,46 +122,42 @@
|
|||||||
let socketConnected = false;
|
let socketConnected = false;
|
||||||
let selectedDeviceData = undefined;
|
let selectedDeviceData = undefined;
|
||||||
let selectedWs = 0;
|
let selectedWs = 0;
|
||||||
|
let originalWs = 0;
|
||||||
|
|
||||||
let firstTime = true;
|
|
||||||
let newDevice = {};
|
let newDevice = {};
|
||||||
let coreMessages = [];
|
let coreMessages = [];
|
||||||
|
|
||||||
let timeOut;
|
|
||||||
|
|
||||||
let parcedEvent = 0;
|
|
||||||
|
|
||||||
//***********************************************************navigation********************************************************/
|
//***********************************************************navigation********************************************************/
|
||||||
let currentPageName = undefined;
|
let currentPageName = undefined;
|
||||||
|
|
||||||
//var chartJsonBlobArray = [];
|
|
||||||
//let chartTopic = "";
|
|
||||||
//var chartJsonBlob = new MyBlobBuilder();
|
|
||||||
//var layoutJsonBlobArray = [];
|
|
||||||
|
|
||||||
router.subscribe(handleNavigation);
|
router.subscribe(handleNavigation);
|
||||||
|
|
||||||
function handleNavigation() {
|
function handleNavigation() {
|
||||||
currentPageName = $router.path.toString();
|
currentPageName = $router.path.toString();
|
||||||
|
currentPageName = currentPageName + "|";
|
||||||
|
|
||||||
|
console.log("[i]", "user on page:", currentPageName);
|
||||||
|
|
||||||
//не нужно очищать переменные когда переходим на страницу разработчика
|
//не нужно очищать переменные когда переходим на страницу разработчика
|
||||||
if (currentPageName != "/dev") {
|
if (currentPageName != "/dev|") {
|
||||||
clearData();
|
clearData();
|
||||||
}
|
}
|
||||||
|
|
||||||
currentPageName = currentPageName + "|";
|
//если мы на странице dashboard то рассылаем всем устройствам запрос данных
|
||||||
console.log("[i]", "user on page:", currentPageName);
|
|
||||||
|
|
||||||
if (currentPageName === "/list|") {
|
|
||||||
showDropdown = false;
|
|
||||||
} else {
|
|
||||||
showDropdown = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentPageName === "/|") {
|
if (currentPageName === "/|") {
|
||||||
sendToAllDevices(currentPageName);
|
sendToAllDevices(currentPageName);
|
||||||
|
showDropdown = false;
|
||||||
|
//в остальных случаях шлем только выбранному устройству запрос данных
|
||||||
|
} else {
|
||||||
|
//если мы перешли на страницу списка устройств то всегда запрашиваем список только этого устройства
|
||||||
|
if (currentPageName === "/list|") {
|
||||||
|
showDropdown = false;
|
||||||
|
selectedWs = 0;
|
||||||
|
wsSendMsg(selectedWs, currentPageName);
|
||||||
} else {
|
} else {
|
||||||
sendCurrentPageName();
|
sendCurrentPageName();
|
||||||
|
showDropdown = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +170,7 @@
|
|||||||
//*******************************************************initialisation********************************************************************/
|
//*******************************************************initialisation********************************************************************/
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
console.log("[i]", "mounted");
|
console.log("[i]", "mounted");
|
||||||
whenDeviceListWasUpdated();
|
selectedDeviceDataRefresh();
|
||||||
//флаг первого запроса списка устройств
|
//флаг первого запроса списка устройств
|
||||||
firstDevListRequest = true;
|
firstDevListRequest = true;
|
||||||
//вначале подключимся к известному нам ip этого устройства
|
//вначале подключимся к известному нам ip этого устройства
|
||||||
@@ -251,7 +244,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
whenDeviceListWasUpdated();
|
selectedDeviceDataRefresh();
|
||||||
deviceList = deviceList;
|
deviceList = deviceList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,16 +252,6 @@
|
|||||||
layoutJson = layoutJson.filter((item) => item.ws !== ws);
|
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) {
|
function wsConnect(ws) {
|
||||||
let ip = getIP(ws);
|
let ip = getIP(ws);
|
||||||
if (ip === "error") {
|
if (ip === "error") {
|
||||||
@@ -431,7 +414,7 @@
|
|||||||
incDeviceList = out.json;
|
incDeviceList = out.json;
|
||||||
parsed.incDeviceList = true;
|
parsed.incDeviceList = true;
|
||||||
if (blobDebug) console.log("[✔]", "incDeviceList: ", incDeviceList);
|
if (blobDebug) console.log("[✔]", "incDeviceList: ", incDeviceList);
|
||||||
handleDeviseList();
|
initDevList();
|
||||||
} else {
|
} else {
|
||||||
parsed.incDeviceList = false;
|
parsed.incDeviceList = false;
|
||||||
if (blobDebug) console.log("[e]", "incDeviceList parse error");
|
if (blobDebug) console.log("[e]", "incDeviceList parse error");
|
||||||
@@ -568,8 +551,6 @@
|
|||||||
|
|
||||||
async function onParced() {
|
async function onParced() {
|
||||||
if (currentPageName === "/|") {
|
if (currentPageName === "/|") {
|
||||||
//clearParcedFlags();
|
|
||||||
//if (debug) console.log("✔", "dashboard data received");
|
|
||||||
pageReady.dash = true;
|
pageReady.dash = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -604,25 +585,50 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleDeviseList() {
|
function initDevList() {
|
||||||
|
//при первом запросе листа устройств запишем его целеком
|
||||||
if (firstDevListRequest) {
|
if (firstDevListRequest) {
|
||||||
deviceList = incDeviceList;
|
devListOverride();
|
||||||
deviceList[0].status = true;
|
|
||||||
} else {
|
} else {
|
||||||
//при последующих прилетах списка устройств мы переписываем в массиве только то что изменилось
|
//при последующих прилетах списка устройств мы переписываем в массиве только то что изменилось
|
||||||
deviceList = combineArrays(deviceList, incDeviceList);
|
devListCombine();
|
||||||
}
|
}
|
||||||
|
|
||||||
firstDevListRequest = false;
|
firstDevListRequest = false;
|
||||||
deviceList = deviceList;
|
deviceList = deviceList;
|
||||||
parsed.deviceListJson = true;
|
parsed.deviceListJson = true;
|
||||||
if (blobDebug) console.log("[✔]", "deviceList parced");
|
if (blobDebug) console.log("[✔]", "deviceList parced");
|
||||||
onParced();
|
onParced();
|
||||||
whenDeviceListWasUpdated();
|
selectedDeviceDataRefresh();
|
||||||
console.log("[✔]", deviceList);
|
|
||||||
//затем подключимся к всему полученному списку устройств
|
//затем подключимся к всему полученному списку устройств
|
||||||
connectToAllDevices();
|
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***************************************************************/
|
//***********************************************************dashboard***************************************************************/
|
||||||
|
|
||||||
@@ -835,8 +841,6 @@
|
|||||||
let widget = Object.assign({}, widgetsJson[w]);
|
let widget = Object.assign({}, widgetsJson[w]);
|
||||||
widget.page = config.page;
|
widget.page = config.page;
|
||||||
widget.descr = config.descr;
|
widget.descr = config.descr;
|
||||||
//widget.id = config.id;
|
|
||||||
//widget.ws = selectedWs;
|
|
||||||
|
|
||||||
widget.topic = settingsJson.root + "/" + config.id;
|
widget.topic = settingsJson.root + "/" + config.id;
|
||||||
if (setWidget !== "nil") layout.push(widget);
|
if (setWidget !== "nil") layout.push(widget);
|
||||||
@@ -876,8 +880,6 @@
|
|||||||
return layout;
|
return layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
function layoutOrderForMobileApp() {}
|
|
||||||
|
|
||||||
function clearData() {
|
function clearData() {
|
||||||
itemsJson = [];
|
itemsJson = [];
|
||||||
widgetsJson = [];
|
widgetsJson = [];
|
||||||
@@ -889,15 +891,7 @@
|
|||||||
layoutJson = [];
|
layoutJson = [];
|
||||||
paramsJson = {}; //?
|
paramsJson = {}; //?
|
||||||
|
|
||||||
//deviceList = [
|
//incDeviceList = [];
|
||||||
// {
|
|
||||||
// name: "--",
|
|
||||||
// id: "--",
|
|
||||||
// ip: myip,
|
|
||||||
// ws: 0,
|
|
||||||
// status: false,
|
|
||||||
// },
|
|
||||||
//];
|
|
||||||
|
|
||||||
for (const [key, value] of Object.entries(pageReady)) {
|
for (const [key, value] of Object.entries(pageReady)) {
|
||||||
pageReady[key] = false;
|
pageReady[key] = false;
|
||||||
@@ -1013,21 +1007,28 @@
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function whenDeviceListWasUpdated() {
|
//всякий раз когда список устройств был обновлен
|
||||||
|
function selectedDeviceDataRefresh() {
|
||||||
|
//запишем в переменную selectedDeviceData выбранное устройство, что бы в коде было известно выбранное устройство
|
||||||
getSelectedDeviceData(selectedWs);
|
getSelectedDeviceData(selectedWs);
|
||||||
socketConnected = selectedDeviceData.status;
|
socketConnected = selectedDeviceData.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
function devicesDropdownChange() {
|
function devicesDropdownChange() {
|
||||||
whenDeviceListWasUpdated();
|
if (currentPageName === "/list|") {
|
||||||
|
console.log("[i]", "user change dropdown on list page!!!");
|
||||||
|
} else {
|
||||||
|
selectedDeviceDataRefresh();
|
||||||
clearData();
|
clearData();
|
||||||
|
//запускаем навигацию что дать контроллеру запрос данных
|
||||||
handleNavigation();
|
handleNavigation();
|
||||||
//sendCurrentPageName();
|
|
||||||
if (debug) console.log("[i]", "user selected device:", selectedDeviceData.name);
|
if (debug) console.log("[i]", "user selected device:", selectedDeviceData.name);
|
||||||
if (selectedDeviceData.ip === myip) {
|
if (selectedDeviceData.ip === myip) {
|
||||||
|
originalWs = selectedWs;
|
||||||
if (debug) console.log("[i]", "user selected original device", selectedDeviceData.name);
|
if (debug) console.log("[i]", "user selected original device", selectedDeviceData.name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//функция которая записывает в переменную данные выбранного юзером устройства
|
//функция которая записывает в переменную данные выбранного юзером устройства
|
||||||
function getSelectedDeviceData(ws) {
|
function getSelectedDeviceData(ws) {
|
||||||
@@ -1041,18 +1042,20 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addDevInList() {
|
function addDevInList() {
|
||||||
//createDefaultDevice();
|
|
||||||
if (!showInput) {
|
if (!showInput) {
|
||||||
if (newDevice.name !== undefined && newDevice.ip !== undefined && newDevice.id !== undefined) {
|
if (newDevice.name !== undefined && newDevice.ip !== undefined && newDevice.id !== undefined) {
|
||||||
newDevice.status = false;
|
newDevice.status = false;
|
||||||
deviceList.push(newDevice);
|
newDevice.ws = deviceList.length;
|
||||||
deviceList = deviceList;
|
incDeviceList.push(newDevice);
|
||||||
newDevice = {};
|
devListCombine();
|
||||||
whenDeviceListWasUpdated();
|
//onParced();
|
||||||
|
//selectedDeviceDataRefresh();
|
||||||
connectToAllDevices();
|
connectToAllDevices();
|
||||||
if (debug) console.log("[i]", "selected device:", selectedDeviceData);
|
if (debug) console.log("[i]", "selected device:", selectedDeviceData);
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (debug) console.log("[e]", "wrong data");
|
if (debug) console.log("[e]", "wrong data");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1217,11 +1220,11 @@
|
|||||||
|
|
||||||
function rebootingTask() {
|
function rebootingTask() {
|
||||||
//перезапуск приложения
|
//перезапуск приложения
|
||||||
location.reload();
|
//location.reload();
|
||||||
//clearTimeout(myTimeout);
|
clearTimeout(myTimeout);
|
||||||
//clearData();
|
clearData();
|
||||||
//connectToAllDevices();
|
connectToAllDevices();
|
||||||
//rebootingUpdatingInProgress = false;
|
rebootingUpdatingInProgress = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function cancelAlarm(alarmKey) {
|
function cancelAlarm(alarmKey) {
|
||||||
@@ -1308,11 +1311,6 @@
|
|||||||
console.log(json);
|
console.log(json);
|
||||||
wsSendMsg(selectedWs, "/order|" + JSON.stringify(json));
|
wsSendMsg(selectedWs, "/order|" + JSON.stringify(json));
|
||||||
}
|
}
|
||||||
|
|
||||||
function test() {
|
|
||||||
//wsSendMsg(selectedWs, "/test|");
|
|
||||||
//console.log("[i]", "test");
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex flex-col h-screen bg-gray-50">
|
<div class="flex flex-col h-screen bg-gray-50">
|
||||||
@@ -1389,7 +1387,7 @@
|
|||||||
<ConnectionPage show={pageReady.connection} rebootEsp={() => rebootEsp()} ssidClick={() => ssidClick()} saveSett={() => saveSett()} saveMqtt={() => saveMqtt()} settingsJson={settingsJson} errorsJson={errorsJson} ssidJson={ssidJson} />
|
<ConnectionPage show={pageReady.connection} rebootEsp={() => rebootEsp()} ssidClick={() => ssidClick()} saveSett={() => saveSett()} saveMqtt={() => saveMqtt()} settingsJson={settingsJson} errorsJson={errorsJson} ssidJson={ssidJson} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/list">
|
<Route path="/list">
|
||||||
<ListPage show={pageReady.list} deviceList={deviceList} settingsJson={settingsJson} saveSett={() => saveSett()} rebootEsp={() => rebootEsp()} showInput={showInput} addDevInList={() => addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} saveList={() => saveList()} percent={percent} />
|
<ListPage show={pageReady.list} deviceList={deviceList} settingsJson={settingsJson} saveSett={() => saveSett()} rebootEsp={() => rebootEsp()} showInput={showInput} addDevInList={() => addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} saveList={() => saveList()} percent={percent} devListOverride={() => devListOverride()} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/system">
|
<Route path="/system">
|
||||||
<SystemPage show={pageReady.system} errorsJson={errorsJson} settingsJson={settingsJson} saveSett={() => saveSett()} rebootEsp={() => rebootEsp()} cleanLogs={() => cleanLogs()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} versionsList={versionsList} bind:choosingVersion={choosingVersion} startUpdate={() => startUpdate()} coreMessages={coreMessages} />
|
<SystemPage show={pageReady.system} errorsJson={errorsJson} settingsJson={settingsJson} saveSett={() => saveSett()} rebootEsp={() => rebootEsp()} cleanLogs={() => cleanLogs()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} versionsList={versionsList} bind:choosingVersion={choosingVersion} startUpdate={() => startUpdate()} coreMessages={coreMessages} />
|
||||||
|
|||||||
@@ -290,7 +290,7 @@
|
|||||||
<button class="btn-lg" on:click={() => rebootEsp()}>{"Перезагрузить устройство"}</button>
|
<button class="btn-lg" on:click={() => rebootEsp()}>{"Перезагрузить устройство"}</button>
|
||||||
<button class="btn-lg" on:click={() => createExportFile()}>{"Экспорт конфигурации"}</button>
|
<button class="btn-lg" on:click={() => createExportFile()}>{"Экспорт конфигурации"}</button>
|
||||||
<label on:click={() => reset()} class="btn-lg cursor-pointer select-none">
|
<label on:click={() => reset()} class="btn-lg cursor-pointer select-none">
|
||||||
<input bind:files accept="application/JSON" type="file" id="formFile" />
|
<input bind:files={files} accept="application/JSON" type="file" id="formFile" />
|
||||||
{"Импорт конфигурации"}
|
{"Импорт конфигурации"}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,8 +16,6 @@
|
|||||||
export let addDevInList = () => {};
|
export let addDevInList = () => {};
|
||||||
export let saveList = () => {};
|
export let saveList = () => {};
|
||||||
export let saveSett = () => {};
|
export let saveSett = () => {};
|
||||||
export let rebootEsp = () => {};
|
|
||||||
|
|
||||||
export let sendToAllDevices = (msg) => {};
|
export let sendToAllDevices = (msg) => {};
|
||||||
|
|
||||||
let debug = true;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if show}
|
{#if show}
|
||||||
@@ -41,6 +82,7 @@
|
|||||||
<table class="tbl mb-0">
|
<table class="tbl mb-0">
|
||||||
<thead class="bg-gray-100">
|
<thead class="bg-gray-100">
|
||||||
<tr class="txt-sz txt-pad">
|
<tr class="txt-sz txt-pad">
|
||||||
|
<th class="tbl-hd w-7">№</th>
|
||||||
<th class="tbl-hd">Название устройства</th>
|
<th class="tbl-hd">Название устройства</th>
|
||||||
<th class="tbl-hd">IP адрес</th>
|
<th class="tbl-hd">IP адрес</th>
|
||||||
<th class="tbl-hd">Идентификатор</th>
|
<th class="tbl-hd">Идентификатор</th>
|
||||||
@@ -52,11 +94,13 @@
|
|||||||
<tbody class="bg-white">
|
<tbody class="bg-white">
|
||||||
{#each deviceList as device, i}
|
{#each deviceList as device, i}
|
||||||
<tr class="txt-sz txt-pad">
|
<tr class="txt-sz txt-pad">
|
||||||
|
<td class="tbl-bdy-lg ipt-lg w-full">{device.ws + 1}</td>
|
||||||
<td class="tbl-bdy-lg ipt-lg w-full">{device.name}</td>
|
<td class="tbl-bdy-lg ipt-lg w-full">{device.name}</td>
|
||||||
<td class="tbl-bdy-lg ipt-lg w-full"><a href={"http://" + device.ip}>{device.ip}</a></td>
|
<td class="tbl-bdy-lg ipt-lg w-full"><a href={"http://" + device.ip}>{device.ip}</a></td>
|
||||||
<td class="tbl-bdy-lg ipt-lg w-full">{device.id}</td>
|
<td class="tbl-bdy-lg ipt-lg w-full">{device.id}</td>
|
||||||
<td class="tbl-bdy-lg ipt-lg w-full {device.status ? 'bg-green-50' : 'bg-red-50'}">{device.status ? "online" : "offline"}</td>
|
<td class="tbl-bdy-lg ipt-lg w-full {device.status ? 'bg-green-50' : 'bg-red-50'}">{device.status ? "online" : "offline"}</td>
|
||||||
<td class="tbl-bdy-lg ipt-lg w-full">{device.ping ? device.ping : "-"}</td>
|
<td class="tbl-bdy-lg ipt-lg w-full">{device.ping ? device.ping : "-"}</td>
|
||||||
|
|
||||||
{#if i > 0}
|
{#if i > 0}
|
||||||
<td class="tbl-bdy-lg"><CrossIcon click={() => deleteLineFromDevlist(i)} /></td>
|
<td class="tbl-bdy-lg"><CrossIcon click={() => deleteLineFromDevlist(i)} /></td>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -64,9 +108,10 @@
|
|||||||
{/each}
|
{/each}
|
||||||
{#if showInput}
|
{#if showInput}
|
||||||
<tr class="txt-sz txt-pad">
|
<tr class="txt-sz txt-pad">
|
||||||
<td class="tbl-bdy-lg"><input bind:value={newDevice.name} class="ipt-lg w-full" type="text" /></td>
|
<td class="tbl-bdy-lg" />
|
||||||
<td class="tbl-bdy-lg"><input bind:value={newDevice.ip} class="ipt-lg w-full" type="text" /></td>
|
<td class="tbl-bdy-lg"><input bind:value={newDevice.name} class="ipt-lg w-full m-0" type="text" /></td>
|
||||||
<td class="tbl-bdy-lg"><input bind:value={newDevice.id} class="ipt-lg w-full" type="text" /></td>
|
<td class="tbl-bdy-lg"><input bind:value={newDevice.ip} class="ipt-lg w-full m-0" type="text" /></td>
|
||||||
|
<td class="tbl-bdy-lg"><input bind:value={newDevice.id} class="ipt-lg w-full m-0" type="text" /></td>
|
||||||
<td class="tbl-bdy-lg" />
|
<td class="tbl-bdy-lg" />
|
||||||
</tr>
|
</tr>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -74,15 +119,15 @@
|
|||||||
</table>
|
</table>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<div class="w-full bg-gray-200 rounded-full h-0.5 dark:bg-gray-700">
|
<div class="w-full bg-gray-200 rounded-full h-0.5 dark:bg-gray-700">
|
||||||
<div class="bg-green-200 h-0.5 rounded-full" style="width: {percent}%" />
|
<div class="bg-green-300 h-0.5 rounded-full" style="width: {percent}%" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class={settingsJson.udps ? "grd-2col1" : "grd-3col1"}>
|
<div class={settingsJson.udps ? "grd-2col1" : "grd-3col1"}>
|
||||||
{#if !settingsJson.udps}
|
{#if !settingsJson.udps && !showInput}
|
||||||
<button class="btn-lg" on:click={() => ((showInput = !showInput), addDevInList())}>{showInput ? "Добавить" : "Добавить устройство"}</button>
|
<button class="btn-lg" on:click={() => (showInput = !showInput)}>{"Добавить устройство"}</button>
|
||||||
{/if}
|
{/if}
|
||||||
<button class="btn-lg" on:click={() => saveList()}>{"Сохранить список"}</button>
|
<button class="btn-lg" on:click={() => onSaveList()}>{"Сохранить"}</button>
|
||||||
<button class="btn-lg" on:click={(msg) => sendToAllDevices("/reboot|")}>{"Перезагрузить все устройства"}</button>
|
<button class="btn-lg" on:click={(msg) => (sendToAllDevices("/reboot|"), window.alert("Все устройства будут перезагружены"))}>{"Перезагрузить все устройства"}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--Dev list mode-->
|
<!--Dev list mode-->
|
||||||
@@ -94,7 +139,7 @@
|
|||||||
<div class="flex justify-end w-1/4">
|
<div class="flex justify-end w-1/4">
|
||||||
<label for="udps" class="items-center cursor-pointer">
|
<label for="udps" class="items-center cursor-pointer">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<input bind:checked={settingsJson.udps} on:change={() => (window.alert("Для данного действия необходима перезагрузка"), saveSett(), rebootEsp())} id="udps" type="checkbox" class="sr-only" />
|
<input bind:checked={settingsJson.udps} on:change={() => onModeChange()} id="udps" type="checkbox" class="sr-only" />
|
||||||
<div class="block {settingsJson.udps ? 'bg-blue-600' : 'bg-gray-600'} w-10 h-6 rounded-full shadow-lg" />
|
<div class="block {settingsJson.udps ? 'bg-blue-600' : 'bg-gray-600'} w-10 h-6 rounded-full shadow-lg" />
|
||||||
<div class="dot bg-gray-100 absolute left-1 top-1 w-4 h-4 rounded-full transition shadow-lg" />
|
<div class="dot bg-gray-100 absolute left-1 top-1 w-4 h-4 rounded-full transition shadow-lg" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user