diff --git a/index.js b/index.js index 22aa5ee..e446cbe 100644 --- a/index.js +++ b/index.js @@ -3,67 +3,51 @@ // #endif module.exports = { - clog(...message){ - console.log('【【【【【【【【【【', - getCurrentPages().length>0 ? getCurrentPages().pop().route : 'pages/Welcome', // 在首页时,getApp() 或 getCurrentPages() 有可能获取不到。 - ...message, + clog(...message) { + console.log('【【【【【【【【【【', + getCurrentPages().length > 0 ? getCurrentPages().pop().route : 'pages/Welcome', // 在首页时,getApp() 或 getCurrentPages() 有可能获取不到。 + ...message, '】】】】】】】】】】】') }, - sleep: (ms)=>new Promise((resolve, reject)=>setTimeout(resolve, ms)), + sleep: (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms)), + + async request({ method = 'POST', url, header = {}, data = {} }) { - async request({method='POST', url, header={}, data={}}){ - url = this.makeUrl(url) if (uni.getStorageSync('_passtoken')) { header._passtoken = uni.getStorageSync('_passtoken') } - if (method==='GET') { // 如果不是 POST 方法,要额外把参数JSON化 + if (method === 'GET') { // 如果不是 POST 方法,要额外把参数JSON化 for (let key in data) { data[key] = JSON.stringify(data[key]) } } - - console.log('👇 👇 👇 👇 < Request > 👇 👇 👇 👇 ', {method, url, header, data}, '👆 👆 👆 👆 < /Request > 👆 👆 👆 👆') - let [error, response] = await uni.request({method, url, header, data}) + + console.log('👇 👇 👇 👇 < Request > 👇 👇 👇 👇 ', { method, url, header, data }, '👆 👆 👆 👆 < /Request > 👆 👆 👆 👆') + let [error, response] = await uni.request({ method, url, header, data }) console.log('⬇️ ⬇️ ⬇️ ⬇️ < Response > ⬇️ ⬇️ ⬇️ ⬇️ ', response, '⬆️ ⬆️ ⬆️ ⬆️ < /Response > ⬆️ ⬆️ ⬆️ ⬆️') return [error, response] }, - async pickupFile({type='image', count=1, mediaType, sizeType, sourceType, compress=false, url, header={}, formData={}, name='file'}){ // choose and upload file - let picked - if (type==='image'){ - picked = await uni.chooseImage({count, sizeType}) - }else if (type==='video'){ - picked = await uni.chooseVideo({count, compressed:compress, sourceType}) - }else { - picked = await uni.chooseMedia({count, mediaType, sizeType, sourceType}) + async pickupFile({ mediaType = 'image', count = 1, sizeType = ['original', 'compressed'], sourceType = ['album', 'camera'], url, header = {}, formData = {}, name = 'file' } = {}) { + let filePath + if (mediaType === 'image') { + let [errorChoose, { tempFilePaths, tempFiles } = {}] = await uni.chooseImage({ count, sizeType, sourceType }) + filePath = tempFilePaths[0] + } else if (mediaType === 'video') { + let [errorChoose, { tempFilePath }] = await uni.chooseVideo({ sourceType }) + filePath = tempFilePath + } else { + return [{ _ERROR: 'UNKNOWN_MEDIATYPE' }, null] } - let [errorChoose, {tempFilePaths, tempFiles}={}] = picked - if (!errorChoose){ - - if (compress && tempFiles[0].size>1048576){ - console.log('========= compressing -------') - await uni.compressImage({ // compressImage not implemented yet in H5 - src:tempFiles[0].path, - quality: 50, - success: res => { - console.log('======= compressed-------') - console.log(res) - tempFilePaths[0] = res.tempFilePath - }, - fail: err => { - console.log('======= compress failed ====') - console.log(err) - } - }) - } + if (filePath) { if (uni.getStorageSync('_passtoken')) { header._passtoken = uni.getStorageSync('_passtoken') - }else{ - return [{ _ERROR: 'USER_OFFLINE', errMsg:'offline user cannot upload files' }, null] + } else { + return [{ _ERROR: 'USER_OFFLINE', errMsg: 'offline user cannot upload files' }, null] } for (let key in formData) { // multer 不会自动处理 JSON 数据,必须前后端配合处理 @@ -71,44 +55,83 @@ module.exports = { } uni.showLoading() - let [errorUpload, response] = await uni.uploadFile({ filePath: tempFilePaths[0], url: this.makeUrl(url), header, formData, name }) + let [errorUpload, response] = await uni.uploadFile({ filePath: filePath, url: this.makeUrl(url), header, formData, name }) uni.hideLoading() if (response && response.data) { try { response.data = JSON.parse(response.data) - }catch (exception) {} + } catch (exception) { } } return [errorUpload, response] - - }else{ - return [{ _ERROR:'USER_CANCELED'}, null] + } - + + return [{ _ERROR: 'USER_CANCELED' }, null] + }, - async uploadFile({url, name='file', formData={}, header={}}){ + async uploadFile({ url, name = 'file', formData = {}, header = {} } = {}) { url = this.makeUrl(url) if (uni.getStorageSync('_passtoken')) { header._passtoken = uni.getStorageSync('_passtoken') - }else{ - return [{ errMsg:'offline user cannot upload files' }, null] + } else { + return [{ errMsg: 'offline user cannot upload files' }, null] } for (let key in formData) { // multer 不会自动处理 JSON 数据,必须前后端配合处理 formData[key] = JSON.stringify(formData[key]) } - let [error, response] = await uni.uploadFile({url,name,formData,header}) + let [error, response] = await uni.uploadFile({ url, name, formData, header }) if (response && response.data) { try { response.data = JSON.parse(response.data) - }catch (exception) {} + } catch (exception) { } } return [error, response] }, - openUrl(url){ + async pickupFile2Cloud({ mediaType = 'image', count = 1, sizeType = ['original', 'compressed'], sourceType = ['album', 'camera'] } = {}) { + let filePath, cloudPath + if (mediaType === 'image') { + let [errorChoose, { tempFilePaths, tempFiles } = {}] = await uni.chooseImage({ count, sizeType, sourceType }) + filePath = tempFilePaths[0] + cloudPath = 'cloud.jpg' + // #ifdef H5 + cloudPath = tempFiles[0].name + // #endif + } else if (mediaType === 'video') { + let [errorChoose, { tempFilePath, tempFile, name }] = await uni.chooseVideo({ sourceType }) + filePath = tempFilePath + cloudPath = 'cloud.mp4' + // #ifdef H5 + cloudPath = name + // #endif + } else { + return { _state: 'FAIL' } + } + + if (filePath) { + uni.showLoading() + const { fileID, requestId } = await uniCloud.uploadFile({ + filePath: filePath, + cloudPath: cloudPath, + fileType: mediaType, + onUploadProgress: function (progressEvent) { + console.log(progressEvent); + var percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total); + } + }) + uni.hideLoading() + + console.log('文件上传结果:', { fileID, requestId }) + return { _state: 'SUCCESS', fileID, requestId } + } + return { _state: 'FAIL' } + }, + + openUrl(url) { // #ifdef APP-PLUS plus.runtime.openURL(url) // #endif @@ -117,11 +140,11 @@ module.exports = { // #endif }, - getSystemInfo(){ + getSystemInfo() { let systemInfo = uni.getSystemInfoSync() // #ifdef H5 systemInfo.runtime = 'h5' - + // if (device.mobile()){ // systemInfo.platform = 'mobile' // }else if (device.desktop()){ @@ -135,7 +158,7 @@ module.exports = { } // #endif - + // #ifdef APP-PLUS || APP-PLUS-NVUE systemInfo.runtime = 'app' // 细分成 systemInfo.platform === ios or android @@ -145,29 +168,29 @@ module.exports = { systemInfo.runtime = 'mp' // 细分成 WEIXIN, ... // #endif - + return systemInfo }, - - showToast({type, icon, image, title, duration, ...rest}){ + + showToast({ type, icon, image, title, duration, ...rest }) { let pageNow = this.$store ? this : getCurrentPages().pop() if (pageNow.$refs && pageNow.$refs.toast) { // 在 ios app 里,虽然能获得 pageNow,但是不存在 pageNow.$refs,不知为何。android app 没有测试 - pageNow.$refs.toast.open({type, content:title, duration, ...rest}) - }else { + pageNow.$refs.toast.open({ type, content: title, duration, ...rest }) + } else { // #ifdef APP-PLUS - if (uni.getSystemInfoSync().platform==='android') { - uni.showToast({icon:'none', title, duration, ...rest}) + if (uni.getSystemInfoSync().platform === 'android') { + uni.showToast({ icon: 'none', title, duration, ...rest }) return } // #endif - if (!image){ - image = `../static/Common.${type?type:'info'}.png` + if (!image) { + image = `../static/Common.${type ? type : 'info'}.png` } - uni.showToast({icon, image, title, duration, ...rest}) + uni.showToast({ icon, image, title, duration, ...rest }) } }, - setBarTitles({windowTitle, pageTitle}={}){ + setBarTitles({ windowTitle, pageTitle } = {}) { let page = this.$store ? this : getCurrentPages().pop() uni.setNavigationBarTitle({ title: pageTitle || page.i18nText[page.$store.state.i18n.activeLang].tPageTitle }) // #ifdef H5 @@ -175,30 +198,30 @@ module.exports = { // #endif if (page.$store._mutations['i18n/setTabbar']) page.$store.commit('i18n/setTabbar') // 必须要在有 tab 的页面里重置才有效果 }, - - localeText(){ + + localeText() { let page = this.$store ? this : getCurrentPages().pop() return page.i18nText[page.$store.state.i18n.activeLang] }, - formatMoney(value, decimal){ - return Number(value).toFixed(decimal||2) + formatMoney(value, decimal) { + return Number(value).toFixed(decimal || 2) }, - formatPercent(value, decimal){ - return `${Number(value*100).toFixed(decimal||2)}` + formatPercent(value, decimal) { + return `${Number(value * 100).toFixed(decimal || 2)}` }, - formatDate(date, format){ - if (!(date instanceof Date)){ + formatDate(date, format) { + if (!(date instanceof Date)) { date = new Date(date) } if (!date.toJSON()) { date = new Date() } - format = (format && typeof format==='string') - ? format + format = (format && typeof format === 'string') + ? format : 'yyyy-mm-dd HH:MM:SS' let o = { 'm+': date.getMonth() + 1, //月份 @@ -209,22 +232,22 @@ module.exports = { 'S+': date.getSeconds(), //秒 's': date.getMilliseconds() //毫秒 } - if (/(y+)/.test(format)) + if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (`${date.getFullYear()}`).substr(4 - RegExp.$1.length)) - for (var k in o){ - if (new RegExp(`(${k})`).test(format)) + for (var k in o) { + if (new RegExp(`(${k})`).test(format)) format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((`00${o[k]}`).substr((`${o[k]}`).length))) } return format }, - hash(data, {hasher='sha256', salt, input='utf8', output='hex'}={}){ - if (typeof(data)!=='string' && !(data instanceof Buffer) && !(data instanceof DataView)) - data=JSON.stringify(data) - if (salt && typeof(salt)==='string') - data=data+salt - let inputEncoding=input // my.INPUT_LIST.indexOf(option.input)>=0?option.input:my.INPUT // 'utf8', 'ascii' or 'latin1' for string data, default to utf8 if not specified; ignored for Buffer, TypedArray, or DataView. - let outputEncoding=(output==='buf')?undefined:output // (my.OUTPUT_LIST.indexOf(output)>=0?output:my.OUTPUT) // option.output: 留空=》默认输出hex格式;或者手动指定 'buf', hex', 'latin1' or 'base64' + hash(data, { hasher = 'sha256', salt, input = 'utf8', output = 'hex' } = {}) { + if (typeof (data) !== 'string' && !(data instanceof Buffer) && !(data instanceof DataView)) + data = JSON.stringify(data) + if (salt && typeof (salt) === 'string') + data = data + salt + let inputEncoding = input // my.INPUT_LIST.indexOf(option.input)>=0?option.input:my.INPUT // 'utf8', 'ascii' or 'latin1' for string data, default to utf8 if not specified; ignored for Buffer, TypedArray, or DataView. + let outputEncoding = (output === 'buf') ? undefined : output // (my.OUTPUT_LIST.indexOf(output)>=0?output:my.OUTPUT) // option.output: 留空=》默认输出hex格式;或者手动指定 'buf', hex', 'latin1' or 'base64' return require('crypto').createHash(hasher).update(data, inputEncoding).digest(outputEncoding) },