import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import "../components" Item { id: page property var status: ({ state: "idle" }) function stateText(s) { switch (s) { case "staging": return "Распаковка пакета…" case "switching": return "Переключение версии…" case "health_check": return "Проверка работоспособности…" case "success": return "Обновление успешно применено" case "rolledback": return "Запуск новой версии не удался — выполнен откат" case "rollback_done": return "Откат выполнен" case "error": return "Ошибка обновления" default: return "Готово к обновлению" } } function reload() { status = systemInfo.updateStatus() systemInfo.refresh() } Component.onCompleted: reload() Timer { interval: 2500 running: true repeat: true onTriggered: page.reload() } ColumnLayout { anchors.fill: parent anchors.margins: 8 spacing: 12 RowLayout { Layout.fillWidth: true Button { text: "\u2190 Назад"; onClicked: page.StackView.view.pop() } Label { Layout.fillWidth: true text: "Обновление ПО" font.bold: true font.pixelSize: 16 color: settingsContainer.darkMode ? "white" : "black" horizontalAlignment: Text.AlignHCenter } Button { text: "\u21BB"; onClicked: page.reload() } } Text { Layout.fillWidth: true text: "Текущая версия: " + systemInfo.currentVersion color: settingsContainer.darkMode ? "white" : "black" font.pixelSize: 14 } Rectangle { Layout.fillWidth: true Layout.preferredHeight: stTxt.implicitHeight + 20 radius: 6 color: settingsContainer.darkMode ? "#40222c58" : "#40ffffff" border.color: settingsContainer.darkMode ? "#80ffffff" : "#80000000" border.width: 1 Text { id: stTxt anchors.fill: parent anchors.margins: 10 text: "Статус: " + page.stateText(page.status.state) + (page.status.message ? "\n" + page.status.message : "") color: settingsContainer.darkMode ? "white" : "black" wrapMode: Text.Wrap } } Text { Layout.fillWidth: true text: "Загрузка нового пакета ПО выполняется через веб-конфигуратор. После применения выполняется проверка запуска; при ошибке произойдёт автоматический откат на предыдущую версию." color: settingsContainer.darkMode ? "#cccccc" : "#444444" font.pixelSize: 12 wrapMode: Text.Wrap } Item { Layout.fillHeight: true } } }