Compare commits

..

No commits in common. "4c1ce6031b4393304d06398b29720d1dab18539c" and "d1ad7baad12bbf64d517f15680aec3747d6684dd" have entirely different histories.

2 changed files with 66 additions and 133 deletions

View File

@ -136,21 +136,6 @@ summary .dangerous-button, summary .action-button {
background: var(--brand-bg); background: var(--brand-bg);
} }
.submit-spinner {
display: inline-block;
width: 1em;
height: 1em;
border: 3px solid #f3f3f3; /* Цвет границы */
border-radius: 50%; /* Делаем круг */
border-top-color: #3498db; /* Цвет верхней границы */
animation: spin 0.8s linear infinite; /* Анимация вращения */
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/*********************** Стили для красивых 'switch' ***********************/ /*********************** Стили для красивых 'switch' ***********************/
.toggle-input { .toggle-input {

View File

@ -73,7 +73,7 @@
<tr><th>DUMMY</th><td>{{ stat_rx.packetsDummy }}</td></tr> <tr><th>DUMMY</th><td>{{ stat_rx.packetsDummy }}</td></tr>
</tbody> </tbody>
</table> </table>
<button class="action-button" @click="resetPacketsStatistics()"> Сброс статистики </button> <button @click="resetPacketsStatistics()"> Сброс статистики </button>
</div> </div>
<div class="settings-set-container"> <div class="settings-set-container">
<h2>Статистика передачи</h2> <h2>Статистика передачи</h2>
@ -327,7 +327,7 @@
</label> </label>
</div> </div>
</div> </div>
<button class="action-button" @click="settingsSubmitRxTx()">Сохранить <span class="submit-spinner" v-show="submitStatus.rxTx"></span></button> <button>Сохранить</button>
<h2 v-show="param.general.isCinC">Настройки режима CinC</h2> <h2 v-show="param.general.isCinC">Настройки режима CinC</h2>
<div v-show="param.general.isCinC" class="settings-set-container"> <div v-show="param.general.isCinC" class="settings-set-container">
@ -363,7 +363,7 @@
<input v-model="param.cinc.delayMax" type="number"/> <input v-model="param.cinc.delayMax" type="number"/>
</label> </label>
</div> </div>
<button class="action-button" v-show="param.general.isCinC" @click="settingsSubmitCinC()" type="submit">Сохранить <span class="submit-spinner" v-show="submitStatus.cinc"></span></button> <button v-show="param.general.isCinC" type="submit">Сохранить</button>
<h2>Настройки питания и опорного генератора</h2> <h2>Настройки питания и опорного генератора</h2>
<div class="tabs-item-flex-container"> <div class="tabs-item-flex-container">
@ -422,7 +422,7 @@
</label> </label>
</div> </div>
</div> </div>
<button class="action-button" @click="settingsSubmitBucLnb()">Сохранить <span class="submit-spinner" v-show="submitStatus.bucLnb"></span></button> <button type="submit">Сохранить</button>
</div> </div>
<div class="tabs-body-item" v-if="activeTab === 'qos'"> <div class="tabs-body-item" v-if="activeTab === 'qos'">
<h2>Настройки QoS</h2> <h2>Настройки QoS</h2>
@ -432,18 +432,15 @@
<span class="toggle-input"><input type="checkbox" v-model="qos.en" /><span class="slider"></span></span> <span class="toggle-input"><input type="checkbox" v-model="qos.en" /><span class="slider"></span></span>
</label> </label>
</div> </div>
<template> <h3>Классы CD</h3>
<div v-for="classesGroup in ['rt1', 'rt2', 'rt3', 'cd']"> <button class="action-button" @click="qosAddClass('cd')">Добавить класс CD</button>
<h3>Классы {{ classesGroup.toUpperCase() }}</h3> <details v-for="(rule, index) in qos.cd" :key="index" class="settings-set-container">
<button class="action-button" @click="qosAddClass(classesGroup)">Добавить класс {{ classesGroup.toUpperCase() }}</button> <summary >#{{ index }} CIR={{ rule.cir }}кбит, PIR={{ rule.pir }}кбит {{ rule.description }}</summary>
<details v-for="(rule, index) in qos[classesGroup]" :key="index" class="settings-set-container">
<summary v-if="classesGroup === 'cd'">#{{ index }} CIR={{ rule.cir }}кбит, PIR={{ rule.pir }}кбит {{ rule.description }}</summary>
<summary v-if="classesGroup !== 'cd'">#{{ index }} CBR={{ rule.cir }}кбит {{ rule.description }}</summary>
<label> <label>
<span v-if="classesGroup === 'cd'">CIR</span> <span v-if="classesGroup !== 'cd'">CBR</span> <span>CIR</span>
<input v-model="rule.cir" type="number"/> <input v-model="rule.cir" type="number"/>
</label> </label>
<label v-if="classesGroup === 'cd'"> <label>
<span>PIR</span> <span>PIR</span>
<input v-model="rule.pir" type="number"/> <input v-model="rule.pir" type="number"/>
</label> </label>
@ -454,10 +451,10 @@
<h3>Фильтры ({{ rule.filters.length }})</h3> <h3>Фильтры ({{ rule.filters.length }})</h3>
<div> <div>
<button class="action-button" @click="qosClassAddRule(classesGroup, index)">Добавить правило</button> <button class="action-button" @click="qosClassAddRule('cd', index)">Добавить правило</button>
</div> </div>
<details v-for="(filter, filterIndex) in rule.filters" :key="filterIndex" class="settings-set-container"> <details v-for="(filter, filterIndex) in rule.filters" :key="filterIndex" class="settings-set-container">
<summary><span>#{{ filterIndex }} {{ qosGenerateRuleDescription(filter) }}</span> <button class="dangerous-button" @click="qosDelFilter(classesGroup, index, filterIndex)">Del</button></summary> <summary><span>#{{ filterIndex }} {{ qosGenerateRuleDescription(filter) }}</span> <button class="dangerous-button" @click="qosDelFilter('cd', index, filterIndex)">Del</button></summary>
<label> <label>
<span>VLAN ID</span> <span>VLAN ID</span>
<input v-model="filter.vlan" type="text"> <input v-model="filter.vlan" type="text">
@ -489,15 +486,10 @@
</details> </details>
<div> <div>
<button class="dangerous-button" @click="qosDelClass(classesGroup, index)">Удалить класс QoS</button> <button class="dangerous-button" @click="qosDelClass('cd', index)">Удалить класс QoS</button>
</div> </div>
</details> </details>
</div> <button class="action-button">Применить</button>
</template>
<button class="action-button" @click="settingsSubmitQoS()">Применить <span class="submit-spinner" v-show="submitStatus.qos"></span></button>
<p> <p>
Эти настройки пока недоступны, но скоро разработчик это поправит. А пока купи разработчику банку <strike>пива</strike> колы) Эти настройки пока недоступны, но скоро разработчик это поправит. А пока купи разработчику банку <strike>пива</strike> колы)
@ -626,14 +618,6 @@
data: { data: {
isCinC: null, isCinC: null,
// false - означает что статистика не отправляется, true - отправляется
submitStatus: {
rxTx: false,
cinc: false,
bucLnb: false,
qos: false,
},
stat_rx: { stat_rx: {
// индикаторы // индикаторы
state: '?', // общее состояние state: '?', // общее состояние
@ -751,7 +735,7 @@
qos: { qos: {
en: false, en: false,
rt1: [], rt1: [{cir: 100, description: 'test class'}, {cir: 200, description: 'fuck class'}],
rt2: [], rt2: [],
rt3: [], rt3: [],
cd: [], cd: [],
@ -837,47 +821,6 @@
}) })
}, },
settingsSubmitRxTx() {
this.submitStatus.rxTx = true
},
settingsSubmitCinC() {
this.submitStatus.cinc = true
},
settingsSubmitBucLnb() {
this.submitStatus.bucLnb = true
// TODO сделать всплывающее окно с подтверждением того, что настройки действительно нужно применить
let query = {
"buc.refClk10M": this.param.buc.refClk10M,
"buc.powering": this.param.buc.powering,
"lnb.refClk10M": this.param.lnb.refClk10M,
"lnb.powering": this.param.lnb.powering,
"serviceSettings.refClk10M": this.param.serviceSettings.refClk10M,
"serviceSettings.autoStart": this.param.serviceSettings.autoStart
}
fetch('/api/applyBucLnbSettings', {
method: 'POST',
body: JSON.stringify(query)
}).then(() => {
this.submitStatus.bucLnb = false
this.performUpdateSettings()
})
},
settingsSubmitQoS() {
this.submitStatus.qos = true
},
performUpdateSettings() {
const doFetchSettings = async () => {
let d = await fetch("/api/get/settings")
this.updateSettings(await d.json())
}
doFetchSettings().then(() => {})
},
updateSettings(vals) { updateSettings(vals) {
this.settingFetchComplete = true this.settingFetchComplete = true
@ -1041,7 +984,12 @@
doFetchStatistics().then(() => {}) doFetchStatistics().then(() => {})
this.performUpdateSettings() const doFetchSettings = async () => {
let d = await fetch("/api/get/settings")
this.updateSettings(await d.json())
}
doFetchSettings().then(() => {})
document.getElementById("app").removeAttribute("hidden") document.getElementById("app").removeAttribute("hidden")
} }