vue-vben-admin/src/layouts/default/setting/SettingDrawer.tsx

385 lines
11 KiB
TypeScript
Raw Normal View History

import { defineComponent, computed, unref } from 'vue';
2020-09-28 20:19:10 +08:00
import { BasicDrawer } from '/@/components/Drawer/index';
import { Divider } from 'ant-design-vue';
import {
TypePicker,
ThemePicker,
SettingFooter,
SwitchItem,
SelectItem,
InputNumberItem,
} from './components';
2020-11-24 22:59:29 +08:00
2020-12-17 00:20:29 +08:00
import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';
2020-09-28 20:19:10 +08:00
2020-11-24 22:59:29 +08:00
import { useRootSetting } from '/@/hooks/setting/useRootSetting';
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
2020-11-25 00:43:33 +08:00
import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
2020-11-25 23:20:30 +08:00
import { useI18n } from '/@/hooks/web/useI18n';
2020-09-28 20:19:10 +08:00
2020-11-10 22:45:39 +08:00
import { baseHandler } from './handler';
2020-11-24 22:59:29 +08:00
2020-11-10 22:45:39 +08:00
import {
HandlerEnum,
contentModeOptions,
topMenuAlignOptions,
2020-12-17 00:20:29 +08:00
getMenuTriggerOptions,
2020-11-10 22:45:39 +08:00
routerTransitionOptions,
2020-11-24 22:59:29 +08:00
menuTypeList,
} from './enum';
import { HEADER_PRESET_BG_COLOR_LIST, SIDE_BAR_BG_COLOR_LIST } from '/@/settings/colorSetting';
2020-09-28 20:19:10 +08:00
2020-12-01 23:51:39 +08:00
const { t } = useI18n();
2020-11-24 22:59:29 +08:00
2020-09-28 20:19:10 +08:00
export default defineComponent({
name: 'SettingDrawer',
setup(_, { attrs }) {
2020-11-24 22:59:29 +08:00
const {
getContentMode,
getShowFooter,
getShowBreadCrumb,
getShowBreadCrumbIcon,
getShowLogo,
getFullContent,
getColorWeak,
getGrayMode,
getLockTime,
2020-11-24 22:59:29 +08:00
} = useRootSetting();
2020-09-28 20:19:10 +08:00
2020-11-25 00:43:33 +08:00
const {
getOpenPageLoading,
getBasicTransition,
getEnableTransition,
getOpenNProgress,
} = useTransitionSetting();
2020-11-24 22:59:29 +08:00
const {
getIsHorizontal,
getShowMenu,
getMenuType,
getTrigger,
getMenuFixed,
getCollapsed,
2020-11-25 22:28:58 +08:00
getCanDrag,
2020-11-24 22:59:29 +08:00
getTopMenuAlign,
getAccordion,
getMenuWidth,
getMenuBgColor,
getIsTopMenu,
getSplit,
2020-12-21 23:38:16 +08:00
getIsMixSidebar,
getCloseMixSidebarOnChange,
2020-11-24 22:59:29 +08:00
} = useMenuSetting();
2020-09-28 20:19:10 +08:00
2020-12-10 23:58:11 +08:00
const {
getShowHeader,
getFixed: getHeaderFixed,
getHeaderBgColor,
getShowSearch,
} = useHeaderSetting();
2020-09-28 20:19:10 +08:00
2020-12-15 00:13:23 +08:00
const { getShowMultipleTab, getShowQuick, getShowRedo } = useMultipleTabSetting();
2020-09-28 20:19:10 +08:00
const getShowMenuRef = computed(() => {
2020-11-24 22:59:29 +08:00
return unref(getShowMenu) && !unref(getIsHorizontal);
2020-09-28 20:19:10 +08:00
});
2020-11-24 22:59:29 +08:00
function renderSidebar() {
return (
<>
<TypePicker
menuTypeList={menuTypeList}
handler={(item: typeof menuTypeList[0]) => {
baseHandler(HandlerEnum.CHANGE_LAYOUT, {
mode: item.mode,
type: item.type,
split: unref(getIsHorizontal) ? false : undefined,
});
}}
def={unref(getMenuType)}
/>
<SwitchItem
title={t('layout.setting.splitMenu')}
event={HandlerEnum.MENU_SPLIT}
def={unref(getSplit)}
disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX}
/>
2020-12-21 23:38:16 +08:00
<SwitchItem
title={t('layout.setting.closeMixSidebarOnChange')}
event={HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE}
def={unref(getCloseMixSidebarOnChange)}
disabled={!unref(getIsMixSidebar)}
/>
2020-11-24 22:59:29 +08:00
</>
2020-09-28 20:19:10 +08:00
);
}
function renderHeaderTheme() {
2020-11-24 22:59:29 +08:00
return (
<ThemePicker
colorList={HEADER_PRESET_BG_COLOR_LIST}
def={unref(getHeaderBgColor)}
event={HandlerEnum.HEADER_THEME}
/>
);
}
function renderSiderTheme() {
return (
<ThemePicker
colorList={SIDE_BAR_BG_COLOR_LIST}
def={unref(getMenuBgColor)}
event={HandlerEnum.MENU_THEME}
/>
2020-11-24 22:59:29 +08:00
);
2020-11-10 22:45:39 +08:00
}
2020-09-28 20:19:10 +08:00
/**
* @description:
*/
function renderFeatures() {
2020-12-17 00:20:29 +08:00
let triggerDef = unref(getTrigger);
const triggerOptions = getMenuTriggerOptions(unref(getSplit));
const some = triggerOptions.some((item) => item.value === triggerDef);
if (!some) {
triggerDef = TriggerEnum.FOOTER;
}
return (
<>
<SwitchItem
title={t('layout.setting.menuDrag')}
event={HandlerEnum.MENU_HAS_DRAG}
def={unref(getCanDrag)}
disabled={!unref(getShowMenuRef)}
/>
<SwitchItem
title={t('layout.setting.menuSearch')}
event={HandlerEnum.HEADER_SEARCH}
def={unref(getShowSearch)}
disabled={!unref(getShowHeader)}
/>
<SwitchItem
title={t('layout.setting.menuAccordion')}
event={HandlerEnum.MENU_ACCORDION}
def={unref(getAccordion)}
disabled={!unref(getShowMenuRef)}
/>
<SwitchItem
title={t('layout.setting.menuCollapse')}
event={HandlerEnum.MENU_COLLAPSED}
def={unref(getCollapsed)}
2020-12-21 23:38:16 +08:00
disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
/>
2020-12-21 23:38:16 +08:00
<SwitchItem
title={t('layout.setting.fixedHeader')}
event={HandlerEnum.HEADER_FIXED}
def={unref(getHeaderFixed)}
disabled={!unref(getShowHeader)}
/>
<SwitchItem
title={t('layout.setting.fixedSideBar')}
event={HandlerEnum.MENU_FIXED}
def={unref(getMenuFixed)}
2020-12-21 23:38:16 +08:00
disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
/>
<SelectItem
title={t('layout.setting.topMenuLayout')}
event={HandlerEnum.MENU_TOP_ALIGN}
def={unref(getTopMenuAlign)}
options={topMenuAlignOptions}
2020-12-17 00:20:29 +08:00
disabled={
2020-12-21 23:38:16 +08:00
!unref(getShowHeader) ||
unref(getSplit) ||
(!unref(getIsTopMenu) && !unref(getSplit)) ||
unref(getIsMixSidebar)
2020-12-17 00:20:29 +08:00
}
/>
<SelectItem
title={t('layout.setting.menuCollapseButton')}
event={HandlerEnum.MENU_TRIGGER}
2020-12-17 00:20:29 +08:00
def={triggerDef}
options={triggerOptions}
2020-12-21 23:38:16 +08:00
disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
/>
<SelectItem
title={t('layout.setting.contentMode')}
event={HandlerEnum.CONTENT_MODE}
def={unref(getContentMode)}
options={contentModeOptions}
/>
<InputNumberItem
title={t('layout.setting.autoScreenLock')}
2020-09-28 20:19:10 +08:00
min={0}
event={HandlerEnum.LOCK_TIME}
defaultValue={unref(getLockTime)}
2020-09-28 20:19:10 +08:00
formatter={(value: string) => {
return parseInt(value) === 0
? `0(${t('layout.setting.notAutoScreenLock')})`
: `${value}${t('layout.setting.minute')}`;
2020-09-28 20:19:10 +08:00
}}
/>
<InputNumberItem
title={t('layout.setting.expandedMenuWidth')}
2020-09-28 20:19:10 +08:00
max={600}
min={100}
step={10}
event={HandlerEnum.MENU_WIDTH}
2020-09-28 20:19:10 +08:00
disabled={!unref(getShowMenuRef)}
2020-11-24 22:59:29 +08:00
defaultValue={unref(getMenuWidth)}
2020-09-28 20:19:10 +08:00
formatter={(value: string) => `${parseInt(value)}px`}
/>
</>
);
2020-09-28 20:19:10 +08:00
}
function renderContent() {
2020-11-24 22:59:29 +08:00
return (
<>
<SwitchItem
title={t('layout.setting.breadcrumb')}
event={HandlerEnum.SHOW_BREADCRUMB}
def={unref(getShowBreadCrumb)}
disabled={!unref(getShowHeader)}
/>
<SwitchItem
title={t('layout.setting.breadcrumbIcon')}
event={HandlerEnum.SHOW_BREADCRUMB_ICON}
def={unref(getShowBreadCrumbIcon)}
disabled={!unref(getShowHeader)}
/>
<SwitchItem
title={t('layout.setting.tabs')}
event={HandlerEnum.TABS_SHOW}
def={unref(getShowMultipleTab)}
/>
2020-12-15 00:13:23 +08:00
<SwitchItem
title={t('layout.setting.tabsRedoBtn')}
event={HandlerEnum.TABS_SHOW_REDO}
def={unref(getShowRedo)}
disabled={!unref(getShowMultipleTab)}
/>
<SwitchItem
title={t('layout.setting.tabsQuickBtn')}
event={HandlerEnum.TABS_SHOW_QUICK}
def={unref(getShowQuick)}
disabled={!unref(getShowMultipleTab)}
/>
<SwitchItem
title={t('layout.setting.sidebar')}
event={HandlerEnum.MENU_SHOW_SIDEBAR}
def={unref(getShowMenu)}
disabled={unref(getIsHorizontal)}
/>
<SwitchItem
title={t('layout.setting.header')}
event={HandlerEnum.HEADER_SHOW}
def={unref(getShowHeader)}
/>
2020-12-21 23:38:16 +08:00
<SwitchItem
title="Logo"
event={HandlerEnum.SHOW_LOGO}
def={unref(getShowLogo)}
disabled={unref(getIsMixSidebar)}
/>
<SwitchItem
title={t('layout.setting.footer')}
event={HandlerEnum.SHOW_FOOTER}
def={unref(getShowFooter)}
/>
<SwitchItem
title={t('layout.setting.fullContent')}
event={HandlerEnum.FULL_CONTENT}
def={unref(getFullContent)}
/>
2020-11-24 22:59:29 +08:00
<SwitchItem
title={t('layout.setting.grayMode')}
event={HandlerEnum.GRAY_MODE}
def={unref(getGrayMode)}
/>
2020-11-24 22:59:29 +08:00
<SwitchItem
title={t('layout.setting.colorWeak')}
event={HandlerEnum.COLOR_WEAK}
def={unref(getColorWeak)}
/>
2020-11-24 22:59:29 +08:00
</>
);
}
function renderTransition() {
2020-09-28 20:19:10 +08:00
return (
<>
<SwitchItem
title={t('layout.setting.progress')}
event={HandlerEnum.OPEN_PROGRESS}
def={unref(getOpenNProgress)}
/>
<SwitchItem
title={t('layout.setting.switchLoading')}
event={HandlerEnum.OPEN_PAGE_LOADING}
def={unref(getOpenPageLoading)}
2020-09-28 20:19:10 +08:00
/>
<SwitchItem
title={t('layout.setting.switchAnimation')}
event={HandlerEnum.OPEN_ROUTE_TRANSITION}
def={unref(getEnableTransition)}
2020-09-28 20:19:10 +08:00
/>
<SelectItem
title={t('layout.setting.animationType')}
event={HandlerEnum.ROUTER_TRANSITION}
def={unref(getBasicTransition)}
options={routerTransitionOptions}
disabled={!unref(getEnableTransition)}
/>
</>
2020-09-28 20:19:10 +08:00
);
}
2020-11-10 22:45:39 +08:00
2020-09-28 20:19:10 +08:00
return () => (
2020-12-01 23:51:39 +08:00
<BasicDrawer
{...attrs}
title={t('layout.setting.drawerTitle')}
width={330}
wrapClassName="setting-drawer"
>
2020-09-28 20:19:10 +08:00
{{
default: () => (
<>
2020-12-01 23:51:39 +08:00
<Divider>{() => t('layout.setting.navMode')}</Divider>
2020-09-28 20:19:10 +08:00
{renderSidebar()}
<Divider>{() => t('layout.setting.headerTheme')}</Divider>
{renderHeaderTheme()}
<Divider>{() => t('layout.setting.sidebarTheme')}</Divider>
{renderSiderTheme()}
2020-12-01 23:51:39 +08:00
<Divider>{() => t('layout.setting.interfaceFunction')}</Divider>
2020-09-28 20:19:10 +08:00
{renderFeatures()}
2020-12-01 23:51:39 +08:00
<Divider>{() => t('layout.setting.interfaceDisplay')}</Divider>
2020-09-28 20:19:10 +08:00
{renderContent()}
2020-12-01 23:51:39 +08:00
<Divider>{() => t('layout.setting.animation')}</Divider>
2020-09-28 20:19:10 +08:00
{renderTransition()}
<Divider />
<SettingFooter />
2020-09-28 20:19:10 +08:00
</>
),
}}
</BasicDrawer>
);
},
});