SettingDrawer.tsx 12.7 KB
Newer Older
V
vben 已提交
1
import { defineComponent, computed, unref } from 'vue';
陈文彬 已提交
2
import { BasicDrawer } from '/@/components/Drawer/index';
V
vben 已提交
3 4 5
import { Divider } from 'ant-design-vue';
import {
  TypePicker,
V
Vben 已提交
6
  ThemeColorPicker,
V
vben 已提交
7 8 9 10 11
  SettingFooter,
  SwitchItem,
  SelectItem,
  InputNumberItem,
} from './components';
V
vben 已提交
12

V
Vben 已提交
13 14
import { AppDarkModeToggle } from '/@/components/Application';

V
vben 已提交
15
import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';
陈文彬 已提交
16

V
vben 已提交
17 18 19 20
import { useRootSetting } from '/@/hooks/setting/useRootSetting';
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
V
vben 已提交
21
import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
V
vben 已提交
22
import { useI18n } from '/@/hooks/web/useI18n';
陈文彬 已提交
23

V
vben 已提交
24
import { baseHandler } from './handler';
V
vben 已提交
25

V
vben 已提交
26 27 28 29
import {
  HandlerEnum,
  contentModeOptions,
  topMenuAlignOptions,
V
vben 已提交
30
  getMenuTriggerOptions,
V
vben 已提交
31
  routerTransitionOptions,
V
vben 已提交
32
  menuTypeList,
33
  mixSidebarTriggerOptions,
V
vben 已提交
34 35
} from './enum';

V
vben 已提交
36 37 38 39 40
import {
  HEADER_PRESET_BG_COLOR_LIST,
  SIDE_BAR_BG_COLOR_LIST,
  APP_PRESET_COLOR_LIST,
} from '/@/settings/designSetting';
陈文彬 已提交
41

V
vben 已提交
42
const { t } = useI18n();
V
vben 已提交
43

陈文彬 已提交
44 45 46
export default defineComponent({
  name: 'SettingDrawer',
  setup(_, { attrs }) {
V
vben 已提交
47 48 49 50 51 52 53 54 55
    const {
      getContentMode,
      getShowFooter,
      getShowBreadCrumb,
      getShowBreadCrumbIcon,
      getShowLogo,
      getFullContent,
      getColorWeak,
      getGrayMode,
V
vben 已提交
56
      getLockTime,
V
Vben 已提交
57
      getShowDarkModeToggle,
V
vben 已提交
58
      getThemeColor,
V
vben 已提交
59
    } = useRootSetting();
陈文彬 已提交
60

V
Vben 已提交
61 62
    const { getOpenPageLoading, getBasicTransition, getEnableTransition, getOpenNProgress } =
      useTransitionSetting();
V
vben 已提交
63

V
vben 已提交
64 65 66 67 68
    const {
      getIsHorizontal,
      getShowMenu,
      getMenuType,
      getTrigger,
V
vben 已提交
69
      getCollapsedShowTitle,
V
vben 已提交
70 71
      getMenuFixed,
      getCollapsed,
V
vben 已提交
72
      getCanDrag,
V
vben 已提交
73 74 75 76 77 78
      getTopMenuAlign,
      getAccordion,
      getMenuWidth,
      getMenuBgColor,
      getIsTopMenu,
      getSplit,
V
vben 已提交
79 80
      getIsMixSidebar,
      getCloseMixSidebarOnChange,
81
      getMixSideTrigger,
82
      getMixSideFixed,
V
vben 已提交
83
    } = useMenuSetting();
陈文彬 已提交
84

V
vben 已提交
85 86 87 88 89 90
    const {
      getShowHeader,
      getFixed: getHeaderFixed,
      getHeaderBgColor,
      getShowSearch,
    } = useHeaderSetting();
陈文彬 已提交
91

V
vben 已提交
92
    const { getShowMultipleTab, getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting();
陈文彬 已提交
93 94

    const getShowMenuRef = computed(() => {
V
vben 已提交
95
      return unref(getShowMenu) && !unref(getIsHorizontal);
陈文彬 已提交
96 97
    });

V
vben 已提交
98 99 100
    function renderSidebar() {
      return (
        <>
V
vben 已提交
101 102 103 104 105 106 107 108 109 110 111
          <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)}
          />
V
vben 已提交
112
        </>
陈文彬 已提交
113 114 115
      );
    }

V
vben 已提交
116
    function renderHeaderTheme() {
V
vben 已提交
117
      return (
V
Vben 已提交
118
        <ThemeColorPicker
V
vben 已提交
119 120 121 122 123 124 125 126 127
          colorList={HEADER_PRESET_BG_COLOR_LIST}
          def={unref(getHeaderBgColor)}
          event={HandlerEnum.HEADER_THEME}
        />
      );
    }

    function renderSiderTheme() {
      return (
V
Vben 已提交
128
        <ThemeColorPicker
V
vben 已提交
129 130 131 132
          colorList={SIDE_BAR_BG_COLOR_LIST}
          def={unref(getMenuBgColor)}
          event={HandlerEnum.MENU_THEME}
        />
V
vben 已提交
133
      );
V
vben 已提交
134 135
    }

V
vben 已提交
136 137
    function renderMainTheme() {
      return (
V
Vben 已提交
138
        <ThemeColorPicker
V
vben 已提交
139 140 141 142 143 144 145
          colorList={APP_PRESET_COLOR_LIST}
          def={unref(getThemeColor)}
          event={HandlerEnum.CHANGE_THEME_COLOR}
        />
      );
    }

陈文彬 已提交
146 147 148 149
    /**
     * @description:
     */
    function renderFeatures() {
V
vben 已提交
150 151 152 153 154 155 156 157
      let triggerDef = unref(getTrigger);

      const triggerOptions = getMenuTriggerOptions(unref(getSplit));
      const some = triggerOptions.some((item) => item.value === triggerDef);
      if (!some) {
        triggerDef = TriggerEnum.FOOTER;
      }

V
vben 已提交
158 159
      return (
        <>
V
vben 已提交
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
          <SwitchItem
            title={t('layout.setting.splitMenu')}
            event={HandlerEnum.MENU_SPLIT}
            def={unref(getSplit)}
            disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX}
          />
          <SwitchItem
            title={t('layout.setting.mixSidebarFixed')}
            event={HandlerEnum.MENU_FIXED_MIX_SIDEBAR}
            def={unref(getMixSideFixed)}
            disabled={!unref(getIsMixSidebar)}
          />

          <SwitchItem
            title={t('layout.setting.closeMixSidebarOnChange')}
            event={HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE}
            def={unref(getCloseMixSidebarOnChange)}
            disabled={!unref(getIsMixSidebar)}
          />
          <SwitchItem
            title={t('layout.setting.menuCollapse')}
            event={HandlerEnum.MENU_COLLAPSED}
            def={unref(getCollapsed)}
            disabled={!unref(getShowMenuRef)}
          />

V
vben 已提交
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
          <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)}
          />
V
vben 已提交
204

V
vben 已提交
205 206 207 208
          <SwitchItem
            title={t('layout.setting.collapseMenuDisplayName')}
            event={HandlerEnum.MENU_COLLAPSED_SHOW_TITLE}
            def={unref(getCollapsedShowTitle)}
V
vben 已提交
209
            disabled={!unref(getShowMenuRef) || !unref(getCollapsed) || unref(getIsMixSidebar)}
V
vben 已提交
210
          />
V
vben 已提交
211

V
vben 已提交
212 213 214 215 216 217 218 219 220 221
          <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)}
