Forráskód Böngészése

perf(views): 优化“登陆页”后跳转接口查询支持名称与图片地址

wangshun 1 napja
szülő
commit
8fba423774

+ 6 - 0
src/api/index.ts

@@ -82,6 +82,7 @@ import type {
   ListInfo,
   ListInterfaces,
   ListPhysicalInterfaces,
+  LoginData,
   loginForm,
   LoginUser,
   MonitoringForm,
@@ -389,6 +390,11 @@ export const addRevisePassword = async (params: PasswordParams) => {
   });
 };
 
+export const getLoginData = async () => {
+  const data = await request<LoginData>(apiSys('/sysUser/loginData'));
+  return data;
+};
+
 // 内部用户表
 export const getOrgUsers = async () => {
   const data = await request<UserPageItem[]>(apiSys('/inner/sysUser/orgUsers'));

+ 1 - 0
src/i18n/locales/zh.json

@@ -163,6 +163,7 @@
     "nextStep": "下一步",
     "no": "否",
     "noData": "暂无数据",
+    "noPermission": "暂无权限",
     "noSave": "不保存",
     "note": "备注",
     "off": "关",

+ 30 - 8
src/layout/HvacAside.vue

@@ -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: '贾';
   }
 }
 

+ 6 - 0
src/types/index.ts

@@ -2704,3 +2704,9 @@ export interface PasswordParams {
   rawPassword: string;
   oldRawPassword: string;
 }
+export interface LoginData {
+  userName: string;
+  orgLogoPath: string;
+  orgThemeColor: string;
+  needFirstWizard: boolean;
+}

+ 3 - 3
src/views/login-component/LoginView.vue

@@ -6,7 +6,7 @@ import SvgIcon from '@/components/SvgIcon.vue';
 import { useRequest } from '@/hooks/request';
 import { useUserInfoStore } from '@/stores/user-info';
 import { t } from '@/i18n';
-import { getNeedFirstWizard, getPermIdsByCurrentUser, loginUser } from '@/api';
+import { getLoginData, getPermIdsByCurrentUser, loginUser } from '@/api';
 
 import { setPermission, setToken } from '../../utils/auth';
 
@@ -53,8 +53,8 @@ const addLog = () => {
           setPermission(data);
           savePermission(data);
         }
-        const value = await getNeedFirstWizard();
-        if (value) {
+        const { needFirstWizard } = await getLoginData();
+        if (needFirstWizard) {
           router.push('/first-usage');
         } else {
           router.push('/env-monitor/index');