上传组件优化

This commit is contained in:
13218645326 2023-12-05 20:12:35 +08:00
parent 1e60aeb65a
commit 60a6934b28
2 changed files with 57 additions and 36 deletions

View File

@ -1,40 +1,48 @@
<template> <template>
<div> <div class="upload_ss_c">
<!--action="/api/abk/web/v1/resource/file" --> <!--action="/api/abk/web/v1/resource/file" -->
<el-upload :action="actionUrl" :auto-upload="autoUpload" style="width: 100%" :on-success="(response, file) => successUpload(response, file)" <el-upload :action="actionUrl" :auto-upload="autoUpload" style="width: 100%"
:on-error="errorUpload" :accept="acceptTypeList.join(',')" :before-upload="beforeUpload" :multiple="multiple" :on-success="(response, file) => successUpload(response, file)" :on-error="errorUpload"
:limit="maxLimit" :on-exceed="handleExceed" :file-list="fileList" :disabled="disabledFlag" :accept="acceptTypeList.join(',')" :before-upload="beforeUpload" :multiple="multiple" :limit="maxLimit"
:on-exceed="handleExceed" :file-list="fileList" :disabled="disabledFlag"
:on-remove="(file, fileList) => removeFile(file, fileList)" :on-preview="(file) => preview(file)" :on-remove="(file, fileList) => removeFile(file, fileList)" :on-preview="(file) => preview(file)"
:on-progress="(event, file, fileList) => onProgressFn(event, file, fileList)" :on-progress="(event, file, fileList) => onProgressFn(event, file, fileList)" list-type="picture-card">
list-type="picture-card"
>
<!-- 上传的按钮 或者 icon 通过具名插槽的方式 --> <!-- 上传的按钮 或者 icon 通过具名插槽的方式 -->
<slot name="uploadBtn"></slot> <slot name="default"></slot>
</el-upload> </el-upload>
<el-progress v-if="showProcessFlag && processFlag" :percentage="loadProcess"></el-progress> <el-progress v-if="showProcessFlag && processFlag" :percentage="loadProcess"></el-progress>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref ,nextTick} from "vue" import { ref, nextTick } from "vue"
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import {Base64} from 'js-base64' import { Base64 } from 'js-base64'
const props = defineProps({ const props = defineProps({
actionUrl: { actionUrl: {
// //
type: String, type: String,
default: '', default: '',
}, },
autoUpload:{// width: {
type:Boolean, //
default:false type: String,
default: '72px',
},
height: {
//
type: String,
default: '72px',
},
autoUpload: {//
type: Boolean,
default: false
}, },
acceptTypeList: { acceptTypeList: {
// //
type: Array, type: Array,
default: () => { default: () => {
return ['.jpg','.jpeg','.png'] return ['.jpg', '.jpeg', '.png']
// ['doc', 'docx', 'xlsx', 'xls', 'txt', 'pdf','jpg','jpeg','png','zip,'rar'] // ['doc', 'docx', 'xlsx', 'xls', 'txt', 'pdf','jpg','jpeg','png','zip,'rar']
}, },
}, },
@ -61,10 +69,10 @@ const props = defineProps({
fileList: {// fileList: {//
type: Array, type: Array,
default: () => { default: () => {
return [ ] return []
}, },
}, },
listType:{ listType: {
type: String,//'text' | 'picture' | 'picture-card' type: String,//'text' | 'picture' | 'picture-card'
default: 'picture', default: 'picture',
}, },
@ -117,8 +125,8 @@ let loadProcess = ref(0)//进度条的刻度值
// //
const successUpload = (response:any, file:any) => { const successUpload = (response: any, file: any) => {
console.log("successUpload",response,file) console.log("successUpload", response, file)
if (response.rt.status === 200) { if (response.rt.status === 200) {
props.fileList.push({ props.fileList.push({
url: response.data, url: response.data,
@ -148,7 +156,7 @@ const beforeUpload = (file) => {
return false return false
} }
if (!props.acceptTypeList.includes(name.split('.').pop())+'.') { if (!props.acceptTypeList.includes(name.split('.').pop()) + '.') {
ElMessage({ ElMessage({
type: 'warning', type: 'warning',
message: `文件格式仅支持${props.acceptTypeList.join(',')}M` message: `文件格式仅支持${props.acceptTypeList.join(',')}M`
@ -214,7 +222,7 @@ const preview = (data) => {
} }
const onProgressFn=(event, file, fileList)=>{ const onProgressFn = (event, file, fileList) => {
processFlag.value = true processFlag.value = true
loadProcess.value = event.percent.toFixed(2) loadProcess.value = event.percent.toFixed(2)
if (loadProcess.value >= 100) { if (loadProcess.value >= 100) {
@ -223,11 +231,21 @@ const preview = (data) => {
processFlag.value = false processFlag.value = false
}) })
} }
} }
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped>
:deep(.el-upload){
width: v-bind('props.width')!important;
height: v-bind('props.height')!important;
}
:deep(.el-upload-list__item){
width: v-bind('props.width')!important;
height: v-bind('props.height')!important;
}
</style>
<style></style>

View File

@ -5,11 +5,14 @@
<el-input v-model.trim="form.title" placeholder="请输入标题" clearable maxlength="30" /> <el-input v-model.trim="form.title" placeholder="请输入标题" clearable maxlength="30" />
</el-form-item> </el-form-item>
<el-form-item label="图片:" prop="picture"> <el-form-item label="图片:" prop="picture">
<uploadCom :maxLimit="3" listType="picture-card" :acceptTypeList="['.jpg','.jpeg','.png']">
<template v-slot:uploadBtn> <uploadCom :maxLimit="3" listType="picture-card" :acceptTypeList="['.jpg','.jpeg','.png']" width="72px" height="72px">
<template v-slot:default>
<el-icon size="48" color="#aaa"><Plus /></el-icon> <el-icon size="48" color="#aaa"><Plus /></el-icon>
</template> </template>
</uploadCom> </uploadCom>
</el-form-item> </el-form-item>
<el-form-item label="跳转链接:" prop="linkUrl"> <el-form-item label="跳转链接:" prop="linkUrl">
<el-input v-model.trim="form.linkUrl" clearable /> <el-input v-model.trim="form.linkUrl" clearable />