tav-ui
Version:
1 lines • 14.3 kB
Source Map (JSON)
{"version":3,"file":"modal2.mjs","sources":["../../../../../../../packages/components/modal/src/modal.vue"],"sourcesContent":["<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n nextTick,\n provide,\n ref,\n toRef,\n unref,\n watch,\n watchEffect,\n} from 'vue'\nimport { omit } from 'lodash-es'\nimport { isFunction } from '@tav-ui/utils/is'\nimport { deepMerge } from '@tav-ui/utils/basic'\nimport { mitt } from '@tav-ui/utils/mitt'\n\nimport ModalContent from './components/ModalContent'\nimport ModalWrapper from './components/ModalWrapper.vue'\nimport ModalClose from './components/ModalClose.vue'\nimport ModalFooter from './components/ModalFooter.vue'\nimport ModalHeader from './components/ModalHeader.vue'\nimport { basicProps } from './types'\nimport { useFullScreen } from './hooks/useModalFullScreen'\nimport type { ModalMethods, ModalProps, Recordable } from './types'\n\nexport default defineComponent({\n name: 'TaModal',\n components: {\n ModalContent,\n ModalWrapper,\n ModalClose,\n ModalFooter,\n ModalHeader,\n },\n inheritAttrs: false,\n props: basicProps,\n emits: ['visible-change', 'height-change', 'cancel', 'ok', 'register', 'update:visible'],\n setup(props, { emit, attrs }) {\n const modalEmitter = mitt()\n provide('modalEmitter', modalEmitter)\n\n const visibleRef = ref(false)\n const propsRef = ref<Partial<ModalProps> | null>(null)\n const modalWrapperRef = ref<any>(null)\n const prefixCls = 'ta-basic-modal'\n\n // modal Bottom and top height\n const extHeightRef = ref(0)\n const modalMethods: ModalMethods = {\n redoThumbHeight: () => modalEmitter.emit('redoThumbHeight'),\n setModalProps,\n emitVisible: undefined,\n redoModalHeight: () => {\n nextTick(() => {\n if (unref(modalWrapperRef)) (unref(modalWrapperRef) as any).setModalHeight()\n })\n },\n }\n\n const instance = getCurrentInstance()\n if (instance) emit('register', modalMethods, instance.uid)\n\n // Custom title component: get title\n const getMergeProps = computed((): Recordable => {\n return {\n ...props,\n ...(unref(propsRef) as any),\n }\n })\n\n const { handleFullScreen, getWrapClassName, fullScreenRef } = useFullScreen({\n modalWrapperRef,\n extHeightRef,\n // wrapClassName: toRef(getMergeProps.value, \"wrapClassName\")\n wrapClassName: toRef(props, 'wrapClassName'),\n })\n\n // modal component does not need title and origin buttons\n const getProps = computed((): Recordable => {\n const opt = {\n ...unref(getMergeProps),\n visible: unref(visibleRef),\n okButtonProps: undefined,\n cancelButtonProps: undefined,\n title: undefined,\n }\n return {\n ...opt,\n wrapClassName: unref(getWrapClassName),\n }\n })\n\n const getBindValue = computed((): Recordable => {\n const attr = {\n ...attrs,\n ...unref(getMergeProps),\n visible: unref(visibleRef),\n wrapClassName: `${unref(getWrapClassName)} ta-basic-modal`,\n }\n if (unref(fullScreenRef)) return omit(attr, ['height', 'title'])\n\n return omit(attr, 'title')\n })\n\n const getWrapperHeight = computed(() => {\n if (unref(fullScreenRef)) return undefined\n return unref(getProps).height\n })\n\n watchEffect(() => {\n visibleRef.value = !!props.visible\n fullScreenRef.value = !!props.defaultFullscreen\n })\n\n watch(\n () => unref(visibleRef),\n (v) => {\n emit('visible-change', v)\n emit('update:visible', v)\n instance && modalMethods.emitVisible?.(v, instance.uid)\n nextTick(() => {\n if (props.scrollTop && v && unref(modalWrapperRef))\n (unref(modalWrapperRef) as any).scrollTop()\n })\n },\n {\n immediate: false,\n }\n )\n\n // 取消事件\n async function handleCancel(e: Event) {\n e?.stopPropagation()\n // 过滤自定义关闭按钮的空白区域\n if ((e.target as HTMLElement)?.classList?.contains(`${prefixCls}-close--custom`)) return\n if (props.closeFunc && isFunction(props.closeFunc)) {\n const isClose: boolean = await props.closeFunc()\n visibleRef.value = !isClose\n return\n }\n\n visibleRef.value = false\n emit('cancel', e)\n }\n\n /**\n * @description: 设置modal参数\n */\n function setModalProps(props: Partial<ModalProps>): void {\n // Keep the last setModalProps\n propsRef.value = deepMerge(unref(propsRef) || ({} as any), props)\n if (Reflect.has(props, 'visible')) visibleRef.value = !!props.visible\n\n if (Reflect.has(props, 'defaultFullscreen')) fullScreenRef.value = !!props.defaultFullscreen\n }\n\n function handleOk(e: Event) {\n emit('ok', e)\n }\n\n function handleHeightChange(height: string) {\n emit('height-change', height)\n }\n\n function handleExtHeight(height: number) {\n extHeightRef.value = height\n }\n\n function handleTitleDbClick(e: any) {\n if (!props.canFullscreen) return\n e.stopPropagation()\n handleFullScreen(e)\n }\n\n return {\n handleCancel,\n getBindValue,\n getProps,\n handleFullScreen,\n fullScreenRef,\n getMergeProps,\n handleOk,\n visibleRef,\n omit,\n modalWrapperRef,\n handleExtHeight,\n handleHeightChange,\n handleTitleDbClick,\n getWrapperHeight,\n }\n },\n})\n</script>\n<template>\n <ModalContent v-bind=\"getBindValue\" @cancel=\"handleCancel\">\n <template v-if=\"!$slots.closeIcon\" #closeIcon>\n <ModalClose\n :can-fullscreen=\"getProps.canFullscreen\"\n :full-screen=\"fullScreenRef\"\n @cancel=\"handleCancel\"\n @fullscreen=\"handleFullScreen\"\n />\n </template>\n\n <template v-if=\"!$slots.title\" #title>\n <ModalHeader\n :help-message=\"getProps.helpMessage\"\n :title=\"getMergeProps.title\"\n @dblclick=\"handleTitleDbClick\"\n />\n </template>\n\n <template v-if=\"!$slots.footer\" #footer>\n <ModalFooter v-bind=\"getBindValue\" @ok=\"handleOk\" @cancel=\"handleCancel\">\n <template v-for=\"item in Object.keys($slots)\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n </ModalFooter>\n </template>\n\n <ModalWrapper\n ref=\"modalWrapperRef\"\n :use-wrapper=\"getProps.useWrapper\"\n :footer-offset=\"wrapperFooterOffset\"\n :full-screen=\"fullScreenRef\"\n :loading=\"getProps.loading\"\n :loading-tip=\"getProps.loadingTip\"\n :min-height=\"getProps.minHeight\"\n :height=\"getWrapperHeight\"\n :visible=\"visibleRef\"\n :modal-footer-height=\"footer !== undefined && !footer ? 0 : undefined\"\n v-bind=\"omit(getProps.wrapperProps, 'visible', 'height', 'modalFooterHeight')\"\n @ext-height=\"handleExtHeight\"\n @height-change=\"handleHeightChange\"\n >\n <slot />\n </ModalWrapper>\n\n <template v-for=\"item in Object.keys(omit($slots, 'default'))\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n </ModalContent>\n</template>\n"],"names":["props","_resolveComponent","_withCtx","_renderSlot","_createSlots","_renderList","_normalizeProps","_guardReactiveProps"],"mappings":"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"}