diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 1a3fdca1b..78e21ae02 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -28,6 +28,7 @@
+
@@ -40,10 +41,12 @@
+
\ No newline at end of file
diff --git a/frontend/src/components/UI/SiteMenu.vue b/frontend/src/components/UI/SiteMenu.vue
index 4943acfe4..b9123d8da 100644
--- a/frontend/src/components/UI/SiteMenu.vue
+++ b/frontend/src/components/UI/SiteMenu.vue
@@ -52,12 +52,6 @@ export default {
restricted: false,
login: true,
},
- {
- icon: "mdi-account",
- title: "Logout",
- restricted: true,
- login: true,
- },
{
icon: "mdi-calendar-week",
title: this.$i18n.t("meal-plan.dinner-this-week"),
@@ -76,6 +70,12 @@ export default {
nav: "/meal-plan/planner",
restricted: true,
},
+ {
+ icon: "mdi-account",
+ title: "Logout",
+ restricted: true,
+ nav: "/logout",
+ },
{
icon: "mdi-cog",
title: this.$i18n.t("general.settings"),
diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json
index 05b7b2f2c..3898e5e0a 100644
--- a/frontend/src/locales/en.json
+++ b/frontend/src/locales/en.json
@@ -89,6 +89,8 @@
},
"settings": {
"general-settings": "General Settings",
+ "change-password": "Change Password",
+ "admin-settings": "Admin Settings",
"local-api": "Local API",
"language": "Language",
"add-a-new-theme": "Add a New Theme",
diff --git a/frontend/src/pages/Admin/General/index.vue b/frontend/src/pages/Admin/General/index.vue
deleted file mode 100644
index 5bf2d0bd8..000000000
--- a/frontend/src/pages/Admin/General/index.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
- {{ $t("settings.general-settings") }}
-
-
-
- {{ $t("settings.local-api") }}
- mdi-open-in-new
-
-
-
-
-
- {{ $t("settings.language") }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/pages/Admin/ManageUsers/index.vue b/frontend/src/pages/Admin/ManageUsers/index.vue
index d6425d68b..6d4609bd7 100644
--- a/frontend/src/pages/Admin/ManageUsers/index.vue
+++ b/frontend/src/pages/Admin/ManageUsers/index.vue
@@ -1,9 +1,226 @@
- Manage Users
+
+
+
+ Mealie Users
+
+
+
+
+
+ Create User
+
+
+
+
+
+ mdi-account
+
+
+
+ {{ formTitle }}
+
+
+
+
+ User ID: {{ editedItem.id }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+
+
+ Save
+
+
+
+
+
+
+
+
+
+
+ mdi-delete
+
+ Delete
+
+
+
+ mdi-pencil
+
+ Edit
+
+
+
+ {{ item.admin ? "Admin" : "User" }}
+
+
+
+ Reset
+
+
+
\ No newline at end of file
+ methods: {
+ openAvatarPicker() {
+ this.showAvatarPicker = true;
+ },
+ selectAvatar(avatar) {
+ this.form.avatar = avatar;
+ },
+ },
+};
+
\ No newline at end of file
diff --git a/frontend/src/pages/Admin/Settings/index.vue b/frontend/src/pages/Admin/Settings/index.vue
index 2bff3a8d7..13d2bc18f 100644
--- a/frontend/src/pages/Admin/Settings/index.vue
+++ b/frontend/src/pages/Admin/Settings/index.vue
@@ -1,13 +1,54 @@
- Admin Settings
+
+
+ {{ $t("settings.admin-settings") }}
+
+
+
+ {{ $t("settings.local-api") }}
+ mdi-open-in-new
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/routes/admin.js b/frontend/src/routes/admin.js
index 3d5adf947..ee7f47e24 100644
--- a/frontend/src/routes/admin.js
+++ b/frontend/src/routes/admin.js
@@ -1,5 +1,4 @@
import Admin from "@/pages/Admin";
-import General from "@/pages/Admin/General";
import Backup from "@/pages/Admin/Backup";
import Theme from "@/pages/Admin/Theme";
import MealPlanner from "@/pages/Admin/MealPlanner";
@@ -20,10 +19,7 @@ export default {
path: "profile",
component: Profile,
},
- {
- path: "general",
- component: General,
- },
+
{
path: "backups",
component: Backup,
diff --git a/frontend/src/routes/index.js b/frontend/src/routes/index.js
index 914c72b2d..60319b728 100644
--- a/frontend/src/routes/index.js
+++ b/frontend/src/routes/index.js
@@ -11,9 +11,18 @@ import LoginPage from "../pages/LoginPage";
import MealPlanThisWeekPage from "../pages/MealPlanThisWeekPage";
import api from "@/api";
import Admin from "./admin";
+import { store } from "../store/store";
export const routes = [
{ path: "/", name: "home", component: HomePage },
+ {
+ path: "/logout",
+ beforeEnter: (_to, _from, next) => {
+ store.commit("setToken", "");
+ store.commit("setIsLoggedIn", false);
+ next("/");
+ },
+ },
{ path: "/mealie", component: HomePage },
{ path: "/login", component: LoginPage },
{ path: "/debug", component: Debug },
diff --git a/frontend/src/store/modules/userSettings.js b/frontend/src/store/modules/userSettings.js
index 2908837fc..6c97a0e65 100644
--- a/frontend/src/store/modules/userSettings.js
+++ b/frontend/src/store/modules/userSettings.js
@@ -18,6 +18,8 @@ const state = {
activeTheme: {},
darkMode: "system",
isDark: false,
+ isLoggedIn: false,
+ token: "",
};
const mutations = {
@@ -35,6 +37,13 @@ const mutations = {
state.darkMode = payload;
}
},
+ setIsLoggedIn(state, payload) {
+ state.isLoggedIn = payload;
+ },
+ setToken(state, payload) {
+ state.isLoggedIn = true;
+ state.token = payload;
+ },
};
const actions = {
@@ -63,6 +72,8 @@ const getters = {
getActiveTheme: state => state.activeTheme,
getDarkMode: state => state.darkMode,
getIsDark: state => state.isDark,
+ getIsLoggedIn: state => state.isLoggedIn,
+ getToken: state => state.token,
};
export default {
diff --git a/frontend/src/store/store.js b/frontend/src/store/store.js
index 13495c93b..19979f278 100644
--- a/frontend/src/store/store.js
+++ b/frontend/src/store/store.js
@@ -20,8 +20,6 @@ const store = new Vuex.Store({
homePage,
},
state: {
- // Auth
- isLoggedIn: true,
// All Recipe Data Store
recentRecipes: [],
@@ -30,10 +28,6 @@ const store = new Vuex.Store({
},
mutations: {
- setIsLoggedIn(state, payload) {
- state.isLoggedIn = payload;
- },
-
setRecentRecipes(state, payload) {
state.recentRecipes = payload;
},
@@ -62,7 +56,6 @@ const store = new Vuex.Store({
getters: {
getRecentRecipes: state => state.recentRecipes,
getMealPlanCategories: state => state.mealPlanCategories,
- getIsLoggedIn: state => state.isLoggedIn,
},
});