问题描述
需要将一个系统,更改一下标题、logo,然后部署成另一个系统,由于不想单独拉出一套代码(单独拉出来后维护成本增加),所以想要动态改变系统标题和图标
解决方案
将项目制造一个入口可以修改项目的名称和logo,后端给了一个上传logo的接口,一个更改项目名称的接口,我上传logo,后端返回给我一个图片链接,我更改项目名称,后端返回一个项目名称,我将项目logo和项目名称存入vuex,并监听vuex里的项目名称和项目logo,一旦项目名称和项目logo发生改变,就可以将项目名称和项目logo实时改掉
关于,如何上传这个逻辑就不写了,直接写如何实时更改项目名称和项目logo,找到项目中的app.vue 文件,动态创建link标签,调用后端接口,获取返回的图片
<template>
<div id="app">
<router-view v-if="isRouterAlive" />
</div>
</template>
<script>
import {config, configKey, logosimg1, syslog1} from "@/api/menu";
import Cookies from "js-cookie";
import {mapGetters} from "vuex";
export default {
name: 'App',
provide () {
return {
reload: this.reload
}
},
data () {
return {
isRouterAlive: true,
link :document.querySelector("link[rel*='icon']")
}
},
created() {
this.getproject()
this.getlogo()
},
computed:{
...mapGetters(['getSetLogol','getSetName']),
setLogo(){
return this.getSetLogol
},
setName() {
return this.getSetName
}
},
watch:{
//每次监听到项目名称和logo改变,就调后端返回项目名称和logo的接口,目的就是为了实时改变项目名
称和logo
setLogo(newUrl){
this.getlogo()
},
setName(newName){
this.getproject()
}
},
methods: {
//获取项目名字
getproject(){
if(Cookies.get('Admin-Token')){
//登录之后
configKey().then((res)=>{
this.$store.dispatch('settings/setName', res.msg)
document.title=res.msg
})
}else {
//登录之前
config().then((res)=>{
this.$store.dispatch('settings/setName', res.msg)
document.title=res.msg
})
}
},
// 获取项目logo
getlogo(){
if(Cookies.get('Admin-Token')){
//登录之后
logosimg1().then((res)=>{
this.$store.dispatch('settings/setLogol', res.msg)
var link = document.querySelector("link[rel*='icon']")
link.href=res.msg
})
}else {
//登录之前
syslog1().then((res)=>{
this.$store.dispatch('settings/setLogol', res.msg)
var link = document.querySelector("link[rel*='icon']")
link.href=res.msg
})
}
},
reload () {
this.isRouterAlive = false
this.$nextTick(function () {
this.isRouterAlive = true
})
}
}
}
</script>
以上代码就能实现动态更改浏览器标题和logo