为顶栏所有部件按钮添加独立的位置配置,支持在顶栏、用户下拉菜单、不显示 三种选项间切换,每个按钮可独立设置。 - 新增 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>
136 lines
3.5 KiB
Vue
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>
|