куча мелких изменений в вебе
This commit is contained in:
parent
4a293e10f6
commit
fae7a2ffc8
@ -162,7 +162,7 @@ public:
|
||||
}));
|
||||
s.resources.emplace_back(std::make_unique<http::resource::GenericResource>("/logout", [this](const auto& req, auto& rep) {
|
||||
if (req.method == "GET") {
|
||||
http::server::httpRedirect(rep, "/");
|
||||
http::server::httpRedirect(rep, "/login");
|
||||
rep.headers.push_back({.name = "Set-Cookie", .value = http::auth::jwt::EMPTY_AUTH_COOKIE});
|
||||
} else {
|
||||
http::server::stockReply(http::server::bad_request, rep);
|
||||
|
@ -25,17 +25,12 @@ static void loadFile(const std::string& path, std::vector<char>& content) {
|
||||
http::resource::BasicResource::BasicResource(std::string path): path(std::move(path)) {}
|
||||
|
||||
http::resource::StaticFileFactory::StaticFileDef::StaticFileDef(std::string path, server::mime_types::Mime type, bool allowCache): path(std::move(path)), type(type), allowCache(allowCache) {
|
||||
#ifdef USE_DEBUG
|
||||
if (allowCache) {
|
||||
BOOST_LOG_TRIVIAL(info) << "Load static file " << this->path;
|
||||
loadFile(this->path, this->content);
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(info) << "Skip loading static file " << this->path;
|
||||
}
|
||||
#else
|
||||
BOOST_LOG_TRIVIAL(info) << "Load static file " << this->path;
|
||||
loadFile(this->path, this->content);
|
||||
#endif
|
||||
}
|
||||
http::resource::StaticFileFactory::StaticFileDef::~StaticFileDef() = default;
|
||||
|
||||
@ -48,7 +43,6 @@ void http::resource::StaticFileFactory::registerFile(const std::string &path, se
|
||||
void http::resource::StaticFileFactory::serve(const std::string &path, server::Reply &rep) {
|
||||
for (auto& f: this->files) {
|
||||
if (f.path == path) {
|
||||
#ifdef USE_DEBUG
|
||||
if (f.allowCache) {
|
||||
rep.content.clear();
|
||||
rep.content.insert(rep.content.end(), f.content.begin(), f.content.end());
|
||||
@ -56,10 +50,6 @@ void http::resource::StaticFileFactory::serve(const std::string &path, server::R
|
||||
BOOST_LOG_TRIVIAL(debug) << "Reload file " << path << " (http path: " << path << ")";
|
||||
loadFile(f.path, rep.content);
|
||||
}
|
||||
#else
|
||||
rep.content.clear();
|
||||
rep.content.insert(rep.content.end(), f.content.begin(), f.content.end());
|
||||
#endif
|
||||
rep.status = server::ok;
|
||||
// rep.headers.clear();
|
||||
rep.headers.push_back({.name = "Content-Type", .value = server::mime_types::toString(f.type)});
|
||||
|
@ -166,8 +166,6 @@ void api_driver::ApiDriver::resetPacketStatistics() const {
|
||||
}
|
||||
|
||||
std::string api_driver::ApiDriver::loadSettings() const {
|
||||
// constexpr auto* UNKNOWN = "\"?\"";
|
||||
|
||||
modulator_settings modSettings{};
|
||||
CP_GetModulatorSettings(sid, modSettings);
|
||||
uint32_t modulatorModcod;
|
||||
|
@ -52,12 +52,15 @@
|
||||
}
|
||||
|
||||
.tabs-item-flex-container > *, .settings-set-container {
|
||||
padding: 1em;
|
||||
margin: 1em;
|
||||
border: 1px solid var(--text-color2);
|
||||
border-radius: 0.2em;
|
||||
}
|
||||
|
||||
.settings-set-container {
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.tabs-item-flex-container th {
|
||||
text-align: left;
|
||||
padding-right: 1em;
|
||||
@ -69,29 +72,39 @@
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
form label * {
|
||||
.settings-set-container > h3 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.settings-set-container label * {
|
||||
display: block;
|
||||
}
|
||||
form label {
|
||||
.settings-set-container label {
|
||||
margin: 1em 0;
|
||||
display: block;
|
||||
background: var(--bg-selected);
|
||||
/*background: var(--bg-selected);*/
|
||||
color: var(--text-color2);
|
||||
}
|
||||
form input {
|
||||
.settings-set-container input, .settings-set-container select {
|
||||
margin-top: 0.5em;
|
||||
border: none;
|
||||
border-bottom: solid 2px var(--text-color);
|
||||
width: 100%;
|
||||
width: 20em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
form input:focus {
|
||||
.settings-set-container input:focus {
|
||||
outline: none;
|
||||
border: none;
|
||||
border-bottom: solid 2px var(--brand-text);
|
||||
}
|
||||
|
||||
/* костыль для браузеров, которые некорректно стилизуют элементы option */
|
||||
select * {
|
||||
background: var(--bg-selected);
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
/*********************** Стили для красивых 'switch' ***********************/
|
||||
|
||||
.toggle-input {
|
||||
|
167
static/main.html
167
static/main.html
@ -26,7 +26,7 @@
|
||||
<a href="/logout" class="tabs-btn">Выход</a>
|
||||
</div>
|
||||
<div :class="{ value_bad: initState !== 'Успешная инициализация системы' }">{{ initState }}</div>
|
||||
<div class="tabs-body">
|
||||
<div id="content">
|
||||
<div class="tabs-body-item tabs-item-flex-container" v-show="activeTab === 'monitoring'">
|
||||
<div>
|
||||
<h2>Статистика приема</h2>
|
||||
@ -98,7 +98,7 @@
|
||||
</div>
|
||||
<div class="tabs-body-item" v-show="activeTab === 'setup' && settingFetchComplete">
|
||||
<h2>Настройки приема/передачи</h2>
|
||||
<form class="settings-set-container">
|
||||
<div class="settings-set-container">
|
||||
<label>
|
||||
<span>Режим работы</span>
|
||||
<select v-model="param.general.isCinC">
|
||||
@ -106,10 +106,10 @@
|
||||
<option value="true">CinC</option>
|
||||
</select>
|
||||
</label>
|
||||
</form>
|
||||
<form class="tabs-item-flex-container">
|
||||
<div>
|
||||
<h2>Настройки передатчика</h2>
|
||||
</div>
|
||||
<div class="tabs-item-flex-container">
|
||||
<div class="settings-set-container">
|
||||
<h3>Настройки передатчика</h3>
|
||||
<label>
|
||||
<span>Включить передатчик</span>
|
||||
<span class="toggle-input">
|
||||
@ -139,8 +139,8 @@
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<h2>Параметры передачи</h2>
|
||||
<div class="settings-set-container">
|
||||
<h3>Параметры передачи</h3>
|
||||
<label>
|
||||
<span>Центральная частота, КГц</span>
|
||||
<input v-model="param.tx.centerFreq"/>
|
||||
@ -165,8 +165,8 @@
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<h2>Режим работы DVB-S2</h2>
|
||||
<div class="settings-set-container">
|
||||
<h3>Режим работы DVB-S2</h3>
|
||||
<label>
|
||||
<span>Режим</span>
|
||||
<select v-model="param.dvbs2.mode">
|
||||
@ -241,8 +241,8 @@
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<h2>Настройки авто-регулировки мощности</h2>
|
||||
<div class="settings-set-container">
|
||||
<h3>Авто-регулировка мощности</h3>
|
||||
<label>
|
||||
<span>Авто-регулировка мощности</span>
|
||||
<span class="toggle-input">
|
||||
@ -263,8 +263,8 @@
|
||||
<input v-model="param.acm.requiredSnr"/>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<h2>Настройка приемника</h2>
|
||||
<div class="settings-set-container">
|
||||
<h3>Настройка приемника</h3>
|
||||
<label>
|
||||
<span>Режим управления усилением</span>
|
||||
<select v-model="param.rx.gainMode">
|
||||
@ -306,11 +306,11 @@
|
||||
<input v-model="param.rx.attenuation"/>
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<button>Сохранить</button>
|
||||
|
||||
<h2 v-show="param.general.isCinC">Настройки режима CinC</h2>
|
||||
<form v-show="param.general.isCinC" class="settings-set-container">
|
||||
<div v-show="param.general.isCinC" class="settings-set-container">
|
||||
<label>
|
||||
<span>Метод расчета задержки</span>
|
||||
<select v-model="param.cinc.mode">
|
||||
@ -342,12 +342,12 @@
|
||||
<span>до, мс</span>
|
||||
<input v-model="param.cinc.delayMax"/>
|
||||
</label>
|
||||
</form>
|
||||
</div>
|
||||
<button v-show="param.general.isCinC" type="submit">Сохранить</button>
|
||||
|
||||
<h2>Настройки питания и опорного генератора</h2>
|
||||
<div class="tabs-item-flex-container">
|
||||
<form>
|
||||
<div class="settings-set-container">
|
||||
<h3>Настройки BUC</h3>
|
||||
<label>
|
||||
<span>Подача опоры 10МГц</span>
|
||||
@ -364,9 +364,8 @@
|
||||
<option value="48">48В</option>
|
||||
</select>
|
||||
</label>
|
||||
</form>
|
||||
|
||||
<form>
|
||||
</div>
|
||||
<div class="settings-set-container">
|
||||
<h3>Настройки LNB</h3>
|
||||
<label>
|
||||
<span>Подача опоры 10МГц</span>
|
||||
@ -384,9 +383,8 @@
|
||||
<option value="24">24В</option>
|
||||
</select>
|
||||
</label>
|
||||
</form>
|
||||
|
||||
<form>
|
||||
</div>
|
||||
<div class="settings-set-container">
|
||||
<h3>Сервисные настройки</h3>
|
||||
<label>
|
||||
<span>Подача опоры 10МГц на 'Выход 10МГц'</span>
|
||||
@ -402,18 +400,83 @@
|
||||
<span class="slider"></span>
|
||||
</span>
|
||||
</label>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit">Сохранить</button>
|
||||
</div>
|
||||
<div class="tabs-body-item" v-show="activeTab === 'qos'">
|
||||
<h2>Настройки QoS</h2>
|
||||
<div class="settings-set-container">
|
||||
<label>
|
||||
<span>Активировать QoS</span>
|
||||
<span class="toggle-input"><input type="checkbox" v-model="qos.en" /><span class="slider"></span></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<h3>Классы CD</h3>
|
||||
<button @click="qosAddClass('cd')">Добавить класс CD</button>
|
||||
<details v-for="(rule, index) in qos.cd" :key="index" class="settings-set-container">
|
||||
<summary >#{{ index }} CIR={{ rule.cir }}кбит, PIR={{ rule.pir }}кбит {{ rule.description }}</summary>
|
||||
<label>
|
||||
<span>CIR</span>
|
||||
<input v-model="rule.cir" type="number"/>
|
||||
</label>
|
||||
<label>
|
||||
<span>PIR</span>
|
||||
<input v-model="rule.pir" type="number"/>
|
||||
</label>
|
||||
<label>
|
||||
<span>Описание</span>
|
||||
<input v-model="rule.description"/>
|
||||
</label>
|
||||
|
||||
<h3>Фильтры ({{ rule.filters.length }})</h3>
|
||||
<button @click="qosClassAddRule('cd', index)">Добавить правило</button>
|
||||
<details v-for="filter in rule.filters" class="settings-set-container">
|
||||
<!-- :key="filterIndex"-->
|
||||
<!-- <summary>Правило #{{ filterIndex }}</summary>-->
|
||||
<label>
|
||||
<span>vlan</span>
|
||||
<input v-model="filter.vlan" type="text">
|
||||
</label>
|
||||
<label>
|
||||
<span>proto</span>
|
||||
<input v-model="filter.proto" type="text">
|
||||
</label>
|
||||
<label>
|
||||
<span>sport</span>
|
||||
<input v-model="filter.sport" type="text">
|
||||
</label>
|
||||
<label>
|
||||
<span>dport</span>
|
||||
<input v-model="filter.dport" type="text">
|
||||
</label>
|
||||
<label>
|
||||
<span>ip_src</span>
|
||||
<input v-model="filter.ip_src" type="text">
|
||||
</label>
|
||||
<label>
|
||||
<span>ip_dest</span>
|
||||
<input v-model="filter.ip_dest" type="text">
|
||||
</label>
|
||||
<label>
|
||||
<span>dscp</span>
|
||||
<input v-model="filter.dscp" type="text">
|
||||
</label>
|
||||
|
||||
</details>
|
||||
|
||||
<button @click="qosDelClass('cd', index)">Del</button>
|
||||
</details>
|
||||
|
||||
<button>Применить</button>
|
||||
|
||||
<p>
|
||||
Эти настройки пока недоступны, но скоро разработчик это поправит. А пока купи разработчику банку <strike>пива</strike> колы)
|
||||
</p>
|
||||
<video preload="auto" controls style="max-width: 100%">
|
||||
<source src="/vid/video_2024-11-06_15-49-35.mp4" type="video/mp4" />
|
||||
</video>
|
||||
|
||||
</div>
|
||||
<div class="tabs-body-item" v-show="activeTab === 'admin'">
|
||||
<p>
|
||||
@ -639,7 +702,15 @@
|
||||
},
|
||||
},
|
||||
|
||||
testState: '?',
|
||||
qos: {
|
||||
en: false,
|
||||
rt1: [{cir: 100, description: 'test class'}],
|
||||
rt2: [],
|
||||
rt3: [],
|
||||
cd: [],
|
||||
},
|
||||
|
||||
testState: false,
|
||||
initState: '',
|
||||
lastUpdateTime: new Date(),
|
||||
activeTab: getCurrentTab(),
|
||||
@ -776,6 +847,48 @@
|
||||
this.param.lnb.powering = vals["settings"]["lnb.powering"]
|
||||
this.param.serviceSettings.refClk10M = vals["settings"]["serviceSettings.refClk10M"]
|
||||
this.param.serviceSettings.autoStart = vals["settings"]["serviceSettings.autoStart"]
|
||||
},
|
||||
|
||||
// addQosClass()
|
||||
qosAddClass(name) {
|
||||
let res = {
|
||||
cir: 0,
|
||||
pir: 0,
|
||||
filters: []
|
||||
}
|
||||
switch (name) {
|
||||
case 'rt1': this.qos.rt1.push(res); break
|
||||
case 'rt2': this.qos.rt2.push(res); break
|
||||
case 'rt3': this.qos.rt3.push(res); break
|
||||
case 'cd': this.qos.cd.push(res); break
|
||||
}
|
||||
},
|
||||
|
||||
qosClassAddRule(name, index) {
|
||||
let rule = {
|
||||
vlan: "",
|
||||
proto: "tcp",
|
||||
sport: "22,80,448",
|
||||
dport: "5000-6000",
|
||||
ip_src: "192.168.0.0/24",
|
||||
ip_dest: "192.168.0.0/24,172.16.0.0/16,95.127.91.34",
|
||||
dscp: ""
|
||||
}
|
||||
switch (name) {
|
||||
case 'rt1': this.qos.rt1[index].filters.push(rule); break
|
||||
case 'rt2': this.qos.rt2[index].filters.push(rule); break
|
||||
case 'rt3': this.qos.rt3[index].filters.push(rule); break
|
||||
case 'cd': this.qos.cd[index].filters.push(rule); break
|
||||
}
|
||||
},
|
||||
|
||||
qosDelClass(name, index) {
|
||||
switch (name) {
|
||||
case 'rt1': this.qos.rt1.splice(index, 1); break
|
||||
case 'rt2': this.qos.rt2.splice(index, 1); break
|
||||
case 'rt3': this.qos.rt3.splice(index, 1); break
|
||||
case 'cd': this.qos.cd.splice(index, 1); break
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user