You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
2.8 KiB
125 lines
2.8 KiB
<template> |
|
<view class="mz-upload-container"> |
|
<uv-upload |
|
:width="width" |
|
:height="height" |
|
:fileList="fileList" |
|
name="1" |
|
multiple |
|
:maxCount="10" |
|
uploadIcon="plus" |
|
@delete="(res) => {uploadDel(res)}" |
|
@afterRead="(res) => {uploadPut(res)}" |
|
></uv-upload> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
import { imghost } from '@/config/host.js' |
|
import api from "@/utils/functions"; |
|
export default{ |
|
name:'MzUpload', |
|
props:{ |
|
value:{ |
|
type:Array, |
|
default:[] |
|
}, |
|
width:{ |
|
type:String, |
|
default:'160rpx' |
|
}, |
|
height:{ |
|
type:String, |
|
default:'160rpx' |
|
}, |
|
format:{ |
|
type:String, |
|
default:'array' |
|
} |
|
}, |
|
data() { |
|
return { |
|
fileList:[], |
|
} |
|
}, |
|
methods: { |
|
uploadSubmit(data){ |
|
if(this.format === 'array'){ |
|
return data.map(item => { |
|
return { |
|
url:item.url, |
|
type:item.type |
|
}; |
|
}); |
|
}else{ |
|
return data.map(item => { |
|
return item.url; |
|
}); |
|
} |
|
}, |
|
uploadShow(data){ |
|
let result = []; |
|
try{ |
|
data.forEach(item => { |
|
let rowData = {}; |
|
if(typeof item === 'string'){ |
|
rowData.url = item; |
|
rowData.type = item || api.getFileType(item); |
|
}else{ |
|
rowData.url = item.url; |
|
rowData.type = item.type || api.getFileType(item.type); |
|
} |
|
result.push(rowData) |
|
}) |
|
}catch (e){ |
|
this.fileList = []; |
|
} |
|
this.fileList = result; |
|
}, |
|
uploadPut(event){ |
|
let lists = [].concat(event.file); |
|
let fileListLen = this.fileList.length; |
|
lists.map((item) => { |
|
this.fileList.push({ |
|
...item, |
|
status: 'uploading', |
|
message: '上传中', |
|
}); |
|
}); |
|
for (let i = 0; i < lists.length; i++) { |
|
const fileType = api.getFileType(lists[i].url); |
|
api.uploadOssFile(lists[i].url).then(res => { |
|
let item = this.fileList[fileListLen]; |
|
this.fileList.splice(fileListLen, 1, { |
|
...item, |
|
status: 'success', |
|
message: '', |
|
url: res.show_path, |
|
thumb: res.show_path, |
|
type:fileType |
|
}); |
|
fileListLen++; |
|
}) |
|
} |
|
}, |
|
uploadDel(fileIndex){ |
|
this.fileList.splice(fileIndex.index,1); |
|
}, |
|
}, |
|
mounted() { |
|
this.uploadShow(); |
|
}, |
|
watch:{ |
|
fileList: { |
|
handler(newVal,oldVal){ |
|
this.$emit('update:modelValue',this.uploadSubmit(newVal)); |
|
}, |
|
deep:true, |
|
} |
|
}, |
|
} |
|
</script> |
|
|
|
<style lang="scss"> |
|
@import './components/index.scss'; |
|
</style> |