|
@@ -1,5 +1,5 @@
|
|
|
<script setup lang="ts">
|
|
|
-import { computed, onBeforeUnmount, onMounted, ref, useTemplateRef } from 'vue';
|
|
|
+import { computed, inject, onBeforeUnmount, onMounted, ref, useTemplateRef } from 'vue';
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
import { message } from 'ant-design-vue';
|
|
|
import Simplebar from 'simplebar-vue';
|
|
@@ -10,9 +10,17 @@ import { useRequest } from '@/hooks/request';
|
|
|
import { useUserInfoStore } from '@/stores/user-info';
|
|
|
import { dataCenterRoutes, opsCenterRoutes } from '@/router';
|
|
|
import { t } from '@/i18n';
|
|
|
-import { addRevisePassword, getNoticePageList, getPageList, getUnreadNotifications } from '@/api';
|
|
|
+import {
|
|
|
+ addRevisePassword,
|
|
|
+ getDownloadLogo,
|
|
|
+ getLoginData,
|
|
|
+ getNoticePageList,
|
|
|
+ getPageList,
|
|
|
+ getUnreadNotifications,
|
|
|
+} from '@/api';
|
|
|
import { translateNavigation } from '@/utils';
|
|
|
import { removeToken } from '@/utils/auth';
|
|
|
+import { SET_COLOR_PRIMARY } from '@/constants/inject-key';
|
|
|
|
|
|
import type { RouteRecordRaw } from 'vue-router';
|
|
|
import type { FormInstance, Rule } from 'ant-design-vue/es/form';
|
|
@@ -22,7 +30,7 @@ import type { ChangePasswordForm, DeviceGroupItem, NoticePageItem, PageParams }
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
const { permission, resetToken } = useUserInfoStore();
|
|
|
-
|
|
|
+const setColorPrimary = inject(SET_COLOR_PRIMARY, undefined);
|
|
|
const menuRef = useTemplateRef('menu');
|
|
|
const selectedKeys = ref<string[]>([route.path]);
|
|
|
const openKeys = ref<string[]>([]);
|
|
@@ -31,7 +39,9 @@ const messageOpen = ref<boolean>(false);
|
|
|
const changePasswordOpen = ref<boolean>(false);
|
|
|
const messageList = ref<NoticePageItem[]>([]);
|
|
|
const formRef = ref<FormInstance>();
|
|
|
+const imageUrl = ref<string>();
|
|
|
const modalComponentRef = useTemplateRef('modalComponent');
|
|
|
+const userName = ref<string>('');
|
|
|
const changePasswordForm = ref<ChangePasswordForm>({
|
|
|
rawPassword: '',
|
|
|
oldRawPassword: '',
|
|
@@ -146,6 +156,16 @@ const startTimer = () => {
|
|
|
onMounted(async () => {
|
|
|
try {
|
|
|
const data = await getPageList();
|
|
|
+ const { userName: name, orgLogoPath, orgThemeColor } = await getLoginData();
|
|
|
+ if (orgThemeColor) {
|
|
|
+ setColorPrimary?.(orgThemeColor);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (orgLogoPath) {
|
|
|
+ const data = await getDownloadLogo(orgLogoPath);
|
|
|
+ imageUrl.value = URL.createObjectURL(data as Blob);
|
|
|
+ }
|
|
|
+ userName.value = name[0];
|
|
|
deviceGroupList.value = data.filter((item) => item.deviceGroupChilds.length > 0);
|
|
|
} catch (err) {
|
|
|
if (err instanceof Error) {
|
|
@@ -239,6 +259,7 @@ const confirm = () => {
|
|
|
removeToken();
|
|
|
resetToken();
|
|
|
router.push('/login');
|
|
|
+ setColorPrimary?.('#32BAC0');
|
|
|
modalComponentRef.value?.hideView();
|
|
|
};
|
|
|
|
|
@@ -279,7 +300,8 @@ const bindingPassword = () => {
|
|
|
:width="246"
|
|
|
>
|
|
|
<div class="aside-header">
|
|
|
- <img class="aside-header-logo" src="@/assets/img/logo.png" />
|
|
|
+ <img v-if="imageUrl" class="aside-header-logo" :src="imageUrl" />
|
|
|
+ <img v-else class="aside-header-logo" src="@/assets/img/logo.png" />
|
|
|
<span v-show="!collapsed" class="aside-header-title">{{ $t('common.unimatIoT') }}</span>
|
|
|
</div>
|
|
|
<Simplebar class="aside-scroll">
|
|
@@ -358,7 +380,9 @@ const bindingPassword = () => {
|
|
|
:align="{ offset: [0, -30] }"
|
|
|
:trigger="['click']"
|
|
|
>
|
|
|
- <div class="aside-footer-avatar" @click.prevent></div>
|
|
|
+ <div class="aside-footer-avatar" @click.prevent>
|
|
|
+ <span class="aside-footer-text">{{ userName }}</span>
|
|
|
+ </div>
|
|
|
<template #overlay>
|
|
|
<AMenu>
|
|
|
<AMenuItem>
|
|
@@ -769,13 +793,11 @@ const bindingPassword = () => {
|
|
|
background: var(--antd-color-primary);
|
|
|
border-radius: 50%;
|
|
|
|
|
|
- // 临时使用
|
|
|
- &::before {
|
|
|
+ .aside-footer-text {
|
|
|
font-size: 14px;
|
|
|
font-weight: 500;
|
|
|
line-height: 22px;
|
|
|
color: #fff;
|
|
|
- content: '贾';
|
|
|
}
|
|
|
}
|
|
|
|