From f96d4ed77603ca1f908dcdc4a51bd2ce2178d10c Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期三, 19 六月 2024 10:10:58 +0800 Subject: [PATCH] 登录logo,其他 --- src/components/Drawer/src/BasicDrawer.vue | 267 ++++++++++++++++++++++++----------------------------- 1 files changed, 121 insertions(+), 146 deletions(-) diff --git a/src/components/Drawer/src/BasicDrawer.vue b/src/components/Drawer/src/BasicDrawer.vue index 6f6f631..ba1d5e5 100644 --- a/src/components/Drawer/src/BasicDrawer.vue +++ b/src/components/Drawer/src/BasicDrawer.vue @@ -1,5 +1,5 @@ <template> - <Drawer :class="prefixCls" @close="onClose" v-bind="getBindValues"> + <Drawer v-bind="getBindValues" :class="prefixCls" @close="onClose"> <template #title v-if="!$slots.title"> <DrawerHeader :title="getMergeProps.title" @@ -30,167 +30,142 @@ </DrawerFooter> </Drawer> </template> -<script lang="ts"> +<script lang="ts" setup> import type { DrawerInstance, DrawerProps } from './typing'; - import type { CSSProperties } from 'vue'; - import { - defineComponent, - ref, - computed, - watch, - unref, - nextTick, - toRaw, - getCurrentInstance, - } from 'vue'; + import { ref, computed, watch, unref, nextTick, getCurrentInstance } from 'vue'; + import type { CSSProperties, Ref } from 'vue'; import { Drawer } from 'ant-design-vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { isFunction, isNumber } from '/@/utils/is'; - import { deepMerge } from '/@/utils'; + import { useI18n } from '@/hooks/web/useI18n'; + import { isFunction, isNumber } from '@/utils/is'; + import { deepMerge } from '@/utils'; import DrawerFooter from './components/DrawerFooter.vue'; import DrawerHeader from './components/DrawerHeader.vue'; - import { ScrollContainer } from '/@/components/Container'; + import { ScrollContainer } from '@/components/Container'; import { basicProps } from './props'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useDesign } from '@/hooks/web/useDesign'; import { useAttrs } from '@vben/hooks'; - export default defineComponent({ - components: { Drawer, ScrollContainer, DrawerFooter, DrawerHeader }, - inheritAttrs: false, - props: basicProps, - emits: ['visible-change', 'ok', 'close', 'register'], - setup(props, { emit }) { - const visibleRef = ref(false); - const attrs = useAttrs(); - const propsRef = ref<Partial<DrawerProps | null>>(null); + defineOptions({ inheritAttrs: false }); - const { t } = useI18n(); - const { prefixVar, prefixCls } = useDesign('basic-drawer'); + const props = defineProps(basicProps); - const drawerInstance: DrawerInstance = { - setDrawerProps: setDrawerProps as any, - emitVisible: undefined, - }; + const emit = defineEmits(['open-change', 'ok', 'close', 'register']); - const instance = getCurrentInstance(); + const openRef = ref(false); + const attrs = useAttrs(); + const propsRef = ref({}) as Ref<Partial<DrawerProps>>; - instance && emit('register', drawerInstance, instance.uid); + const { t } = useI18n(); + const { prefixVar, prefixCls } = useDesign('basic-drawer'); - const getMergeProps = computed((): DrawerProps => { - return deepMerge(toRaw(props), unref(propsRef)) as any; - }); + const drawerInstance: DrawerInstance = { + setDrawerProps, + emitOpen: undefined, + }; - const getProps = computed((): DrawerProps => { - const opt = { - placement: 'right', - ...unref(attrs), - ...unref(getMergeProps), - visible: unref(visibleRef), - }; - opt.title = undefined; - const { isDetail, width, wrapClassName, getContainer } = opt; - if (isDetail) { - if (!width) { - opt.width = '100%'; - } - const detailCls = `${prefixCls}__detail`; - opt.class = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls; + const instance = getCurrentInstance(); - if (!getContainer) { - // TODO type error? - opt.getContainer = `.${prefixVar}-layout-content` as any; - } - } - return opt as DrawerProps; - }); + instance && emit('register', drawerInstance, instance.uid); - const getBindValues = computed((): DrawerProps => { - return { - ...attrs, - ...unref(getProps), - }; - }); - - // Custom implementation of the bottom button, - const getFooterHeight = computed(() => { - const { footerHeight, showFooter } = unref(getProps); - if (showFooter && footerHeight) { - return isNumber(footerHeight) - ? `${footerHeight}px` - : `${footerHeight.replace('px', '')}px`; - } - return `0px`; - }); - - const getScrollContentStyle = computed((): CSSProperties => { - const footerHeight = unref(getFooterHeight); - return { - position: 'relative', - height: `calc(100% - ${footerHeight})`, - }; - }); - - const getLoading = computed(() => { - return !!unref(getProps)?.loading; - }); - - watch( - () => props.visible, - (newVal, oldVal) => { - if (newVal !== oldVal) visibleRef.value = newVal; - }, - { deep: true }, - ); - - watch( - () => visibleRef.value, - (visible) => { - nextTick(() => { - emit('visible-change', visible); - instance && drawerInstance.emitVisible?.(visible, instance.uid); - }); - }, - ); - - // Cancel event - async function onClose(e) { - const { closeFunc } = unref(getProps); - emit('close', e); - if (closeFunc && isFunction(closeFunc)) { - const res = await closeFunc(); - visibleRef.value = !res; - return; - } - visibleRef.value = false; - } - - function setDrawerProps(props: Partial<DrawerProps>): void { - // Keep the last setDrawerProps - propsRef.value = deepMerge(unref(propsRef) || ({} as any), props); - - if (Reflect.has(props, 'visible')) { - visibleRef.value = !!props.visible; - } - } - - function handleOk() { - emit('ok'); - } - - return { - onClose, - t, - prefixCls, - getMergeProps: getMergeProps as any, - getScrollContentStyle, - getProps: getProps as any, - getLoading, - getBindValues, - getFooterHeight, - handleOk, - }; - }, + const getMergeProps = computed(() => { + return deepMerge(props, unref(propsRef)); }); + + const getProps = computed(() => { + const opt: Partial<DrawerProps> = { + placement: 'right', + ...unref(attrs), + ...unref(getMergeProps), + open: unref(openRef), + }; + opt.title = undefined; + const { isDetail, width, wrapClassName, getContainer } = opt; + if (isDetail) { + if (!width) { + opt.width = '100%'; + } + const detailCls = `${prefixCls}__detail`; + opt.rootClassName = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls; + + if (!getContainer) { + opt.getContainer = `.${prefixVar}-layout-content`; + } + } + return opt; + }); + + const getBindValues = computed(() => { + return { + ...attrs, + ...unref(getProps), + }; + }); + + // Custom implementation of the bottom button, + const getFooterHeight = computed(() => { + const { footerHeight, showFooter } = unref(getProps); + if (showFooter && footerHeight) { + return isNumber(footerHeight) ? `${footerHeight}px` : `${footerHeight.replace('px', '')}px`; + } + return `0px`; + }); + + const getScrollContentStyle = computed((): CSSProperties => { + const footerHeight = unref(getFooterHeight); + return { + position: 'relative', + height: `calc(100% - ${footerHeight})`, + }; + }); + + const getLoading = computed(() => { + return !!unref(getProps)?.loading; + }); + + watch( + () => props.open, + (newVal, oldVal) => { + if (newVal !== oldVal) openRef.value = newVal; + }, + { deep: true }, + ); + + watch( + () => openRef.value, + (open) => { + nextTick(() => { + emit('open-change', open); + if (instance && drawerInstance.emitOpen) { + drawerInstance.emitOpen(open, instance.uid); + } + }); + }, + ); + + // Cancel event + async function onClose(e) { + const { closeFunc } = unref(getProps); + emit('close', e); + if (closeFunc && isFunction(closeFunc)) { + const res = await closeFunc(); + openRef.value = !res; + return; + } + openRef.value = false; + } + + function setDrawerProps(props: Partial<DrawerProps>) { + // Keep the last setDrawerProps + propsRef.value = deepMerge(unref(propsRef), props); + + if (Reflect.has(props, 'open')) { + openRef.value = !!props.open; + } + } + + function handleOk() { + emit('ok'); + } </script> <style lang="less"> @header-height: 60px; -- Gitblit v1.9.3