summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitalii Lysak <v.lysak@dunice.net>2022-09-19 17:02:28 +0300
committerVitalii Lysak <v.lysak@dunice.net>2022-09-19 17:02:28 +0300
commit30f4e9777b157fe7023a9cf02c7d53737d2e2974 (patch)
tree975f963652021cec858f1c08b3a589432562b770
parent8a20e665fe0242d8fe075766a7fcfb46b820d12b (diff)
downloadwebui-vue-30f4e9777b157fe7023a9cf02c7d53737d2e2974.tar.xz
upd syslog and smtp
-rw-r--r--src/assets/styles/bmc/_sila/_modal.scss2
-rw-r--r--src/locales/en-US.json2
-rw-r--r--src/locales/ru-RU.json18
-rw-r--r--src/store/index.js2
-rw-r--r--src/store/modules/Settings/SmtpStore.js74
-rw-r--r--src/store/modules/Settings/SyslogStore.js36
-rw-r--r--src/views/_sila/Settings/TransferInfo/ModalSmtp.vue98
-rw-r--r--src/views/_sila/Settings/TransferInfo/Smtp.vue174
-rw-r--r--src/views/_sila/Settings/TransferInfo/Snmp.vue3
-rw-r--r--src/views/_sila/Settings/TransferInfo/Syslog.vue150
-rw-r--r--src/views/_sila/Settings/TransferInfo/Transfer.vue19
11 files changed, 508 insertions, 70 deletions
diff --git a/src/assets/styles/bmc/_sila/_modal.scss b/src/assets/styles/bmc/_sila/_modal.scss
index c4428cdc..42352b94 100644
--- a/src/assets/styles/bmc/_sila/_modal.scss
+++ b/src/assets/styles/bmc/_sila/_modal.scss
@@ -65,6 +65,8 @@
}
}
+#modal-smtp,
+#modal-snmp,
#modal-dns,
#modal-hostname,
#modal-mac-address,
diff --git a/src/locales/en-US.json b/src/locales/en-US.json
index cf9f6df4..a44ad5ad 100644
--- a/src/locales/en-US.json
+++ b/src/locales/en-US.json
@@ -1146,7 +1146,7 @@
},
"pageTransfer": {
"title": "Setting up information transfer",
- "description": "Set up SMTP and SNMP",
+ "description": "Set up SNMP, SMTP and SYSLOG",
"saveSmtpSuсcess": "Save SMTP successfully.",
"saveSmtpError": "Save SMTP error.",
"smtp": {
diff --git a/src/locales/ru-RU.json b/src/locales/ru-RU.json
index 90cb6c64..8efbe859 100644
--- a/src/locales/ru-RU.json
+++ b/src/locales/ru-RU.json
@@ -1146,18 +1146,24 @@
},
"pageTransfer": {
"title": "Настройка передачи информации",
- "description": "Настройте SMTP и SNMP",
+ "description": "Настройте SNMP, SMTP и SYSLOG",
"saveSmtpSuсcess": "Настройки SMTP успешно сохранены.",
"saveSmtpError": "Ошибка сохранения настроек SMTP.",
"smtp": {
"smtpTitle": "Настройки SMTP",
"username": "Имя пользователя",
"password": "Пароль",
+ "email": "Email",
"host": "SMTP сервер",
"port": "SMTP порт",
"authorization": "Авторизация",
"sslEnabled": "Поддержка SSL",
- "testMessage": "Тестовое сообщение"
+ "testMessage": "Тестовое сообщение",
+ "saveSubscriberSuсcess": "Подписчик успешно добавлен",
+ "deleteSubscriberSuсcess": "Подписчик успешно удален",
+ "saveSubscriberError": "Ошибка добавления подписчика",
+ "deleteSubscriberError": "Ошибка удаления подписчика",
+ "delSubscriber": "Удалить подписчика"
},
"snmp": {
"snmpTitle": "Настройки SNMP",
@@ -1169,6 +1175,14 @@
"deleteSubscriberError": "Ошибка удаления подписчика",
"delSubscriber": "Удалить подписчика"
},
+ "syslog": {
+ "title": "Настройки SYSLOG",
+ "ip": "IP-адрес syslog сервера",
+ "port": "Syslog - порт",
+ "saveSettingsSuсcess": "Настройки успешно сохранены",
+ "saveSettingsError": "Ошибка сохранения настроек",
+ "status": "Статус"
+ },
"table": {
"userName": "Имя пользователя",
"value": "Значение"
diff --git a/src/store/index.js b/src/store/index.js
index a30f71e2..a9afa310 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -32,6 +32,7 @@ import KeyClearStore from './modules/Operations/KeyClearStore';
import PciStore from './modules/HardwareStatus/PciStore';
import SmtpStore from './modules/Settings/SmtpStore';
import SnmpStore from './modules/Settings/SnmpStore';
+import SyslogStore from './modules/Settings/SyslogStore';
import WebSocketPlugin from './plugins/WebSocketPlugin';
import DateTimeStore from './modules/Settings/DateTimeStore';
@@ -77,6 +78,7 @@ export default new Vuex.Store({
pciStore: PciStore,
smtpStore: SmtpStore,
snmpStore: SnmpStore,
+ syslogStore: SyslogStore,
},
plugins: [WebSocketPlugin],
});
diff --git a/src/store/modules/Settings/SmtpStore.js b/src/store/modules/Settings/SmtpStore.js
index 88fad25c..195f245a 100644
--- a/src/store/modules/Settings/SmtpStore.js
+++ b/src/store/modules/Settings/SmtpStore.js
@@ -3,22 +3,72 @@ import i18n from '@/i18n';
const SmtpStore = {
namespaced: true,
- state: { smtp: {} },
- getters: { smtpSettings: (state) => state.smtp },
+ state: {
+ settings: {},
+ subscribers: [],
+ },
+ getters: {
+ settings: (state) => state.settings,
+ subscribers: (state) => state.subscribers,
+ },
mutations: {
- saveSmtpSettings: (state, data) => (state.smtp = data),
+ saveSettings: (state, data) => (state.settings = data),
+ setSubscribers: (state, data) => (state.subscribers = data),
},
actions: {
- async setSmtpSettings({ commit }, payload) {
- let url = `/redfish/v1/Smtp/ChangeParameters`;
+ async deleteSubscriber({ dispatch }, email) {
+ return await api
+ .get(`/redfish/v1/Smtp/DeleteMails&${email}`)
+ .then(async () => {
+ await dispatch('getSubscribers');
+ return i18n.t('pageTransfer.smtp.deleteSubscriberSuсcess');
+ })
+ .catch((error) => {
+ console.log(error);
+ throw new Error(i18n.t('pageTransfer.smtp.deleteSubscriberError'));
+ });
+ },
+
+ async addSubscriber({ dispatch }, payload) {
+ return await api
+ .get(`/redfish/v1/Smtp/AddMails&${payload.email}`)
+ .then(async () => {
+ await dispatch('getSubscribers');
+ return i18n.t('pageTransfer.smtp.saveSubscriberSuсcess');
+ })
+ .catch((error) => {
+ console.log(error);
+ throw new Error(i18n.t('pageTransfer.smtp.saveSubscriberError'));
+ });
+ },
+
+ async getSubscribers({ commit }) {
+ return await api
+ .get('/redfish/v1/Smtp/GetMails')
+ .then(({ data: { mails = [] } = {} }) =>
+ mails.map((host) => {
+ return {
+ host,
+ };
+ })
+ )
+ .then((subscribers) => commit('setSubscribers', subscribers))
+ .catch((error) => {
+ console.log(error);
+ throw new Error(i18n.t('pageUserManagement.toast.errorLoadUsers'));
+ });
+ },
+
+ async setSettings({ dispatch }, payload) {
+ let url = `/redfish/v1/Smtp/SetSettings`;
for (let key in payload) {
url += `&${key}=${payload[key]}`;
}
return await api
.get(url)
- .then(() => {
- commit('saveSmtpSettings', payload);
+ .then(async () => {
+ await dispatch('getSettings');
return i18n.t('pageTransfer.saveSmtpSuсcess');
})
.catch((error) => {
@@ -26,6 +76,16 @@ const SmtpStore = {
throw new Error(i18n.t('pageTransfer.saveSmtpError'));
});
},
+
+ async getSettings({ commit }) {
+ return await api
+ .get('/redfish/v1/Smtp/GetSettings')
+ .then(({ data = {} }) => {
+ commit('saveSettings', data);
+ })
+ .catch((error) => console.log(error));
+ },
+
async sendTestMessage(_, payload) {
let url = `/redfish/v1/Smtp/SendMail`;
for (let key in payload) {
diff --git a/src/store/modules/Settings/SyslogStore.js b/src/store/modules/Settings/SyslogStore.js
new file mode 100644
index 00000000..f0b0eb59
--- /dev/null
+++ b/src/store/modules/Settings/SyslogStore.js
@@ -0,0 +1,36 @@
+import api from '@/store/api';
+import i18n from '@/i18n';
+
+const SyslogStore = {
+ namespaced: true,
+ state: { settings: {} },
+ getters: { settings: (state) => state.settings },
+ mutations: {
+ saveSettings: (state, data) => (state.settings = data),
+ },
+ actions: {
+ async saveSettings({ dispatch }, payload) {
+ return await api
+ .post('/redfish/v1/Syslog/Actions/Syslog.UpdateConfig', payload)
+ .then(async () => {
+ await dispatch('getSettings');
+ return i18n.t('pageTransfer.syslog.saveSettingsSuсcess');
+ })
+ .catch((error) => {
+ console.log(error);
+ throw new Error(i18n.t('pageTransfer.syslog.saveSettingsError'));
+ });
+ },
+
+ async getSettings({ commit }) {
+ return await api
+ .get('/redfish/v1/Syslog')
+ .then(({ data: { Configuration = {} } = {} }) => {
+ commit('saveSettings', Configuration);
+ })
+ .catch((error) => console.log(error));
+ },
+ },
+};
+
+export default SyslogStore;
diff --git a/src/views/_sila/Settings/TransferInfo/ModalSmtp.vue b/src/views/_sila/Settings/TransferInfo/ModalSmtp.vue
new file mode 100644
index 00000000..c3bdc493
--- /dev/null
+++ b/src/views/_sila/Settings/TransferInfo/ModalSmtp.vue
@@ -0,0 +1,98 @@
+<template>
+ <b-modal
+ id="modal-smtp"
+ ref="modal"
+ :title="$t('global.action.add')"
+ @hidden="resetForm"
+ >
+ <b-form id="form-smtp" @submit.prevent="handleSubmit">
+ <b-row>
+ <b-col sm="6">
+ <b-form-group
+ :label="$t('pageTransfer.smtp.email')"
+ label-for="smtpEmail"
+ >
+ <b-form-input
+ id="smtpEmail"
+ v-model="email"
+ type="text"
+ :state="getValidationState($v.email)"
+ data-test-id="smtp-input-email"
+ @input="$v.email.$touch()"
+ />
+ <b-form-invalid-feedback role="alert">
+ <template v-if="!$v.email.required">
+ {{ $t('global.form.fieldRequired') }}
+ </template>
+ <template v-if="!$v.email.email">
+ {{ $t('global.form.invalidFormat') }}
+ </template>
+ </b-form-invalid-feedback>
+ </b-form-group>
+ </b-col>
+ </b-row>
+ </b-form>
+ <template #modal-footer="{ cancel }">
+ <b-button variant="secondary" @click="cancel()">
+ {{ $t('global.action.cancel') }}
+ </b-button>
+ <b-button form="form-smtp" type="submit" variant="primary" @click="onOk">
+ {{ $t('global.action.add') }}
+ </b-button>
+ </template>
+ </b-modal>
+</template>
+
+<script>
+import VuelidateMixin from '@/components/_sila/Mixins/VuelidateMixin.js';
+import { email, required } from 'vuelidate/lib/validators';
+
+export default {
+ mixins: [VuelidateMixin],
+ data() {
+ return {
+ email: null,
+ };
+ },
+ validations() {
+ return {
+ email: {
+ required,
+ email,
+ },
+ };
+ },
+ methods: {
+ handleSubmit() {
+ this.$v.$touch();
+ if (this.$v.$invalid) return;
+
+ this.$emit('ok', {
+ email: this.email,
+ });
+ this.closeModal();
+ },
+ closeModal() {
+ this.$nextTick(() => {
+ this.$refs.modal.hide();
+ });
+ },
+ resetForm() {
+ this.email = null;
+ this.$v.$reset();
+ this.$emit('hidden');
+ },
+ onOk(bvModalEvt) {
+ // prevent modal close
+ bvModalEvt.preventDefault();
+ this.handleSubmit();
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.input-group-prepend + input {
+ padding-left: 70px !important;
+}
+</style>
diff --git a/src/views/_sila/Settings/TransferInfo/Smtp.vue b/src/views/_sila/Settings/TransferInfo/Smtp.vue
index 338eeda7..34d171de 100644
--- a/src/views/_sila/Settings/TransferInfo/Smtp.vue
+++ b/src/views/_sila/Settings/TransferInfo/Smtp.vue
@@ -8,30 +8,31 @@
}}</label>
<b-form-checkbox
id="authenticationSwitch"
- v-model="form.auth"
+ v-model="form.is_need_auth"
data-test-id="checkbox-authorization"
switch
- :disabled="isNotAdmin"
+ :disabled="loading || isNotAdmin"
>
- <span v-if="form.auth">
+ <span v-if="form.is_need_auth">
{{ $t('global.status.enabled') }}
</span>
<span v-else>{{ $t('global.status.disabled') }}</span>
</b-form-checkbox>
</div>
</b-col>
- <b-col xs="12" sm="12">
+ <b-col xs="12" sm="6">
<b-form-group
:label="$t('pageTransfer.smtp.username')"
label-for="smtp-name"
>
<b-form-input
id="smtp-name"
- v-model="form.user"
- :disabled="isNotAdmin || !form.auth"
+ v-model="form.username"
+ type="text"
+ :disabled="loading || isNotAdmin || !form.is_need_auth"
/> </b-form-group
></b-col>
- <b-col xs="12" sm="12">
+ <b-col xs="12" sm="6">
<b-form-group
:label="$t('pageTransfer.smtp.password')"
label-for="smtp-password"
@@ -41,12 +42,12 @@
id="smtp-password"
v-model="form.password"
type="password"
- :disabled="isNotAdmin || !form.auth"
+ :disabled="loading || isNotAdmin || !form.is_need_auth"
/>
</input-password-toggle>
</b-form-group>
</b-col>
- <b-col xs="12" sm="12">
+ <b-col xs="12" sm="6">
<b-form-group
:label="$t('pageTransfer.smtp.host')"
label-for="smtp-host"
@@ -54,11 +55,11 @@
<b-form-input
id="smtp-host"
v-model="form.host"
- :disabled="isNotAdmin"
+ :disabled="loading || isNotAdmin"
/>
</b-form-group>
</b-col>
- <b-col xs="12" sm="12">
+ <b-col xs="12" sm="6">
<b-form-group
:label="$t('pageTransfer.smtp.port')"
label-for="smtp-port"
@@ -67,7 +68,7 @@
id="smtp-port"
v-model="form.port"
type="number"
- :disabled="isNotAdmin"
+ :disabled="loading || isNotAdmin"
/>
</b-form-group>
</b-col>
@@ -78,12 +79,12 @@
}}</label>
<b-form-checkbox
id="sslSwitch"
- v-model="form.ssl"
+ v-model="form.is_need_ssl"
data-test-id="checkbox-ssl"
switch
:disabled="isNotAdmin"
>
- <span v-if="form.ssl">
+ <span v-if="form.is_need_ssl">
{{ $t('global.status.enabled') }}
</span>
<span v-else>{{ $t('global.status.disabled') }}</span>
@@ -91,24 +92,62 @@
</div>
</b-col>
<b-col xs="4" class="d-flex justify-content-between align-items-start">
- <b-button variant="secondary" :disabled="isNotAdmin" @click="sendMail">
+ <b-button
+ variant="secondary"
+ :disabled="loading || isNotAdmin"
+ @click="sendMail"
+ >
{{ $t('pageTransfer.smtp.testMessage') }}
</b-button>
- <b-button variant="primary" :disabled="isNotAdmin" @click="saveSmtp">
+ <b-button
+ variant="primary"
+ :disabled="loading || isNotAdmin"
+ @click="saveSmtp"
+ >
{{ $t('global.action.save') }}
</b-button>
</b-col>
</b-row>
<b-row>
<b-col>
+ <div class="text-right">
+ <b-button
+ variant="primary"
+ :disabled="loading || isNotAdmin"
+ @click="initAddModal()"
+ >
+ <icon-add />
+ {{ $t('global.action.add') }}
+ </b-button>
+ </div>
<b-table
- hover
responsive="md"
- show-empty
+ hover
+ :busy="loading"
:fields="fields"
+ :items="subscribers"
:empty-text="$t('global.table.emptyMessage')"
+ show-empty
>
+ <!-- table actions column -->
+ <template #cell(actions)="{ item }">
+ <table-row-action
+ v-for="(action, index) in item.actions"
+ :key="index"
+ :value="action.value"
+ :enabled="action.enabled"
+ :title="action.title"
+ @click-table-action="onTableAction($event, item)"
+ >
+ <template #icon>
+ <icon-trashcan
+ v-if="action.value === 'delete'"
+ :data-test-id="`smtp-tableRowAction-delete-${index}`"
+ />
+ </template>
+ </table-row-action>
+ </template>
</b-table>
</b-col>
</b-row>
@@ -118,43 +157,63 @@
<script>
import PageSection from '@/components/_sila/Global/PageSection';
import BVToastMixin from '@/components/_sila/Mixins/BVToastMixin';
-import DataFormatterMixin from '@/components/_sila/Mixins/DataFormatterMixin';
+import TableRowAction from '@/components/_sila/Global/TableRowAction';
+import LoadingBarMixin, {
+ loading,
+} from '@/components/_sila/Mixins/LoadingBarMixin';
+
+import IconAdd from '@carbon/icons-vue/es/add--alt/20';
+import IconTrashcan from '@carbon/icons-vue/es/trash-can/20';
import InputPasswordToggle from '@/components/_sila/Global/InputPasswordToggle';
export default {
name: 'Smtp',
components: {
+ IconAdd,
+ IconTrashcan,
PageSection,
+ TableRowAction,
InputPasswordToggle,
},
- mixins: [BVToastMixin, DataFormatterMixin],
+ mixins: [BVToastMixin, LoadingBarMixin],
data() {
return {
+ loading,
form: {
- user: '',
+ username: '',
password: '',
host: '',
port: '',
- auth: false,
- ssl: false,
+ is_need_auth: false,
+ is_need_ssl: false,
},
fields: [
{
- key: 'name',
+ key: 'host',
label: this.$t('pageTransfer.table.userName'),
- formatter: this.dataFormatter,
- },
- {
- key: 'value',
- label: this.$t('pageTransfer.table.value'),
- formatter: this.dataFormatter,
- tdClass: 'text-nowrap',
},
+ { key: 'actions', label: '', tdClass: 'text-right' },
],
};
},
computed: {
+ settings() {
+ return this.$store.getters['smtpStore/settings'];
+ },
+ subscribers() {
+ return this.$store.getters['smtpStore/subscribers'].map((subscriber) => {
+ return {
+ ...subscriber,
+ actions: [
+ {
+ value: 'delete',
+ title: this.$t('pageTransfer.smtp.delSubscriber'),
+ },
+ ],
+ };
+ });
+ },
isNotAdmin() {
return (
this.$store.getters['authentication/role'] === 'ReadOnly' ||
@@ -162,18 +221,51 @@ export default {
);
},
},
+ watch: {
+ settings() {
+ this.setForm();
+ },
+ },
+ created() {
+ this.startLoader();
+ Promise.all([
+ this.$store.dispatch('smtpStore/getSettings'),
+ this.$store.dispatch('smtpStore/getSubscribers'),
+ ]).finally(() => {
+ this.setForm();
+ this.endLoader();
+ });
+ },
methods: {
+ onTableAction($event, { host }) {
+ if ($event === 'delete') {
+ this.deleteSubscriber(host);
+ }
+ },
+ deleteSubscriber(host) {
+ this.startLoader();
+ this.$store
+ .dispatch('smtpStore/deleteSubscriber', host)
+ .then((success) => this.successToast(success))
+ .catch(({ message }) => this.errorToast(message))
+ .finally(() => this.endLoader());
+ },
+ initAddModal() {
+ this.$bvModal.show('modal-smtp');
+ },
saveSmtp() {
- if (!this.form.auth) {
+ this.startLoader();
+ if (!this.form.is_need_auth) {
// eslint-disable-next-line no-unused-vars
- const { user, password, ...formWithoutCredits } = this.form;
+ const { username, password, ...formWithoutCredits } = this.form;
this.form = formWithoutCredits;
}
this.$store
- .dispatch('smtpStore/setSmtpSettings', this.form)
+ .dispatch('smtpStore/setSettings', this.form)
.then((message) => this.successToast(message))
- .catch(({ message }) => this.errorToast(message));
+ .catch(({ message }) => this.errorToast(message))
+ .finally(() => this.endLoader());
},
sendMail() {
this.$store
@@ -186,6 +278,18 @@ export default {
.then((message) => this.successToast(message))
.catch(({ message }) => this.errorToast(message));
},
+ setForm() {
+ if (!this.settings) {
+ return;
+ }
+
+ this.form.username = this.settings.username;
+ this.form.password = this.settings.password;
+ this.form.host = this.settings.host;
+ this.form.port = this.settings.port;
+ this.form.is_need_auth = this.settings.is_need_auth;
+ this.form.is_need_ssl = this.settings.is_need_ssl;
+ },
},
};
</script>
diff --git a/src/views/_sila/Settings/TransferInfo/Snmp.vue b/src/views/_sila/Settings/TransferInfo/Snmp.vue
index 4a0e0abe..ef9e18ac 100644
--- a/src/views/_sila/Settings/TransferInfo/Snmp.vue
+++ b/src/views/_sila/Settings/TransferInfo/Snmp.vue
@@ -5,7 +5,7 @@
<div class="text-right">
<b-button
variant="primary"
- :disabled="isNotAdmin"
+ :disabled="loading || isNotAdmin"
@click="initAddModal()"
>
<icon-add />
@@ -114,7 +114,6 @@ export default {
this.startLoader();
this.$store.dispatch('snmpStore/getSubscribers').finally(() => {
this.endLoader();
- this.isBusy = false;
});
},
diff --git a/src/views/_sila/Settings/TransferInfo/Syslog.vue b/src/views/_sila/Settings/TransferInfo/Syslog.vue
index 1d2111c9..bc64cc0d 100644
--- a/src/views/_sila/Settings/TransferInfo/Syslog.vue
+++ b/src/views/_sila/Settings/TransferInfo/Syslog.vue
@@ -1,30 +1,55 @@
<template>
- <page-section :section-title="$t('pageLdap.settings')">
- <b-row class="mt-4 justify-content-end">
- <b-col xs="12" sm="6" lg="4">
- <b-form-group label="Расположение системы" label-for="system-location">
+ <page-section :section-title="$t('pageTransfer.syslog.title')">
+ <b-row class="mt-4 justify-content-end syslog-warning">
+ <b-col xs="12" sm="12">
+ <div class="switch-group">
+ <label for="statusSwitch">{{
+ $t('pageTransfer.syslog.status')
+ }}</label>
+ <b-form-checkbox
+ id="statusSwitch"
+ v-model="syslogStatus"
+ data-test-id="checkbox-status"
+ switch
+ :disabled="loading || isNotAdmin"
+ >
+ <span v-if="syslogStatus">
+ {{ $t('global.status.enabled') }}
+ </span>
+ <span v-else>{{ $t('global.status.disabled') }}</span>
+ </b-form-checkbox>
+ </div>
+ </b-col>
+ <b-col xs="12" sm="6">
+ <b-form-group
+ :label="$t('pageTransfer.syslog.ip')"
+ label-for="syslog-ip"
+ >
<b-form-input
- id="system-location"
- placeholder="Ведите значение"
- :disabled="$store.getters['authentication/role'] === 'ReadOnly'"
+ id="syslog-ip"
+ v-model="form.Address"
+ :disabled="!syslogStatus || loading || isNotAdmin"
/> </b-form-group
></b-col>
- <b-col xs="12" sm="6" lg="4">
- <b-form-group label="Контакты системы" label-for="system-contacts">
+ <b-col xs="12" sm="6">
+ <b-form-group
+ :label="$t('pageTransfer.syslog.port')"
+ label-for="syslog-port"
+ >
<b-form-input
- id="system-contacts"
- placeholder="Ведите значение"
- :disabled="$store.getters['authentication/role'] === 'ReadOnly'"
+ id="syslog-port"
+ v-model="form.Port"
+ type="number"
+ :disabled="!syslogStatus || loading || isNotAdmin"
/>
</b-form-group>
</b-col>
- <b-col xs="12" sm="6" lg="4">
- <b-form-group label="Статус" label-for="SMNP-status">
- <b-form-select id="SMNP-status"> </b-form-select>
- </b-form-group>
- </b-col>
<b-col xs="4" class="d-flex justify-content-end align-items-start">
- <b-button variant="primary">
+ <b-button
+ variant="primary"
+ :disabled="loading || isNotAdmin"
+ @click="saveSyslog"
+ >
{{ $t('global.action.save') }}
</b-button>
</b-col>
@@ -34,16 +59,101 @@
<script>
import PageSection from '@/components/_sila/Global/PageSection';
+import BVToastMixin from '@/components/_sila/Mixins/BVToastMixin';
+import LoadingBarMixin, {
+ loading,
+} from '@/components/_sila/Mixins/LoadingBarMixin';
export default {
name: 'Syslog',
components: {
PageSection,
},
+ mixins: [BVToastMixin, LoadingBarMixin],
data() {
- return {};
+ return {
+ loading,
+ syslogStatus: false,
+ form: {
+ Address: null,
+ Port: null,
+ },
+ };
+ },
+ computed: {
+ settings() {
+ return this.$store.getters['syslogStore/settings'];
+ },
+ isNotAdmin() {
+ return (
+ this.$store.getters['authentication/role'] === 'ReadOnly' ||
+ this.$store.getters['authentication/role'] === 'Operator'
+ );
+ },
+ },
+
+ watch: {
+ settings() {
+ this.setForm();
+ },
+ },
+
+ created() {
+ this.startLoader();
+ this.$store.dispatch('syslogStore/getSettings').finally(() => {
+ this.setForm();
+ this.endLoader();
+ });
+ },
+
+ methods: {
+ saveSyslog() {
+ this.startLoader();
+ if (!this.syslogStatus) {
+ this.form = {
+ Address: '',
+ Port: 0,
+ };
+ }
+
+ this.form.Port = +this.form.Port;
+ this.$store
+ .dispatch('syslogStore/saveSettings', this.form)
+ .then((success) => this.successToast(success))
+ .catch(({ message }) => this.errorToast(message))
+ .finally(() => this.endLoader());
+ },
+
+ setForm() {
+ if (!this.settings) {
+ return;
+ }
+
+ if (!this.settings.Address && this.settings.Port === 0) {
+ this.syslogStatus = false;
+ } else {
+ this.syslogStatus = true;
+ }
+
+ this.form.Address = this.settings.Address;
+ this.form.Port = this.settings.Port;
+ },
},
- computed: {},
};
</script>
+
+<style lang="scss" scoped>
+.switch-group {
+ margin-bottom: 1.5rem;
+}
+.syslog-warning {
+ width: 50%;
+ @media (max-width: 1200px) {
+ width: 75%;
+ }
+ @media (max-width: 576px) {
+ width: 100%;
+ }
+}
+</style>
diff --git a/src/views/_sila/Settings/TransferInfo/Transfer.vue b/src/views/_sila/Settings/TransferInfo/Transfer.vue
index 5f6d5058..4b70778b 100644
--- a/src/views/_sila/Settings/TransferInfo/Transfer.vue
+++ b/src/views/_sila/Settings/TransferInfo/Transfer.vue
@@ -5,8 +5,10 @@
<hr />
<smtp />
<hr />
- <!-- <syslog />-->
+ <syslog />
+ <hr />
<modal-snmp @ok="saveSnmp" />
+ <modal-smtp @ok="saveSmtp" />
</b-container>
</template>
@@ -20,7 +22,8 @@ import PageTitle from '@/components/_sila/Global/PageTitle';
import Snmp from './Snmp';
import Smtp from './Smtp';
import ModalSnmp from './ModalSnmp.vue';
-// import Syslog from './Syslog';
+import ModalSmtp from './ModalSmtp.vue';
+import Syslog from './Syslog';
export default {
name: 'PowerRestorePolicy',
@@ -29,7 +32,8 @@ export default {
Snmp,
ModalSnmp,
Smtp,
- // Syslog
+ ModalSmtp,
+ Syslog,
},
mixins: [BVToastMixin, LoadingBarMixin],
data() {
@@ -46,6 +50,15 @@ export default {
.catch(({ message }) => this.errorToast(message))
.finally(() => this.endLoader());
},
+
+ saveSmtp(modalFormData) {
+ this.startLoader();
+ this.$store
+ .dispatch('smtpStore/addSubscriber', modalFormData)
+ .then((message) => this.successToast(message))
+ .catch(({ message }) => this.errorToast(message))
+ .finally(() => this.endLoader());
+ },
},
};
</script>