From 2c59a5cc64d51a73a723b0736bed3ed26719247e Mon Sep 17 00:00:00 2001 From: tommy Date: Fri, 8 May 2026 18:08:29 -0400 Subject: [PATCH 01/13] rebuild moderation as a /moderation route with activity, lookup, moderators, and server-owner tabs Replaces the floating admin panel with a real route. Tabs gate by permission: activity feed with stats, smart lookup that detects steam id / objectid, moderator directory with per-mod drilldown and reverse window, and a new server-owner self-invalidate surface for /so_moderate. Adds cross-page bulk selection with named saved selections, and a recap-confirm step for ban, unban, and reverse actions. --- src/App.vue | 11 +- src/api/offstylesApi.ts | 19 + .../Moderation/AdminModerationPanel.vue | 770 ------------------ src/components/Moderation/ModerationModal.vue | 46 +- .../Moderation/Panel/ActionBadge.vue | 37 + .../Moderation/Panel/ActivityTab.vue | 261 ++++++ .../Moderation/Panel/BulkSelectionTray.vue | 278 +++++++ .../Moderation/Panel/ConfirmActionDialog.vue | 79 ++ src/components/Moderation/Panel/LookupTab.vue | 276 +++++++ .../Moderation/Panel/ModeratorsTab.vue | 318 ++++++++ .../Moderation/Panel/ServerOwnerTab.vue | 160 ++++ src/composables/useBulkSelection.ts | 156 ++++ src/router/index.ts | 5 + src/stores/moderation.ts | 33 +- src/views/ModerationView.vue | 161 ++++ 15 files changed, 1829 insertions(+), 781 deletions(-) delete mode 100644 src/components/Moderation/AdminModerationPanel.vue create mode 100644 src/components/Moderation/Panel/ActionBadge.vue create mode 100644 src/components/Moderation/Panel/ActivityTab.vue create mode 100644 src/components/Moderation/Panel/BulkSelectionTray.vue create mode 100644 src/components/Moderation/Panel/ConfirmActionDialog.vue create mode 100644 src/components/Moderation/Panel/LookupTab.vue create mode 100644 src/components/Moderation/Panel/ModeratorsTab.vue create mode 100644 src/components/Moderation/Panel/ServerOwnerTab.vue create mode 100644 src/composables/useBulkSelection.ts create mode 100644 src/views/ModerationView.vue diff --git a/src/App.vue b/src/App.vue index d548555..1b02572 100644 --- a/src/App.vue +++ b/src/App.vue @@ -2,13 +2,14 @@ import { RouterLink, RouterView } from 'vue-router' import { onMounted } from 'vue' import AuthButton from '@/components/AuthButton.vue' -import AdminModerationPanel from '@/components/Moderation/AdminModerationPanel.vue' import IconDiscord from '@/components/icons/IconDiscord.vue' import IconYoutube from '@/components/icons/IconYoutube.vue' import IconGithub from '@/components/icons/IconGithub.vue' import { useAuth } from '@/stores/auth' +import { useModerationStore } from '@/stores/moderation' const { initAuth } = useAuth() +const moderationStore = useModerationStore() onMounted(async () => { await initAuth() @@ -31,6 +32,11 @@ onMounted(async () => { Map Leaderboards Player Lookup Servers + Moderation @@ -38,9 +44,6 @@ onMounted(async () => { - - -