summaryrefslogtreecommitdiffstats
path: root/src/pages/NotFound.vue
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/NotFound.vue')
-rw-r--r--src/pages/NotFound.vue104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/pages/NotFound.vue b/src/pages/NotFound.vue
new file mode 100644
index 0000000..361362a
--- /dev/null
+++ b/src/pages/NotFound.vue
@@ -0,0 +1,104 @@
+<template>
+ <div>
+ <!-- Desktop header -->
+ <header v-if="! $root.isMobile" class="d-flex flex-wrap justify-content-center py-3 mb-3 border-bottom">
+ <router-link to="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
+ <object class="bi me-2 ms-4" width="40" height="40" data="/icon.svg" />
+ <span class="fs-4 title">Uptime Kuma</span>
+ </router-link>
+ </header>
+
+ <!-- Mobile header -->
+ <header v-else class="d-flex flex-wrap justify-content-center pt-2 pb-2 mb-3">
+ <router-link to="/dashboard" class="d-flex align-items-center text-dark text-decoration-none">
+ <object class="bi" width="40" height="40" data="/icon.svg" />
+ <span class="fs-4 title ms-2">Uptime Kuma</span>
+ </router-link>
+ </header>
+
+ <div class="content">
+ <div>
+ <strong>🐻 {{ $t("Page Not Found") }}</strong>
+ </div>
+
+ <div class="guide">
+ {{ $t("Most likely causes:") }}
+ <ul>
+ <li>{{ $t("The resource is no longer available.") }}</li>
+ <li>{{ $t("There might be a typing error in the address.") }}</li>
+ </ul>
+
+ {{ $t("What you can try:") }}<br />
+ <ul>
+ <li>{{ $t("Retype the address.") }}</li>
+ <li><a href="#" class="go-back" @click="goBack()">{{ $t("Go back to the previous page.") }}</a></li>
+ <li><a href="/" class="go-back">{{ $t("Go back to home page.") }}</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ async mounted() {
+
+ },
+ methods: {
+ /**
+ * Go back 1 in browser history
+ * @returns {void}
+ */
+ goBack() {
+ history.back();
+ }
+ }
+};
+</script>
+
+<style scoped lang="scss">
+@import "../assets/vars.scss";
+
+.go-back {
+ text-decoration: none;
+ color: $primary !important;
+}
+
+.content {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ align-items: center;
+ flex-direction: column;
+ gap: 50px;
+ padding-top: 30px;
+
+ strong {
+ font-size: 24px;
+ }
+}
+
+.guide {
+ max-width: 800px;
+ font-size: 14px;
+}
+
+.title {
+ font-weight: bold;
+}
+
+.dark {
+ header {
+ background-color: $dark-header-bg;
+ border-bottom-color: $dark-header-bg !important;
+
+ span {
+ color: #f0f6fc;
+ }
+ }
+
+ .bottom-nav {
+ background-color: $dark-bg;
+ }
+}
+</style>