123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- // 加载配置
- var GraceRequestConfig = require('@/GraceUI5/js/request/config.js');
- var md5 = require('@/GraceUI5/js/md5.js');
- // 核心工具定义
- module.exports = {
-
- // token 数据记录
- token : '',
-
- // 连接接服务器获得请求 token
- getTokenFromApi : function (resolve, reject) {
- new Promise(GraceRequestConfig.getToken).then((res)=>{
- this.token = res;
- // 将 token 保存在本地并记录获取时间
- uni.setStorageSync(GraceRequestConfig.localTokenKeyName, this.token);
- // 记录时间
- var dateObj = new Date();
- var cTime = dateObj.getTime();
- cTime += '';
- uni.setStorageSync('GraceRequestTokenTime', cTime);
- resolve();
- }).catch(()=>{
- this.debug('api 获取 token 失败');
- this.token = '';
- reject();
- });
- },
-
- // 获取 token
- getToken : function(resolve, reject){
- // 首先尝试从本地获取
- var token = uni.getStorageSync(GraceRequestConfig.localTokenKeyName);
- // 本地不存在 token 数据
- if(!token || token == ''){
- new Promise(this.getTokenFromApi.bind(this)).then((res)=>{
- resolve();
- }).catch(()=>{reject();});
- }
- // 存在 token 数据
- else{
- // 检查 token 有效期
- var expiredTime = GraceRequestConfig.expiredTime;
- expiredTime *= 1000;
- var tokenTime = Number(uni.getStorageSync('GraceRequestTokenTime'));
- tokenTime += expiredTime;
- var dateObj = new Date();
- var cTime = dateObj.getTime();
- // 有效期内
- if(tokenTime > cTime){
- this.token = token;
- resolve();
- }
- // 获取新的 token
- else{
- new Promise(this.getTokenFromApi.bind(this)).then((res)=>{
- resolve();
- }).catch(()=>{
- reject();
- });
- }
- }
- },
-
- // 设置默认值补齐
- requestInit : function(sets, withLoginToken){
- if(!sets.data){sets.data = {};}
- if(!sets.header){sets.header = {};}
- if(!sets.timeout){sets.timeout = 60000;}
- if(!sets.dataType){sets.dataType = 'json';}
- sets.header.token = this.token;
- if(withLoginToken){
- var loginToken = this.checkLogin();
- if(loginToken){sets.header.logintoken = loginToken;}
- }
- return sets;
- },
-
- // 服务端 token 错误处理
- tokenErrorHandle : function (res) {
- console.log(res);
- if(res.data && res.data == 'token error'){
- uni.removeStorageSync(GraceRequestConfig.localTokenKeyName);
- }
- },
-
- // GET 请求 异步
- get : function(url, sets, success, fail, complete, withLoginToken){
- if(!sets){sets = {};}
- if(!success){success = function(res){}}
- if(!fail){fail = function(e){}}
- if(!complete){complete = function(res){}}
- if(!withLoginToken){withLoginToken = false;}
- new Promise(this.getToken.bind(this)).then(()=>{
- if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
- sets = this.requestInit(sets, withLoginToken);
- uni.request({
- url : url,
- data : sets.data,
- timeout : sets.timeout,
- dataType : sets.dataType,
- header : sets.header,
- method : 'GET',
- success : (res)=>{
- this.debug(res);
- success(res.data);
- this.tokenErrorHandle(res.data);
- },
- fail : (error)=>{fail(error.errMsg);},
- complete : (res) =>{complete(res);}
- });
- }).catch((e)=>{
- console.log(e);
- this.tokenError();
- });
- },
-
- // GET 请求 同步
- getSync : async function(url, sets, withLoginToken) {
- let res, error;
- if(!withLoginToken){withLoginToken = false;}
- return new Promise(this.getToken.bind(this)).then(async ()=>{
- if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
- sets = this.requestInit(sets, withLoginToken);
- var [error, res] = await uni.request({
- url : url,
- data : sets.data,
- timeout : sets.timeout,
- dataType : sets.dataType,
- header : sets.header,
- method : 'GET'
- });
- if(error != null){ return false; }
- this.debug(res);
- this.tokenErrorHandle(res.data);
- return res.data;
- }).catch((e)=>{
- console.log(e);
- this.tokenError();
- return ['', e];
- });
- },
-
- // POST 请求 异步
- post : function(url, sets, success, fail, complete, isSign, withLoginToken){
- if(!sets){sets = {};}
- if(!success){success = function(res){}}
- if(!fail){fail = function(e){}}
- if(!complete){complete = function(res){}}
- if(!withLoginToken){withLoginToken = false;}
-
- new Promise(this.getToken.bind(this)).then(()=>{
- if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
- sets = this.requestInit(sets, withLoginToken);
- if(!sets.header['content-type']){
- sets.header['content-type'] = GraceRequestConfig.postHeaderDefault;
- }
- if(isSign == true){
- sets.data = this.sign(sets.data);
- }else if(isSign == 'value'){
- sets.data = this.signValue(sets.data);
- }
- uni.request({
- url : url,
- data : sets.data,
- timeout : sets.timeout,
- dataType : sets.dataType,
- header : sets.header,
- method : 'POST',
- success : (res)=>{
- this.debug(res);
- success(res.data);
- this.tokenErrorHandle(res.data);
- },
- fail : (error)=>{fail(error.errMsg);},
- complete : (res) =>{complete(res);}
- });
- }).catch((e)=>{
- console.log(e);
- this.tokenError();
- });
- },
-
- // POST 请求 同步
- postSync : async function(url, sets, isSign, withLoginToken) {
- let res, error;
- if(!withLoginToken){withLoginToken = false;}
- return new Promise(this.getToken.bind(this)).then(async ()=>{
- if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
- sets = this.requestInit(sets, withLoginToken);
- if(!sets.header['content-type']){
- sets.header['content-type'] = GraceRequestConfig.postHeaderDefault;
- }
- if(isSign == true){
- sets.data = this.sign(sets.data);
- }else if(isSign == 'value'){
- sets.data = this.signValue(sets.data);
- }
- var [error, res] = await uni.request({
- url : url,
- data : sets.data,
- timeout : sets.timeout,
- dataType : sets.dataType,
- header : sets.header,
- method : 'POST'
- });
- if(error != null){ return false; }
- this.tokenErrorHandle(res.data);
- return res.data;
- }).catch((e)=>{
- console.log(e);
- this.tokenError();
- return ['', e];
- });
- },
-
- // 文件上传
- upload : function(url, filePath, fileType, sets, success, fail, complete, withLoginToken){
- if(!sets){sets = {};}
- if(!success){success = function(res){}}
- if(!fail){fail = function(e){}}
- if(!complete){complete = function(res){}}
- if(!withLoginToken){withLoginToken = false;}
- new Promise(this.getToken.bind(this)).then(()=>{
- if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
- // 初始化 sets
- if(!sets.name){sets.name = 'file';}
- if(!sets.header){sets.header = {};}
- if(!sets.formData){sets.formData = {};}
- sets.header.token = this.token;
- if(withLoginToken){
- var loginToken = this.checkLogin();
- if(loginToken){sets.header.loginToken = loginToken;}
- }
- // 开始上传
- uni.uploadFile({
- url : url,
- filePath : filePath,
- name : sets.name,
- formData : sets.formData,
- header : sets.header,
- success : (res)=>{
- success(res.data);
- this.tokenErrorHandle(res.data);
- },
- fail : (error)=>{fail(error);},
- complete : (res) =>{complete(res);}
- });
- }).catch((e)=>{
- console.log(e);
- this.tokenError();
- });
- },
-
- // debug 函数
- debug : function (content) {
- if(!GraceRequestConfig.debug){return ;}
- console.log(content);
- },
-
- // token 错误
- tokenError : function () {
- uni.showToast({title:"请求失败,请重启应用重试", icon:"none"});
- },
-
- // 签名算法
- sign : function (data) {
- var keys = [];
- Object.keys(data).sort().map((key) => {keys.push(key);});
- keys.push(this.token);
- var sign = md5.md5(keys.join('-'));
- data.gracesign = sign;
- return data;
- },
-
- // signValue
- signValue : function(data){
- var vals = [];
- Object.keys(data).sort().map((key) => {vals.push(data[key]);});
- vals.push(this.token);
- var sign = md5.md5(vals.join('-'));
- data.gracesign = sign;
- return data;
- },
-
- // 登录检查
- // 登录后在本地保存一个 token
- checkLogin : function (notLoginDo) {
- var loginToken = uni.getStorageSync(GraceRequestConfig.userTokenKeyName);
- if(!loginToken || loginToken == ''){
- loginToken = '';
- if(notLoginDo){
- uni.showToast({title:"请登录", icon:"none", mask:true});
- setTimeout(()=>{notLoginDo();}, 1500);
- }
- return false;
- }
- return loginToken;
- },
-
- // 跳转到登录页面
- gotoLogin : function (path, opentype) {
- if(!path){path = '../login/login';}
- if(!opentype){opentype = 'redirect';}
- switch(opentype){
- case 'redirect' :
- uni.redirectTo({url:path});
- break;
- case 'navigate' :
- uni.navigateTo({url:path});
- break;
- case 'switchTab' :
- uni.switchTab({url:path});
- break;
- }
- },
-
- // 记录 用户 token 到本地
- // 格式 loginToken-uid
- writeLoginToken : function (token, uid) {
- var loginToken = token+'-'+uid;
- uni.setStorageSync(GraceRequestConfig.userTokenKeyName, loginToken);
- return ;
- }
-
- }
|