Работа над профилями и ключом доступа

This commit is contained in:
Book Pauk
2019-03-15 19:11:27 +07:00
parent 2ff94c1458
commit d229aab8c9
2 changed files with 104 additions and 4 deletions

View File

@@ -53,6 +53,10 @@ class ServerStorage extends Vue {
return this.$store.state.reader.profilesRev; return this.$store.state.reader.profilesRev;
} }
get currentProfile() {
return this.$store.state.reader.currentProfile;
}
notifySuccessIfNeeded(rev1, rev2) { notifySuccessIfNeeded(rev1, rev2) {
if (rev1 != rev2) if (rev1 != rev2)
this.$notify.success({message: 'Данные синхронизированы с сервером'}); this.$notify.success({message: 'Данные синхронизированы с сервером'});
@@ -67,6 +71,9 @@ class ServerStorage extends Vue {
} }
async loadProfiles() { async loadProfiles() {
if (!this.currentProfile)
return;
let prof = await this.storageGet({'profiles': {}}); let prof = await this.storageGet({'profiles': {}});
if (prof.state == 'success') { if (prof.state == 'success') {
@@ -83,6 +90,9 @@ class ServerStorage extends Vue {
} }
async saveProfiles() { async saveProfiles() {
if (!this.currentProfile)
return;
if (!this.savingProfiles) { if (!this.savingProfiles) {
this.savingProfiles = true; this.savingProfiles = true;

View File

@@ -7,7 +7,68 @@
</template> </template>
<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-form :model="form" size="small" label-width="100px" @submit.native.prevent>
<div class="partHeader">Профили устройств</div>
<el-form-item label="">
<div class="text">
Выберите или добавьте профиль устройства, чтобы начать синхронизацию данных с сервером.
При выборе "Нет" синхронизация отключается.
</div>
</el-form-item>
<el-form-item label="Устройство">
<el-select v-model="currentProfile" placeholder="">
<el-option label="Нет" value=""></el-option>
<el-option v-for="item in profilesArray"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="">
<el-button @click="addProfile">Добавить</el-button>
<el-button @click="delProfile">Удалить</el-button>
</el-form-item>
</el-form>
<el-form :model="form" size="small" label-width="100px" @submit.native.prevent>
<div class="partHeader">Ключ доступа</div>
<el-form-item label="">
<div class="text">
Ключ доступа позволяет восстановить профили с настройками и список читаемых книг
на другом устройстве. Для этого необходимо передать его через почту, мессенджер или другим способом.
</div>
<div>
<b>{{ partialStorageKey }}</b> (часть вашего ключа)
</div>
</el-form-item>
<el-form-item label="">
<el-button style="width: 250px" @click="showServerStorageKey">Показать ключ доступа/ссылку</el-button>
</el-form-item>
<el-form-item label="">
<el-button style="width: 250px" @click="enterServerStorageKey">Ввести ключ доступа</el-button>
</el-form-item>
<el-form-item label="">
<el-button style="width: 250px" @click="generateServerStorageKey">Сгенерировать новый ключ</el-button>
</el-form-item>
<el-form-item label="">
<div class="text">
Рекомендуется сохранить ключ в надежном месте, чтобы всегда иметь возможность восстановить настройки,
например, после переустановки ОС или чистки/смены браузера.<br>
ПРЕДУПРЕЖДЕНИЕ! При утере ключа, НИКТО не сможет восстановить ваши настройки, т.к. все данные сжимаются
и шифруются ключом доступа перед отправкой на сервер.
</div>
</el-form-item>
</el-form>
</el-tab-pane>
<!-- Вид ------------------------------------------------------------------------->
<el-tab-pane label="Вид"> <el-tab-pane label="Вид">
<el-form :model="form" size="small" label-width="120px" @submit.native.prevent> <el-form :model="form" size="small" label-width="120px" @submit.native.prevent>
@@ -246,7 +307,7 @@
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<!---------------------------------------------------------------------------> <!-- Листание ------------------------------------------------------------------------->
<el-tab-pane label="Листание"> <el-tab-pane label="Листание">
<el-form :model="form" size="mini" label-width="120px" @submit.native.prevent> <el-form :model="form" size="mini" label-width="120px" @submit.native.prevent>
<div class="partHeader">Анимация</div> <div class="partHeader">Анимация</div>
@@ -283,7 +344,7 @@
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<!---------------------------------------------------------------------------> <!-- Прочее ------------------------------------------------------------------------->
<el-tab-pane label="Прочее"> <el-tab-pane label="Прочее">
<el-form :model="form" size="mini" label-width="120px" @submit.native.prevent> <el-form :model="form" size="mini" label-width="120px" @submit.native.prevent>
<el-form-item label="Управление"> <el-form-item label="Управление">
@@ -340,7 +401,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<!---------------------------------------------------------------------------> <!-- Сброс ------------------------------------------------------------------------->
<el-tab-pane label="Сброс"> <el-tab-pane label="Сброс">
<el-button @click="setDefaults">Установить по-умолчанию</el-button> <el-button @click="setDefaults">Установить по-умолчанию</el-button>
</el-tab-pane> </el-tab-pane>
@@ -401,6 +462,8 @@ class SettingsPage extends Vue {
webFonts = []; webFonts = [];
fonts = []; fonts = [];
currentProfile = '';
created() { created() {
this.commit = this.$store.commit; this.commit = this.$store.commit;
this.reader = this.$store.state.reader; this.reader = this.$store.state.reader;
@@ -425,6 +488,22 @@ class SettingsPage extends Vue {
return this.$store.state.reader.settings; return this.$store.state.reader.settings;
} }
get profiles() {
return this.$store.state.reader.profiles;
}
get profilesArray() {
return Object.keys(this.profiles);
}
get partialStorageKey() {
return this.serverStorageKey.substr(0, 7) + '***';
}
get serverStorageKey() {
return this.$store.state.reader.serverStorageKey;
}
get predefineTextColors() { get predefineTextColors() {
return [ return [
'#ffffff', '#ffffff',
@@ -476,6 +555,12 @@ class SettingsPage extends Vue {
} }
} }
addProfile() {
}
delProfile() {
}
keyHook(event) { keyHook(event) {
if (event.type == 'keydown' && event.code == 'Escape') { if (event.type == 'keydown' && event.code == 'Escape') {
this.close(); this.close();
@@ -504,6 +589,11 @@ class SettingsPage extends Vue {
position: relative; position: relative;
} }
.text {
font-size: 90%;
line-height: 130%;
}
.el-form { .el-form {
border-top: 2px solid #bbbbbb; border-top: 2px solid #bbbbbb;
margin-bottom: 5px; margin-bottom: 5px;