|
@@ -9,13 +9,21 @@
|
|
<el-tabs type="border-card" tab-position="left" v-model="selectedTab">
|
|
<el-tabs type="border-card" tab-position="left" v-model="selectedTab">
|
|
<!-- Профили ------------------------------------------------------------------------->
|
|
<!-- Профили ------------------------------------------------------------------------->
|
|
<el-tab-pane label="Профили">
|
|
<el-tab-pane label="Профили">
|
|
- <el-form :model="form" size="small" label-width="100px" @submit.native.prevent>
|
|
|
|
|
|
+ <el-form :model="form" size="small" label-width="80px" @submit.native.prevent>
|
|
|
|
+ <div class="partHeader">Управление синхронизацией настроек</div>
|
|
|
|
+ <el-form-item label="">
|
|
|
|
+ <el-checkbox v-model="serverSyncEnabled">Включить синхронизацию с сервером</el-checkbox>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+
|
|
|
|
+ <div v-show="serverSyncEnabled">
|
|
|
|
+ <el-form :model="form" size="small" label-width="80px" @submit.native.prevent>
|
|
<div class="partHeader">Профили устройств</div>
|
|
<div class="partHeader">Профили устройств</div>
|
|
|
|
|
|
<el-form-item label="">
|
|
<el-form-item label="">
|
|
<div class="text">
|
|
<div class="text">
|
|
- Выберите или добавьте профиль устройства, чтобы начать синхронизацию данных с сервером.
|
|
|
|
- При выборе "Нет" синхронизация отключается.
|
|
|
|
|
|
+ Выберите или добавьте профиль устройства, чтобы начать синхронизацию настроек с сервером.
|
|
|
|
+ <br>При выборе "Нет" синхронизация настроек (но не книг) отключается.
|
|
</div>
|
|
</div>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
@@ -37,13 +45,13 @@
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
|
|
|
|
- <el-form :model="form" size="small" label-width="100px" @submit.native.prevent>
|
|
|
|
|
|
+ <el-form :model="form" size="small" label-width="80px" @submit.native.prevent>
|
|
<div class="partHeader">Ключ доступа</div>
|
|
<div class="partHeader">Ключ доступа</div>
|
|
|
|
|
|
<el-form-item label="">
|
|
<el-form-item label="">
|
|
<div class="text">
|
|
<div class="text">
|
|
- Ключ доступа позволяет восстановить профили с настройками и список читаемых книг
|
|
|
|
- на другом устройстве. Для этого необходимо передать его через почту, мессенджер или другим способом.
|
|
|
|
|
|
+ Ключ доступа позволяет восстановить профили с настройками и список читаемых книг.
|
|
|
|
+ Для этого необходимо передать ключ на устройство через почту, мессенджер или другим способом.
|
|
</div>
|
|
</div>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
@@ -57,11 +65,13 @@
|
|
|
|
|
|
<el-form-item label="">
|
|
<el-form-item label="">
|
|
<div v-if="!serverStorageKeyVisible">
|
|
<div v-if="!serverStorageKeyVisible">
|
|
|
|
+ <hr/>
|
|
<b>{{ partialStorageKey }}</b> (часть вашего ключа)
|
|
<b>{{ partialStorageKey }}</b> (часть вашего ключа)
|
|
|
|
+ <hr/>
|
|
</div>
|
|
</div>
|
|
<div v-else style="line-height: 100%">
|
|
<div v-else style="line-height: 100%">
|
|
<hr/>
|
|
<hr/>
|
|
- <div style="width: 300px; overflow-wrap: break-word;"><b>{{ serverStorageKey }}</b></div>
|
|
|
|
|
|
+ <div style="width: 300px; padding-top: 5px; overflow-wrap: break-word;"><b>{{ serverStorageKey }}</b></div>
|
|
<br><div class="center">
|
|
<br><div class="center">
|
|
<el-button size="mini" class="copy-button" @click="copyToClip(serverStorageKey, 'Ключ')">Скопировать ключ</el-button>
|
|
<el-button size="mini" class="copy-button" @click="copyToClip(serverStorageKey, 'Ключ')">Скопировать ключ</el-button>
|
|
</div>
|
|
</div>
|
|
@@ -94,6 +104,7 @@
|
|
</div>
|
|
</div>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
|
|
+ </div>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
<!-- Вид ------------------------------------------------------------------------->
|
|
<!-- Вид ------------------------------------------------------------------------->
|
|
<el-tab-pane label="Вид">
|
|
<el-tab-pane label="Вид">
|
|
@@ -521,6 +532,14 @@ class SettingsPage extends Vue {
|
|
return this.$store.state.reader.settings;
|
|
return this.$store.state.reader.settings;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ get serverSyncEnabled() {
|
|
|
|
+ return this.$store.state.reader.serverSyncEnabled;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ set serverSyncEnabled(newValue) {
|
|
|
|
+ this.commit('reader/setServerSyncEnabled', newValue);
|
|
|
|
+ }
|
|
|
|
+
|
|
get profiles() {
|
|
get profiles() {
|
|
return this.$store.state.reader.profiles;
|
|
return this.$store.state.reader.profiles;
|
|
}
|
|
}
|
|
@@ -615,10 +634,9 @@ class SettingsPage extends Vue {
|
|
if (this.profiles[result.value]) {
|
|
if (this.profiles[result.value]) {
|
|
this.$alert('Такой профиль уже существует', 'Ошибка');
|
|
this.$alert('Такой профиль уже существует', 'Ошибка');
|
|
} else {
|
|
} else {
|
|
- this.currentProfile = result.value;
|
|
|
|
- await this.$nextTick();//даем возможность обновить currentProfile
|
|
|
|
const newProfiles = Object.assign({}, this.profiles, {[result.value]: 1});
|
|
const newProfiles = Object.assign({}, this.profiles, {[result.value]: 1});
|
|
this.commit('reader/setProfiles', newProfiles);
|
|
this.commit('reader/setProfiles', newProfiles);
|
|
|
|
+ this.currentProfile = result.value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (e) {
|
|
} catch (e) {
|
|
@@ -646,7 +664,6 @@ class SettingsPage extends Vue {
|
|
const newProfiles = Object.assign({}, this.profiles);
|
|
const newProfiles = Object.assign({}, this.profiles);
|
|
delete newProfiles[this.currentProfile];
|
|
delete newProfiles[this.currentProfile];
|
|
this.commit('reader/setProfiles', newProfiles);
|
|
this.commit('reader/setProfiles', newProfiles);
|
|
- await this.$nextTick();//даем возможность сохранить profiles
|
|
|
|
this.currentProfile = '';
|
|
this.currentProfile = '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -670,11 +687,7 @@ class SettingsPage extends Vue {
|
|
});
|
|
});
|
|
|
|
|
|
if (result.value && result.value.toLowerCase() == 'да') {
|
|
if (result.value && result.value.toLowerCase() == 'да') {
|
|
- if (!this.currentProfile)
|
|
|
|
- this.currentProfile = Object.keys(this.profiles)[0];
|
|
|
|
- await this.$nextTick();//даем возможность обновить currentProfile
|
|
|
|
this.commit('reader/setProfiles', {});
|
|
this.commit('reader/setProfiles', {});
|
|
- await this.$nextTick();//даем возможность сохранить profiles
|
|
|
|
this.currentProfile = '';
|
|
this.currentProfile = '';
|
|
}
|
|
}
|
|
} catch (e) {
|
|
} catch (e) {
|
|
@@ -697,6 +710,22 @@ class SettingsPage extends Vue {
|
|
}
|
|
}
|
|
|
|
|
|
async enterServerStorageKey() {
|
|
async enterServerStorageKey() {
|
|
|
|
+ try {
|
|
|
|
+ const result = await this.$prompt(`<b>Предупреждение!</b> Изменение ключа доступа приведет к потере всех профилей и читаемых книг, привязанных к предыдущему ключу.` +
|
|
|
|
+ `<br><br>Введите новый ключ доступа:`, '', {
|
|
|
|
+ dangerouslyUseHTMLString: true,
|
|
|
|
+ confirmButtonText: 'OK',
|
|
|
|
+ cancelButtonText: 'Отмена',
|
|
|
|
+ inputValidator: (str) => { if (str && str.length == 44) return true; else return 'Неверный формат ключа'; },
|
|
|
|
+ type: 'warning'
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ if (result.value && result.value.length == 44) {
|
|
|
|
+ this.commit('reader/setServerStorageKey', result.value);
|
|
|
|
+ }
|
|
|
|
+ } catch (e) {
|
|
|
|
+ //
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
async generateServerStorageKey() {
|
|
async generateServerStorageKey() {
|