mirror of https://github.com/halo-dev/halo
				
				
				
			Make login page use custom favicon (#3484)
<!-- Thanks for sending a pull request! Here are some tips for you: 1. 如果这是你的第一次,请阅读我们的贡献指南:<https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>。 1. If this is your first time, please read our contributor guidelines: <https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>. 2. 请根据你解决问题的类型为 Pull Request 添加合适的标签。 2. Please label this pull request according to what type of issue you are addressing, especially if this is a release targeted pull request. 3. 请确保你已经添加并运行了适当的测试。 3. Ensure you have added or ran the appropriate tests for your PR. --> #### What type of PR is this? /kind improvement /area console /area core <!-- 添加其中一个类别: Add one of the following kinds: /kind bug /kind cleanup /kind documentation /kind feature /kind improvement 适当添加其中一个或多个类别(可选): Optionally add one or more of the following kinds if applicable: /kind api-change /kind deprecation /kind failing-test /kind flake /kind regression --> #### What this PR does / why we need it: console 端登陆页使用自定义favicon #### Which issue(s) this PR fixes: <!-- PR 合并时自动关闭 issue。 Automatically closes linked issue when PR is merged. 用法:`Fixes #<issue 号>`,或者 `Fixes (粘贴 issue 完整链接)` Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`. --> Fixes https://github.com/halo-dev/halo/issues/3285 #### Special notes for your reviewer: 在`/actuator/globalinfo`暴露favicon信息,异步获取favicon信息,未获取到数据时浏览器短暂使用默认的`/console/favicon.ico`。 #### Does this PR introduce a user-facing change? <!-- 如果当前 Pull Request 的修改不会造成用户侧的任何变更,在 `release-note` 代码块儿中填写 `NONE`。 否则请填写用户侧能够理解的 Release Note。如果当前 Pull Request 包含破坏性更新(Break Change), Release Note 需要以 `action required` 开头。 If no, just write "NONE" in the release-note block below. If yes, a release note is required: Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required". --> ```release-note console 端登陆页使用自定义favicon ```pull/3498/head
							parent
							
								
									d192b8c956
								
							
						
					
					
						commit
						0384ed7df5
					
				| 
						 | 
				
			
			@ -1,10 +1,11 @@
 | 
			
		|||
<script lang="ts" setup>
 | 
			
		||||
import { RouterView, useRoute } from "vue-router";
 | 
			
		||||
import { computed, watch } from "vue";
 | 
			
		||||
import { computed, watch, ref } from "vue";
 | 
			
		||||
import { useTitle } from "@vueuse/core";
 | 
			
		||||
import { useFavicon } from "@vueuse/core";
 | 
			
		||||
import { useSystemConfigMapStore } from "./stores/system-configmap";
 | 
			
		||||
import { storeToRefs } from "pinia";
 | 
			
		||||
import axios from "axios";
 | 
			
		||||
 | 
			
		||||
const { configMap } = storeToRefs(useSystemConfigMapStore());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -26,16 +27,31 @@ watch(
 | 
			
		|||
 | 
			
		||||
// Favicon
 | 
			
		||||
const defaultFavicon = "/console/favicon.ico";
 | 
			
		||||
const globalInfoFavicon = ref("");
 | 
			
		||||
 | 
			
		||||
(async () => {
 | 
			
		||||
  const { data } = await axios.get(
 | 
			
		||||
    `${import.meta.env.VITE_API_URL}/actuator/globalinfo`,
 | 
			
		||||
    {
 | 
			
		||||
      withCredentials: true,
 | 
			
		||||
    }
 | 
			
		||||
  );
 | 
			
		||||
  if (data?.favicon) {
 | 
			
		||||
    globalInfoFavicon.value = data.favicon;
 | 
			
		||||
  }
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
const favicon = computed(() => {
 | 
			
		||||
  if (!configMap?.value?.data?.["basic"]) {
 | 
			
		||||
    return defaultFavicon;
 | 
			
		||||
  if (configMap?.value?.data?.["basic"]) {
 | 
			
		||||
    const basic = JSON.parse(configMap.value.data["basic"]);
 | 
			
		||||
 | 
			
		||||
    if (basic.favicon) {
 | 
			
		||||
      return basic.favicon;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const basic = JSON.parse(configMap.value.data["basic"]);
 | 
			
		||||
 | 
			
		||||
  if (basic.favicon) {
 | 
			
		||||
    return basic.favicon;
 | 
			
		||||
  if (globalInfoFavicon.value) {
 | 
			
		||||
    return globalInfoFavicon.value;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return defaultFavicon;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@ import run.halo.app.extension.ConfigMap;
 | 
			
		|||
import run.halo.app.infra.ExternalUrlSupplier;
 | 
			
		||||
import run.halo.app.infra.SystemConfigurableEnvironmentFetcher;
 | 
			
		||||
import run.halo.app.infra.SystemSetting;
 | 
			
		||||
import run.halo.app.infra.SystemSetting.Basic;
 | 
			
		||||
import run.halo.app.infra.SystemSetting.Comment;
 | 
			
		||||
import run.halo.app.infra.SystemSetting.User;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +41,7 @@ public class GlobalInfoEndpoint {
 | 
			
		|||
            .ifPresent(configMap -> {
 | 
			
		||||
                handleCommentSetting(info, configMap);
 | 
			
		||||
                handleUserSetting(info, configMap);
 | 
			
		||||
                handleBasicSetting(info, configMap);
 | 
			
		||||
            }));
 | 
			
		||||
 | 
			
		||||
        return info;
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +62,8 @@ public class GlobalInfoEndpoint {
 | 
			
		|||
 | 
			
		||||
        private boolean allowRegistration;
 | 
			
		||||
 | 
			
		||||
        private String favicon;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void handleCommentSetting(GlobalInfo info, ConfigMap configMap) {
 | 
			
		||||
| 
						 | 
				
			
			@ -84,4 +88,11 @@ public class GlobalInfoEndpoint {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void handleBasicSetting(GlobalInfo info, ConfigMap configMap) {
 | 
			
		||||
        var basic = SystemSetting.get(configMap, Basic.GROUP, Basic.class);
 | 
			
		||||
        if (basic != null) {
 | 
			
		||||
            info.setFavicon(basic.getFavicon());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue