Files
nl-admin-view/packages/effects/layouts/src/widgets/preferences/blocks/layout/widget.vue
金毛88 0cd87c170f feat: 顶栏按钮支持位置选择(header/user-dropdown/none)
为顶栏所有部件按钮添加独立的位置配置,支持在顶栏、用户下拉菜单、不显示
三种选项间切换,每个按钮可独立设置。

- 新增 7 个位置偏好字段:globalSearchButtonPosition、
  themeToggleButtonPosition、languageToggleButtonPosition、
  fullscreenButtonPosition、notificationButtonPosition、
  refreshButtonPosition、timezoneButtonPosition
- 合并 lockScreenButtonPosition、logoutButtonPosition
- header.vue 按位置条件过滤按钮显示
- user-dropdown.vue 新增对应菜单项,支持在用户下拉菜单中显示
- 偏好设置界面仅保留位置选择器(不再需要独立的开关)
- 更新中英文国际化文案

Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com>
2026-07-18 22:46:31 +08:00

136 lines
3.5 KiB
Vue

<script setup lang="ts">
import type { SelectOption } from '@vben/types';
import { computed } from 'vue';
import { $t } from '@vben/locales';
import SelectItem from '../select-item.vue';
defineOptions({
name: 'PreferenceInterfaceControl',
});
const widgetGlobalSearchButtonPosition = defineModel<string>(
'widgetGlobalSearchButtonPosition',
);
const widgetFullscreenButtonPosition = defineModel<string>(
'widgetFullscreenButtonPosition',
);
const widgetLanguageToggleButtonPosition = defineModel<string>(
'widgetLanguageToggleButtonPosition',
);
const widgetNotificationButtonPosition = defineModel<string>(
'widgetNotificationButtonPosition',
);
const widgetThemeToggleButtonPosition = defineModel<string>(
'widgetThemeToggleButtonPosition',
);
const widgetLockScreenButtonPosition = defineModel<string>(
'widgetLockScreenButtonPosition',
);
const widgetLogoutButtonPosition = defineModel<string>(
'widgetLogoutButtonPosition',
);
const appPreferencesButtonPosition = defineModel<string>(
'appPreferencesButtonPosition',
);
const widgetRefreshButtonPosition = defineModel<string>(
'widgetRefreshButtonPosition',
);
const widgetTimezoneButtonPosition = defineModel<string>(
'widgetTimezoneButtonPosition',
);
const positionItems = computed((): SelectOption[] => [
{
label: $t('preferences.position.auto'),
value: 'auto',
},
{
label: $t('preferences.position.header'),
value: 'header',
},
{
label: $t('preferences.position.fixed'),
value: 'fixed',
},
{
label: $t('preferences.position.userDropdown'),
value: 'user-dropdown',
},
]);
const buttonPositionItems = computed((): SelectOption[] => [
{
label: $t('preferences.widget.header'),
value: 'header',
},
{
label: $t('preferences.widget.userDropdown'),
value: 'user-dropdown',
},
{
label: $t('common.notShow'),
value: 'none',
},
]);
</script>
<template>
<SelectItem
v-model="widgetGlobalSearchButtonPosition"
:items="buttonPositionItems"
>
{{ $t('preferences.widget.globalSearchPosition') }}
</SelectItem>
<SelectItem
v-model="widgetThemeToggleButtonPosition"
:items="buttonPositionItems"
>
{{ $t('preferences.widget.themeTogglePosition') }}
</SelectItem>
<SelectItem
v-model="widgetLanguageToggleButtonPosition"
:items="buttonPositionItems"
>
{{ $t('preferences.widget.languageTogglePosition') }}
</SelectItem>
<SelectItem
v-model="widgetFullscreenButtonPosition"
:items="buttonPositionItems"
>
{{ $t('preferences.widget.fullscreenPosition') }}
</SelectItem>
<SelectItem
v-model="widgetNotificationButtonPosition"
:items="buttonPositionItems"
>
{{ $t('preferences.widget.notificationPosition') }}
</SelectItem>
<SelectItem
v-model="widgetLockScreenButtonPosition"
:items="buttonPositionItems"
>
{{ $t('preferences.widget.lockScreenPosition') }}
</SelectItem>
<SelectItem v-model="widgetLogoutButtonPosition" :items="buttonPositionItems">
{{ $t('preferences.widget.logoutButtonPosition') }}
</SelectItem>
<SelectItem
v-model="widgetRefreshButtonPosition"
:items="buttonPositionItems"
>
{{ $t('preferences.widget.refreshPosition') }}
</SelectItem>
<SelectItem
v-model="widgetTimezoneButtonPosition"
:items="buttonPositionItems"
>
{{ $t('preferences.widget.timezonePosition') }}
</SelectItem>
<SelectItem v-model="appPreferencesButtonPosition" :items="positionItems">
{{ $t('preferences.position.title') }}
</SelectItem>
</template>