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.
223 lines
5.8 KiB
223 lines
5.8 KiB
import { zconfig } from'../../pages/api/ztb'
|
|
const math = require('../../utils/math')
|
|
const util = require('../../utils/util')
|
|
const app = getApp()
|
|
|
|
Component({
|
|
options: {
|
|
addGlobalClass: true,
|
|
},
|
|
properties: {
|
|
fileList: {
|
|
type: Array,
|
|
value: []
|
|
},
|
|
cropper: {
|
|
type: Boolean,
|
|
value: false
|
|
},
|
|
disabled: {
|
|
type: Boolean,
|
|
value: false
|
|
},
|
|
type: {
|
|
type: String,
|
|
value: 'image'
|
|
},
|
|
url: {
|
|
type: String,
|
|
value: ''
|
|
},
|
|
column: {
|
|
type: Number,
|
|
value: 3
|
|
},
|
|
duration: {
|
|
type: Number,
|
|
value: 60,
|
|
},
|
|
count: {
|
|
type: Number,
|
|
value: 9
|
|
}
|
|
},
|
|
data: {
|
|
loadingWidth: math.divide(690, 3),
|
|
visible: false,
|
|
srcList: [],
|
|
taskList: []
|
|
},
|
|
lifetimes: {
|
|
// 生命周期函数,可以为函数,或一个在methods段中定义的方法名
|
|
detached: function () {
|
|
for (let i = 0; i < this.data.taskList.length; i++) {
|
|
if (this.data.taskList[index]) {
|
|
this.data.taskList[index].abort() // 取消上传任务
|
|
}
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
uploadFile: function (index, path) {
|
|
var _this = this
|
|
var header = { ...zconfig.header, 'X-APP-ID': app.xAppId, appversion: app.version, 'Content-Type': 'multipart/form-data' }
|
|
const task = wx.uploadFile({
|
|
url: zconfig.baseUrl + '/recycle-user-center/file-uploading/upload/image',
|
|
filePath: path,
|
|
name: 'image',
|
|
header,
|
|
success: function (result) {
|
|
var resp = null
|
|
if (!util.isEmpty(result.data)) {
|
|
resp = JSON.parse(result.data)
|
|
}
|
|
if (resp && resp.code === 0) {
|
|
_this.setData({
|
|
['fileList[' + index + '].status']: 8,
|
|
['fileList[' + index + '].url']: resp.data
|
|
})
|
|
} else {
|
|
if (_this.data.type == 'image') {
|
|
util.showToast('图片上传失败,请重新上传')
|
|
} else {
|
|
util.showToast('视频上传失败,请重新上传')
|
|
}
|
|
_this.setData({
|
|
['fileList[' + index + '].status']: -1
|
|
})
|
|
}
|
|
_this.onChange()
|
|
},
|
|
fail: function (res) {
|
|
_this.setData({ ['fileList[' + index + '].status']: -1 })
|
|
_this.onChange()
|
|
if (_this.data.type == 'image') {
|
|
util.showToast('图片上传失败,请重新上传')
|
|
} else {
|
|
util.showToast('视频上传失败,请重新上传')
|
|
}
|
|
},
|
|
complete: function (res) {
|
|
for (let i = 0; i < _this.data.taskList.length; i++) {
|
|
if (_this.data.taskList[i].path === path) {
|
|
_this.data.taskList.splice(i, 1);
|
|
break
|
|
}
|
|
}
|
|
}
|
|
})
|
|
if (task) {
|
|
// task.onProgressUpdate((res) => {
|
|
// _this.setData({
|
|
// ['fileList[' + index + '].percent']: res.progress
|
|
// })
|
|
// })
|
|
}
|
|
_this.data.taskList.push({ path: path, task: task })
|
|
},
|
|
onStart: function (res) {
|
|
if(res.tempFilePaths && res.tempFilePaths.length){
|
|
if(this.data.cropper){
|
|
this.setData({
|
|
visible: true,
|
|
srcList: res.tempFilePaths,
|
|
})
|
|
} else {
|
|
var startIndex = this.data.fileList.length
|
|
for (let i = 0; i < res.tempFilePaths.length; i++) {
|
|
this.setData({
|
|
['fileList[' + (startIndex + i) + ']']: { status: 1, url: null, path: res.tempFilePaths[i], percent: 0 }
|
|
})
|
|
this.uploadFile(startIndex + i, res.tempFilePaths[i])
|
|
}
|
|
}
|
|
} else if(!util.isEmpty(res.tempFilePath)){
|
|
if(this.data.fileList.length >= this.data.count){
|
|
return
|
|
}
|
|
if (Number(~~((10 * res.size) / 1024 / 1024) / 10) > 30) {
|
|
util.showToast('上传视频不能大于30M!')
|
|
return
|
|
}
|
|
var startIndex = this.data.fileList.length
|
|
this.setData({
|
|
['fileList[' + startIndex + ']']: { status: 1, url: null, path: res.tempFilePath, percent: 0, videoUrl: res.tempFilePath}
|
|
})
|
|
this.uploadFile(startIndex, res.tempFilePath)
|
|
}
|
|
},
|
|
// 文件选择:图片或者视频
|
|
chooseFile(e) {
|
|
if (this.data.type == 'image') {
|
|
wx.chooseImage({
|
|
count: this.data.count, //默认9
|
|
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
|
sourceType: ['album', 'camera'], //从相册选择
|
|
success: (res) => {
|
|
this.onStart(res)
|
|
}
|
|
})
|
|
} else if (this.data.type == 'video') {
|
|
wx.chooseVideo({
|
|
sourceType: ['album', 'camera'], //从相册选择
|
|
maxDuration: this.data.duration,
|
|
camera: 'back',
|
|
success: (res) => {
|
|
this.onStart(res)
|
|
}
|
|
})
|
|
}
|
|
},
|
|
viewImage(e) {
|
|
if (this.data.type !== 'image') {
|
|
return
|
|
}
|
|
var index = e.currentTarget.dataset.index
|
|
var imageList = []
|
|
for (let i = 0; i < this.data.fileList.length; i++) {
|
|
const element = this.data.fileList[i]
|
|
if (element.path) {
|
|
imageList.push(element.path)
|
|
} else if (element.url) {
|
|
imageList.push(element.url)
|
|
}
|
|
}
|
|
wx.previewImage({ urls: imageList, current: imageList[index] })
|
|
},
|
|
deleteFile(e) {
|
|
var index = e.currentTarget.dataset.index
|
|
// 如果是正在上传的;
|
|
if (this.data.fileList[index]) {
|
|
if (this.data.fileList[index].status === 1) {
|
|
if (this.data.taskList[index] && this.data.taskList[index].task) {
|
|
this.data.taskList[index].task.abort() // 取消上传任务
|
|
}
|
|
this.data.taskList.splice(index, 1)
|
|
}
|
|
this.data.fileList.splice(index, 1)
|
|
}
|
|
this.setData({
|
|
fileList: this.data.fileList
|
|
})
|
|
this.onChange()
|
|
},
|
|
onChange: function () {
|
|
this.triggerEvent('customevent', this.data.fileList)
|
|
},
|
|
//裁剪图片回调
|
|
cropCallback: function (event) {
|
|
var startIndex = this.data.fileList.length
|
|
for (let i = 0; i < event.detail.length; i++) {
|
|
this.setData({
|
|
visible: false,
|
|
['fileList[' + (startIndex + i) + ']']: { status: 1, url: null, path: event.detail[i], percent: 0 }
|
|
})
|
|
this.uploadFile(startIndex + i, event.detail[i])
|
|
}
|
|
},
|
|
//关闭回调
|
|
closeCallback: function (event) {
|
|
this.setData({ visible: false })
|
|
}
|
|
}
|
|
})
|