генератор фронта завершен

This commit is contained in:
2025-01-14 17:42:38 +03:00
parent 25a3b11ba8
commit 5a94f9a4fd
7 changed files with 310 additions and 269 deletions

View File

@@ -98,6 +98,22 @@
}
]
}
],
"network": [
{"widget": "h2", "label": "Настройки сети"},
{
"widget": "settings-container",
"childs": [
{"widget": "h3", "label": "Настройки интерфейса управления"},
{"widget": "ip-address", "label": "Интерфейс управления (/24)", "name": "netManagementIp"},
{
"widget": "select", "label": "Режим сети", "name": "netIsL2",
"values": [{"label": "Маршрутизатор", "value": "false"}, {"label": "Коммутатор", "value": "true"}]
},
{"widget": "ip-address", "label": "Интерфейс данных (/24)", "name": "netDataIp", "v_show": "paramNetwork.netIsL2 === false"},
{"widget": "number", "label": "MTU интерфейса данных", "name": "netDataMtu", "min": 1500, "step": 1, "max": 2000}
]
}
]
},
"tabs": [
@@ -108,6 +124,10 @@
},
"scpc": {
"modem_name": "RCSM-101",
"dangerousParamGroups": {
"buclnb": "Применение неправильных настроек может вывести из строя оборудование! Продолжить?",
"network": "Применение этих настроек может сделать модем недоступным! Продолжить?"
},
"params": {
"rxtx": [
{"widget": "h2", "label": "Настройки приема/передачи"},
@@ -144,6 +164,10 @@
"widget": "select", "label": "Roll-off", "name": "txRolloff",
"values": [{"label": "0.02", "value": "2"}, {"label": "0.05", "value": "5"}, {"label": "0.10", "value": "10"}, {"label": "0.15", "value": "15"}, {"label": "0.20", "value": "20"}, {"label": "0.25", "value": "25"}]
},
{
"widget": "select", "label": "Номер последовательности Голда", "name": "txGoldan",
"values": [{"label": "0", "value": "0"}, {"label": "1", "value": "1"}]
},
{"widget": "number", "label": "Ослабление, дБ", "name": "txAttenuation", "min": 0, "step": 1}
]
},
@@ -195,6 +219,10 @@
{
"widget": "select", "label": "Roll-off", "name": "rxRolloff",
"values": [{"label": "0.02", "value": "2"}, {"label": "0.05", "value": "5"}, {"label": "0.10", "value": "10"}, {"label": "0.15", "value": "15"}, {"label": "0.20", "value": "20"}, {"label": "0.25", "value": "25"}]
},
{
"widget": "select", "label": "Номер последовательности Голда", "name": "rxGoldan",
"values": [{"label": "0", "value": "0"}, {"label": "1", "value": "1"}]
}
]
}
@@ -213,8 +241,14 @@
{"label": "Окном задержки", "value": "false"}
]
},
{"widget": "number", "label": "Полоса поиска, КГц ±", "name": "cincSearchBandwidth", "min": 0, "step": 1, "max": 100}
]
{"widget": "number", "label": "Полоса поиска, КГц ±", "name": "cincSearchBandwidth", "min": 0, "step": 1, "max": 100},
{"widget": "h2", "label": "Настройки позиционирования", "v_show": "paramCinc.cincIsPositional === true"},
{"widget": "number", "label": "Широта станции", "name": "cincPositionStationLatitude", "v_show": "paramCinc.cincIsPositional === true", "min": -180, "step": 0.000001, "max": 180},
{"widget": "number", "label": "Долгота станции", "name": "cincPositionStationLongitude", "v_show": "paramCinc.cincIsPositional === true", "min": -180, "step": 0.000001, "max": 180},
{"widget": "number", "label": "Подспутниковая точка", "name": "cincPositionSatelliteLongitude", "v_show": "paramCinc.cincIsPositional === true", "min": -180, "step": 0.000001, "max": 180},
{"widget": "h2", "label": "Задержка до спутника", "v_show": "paramCinc.cincIsPositional === false"},
{"widget": "number", "label": "от, мс", "name": "cincDelayMin", "v_show": "paramCinc.cincIsPositional === false", "min": 0, "step": 0.1, "max": 400},
{"widget": "number", "label": "до, мс", "name": "cincDelayMax", "v_show": "paramCinc.cincIsPositional === false", "min": 0, "step": 0.1, "max": 400}]
},
{"widget": "submit", "v_show": "paramRxtx.isCinC"}
],
@@ -274,21 +308,29 @@
{"widget": "number", "label": "Максимальное количество соединений", "name": "accelMaxConnections", "min": 0, "step": 1, "max": 4000}
]
}
],
"network": [
{"widget": "h2", "label": "Настройки сети"},
{
"widget": "settings-container",
"childs": [
{"widget": "h3", "label": "Настройки интерфейса управления"},
{"widget": "ip-address", "label": "Интерфейс управления (/24)", "name": "netManagementIp"},
{
"widget": "select", "label": "Режим сети", "name": "netIsL2",
"values": [{"label": "Маршрутизатор", "value": "false"}, {"label": "Коммутатор", "value": "true"}]
},
{"widget": "ip-address", "label": "Интерфейс данных (/24)", "name": "netDataIp", "v_show": "paramNetwork.netIsL2 === false"},
{"widget": "number", "label": "MTU интерфейса данных", "name": "netDataMtu", "min": 1500, "step": 1, "max": 2000}
]
}
]
},
"tabs": [
{
"name": "monitoring",
"desc": "Мониторинг"
},
{
"name": "setup",
"desc": "Настройки"
},
{
"name": "qos",
"desc": "QoS"
}
{"name": "monitoring", "desc": "Мониторинг"},
{"name": "setup", "desc": "Настройки"},
{"name": "qos", "desc": "QoS"},
{"name": "admin", "desc": "Администрирование"}
]
}
}

