|
@@ -1,103 +1,190 @@
|
|
|
<template>
|
|
|
- <div class="app admin-area">
|
|
|
- <main-header />
|
|
|
- <div class="tabs is-centered">
|
|
|
- <ul>
|
|
|
- <li
|
|
|
- :class="{ 'is-active': currentTab == 'songs' }"
|
|
|
- ref="songs-tab"
|
|
|
- @click="showTab('songs')"
|
|
|
+ <div class="app">
|
|
|
+ <div class="admin-area">
|
|
|
+ <main-header :hide-logo="true" />
|
|
|
+ <div class="admin-content">
|
|
|
+ <div
|
|
|
+ class="admin-sidebar"
|
|
|
+ :class="{ minimised: !sidebarActive }"
|
|
|
>
|
|
|
- <router-link class="tab songs" to="/admin/songs">
|
|
|
- <i class="material-icons">music_note</i>
|
|
|
- <span> Songs</span>
|
|
|
- </router-link>
|
|
|
- </li>
|
|
|
- <li
|
|
|
- :class="{ 'is-active': currentTab == 'stations' }"
|
|
|
- ref="stations-tab"
|
|
|
- @click="showTab('stations')"
|
|
|
- >
|
|
|
- <router-link class="tab stations" to="/admin/stations">
|
|
|
- <i class="material-icons">radio</i>
|
|
|
- <span> Stations</span>
|
|
|
- </router-link>
|
|
|
- </li>
|
|
|
- <li
|
|
|
- :class="{ 'is-active': currentTab == 'playlists' }"
|
|
|
- ref="playlists-tab"
|
|
|
- @click="showTab('playlists')"
|
|
|
- >
|
|
|
- <router-link class="tab playlists" to="/admin/playlists">
|
|
|
- <i class="material-icons">library_music</i>
|
|
|
- <span> Playlists</span>
|
|
|
- </router-link>
|
|
|
- </li>
|
|
|
- <li
|
|
|
- :class="{ 'is-active': currentTab == 'reports' }"
|
|
|
- ref="reports-tab"
|
|
|
- @click="showTab('reports')"
|
|
|
- >
|
|
|
- <router-link class="tab reports" to="/admin/reports">
|
|
|
- <i class="material-icons">flag</i>
|
|
|
- <span> Reports</span>
|
|
|
- </router-link>
|
|
|
- </li>
|
|
|
- <li
|
|
|
- :class="{ 'is-active': currentTab == 'news' }"
|
|
|
- ref="news-tab"
|
|
|
- @click="showTab('news')"
|
|
|
- >
|
|
|
- <router-link class="tab news" to="/admin/news">
|
|
|
- <i class="material-icons">chrome_reader_mode</i>
|
|
|
- <span> News</span>
|
|
|
- </router-link>
|
|
|
- </li>
|
|
|
- <li
|
|
|
- :class="{ 'is-active': currentTab == 'users' }"
|
|
|
- ref="users-tab"
|
|
|
- @click="showTab('users')"
|
|
|
- >
|
|
|
- <router-link class="tab users" to="/admin/users">
|
|
|
- <i class="material-icons">people</i>
|
|
|
- <span> Users</span>
|
|
|
- </router-link>
|
|
|
- </li>
|
|
|
- <li
|
|
|
- :class="{ 'is-active': currentTab == 'statistics' }"
|
|
|
- ref="statistics-tab"
|
|
|
- @click="showTab('statistics')"
|
|
|
- >
|
|
|
- <router-link class="tab statistics" to="/admin/statistics">
|
|
|
- <i class="material-icons">show_chart</i>
|
|
|
- <span> Statistics</span>
|
|
|
- </router-link>
|
|
|
- </li>
|
|
|
- <li
|
|
|
- :class="{ 'is-active': currentTab == 'punishments' }"
|
|
|
- ref="punishments-tab"
|
|
|
- @click="showTab('punishments')"
|
|
|
- >
|
|
|
- <router-link
|
|
|
- class="tab punishments"
|
|
|
- to="/admin/punishments"
|
|
|
- >
|
|
|
- <i class="material-icons">gavel</i>
|
|
|
- <span> Punishments</span>
|
|
|
- </router-link>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </div>
|
|
|
+ <div class="inner">
|
|
|
+ <div class="top">
|
|
|
+ <router-link class="sidebar-logo" to="/">
|
|
|
+ <img
|
|
|
+ class="full-logo"
|
|
|
+ :src="siteSettings.logo_white"
|
|
|
+ :alt="siteSettings.sitename || `Musare`"
|
|
|
+ />
|
|
|
+ <img
|
|
|
+ class="minimised-logo"
|
|
|
+ :src="siteSettings.logo_small"
|
|
|
+ :alt="siteSettings.sitename[0] || `M`"
|
|
|
+ />
|
|
|
+ </router-link>
|
|
|
+ </div>
|
|
|
+ <div class="bottom">
|
|
|
+ <div
|
|
|
+ class="sidebar-item toggle-sidebar"
|
|
|
+ @click="toggleSidebar()"
|
|
|
+ content="Expand"
|
|
|
+ v-tippy="{ onShow: () => !sidebarActive }"
|
|
|
+ >
|
|
|
+ <i class="material-icons">menu_open</i>
|
|
|
+ <span>Minimise</span>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ v-if="
|
|
|
+ sidebarActive &&
|
|
|
+ currentTab.startsWith('songs')
|
|
|
+ "
|
|
|
+ class="sidebar-item with-children is-active"
|
|
|
+ >
|
|
|
+ <span>
|
|
|
+ <i class="material-icons">music_note</i>
|
|
|
+ <span>Songs</span>
|
|
|
+ </span>
|
|
|
+ <div class="sidebar-item-children">
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item-child"
|
|
|
+ to="/admin/songs"
|
|
|
+ >
|
|
|
+ Songs
|
|
|
+ </router-link>
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item-child"
|
|
|
+ to="/admin/songs/reports"
|
|
|
+ >
|
|
|
+ Reports
|
|
|
+ </router-link>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <router-link
|
|
|
+ v-else
|
|
|
+ class="sidebar-item songs"
|
|
|
+ to="/admin/songs"
|
|
|
+ content="Songs"
|
|
|
+ v-tippy="{
|
|
|
+ theme: 'info',
|
|
|
+ onShow: () => !sidebarActive
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <i class="material-icons">music_note</i>
|
|
|
+ <span>Songs</span>
|
|
|
+ </router-link>
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item stations"
|
|
|
+ to="/admin/stations"
|
|
|
+ content="Stations"
|
|
|
+ v-tippy="{
|
|
|
+ theme: 'info',
|
|
|
+ onShow: () => !sidebarActive
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <i class="material-icons">radio</i>
|
|
|
+ <span>Stations</span>
|
|
|
+ </router-link>
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item playlists"
|
|
|
+ to="/admin/playlists"
|
|
|
+ content="Playlists"
|
|
|
+ v-tippy="{
|
|
|
+ theme: 'info',
|
|
|
+ onShow: () => !sidebarActive
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <i class="material-icons">library_music</i>
|
|
|
+ <span>Playlists</span>
|
|
|
+ </router-link>
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item news"
|
|
|
+ to="/admin/news"
|
|
|
+ content="News"
|
|
|
+ v-tippy="{
|
|
|
+ theme: 'info',
|
|
|
+ onShow: () => !sidebarActive
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <i class="material-icons">chrome_reader_mode</i>
|
|
|
+ <span>News</span>
|
|
|
+ </router-link>
|
|
|
+ <div
|
|
|
+ v-if="
|
|
|
+ sidebarActive &&
|
|
|
+ currentTab.startsWith('users')
|
|
|
+ "
|
|
|
+ class="sidebar-item with-children is-active"
|
|
|
+ >
|
|
|
+ <span>
|
|
|
+ <i class="material-icons">people</i>
|
|
|
+ <span>Users</span>
|
|
|
+ </span>
|
|
|
+ <div class="sidebar-item-children">
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item-child"
|
|
|
+ to="/admin/users"
|
|
|
+ >
|
|
|
+ Users
|
|
|
+ </router-link>
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item-child"
|
|
|
+ to="/admin/users/data-requests"
|
|
|
+ >
|
|
|
+ Data Requests
|
|
|
+ </router-link>
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item-child"
|
|
|
+ to="/admin/users/punishments"
|
|
|
+ >
|
|
|
+ Punishments
|
|
|
+ </router-link>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <router-link
|
|
|
+ v-else
|
|
|
+ class="sidebar-item users"
|
|
|
+ to="/admin/users"
|
|
|
+ content="Users"
|
|
|
+ v-tippy="{
|
|
|
+ theme: 'info',
|
|
|
+ onShow: () => !sidebarActive
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <i class="material-icons">people</i>
|
|
|
+ <span>Users</span>
|
|
|
+ </router-link>
|
|
|
+ <router-link
|
|
|
+ class="sidebar-item statistics"
|
|
|
+ to="/admin/statistics"
|
|
|
+ content="Statistics"
|
|
|
+ v-tippy="{
|
|
|
+ theme: 'info',
|
|
|
+ onShow: () => !sidebarActive
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <i class="material-icons">show_chart</i>
|
|
|
+ <span>Statistics</span>
|
|
|
+ </router-link>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="admin-container">
|
|
|
+ <div class="admin-tab-container">
|
|
|
+ <songs v-if="currentTab == 'songs'" />
|
|
|
+ <reports v-if="currentTab == 'songs/reports'" />
|
|
|
+ <stations v-if="currentTab == 'stations'" />
|
|
|
+ <playlists v-if="currentTab == 'playlists'" />
|
|
|
+ <news v-if="currentTab == 'news'" />
|
|
|
+ <users v-if="currentTab == 'users'" />
|
|
|
+ <punishments v-if="currentTab == 'users/punishments'" />
|
|
|
+ <data-requests
|
|
|
+ v-if="currentTab == 'users/data-requests'"
|
|
|
+ />
|
|
|
+ <statistics v-if="currentTab == 'statistics'" />
|
|
|
+ </div>
|
|
|
|
|
|
- <div class="admin-container">
|
|
|
- <songs v-if="currentTab == 'songs'" />
|
|
|
- <stations v-if="currentTab == 'stations'" />
|
|
|
- <playlists v-if="currentTab == 'playlists'" />
|
|
|
- <reports v-if="currentTab == 'reports'" />
|
|
|
- <news v-if="currentTab == 'news'" />
|
|
|
- <users v-if="currentTab == 'users'" />
|
|
|
- <statistics v-if="currentTab == 'statistics'" />
|
|
|
- <punishments v-if="currentTab == 'punishments'" />
|
|
|
+ <main-footer />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
<floating-box
|
|
@@ -169,8 +256,6 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</floating-box>
|
|
|
-
|
|
|
- <main-footer />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -189,20 +274,28 @@ export default {
|
|
|
MainHeader,
|
|
|
MainFooter,
|
|
|
FloatingBox,
|
|
|
- Songs: defineAsyncComponent(() => import("./tabs/Songs.vue")),
|
|
|
- Stations: defineAsyncComponent(() => import("./tabs/Stations.vue")),
|
|
|
- Playlists: defineAsyncComponent(() => import("./tabs/Playlists.vue")),
|
|
|
- Reports: defineAsyncComponent(() => import("./tabs/Reports.vue")),
|
|
|
- News: defineAsyncComponent(() => import("./tabs/News.vue")),
|
|
|
- Users: defineAsyncComponent(() => import("./tabs/Users.vue")),
|
|
|
- Statistics: defineAsyncComponent(() => import("./tabs/Statistics.vue")),
|
|
|
+ Songs: defineAsyncComponent(() => import("./Songs/index.vue")),
|
|
|
+ Reports: defineAsyncComponent(() => import("./Songs/Reports.vue")),
|
|
|
+ Stations: defineAsyncComponent(() => import("./Stations.vue")),
|
|
|
+ Playlists: defineAsyncComponent(() => import("./Playlists.vue")),
|
|
|
+ News: defineAsyncComponent(() => import("./News.vue")),
|
|
|
+ Users: defineAsyncComponent(() => import("./Users/index.vue")),
|
|
|
+ DataRequests: defineAsyncComponent(() =>
|
|
|
+ import("./Users/DataRequests.vue")
|
|
|
+ ),
|
|
|
Punishments: defineAsyncComponent(() =>
|
|
|
- import("./tabs/Punishments.vue")
|
|
|
- )
|
|
|
+ import("./Users/Punishments.vue")
|
|
|
+ ),
|
|
|
+ Statistics: defineAsyncComponent(() => import("./Statistics.vue"))
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
- currentTab: ""
|
|
|
+ currentTab: "",
|
|
|
+ siteSettings: {
|
|
|
+ logo: "",
|
|
|
+ sitename: ""
|
|
|
+ },
|
|
|
+ sidebarActive: true
|
|
|
};
|
|
|
},
|
|
|
computed: mapGetters({
|
|
@@ -213,9 +306,17 @@ export default {
|
|
|
this.changeTab(route.path);
|
|
|
}
|
|
|
},
|
|
|
- mounted() {
|
|
|
+ async mounted() {
|
|
|
this.changeTab(this.$route.path);
|
|
|
|
|
|
+ this.siteSettings = await lofig.get("siteSettings");
|
|
|
+
|
|
|
+ this.sidebarActive = JSON.parse(
|
|
|
+ localStorage.getItem("admin-sidebar-active")
|
|
|
+ );
|
|
|
+ if (this.sidebarActive === null)
|
|
|
+ this.sidebarActive = !(document.body.clientWidth <= 768);
|
|
|
+
|
|
|
keyboardShortcuts.registerShortcut(
|
|
|
"admin.toggleKeyboardShortcutsHelper",
|
|
|
{
|
|
@@ -256,6 +357,9 @@ export default {
|
|
|
methods: {
|
|
|
changeTab(path) {
|
|
|
switch (path) {
|
|
|
+ case "/admin/songs/reports":
|
|
|
+ this.showTab("songs/reports");
|
|
|
+ break;
|
|
|
case "/admin/songs":
|
|
|
this.showTab("songs");
|
|
|
break;
|
|
@@ -265,21 +369,21 @@ export default {
|
|
|
case "/admin/playlists":
|
|
|
this.showTab("playlists");
|
|
|
break;
|
|
|
- case "/admin/reports":
|
|
|
- this.showTab("reports");
|
|
|
- break;
|
|
|
case "/admin/news":
|
|
|
this.showTab("news");
|
|
|
break;
|
|
|
+ case "/admin/users/data-requests":
|
|
|
+ this.showTab("users/data-requests");
|
|
|
+ break;
|
|
|
+ case "/admin/users/punishments":
|
|
|
+ this.showTab("users/punishments");
|
|
|
+ break;
|
|
|
case "/admin/users":
|
|
|
this.showTab("users");
|
|
|
break;
|
|
|
case "/admin/statistics":
|
|
|
this.showTab("statistics");
|
|
|
break;
|
|
|
- case "/admin/punishments":
|
|
|
- this.showTab("punishments");
|
|
|
- break;
|
|
|
default:
|
|
|
if (path.startsWith("/admin")) {
|
|
|
if (localStorage.getItem("lastAdminPage")) {
|
|
@@ -308,50 +412,236 @@ export default {
|
|
|
},
|
|
|
resetKeyboardShortcutsHelper() {
|
|
|
this.$refs.keyboardShortcutsHelper.resetBox();
|
|
|
+ },
|
|
|
+ toggleSidebar() {
|
|
|
+ this.sidebarActive = !this.sidebarActive;
|
|
|
+ localStorage.setItem("admin-sidebar-active", this.sidebarActive);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
-<style lang="less">
|
|
|
-.christmas-mode .admin-area .christmas-lights {
|
|
|
- top: 102px !important;
|
|
|
-}
|
|
|
+<style lang="less" scoped>
|
|
|
+.night-mode {
|
|
|
+ .main-container .admin-area .admin-sidebar .inner {
|
|
|
+ .top {
|
|
|
+ background-color: var(--dark-grey-3);
|
|
|
+ }
|
|
|
|
|
|
-.main-container .admin-tab,
|
|
|
-.main-container .container {
|
|
|
- .button-row {
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
- flex-wrap: wrap;
|
|
|
- justify-content: center;
|
|
|
- margin-bottom: 5px;
|
|
|
-
|
|
|
- & > .button,
|
|
|
- & > span {
|
|
|
- margin: 5px 0;
|
|
|
- &:not(:first-child) {
|
|
|
- margin-left: 5px;
|
|
|
+ .bottom {
|
|
|
+ background-color: var(--dark-grey-2);
|
|
|
+
|
|
|
+ .sidebar-item {
|
|
|
+ background-color: var(--dark-grey-2);
|
|
|
+ border-color: var(--dark-grey-3);
|
|
|
+ color: var(--white);
|
|
|
+
|
|
|
+ &.with-children .sidebar-item-child {
|
|
|
+ color: var(--white);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-.main-container .admin-container .admin-tab {
|
|
|
- max-width: 1900px;
|
|
|
- margin: 0 auto;
|
|
|
- padding: 0 10px;
|
|
|
-}
|
|
|
-</style>
|
|
|
+.main-container {
|
|
|
+ height: auto;
|
|
|
|
|
|
-<style lang="less" scoped>
|
|
|
-.night-mode {
|
|
|
- .tabs {
|
|
|
- background-color: var(--dark-grey-2);
|
|
|
- border: 0;
|
|
|
+ .admin-area {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ min-height: 100vh;
|
|
|
+
|
|
|
+ .admin-sidebar {
|
|
|
+ display: flex;
|
|
|
+ min-width: 200px;
|
|
|
+ width: 200px;
|
|
|
+
|
|
|
+ .inner {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ max-height: 100vh;
|
|
|
+ overflow-y: auto;
|
|
|
+ width: 100%;
|
|
|
+ max-width: 200px;
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ bottom: 0;
|
|
|
+ left: 0;
|
|
|
+ z-index: 5;
|
|
|
+ box-shadow: @box-shadow;
|
|
|
+
|
|
|
+ .top {
|
|
|
+ display: flex;
|
|
|
+ background-color: var(--primary-color);
|
|
|
+ height: 64px;
|
|
|
+ min-height: 64px;
|
|
|
+
|
|
|
+ .sidebar-logo {
|
|
|
+ font-size: 2.1rem !important;
|
|
|
+ line-height: 38px !important;
|
|
|
+ font-family: Pacifico, cursive;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ img {
|
|
|
+ max-height: 38px;
|
|
|
+ color: var(--primary-color);
|
|
|
+ user-select: none;
|
|
|
+ -webkit-user-drag: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .full-logo {
|
|
|
+ padding: 0 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .minimised-logo {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .bottom {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ flex: 1 0 auto;
|
|
|
+ background-color: var(--white);
|
|
|
+
|
|
|
+ .sidebar-item {
|
|
|
+ display: flex;
|
|
|
+ padding: 0 20px;
|
|
|
+ line-height: 40px;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: var(--primary-color);
|
|
|
+ background-color: var(--white);
|
|
|
+ border-bottom: 1px solid var(--light-grey-2);
|
|
|
+ transition: all 0.2s ease-in-out;
|
|
|
+
|
|
|
+ & > .material-icons {
|
|
|
+ line-height: 40px;
|
|
|
+ margin-right: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover,
|
|
|
+ &:focus,
|
|
|
+ &.router-link-active,
|
|
|
+ &.is-active {
|
|
|
+ filter: brightness(95%);
|
|
|
+ }
|
|
|
+
|
|
|
+ &.toggle-sidebar {
|
|
|
+ cursor: pointer;
|
|
|
+ font-weight: 400;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.with-children {
|
|
|
+ flex-direction: column;
|
|
|
+ & > span {
|
|
|
+ display: flex;
|
|
|
+ line-height: 40px;
|
|
|
|
|
|
- ul {
|
|
|
- border-bottom: 0;
|
|
|
+ & > .material-icons {
|
|
|
+ line-height: 40px;
|
|
|
+ margin-right: 5px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .sidebar-item-children {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.is-active .sidebar-item-children {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+
|
|
|
+ .sidebar-item-child {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ margin-left: 30px;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 30px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.minimised {
|
|
|
+ min-width: 45px;
|
|
|
+ width: 45px;
|
|
|
+
|
|
|
+ .inner {
|
|
|
+ max-width: 45px;
|
|
|
+
|
|
|
+ .top {
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ .full-logo {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .minimised-logo {
|
|
|
+ display: flex;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .sidebar-item {
|
|
|
+ justify-content: center;
|
|
|
+ padding: 0;
|
|
|
+
|
|
|
+ & > span {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .admin-content {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-grow: 1;
|
|
|
+
|
|
|
+ .admin-container {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ flex-grow: 1;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ :deep(.admin-tab-container) {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ flex: 1 0 auto;
|
|
|
+ padding: 10px 10px 20px 10px;
|
|
|
+
|
|
|
+ .admin-tab {
|
|
|
+ max-width: 1900px;
|
|
|
+ margin: 0 auto;
|
|
|
+ padding: 0 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .admin-tab,
|
|
|
+ .container {
|
|
|
+ .button-row {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ justify-content: center;
|
|
|
+ margin-bottom: 5px;
|
|
|
+
|
|
|
+ & > .button,
|
|
|
+ & > span {
|
|
|
+ margin: 5px 0;
|
|
|
+ &:not(:first-child) {
|
|
|
+ margin-left: 5px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -369,87 +659,6 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-.main-container {
|
|
|
- height: auto;
|
|
|
-
|
|
|
- .admin-container {
|
|
|
- flex: 1 0 auto;
|
|
|
- margin-bottom: 20px;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.tabs {
|
|
|
- padding-top: 10px;
|
|
|
- margin-top: -10px;
|
|
|
- background-color: var(--white);
|
|
|
- display: flex;
|
|
|
- line-height: 24px;
|
|
|
- overflow-y: hidden;
|
|
|
- overflow-x: auto;
|
|
|
- margin-bottom: 20px;
|
|
|
- user-select: none;
|
|
|
-
|
|
|
- ul {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- /* -webkit-box-flex: 1; */
|
|
|
- flex-grow: 1;
|
|
|
- flex-shrink: 0;
|
|
|
- justify-content: center;
|
|
|
- border-bottom: 1px solid var(--light-grey-2);
|
|
|
- }
|
|
|
-
|
|
|
- .songs {
|
|
|
- color: var(--primary-color);
|
|
|
- border-color: var(--primary-color);
|
|
|
- }
|
|
|
- .stations {
|
|
|
- color: var(--purple);
|
|
|
- border-color: var(--purple);
|
|
|
- }
|
|
|
- .playlists {
|
|
|
- color: var(--light-purple);
|
|
|
- border-color: var(--light-purple);
|
|
|
- }
|
|
|
- .reports {
|
|
|
- color: var(--yellow);
|
|
|
- border-color: var(--yellow);
|
|
|
- }
|
|
|
- .news {
|
|
|
- color: var(--light-pink);
|
|
|
- border-color: var(--light-pink);
|
|
|
- }
|
|
|
- .users {
|
|
|
- color: var(--dark-pink);
|
|
|
- border-color: var(--dark-pink);
|
|
|
- }
|
|
|
- .statistics {
|
|
|
- color: var(--orange);
|
|
|
- border-color: var(--orange);
|
|
|
- }
|
|
|
- .punishments {
|
|
|
- color: var(--dark-orange);
|
|
|
- border-color: var(--dark-orange);
|
|
|
- }
|
|
|
- .tab {
|
|
|
- transition: all 0.2s ease-in-out;
|
|
|
- font-weight: 500;
|
|
|
- border-bottom: solid 0px;
|
|
|
- padding: 6px 12px;
|
|
|
- display: flex;
|
|
|
- margin-bottom: -1px;
|
|
|
- }
|
|
|
- .tab:hover {
|
|
|
- border-width: 3px;
|
|
|
- transition: all 0.2s ease-in-out;
|
|
|
- font-weight: 600;
|
|
|
- }
|
|
|
- .is-active .tab {
|
|
|
- font-weight: 600;
|
|
|
- border-width: 3px;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
#keyboardShortcutsHelper {
|
|
|
.box-body {
|
|
|
.biggest {
|