V
vben 已提交
222
            disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
V
vben 已提交
223
          />
V
vben 已提交
224 225 226 227 228 229 230
          <SelectItem
            title={t('layout.setting.mixSidebarTrigger')}
            event={HandlerEnum.MENU_TRIGGER_MIX_SIDEBAR}
            def={unref(getMixSideTrigger)}
            options={mixSidebarTriggerOptions}
            disabled={!unref(getIsMixSidebar)}
          />
V
vben 已提交
231 232 233 234 235
          <SelectItem
            title={t('layout.setting.topMenuLayout')}
            event={HandlerEnum.MENU_TOP_ALIGN}
            def={unref(getTopMenuAlign)}
            options={topMenuAlignOptions}
V
vben 已提交
236
            disabled={
V
vben 已提交
237 238 239 240
              !unref(getShowHeader) ||
              unref(getSplit) ||
              (!unref(getIsTopMenu) && !unref(getSplit)) ||
              unref(getIsMixSidebar)
V
vben 已提交
241
            }
V
vben 已提交
242 243 244 245
          />
          <SelectItem
            title={t('layout.setting.menuCollapseButton')}
            event={HandlerEnum.MENU_TRIGGER}
V
vben 已提交
246 247
            def={triggerDef}
            options={triggerOptions}
V
vben 已提交
248
            disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
V
vben 已提交
249 250 251 252 253 254 255 256 257
          />
          <SelectItem
            title={t('layout.setting.contentMode')}
            event={HandlerEnum.CONTENT_MODE}
            def={unref(getContentMode)}
            options={contentModeOptions}
          />
          <InputNumberItem
            title={t('layout.setting.autoScreenLock')}
陈文彬 已提交
258
            min={0}
V
vben 已提交
259 260
            event={HandlerEnum.LOCK_TIME}
            defaultValue={unref(getLockTime)}
陈文彬 已提交
261
            formatter={(value: string) => {
V
vben 已提交
262 263 264
              return parseInt(value) === 0
                ? `0(${t('layout.setting.notAutoScreenLock')})`
                : `${value}${t('layout.setting.minute')}`;
陈文彬 已提交
265 266
            }}
          />
V
vben 已提交
267 268
          <InputNumberItem
            title={t('layout.setting.expandedMenuWidth')}
