task.js 2.51 KB
import uploader from '@/plugins/uploader/index.js'
import { RUN, ERROR } from "@/common/log.js"

const getNetworkType = function() {
	return new Promise((resolve, reject) => {
		uni.getNetworkType({
			success (res) {
				resolve(res.networkType)
			},
			fail (res) {
				resolve('获取失败')
			} 
		})
	})
}

export default {
    /**
     * 执行任务队列
     */
    async uploadImageTask(that) {
        const uploadTask = JSON.parse(JSON.stringify(that.uploadTask)).reverse()
        const networkType = await getNetworkType()
        const options = {
            files: uploadTask, // 必填 临时文件路径 格式: [{path: "图片地址"}]
            load: false, //(默认 true 说明:本接口是否提示加载动画)
            onEachUpdate: res => {
                console.log("上传成功返回:",res);

                const log = {
                    ...res,
                    mobile: that.vuex_user.mobile,
                    networkType: networkType
                }
                delete log.files
                RUN('upload_photo_success', log)
            },
            onProgressUpdate: res => {
                //console.log("上传进度返回:",res);
            }
        }

        uploader.qnFileUpload(options).then(res => {
            this.refreshTask(that, res)
        }).catch(err => {
            console.log("err", err)

            err.mobile = that.vuex_user.mobile
            if(!err.key) err.files = uploadTask
            if(!err.orderNumber) err.orderNumber = uploadTask[0].orderNumber
            if(!err.networkType) err.networkType = networkType
            ERROR('upload_photo_error', err)
            
            if (err.errMsg && (err.errMsg.indexOf('fail file not found') !== -1 || err.errMsg.indexOf('file doesn') !== -1)) { // 在任务中删除不存在的图片
                const newTask = uploadTask.filter(v => v.key !== err.key)
                that.$u.vuex('uploadTask', newTask)
            }
        })
    },
    refreshTask(that, result) {
        const uploadTask = JSON.parse(JSON.stringify(that.uploadTask)).reverse()
        let newTask = [] 
        uploadTask.forEach(v => {
            if (!result.includes(`/${v.key}`)) { // 删除已上传的图片
                newTask.push(v)
            }
        })
        
        // uni.setStorageSync('delImg', delImg) // 已上传完的图片,会在启动系统的时候做一次清理
        that.$u.vuex('uploadTask', newTask)
    }
}