feat: 新增新版本提示

This commit is contained in:
jmal 2024-01-29 16:34:18 +08:00
parent 019d392343
commit e757a19737
6 changed files with 64 additions and 17 deletions

View File

@ -17,6 +17,7 @@
</app-link> </app-link>
<div class="right-username">{{showName}}</div> <div class="right-username">{{showName}}</div>
<div class="right-menu"> <div class="right-menu">
<el-badge v-if="newVersion" value="new" class="new-version"/>
<el-dropdown class="avatar-container" trigger="click"> <el-dropdown class="avatar-container" trigger="click">
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<el-avatar :src="avatar ? imageUrl + avatar : defaultAvatar" icon="el-icon-user-solid"></el-avatar> <el-avatar :src="avatar ? imageUrl + avatar : defaultAvatar" icon="el-icon-user-solid"></el-avatar>
@ -29,6 +30,7 @@
:to="resolvePath(route.path)" :to="resolvePath(route.path)"
> >
<el-dropdown-item> <el-dropdown-item>
<el-badge v-if="route.path === '/setting/user' && newVersion" is-dot class="new-version-dot"/>
<svg-icon :icon-class="route.children[0].meta.icon"></svg-icon> <svg-icon :icon-class="route.children[0].meta.icon"></svg-icon>
{{route.children[0].name}} {{route.children[0].name}}
</el-dropdown-item> </el-dropdown-item>
@ -39,7 +41,6 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
</div> </div>
@ -51,7 +52,6 @@ import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger' import Hamburger from '@/components/Hamburger'
import Icon from '@/components/Icon/Icon.vue' import Icon from '@/components/Icon/Icon.vue'
import AppLink from './Sidebar/Link' import AppLink from './Sidebar/Link'
import store from "@/store"
import {isExternal} from "@/utils/validate"; import {isExternal} from "@/utils/validate";
import path from "path"; import path from "path";
@ -74,7 +74,8 @@ export default {
...mapGetters([ ...mapGetters([
'sidebar', 'sidebar',
'avatar', 'avatar',
'showName' 'showName',
'newVersion'
]), ]),
routes() { routes() {
let routes = {} let routes = {}
@ -120,6 +121,16 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.new-version {
position: absolute;
right: 0;
top: 5px;
}
.new-version-dot {
position: absolute;
right: 10px;
top: 5px;
}
.navbar { .navbar {
height: 50px; height: 50px;
overflow: hidden; overflow: hidden;

View File

@ -3,12 +3,10 @@
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)"> <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" /> <el-badge value="new" v-if="item.path === '/setting/cloudManager' && newVersion" class="new-version"/>
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title"/>
</el-menu-item> </el-menu-item>
</app-link> </app-link>
<!-- <el-menu-item v-if="onlyOneChild.path === '/setting/manager-users'">-->
<!-- <item title="sdf"/>-->
<!-- </el-menu-item>-->
</template> </template>
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
@ -28,6 +26,7 @@
</template> </template>
<script> <script>
import { mapGetters } from 'vuex'
import path from 'path' import path from 'path'
import { isExternal } from '@/utils/validate' import { isExternal } from '@/utils/validate'
import Item from './Item' import Item from './Item'
@ -57,6 +56,11 @@ export default {
this.onlyOneChild = null this.onlyOneChild = null
return {} return {}
}, },
computed: {
...mapGetters([
'newVersion'
]),
},
methods: { methods: {
hasOneShowingChild(children = [], parent) { hasOneShowingChild(children = [], parent) {
const showingChildren = children.filter(item => { const showingChildren = children.filter(item => {
@ -94,3 +98,11 @@ export default {
} }
} }
</script> </script>
<style lang="scss" scoped>
.new-version {
float: right;
>>>.el-badge__content {
line-height: 16px;
}
}
</style>

View File

@ -6,6 +6,7 @@ const getters = {
avatar: state => state.user.avatar, avatar: state => state.user.avatar,
name: state => state.user.name, name: state => state.user.name,
showName: state => state.user.showName, showName: state => state.user.showName,
newVersion: state => state.user.newVersion,
userId: state => state.user.userId, userId: state => state.user.userId,
userInfo: state => state.user.userInfo, userInfo: state => state.user.userInfo,
menuList: state => state.user.menuList, menuList: state => state.user.menuList,

View File

@ -35,6 +35,7 @@ const getDefaultState = () => {
menuList: [], menuList: [],
netdiskName: '', netdiskName: '',
netdiskLogo: '', netdiskLogo: '',
newVersion: ''
} }
} }
@ -73,6 +74,9 @@ const mutations = {
}, },
SET_NETDISK_LOGO:(state,netdiskLogo) => { SET_NETDISK_LOGO:(state,netdiskLogo) => {
state.netdiskLogo = netdiskLogo; state.netdiskLogo = netdiskLogo;
},
SET_NEW_VERSION:(state,newVersion) => {
state.newVersion = newVersion;
} }
} }
@ -148,7 +152,7 @@ const actions = {
// reject('Verification failed, please Login again.') // reject('Verification failed, please Login again.')
} }
const { id, username, showName, avatar, netdiskName, netdiskLogo} = data const { id, username, showName, avatar, netdiskName, netdiskLogo, newVersion} = data
commit('SET_NAME', username) commit('SET_NAME', username)
commit('SET_SHOW_NAME', showName) commit('SET_SHOW_NAME', showName)
@ -157,6 +161,11 @@ const actions = {
commit('SET_USER_INFO', data) commit('SET_USER_INFO', data)
commit('SET_NETDISK_NAME', netdiskName) commit('SET_NETDISK_NAME', netdiskName)
commit('SET_NETDISK_LOGO', netdiskLogo) commit('SET_NETDISK_LOGO', netdiskLogo)
if (newVersion) {
commit('SET_NEW_VERSION', newVersion)
} else {
commit('SET_NEW_VERSION', '')
}
setLogo(netdiskName, netdiskLogo) setLogo(netdiskName, netdiskLogo)
sessionStorage.setItem('store', JSON.stringify(state)) sessionStorage.setItem('store', JSON.stringify(state))
resolve(data) resolve(data)

View File

@ -43,7 +43,7 @@
将图片转换为webp格式存储,在不降低图片质量的情况下,极大降低图片文件的体积,建议开启. 将图片转换为webp格式存储,在不降低图片质量的情况下,极大降低图片文件的体积,建议开启.
<a href="https://baike.baidu.com/item/webp%E6%A0%BC%E5%BC%8F" target="_blank">什么是webp?</a> <a href="https://baike.baidu.com/item/webp%E6%A0%BC%E5%BC%8F" target="_blank">什么是webp?</a>
</span> </span>
<div class="config-itme-label">网盘同步: <div class="config-itme-label">重建索引:
<el-button class="sync-button" size="mini" :loading="syncLoading" type="primary" @click="sync()"><i <el-button class="sync-button" size="mini" :loading="syncLoading" type="primary" @click="sync()"><i
class="el-icon-refresh"></i> class="el-icon-refresh"></i>
</el-button> </el-button>
@ -56,6 +56,14 @@
<i class="el-icon-refresh-left"></i></el-button> <i class="el-icon-refresh-left"></i></el-button>
</div> </div>
<span class="instruction">一般用于初始化角色、菜单数据</span> <span class="instruction">一般用于初始化角色、菜单数据</span>
<div class="config-itme-label">当前版本:v{{currentVersion}}
<el-badge v-if="newVersion" value="new" class="item"/>
</div>
<span class="instruction">最新版本:{{newVersion ? newVersion : 'v' + currentVersion}}
<a href="https://github.com/jamebal/jmal-cloud-view/releases" target="_blank">在github上更新</a>
</span>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="LDAP认证" name="2" class="setting-tab-panel"> <el-tab-pane label="LDAP认证" name="2" class="setting-tab-panel">
@ -122,6 +130,7 @@
<script> <script>
import config from '@/../package.json'
import settingApi, {getSetting} from "@/api/setting-api"; import settingApi, {getSetting} from "@/api/setting-api";
import Bus from "@/assets/js/bus"; import Bus from "@/assets/js/bus";
import Logo from "@/components/Logo"; import Logo from "@/components/Logo";
@ -129,6 +138,7 @@ import getPageTitle from "@/utils/get-page-title";
import UploadImageInput from "@/components/input/UploadImageInput.vue"; import UploadImageInput from "@/components/input/UploadImageInput.vue";
import roleApi from "@/api/role"; import roleApi from "@/api/role";
import { loadLdapConfig, testLdapConfig, updateLdapConfig} from '@/api/user' import { loadLdapConfig, testLdapConfig, updateLdapConfig} from '@/api/user'
import {mapGetters} from "vuex";
export default { export default {
components: {UploadImageInput, Logo}, components: {UploadImageInput, Logo},
@ -155,6 +165,7 @@ export default {
password: '', password: '',
loginName: '' loginName: ''
}, },
currentVersion: config.version,
roleList: [], roleList: [],
ldapStatusOptions: [{ ldapStatusOptions: [{
value: true, value: true,
@ -207,6 +218,9 @@ export default {
Bus.$off() Bus.$off()
}, },
computed: { computed: {
...mapGetters([
'newVersion'
]),
ldapTestBtn() { ldapTestBtn() {
return !(this.ldapFormData.ldapServer.length > 0 && this.ldapFormData.baseDN.length > 0 && (this.ldapFormData.password ? this.ldapFormData.password.length > 0 : false)) return !(this.ldapFormData.ldapServer.length > 0 && this.ldapFormData.baseDN.length > 0 && (this.ldapFormData.password ? this.ldapFormData.password.length > 0 : false))
}, },

View File

@ -45,14 +45,14 @@ function connect(username,token){
title: `${doc.operation}成功`, title: `${doc.operation}成功`,
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
message: ` message: `
<div> <div>
<p>form:</p> <p>form:</p>
<pre style="word-break: break-all;white-space: pre-wrap;font-size: 12px;">${doc.from}</pre> <pre style="word-break: break-all;white-space: pre-wrap;font-size: 12px;">${doc.from}</pre>
</div> </div>
<div> <div>
<p>to:</p> <p>to:</p>
<pre style="word-break: break-all;white-space: pre-wrap;font-size: 12px;">${doc.to}</pre> <pre style="word-break: break-all;white-space: pre-wrap;font-size: 12px;">${doc.to}</pre>
</div>`, </div>`,
type: 'success', type: 'success',
}); });
} else { } else {