陈文彬 已提交
269 270 271
            max={600}
            min={100}
            step={10}
V
vben 已提交
272
            event={HandlerEnum.MENU_WIDTH}
陈文彬 已提交
273
            disabled={!unref(getShowMenuRef)}
V
vben 已提交
274
            defaultValue={unref(getMenuWidth)}
陈文彬 已提交
275 276
            formatter={(value: string) => `${parseInt(value)}px`}
          />
V
vben 已提交
277 278
        </>
      );
陈文彬 已提交
279 280 281
    }

    function renderContent() {
V
vben 已提交
282 283
      return (
        <>
V
vben 已提交
284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
          <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)}
          />

V
vben 已提交
304 305 306 307 308 309 310
          <SwitchItem
            title={t('layout.setting.tabsRedoBtn')}
            event={HandlerEnum.TABS_SHOW_REDO}
            def={unref(getShowRedo)}
            disabled={!unref(getShowMultipleTab)}
          />

V
vben 已提交
311 312 313 314 315 316
          <SwitchItem
            title={t('layout.setting.tabsQuickBtn')}
            event={HandlerEnum.TABS_SHOW_QUICK}
            def={unref(getShowQuick)}
            disabled={!unref(getShowMultipleTab)}
          />
V
vben 已提交
317 318 319 320 321 322
          <SwitchItem
            title={t('layout.setting.tabsFoldBtn')}
            event={HandlerEnum.TABS_SHOW_FOLD}
            def={unref(getShowFold)}
            disabled={!unref(getShowMultipleTab)}
          />
V
vben 已提交
323 324 325 326 327 328 329 330 331 332 333 334 335

          <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)}
          />
V
vben 已提交
336 337 338 339 340 341
          <SwitchItem
            title="Logo"
            event={HandlerEnum.SHOW_LOGO}
            def={unref(getShowLogo)}
            disabled={unref(getIsMixSidebar)}
          />
V
vben 已提交
342 343 344 345 346 347 348 349 350 351
          <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)}
          />
V
vben 已提交
352

V
vben 已提交
353 354 355 356 357
          <SwitchItem
            title={t('layout.setting.grayMode')}
            event={HandlerEnum.GRAY_MODE}
            def={unref(getGrayMode)}
          />
V
vben 已提交
358

V
vben 已提交
359 360 361 362 363
          <SwitchItem
            title={t('layout.setting.colorWeak')}
            event={HandlerEnum.COLOR_WEAK}
            def={unref(getColorWeak)}
          />
V
vben 已提交
364 365 366 367
        </>
      );
    }

V
vben 已提交
368
    function renderTransition() {
陈文彬 已提交
369
      return (
V
vben 已提交
370 371 372 373 374 375 376 377 378 379
        <>
          <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)}
陈文彬 已提交
380 381
          />

V
vben 已提交
382 383 384 385
          <SwitchItem
            title={t('layout.setting.switchAnimation')}
            event={HandlerEnum.OPEN_ROUTE_TRANSITION}
            def={unref(getEnableTransition)}
陈文彬 已提交
386
          />
V
vben 已提交
387 388 389 390 391 392 393 394 395

          <SelectItem
            title={t('layout.setting.animationType')}
            event={HandlerEnum.ROUTER_TRANSITION}
            def={unref(getBasicTransition)}
            options={routerTransitionOptions}
            disabled={!unref(getEnableTransition)}
          />
        </>
陈文彬 已提交
396 397
      );
    }
V
vben 已提交
398

陈文彬 已提交
399
    return () => (
V
vben 已提交
400 401 402 403
      <BasicDrawer
        {...attrs}
        title={t('layout.setting.drawerTitle')}
        width={330}
V
vben 已提交
404
        class="setting-drawer"
V
vben 已提交
405
      >
V
Vben 已提交
406
        {unref(getShowDarkModeToggle) && <Divider>{() => t('layout.setting.darkMode')}</Divider>}
V
Vben 已提交
407
        {unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />}
V
vben 已提交
408 409
        <Divider>{() => t('layout.setting.navMode')}</Divider>
        {renderSidebar()}
V
vben 已提交
410 411
        <Divider>{() => t('layout.setting.sysTheme')}</Divider>
        {renderMainTheme()}
V
vben 已提交
412 413 414 415 416 417 418 419 420 421 422 423
        <Divider>{() => t('layout.setting.headerTheme')}</Divider>
        {renderHeaderTheme()}
        <Divider>{() => t('layout.setting.sidebarTheme')}</Divider>
        {renderSiderTheme()}
        <Divider>{() => t('layout.setting.interfaceFunction')}</Divider>
        {renderFeatures()}
        <Divider>{() => t('layout.setting.interfaceDisplay')}</Divider>
        {renderContent()}
        <Divider>{() => t('layout.setting.animation')}</Divider>
        {renderTransition()}
        <Divider />
        <SettingFooter />
陈文彬 已提交
424 425 426 427
      </BasicDrawer>
    );
  },
});