This commit is contained in:
陆柯 2020-07-13 13:24:10 +08:00
parent 73d810197d
commit 9f005f2112

167
index.js
View File

@ -3,67 +3,51 @@
// #endif // #endif
module.exports = { module.exports = {
clog(...message){ clog(...message) {
console.log('【【【【【【【【【【', console.log('【【【【【【【【【【',
getCurrentPages().length>0 ? getCurrentPages().pop().route : 'pages/Welcome', // 在首页时getApp() 或 getCurrentPages() 有可能获取不到。 getCurrentPages().length > 0 ? getCurrentPages().pop().route : 'pages/Welcome', // 在首页时getApp() 或 getCurrentPages() 有可能获取不到。
...message, ...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) url = this.makeUrl(url)
if (uni.getStorageSync('_passtoken')) { if (uni.getStorageSync('_passtoken')) {
header._passtoken = uni.getStorageSync('_passtoken') header._passtoken = uni.getStorageSync('_passtoken')
} }
if (method==='GET') { // 如果不是 POST 方法,要额外把参数JSON化 if (method === 'GET') { // 如果不是 POST 方法,要额外把参数JSON化
for (let key in data) { for (let key in data) {
data[key] = JSON.stringify(data[key]) data[key] = JSON.stringify(data[key])
} }
} }
console.log('👇 👇 👇 👇 < Request > 👇 👇 👇 👇 ', {method, url, header, data}, '👆 👆 👆 👆 < /Request > 👆 👆 👆 👆') console.log('👇 👇 👇 👇 < Request > 👇 👇 👇 👇 ', { method, url, header, data }, '👆 👆 👆 👆 < /Request > 👆 👆 👆 👆')
let [error, response] = await uni.request({method, url, header, data}) let [error, response] = await uni.request({ method, url, header, data })
console.log('⬇️ ⬇️ ⬇️ ⬇️ < Response > ⬇️ ⬇️ ⬇️ ⬇️ ', response, '⬆️ ⬆️ ⬆️ ⬆️ < /Response > ⬆️ ⬆️ ⬆️ ⬆️') console.log('⬇️ ⬇️ ⬇️ ⬇️ < Response > ⬇️ ⬇️ ⬇️ ⬇️ ', response, '⬆️ ⬆️ ⬆️ ⬆️ < /Response > ⬆️ ⬆️ ⬆️ ⬆️')
return [error, response] return [error, response]
}, },
async pickupFile({type='image', count=1, mediaType, sizeType, sourceType, compress=false, url, header={}, formData={}, name='file'}){ // choose and upload file async pickupFile({ mediaType = 'image', count = 1, sizeType = ['original', 'compressed'], sourceType = ['album', 'camera'], url, header = {}, formData = {}, name = 'file' } = {}) {
let picked let filePath
if (type==='image'){ if (mediaType === 'image') {
picked = await uni.chooseImage({count, sizeType}) let [errorChoose, { tempFilePaths, tempFiles } = {}] = await uni.chooseImage({ count, sizeType, sourceType })
}else if (type==='video'){ filePath = tempFilePaths[0]
picked = await uni.chooseVideo({count, compressed:compress, sourceType}) } else if (mediaType === 'video') {
}else { let [errorChoose, { tempFilePath }] = await uni.chooseVideo({ sourceType })
picked = await uni.chooseMedia({count, mediaType, sizeType, sourceType}) filePath = tempFilePath
} else {
return [{ _ERROR: 'UNKNOWN_MEDIATYPE' }, null]
} }
let [errorChoose, {tempFilePaths, tempFiles}={}] = picked
if (!errorChoose){ if (filePath) {
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 (uni.getStorageSync('_passtoken')) { if (uni.getStorageSync('_passtoken')) {
header._passtoken = uni.getStorageSync('_passtoken') header._passtoken = uni.getStorageSync('_passtoken')
}else{ } else {
return [{ _ERROR: 'USER_OFFLINE', errMsg:'offline user cannot upload files' }, null] return [{ _ERROR: 'USER_OFFLINE', errMsg: 'offline user cannot upload files' }, null]
} }
for (let key in formData) { // multer 不会自动处理 JSON 数据,必须前后端配合处理 for (let key in formData) { // multer 不会自动处理 JSON 数据,必须前后端配合处理
@ -71,44 +55,83 @@ module.exports = {
} }
uni.showLoading() 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() uni.hideLoading()
if (response && response.data) { if (response && response.data) {
try { try {
response.data = JSON.parse(response.data) response.data = JSON.parse(response.data)
}catch (exception) {} } catch (exception) { }
} }
return [errorUpload, response] 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) url = this.makeUrl(url)
if (uni.getStorageSync('_passtoken')) { if (uni.getStorageSync('_passtoken')) {
header._passtoken = uni.getStorageSync('_passtoken') header._passtoken = uni.getStorageSync('_passtoken')
}else{ } else {
return [{ errMsg:'offline user cannot upload files' }, null] return [{ errMsg: 'offline user cannot upload files' }, null]
} }
for (let key in formData) { // multer 不会自动处理 JSON 数据,必须前后端配合处理 for (let key in formData) { // multer 不会自动处理 JSON 数据,必须前后端配合处理
formData[key] = JSON.stringify(formData[key]) 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) { if (response && response.data) {
try { try {
response.data = JSON.parse(response.data) response.data = JSON.parse(response.data)
}catch (exception) {} } catch (exception) { }
} }
return [error, response] 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 // #ifdef APP-PLUS
plus.runtime.openURL(url) plus.runtime.openURL(url)
// #endif // #endif
@ -117,7 +140,7 @@ module.exports = {
// #endif // #endif
}, },
getSystemInfo(){ getSystemInfo() {
let systemInfo = uni.getSystemInfoSync() let systemInfo = uni.getSystemInfoSync()
// #ifdef H5 // #ifdef H5
systemInfo.runtime = 'h5' systemInfo.runtime = 'h5'
@ -149,25 +172,25 @@ module.exports = {
return systemInfo return systemInfo
}, },
showToast({type, icon, image, title, duration, ...rest}){ showToast({ type, icon, image, title, duration, ...rest }) {
let pageNow = this.$store ? this : getCurrentPages().pop() let pageNow = this.$store ? this : getCurrentPages().pop()
if (pageNow.$refs && pageNow.$refs.toast) { // 在 ios app 里,虽然能获得 pageNow但是不存在 pageNow.$refs不知为何。android app 没有测试 if (pageNow.$refs && pageNow.$refs.toast) { // 在 ios app 里,虽然能获得 pageNow但是不存在 pageNow.$refs不知为何。android app 没有测试
pageNow.$refs.toast.open({type, content:title, duration, ...rest}) pageNow.$refs.toast.open({ type, content: title, duration, ...rest })
}else { } else {
// #ifdef APP-PLUS // #ifdef APP-PLUS
if (uni.getSystemInfoSync().platform==='android') { if (uni.getSystemInfoSync().platform === 'android') {
uni.showToast({icon:'none', title, duration, ...rest}) uni.showToast({ icon: 'none', title, duration, ...rest })
return return
} }
// #endif // #endif
if (!image){ if (!image) {
image = `../static/Common.${type?type:'info'}.png` 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() let page = this.$store ? this : getCurrentPages().pop()
uni.setNavigationBarTitle({ title: pageTitle || page.i18nText[page.$store.state.i18n.activeLang].tPageTitle }) uni.setNavigationBarTitle({ title: pageTitle || page.i18nText[page.$store.state.i18n.activeLang].tPageTitle })
// #ifdef H5 // #ifdef H5
@ -176,28 +199,28 @@ module.exports = {
if (page.$store._mutations['i18n/setTabbar']) page.$store.commit('i18n/setTabbar') // 必须要在有 tab 的页面里重置才有效果 if (page.$store._mutations['i18n/setTabbar']) page.$store.commit('i18n/setTabbar') // 必须要在有 tab 的页面里重置才有效果
}, },
localeText(){ localeText() {
let page = this.$store ? this : getCurrentPages().pop() let page = this.$store ? this : getCurrentPages().pop()
return page.i18nText[page.$store.state.i18n.activeLang] return page.i18nText[page.$store.state.i18n.activeLang]
}, },
formatMoney(value, decimal){ formatMoney(value, decimal) {
return Number(value).toFixed(decimal||2) return Number(value).toFixed(decimal || 2)
}, },
formatPercent(value, decimal){ formatPercent(value, decimal) {
return `${Number(value*100).toFixed(decimal||2)}` return `${Number(value * 100).toFixed(decimal || 2)}`
}, },
formatDate(date, format){ formatDate(date, format) {
if (!(date instanceof Date)){ if (!(date instanceof Date)) {
date = new Date(date) date = new Date(date)
} }
if (!date.toJSON()) { if (!date.toJSON()) {
date = new Date() date = new Date()
} }
format = (format && typeof format==='string') format = (format && typeof format === 'string')
? format ? format
: 'yyyy-mm-dd HH:MM:SS' : 'yyyy-mm-dd HH:MM:SS'
let o = { let o = {
@ -211,20 +234,20 @@ module.exports = {
} }
if (/(y+)/.test(format)) if (/(y+)/.test(format))
format = format.replace(RegExp.$1, (`${date.getFullYear()}`).substr(4 - RegExp.$1.length)) format = format.replace(RegExp.$1, (`${date.getFullYear()}`).substr(4 - RegExp.$1.length))
for (var k in o){ for (var k in o) {
if (new RegExp(`(${k})`).test(format)) if (new RegExp(`(${k})`).test(format))
format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((`00${o[k]}`).substr((`${o[k]}`).length))) format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((`00${o[k]}`).substr((`${o[k]}`).length)))
} }
return format return format
}, },
hash(data, {hasher='sha256', salt, input='utf8', output='hex'}={}){ hash(data, { hasher = 'sha256', salt, input = 'utf8', output = 'hex' } = {}) {
if (typeof(data)!=='string' && !(data instanceof Buffer) && !(data instanceof DataView)) if (typeof (data) !== 'string' && !(data instanceof Buffer) && !(data instanceof DataView))
data=JSON.stringify(data) data = JSON.stringify(data)
if (salt && typeof(salt)==='string') if (salt && typeof (salt) === 'string')
data=data+salt 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 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' 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) return require('crypto').createHash(hasher).update(data, inputEncoding).digest(outputEncoding)
}, },