//app.js import api from './api' let mta = require('/utils/mta_analysis.js') import regeneratorRuntime from '/utils/runtime' const FILE_BASE_NAME = 'tmp_base64src'; App({ onLaunch: function (options) { wx.removeStorageSync("loginInfo"); // this.getToken(); const scene = decodeURIComponent(options.query.scene); mta.App.init({ "appID": "500719713", "eventID": "500719847", "autoReport": true, "statParam": true, "ignoreParams": [], "statPullDownFresh": true, "statShareApp": true, "statReachBottom": true }); if(scene){ const sceneQuery=scene.split(':'); if(sceneQuery.length==2){ mta.Event.stat(sceneQuery[0],{ [sceneQuery[1]]:'true' }) } } }, api:api, isLogin:false, loginCallBack:[], onShow:function(){ //this.post(api.findSale) //this.post(api.querySale) }, /**获取用户登录的后的一些信息**/ getToken: function (isJump=true) { var loginInfo = wx.getStorageSync("loginInfo"); //console.log('loginInfo',loginInfo); return new Promise((resolve, reject) => { var that=this; //登录成功回调 let SuccessBack = function (res, loginType){ // 发送 res.code 到后台换取 openId, sessionKey, unionId let code = res.code; //console.info("微信请求token1"+code); that.request({ url:api.code, data:{ code: code, // uuid:new Date().getTime(), wxAppId:"wxe0bc848feb0176a9" }, method: 'POST', header:{ 'content-type': 'application/json' }, // 默认值 }).then((data)=>{ //console.log(data); return Promise.resolve(data) }).then(res=>{ //console.log('userToken3',res); // let isGoLogin=false; /* if(isJump&&!res.data.auth){ //reject('未注册'); isGoLogin=true wx.navigateTo({ url:"/pages/login/login" }); //return false }*/ //res.data.auth=false; //测试未注册状态 wx.setStorageSync("loginInfo",res.data) that.isLogin=false; resolve(res.data); while (that.loginCallBack.length>0){ that.loginCallBack.pop()() } }).catch(error=>{ console.log('登录失败',error); /* reject(error)*/ }); } //个人微信登录逻辑 let LoginWx = function(){ wx.login({ success: res=>SuccessBack(res,1), fail:error=>{ that.isLogin=false; console.info("wx.login error={}",JSON.stringify(error)); reject(error); } }); }; wx.checkSession({ success:r=> { //console.log('wx.checkSession') if (loginInfo) { resolve(loginInfo); return; } this.isLogin=true; LoginWx(); }, fail:e=>{ console.log('checkSession',false) this.isLogin=true; LoginWx(); } }); }); }, //判断用户是否注册 authorization: async function () { const userInfo = await this.getToken(); if (!userInfo.auth) { wx.navigateTo({ url: "/pages/login/login" }) return Promise.resolve(false) } return Promise.resolve(true) }, /** 微信request 封装 **/ request: function (options) { var that = this; return (function (options) { var promise = new Promise((resolve, reject) => { //init let i=0, maxRequest=3; let request=function(refres=false){ i++; //登录过期刷新headerToekn if(refres){ const loginInfo=wx.getStorageSync('loginInfo'); options.header.wxToken= loginInfo.wxToken; if (loginInfo.extraToken && loginInfo.extraToken.AdminAuthorization){ options.header.AdminAuthorization = loginInfo.extraToken.AdminAuthorization.token } } wx.request({ url: options.url, data: options.data, method: options.method, header: options.header, success: function (res) { if (res.header.RefreshAdminAuthorization){ //todo 刷新本地token token值=res.header.RefreshAdminAuthorization const loginInfo=wx.getStorageSync('loginInfo'); if(loginInfo.extraToken){ loginInfo.extraToken={ AdminAuthorization:{ token:res.header.RefreshAdminAuthorization } } wx.setStorageSync('loginInfo',loginInfo) } } wx.hideLoading(); if(res.statusCode>='500'){ wx.showToast({ title: res.data.message||"服务器异常", icon: 'none', duration: 3000, }); reject('服务器异常'); return } //登录过期 if (res.data.code == "ACSDK10000003") { wx.removeStorageSync('loginInfo'); that.getToken().then(res => { //console.log('登录过期重试',res); request(true); }).catch(error => { wx.showToast({ title: '登录失败', icon: 'none', duration: 3000, }); }); } else if (res.data.code == "ACSDK10000005") { //接口未授权 wx.removeStorageSync('loginInfo'); that.getToken().then(res => { console.log('ACSDK10000005',res); //临时拦截 console.log(typeof options.data.noLogin == 'undefined') if(typeof options.data.noLogin == 'undefined'){ if(!res.auth){ wx.navigateTo({ url:"/pages/login/login" }); } } }).catch(error => { wx.showToast({ title: '登录失败', icon: 'none', duration: 3000, }); }); }else if(res.data.success==false){ // wx.showToast({ // title: res.data.message, // icon: 'none', // duration: 3000, // }); reject(res); }else{ resolve(res.data); } return false; }, fail: function (e) { wx.hideLoading(); wx.showToast({ title: "网络错误", icon: 'none', duration: 3000, }); reject('网络出错'); } }); }; request(); }); return promise; })(options); }, /** 微信request.get 封装 **/ get: async function (url, data) { return this.request({ url: url, data: data, method: 'GET', header: { 'content-type': 'application/json', // 默认值 } }) }, /** 微信request.post 封装 **/ post: async function (url, data={},opt) { let that=this; const peddingFun=async ()=>{ //let postData; let options=Object.assign( { showLoading:true, needToken:true }, opt); //console.log('loginInfo', loginInfo); let header = { 'content-type': 'application/json', // 默认值 }; let loginInfo = await this.getToken(options.needToken); header.wxToken= loginInfo.wxToken; if(options.needToken&&!loginInfo.auth){ wx.navigateTo({ url:"/pages/login/login" }) return Promise.reject('未注册'); } if (loginInfo.extraToken && loginInfo.extraToken.AdminAuthorization){ //console.log('AdminAuthorization'); header.AdminAuthorization = loginInfo.extraToken.AdminAuthorization.token } // postData = Object.assign({}, data); if(options.showLoading){ wx.showLoading({ title:"正在加载" }); } //临时拦截 data.noLogin = options.noLogin; return this.request({ url: url, data: data, method: 'POST', header: header }); }; // login ing wait if(this.isLogin){ this.loginCallBack.push(peddingFun) return } return peddingFun() }, /** 微信request.post 封装 **/ postForm: async function (url, data) { var openid = await this.getToken(); return this.request({ url:url, data: data, method: 'POST', header: { 'content-type': 'x-www-form-urlencoded', // 默认值 'X-Auth-Code': openid } }); }, /** connectSocket **/ connectSocket:async function (url){ let loginInfo = await this.getToken(); let header = { [loginInfo.authHeaderName]:loginInfo.token }; return new Promise(function(resolve ,reject){ wx.connectSocket({ url: url, header:header, success:(res)=>{ console.log('socket连接成功',res) resolve(res) }, fail:(error)=>{ console.log('socket连接失败',error) reject(error) } }); }); }, /**上传文件**/ uploadFile:async function(options={}){ return new Promise( (resolve ,reject)=>{ wx.chooseImage({ count: 1, // 默认9 extension:options.extension?options.extension:['pdf','jpg','png','jpeg','gif'], success: async (res)=> { wx.showLoading({ title:"正在上传文件..." }) // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片 var tempFilePaths = res.tempFiles; var imgInfo = await this.getImageInfo(tempFilePaths[0].path); //验证图片 if(options.validate){ if(!options.validate(imgInfo)){ reject(new Error('上传图片不符合规范')) return false } } const uploadTask = wx.uploadFile({ url: api.upload, //仅为示例,非真实的接口地址 filePath: tempFilePaths[0].path, name: 'file', success: (res)=>{ resolve(res) }, fail:(error)=>{ resolve(error) }, complete:(res)=>{ wx.hideLoading(); } }) uploadTask.onProgressUpdate((res) => { wx.showLoading({ title:`上传中${res.progress}%..` }) }) }, fail:(error)=>{ reject(error) } }) }); }, /**获取图片基本信息**/ getImageInfo(url){ return new Promise((resolve,reject)=>{ wx.getImageInfo({ src: url, success : res => { resolve(res) }, fail:error => { resolve(error) } }) }) }, //从聊天中选择文件 uploadFileMsg:async function(url,options={}){ return new Promise((resolve ,reject)=>{ wx.chooseMessageFile({ count: 1, // 默认9, type:'file', extension:options.extension?options.extension:['pdf','jpg','png','jpeg'], success: (res)=> { wx.showLoading({ title:"正在上传文件..." }) // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片 var tempFilePaths = res.tempFiles; // console.log(tempFilePaths) const uploadTask = wx.uploadFile({ url: api.upload, //仅为示例,非真实的接口地址 filePath: tempFilePaths[0].path, name: 'file', success: (res)=>{ resolve(res) }, fail:(error)=>{ resolve(error) }, complete:(res)=>{ wx.hideLoading(); } }); uploadTask.onProgressUpdate((res) => { wx.showLoading({ title:`上传中${res.progress}%..` }) }) }, fail:(error)=>{ reject(error) } }); }); }, globalData: { userInfo: null }, //base64图片路径 base64src: function(base64data, cb) { const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || []; if(!format) { return (new Error('ERROR_BASE64SRC_PARSE')); } const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`; const buffer = wx.base64ToArrayBuffer(bodyData); const fsm = wx.getFileSystemManager(); fsm.writeFile({ filePath, data: buffer, encoding: 'binary', success() { cb(filePath); }, fail() { return (new Error('ERROR_BASE64SRC_WRITE')); }, }); }, //预览文档 openDocument:function(src){ wx.showLoading({ title:"正在加载文件..." }) wx.downloadFile({ url: src, success: (res)=> { const filePath = res.tempFilePath wx.openDocument({ filePath: filePath, success: function (res) { console.log('打开文档成功') }, fail:(e)=>{ console.log('文件预览失败',e); wx.showToast({ title:"预览失败", duration:2000, icon:"none" }) } }) }, fail:e=>{ console.log(e); wx.showToast({ title:"预览失败", duration:2000, icon:"none" }) }, complete:(res)=>{ wx.hideLoading(); } }) }, //预览图片 previewImg:function(imgs){ wx.previewImage({ current: imgs[0], // 当前显示图片的http链接 urls: imgs // 需要预览的图片http链接列表 }) }, //设置标题 setNavTitle(title) { wx.setNavigationBarTitle({ title: title }) let pages = getCurrentPages() // 获取加载的页面 let currentPage = pages[pages.length - 1] // 获取当前页面的对象 currentPage.setData({ navigationBarTitle: title }) }, })