<script lang="ts"> import { defineComponent, computed, unref } from 'vue'; import { BackTop } from 'ant-design-vue'; import { useRootSetting } from '/@/hooks/setting/useRootSetting'; import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; import { useDesign } from '/@/hooks/web/useDesign'; import { useUserStoreWithOut } from '/@/store/modules/user'; import { SettingButtonPositionEnum } from '/@/enums/appEnum'; import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; import SessionTimeoutLogin from '/@/views/sys/login/SessionTimeoutLogin.vue'; export default defineComponent({ name: 'LayoutFeatures', components: { BackTop, LayoutLockPage: createAsyncComponent(() => import('/@/views/sys/lock/index.vue')), SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue')), SessionTimeoutLogin, }, setup() { const { getUseOpenBackTop, getShowSettingButton, getSettingButtonPosition, getFullContent } = useRootSetting(); const userStore = useUserStoreWithOut(); const { prefixCls } = useDesign('setting-drawer-feature'); const { getShowHeader } = useHeaderSetting(); const getIsSessionTimeout = computed(() => userStore.getSessionTimeout); const getIsFixedSettingDrawer = computed(() => { if (!unref(getShowSettingButton)) { return false; } const settingButtonPosition = unref(getSettingButtonPosition); if (settingButtonPosition === SettingButtonPositionEnum.AUTO) { return !unref(getShowHeader) || unref(getFullContent); } return settingButtonPosition === SettingButtonPositionEnum.FIXED; }); return { getTarget: () => document.body, getUseOpenBackTop, getIsFixedSettingDrawer, prefixCls, getIsSessionTimeout, }; }, }); </script> <template> <LayoutLockPage /> <BackTop v-if="getUseOpenBackTop" :target="getTarget" /> <SettingDrawer v-if="getIsFixedSettingDrawer" :class="prefixCls" /> <SessionTimeoutLogin v-if="getIsSessionTimeout" /> </template> <style lang="less"> @prefix-cls: ~'@{namespace}-setting-drawer-feature'; .@{prefix-cls} { display: flex; position: absolute; z-index: 10; top: 45%; right: 0; align-items: center; justify-content: center; padding: 10px; border-radius: 6px 0 0 6px; background-color: @primary-color; color: @white; cursor: pointer; svg { width: 1em; height: 1em; } } </style>