From 4e879ad1c7bfde8dee90b990cc44143dd21dc840 Mon Sep 17 00:00:00 2001 From: Luk Lu Date: Tue, 19 Jan 2021 21:28:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=8A=E9=A2=9C=E8=89=B2=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=88=B0unitool.js;=20=E6=B7=BB=E5=8A=A0=20c?= =?UTF-8?q?allBackend=20=E6=96=B9=E6=B3=95=EF=BC=8C=E6=9D=A5=E6=95=B4?= =?UTF-8?q?=E5=90=88=20uniCloud.callFunction=20=E5=92=8C=20uni.request?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unitool/index.js | 81 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 72 insertions(+), 9 deletions(-) diff --git a/unitool/index.js b/unitool/index.js index ee40e52..4613136 100644 --- a/unitool/index.js +++ b/unitool/index.js @@ -3,6 +3,14 @@ // #endif module.exports = { + RED: 'error', + GREEN: 'success', + BLUE: 'primary', + YELLOW: 'warning', + GREY: 'info', + BLACK_TOAST: 'default', + WHITE_BUTTON: 'default', + clog(...message) { console.log( '【【【【【【【【【【', @@ -16,9 +24,7 @@ module.exports = { async request({ method = 'POST', url, header = {}, data = {} }) { url = this.makeUrl(url) - if (uni.getStorageSync('_passtoken')) { - header._passtoken = uni.getStorageSync('_passtoken') - } + header._passtoken = uni.getStorageSync('_passtoken') if (method === 'GET') { // 如果不是 POST 方法,要额外把参数JSON化 for (let key in data) { @@ -32,6 +38,38 @@ module.exports = { return [error, response] }, + async callBackend({ backend = this.BACKEND, method = 'POST', api = 'api', who, act, what = {} }) { + console.log('👇 < BackendRequest > ', { who, act, what }, ' < /BackendRequest > 👇') + let result = {} + if (backend === 'CLOUD') { + let { success, header, requestedId, result: resultServer = {} } = await uniCloud.callFunction({ + name: who, + data: { + action: act, + params: Object.assign(what, { _passtoken: uni.getStorageSync('_passtoken') }), + // uniIdToken // uniCloud自动getStorageSync('uni_id_token')并传递为 uniIdToken;也可自行传入 uniIdToken + }, + }) + result = resultServer + } else { + if (method === 'GET') { + // 如果不是 POST 方法,要额外把参数JSON化 + for (let key in what) { + what[key] = JSON.stringify(what[key]) + } + } + let [error, { data: resultCloud = {}, statusCode, header, errMsg } = {}] = await uni.request({ + method, + url: this.makeUrl(`${api}/${who}/${act}`), + header: { _passtoken: uni.getStorageSync('_passtoken') }, + data: what, + }) + result = resultCloud + } + console.log('👆 < BackendResult > ️', result, '< /BackendResult > 👆') + return result + }, + async pickupFile({ mediaType = 'image', count = 1, @@ -42,6 +80,12 @@ module.exports = { formData = {}, name = 'file', } = {}) { + if (uni.getStorageSync('_passtoken')) { + header._passtoken = uni.getStorageSync('_passtoken') + } else { + return [{ _ERROR: 'USER_OFFLINE', errMsg: 'offline user cannot upload files' }, null] + } + let filePath if (mediaType === 'image') { let [errorChoose, { tempFilePaths, tempFiles } = {}] = await uni.chooseImage({ count, sizeType, sourceType }) @@ -54,12 +98,6 @@ module.exports = { } if (filePath) { - if (uni.getStorageSync('_passtoken')) { - header._passtoken = uni.getStorageSync('_passtoken') - } else { - return [{ _ERROR: 'USER_OFFLINE', errMsg: 'offline user cannot upload files' }, null] - } - for (let key in formData) { // multer 不会自动处理 JSON 数据,必须前后端配合处理 formData[key] = JSON.stringify(formData[key]) @@ -81,6 +119,12 @@ module.exports = { }, async pickupFile2Cloud({ mediaType = 'image', count = 1, sizeType = ['original', 'compressed'], sourceType = ['album', 'camera'], maxDuration } = {}) { + if (uni.getStorageSync('_passtoken')) { + header._passtoken = uni.getStorageSync('_passtoken') + } else { + return { _state: 'USER_OFFLINE', errMsg: 'offline user cannot upload files' } + } + let filePath, cloudPath, systemInfo = this.getSystemInfo() @@ -299,4 +343,23 @@ module.exports = { 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) }, + + regcode2aiid(code) { + if (typeof code === 'string' && /^[a-zA-Z0-9]+$/.test(code)) { + const alphabet = 'e5fcdg3hqa4b1n0pij2rstuv67mwx89klyz' + const base = 16367 + code = code.toLowerCase() + let len = code.length + let num = 0 + for (let i = 0; i < len; i++) { + num += alphabet.indexOf(code[i]) * Math.pow(alphabet.length, i) + } + let aiid = num / (base - alphabet.length) - base + if (aiid >= 0 && Number.isInteger(aiid)) { + // 允许 aiid===0:当第一个用户(aiid==1)登录时,需要一个系统默认的邀请码。 + return aiid + } + } + return null + }, }