style(ui): Improve login UI design

This commit is contained in:
TwiN 2022-01-17 10:37:09 -05:00
parent 0b4720d94b
commit 1613274cb0
9 changed files with 72 additions and 30 deletions

View File

@ -1,5 +1,6 @@
<template> <template>
<div v-if="retrievedConfig" class="container container-xs relative mx-auto xl:rounded xl:border xl:shadow-xl xl:my-5 p-5 pb-12 xl:pb-5 text-left dark:bg-gray-800 dark:text-gray-200 dark:border-gray-500" id="global"> <Loading v-if="!retrievedConfig" class="h-64 w-64 px-4" />
<div v-else :class="[config && config.oidc && !config.authenticated ? 'hidden' : '', 'container container-xs relative mx-auto xl:rounded xl:border xl:shadow-xl xl:my-5 p-5 pb-12 xl:pb-5 text-left dark:bg-gray-800 dark:text-gray-200 dark:border-gray-500']" id="global">
<div class="mb-2"> <div class="mb-2">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<div class="w-3/4 text-left my-auto"> <div class="w-3/4 text-left my-auto">
@ -13,19 +14,34 @@
</div> </div>
</div> </div>
</div> </div>
<router-view @showTooltip="showTooltip" />
</div>
<div v-if="config && config.oidc && !config.authenticated" class="mx-auto max-w-md pt-12">
<img src="./assets/logo.svg" alt="Gatus" class="mx-auto" style="max-width:160px; min-width:50px; min-height:50px;"/>
<h2 class="mt-4 text-center text-4xl font-extrabold text-gray-800 dark:text-gray-200">
Gatus
</h2>
<div class="mt-8 py-7 px-4 rounded-sm sm:bg-gray-100 sm:border sm:border-gray-300 sm:shadow-2xl sm:px-10">
<div class="sm:mx-auto sm:w-full">
<h2 class="mb-4 text-center text-xl font-bold text-gray-600 dark:text-gray-200 dark:sm:text-gray-600 ">
Sign in
</h2>
</div>
<div v-if="$route && $route.query.error" class="text-red-500 text-center my-2"> <div v-if="$route && $route.query.error" class="text-red-500 text-center my-2">
<div class="text-xl"> <div class="text-xl">
<span class="text-red-500" v-if="$route.query.error === 'access_denied'">You do not have access to this status page</span> <span class="text-red-500" v-if="$route.query.error === 'access_denied'">You do not have access to this status page</span>
<span class="text-red-500" v-else>{{ $route.query.error }}</span> <span class="text-red-500" v-else>{{ $route.query.error }}</span>
</div> </div>
</div> </div>
<div v-if="config && config.oidc && !config.authenticated"> <div>
<a :href="`${SERVER_URL}/oidc/login`" class="max-w-lg mx-auto w-full flex justify-center py-3 px-4 border border-transparent rounded-md shadow-lg text-white bg-green-700 hover:bg-green-800"> <a :href="`${SERVER_URL}/oidc/login`" class="max-w-lg mx-auto w-full flex justify-center py-3 px-4 border border-green-800 rounded-md shadow-lg text-sm text-white bg-green-700 hover:bg-green-800">
Login with OIDC Login with OIDC
</a> </a>
</div> </div>
<router-view @showTooltip="showTooltip"/>
</div> </div>
</div>
<Tooltip :result="tooltip.result" :event="tooltip.event"/> <Tooltip :result="tooltip.result" :event="tooltip.event"/>
<Social/> <Social/>
</template> </template>
@ -35,10 +51,12 @@
import Social from './components/Social.vue' import Social from './components/Social.vue'
import Tooltip from './components/Tooltip.vue'; import Tooltip from './components/Tooltip.vue';
import {SERVER_URL} from "@/main"; import {SERVER_URL} from "@/main";
import Loading from "@/components/Loading";
export default { export default {
name: 'App', name: 'App',
components: { components: {
Loading,
Social, Social,
Tooltip Tooltip
}, },

View File

@ -0,0 +1,11 @@
<template>
<div class="flex justify-center items-center mx-auto">
<img :class="`animate-spin opacity-60 rounded-full`" src="../assets/logo.svg" alt="Gatus logo" />
</div>
</template>
<script>
export default {
}
</script>

View File

@ -105,8 +105,9 @@ export default {
fetchData() { fetchData() {
//console.log("[Details][fetchData] Fetching data"); //console.log("[Details][fetchData] Fetching data");
fetch(`${this.serverUrl}/api/v1/endpoints/${this.$route.params.key}/statuses?page=${this.currentPage}`, {credentials: 'include'}) fetch(`${this.serverUrl}/api/v1/endpoints/${this.$route.params.key}/statuses?page=${this.currentPage}`, {credentials: 'include'})
.then(response => response.json()) .then(response => {
.then(data => { if (response.status === 200) {
response.json().then(data => {
if (JSON.stringify(this.endpointStatus) !== JSON.stringify(data)) { if (JSON.stringify(this.endpointStatus) !== JSON.stringify(data)) {
this.endpointStatus = data; this.endpointStatus = data;
this.uptime = data.uptime; this.uptime = data.uptime;
@ -141,6 +142,12 @@ export default {
this.events = events; this.events = events;
} }
}); });
} else {
response.text().then(text => {
console.log(`[Details][fetchData] Error: ${text}`);
});
}
});
}, },
generateUptimeBadgeImageURL(duration) { generateUptimeBadgeImageURL(duration) {
return `${this.serverUrl}/api/v1/endpoints/${this.endpointStatus.key}/uptimes/${duration}/badge.svg`; return `${this.serverUrl}/api/v1/endpoints/${this.endpointStatus.key}/uptimes/${duration}/badge.svg`;

View File

@ -25,14 +25,20 @@ export default {
emits: ['showTooltip', 'toggleShowAverageResponseTime'], emits: ['showTooltip', 'toggleShowAverageResponseTime'],
methods: { methods: {
fetchData() { fetchData() {
//console.log("[Home][fetchData] Fetching data");
fetch(`${SERVER_URL}/api/v1/endpoints/statuses?page=${this.currentPage}`, {credentials: 'include'}) fetch(`${SERVER_URL}/api/v1/endpoints/statuses?page=${this.currentPage}`, {credentials: 'include'})
.then(response => response.json()) .then(response => {
.then(data => { if (response.status === 200) {
response.json().then(data => {
if (JSON.stringify(this.endpointStatuses) !== JSON.stringify(data)) { if (JSON.stringify(this.endpointStatuses) !== JSON.stringify(data)) {
this.endpointStatuses = data; this.endpointStatuses = data;
} }
}); });
} else {
response.text().then(text => {
console.log(`[Home][fetchData] Error: ${text}`);
});
}
});
}, },
changePage(page) { changePage(page) {
this.currentPage = page; this.currentPage = page;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long