feat(Image): add previewMask prop (#5531)
* fix(Image): can not cancel previewMask * remove redundant code * remove redundant code * update codepull/5539/head
							parent
							
								
									9b6e742f0c
								
							
						
					
					
						commit
						bc3843b774
					
				|  | @ -22,7 +22,7 @@ Previewable image. | |||
| | placeholder | Load placeholder, use default placeholder when set `true` | boolean \| slot | - | 2.0.0 | | ||||
| | preview | preview config, disabled when `false` | boolean \| [previewType](#previewType) | true | 2.0.0 | | ||||
| | src | Image path | string | - | 2.0.0 | | ||||
| | previewMask | custom mask | slot | - | 3.2.0 | | ||||
| | previewMask | custom mask | boolean \| function \| slot | - | 3.2.0 | | ||||
| | width | Image width | string \| number | - | 2.0.0 | | ||||
| 
 | ||||
| ### events | ||||
|  |  | |||
|  | @ -49,13 +49,16 @@ const Image = defineComponent<ImageProps>({ | |||
|           v-slots={{ | ||||
|             ...slots, | ||||
|             previewMask: | ||||
|               slots.previewMask ?? | ||||
|               (() => ( | ||||
|                 <div class={`${prefixCls.value}-mask-info`}> | ||||
|                   <EyeOutlined /> | ||||
|                   {imageLocale?.preview} | ||||
|                 </div> | ||||
|               )), | ||||
|               props.previewMask === false | ||||
|                 ? null | ||||
|                 : props.previewMask ?? | ||||
|                   slots.previewMask ?? | ||||
|                   (() => ( | ||||
|                     <div class={`${prefixCls.value}-mask-info`}> | ||||
|                       <EyeOutlined /> | ||||
|                       {imageLocale?.preview} | ||||
|                     </div> | ||||
|                   )), | ||||
|           }} | ||||
|         ></ImageInternal> | ||||
|       ); | ||||
|  |  | |||
|  | @ -23,7 +23,7 @@ cover: https://gw.alipayobjects.com/zos/antfincdn/D1dXz9PZqa/image.svg | |||
| | placeholder | 加载占位, 为 `true` 时使用默认占位 | boolean \| slot | - | 2.0.0 | | ||||
| | preview | 预览参数,为 `false` 时禁用 | boolean \| [previewType](#previewType) | true | 2.0.0 | | ||||
| | src | 图片地址 | string | - | 2.0.0 | | ||||
| | previewMask | 自定义 mask | slot | - | 3.2.0 | | ||||
| | previewMask | 自定义 mask | boolean \| function \| slot | - | 3.2.0 | | ||||
| | width | 图像宽度 | string \| number | - | 2.0.0 | | ||||
| 
 | ||||
| ### 事件 | ||||
|  |  | |||
|  | @ -25,19 +25,6 @@ export type ImagePreviewType = Omit< | |||
|   icons?: PreviewProps['icons']; | ||||
| }; | ||||
| 
 | ||||
| export interface ImagePropsType extends Omit<ImgHTMLAttributes, 'placeholder' | 'onClick'> { | ||||
|   // Original | ||||
|   src?: string; | ||||
|   wrapperClassName?: string; | ||||
|   wrapperStyle?: CSSProperties; | ||||
|   prefixCls?: string; | ||||
|   previewPrefixCls?: string; | ||||
|   placeholder?: boolean; | ||||
|   fallback?: string; | ||||
|   preview?: boolean | ImagePreviewType; | ||||
|   onClick?: MouseEventHandler; | ||||
|   onError?: HTMLImageElement['onerror']; | ||||
| } | ||||
| export const imageProps = () => ({ | ||||
|   src: String, | ||||
|   wrapperClassName: String, | ||||
|  | @ -45,6 +32,10 @@ export const imageProps = () => ({ | |||
|   rootClassName: String, | ||||
|   prefixCls: String, | ||||
|   previewPrefixCls: String, | ||||
|   previewMask: { | ||||
|     type: [Boolean, Function] as PropType<boolean | (() => any)>, | ||||
|     default: undefined, | ||||
|   }, | ||||
|   placeholder: PropTypes.any, | ||||
|   fallback: String, | ||||
|   preview: { | ||||
|  | @ -103,9 +94,7 @@ const ImageInternal = defineComponent({ | |||
|       value: previewVisible, | ||||
|       onChange: onPreviewVisibleChange, | ||||
|     }); | ||||
|     watch(previewVisible, val => { | ||||
|       setShowPreview(Boolean(val)); | ||||
|     }); | ||||
| 
 | ||||
|     watch(isShowPreview, (val, preVal) => { | ||||
|       onPreviewVisibleChange(val, preVal); | ||||
|     }); | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ import { ref, provide, defineComponent, inject, watch, reactive, computed, watch | |||
| import { type ImagePreviewType, mergeDefaultValue } from './Image'; | ||||
| import Preview from './Preview'; | ||||
| import type { PreviewProps } from './Preview'; | ||||
| import useMergedState from '../../_util/hooks/useMergedState'; | ||||
| 
 | ||||
| export interface PreviewGroupPreview | ||||
|   extends Omit<ImagePreviewType, 'icons' | 'mask' | 'maskClassName'> { | ||||
|  | @ -85,10 +86,14 @@ const Group = defineComponent({ | |||
|     const current = ref<number>(); | ||||
| 
 | ||||
|     const previewVisible = computed(() => preview.value.visible); | ||||
|     const onPreviewVisibleChange = computed(() => preview.value.onVisibleChange); | ||||
|     const getPreviewContainer = computed(() => preview.value.getContainer); | ||||
| 
 | ||||
|     const isShowPreview = ref(!!previewVisible.value); | ||||
|     const onPreviewVisibleChange = (val, preval) => { | ||||
|       preview.value.onVisibleChange?.(val, preval); | ||||
|     }; | ||||
|     const [isShowPreview, setShowPreview] = useMergedState(!!previewVisible.value, { | ||||
|       value: previewVisible, | ||||
|       onChange: onPreviewVisibleChange, | ||||
|     }); | ||||
| 
 | ||||
|     const mousePosition = ref<{ x: number; y: number }>(null); | ||||
|     const isControlled = computed(() => previewVisible.value !== undefined); | ||||
|  | @ -115,9 +120,6 @@ const Group = defineComponent({ | |||
|     const setMousePosition = (val: null | { x: number; y: number }) => { | ||||
|       mousePosition.value = val; | ||||
|     }; | ||||
|     const setShowPreview = (val: boolean) => { | ||||
|       isShowPreview.value = val; | ||||
|     }; | ||||
| 
 | ||||
|     const registerImage = (id: number, url: string, canPreview = true) => { | ||||
|       const unRegister = () => { | ||||
|  | @ -132,16 +134,10 @@ const Group = defineComponent({ | |||
| 
 | ||||
|     const onPreviewClose = (e: any) => { | ||||
|       e?.stopPropagation(); | ||||
|       isShowPreview.value = false; | ||||
|       mousePosition.value = null; | ||||
|       setShowPreview(false); | ||||
|       setMousePosition(null); | ||||
|     }; | ||||
| 
 | ||||
|     watch(previewVisible, () => { | ||||
|       isShowPreview.value = !!previewVisible.value; | ||||
|     }); | ||||
|     watch(isShowPreview, (val, preVal) => { | ||||
|       onPreviewVisibleChange.value(val, preVal); | ||||
|     }); | ||||
|     watch( | ||||
|       currentControlledKey, | ||||
|       val => { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 bqy_fe
						bqy_fe