+
-
-
-
-
- {{ $gettext('Menu Settings') }}
-
-
-
-
-
- {{
- $gettext(
- 'Settings are saved in the browser and will be reset after clearing the browser cache'
- )
- }}
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/main.ts b/web/src/main.ts
index 429ad179..c1afb4a0 100644
--- a/web/src/main.ts
+++ b/web/src/main.ts
@@ -6,7 +6,7 @@ import { createApp } from 'vue'
import App from './App.vue'
import { setupRouter } from '@/router'
-import { setupStore, useThemeStore } from '@/store'
+import { setupStore, usePermissionStore, useThemeStore } from '@/store'
import { gettext, setCurrent, setupNaiveDiscreteApi } from '@/utils'
import home from '@/api/panel/home'
@@ -26,18 +26,24 @@ async function setupApp() {
const setupPanel = async () => {
const themeStore = useThemeStore()
+ const permissionStore = usePermissionStore()
setCurrent(themeStore.locale)
return new Promise
((resolve) => {
useRequest(home.panel, {
initialData: {
name: import.meta.env.VITE_APP_TITLE,
- locale: 'en'
+ locale: 'en',
+ hidden_menu: [],
+ custom_logo: ''
}
}).onSuccess(async ({ data }: { data: any }) => {
setCurrent(data.locale)
themeStore.setLocale(data.locale)
themeStore.setName(data.name)
+ // 设置隐藏菜单和自定义 Logo
+ themeStore.setLogo(data.custom_logo || '')
+ permissionStore.setHiddenRoutes(data.hidden_menu || [])
resolve()
})
diff --git a/web/src/store/modules/permission/index.ts b/web/src/store/modules/permission/index.ts
index bd67771a..33f1cc5f 100644
--- a/web/src/store/modules/permission/index.ts
+++ b/web/src/store/modules/permission/index.ts
@@ -32,9 +32,10 @@ export const usePermissionStore = defineStore('permission', {
},
resetPermission() {
this.$reset()
+ },
+ /** 设置隐藏的菜单 */
+ setHiddenRoutes(hiddenRoutes: string[]) {
+ this.hiddenRoutes = hiddenRoutes
}
- },
- persist: {
- pick: ['hiddenRoutes']
}
})
diff --git a/web/src/store/modules/theme/index.ts b/web/src/store/modules/theme/index.ts
index eea3c062..ac69d419 100644
--- a/web/src/store/modules/theme/index.ts
+++ b/web/src/store/modules/theme/index.ts
@@ -53,7 +53,13 @@ export const useThemeStore = defineStore('theme', {
/** 设置名称 */
setName(name: string) {
this.name = name
+ },
+ /** 设置 Logo */
+ setLogo(logo: string) {
+ this.logo = logo
}
},
- persist: true
+ persist: {
+ pick: ['isMobile', 'darkMode', 'sider', 'header', 'tab', 'locale', 'name']
+ }
})
diff --git a/web/src/views/setting/IndexView.vue b/web/src/views/setting/IndexView.vue
index 3f3c7543..eecea77d 100644
--- a/web/src/views/setting/IndexView.vue
+++ b/web/src/views/setting/IndexView.vue
@@ -7,7 +7,7 @@ import { NButton } from 'naive-ui'
import { useGettext } from 'vue3-gettext'
import setting from '@/api/panel/setting'
-import { useThemeStore } from '@/store'
+import { usePermissionStore, useThemeStore } from '@/store'
import CreateModal from '@/views/setting/CreateModal.vue'
import SettingBase from '@/views/setting/SettingBase.vue'
import SettingSafe from '@/views/setting/SettingSafe.vue'
@@ -15,6 +15,7 @@ import SettingUser from '@/views/setting/SettingUser.vue'
const { $gettext } = useGettext()
const themeStore = useThemeStore()
+const permissionStore = usePermissionStore()
const currentTab = ref('base')
const createModal = ref(false)
@@ -34,6 +35,8 @@ const { data: model } = useRequest(setting.list, {
bind_ua: [],
website_path: '',
backup_path: '',
+ hidden_menu: [],
+ custom_logo: '',
https: false,
acme: false,
public_ip: [],
@@ -54,6 +57,10 @@ const handleSave = () => {
themeStore.setLocale(model.value.locale)
}
+ // 更新隐藏菜单和自定义 Logo
+ themeStore.setLogo(model.value.custom_logo || '')
+ permissionStore.setHiddenRoutes(model.value.hidden_menu || [])
+
// 如果需要重启,则自动刷新页面
if (data.restart) {
window.$message.info($gettext('Panel is restarting, page will refresh in 5 seconds'))
diff --git a/web/src/views/setting/SettingBase.vue b/web/src/views/setting/SettingBase.vue
index 8372d1cb..daf39ec0 100644
--- a/web/src/views/setting/SettingBase.vue
+++ b/web/src/views/setting/SettingBase.vue
@@ -1,8 +1,14 @@
@@ -48,6 +91,22 @@ const channels = [
+
+
+
+
+
+