|
@@ -23,7 +23,13 @@
|
|
|
</div>
|
|
</div>
|
|
|
<template #dropdown>
|
|
<template #dropdown>
|
|
|
<el-dropdown-menu>
|
|
<el-dropdown-menu>
|
|
|
- <el-dropdown-item command="logout">
|
|
|
|
|
|
|
+ <el-dropdown-item command="profile">
|
|
|
|
|
+ <el-icon><UserFilled /></el-icon>个人中心
|
|
|
|
|
+ </el-dropdown-item>
|
|
|
|
|
+ <el-dropdown-item v-if="settingsStore.showSettings" command="setLayout">
|
|
|
|
|
+ <el-icon><Setting /></el-icon>布局设置
|
|
|
|
|
+ </el-dropdown-item>
|
|
|
|
|
+ <el-dropdown-item divided command="logout">
|
|
|
<el-icon><SwitchButton /></el-icon>退出登录
|
|
<el-icon><SwitchButton /></el-icon>退出登录
|
|
|
</el-dropdown-item>
|
|
</el-dropdown-item>
|
|
|
</el-dropdown-menu>
|
|
</el-dropdown-menu>
|
|
@@ -32,6 +38,9 @@
|
|
|
</div>
|
|
</div>
|
|
|
</header>
|
|
</header>
|
|
|
|
|
|
|
|
|
|
+ <!-- 布局设置抽屉(从框架 Navbar 复用) -->
|
|
|
|
|
+ <Settings v-model="showSettingsDrawer" />
|
|
|
|
|
+
|
|
|
<div class="risk-body">
|
|
<div class="risk-body">
|
|
|
<!-- 极简左侧菜单 -->
|
|
<!-- 极简左侧菜单 -->
|
|
|
<aside class="risk-sidebar">
|
|
<aside class="risk-sidebar">
|
|
@@ -70,12 +79,14 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
-import { computed, onMounted } from 'vue';
|
|
|
|
|
|
|
+import { computed, onMounted, ref } from 'vue';
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
import { ElMessageBox } from 'element-plus';
|
|
import { ElMessageBox } from 'element-plus';
|
|
|
import { useUserStore } from '@/store/modules/user';
|
|
import { useUserStore } from '@/store/modules/user';
|
|
|
import { usePermissionStore } from '@/store/modules/permission';
|
|
import { usePermissionStore } from '@/store/modules/permission';
|
|
|
|
|
+import { useSettingsStore } from '@/store/modules/settings';
|
|
|
import { Lock, Bell, ArrowDown, HomeFilled, SwitchButton, Document, Warning, User, UserFilled, Tickets, Connection, Message, WarningFilled, List, Edit, Odometer, Guide, OfficeBuilding, Histogram, Setting, Tools, ChatLineRound, DataLine, Cellphone } from '@element-plus/icons-vue';
|
|
import { Lock, Bell, ArrowDown, HomeFilled, SwitchButton, Document, Warning, User, UserFilled, Tickets, Connection, Message, WarningFilled, List, Edit, Odometer, Guide, OfficeBuilding, Histogram, Setting, Tools, ChatLineRound, DataLine, Cellphone } from '@element-plus/icons-vue';
|
|
|
|
|
+import Settings from '@/layout/components/Settings/index.vue';
|
|
|
import { logout } from '@/api/login';
|
|
import { logout } from '@/api/login';
|
|
|
import { initSSE } from '@/utils/sse';
|
|
import { initSSE } from '@/utils/sse';
|
|
|
|
|
|
|
@@ -83,6 +94,10 @@ const route = useRoute();
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
const userStore = useUserStore();
|
|
const userStore = useUserStore();
|
|
|
const permissionStore = usePermissionStore();
|
|
const permissionStore = usePermissionStore();
|
|
|
|
|
+const settingsStore = useSettingsStore();
|
|
|
|
|
+
|
|
|
|
|
+// 布局设置抽屉开关
|
|
|
|
|
+const showSettingsDrawer = ref(false);
|
|
|
|
|
|
|
|
const userName = computed(() => userStore.nickname || '管理员');
|
|
const userName = computed(() => userStore.nickname || '管理员');
|
|
|
const avatarUrl = computed(() => userStore.avatar || 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png');
|
|
const avatarUrl = computed(() => userStore.avatar || 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png');
|
|
@@ -233,6 +248,10 @@ const handleUserCmd = async (cmd: string) => {
|
|
|
} catch {
|
|
} catch {
|
|
|
// cancel
|
|
// cancel
|
|
|
}
|
|
}
|
|
|
|
|
+ } else if (cmd === 'profile') {
|
|
|
|
|
+ router.push('/user/profile');
|
|
|
|
|
+ } else if (cmd === 'setLayout') {
|
|
|
|
|
+ showSettingsDrawer.value = true;
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|