From 72b9bb1383879c609e84e7ee4a9d8fdc33c7c3d1 Mon Sep 17 00:00:00 2001 From: samaradel Date: Tue, 11 Feb 2025 19:56:33 +0200 Subject: [PATCH 01/11] init Admin page --- client/src/router/index.js | 24 +- client/src/services/userService.js | 10 +- client/src/store/UserStore.js | 14 +- client/src/views/Admin.vue | 717 ++++++++---------- .../{tabs => accManagemenTabs}/AuditLogs.vue | 0 .../ChangePassword.vue | 0 .../DeleteAccount.vue | 0 .../{tabs => accManagemenTabs}/Invoices.vue | 0 .../{tabs => accManagemenTabs}/Payments.vue | 0 .../{tabs => accManagemenTabs}/Profile.vue | 0 client/src/views/adminTabs/History.vue | 5 + client/src/views/adminTabs/Requests.vue | 260 +++++++ 12 files changed, 625 insertions(+), 405 deletions(-) rename client/src/views/{tabs => accManagemenTabs}/AuditLogs.vue (100%) rename client/src/views/{tabs => accManagemenTabs}/ChangePassword.vue (100%) rename client/src/views/{tabs => accManagemenTabs}/DeleteAccount.vue (100%) rename client/src/views/{tabs => accManagemenTabs}/Invoices.vue (100%) rename client/src/views/{tabs => accManagemenTabs}/Payments.vue (100%) rename client/src/views/{tabs => accManagemenTabs}/Profile.vue (100%) create mode 100644 client/src/views/adminTabs/History.vue create mode 100644 client/src/views/adminTabs/Requests.vue diff --git a/client/src/router/index.js b/client/src/router/index.js index 2dc44db3..dba083c8 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -5,14 +5,16 @@ import Account from "@/views/Account.vue"; import VM from "@/views/VM.vue"; import Admin from "@/views/Admin.vue"; import NewPassword from "@/views/Newpassword.vue"; -import ProfileTab from "@/views/tabs/Profile.vue"; -import PaymentsTab from "@/views/tabs/Payments.vue"; -import Invoices from "@/views/tabs/Invoices.vue"; -import ChangePassword from "@/views/tabs/ChangePassword.vue"; -import AuditLogs from "@/views/tabs/AuditLogs.vue"; -import DeleteAccount from "@/views/tabs/DeleteAccount.vue"; +import ProfileTab from "@/views/accManagemenTabs/Profile.vue"; +import PaymentsTab from "@/views/accManagemenTabs/Payments.vue"; +import Invoices from "@/views/accManagemenTabs/Invoices.vue"; +import ChangePassword from "@/views/accManagemenTabs/ChangePassword.vue"; +import AuditLogs from "@/views/accManagemenTabs/AuditLogs.vue"; +import DeleteAccount from "@/views/accManagemenTabs/DeleteAccount.vue"; import Deploy from "@/views/Deploy.vue"; import Home from "@/views/HomeWrapper.vue"; +import Requests from "@/views/adminTabs/Requests.vue"; +import History from "@/views/adminTabs/History.vue"; const routes = [ { @@ -149,6 +151,16 @@ const routes = [ layout: "Default", requiresAuth: true, }, + children: [ + { + path: "", + component: Requests, + }, + { + path: "history", + component: History, + }, + ], }, { path: "/logout", diff --git a/client/src/services/userService.js b/client/src/services/userService.js index 37121d18..f1f7be7a 100644 --- a/client/src/services/userService.js +++ b/client/src/services/userService.js @@ -255,7 +255,7 @@ export default { // Deployments async getDeploymentsCount() { - return await authClient().get("/deployment/count"); + return await authClient().get("/deployments/count"); }, // Vouchers @@ -271,8 +271,8 @@ export default { return await authClient().put("/voucher"); }, - async generateVoucher(length, vms, public_ips) { - return await authClient().post("/voucher", { length, vms, public_ips }); + async generateVoucher(balance, length) { + return await authClient().post("/voucher", { balance, length }); }, async getAuditEvents() { @@ -323,8 +323,6 @@ export default { // setting next launch value async setNextLaunch(value) { - return await authClient().put("/nextlaunch", { - launched: value, - }); + return await authClient().put("/nextlaunch", { launched: value }); }, }; diff --git a/client/src/store/UserStore.js b/client/src/store/UserStore.js index d0abd886..e4a1e031 100644 --- a/client/src/store/UserStore.js +++ b/client/src/store/UserStore.js @@ -9,8 +9,7 @@ export const useUserStore = defineStore("userStore", { isLoaded: false, notifications: [], maintenance: false, - next_launch: false, - next_launch_admin: false, + next_launch_admin: true, isAuthenticated: localStorage.getItem("token"), }), actions: { @@ -60,13 +59,21 @@ export const useUserStore = defineStore("userStore", { try { const response = await userService.nextLaunch(); const { launched } = response.data.data; - this.next_launch = launched; this.next_launch_admin = launched; } catch (error) { return error; } }, + async setNextLaunch(value) { + try { + const response = await userService.setNextLaunch(value); + return response + } catch (error) { + return error; + } + }, + async checkMaintenance() { try { const response = await userService.maintenance(); @@ -79,5 +86,6 @@ export const useUserStore = defineStore("userStore", { }, getters: { isUserLoaded: (state) => state.isLoaded, + isNextLaunchEnabled: (state) => state.next_launch_admin, }, }); diff --git a/client/src/views/Admin.vue b/client/src/views/Admin.vue index 5a1c1e22..6682e63d 100644 --- a/client/src/views/Admin.vue +++ b/client/src/views/Admin.vue @@ -1,15 +1,74 @@ - - + --> diff --git a/client/src/views/tabs/AuditLogs.vue b/client/src/views/accManagemenTabs/AuditLogs.vue similarity index 100% rename from client/src/views/tabs/AuditLogs.vue rename to client/src/views/accManagemenTabs/AuditLogs.vue diff --git a/client/src/views/tabs/ChangePassword.vue b/client/src/views/accManagemenTabs/ChangePassword.vue similarity index 100% rename from client/src/views/tabs/ChangePassword.vue rename to client/src/views/accManagemenTabs/ChangePassword.vue diff --git a/client/src/views/tabs/DeleteAccount.vue b/client/src/views/accManagemenTabs/DeleteAccount.vue similarity index 100% rename from client/src/views/tabs/DeleteAccount.vue rename to client/src/views/accManagemenTabs/DeleteAccount.vue diff --git a/client/src/views/tabs/Invoices.vue b/client/src/views/accManagemenTabs/Invoices.vue similarity index 100% rename from client/src/views/tabs/Invoices.vue rename to client/src/views/accManagemenTabs/Invoices.vue diff --git a/client/src/views/tabs/Payments.vue b/client/src/views/accManagemenTabs/Payments.vue similarity index 100% rename from client/src/views/tabs/Payments.vue rename to client/src/views/accManagemenTabs/Payments.vue diff --git a/client/src/views/tabs/Profile.vue b/client/src/views/accManagemenTabs/Profile.vue similarity index 100% rename from client/src/views/tabs/Profile.vue rename to client/src/views/accManagemenTabs/Profile.vue diff --git a/client/src/views/adminTabs/History.vue b/client/src/views/adminTabs/History.vue new file mode 100644 index 00000000..26f8bd91 --- /dev/null +++ b/client/src/views/adminTabs/History.vue @@ -0,0 +1,5 @@ + + + diff --git a/client/src/views/adminTabs/Requests.vue b/client/src/views/adminTabs/Requests.vue new file mode 100644 index 00000000..b21a32c7 --- /dev/null +++ b/client/src/views/adminTabs/Requests.vue @@ -0,0 +1,260 @@ + + + From 3accb0a66c07c570d4dab837083a972dec5fe9a6 Mon Sep 17 00:00:00 2001 From: samaradel Date: Wed, 12 Feb 2025 17:15:25 +0200 Subject: [PATCH 02/11] Add javascript-time-ago package --- client/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/client/package.json b/client/package.json index 2ec624ff..7c864cd4 100644 --- a/client/package.json +++ b/client/package.json @@ -15,6 +15,7 @@ "axios": "^1.7.2", "core-js": "^3.33.2", "file-saver": "^2.0.5", + "javascript-time-ago": "^2.5.11", "jszip": "^3.10.1", "mosha-vue-toastify": "^1.0.23", "pinia": "^2.3.1", From 83e13fd9a9b9f09e0617ae2d4c1daa5d611cce5e Mon Sep 17 00:00:00 2001 From: samaradel Date: Wed, 12 Feb 2025 17:16:45 +0200 Subject: [PATCH 03/11] Calculate balance with voucher balance and display it --- client/src/components/TopupPayment.vue | 17 +++-------------- client/src/layouts/default/AppBar.vue | 4 ++-- client/src/store/UserStore.js | 6 ++++-- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/client/src/components/TopupPayment.vue b/client/src/components/TopupPayment.vue index 7dc643e5..187f770c 100644 --- a/client/src/components/TopupPayment.vue +++ b/client/src/components/TopupPayment.vue @@ -14,7 +14,7 @@ -

${{ balance }}

+

${{ getTotalBalance }}

current balance @@ -111,7 +111,7 @@ diff --git a/client/src/layouts/default/AppBar.vue b/client/src/layouts/default/AppBar.vue index eb253ab6..f49b5346 100644 --- a/client/src/layouts/default/AppBar.vue +++ b/client/src/layouts/default/AppBar.vue @@ -43,7 +43,7 @@ - Balance: ${{ user?.balance }} + Balance: ${{ getTotalBalance }} @@ -26,7 +26,11 @@ import { ref, onMounted } from "vue"; import userService from "@/services/userService"; import Toast from "@/components/Toast.vue"; +import TimeAgo from "javascript-time-ago"; +import en from "javascript-time-ago/locale/en"; +TimeAgo.addLocale(en) +const timeAgo = ref(new TimeAgo("en-US")); const events = ref([]); const toast = ref(null); const loading = ref(false); @@ -41,6 +45,10 @@ const headers = ref([ }, ]); +function convertDate(date) { + return new Date(date); +} + async function getAuditEvents() { loading.value = true; await userService @@ -58,18 +66,6 @@ async function getAuditEvents() { }); } -function formatDate(date) { - var d = new Date(date), - month = "" + (d.getMonth() + 1), - day = "" + d.getDate(), - year = d.getFullYear(); - - if (month.length < 2) month = "0" + month; - if (day.length < 2) day = "0" + day; - - return [day, month, year].join("-"); -} - onMounted(async () => { await getAuditEvents(); }); diff --git a/client/src/views/accManagemenTabs/Invoices.vue b/client/src/views/accManagemenTabs/Invoices.vue index 4f297079..5978b08f 100644 --- a/client/src/views/accManagemenTabs/Invoices.vue +++ b/client/src/views/accManagemenTabs/Invoices.vue @@ -19,7 +19,7 @@ :hide-default-footer="invoices == 0" > +