const md5 = require('./md5.js'); const ENV = require('./env.js'); var api = { /** * post 请求数据 * * @param string urlName url地址 * @param {object} data 数据对象 * @param function thenFun then回调 * @param function catchFun catch回调 */ post:function(urlName, data, thenFun,catchFun) { //数据组合 var newData = Object.assign(api.setSign(data), ENV.appData()); uni.$u.http.post(urlName, newData).then(res => { if(thenFun) thenFun(res); }).catch((rs) =>{ if(catchFun) catchFun(rs); }); }, /** * oss上传图片 * * @param {object} data 数据对象 {filePath:'',fileType:'image',scene:'user_small'} * scene //对应文件配置file->file_type列表类型 * "back_icon": "后端图标", "back_small": "后端小图", "back_centre": "后端中图", "back_max": "后端大图", "user_small": "用户端小图", "user_centre": "用户端中图", "user_max": "用户端大图", "user_portrait": "用户面部模型" * @param function thenFun then回调 * @param function catchFun catch回调 */ ossUpload:function(data,ossthenFun,osscatchFun){ //从http://tmp/IX45zGr8kI1Tb1fd2c2b3045e9bfce734869d2024805.png 中 //提取 IX45zGr8kI1Tb1fd2c2b3045e9bfce734869d2024805.png 文件名 //获取文件名 var fileName = data.filePath.split('/').pop(); //获取文件格式 var suffixArr = fileName.split('.'); var suffix = suffixArr[1]; //先获取oss签名 api.post('api/aliSignature',{ scene:data.scene, appoint:1, filename:fileName, },function(res){ console.log('签名成功',res); var ossConfig = res; data.ossConfig = ossConfig; api.upload(ossConfig.host,data,function(rs){ var file_url = ossConfig.dir ? ossConfig.dir + (fileName ? '/' + fileName : '') : ossConfig.key; file_url = `/${file_url}`; //console.log(file_url); rs.data.file_url = file_url; console.log('上传成功',rs); if(ossthenFun) ossthenFun(rs); },function(er){ console.log('上传失败',er); if(osscatchFun) osscatchFun(er); }); },function(err){ console.log('签名失败',err); if(osscatchFun) osscatchFun(err); }); }, /** * get 请求数据 * * @param string urlName url地址 * @param {object} data 数据对象 * @param function thenFun then回调 * @param function catchFun catch回调 */ get:function(urlName, data, thenFun,catchFun) { //数据组合 var newData = data; uni.$u.http.get(urlName,{params:newData}).then(res => { if(thenFun) thenFun(res); }).catch((rs) =>{ if(catchFun) catchFun(rs); }); }, /** * put 请求数据 * * @param string urlName url地址 * @param {object} data 数据对象 * @param function thenFun then回调 * @param function catchFun catch回调 */ put:function(urlName, data, thenFun,catchFun) { //数据组合 var newData = Object.assign(api.setSign(data), ENV.appData()); uni.$u.http.put(urlName, newData).then(res => { if(thenFun) thenFun(res); }).catch((rs) =>{ if(catchFun) catchFun(rs); }); }, /** * delete 请求数据 * * @param string urlName url地址 * @param {object} data 数据对象 * @param function thenFun then回调 * @param function catchFun catch回调 */ delete:function(urlName, data, thenFun,catchFun) { //数据组合 var newData = Object.assign(api.setSign(data), ENV.appData()); uni.$u.http.delete(urlName, newData).then(res => { if(thenFun) thenFun(res); }).catch((rs) =>{ if(catchFun) catchFun(rs); }); }, /** * upload 请求数据 * * @param string urlName url地址 * @param {object} data 数据对象 {filePath:'',fileType:'image'} * @param function thenFun then回调 * @param function catchFun catch回调 */ upload:function(urlName, data, thenFun,catchFun){ var newData = data; var formData = {}; console.log('判断是否存在',data.hasOwnProperty('ossConfig')) if(data.hasOwnProperty('ossConfig')) { var ossConfig = data.ossConfig; var fileNameOss = ossConfig.fileName; var key = ossConfig.dir ? ossConfig.dir + (fileNameOss ? '/' + fileNameOss : '') : ossConfig.key; var newFormData ={ key: key, OSSAccessKeyId: ossConfig.accessId, policy: ossConfig.policy, // 输入你获取的的policy success_action_status: '200', // 让服务端返回200,不然,默认会返回204 signature: ossConfig.signature, // 输入你获取的的signature }; formData = newFormData; } uni.$u.http.upload(urlName, { params: {}, /* 会加在url上 */ // #ifdef MP-ALIPAY fileType: newData.fileType, // 仅支付宝小程序,且必填。image/video/audio // #endif filePath: newData.filePath, // 要上传文件资源的路径。 // 注:如果局部custom与全局custom有同名属性,则后面的属性会覆盖前面的属性,相当于Object.assign(全局,局部) custom: {auth:true,toast:true,}, // 可以加一些自定义参数,在拦截器等地方使用。比如这里我加了一个auth,可在拦截器里拿到,如果true就传token name: 'file', // 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容 // #ifdef H5 || APP-PLUS timeout: 60000, // H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+) // #endif header: { "Content-Type": "multipart/form-data" }, /* 会与全局header合并,如有同名属性,局部覆盖全局 */ formData: formData, // HTTP 请求中其他额外的 form data // 返回当前请求的task, options。请勿在此处修改options。非必填 getTask: (task, options) => { console.log(options); task.onProgressUpdate((res) => { console.log('上传进度' + res.progress); console.log('已经上传的数据长度' + res.totalBytesSent); console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend); }); }, }).then(res => { console.log('upload then success !!!',res); if(thenFun) thenFun(res); }).catch((rs) =>{ console.log('upload catch err !!!',rs); if(catchFun) catchFun(rs); }); }, setSign:function(data) { const date = parseInt(new Date().getTime() / 1000); const str = date + 'xingzhi&&2021'; data.i_app_timestamp = date; data.i_app_key = md5(str); //判断登录 openid 和 unionid 的来源 // #ifdef APP-PLUS data.i_app_platform = 'APP-PLUS'; // #endif // #ifdef MP //微信小程序 // #ifdef MP-WEIXIN data.i_app_platform = 'MP-WEIXIN'; // #endif //支付宝小程序 // #ifdef MP-ALIPAY data.i_app_platform = 'MP-ALIPAY'; // #endif //百度小程序 // #ifdef MP-BAIDU data.i_app_platform = 'MP-BAIDU'; // #endif //头条小程序 // #ifdef MP-TOUTIAO data.i_app_platform = 'MP-TOUTIAO'; // #endif //QQ小程序 // #ifdef MP-QQ data.i_app_platform = 'MP-QQ'; // #endif //360小程序 // #ifdef MP-360 data.i_app_platform = 'MP-360'; // #endif // #endif // #ifdef H5 data.i_app_platform = 'H5'; // #endif //语言包 data.i_app_lang ='zh'; //系统 data.i_app_system = uni.getStorageSync('app_system'); //这里是token 如果登录每个接口都需要这个 const token = uni.getStorageSync('token'); if(token.length > 0) { data.token = token; } return data; }, /** * 返回域名 * */ domain:function() { return ENV.CdnUrl; }, /** * 返回接口地址 * */ api:function() { return ENV.ApiUrl; }, /** * 返回接口环境 * */ env:function(){ return ENV.EnvShow; }, /** * oss 地址 * */ ossurl(url){ const app_config = uni.getStorageSync('app_config'); return app_config.public_url + url; }, getOssurl(){ const app_config = uni.getStorageSync('app_config'); return app_config.public_url; }, } module.exports = api;