You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

158 lines
6.2 KiB

<template>
<div class="offcanvas offcanvas-end" id="settingsCanvas"
aria-hidden="true">
<div class="offcanvas-header">
<h5><i class="fas fa-sliders-h"></i> Einstellungen</h5>
<button type="button" v-on:click="updateStorage()" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<div class="row">
<div class="col-md-12">
<h5>Allgemeine Einstellungen</h5>
<div class="form-group">
<label>Ticket-Link <small>Link zu einem Ticket ohne Ticketnummer</small></label>
<input type="text" v-model="trackerSystemUrl" class="form-control">
</div>
<br/>
<div class="form-group">
<label>
<input type="checkbox" class="form-control-checkbox" v-model="$store.state.settings.showPT">
Ab 8 Stunden nurmehr PT anzeigen
</label>
</div>
<br/>
<div class="form-group">
<label>
<input type="checkbox" class="form-control-checkbox"
v-model="$store.state.settings.dontShowMinutes">
Zeit immer in Stunden anzeigen
</label>
</div>
<br/>
<!-- <div class="form-group">-->
<!-- <label>Design</label>-->
<!-- <select v-model="theme" class="form-control">-->
<!-- <option v-for="(availableTheme, themeIndex) in themes" :value="availableTheme.name.toLowerCase()"-->
<!-- v-bind:key="themeIndex">{{ availableTheme.name }}-->
<!-- </option>-->
<!-- </select>-->
<!-- </div>-->
<!-- <br/>-->
</div>
<div class="col-md-12">
<!-- <h5>Zurücksetzen & Löschen</h5>-->
<!-- <div class="row">-->
<!-- <div class="col-md-6">-->
<!-- <button class="btn btn-outline-danger btn-full-width" @click="deleteAllData()">Alle Daten-->
<!-- löschen-->
<!-- </button>-->
<!-- </div>-->
<!-- </div>-->
<!-- <br/>-->
<h5>Import & Export</h5>
<div class="row">
<div class="col-md-6">
<h6>Export-Json</h6>
<textarea class="form-control" id="exportJsonInput" v-model="exportJson"></textarea>
<button class="btn btn-success tracker-action-button" @click="copy2Clipboard">Export-String
kopieren
</button>
</div>
<div class="col-md-6">
<h6>Import</h6>
<textarea class="form-control" v-model="importJson"></textarea>
<button class="btn btn-success tracker-action-button" @click="importData">Import</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import axios from "axios";
export default {
name: "Settings",
data() {
return {
settings: {},
importJson: '',
theme: '',
themes: null,
// dashboardLogo: 'assets/img/logo.png',
trackerSystemUrl: '',
showPT: true,
dontShowMinutes: false,
linkTarget: '_blank',
exportJson: ''
}
},
mounted() {
this.fetchThemes();
},
methods: {
importData() {
let json = JSON.parse(this.importJson);
if (json.trackedTrackers) {
this.trackers = this.extractTrackersFromLegacyJson(json.trackedTrackers);
this.archive = this.extractArchivedTrackersFromLegacyJson(json.trackedTrackers);
} else {
this.trackers = json.trackers;
this.archive = json.archive ?? [];
}
this.trackerSystemUrl = json.redmineUrl ?? json.trackerSystemUrl;
this.showPT = json.showPT;
this.theme = json.theme;
this.updateStorage();
location.reload();
},
extractTrackersFromLegacyJson(trackers) {
return this.extractTrackers(trackers);
},
extractArchivedTrackersFromLegacyJson(trackers) {
return this.extractTrackers(trackers, true);
},
extractTrackers(trackerCollection, forArchive = false) {
let trackers = [];
let archive = [];
trackerCollection.forEach((tracker) => {
if (tracker.archived || (tracker.active && tracker.active === false)) {
archive.pushToBeginning(tracker);
} else {
trackers.pushToBeginning(tracker)
}
});
return forArchive ? archive : trackers;
},
copy2Clipboard() {
let copyText = document.getElementById("exportJsonInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
document.execCommand("copy");
},
fetchThemes() {
let vue = this;
axios.get(
'https://bootswatch.com/api/5.json'
).then((response) => {
vue.themes = response.data.themes;
}).catch((error) => {
console.log(error);
});
},
}
}
</script>
<style scoped>
</style>