UNPKG

tdesign-mobile-vue

Version:
1 lines 12.3 kB
{"version":3,"file":"upload.mjs","sources":["../../src/upload/upload.tsx"],"sourcesContent":["import { defineComponent, ref, computed } from 'vue';\nimport { AddIcon, LoadingIcon, CloseIcon, CloseCircleIcon } from 'tdesign-icons-vue-next';\nimport TImage from '../image';\nimport TImageViewer from '../image-viewer';\nimport { TdUploadProps, UploadFile } from './type';\nimport UploadProps from './props';\nimport config from '../config';\nimport useUpload from './hooks/useUpload';\nimport { useTNodeJSX, useContent } from '../hooks/tnode';\nimport { usePrefixClass, useConfig } from '../hooks/useClass';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n name: `${prefix}-upload`,\n components: {\n TImage,\n },\n props: UploadProps,\n emits: [\n 'update:files',\n 'update:modelValue',\n 'change',\n 'fail',\n 'preview',\n 'progress',\n 'remove',\n 'success',\n 'select-change',\n 'validate',\n 'click-upload',\n ],\n setup(props, { expose }) {\n const uploadClass = usePrefixClass('upload');\n const { globalConfig } = useConfig('upload');\n\n const {\n disabled,\n displayFiles,\n uploading,\n inputRef,\n uploadFilePercent,\n uploadFiles,\n onNormalFileChange,\n onInnerRemove,\n cancelUpload,\n } = useUpload(props);\n\n const renderTNodeJSX = useTNodeJSX();\n const renderContent = useContent();\n\n const showViewer = ref(false);\n const initialIndex = ref(0);\n\n const handlePreview = (e: MouseEvent, file: UploadFile, index: number) => {\n initialIndex.value = index;\n showViewer.value = props.preview;\n props.onPreview?.({\n e,\n file,\n index,\n });\n };\n\n const triggerUpload = (e: MouseEvent) => {\n const input = inputRef.value as HTMLInputElement;\n if (disabled?.value) return;\n input.click();\n props.onClickUpload?.({\n e,\n });\n };\n\n const previewImgs = computed(() => {\n return displayFiles.value.map((item) => item.url as string);\n });\n\n const handleImageClose = ({ visible }: { visible: boolean }) => {\n showViewer.value = visible;\n };\n\n const renderStatus = (file: UploadFile) => {\n if (file.status === 'fail' || file.status === 'progress') {\n return (\n <div class={`${uploadClass.value}__progress-mask`}>\n {file.status === 'progress' ? (\n <>\n <LoadingIcon class={`${uploadClass.value}__progress-loading`} size=\"24\" />\n <div class={`${uploadClass.value}__progress-text`}>\n {file.percent ? `${file.percent}%` : globalConfig.value.progress.uploadingText}\n </div>\n </>\n ) : (\n <CloseCircleIcon size=\"24\" />\n )}\n {file.status === 'fail' && (\n <div class={`${uploadClass.value}__progress-text`}>{globalConfig.value.progress.failText}</div>\n )}\n </div>\n );\n }\n };\n\n const content = () => {\n const defaultContent = renderContent('default', 'content');\n const addContent = renderTNodeJSX('addContent');\n if (props.max === 0 || (props.max > 0 && displayFiles.value?.length < props.max)) {\n if (defaultContent) {\n return <div onClick={triggerUpload}>{defaultContent}</div>;\n }\n return (\n <div class={`${uploadClass.value}__item ${uploadClass.value}__item--add`} onClick={triggerUpload}>\n <div class={`${uploadClass.value}__add-icon`}>{addContent || <AddIcon size=\"28\" />}</div>\n </div>\n );\n }\n };\n expose({\n upload: inputRef.value,\n uploading,\n triggerUpload,\n uploadFiles,\n cancelUpload,\n uploadFilePercent,\n });\n return () => {\n return (\n <div class={`${uploadClass.value}`}>\n {displayFiles.value.map((file, index) => (\n <div key={index} class={`${uploadClass.value}__item`}>\n {file.url && (\n <t-image\n class={`${uploadClass.value}__image`}\n shape=\"round\"\n {...(props.imageProps as TdUploadProps['imageProps'])}\n src={file.url}\n onClick={(e: MouseEvent) => handlePreview(e, file, index)}\n />\n )}\n {renderStatus(file)}\n <CloseIcon\n class={`${uploadClass.value}__delete-btn`}\n onClick={({ e }: any) => onInnerRemove({ e, file, index })}\n />\n </div>\n ))}\n {content()}\n <input\n ref={inputRef}\n value={props.files}\n type=\"file\"\n multiple={props.multiple}\n hidden\n capture={props.capture as unknown as boolean}\n accept={props.accept}\n onChange={onNormalFileChange}\n />\n <TImageViewer\n visible={showViewer.value}\n images={previewImgs.value}\n index={initialIndex.value}\n onClose={handleImageClose}\n />\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","components","TImage","props","UploadProps","emits","setup","_ref","expose","uploadClass","usePrefixClass","_useConfig","useConfig","globalConfig","_useUpload","useUpload","disabled","displayFiles","uploading","inputRef","uploadFilePercent","uploadFiles","onNormalFileChange","onInnerRemove","cancelUpload","renderTNodeJSX","useTNodeJSX","renderContent","useContent","showViewer","ref","initialIndex","handlePreview","e","file","index","_props$onPreview","value","preview","onPreview","call","triggerUpload","_props$onClickUpload","input","click","onClickUpload","previewImgs","computed","map","item","url","handleImageClose","_ref2","visible","renderStatus","status","_createVNode","concat","_Fragment","LoadingIcon","percent","progress","uploadingText","failText","content","_displayFiles$value","defaultContent","addContent","max","length","AddIcon","upload","imageProps","onClick","CloseIcon","_ref3","files","multiple","capture","accept","TImageViewer"],"mappings":"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"}