index.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <script lang="ts">
  2. import { defineComponent, computed, unref } from 'vue';
  3. import { BackTop } from 'ant-design-vue';
  4. import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  5. import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
  6. import { useDesign } from '/@/hooks/web/useDesign';
  7. import { SettingButtonPositionEnum } from '/@/enums/appEnum';
  8. import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
  9. export default defineComponent({
  10. name: 'LayoutFeatures',
  11. components: {
  12. BackTop,
  13. LayoutLockPage: createAsyncComponent(() => import('/@/views/sys/lock/index.vue')),
  14. SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue')),
  15. },
  16. setup() {
  17. const {
  18. getUseOpenBackTop,
  19. getShowSettingButton,
  20. getSettingButtonPosition,
  21. getFullContent,
  22. } = useRootSetting();
  23. const { prefixCls } = useDesign('setting-drawer-fearure');
  24. const { getShowHeader } = useHeaderSetting();
  25. const getIsFixedSettingDrawer = computed(() => {
  26. if (!unref(getShowSettingButton)) {
  27. return false;
  28. }
  29. const settingButtonPosition = unref(getSettingButtonPosition);
  30. if (settingButtonPosition === SettingButtonPositionEnum.AUTO) {
  31. return !unref(getShowHeader) || unref(getFullContent);
  32. }
  33. return settingButtonPosition === SettingButtonPositionEnum.FIXED;
  34. });
  35. return {
  36. getTarget: () => document.body,
  37. getUseOpenBackTop,
  38. getIsFixedSettingDrawer,
  39. prefixCls,
  40. };
  41. },
  42. });
  43. </script>
  44. <template>
  45. <LayoutLockPage />
  46. <BackTop v-if="getUseOpenBackTop" :target="getTarget" />
  47. <SettingDrawer v-if="getIsFixedSettingDrawer" :class="prefixCls" />
  48. </template>
  49. <style lang="less">
  50. @prefix-cls: ~'@{namespace}-setting-drawer-fearure';
  51. .@{prefix-cls} {
  52. position: absolute;
  53. top: 45%;
  54. right: 0;
  55. z-index: 10;
  56. display: flex;
  57. padding: 10px;
  58. color: @white;
  59. cursor: pointer;
  60. background: @primary-color;
  61. border-radius: 6px 0 0 6px;
  62. justify-content: center;
  63. align-items: center;
  64. svg {
  65. width: 1em;
  66. height: 1em;
  67. }
  68. }
  69. </style>