import config from './config' export default { isHttp(path) { return path.startsWith('http') || path.startsWith('https') }, escapeHTML(a) { a = "" + a; return a.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'") }, /** * @function unescapeHTML 还原html脚本 < > & " ' * @param a - 字符串 */ unescapeHTML(a){ a = "" + a; return a.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'") }, uuid(len = 16) { const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('') const uuid = [] if (len) { // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位 for (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * chars.length] } else { let r // rfc4122标准要求返回的uuid中,某些位为固定的字符 uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-' uuid[14] = '4' for (let i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random() * 16 uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r] } } } return uuid.join('') }, upload(data) { return uni.uploadFile({ url: this.isHttp(data.url) ? data.url : config.apiBaseUrl + data.url, name: data.name || 'file', formData: { ...data.formData, token: uni.getStorageSync('token') }, header: data.header || {}, filePath: data.filePath }).then(res => { return JSON.parse(res) }) }, uploadCloud(data) { return uniCloud.uploadFile(data).then(res => { return res }) }, chooseAndUpload(methods, chooseParam, uploadParam, isCloud) { const uploadArr = [] return this[methods](chooseParam).then(file => { file.filePaths.forEach((filePath, index) => { if (isCloud) { const fileArr = filePath.split('.') // 只在h5可用 const fileType = file.tempFiles[index].type || 'image/png' const suffix = fileArr.length >= 2 ? fileArr[fileArr.length - 1] : fileType.split('/')[1] uploadArr.push(this.uploadCloud({ filePath, cloudPath: this.uuid() + '.' + suffix, fileType: (methods === 'chooseImage' ? 'image/' : 'video/') + suffix }).then(res => { if (res.success) { return { filePath: res.fileID } } else { uni.showToast({ title: res.msg, icon: 'none' }) } })) } else{ uploadArr.push(this.upload({ ...uploadParam, filePath }).then(res => { if (res.code === 200 || res.success) { return res.data } else { uni.showToast({ title: res.msg, icon: 'none' }) } })) } }) uni.showLoading({ title: '上传中...' }) return Promise.all(uploadArr).then(res => { uni.hideLoading() return res.filter(item => item) }) }) }, chooseImage(data) { return uni.chooseImage({ count: 1, ...data }).then(res => { console.log(res); return { filePaths: res.tempFilePaths, tempFiles: res.tempFiles } }) }, chooseAndUploadImage(chooseParam, uploadParam, isCloud) { return this.chooseAndUpload('chooseImage',chooseParam, uploadParam, isCloud) }, chooseVideo(data) { return uni.chooseVideo({ ...data }).then(res => { return { filePaths: [res.tempFilePath], tempFiles: [res.tempFile] } }) }, chooseAndUploadVideo(chooseParam, uploadParam, isCloud) { return this.chooseAndUpload('chooseVideo',chooseParam, uploadParam, isCloud) }, }