SettingDrawer.tsx 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. import { defineComponent, computed, unref } from 'vue';
  2. import { BasicDrawer } from '/@/components/Drawer/index';
  3. import { Divider } from 'ant-design-vue';
  4. import {
  5. TypePicker,
  6. ThemeColorPicker,
  7. SettingFooter,
  8. SwitchItem,
  9. SelectItem,
  10. InputNumberItem,
  11. } from './components';
  12. import { AppDarkModeToggle } from '/@/components/Application';
  13. import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';
  14. import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  15. import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
  16. import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
  17. import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
  18. import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
  19. import { useI18n } from '/@/hooks/web/useI18n';
  20. import { baseHandler } from './handler';
  21. import {
  22. HandlerEnum,
  23. contentModeOptions,
  24. topMenuAlignOptions,
  25. getMenuTriggerOptions,
  26. routerTransitionOptions,
  27. menuTypeList,
  28. mixSidebarTriggerOptions,
  29. } from './enum';
  30. // import {
  31. // HEADER_PRESET_BG_COLOR_LIST,
  32. // SIDE_BAR_BG_COLOR_LIST,
  33. // APP_PRESET_COLOR_LIST,
  34. // } from '/@/settings/designSetting';
  35. import { SIDE_BAR_BG_COLOR_LIST } from '/@/settings/designSetting';
  36. const { t } = useI18n();
  37. export default defineComponent({
  38. name: 'SettingDrawer',
  39. setup(_, { attrs }) {
  40. const {
  41. getContentMode,
  42. getShowFooter,
  43. getShowBreadCrumb,
  44. getShowBreadCrumbIcon,
  45. getShowLogo,
  46. getFullContent,
  47. getColorWeak,
  48. getGrayMode,
  49. getLockTime,
  50. getShowDarkModeToggle,
  51. // getThemeColor,
  52. } = useRootSetting();
  53. const { getOpenPageLoading, getBasicTransition, getEnableTransition, getOpenNProgress } =
  54. useTransitionSetting();
  55. const {
  56. getIsHorizontal,
  57. getShowMenu,
  58. getMenuType,
  59. getTrigger,
  60. getCollapsedShowTitle,
  61. getMenuFixed,
  62. getCollapsed,
  63. getCanDrag,
  64. getTopMenuAlign,
  65. getAccordion,
  66. getMenuWidth,
  67. getMenuBgColor,
  68. getIsTopMenu,
  69. getSplit,
  70. getIsMixSidebar,
  71. getCloseMixSidebarOnChange,
  72. getMixSideTrigger,
  73. getMixSideFixed,
  74. } = useMenuSetting();
  75. const {
  76. getShowHeader,
  77. getFixed: getHeaderFixed,
  78. // getHeaderBgColor,
  79. getShowSearch,
  80. } = useHeaderSetting();
  81. const { getShowMultipleTab, getShowQuick, getShowRedo, getShowFold, getAutoCollapse } =
  82. useMultipleTabSetting();
  83. const getShowMenuRef = computed(() => {
  84. return unref(getShowMenu) && !unref(getIsHorizontal);
  85. });
  86. function renderSidebar() {
  87. return (
  88. <>
  89. <TypePicker
  90. menuTypeList={menuTypeList}
  91. handler={(item: (typeof menuTypeList)[0]) => {
  92. baseHandler(HandlerEnum.CHANGE_LAYOUT, {
  93. mode: item.mode,
  94. type: item.type,
  95. split: unref(getIsHorizontal) ? false : undefined,
  96. });
  97. }}
  98. def={unref(getMenuType)}
  99. />
  100. </>
  101. );
  102. }
  103. // function renderHeaderTheme() {
  104. // return (
  105. // <ThemeColorPicker
  106. // colorList={HEADER_PRESET_BG_COLOR_LIST}
  107. // def={unref(getHeaderBgColor)}
  108. // event={HandlerEnum.HEADER_THEME}
  109. // />
  110. // );
  111. // }
  112. function renderSideBarTheme() {
  113. return (
  114. <ThemeColorPicker
  115. colorList={SIDE_BAR_BG_COLOR_LIST}
  116. def={unref(getMenuBgColor)}
  117. event={HandlerEnum.MENU_THEME}
  118. />
  119. );
  120. }
  121. // function renderMainTheme() {
  122. // return (
  123. // <ThemeColorPicker
  124. // colorList={APP_PRESET_COLOR_LIST}
  125. // def={unref(getThemeColor)}
  126. // event={HandlerEnum.CHANGE_THEME_COLOR}
  127. // />
  128. // );
  129. // }
  130. /**
  131. * @description:
  132. */
  133. function renderFeatures() {
  134. let triggerDef = unref(getTrigger);
  135. const triggerOptions = getMenuTriggerOptions(unref(getSplit));
  136. const some = triggerOptions.some((item) => item.value === triggerDef);
  137. if (!some) {
  138. triggerDef = TriggerEnum.FOOTER;
  139. }
  140. return (
  141. <>
  142. <SwitchItem
  143. title={t('layout.setting.splitMenu')}
  144. event={HandlerEnum.MENU_SPLIT}
  145. def={unref(getSplit)}
  146. disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX}
  147. />
  148. <SwitchItem
  149. title={t('layout.setting.mixSidebarFixed')}
  150. event={HandlerEnum.MENU_FIXED_MIX_SIDEBAR}
  151. def={unref(getMixSideFixed)}
  152. disabled={!unref(getIsMixSidebar)}
  153. />
  154. <SwitchItem
  155. title={t('layout.setting.closeMixSidebarOnChange')}
  156. event={HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE}
  157. def={unref(getCloseMixSidebarOnChange)}
  158. disabled={!unref(getIsMixSidebar)}
  159. />
  160. <SwitchItem
  161. title={t('layout.setting.menuCollapse')}
  162. event={HandlerEnum.MENU_COLLAPSED}
  163. def={unref(getCollapsed)}
  164. disabled={!unref(getShowMenuRef)}
  165. />
  166. <SwitchItem
  167. title={t('layout.setting.menuDrag')}
  168. event={HandlerEnum.MENU_HAS_DRAG}
  169. def={unref(getCanDrag)}
  170. disabled={!unref(getShowMenuRef)}
  171. />
  172. <SwitchItem
  173. title={t('layout.setting.menuSearch')}
  174. event={HandlerEnum.HEADER_SEARCH}
  175. def={unref(getShowSearch)}
  176. disabled={!unref(getShowHeader)}
  177. />
  178. <SwitchItem
  179. title={t('layout.setting.menuAccordion')}
  180. event={HandlerEnum.MENU_ACCORDION}
  181. def={unref(getAccordion)}
  182. disabled={!unref(getShowMenuRef)}
  183. />
  184. <SwitchItem
  185. title={t('layout.setting.collapseMenuDisplayName')}
  186. event={HandlerEnum.MENU_COLLAPSED_SHOW_TITLE}
  187. def={unref(getCollapsedShowTitle)}
  188. disabled={!unref(getShowMenuRef) || !unref(getCollapsed) || unref(getIsMixSidebar)}
  189. />
  190. <SwitchItem
  191. title={t('layout.setting.fixedHeader')}
  192. event={HandlerEnum.HEADER_FIXED}
  193. def={unref(getHeaderFixed)}
  194. disabled={!unref(getShowHeader)}
  195. />
  196. <SwitchItem
  197. title={t('layout.setting.fixedSideBar')}
  198. event={HandlerEnum.MENU_FIXED}
  199. def={unref(getMenuFixed)}
  200. disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
  201. />
  202. <SwitchItem
  203. title={t('layout.setting.autoCollapseTabsInFold')}
  204. event={HandlerEnum.TABS_AUTO_COLLAPSE}
  205. def={unref(getAutoCollapse)}
  206. disabled={!unref(getShowMultipleTab)}
  207. />
  208. <SelectItem
  209. title={t('layout.setting.mixSidebarTrigger')}
  210. event={HandlerEnum.MENU_TRIGGER_MIX_SIDEBAR}
  211. def={unref(getMixSideTrigger)}
  212. options={mixSidebarTriggerOptions}
  213. disabled={!unref(getIsMixSidebar)}
  214. />
  215. <SelectItem
  216. title={t('layout.setting.topMenuLayout')}
  217. event={HandlerEnum.MENU_TOP_ALIGN}
  218. def={unref(getTopMenuAlign)}
  219. options={topMenuAlignOptions}
  220. disabled={
  221. !unref(getShowHeader) ||
  222. unref(getSplit) ||
  223. (!unref(getIsTopMenu) && !unref(getSplit)) ||
  224. unref(getIsMixSidebar)
  225. }
  226. />
  227. <SelectItem
  228. title={t('layout.setting.menuCollapseButton')}
  229. event={HandlerEnum.MENU_TRIGGER}
  230. def={triggerDef}
  231. options={triggerOptions}
  232. disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
  233. />
  234. <SelectItem
  235. title={t('layout.setting.contentMode')}
  236. event={HandlerEnum.CONTENT_MODE}
  237. def={unref(getContentMode)}
  238. options={contentModeOptions}
  239. />
  240. <InputNumberItem
  241. title={t('layout.setting.autoScreenLock')}
  242. min={0}
  243. event={HandlerEnum.LOCK_TIME}
  244. defaultValue={unref(getLockTime)}
  245. formatter={(value: string) => {
  246. return parseInt(value) === 0
  247. ? `0(${t('layout.setting.notAutoScreenLock')})`
  248. : `${value}${t('layout.setting.minute')}`;
  249. }}
  250. />
  251. <InputNumberItem
  252. title={t('layout.setting.expandedMenuWidth')}
  253. max={600}
  254. min={100}
  255. step={10}
  256. event={HandlerEnum.MENU_WIDTH}
  257. disabled={!unref(getShowMenuRef)}
  258. defaultValue={unref(getMenuWidth)}
  259. formatter={(value: string) => `${parseInt(value)}px`}
  260. />
  261. </>
  262. );
  263. }
  264. function renderContent() {
  265. return (
  266. <>
  267. <SwitchItem
  268. title={t('layout.setting.breadcrumb')}
  269. event={HandlerEnum.SHOW_BREADCRUMB}
  270. def={unref(getShowBreadCrumb)}
  271. disabled={!unref(getShowHeader)}
  272. />
  273. <SwitchItem
  274. title={t('layout.setting.breadcrumbIcon')}
  275. event={HandlerEnum.SHOW_BREADCRUMB_ICON}
  276. def={unref(getShowBreadCrumbIcon)}
  277. disabled={!unref(getShowHeader)}
  278. />
  279. <SwitchItem
  280. title={t('layout.setting.tabs')}
  281. event={HandlerEnum.TABS_SHOW}
  282. def={unref(getShowMultipleTab)}
  283. />
  284. <SwitchItem
  285. title={t('layout.setting.tabsRedoBtn')}
  286. event={HandlerEnum.TABS_SHOW_REDO}
  287. def={unref(getShowRedo)}
  288. disabled={!unref(getShowMultipleTab)}
  289. />
  290. <SwitchItem
  291. title={t('layout.setting.tabsQuickBtn')}
  292. event={HandlerEnum.TABS_SHOW_QUICK}
  293. def={unref(getShowQuick)}
  294. disabled={!unref(getShowMultipleTab)}
  295. />
  296. <SwitchItem
  297. title={t('layout.setting.tabsFoldBtn')}
  298. event={HandlerEnum.TABS_SHOW_FOLD}
  299. def={unref(getShowFold)}
  300. disabled={!unref(getShowMultipleTab)}
  301. />
  302. <SwitchItem
  303. title={t('layout.setting.sidebar')}
  304. event={HandlerEnum.MENU_SHOW_SIDEBAR}
  305. def={unref(getShowMenu)}
  306. disabled={unref(getIsHorizontal)}
  307. />
  308. <SwitchItem
  309. title={t('layout.setting.header')}
  310. event={HandlerEnum.HEADER_SHOW}
  311. def={unref(getShowHeader)}
  312. />
  313. <SwitchItem
  314. title="Logo"
  315. event={HandlerEnum.SHOW_LOGO}
  316. def={unref(getShowLogo)}
  317. disabled={unref(getIsMixSidebar)}
  318. />
  319. <SwitchItem
  320. title={t('layout.setting.footer')}
  321. event={HandlerEnum.SHOW_FOOTER}
  322. def={unref(getShowFooter)}
  323. />
  324. <SwitchItem
  325. title={t('layout.setting.fullContent')}
  326. event={HandlerEnum.FULL_CONTENT}
  327. def={unref(getFullContent)}
  328. />
  329. <SwitchItem
  330. title={t('layout.setting.grayMode')}
  331. event={HandlerEnum.GRAY_MODE}
  332. def={unref(getGrayMode)}
  333. />
  334. <SwitchItem
  335. title={t('layout.setting.colorWeak')}
  336. event={HandlerEnum.COLOR_WEAK}
  337. def={unref(getColorWeak)}
  338. />
  339. </>
  340. );
  341. }
  342. function renderTransition() {
  343. return (
  344. <>
  345. <SwitchItem
  346. title={t('layout.setting.progress')}
  347. event={HandlerEnum.OPEN_PROGRESS}
  348. def={unref(getOpenNProgress)}
  349. />
  350. <SwitchItem
  351. title={t('layout.setting.switchLoading')}
  352. event={HandlerEnum.OPEN_PAGE_LOADING}
  353. def={unref(getOpenPageLoading)}
  354. />
  355. <SwitchItem
  356. title={t('layout.setting.switchAnimation')}
  357. event={HandlerEnum.OPEN_ROUTE_TRANSITION}
  358. def={unref(getEnableTransition)}
  359. />
  360. <SelectItem
  361. title={t('layout.setting.animationType')}
  362. event={HandlerEnum.ROUTER_TRANSITION}
  363. def={unref(getBasicTransition)}
  364. options={routerTransitionOptions}
  365. disabled={!unref(getEnableTransition)}
  366. />
  367. </>
  368. );
  369. }
  370. return () => (
  371. <BasicDrawer
  372. {...attrs}
  373. title={t('layout.setting.drawerTitle')}
  374. width={330}
  375. class="setting-drawer"
  376. >
  377. {unref(getShowDarkModeToggle) && <Divider>{() => t('layout.setting.darkMode')}</Divider>}
  378. {unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />}
  379. <Divider>{() => t('layout.setting.navMode')}</Divider>
  380. {renderSidebar()}
  381. {/* <Divider>{() => t('layout.setting.sysTheme')}</Divider>
  382. {renderMainTheme()}
  383. <Divider>{() => t('layout.setting.headerTheme')}</Divider>
  384. {renderHeaderTheme()} */}
  385. <Divider>{() => t('layout.setting.sidebarTheme')}</Divider>
  386. {renderSideBarTheme()}
  387. <Divider>{() => t('layout.setting.interfaceFunction')}</Divider>
  388. {renderFeatures()}
  389. <Divider>{() => t('layout.setting.interfaceDisplay')}</Divider>
  390. {renderContent()}
  391. <Divider>{() => t('layout.setting.animation')}</Divider>
  392. {renderTransition()}
  393. <Divider />
  394. <SettingFooter />
  395. </BasicDrawer>
  396. );
  397. },
  398. });