@@ -91,9 +151,31 @@ const leftSlots = computed(() => {
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/packages/effects/layouts/src/basic/layout.vue b/web/packages/effects/layouts/src/basic/layout.vue
index 0e27578..694143c 100644
--- a/web/packages/effects/layouts/src/basic/layout.vue
+++ b/web/packages/effects/layouts/src/basic/layout.vue
@@ -14,12 +14,13 @@ import {
updatePreferences,
usePreferences,
} from '@vben/preferences';
+import { useAccessStore } from '@vben/stores';
import { cloneDeep, mapTree } from '@vben/utils';
import { VbenAdminLayout } from '@vben-core/layout-ui';
import { VbenBackTop, VbenLogo } from '@vben-core/shadcn-ui';
-import Breadcrumb from '../widgets/breadcrumb.vue';
+import { Breadcrumb, CheckUpdates, Preferences } from '../widgets';
import { LayoutContent, LayoutContentSpinner } from './content';
import { Copyright } from './copyright';
import { LayoutFooter } from './footer';
@@ -35,7 +36,7 @@ import { LayoutTabbar } from './tabbar';
defineOptions({ name: 'BasicLayout' });
-const emit = defineEmits<{ clickLogo: [] }>();
+const emit = defineEmits<{ clearPreferencesAndLogout: []; clickLogo: [] }>();
const {
isDark,
@@ -46,9 +47,11 @@ const {
isHeaderMixedNav,
isHeaderSidebarNav,
layout,
+ preferencesButtonPosition,
sidebarCollapsed,
theme,
} = usePreferences();
+const accessStore = useAccessStore();
const { refresh } = useRefresh();
const sidebarTheme = computed(() => {
@@ -144,6 +147,10 @@ function toggleSidebar() {
});
}
+function clearPreferencesAndLogout() {
+ emit('clearPreferencesAndLogout');
+}
+
function clickLogo() {
emit('clickLogo');
}
@@ -264,7 +271,10 @@ const headerSlots = computed(() => {
-
+
{
+
+
+
+
+
+
+
+
+
diff --git a/web/packages/effects/layouts/src/basic/tabbar/tabbar.vue b/web/packages/effects/layouts/src/basic/tabbar/tabbar.vue
index 8e4f33b..5051e09 100644
--- a/web/packages/effects/layouts/src/basic/tabbar/tabbar.vue
+++ b/web/packages/effects/layouts/src/basic/tabbar/tabbar.vue
@@ -1,5 +1,5 @@