vben
authored
|
1
|
import { defineComponent, computed, unref } from 'vue';
|
|
2
|
import { BasicDrawer } from '/@/components/Drawer/index';
|
vben
authored
|
3
4
5
|
import { Divider } from 'ant-design-vue';
import {
TypePicker,
|
Vben
authored
|
6
|
ThemeColorPicker,
|
vben
authored
|
7
8
9
10
11
|
SettingFooter,
SwitchItem,
SelectItem,
InputNumberItem,
} from './components';
|
vben
authored
|
12
|
|
Vben
authored
|
13
14
|
import { AppDarkModeToggle } from '/@/components/Application';
|
vben
authored
|
15
|
import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';
|
|
16
|
|
vben
authored
|
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';
|
vben
authored
|
21
|
import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
|
vben
authored
|
22
|
import { useI18n } from '/@/hooks/web/useI18n';
|
|
23
|
|
vben
authored
|
24
|
import { baseHandler } from './handler';
|
vben
authored
|
25
|
|
vben
authored
|
26
27
28
29
|
import {
HandlerEnum,
contentModeOptions,
topMenuAlignOptions,
|
vben
authored
|
30
|
getMenuTriggerOptions,
|
vben
authored
|
31
|
routerTransitionOptions,
|
vben
authored
|
32
|
menuTypeList,
|
无木成林
authored
|
33
|
mixSidebarTriggerOptions,
|
vben
authored
|
34
35
|
} from './enum';
|
vben
authored
|
36
37
38
39
40
|
import {
HEADER_PRESET_BG_COLOR_LIST,
SIDE_BAR_BG_COLOR_LIST,
APP_PRESET_COLOR_LIST,
} from '/@/settings/designSetting';
|
|
41
|
|
vben
authored
|
42
|
const { t } = useI18n();
|
vben
authored
|
43
|
|
|
44
45
46
|
export default defineComponent({
name: 'SettingDrawer',
setup(_, { attrs }) {
|
vben
authored
|
47
48
49
50
51
52
53
54
55
|
const {
getContentMode,
getShowFooter,
getShowBreadCrumb,
getShowBreadCrumbIcon,
getShowLogo,
getFullContent,
getColorWeak,
getGrayMode,
|
vben
authored
|
56
|
getLockTime,
|
Vben
authored
|
57
|
getShowDarkModeToggle,
|
vben
authored
|
58
|
getThemeColor,
|
vben
authored
|
59
|
} = useRootSetting();
|
|
60
|
|
Vben
authored
|
61
62
|
const { getOpenPageLoading, getBasicTransition, getEnableTransition, getOpenNProgress } =
useTransitionSetting();
|
vben
authored
|
63
64
|
const {
|
vben
authored
|
65
66
67
68
|
getIsHorizontal,
getShowMenu,
getMenuType,
getTrigger,
|
vben
authored
|
69
|
getCollapsedShowTitle,
|
vben
authored
|
70
71
|
getMenuFixed,
getCollapsed,
|
vben
authored
|
72
|
getCanDrag,
|
vben
authored
|
73
74
75
76
77
78
|
getTopMenuAlign,
getAccordion,
getMenuWidth,
getMenuBgColor,
getIsTopMenu,
getSplit,
|
vben
authored
|
79
80
|
getIsMixSidebar,
getCloseMixSidebarOnChange,
|
无木成林
authored
|
81
|
getMixSideTrigger,
|
vben
authored
|
82
|
getMixSideFixed,
|
vben
authored
|
83
|
} = useMenuSetting();
|
|
84
|
|
vben
authored
|
85
86
87
88
89
90
|
const {
getShowHeader,
getFixed: getHeaderFixed,
getHeaderBgColor,
getShowSearch,
} = useHeaderSetting();
|
|
91
|
|
vben
authored
|
92
|
const { getShowMultipleTab, getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting();
|
|
93
94
|
const getShowMenuRef = computed(() => {
|
vben
authored
|
95
|
return unref(getShowMenu) && !unref(getIsHorizontal);
|
|
96
97
|
});
|
vben
authored
|
98
99
100
|
function renderSidebar() {
return (
<>
|
vben
authored
|
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)}
/>
|
vben
authored
|
112
|
</>
|
|
113
114
115
|
);
}
|
vben
authored
|
116
|
function renderHeaderTheme() {
|
vben
authored
|
117
|
return (
|
Vben
authored
|
118
|
<ThemeColorPicker
|
vben
authored
|
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 (
|
Vben
authored
|
128
|
<ThemeColorPicker
|
vben
authored
|
129
130
131
132
|
colorList={SIDE_BAR_BG_COLOR_LIST}
def={unref(getMenuBgColor)}
event={HandlerEnum.MENU_THEME}
/>
|
vben
authored
|
133
|
);
|
vben
authored
|
134
135
|
}
|
vben
authored
|
136
137
|
function renderMainTheme() {
return (
|
Vben
authored
|
138
|
<ThemeColorPicker
|
vben
authored
|
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() {
|
vben
authored
|
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;
}
|
vben
authored
|
158
159
160
|
return (
<>
<SwitchItem
|
vben
authored
|
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
186
|
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)}
/>
<SwitchItem
|
vben
authored
|
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
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)}
/>
|
vben
authored
|
204
|
|
vben
authored
|
205
206
207
208
|
<SwitchItem
title={t('layout.setting.collapseMenuDisplayName')}
event={HandlerEnum.MENU_COLLAPSED_SHOW_TITLE}
def={unref(getCollapsedShowTitle)}
|
vben
authored
|
209
|
disabled={!unref(getShowMenuRef) || !unref(getCollapsed) || unref(getIsMixSidebar)}
|
vben
authored
|
210
|
/>
|
vben
authored
|
211
|
|
vben
authored
|
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)}
|
vben
authored
|
222
|
disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
|
vben
authored
|
223
224
|
/>
<SelectItem
|
vben
authored
|
225
226
227
228
229
230
231
|
title={t('layout.setting.mixSidebarTrigger')}
event={HandlerEnum.MENU_TRIGGER_MIX_SIDEBAR}
def={unref(getMixSideTrigger)}
options={mixSidebarTriggerOptions}
disabled={!unref(getIsMixSidebar)}
/>
<SelectItem
|
vben
authored
|
232
233
234
235
|
title={t('layout.setting.topMenuLayout')}
event={HandlerEnum.MENU_TOP_ALIGN}
def={unref(getTopMenuAlign)}
options={topMenuAlignOptions}
|
vben
authored
|
236
|
disabled={
|
vben
authored
|
237
238
239
240
|
!unref(getShowHeader) ||
unref(getSplit) ||
(!unref(getIsTopMenu) && !unref(getSplit)) ||
unref(getIsMixSidebar)
|
vben
authored
|
241
|
}
|
vben
authored
|
242
243
244
245
|
/>
<SelectItem
title={t('layout.setting.menuCollapseButton')}
event={HandlerEnum.MENU_TRIGGER}
|
vben
authored
|
246
247
|
def={triggerDef}
options={triggerOptions}
|
vben
authored
|
248
|
disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
|
vben
authored
|
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}
|
vben
authored
|
259
260
|
event={HandlerEnum.LOCK_TIME}
defaultValue={unref(getLockTime)}
|
|
261
|
formatter={(value: string) => {
|
vben
authored
|
262
263
264
|
return parseInt(value) === 0
? `0(${t('layout.setting.notAutoScreenLock')})`
: `${value}${t('layout.setting.minute')}`;
|
|
265
266
|
}}
/>
|
vben
authored
|
267
268
|
<InputNumberItem
title={t('layout.setting.expandedMenuWidth')}
|
|
269
270
271
|
max={600}
min={100}
step={10}
|
vben
authored
|
272
|
event={HandlerEnum.MENU_WIDTH}
|
|
273
|
disabled={!unref(getShowMenuRef)}
|
vben
authored
|
274
|
defaultValue={unref(getMenuWidth)}
|
|
275
276
|
formatter={(value: string) => `${parseInt(value)}px`}
/>
|
vben
authored
|
277
278
|
</>
);
|
|
279
280
281
|
}
function renderContent() {
|
vben
authored
|
282
283
|
return (
<>
|
vben
authored
|
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
|
<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)}
/>
<SwitchItem
|
vben
authored
|
305
306
307
308
309
310
311
|
title={t('layout.setting.tabsRedoBtn')}
event={HandlerEnum.TABS_SHOW_REDO}
def={unref(getShowRedo)}
disabled={!unref(getShowMultipleTab)}
/>
<SwitchItem
|
vben
authored
|
312
313
314
315
316
|
title={t('layout.setting.tabsQuickBtn')}
event={HandlerEnum.TABS_SHOW_QUICK}
def={unref(getShowQuick)}
disabled={!unref(getShowMultipleTab)}
/>
|
vben
authored
|
317
318
319
320
321
322
|
<SwitchItem
title={t('layout.setting.tabsFoldBtn')}
event={HandlerEnum.TABS_SHOW_FOLD}
def={unref(getShowFold)}
disabled={!unref(getShowMultipleTab)}
/>
|
vben
authored
|
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)}
/>
|
vben
authored
|
336
337
338
339
340
341
|
<SwitchItem
title="Logo"
event={HandlerEnum.SHOW_LOGO}
def={unref(getShowLogo)}
disabled={unref(getIsMixSidebar)}
/>
|
vben
authored
|
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)}
/>
|
vben
authored
|
352
|
|
vben
authored
|
353
354
355
356
357
|
<SwitchItem
title={t('layout.setting.grayMode')}
event={HandlerEnum.GRAY_MODE}
def={unref(getGrayMode)}
/>
|
vben
authored
|
358
|
|
vben
authored
|
359
360
361
362
363
|
<SwitchItem
title={t('layout.setting.colorWeak')}
event={HandlerEnum.COLOR_WEAK}
def={unref(getColorWeak)}
/>
|
vben
authored
|
364
365
366
367
|
</>
);
}
|
vben
authored
|
368
|
function renderTransition() {
|
|
369
|
return (
|
vben
authored
|
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
|
/>
|
vben
authored
|
382
383
384
385
|
<SwitchItem
title={t('layout.setting.switchAnimation')}
event={HandlerEnum.OPEN_ROUTE_TRANSITION}
def={unref(getEnableTransition)}
|
|
386
|
/>
|
vben
authored
|
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
|
);
}
|
vben
authored
|
398
|
|
|
399
|
return () => (
|
vben
authored
|
400
401
402
403
404
405
|
<BasicDrawer
{...attrs}
title={t('layout.setting.drawerTitle')}
width={330}
wrapClassName="setting-drawer"
>
|
Vben
authored
|
406
|
{unref(getShowDarkModeToggle) && <Divider>{() => t('layout.setting.darkMode')}</Divider>}
|
Vben
authored
|
407
|
{unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />}
|
vben
authored
|
408
409
|
<Divider>{() => t('layout.setting.navMode')}</Divider>
{renderSidebar()}
|
vben
authored
|
410
411
|
<Divider>{() => t('layout.setting.sysTheme')}</Divider>
{renderMainTheme()}
|
vben
authored
|
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>
);
},
});
|