View File

@@ -1,55 +1,3 @@
settingsSubmitNetwork() {
if (this.submitStatus.network) { return }
let query = {
"network.managementIp": this.param.network.managementIp,
"network.managementGateway": this.param.network.managementGateway,
"network.mode": this.param.network.mode,
"network.dataIp": this.param.network.dataIp,
"network.dataMtu": this.param.network.dataMtu
}
if (confirm('Вы уверены, что хотите сохранить настройки сети? После этого модем может стать недоступным.')) {
this.submitStatus.network = true
fetch('/api/set/network', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(query)
}).then(async (resp) => {
this.submitStatus.network = false
this.updateNetworkSettings(await resp.json())
}).catch((reason) => {
this.submitStatus.network = false
alert(`Ошибка при применении настроек: ${reason}`)
})
}
},
settingsSubmitDebugSend() {
if (this.submitStatus.debugSend) { return }
let query = {
"debugSend.en": this.param.debugSend.en,
"debugSend.receiverIp": this.param.debugSend.receiverIp,
"debugSend.portCinC": this.param.debugSend.portCinC,
"debugSend.portData": this.param.debugSend.portData,
"debugSend.timeout": this.param.debugSend.timeout
}
this.submitStatus.debugSend = true
fetch('/api/set/debugSend', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(query)
}).then(async (resp) => {
this.submitStatus.debugSend = false
this.updateNetworkSettings(await resp.json())
}).catch((reason) => {
this.submitStatus.debugSend = false
alert(`Ошибка при применении настроек: ${reason}`)
})
},
async settingsUploadUpdate() {
if (!this.uploadFw.filename) {
alert('Выберите файл для загрузки');
@@ -105,24 +53,6 @@
this.submitStatus.firmwareUpgrade = false
},
updateNetworkSettings(vals) {
this.submitStatus.network = false
this.param.network.managementIp = vals["settings"]["network.managementIp"]
this.param.network.managementGateway = vals["settings"]["network.managementGateway"]
this.param.network.mode = vals["settings"]["network.mode"]
this.param.network.dataIp = vals["settings"]["network.dataIp"]
this.param.network.dataMtu = vals["settings"]["network.dataMtu"]
},
updateDebugSendSettings(vals) {
this.submitStatus.debugSend = false
this.param.debugSend.en = vals["settings"]["debugSend.en"]
this.param.debugSend.receiverIp = vals["settings"]["debugSend.receiverIp"]
this.param.debugSend.portCinC = vals["settings"]["debugSend.portCinC"]
this.param.debugSend.portData = vals["settings"]["debugSend.portData"]
this.param.debugSend.timeout = vals["settings"]["debugSend.timeout"]
},
doModemReboot() {
if (this.submitStatus.modemReboot !== null) {
return

View File

@@ -1,63 +1,11 @@
{% raw %}
{% from 'common/widgets.j2' import build_widget %}
<div class="tabs-body-item" v-if="activeTab === 'admin' && settingFetchComplete">
<h2>Настройки сети</h2>
{% if 'network' in params %}
{% for w in params['network'] %}{{ build_widget('network', w) | indent(12, true) }}{% endfor %}
{% endif %}
{% raw %}
<h2>Система</h2>
<div class="settings-set-container">
<h3>Интерфейс управления</h3>
<label>
<span>IP адрес/маска</span>
<input v-model="param.network.managementIp" required type="text" pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$">
</label>
<label>
<span>Шлюз интерфейса управления</span>
<input v-model="param.network.managementGateway" type="text" pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$">
</label>
<label>
<span>Режим модема</span>
<select v-model="param.network.mode">
<option value="l2">Коммутатор</option>
<option value="l3">Маршрутизатор</option>
</select>
</label>
<h3>Интерфейс данных</h3>
<label v-if="param.network.mode === 'l3'">
<span>IP адрес/маска</span>
<input v-model="param.network.dataIp" required type="text" pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$">
</label>
<label>
<span>MTU</span>
<input v-model="param.network.dataMtu" required type="number" min="1500" max="9000">
</label>
<button class="action-button" @click="settingsSubmitNetwork()">Применить <span class="submit-spinner" v-show="submitStatus.network"></span></button>
</div>
<div class="settings-set-container">
<h3>Отладка</h3>
<label>
<span>Передача отладочной информации</span>
<span class="toggle-input">
<input type="checkbox" v-model="param.debugSend.en" />
<span class="slider"></span>
</span>
</label>
<label v-if="param.debugSend.en">
<span>IP адрес получателя</span>
<input v-model="param.debugSend.receiverIp" required type="text" pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}">
</label>
<label>
<span>Порт для данных</span>
<input v-model="param.debugSend.portCinC" type="number" min="0" max="65535">
</label>
<label>
<span>Порт для CinC</span>
<input v-model="param.debugSend.portData" type="number" min="0" max="65535">
</label>
<label>
<span>Таймаут</span>
<input v-model="param.debugSend.timeout" type="number" pattern="^[0-9]+$">
</label>
<button class="action-button" @click="settingsSubmitDebugSend()">Применить <span class="submit-spinner" v-show="submitStatus.network"></span></button>
</div>
<div class="settings-set-container">
<h3>Управление ПО</h3>
<table>
<tbody>
<tr><th>Версия ПО</th><td>{{ about.firmwareVersion }}</td></tr>
@@ -82,6 +30,5 @@
</label>
<button class="action-button" @click="settingsUploadUpdate()">Загрузить<span class="submit-spinner" v-show="submitStatus.firmwareUpload"></span></button>
<button class="dangerous-button" v-show="uploadFw.sha256 !== null" @click="settingsPerformFirmwareUpgrade()">Обновить встроенное ПО <span class="submit-spinner" v-show="submitStatus.firmwareUpgrade"></span></button>
</div>
</div>{% endraw %}
</div>
{% endraw %}

View File

@@ -40,6 +40,10 @@
{% for w in widget.childs %}{{ build_widget(param_group, w) | indent(4, true) }}{% endfor %}
</div>{% endmacro %}
{% macro build_widget_ip_address(param_group, widget) %}<label{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}>
<span>{{ widget.label }}</span>
<input v-model="param{{ param_group | title }}.{{ widget.name }}" required type="text" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$">
</label>{% endmacro %}
{% macro build_widget(param_group, widget) %}{% if widget.widget == 'flex-container' %}{{ build_widget_flex_container(param_group, widget) }}
{% elif widget.widget == 'settings-container' %}{{ build_widget_settings_container(param_group, widget) }}
@@ -52,6 +56,7 @@
{% elif widget.widget == 'select' %}{{ build_widget_select(param_group, widget) }}
{% elif widget.widget == 'modulation-modcod' %}{{ build_widget_modulation_modcod(param_group, widget) }}
{% elif widget.widget == 'modulation-speed' %}{{ build_widget_modulation_speed(param_group, widget) }}
{% elif widget.widget == 'ip-address' %}{{ build_widget_ip_address(param_group, widget) }}
{% else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p>
{% endif %}
{% endmacro %}