Commit 622f9c52dd2a4e3041a23fa7d460e46d61d7da0e

Authored by ww
1 parent bd736be5

fix: DEFECT-1355修复平台定制信息回显不正确

... ... @@ -18,4 +18,5 @@ export interface Platform {
18 18 copyright: string;
19 19 presentedOurselves: string;
20 20 domain: string;
  21 + icon: string;
21 22 }
... ...
... ... @@ -49,13 +49,6 @@
49 49 return userStore.platInfo?.logo;
50 50 });
51 51 const getTitle = computed(() => {
52   - // 设置icon
53   - let link = (document.querySelector("link[rel*='icon']") ||
54   - document.createElement('link')) as HTMLLinkElement;
55   - link.type = 'image/x-icon';
56   - link.rel = 'shortcut icon';
57   - link.href = userStore.platInfo?.icon ?? '/favicon.ico';
58   - document.getElementsByTagName('head')[0].appendChild(link);
59 52 return userStore.platInfo?.name ?? title;
60 53 });
61 54 </script>
... ... @@ -67,6 +60,7 @@
67 60 padding-left: 7px;
68 61 cursor: pointer;
69 62 transition: all 0.2s ease;
  63 +
70 64 &.light {
71 65 border-bottom: 1px solid @border-color-base;
72 66 }
... ...
... ... @@ -35,6 +35,8 @@ export const APP_SESSION_CACHE_KEY = 'COMMON__SESSION__KEY__';
35 35
36 36 export const PLATFORM = 'PLATFORM';
37 37
  38 +export const PLATFORM_INFO_CACHE_KEY = 'PLATFORM_INFO';
  39 +
