feat: add admin components for input, metrics, tables, and user forms

- Introduced AdminInput component for standardized input fields.
- Created AdminMetricCard for displaying metrics with customizable tones.
- Added AdminPlaceholderTable for loading states in tables.
- Developed AdminSectionCard for consistent section layouts.
- Implemented AdminSectionShell for organizing admin sections.
- Added AdminSelect for dropdown selections with v-model support.
- Created AdminTable for displaying tabular data with loading and empty states.
- Introduced AdminTextarea for multi-line text input.
- Developed AdminUserFormFields for user creation and editing forms.
- Added useAdminPageHeader composable for managing admin page header state.
This commit is contained in:
2026-03-24 07:08:44 +00:00
parent e854c68ad0
commit b60f65e4d1
100 changed files with 9270 additions and 2204 deletions

View File

@@ -64,6 +64,11 @@ const routes: RouteData[] = [
name: "signup",
component: () => import("./auth/signup.vue"),
},
{
path: "ref/:username",
name: "referral-entry",
beforeEnter: (to) => ({ name: "signup", query: { ref: String(to.params.username || "") } }),
},
{
path: "forgot",
name: "forgot",
@@ -177,13 +182,7 @@ const routes: RouteData[] = [
},
{
path: "player",
name: "settings-player",
component: () => import("./settings/PlayerSettings/PlayerSettings.vue"),
meta: {
head: {
title: "Player Settings - Holistream",
},
},
redirect: { name: "settings-player-configs" },
},
{
path: "domains",
@@ -205,6 +204,16 @@ const routes: RouteData[] = [
},
},
},
{
path: "player-configs",
name: "settings-player-configs",
component: () => import("./settings/PlayerConfigs/PlayerConfigs.vue"),
meta: {
head: {
title: "Player Configs - Holistream",
},
},
},
{
path: "danger",
name: "settings-danger",
@@ -215,23 +224,22 @@ const routes: RouteData[] = [
},
},
},
],
},
{
path: "admin",
component: () => import("./admin/Layout.vue"),
meta: { requiresAdmin: true },
redirect: { name: "admin-overview" },
children: [
{ path: "overview", name: "admin-overview", component: () => import("./admin/Overview.vue") },
{ path: "users", name: "admin-users", component: () => import("./admin/Users.vue") },
{ path: "videos", name: "admin-videos", component: () => import("./admin/Videos.vue") },
{ path: "payments", name: "admin-payments", component: () => import("./admin/Payments.vue") },
{ path: "plans", name: "admin-plans", component: () => import("./admin/Plans.vue") },
{ path: "ad-templates", name: "admin-ad-templates", component: () => import("./admin/AdTemplates.vue") },
{ path: "jobs", name: "admin-jobs", component: () => import("./admin/Jobs.vue") },
{ path: "agents", name: "admin-agents", component: () => import("./admin/Agents.vue") },
{ path: "logs", name: "admin-logs", component: () => import("./admin/Logs.vue") },
{
path: "admin",
meta: { requiresAdmin: true },
redirect: { name: "admin-overview" },
children: [
{ path: "users", name: "admin-users", component: () => import("./settings/admin/Users.vue") },
{ path: "videos", name: "admin-videos", component: () => import("./settings/admin/Videos.vue") },
{ path: "payments", name: "admin-payments", component: () => import("./settings/admin/Payments.vue") },
{ path: "plans", name: "admin-plans", component: () => import("./settings/admin/Plans.vue") },
{ path: "ad-templates", name: "admin-ad-templates", component: () => import("./settings/admin/AdTemplates.vue") },
{ path: "player-configs", name: "admin-player-configs", component: () => import("./settings/admin/PlayerConfigs.vue") },
{ path: "jobs", name: "admin-jobs", component: () => import("./settings/admin/Jobs.vue") },
{ path: "agents", name: "admin-agents", component: () => import("./settings/admin/Agents.vue") },
{ path: "logs", name: "admin-logs", component: () => import("./settings/admin/Logs.vue") },
],
},
],
},
],