| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- // 加载配置
- import GraceRequestConfig from '@/custom/graceRequestConfig.js';
- import md5 from '@/Grace6/js/md5.js';
- // 核心工具定义
- export default {
- // token 数据记录
- token: '',
- //
- getTokenFromApi: function(count) {
- return new Promise((resolve, reject) => {
- this.debug('第 ' + count + ' 次 token 请求');
- let p = GraceRequestConfig.getToken();
- p.then((res) => {
- this.token = res;
- resolve(res);
- }).catch((err) => {
- reject('token error');
- });
- });
- },
- // 获取 token
- getToken: function(count) {
- return new Promise((resolve, reject) => {
- // 首先尝试从本地获取
- var token = uni.getStorageSync(GraceRequestConfig.localTokenKeyName);
- // 本地不存在 token 数据
- // 执行 token 请求函数获取 token
- if (!token || token == '') {
- let p = this.getTokenFromApi(1);
- p.then((res) => {
- this.token = res;
- resolve(res);
- }).catch((err) => {
- let p2 = this.getTokenFromApi(2);
- p2.then((res) => {
- this.token = res;
- resolve(res);
- }).catch((err) => {
- reject(err);
- });
- });
- }
- // 存在 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);
- }
- // 获取新的 token
- else {
- let p = this.getTokenFromApi(1);
- p.then((res) => {
- this.token = res;
- resolve(res);
- }).catch((err) => {
- let p2 = this.getTokenFromApi(2);
- p2.then((res) => {
- this.token = res;
- resolve(res);
- }).catch((err) => {
- reject(err);
- });
- });
- }
- }
- });
- },
- // 设置默认值补齐
- requestInit: function(sets, withLoginToken, url) {
- if (!sets.data) {
- sets.data = {};
- }
- if (!sets.header) {
- sets.header = {};
- }
- if (!sets.timeout) {
- sets.timeout = GraceRequestConfig.expiredTime;
- }
- if (!sets.dataType) {
- sets.dataType = 'json';
- }
- sets.header.token = this.token;
- if (withLoginToken) {
- var loginToken = this.checkLogin();
- if (loginToken) {
- sets.header.logintoken = loginToken;
- }
- }
- if (GraceRequestConfig.apiBaseUrl != '') {
- sets.requestUrl = GraceRequestConfig.apiBaseUrl + url;
- } else {
- sets.requestUrl = url;
- }
- return sets;
- },
- // 服务端 token 错误处理
- tokenErrorHandle: function(res) {
- if (res.data && res.data == 'token error') {
- uni.removeStorageSync(GraceRequestConfig.localTokenKeyName);
- return true;
- }
- return false;
- },
- // 请求基础函数
- base: function(url, sets, withLoginToken, type, isSign) {
- return new Promise(async (resolve, reject) => {
- let p = this.getToken();
- p.then((token) => {
- if (this.befor != null) {
- this.befor();
- this.befor = null;
- }
- sets = this.requestInit(sets, withLoginToken, url);
- if (type == 'POST') {
- if (!sets.header['content-type']) {
- sets.header['content-type'] = GraceRequestConfig.postHeaderDefault;
- }
- }
- if (!isSign) {
- isSign = false;
- }
- if (isSign) {
- sets.data = this.sign(sets.data);
- }
- uni.request({
- url: sets.requestUrl,
- data: sets.data,
- timeout: sets.timeout,
- dataType: sets.dataType,
- header: sets.header,
- method: type
- }).then((data) => {
- if (this.after != null) {
- this.after();
- this.after = null;
- }
- resolve(data.data);
- }).catch((err) => {
- if (this.after != null) {
- this.after();
- this.after = null;
- }
- reject(err)
- });
- }).catch((err) => {
- if (this.after != null) {
- this.after();
- this.after = null;
- }
- reject(err)
- });
- });
- },
- // GET 请求
- get: function(url, sets, withLoginToken) {
- return new Promise((resolve, reject) => {
- if (!sets) {
- sets = {};
- }
- if (!withLoginToken) {
- withLoginToken = false;
- }
- let p = this.base(url, sets, withLoginToken, 'GET');
- p.then((res) => {
- if (this.tokenErrorHandle(res)) {
- let p2 = this.base(url, sets, withLoginToken, 'GET');
- p2.then((res2) => {
- resolve(res2);
- }).catch((err) => {
- reject(err);
- });
- } else {
- resolve(res);
- }
- }).catch((err) => {
- reject(err);
- });
- });
- },
- // POST 请求
- post: function(url, sets, isSign, withLoginToken) {
- return new Promise((resolve, reject) => {
- if (!sets) {
- sets = {};
- }
- if (!isSign) {
- isSign = false;
- }
- if (!withLoginToken) {
- withLoginToken = false;
- }
- let p = this.base(url, sets, withLoginToken, 'POST', isSign);
- p.then((res) => {
- if (this.tokenErrorHandle(res)) {
- let p2 = this.base(url, sets, withLoginToken, 'POST', isSign);
- p2.then((res2) => {
- resolve(res2);
- }).catch((err) => {
- reject(err);
- });
- } else {
- resolve(res);
- }
- }).catch((err) => {
- reject(err);
- });
- });
- },
- // upload
- upload: function(url, filePath, fileType, sets, withLoginToken) {
- return new Promise(async (resolve, reject) => {
- let p = this.getToken();
- p.then((token) => {
- if (this.befor != null) {
- this.befor();
- this.befor = null;
- }
- sets = this.requestInit(sets, withLoginToken, url);
- if (!sets.name) {
- sets.name = 'file';
- }
- uni.uploadFile({
- url: sets.requestUrl,
- filePath: filePath,
- name: sets.name,
- formData: sets.data,
- header: sets.header,
- }).then((data) => {
- if (this.after != null) {
- this.after();
- this.after = null;
- }
- resolve(data.data);
- }).catch((err) => {
- if (this.after != null) {
- this.after();
- this.after = null;
- }
- reject(err)
- });
- }).catch((err) => {
- if (this.after != null) {
- this.after();
- this.after = null;
- }
- reject(err)
- });
- });
- },
- // debug 函数
- debug: function(content) {
- if (!GraceRequestConfig.debug) {
- return;
- }
- console.log(content);
- },
- // 签名算法
- sign: function(data) {
- if (data.gracesign) {
- delete data.gracesign;
- }
- 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;
- }
- }
- }
|