SettingFooter.vue 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <template>
  2. <div :class="prefixCls">
  3. <a-button type="primary" block @click="handleCopy">
  4. <CopyOutlined class="mr-2" />
  5. {{ t('layout.setting.copyBtn') }}
  6. </a-button>
  7. <a-button color="warning" block @click="handleResetSetting" class="my-3">
  8. <RedoOutlined class="mr-2" />
  9. {{ t('common.resetText') }}
  10. </a-button>
  11. <a-button color="error" block @click="handleClearAndRedo">
  12. <RedoOutlined class="mr-2" />
  13. {{ t('layout.setting.clearBtn') }}
  14. </a-button>
  15. </div>
  16. </template>
  17. <script lang="ts">
  18. import { defineComponent, unref } from 'vue';
  19. import { CopyOutlined, RedoOutlined } from '@ant-design/icons-vue';
  20. import { appStore } from '/@/store/modules/app';
  21. import { permissionStore } from '/@/store/modules/permission';
  22. import { tabStore } from '/@/store/modules/tab';
  23. import { userStore } from '/@/store/modules/user';
  24. import { useDesign } from '/@/hooks/web/useDesign';
  25. import { useI18n } from '/@/hooks/web/useI18n';
  26. import { useMessage } from '/@/hooks/web/useMessage';
  27. import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
  28. import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  29. import { updateColorWeak } from '/@/logics/theme/updateColorWeak';
  30. import { updateGrayMode } from '/@/logics/theme/updateGrayMode';
  31. import defaultSetting from '/@/settings/projectSetting';
  32. export default defineComponent({
  33. name: 'SettingFooter',
  34. components: { CopyOutlined, RedoOutlined },
  35. setup() {
  36. const { getRootSetting } = useRootSetting();
  37. const { prefixCls } = useDesign('setting-footer');
  38. const { t } = useI18n();
  39. const { createSuccessModal, createMessage } = useMessage();
  40. function handleCopy() {
  41. const { isSuccessRef } = useCopyToClipboard(JSON.stringify(unref(getRootSetting), null, 2));
  42. unref(isSuccessRef) &&
  43. createSuccessModal({
  44. title: t('layout.setting.operatingTitle'),
  45. content: t('layout.setting.operatingContent'),
  46. });
  47. }
  48. function handleResetSetting() {
  49. try {
  50. appStore.commitProjectConfigState(defaultSetting);
  51. const { colorWeak, grayMode } = defaultSetting;
  52. // updateTheme(themeColor);
  53. updateColorWeak(colorWeak);
  54. updateGrayMode(grayMode);
  55. createMessage.success(t('layout.setting.resetSuccess'));
  56. } catch (error) {
  57. createMessage.error(error);
  58. }
  59. }
  60. function handleClearAndRedo() {
  61. localStorage.clear();
  62. appStore.resumeAllState();
  63. permissionStore.commitResetState();
  64. tabStore.commitResetState();
  65. userStore.commitResetState();
  66. location.reload();
  67. }
  68. return {
  69. prefixCls,
  70. t,
  71. handleCopy,
  72. handleResetSetting,
  73. handleClearAndRedo,
  74. };
  75. },
  76. });
  77. </script>
  78. <style lang="less" scoped>
  79. @prefix-cls: ~'@{namespace}-setting-footer';
  80. .@{prefix-cls} {
  81. display: flex;
  82. flex-direction: column;
  83. align-items: center;
  84. }
  85. </style>