38 40 export const MENU_LIST = 'MENU_LIST';
39 41 export enum CacheTypeEnum {
40 42 SESSION,
... ...
... ... @@ -71,7 +71,6 @@
71 71
72 72 import { useUserStore } from '/@/store/modules/user';
73 73 import { LoginStateEnum, useLoginState, useFormRules, useFormValid } from './useLogin';
74   - import { useDesign } from '/@/hooks/web/useDesign';
75 74 import { getPlatForm } from '/@/api/oem';
76 75 import { createLocalStorage } from '/@/utils/cache';
77 76
... ... @@ -80,8 +79,7 @@
80 79 const FormItem = Form.Item;
81 80 const InputPassword = Input.Password;
82 81 const { t } = useI18n();
83   - const { notification, createMessage } = useMessage();
84   - const { prefixCls } = useDesign('login');
  82 + const { notification } = useMessage();
85 83 const userStore = useUserStore();
86 84
87 85 const { setLoginState, getLoginState } = useLoginState();
... ... @@ -115,7 +113,7 @@
115 113 username: data.account,
116 114 mode: 'modal', //不要默认的错误提示
117 115 })
118   - .catch((data) => {
  116 + .catch(() => {
119 117 //登录失败返回的html,所以提示框什么都没有
120 118 //去掉提示框
121 119 // createMessage.error(data.message);
... ... @@ -129,13 +127,6 @@
129 127 const res = await getPlatForm();
130 128 storage.set('platformInfo', res);
131 129 userStore.setPlatInfo(res);
132   - // 设置icon
133   - let link = (document.querySelector("link[rel*='icon']") ||
134   - document.createElement('link')) as HTMLLinkElement;
135   - link.type = 'image/x-icon';
136   - link.rel = 'shortcut icon';
137   - link.href = res.icon ?? '/favicon.ico';
138   - document.getElementsByTagName('head')[0].appendChild(link);
139 130
140 131 var _hmt = _hmt || [];
141 132 (function () {
... ...
1 1 <template>
2   - <div
3   - style="background-size: 100% 100%"
4   - :style="{ backgroundImage: 'url(' + (logoUrl !== undefined ? logoUrl : '') + ')' }"
5   - :class="prefixCls"
6   - class="relative w-full h-full px-4"
7   - >
  2 + <div :class="prefixCls" class="relative w-full h-full px-4">
8 3 <AppLocalePicker
9 4 class="absolute text-white top-4 right-4 enter-x xl:text-gray-600"
10 5 :showText="false"
... ... @@ -36,12 +31,8 @@
36 31 {{ defaultTitle }}
37 32 </div>
38 33 </div>
39   - <div v-if="ifCustom" class="my-auto">
40   - <img
41   - :alt="title"
42   - src="../../../assets/svg/thingskit-login-background.svg"
43   - class="w-1/2 -mt-16 -enter-x"
44   - />
  34 + <div v-if="show" class="my-auto">
  35 + <img :alt="title" :src="defaultBackgroundImage" class="w-1/2 -mt-16 -enter-x" />
45 36 <div class="mt-10 font-medium text-white -enter-x">
46 37 <span class="inline-block mt-4 text-3xl"> {{ t('sys.login.signInTitle') }}</span>
47 38 </div>
... ... @@ -67,7 +58,6 @@
67 58 </template>
68 59 <script lang="ts" setup>
69 60 import { ref, onMounted } from 'vue';
70   - // import { AppLogo } from '/@/components/Application';
71 61 import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
72 62 import LoginForm from './LoginForm.vue';
73 63 import ForgetPasswordForm from './ForgetPasswordForm.vue';
... ... @@ -77,13 +67,9 @@
77 67 import { useI18n } from '/@/hooks/web/useI18n';
78 68 import { useDesign } from '/@/hooks/web/useDesign';
79 69 import { useLocaleStore } from '/@/store/modules/locale';
80   - // import { useUserStore } from '/@/store/modules/user';
81   - import { getPlatForm } from '/@/api/oem/index';
82   - import defaultShowLogoImg from '/@/assets/svg/login-bg.svg';
83   - import defaultShowLogoDarkImg from '/@/assets/svg/login-bg-dark.svg';
84 70 import { useTitle } from '@vueuse/core';
85   - import { createLocalStorage } from '/@/utils/cache';
86   - // import {usePlatform} from '/@/views/system/customize/hook/usePlatformInfo'
  71 + import defaultBackgroundImage from '/@/assets/svg/thingskit-login-background.svg';
  72 + import { getPlatFormInfo } from '../../system/customize/hook/usePlatformInfo';
87 73
88 74 defineProps({
89 75 sessionTimeout: {
... ... @@ -93,88 +79,22 @@
93 79 const { title } = useGlobSetting();
94 80 const defaultTitle = ref('');
95 81 const defaultLogo = ref('');
96   - const logoUrl = ref('');
97   - // const userStore = useUserStore();
98   - const storage = createLocalStorage();
99   -
100   - onMounted(async () => {
101   - let res = storage.get('platformInfo');
102   - if (res === '' || res === null) {
103   - res = await getPlatForm();
104   - }
105   - logoUrl.value = res?.background;
106   - defaultTitle.value = res?.name || title;
107   - defaultLogo.value = res?.logo;
108   - let link = (document.querySelector("link[rel*='icon']") ||
109   - document.createElement('link')) as HTMLLinkElement;
110   - link.type = 'image/x-icon';
111   - link.rel = 'shortcut icon';
112   - link.href = res?.icon ?? '/favicon.ico';
113   - document.getElementsByTagName('head')[0].appendChild(link);
114   - let defaultLogoBg = document.createElement('style');
115   - let defaultLogoDarkBg = document.createElement('style');
116   - if (logoUrl.value !== undefined) {
117   - //企业自定义
118   - ifCustom.value = false;
119   - //默认图片
120   - defaultLogoBg.innerHTML = `.vben-login::before{
121   - background-image:url("");
122   - position:absolute;
123   - }`;
124   - //切换黑暗模式图片
125   - defaultLogoDarkBg.innerHTML = `html[data-theme='dark'] .vben-login::before{
126   - background-image:url("");
127   - position:absolute;
128   - }`;
129   - } else {
130   - logoUrl.value = 'url(' + defaultShowLogoImg + ')';
131   - //默认图片
132   - defaultLogoBg.innerHTML = `.vben-login::before{
133   - background-image:url(${defaultShowLogoImg});
134   - position:absolute;
135   - }`;
136   - //切换黑暗模式图片
137   - defaultLogoDarkBg.innerHTML = `html[data-theme='dark'] .vben-login::before{
138   - background-image:url(${defaultShowLogoDarkImg});
139   - position:absolute;
140   - }`;
141   - }
142   - document.head.appendChild(defaultLogoBg);
143   - document.head.appendChild(defaultLogoDarkBg);
144   - });
145 82
146   - // const userStore = useUserStore();
147   -
148   - const ifCustom = ref(true);
149   - // const getLogo = computed(() => {
150   - // return userStore.platInfo?.logo;
151   - // });
152   - // const getTitle = computed(() => {
153   - // // 设置icon
154   - // let link = (document.querySelector("link[rel*='icon']") ||
155   - // document.createElement('link')) as HTMLLinkElement;
156   - // link.type = 'image/x-icon';
157   - // link.rel = 'shortcut icon';
158   - // link.href = userStore.platInfo?.icon ?? '/favicon.ico';
159   - // document.getElementsByTagName('head')[0].appendChild(link);
160   - // // logoUrl.value = userStore.platInfo?.background;
161   - // // if (logoUrl.value !== undefined) {
162   - // // ifCustom.value = false;
163   - // // } else {
164   - // // logoUrl.value = 'url(' + defaultShowLogoImg + ')';
165   - // // }
166   - // return userStore.platInfo?.name ?? title;
167   - // });
168   - // const globSetting = useGlobSetting();
169 83 const { prefixCls } = useDesign('login');
170 84 const { t } = useI18n();
171 85 const localeStore = useLocaleStore();
172 86 const showLocale = localeStore.getShowPicker;
173   - // const title = computed(() => globSetting?.title ?? '');
174 87
175 88 onMounted(() => {
176 89 useTitle('ThingsKit 物联网平台');
177 90 });
  91 +
  92 + const show = ref(false);
  93 +
  94 + onMounted(() => {
  95 + const platform = getPlatFormInfo();
  96 + show.value = !platform.background;
  97 + });
178 98 </script>
179 99 <style lang="less">
180 100 @prefix-cls: ~'@{namespace}-login';
... ...
... ... @@ -71,7 +71,6 @@
71 71
72 72 import { useUserStore } from '/@/store/modules/user';
73 73 import { LoginStateEnum, useLoginState, useFormRules, useFormValid } from './useLogin';
74   - import { useDesign } from '/@/hooks/web/useDesign';
75 74 import { getPlatForm } from '/@/api/oem';
76 75 import { createLocalStorage, createSessionStorage } from '/@/utils/cache';
77 76
... ... @@ -81,7 +80,6 @@
81 80 const InputPassword = Input.Password;
82 81 const { t } = useI18n();
83 82 const { notification, createMessage } = useMessage();
84   - const { prefixCls } = useDesign('login');
85 83 const userStore = useUserStore();
86 84
87 85 const { setLoginState, getLoginState } = useLoginState();
... ... @@ -137,13 +135,6 @@
137 135 const res = await getPlatForm();
138 136 storage.set('platformInfo', res);
139 137 userStore.setPlatInfo(res);
140   - // 设置icon
141   - let link = (document.querySelector("link[rel*='icon']") ||
142   - document.createElement('link')) as HTMLLinkElement;
143   - link.type = 'image/x-icon';
144   - link.rel = 'shortcut icon';
145   - link.href = res.icon ?? '/favicon.ico';
146   - document.getElementsByTagName('head')[0].appendChild(link);
147 138
148 139 var _hmt = _hmt || [];
149 140 (function () {
... ...
... ... @@ -38,7 +38,7 @@
38 38 >
39 39 </template>
40 40 <template #uploadText>
41   - <div class="box-outline"> 支持.ICON格式,建议尺寸为16*16px </div>
  41 + <div class="box-outline"> 支持.ICO格式,建议尺寸为16*16px </div>
42 42 </template>
43 43 </ContentUploadText>
44 44 </template>
... ... @@ -149,9 +149,10 @@
149 149 }
150 150 }
151 151 const beforeUploadIconPic = (file: FileItem) => {
152   - const isJpgOrPng = file.type === 'image/x-icon';
  152 + console.log(file);
  153 + const isJpgOrPng = file.type === 'image/vnd.microsoft.icon';
153 154 if (!isJpgOrPng) {
154   - createMessage.error('只能上传.icon图片文件!');
  155 + createMessage.error('只能上传.ico图片文件!');
155 156 }
156 157 const isLt2M = (file.size as number) / 1024 < 500;
157 158 if (!isLt2M) {
... ...
1 1 import { getPlatForm } from '/@/api/oem';
2   -import { createLocalStorage } from '/@/utils/cache';
  2 +import lightThemeBgImage from '/@/assets/svg/login-bg.svg';
  3 +import darkThemeBgImage from '/@/assets/svg/login-bg-dark.svg';
  4 +import { createStorage } from '/@/utils/cache';
  5 +import { Platform } from '/@/api/oem/model';
  6 +import { PLATFORM_INFO_CACHE_KEY } from '/@/enums/cacheEnum';
3 7
4 8 enum DefaultPlatform {
5 9 LOGO = '/resource/img/logo.png',
... ... @@ -7,19 +11,15 @@ enum DefaultPlatform {
7 11 ICO = '/favicon.ico',
8 12 }
9 13
  14 +const storage = createStorage();
  15 +
  16 +export const getPlatFormInfo = () => storage.get(PLATFORM_INFO_CACHE_KEY) as Platform;
  17 +export const setPlatFormInfo = (info: Recordable) => storage.set(PLATFORM_INFO_CACHE_KEY, info);
  18 +
10 19 export const usePlatform = async () => {
11   - const platformInfo = await getPlatForm();
12   - const storage = createLocalStorage();
13   - if (
14   - platformInfo === '' ||
15   - platformInfo === null ||
16   - Object.getOwnPropertyNames(platformInfo).length === 0
17   - ) {
18   - storage.set('platformInfo', 1234);
19   - } else {
20   - storage.set('platformInfo', platformInfo);
21   - }
  20 + const platformInfo = (await getPlatForm()) || {};
22 21
  22 + setPlatFormInfo(platformInfo);
23 23 const createLoadingEffect = () => {
24 24 const wrap = document.createElement('div');
25 25 wrap.setAttribute('class', 'app-loading-wrap');
... ... @@ -50,7 +50,7 @@ export const usePlatform = async () => {
50 50 const replaceSiteIco = () => {
51 51 const linkEl = document.querySelectorAll('link[rel*="icon"]');
52 52 linkEl.forEach((item) => {
53   - item.setAttribute('href', platformInfo.logo || DefaultPlatform.ICO);
  53 + item.setAttribute('href', platformInfo.icon || DefaultPlatform.ICO);
54 54 });
55 55 };
56 56
... ... @@ -60,9 +60,31 @@ export const usePlatform = async () => {
60 60 loadingWrapper?.appendChild(createLoadingEffect());
61 61 };
62 62
  63 + const setBackgroundImage = () => {
  64 + const { background } = platformInfo;
  65 + const styleEl = document.createElement('style');
  66 +
  67 + styleEl.innerHTML = `
  68 + .vben-login::before{
  69 + background-image:url("${background || lightThemeBgImage}");
  70 + position:absolute;
  71 + margin-left: ${background ? 0 : '-48%'} !important;
  72 + }
  73 + html[data-theme='dark'] .vben-login::before{
  74 + background-image:url("${background || darkThemeBgImage}");
  75 + position:absolute;
  76 + margin-left: ${background ? 0 : '-48%'} !important;
  77 + }
  78 + `;
  79 +
  80 + console.log(styleEl);
  81 + document.head.appendChild(styleEl);
  82 + };
  83 +
63 84 const bootstrap = () => {
64 85 replaceSiteIco();
65 86 replaceLoadingEffect();
  87 + setBackgroundImage();
66 88 };
67 89
68 90 bootstrap();
... ...
... ... @@ -27,6 +27,8 @@
27 27 import { HistoryTrendModal } from './components/HistoryTrendModal';
28 28 import { useSocket } from '../packages/hook/useSocket';
29 29 import { watch } from 'vue';
  30 + import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  31 + import { ThemeEnum } from '/@/enums/appEnum';
30 32
31 33 const props = defineProps<{
32 34 value?: Recordable;
... ... @@ -72,12 +74,15 @@
72 74
73 75 useSocket(dataSource);
74 76
  77 + const { getDarkMode } = useRootSetting();
75 78 watch(
76 79 getIsSharePage,
77 80 (value) => {
78 81 if (value) {
  82 + console.log(unref(getDarkMode));
79 83 const root = document.querySelector('#app');
80   - (root as HTMLDivElement).style.backgroundColor = '#F5F5F5';
  84 + (root as HTMLDivElement).style.backgroundColor =
  85 + unref(getDarkMode) === ThemeEnum.LIGHT ? '#F5F5F5' : '#1b1b1b';
81 86 }
82 87 },
83 88 { immediate: true }
... ...