66 :style =" props.style"
77 :before-upload =" handleBeforeUpload"
88 :http-request =" handleUpload"
9- :on-progress =" handleProgress"
109 :on-success =" handleSuccess"
1110 :on-error =" handleError"
1211 :accept =" props.accept"
2019
2120 <!-- 文件列表 -->
2221 <template #file =" { file } " >
23- <div class =" el-upload-list__item-info" >
24- <a class =" el-upload-list__item-name" @click =" handleDownload(file)" >
25- <el-icon ><Document /></el-icon >
26- <span class =" el-upload-list__item-file-name" >{{ file.name }}</span >
27- <span class =" el-icon--close" @click.stop =" handleRemove(file.url!)" >
28- <el-icon ><Close /></el-icon >
29- </span >
30- </a >
31- </div >
22+ <template v-if =" file .status === ' success' " >
23+ <div class =" el-upload-list__item-info" >
24+ <a class =" el-upload-list__item-name" @click =" handleDownload(file)" >
25+ <el-icon ><Document /></el-icon >
26+ <span class =" el-upload-list__item-file-name" >{{ file.name }}</span >
27+ <span class =" el-icon--close" @click.stop =" handleRemove(file.url!)" >
28+ <el-icon ><Close /></el-icon >
29+ </span >
30+ </a >
31+ </div >
32+ </template >
33+ <template v-else >
34+ <div class =" el-upload-list__item-info" >
35+ <el-progress style =" display : inline-flex " :percentage =" file.percentage" />
36+ </div >
37+ </template >
3238 </template >
3339 </el-upload >
34-
35- <el-progress
36- :style =" {
37- display: showProgress ? 'inline-flex' : 'none',
38- width: '100%',
39- }"
40- :percentage =" progressPercent"
41- />
4240 </div >
4341</template >
4442<script lang="ts" setup>
@@ -47,7 +45,6 @@ import {
4745 UploadUserFile ,
4846 UploadFile ,
4947 UploadFiles ,
50- UploadProgressEvent ,
5148 UploadRequestOptions ,
5249} from " element-plus" ;
5350
@@ -111,7 +108,6 @@ const props = defineProps({
111108 },
112109 },
113110});
114-
115111const modelValue = defineModel (" modelValue" , {
116112 type: [Array ] as PropType <FileInfo []>,
117113 required: true ,
@@ -120,9 +116,6 @@ const modelValue = defineModel("modelValue", {
120116
121117const fileList = ref ([] as UploadFile []);
122118
123- const showProgress = ref (false );
124- const progressPercent = ref (0 );
125-
126119// 监听 modelValue 转换用于显示的 fileList
127120watch (
128121 modelValue ,
@@ -160,34 +153,29 @@ function handleBeforeUpload(file: UploadRawFile) {
160153function handleUpload(options : UploadRequestOptions ) {
161154 return new Promise ((resolve , reject ) => {
162155 const file = options .file ;
163-
164156 const formData = new FormData ();
165157 formData .append (props .name , file );
166158
167159 // 处理附加参数
168160 Object .keys (props .data ).forEach ((key ) => {
169161 formData .append (key , props .data [key ]);
170162 });
171-
172- FileAPI .upload (formData )
173- .then ((data ) => {
174- resolve (data );
163+ FileAPI .upload (formData , (percent ) => {
164+ const uid = file .uid ;
165+ const fileItem = fileList .value .find ((file ) => file .uid === uid );
166+ if (fileItem ) {
167+ fileItem .percentage = percent ;
168+ }
169+ })
170+ .then ((res ) => {
171+ resolve (res );
175172 })
176- .catch ((error ) => {
177- reject (error );
173+ .catch ((err ) => {
174+ reject (err );
178175 });
179176 });
180177}
181178
182- /**
183- * 上传进度
184- *
185- * @param event
186- */
187- const handleProgress = (event : UploadProgressEvent ) => {
188- progressPercent .value = event .percent ;
189- };
190-
191179/**
192180 * 上传成功
193181 */
0 commit comments