UNPKG

yylib-quick-mobile

Version:

yylib-quick-mobile

432 lines (427 loc) 17.7 kB
// 'use strict'; import sa from 'superagent'; import { Toast } from 'antd-mobile'; import AuthToken from './authToken'; import UrlUtils from './UrlUtils'; //封装ajax的相关方法 var ajax = { /*get-查询线上真实缓存数据*/ getJSONOffLine:function(url,params,success,error) { let finalParams = { reqUrl:url, reqMethod:'get', params:params }; try { YYPlugin.call("ExpandPlugin", "queryData", finalParams, success, error) } catch (err) { this.mixAjax(finalParams, success, error) } }, /*post-查询线上真实缓存数据*/ postJSONOffLine:function(url,params,success,error) { let finalParams = { reqUrl:url, reqMethod:'post', params:params }; try { YYPlugin.call("ExpandPlugin", "queryData", finalParams, success, error) } catch (err) { this.mixAjax(finalParams, success, error) } }, /*gettext-查询线上真实缓存数据*/ getTextOffLine:function(url,params,success,error) { let finalParams = { reqUrl:url, reqMethod:'get', params:params, paramAccept:'text' }; try { YYPlugin.call("ExpandPlugin", "queryData", finalParams, success, error) } catch (err) { this.mixAjax(finalParams, success, error) } }, /*posttext-查询线上真实缓存数据*/ postTextOffLine:function(url,params,success,error) { let finalParams = { reqUrl:url, reqMethod:'post', params:params, paramAccept:'text' }; try { YYPlugin.call("ExpandPlugin", "queryData", finalParams, success, error) } catch (err) { this.mixAjax(finalParams, success, error) } }, /*postform-查询线上真实缓存数据*/ postFormOffLine:function(url,params,success,error) { let contentType = 'application/x-www-form-urlencoded;charset=UTF-8'; let finalParams = { reqUrl: url, reqMethod:'post', reqHeader: {'content-type': contentType}, params: params, paramType:'form' }; try { YYPlugin.call("ExpandPlugin", "queryData", finalParams, success, error) } catch (err) { this.mixAjax(finalParams, success, error) } }, /*查询线上真实缓存数据*/ onLineQueryData: function (params, success, error) { try { YYPlugin.call("ExpandPlugin", "queryData", params, success, error) } catch (err) { this.mixAjax(params, success, error) } }, /*查询手机端手动的暂存数据*/ offLineQueryData: function (params, success, error) { try { YYPlugin.call("ExpandPlugin", "queryTempBillListData", params, success, error) } catch (err) { this.mixAjax(params, success, error) } }, /*根据billId查询手机端手动暂存数据*/ offLineQueryBillData: function (params, success, error) { try { YYPlugin.call("ExpandPlugin", "queryBillDetail", params, success, error) } catch (err) { this.mixAjax(params, success, error) } }, /*根据billId暂存数据*/ offLineSaveTempData: function (params, success, error) { try { YYPlugin.call("ExpandPlugin", "saveTempData", params, success, error) } catch (err) { this.mixAjax(params, success, error) } }, /*单据提交方法*/ onLineSaveData: function (params, success, error) { try { YYPlugin.call("ExpandPlugin", "saveData", params, success, error) } catch (err) { this.mixAjax(params, success, error) } }, /*查询指定附件数据*/ offLineAttachDetail: function (params, success, error) { try { YYPlugin.call("ExpandPlugin", "queryAttachDetail", params, success, error) } catch (err) { this.mixAjax(params, success, error) } }, /*删除列表数据*/ delBillData: function (params, success, error) { try { YYPlugin.call("ExpandPlugin", "delBillData", params, success, error) } catch (err) { this.mixAjax(params, success, error) } }, mixAjax: function (params, success, error) { if (params["reqMethod"] === "get") { this.request({ url: params["reqUrl"], query: params["params"], success: success, error: error, type: params["paramType"]?params["paramType"]:'json', accept: params['paramAccept']?params['paramAccept']:'json' }); } else if (params["reqMethod"] === "post") { this.request({ url: params["reqUrl"], send: params["params"], success: success, error: error, method: 'POST', type: params["paramType"]?params["paramType"]:'json', accept: params['paramAccept']?params['paramAccept']:'json' }); } }, isFunction:function(params){ return typeof params==="function" }, /** * 通过get方法请求json数据 * @param url 请求的URL * @param data 请求的参数 * @param success 请求成功的回调 * @param error 请求失败的回调 * @param complete 请求完成时的回调,无论成功还是失败。 * @param cookies 请求是否携带cookies */ getJSON: function getJSON(url, data, success, error, complete, cookies) { if (this.isFunction(data)) { //此时的data实际是success函数 this.request({ url: url, success: arguments[1], error: arguments[2], complete: arguments[3], cookies: arguments[4] }); } else { this.request({ url: url, query: data, success: success, error: error, complete: complete, cookies: cookies }); } } //请求携带Cookies信息 , getJSONWithCookies: function getJSONWithCookies(url, data, success, error, complete) { if (this.isFunction(data)) { this.getJSON(url, arguments[1], arguments[2], arguments[3], true); } else { this.getJSON(url, data, success, error, complete, true); } } //通过post方法请求json数据 , postJSON: function postJSON(url, data, success, error, complete, cookies) { if (this.isFunction(data)) { this.request({ url: url, success: arguments[1], error: arguments[2], complete: arguments[3], cookies: arguments[4], method: 'POST' }); } else { this.request({ url: url, send: data, success: success, error: error, complete: complete, cookies: cookies, method: 'POST' }); } } //请求携带Cookies信息 , postJSONWithCookies: function postJSONWithCookies(url, data, success, error, complete) { if (this.isFunction(data)) { this.postJSON(url, arguments[1], arguments[2], arguments[3], true); } else { this.postJSON(url, data, success, error, complete, true); } } //通过delete方法请求json数据 , delJSON: function delJSON(url, data, success, error, complete, cookies) { if (this.isFunction(data)) { this.request({ url: url, success: arguments[1], error: arguments[2], complete: arguments[3], cookies: arguments[4], method: 'DELETE' }); } else { this.request({ url: url, send: data, success: success, error: success, complete: complete, cookies: cookies, method: 'DELETE' }); } } //请求携带Cookies信息 , delJSONWithCookies: function delJSONWithCookies(url, data, success, error, complete) { if (this.isFunction(data)) { this.delJSON(url, arguments[1], arguments[2], arguments[3], true); } else { this.delJSON(url, data, success, error, complete, true); } } //通过get方法请求text数据 , getText: function getText(url, data, success, error, complete, cookies) { if (this.isFunction(data)) { this.request({ url: url, success: arguments[1], error: arguments[2], complete: arguments[3], cookies: arguments[4], accept: 'text' }); } else { this.request({ url: url, query: data, success: success, error: error, complete: complete, cookies: cookies, accept: 'text' }); } } //请求携带Cookies信息 , getTextWithCookies: function getTextWithCookies(url, data, success, error, complete) { if (this.isFunction(data)) { this.getText(url, arguments[1], arguments[2], arguments[3], true); } else { this.getText(url, data, success, error, complete, true); } } //通过post方法请求发送表单数据 , postForm: function postForm(url, data, success, error, complete, cookies) { if (this.isFunction(data)) { this.request({ url: url, success: arguments[1], error: arguments[2], complete: arguments[3], cookies: arguments[4], method: 'POST', type: 'form' }); } else { this.request({ url: url, send: data, success: success, error: error, complete: complete, cookies: cookies, method: 'POST', type: 'form' }); } } //通过post方法请求text数据 , postText: function postText(url, data, success, error, complete, cookies) { if (this.isFunction(data)) { this.request({ url: url, success: arguments[1], error: arguments[2], complete: arguments[3], cookies: arguments[4], method: 'POST', accept: 'text' }); } else { this.request({ url: url, send: data, success: success, error: error, complete: complete, cookies: cookies, method: 'POST', accept: 'text' }); } } //请求携带Cookies信息 , postTextWithCookies: function postTextWithCookies(url, data, success, error, complete) { if (this.isFunction(data)) { this.postText(url, arguments[1], arguments[2], arguments[3], true); } else { this.postText(url, data, success, error, complete, true); } } //设置全局header信息 , _defaultHeader: {} /** * 设置缺省的全局header * @param key * @param value 当值为undefined时则移除本key信息 */ , setDefaultHeader: function setDefaultHeader(key, value) { if (key) { if (value) { this._defaultHeader[key] = value; } else { delete this._defaultHeader[key]; } } } //发送http请求 , request: function request(options) { var _defaults = { method: 'GET', // 默认请求方法 type: 'json', // 请求体发送方式 application/json|json|png url: '', // 请求url header: null, //{object}设置当前请求的header信息 cookies: false, //是否携带cookies信息 noToken: false, // 是否在请求中禁用token信息 //reloginIfTokenExpired: true, // 是否token失效自动跳转到登录界面 send: '', //POST请求参数,即参数不会拼接在URL后面。 query: '', //GET请求参数,即参数拼接在URL后面。 // type : '', // 默认content-type,支持text/html|application/x-www-form-urlencoded|application/json|multipart/form-data // accept : '', // 默认接受类型application/json|json|text|text/plain success: null, // 请求成功的回调函数 error: null, // 请求失败的回调函数,包括http客户端错误、服务端错误、以及接口调用成功但存在业务错误 complete: null // 请求完成的回调函数(不管成功还是失败) }; Object.assign(_defaults, options); // 禁用token if (options.query && options.query.noToken !== undefined) { _defaults.noToken = options.query.noToken; } // 发送ajax请求 var contentType = 'application/json;charset=UTF-8'; if (_defaults.type === 'form') { contentType = 'application/x-www-form-urlencoded;charset=UTF-8'; } var req = sa(_defaults.method, _defaults.url).set('Content-Type', contentType); //设置全局的header信息 for (var header in this._defaultHeader) { if (this._defaultHeader[header] !== undefined) { req.set(header, this._defaultHeader[header]); } } //设置当前请求的header信息 if (_defaults.header && UrlUtils.isPlainObject(_defaults.header)) { for (var headerKey in _defaults.header) { if (_defaults.header[headerKey] !== undefined) { req.set(headerKey, _defaults.header[headerKey]); } } } //存在token则携带全局token到header里面,TODO 临时提供,后期采用动态方式 var token = AuthToken.getToken(); var authenticationStr = AuthToken.getAuthenticationStr(); if (_defaults.noToken !== true) { if (token) { req.set('icop-token', token); } if (authenticationStr) { req.set('authority', authenticationStr); } } //设置请求携带cookie if (_defaults.cookies === true) { req.withCredentials(); } req.query(_defaults.query).send(_defaults.send).end(function (err, res) { if (err || (res && res.badRequest)) { // if (res.body !== null) { // // 如果启用了access_token失效时自动重新登录的功能 // if (defaults.reloginIfTokenExpired) { // // 8193错误:access_token未找到 // // 8211错误:access_token无效,可能已过期,需要重新授权 // if (res.body.error_code === 8211 || res.body.error_code === 8193) { // oauth2Logout(); // } // } // // logOauth2Error(res.body); // // oauth2Relogin(); // } if (typeof _defaults.error === 'function') { //如果有外部的错误异常处理则使用外部的 _defaults.error(res); } else { //如果没有则使用内部默认的异常处理 Toast.info(err.message, 3); } } if (res && res.ok) { if (res.headers && res.headers['icop-content-type']) { if (typeof _defaults.error === 'function') { //如果有外部的错误异常处理则使用外部的 _defaults.error(res); } else { //如果没有则使用内部默认的异常处理 //捕获服务端包装的异常消息 Toast.info(res.text && res.text.length > 0 ? res.text : res.body, 3); } return; } else { if (typeof _defaults.success === 'function') { if (_defaults.accept === 'text') { _defaults.success(res.text); } else { _defaults.success(res.body); } } } } if (_defaults.complete) { _defaults.complete(res); } }); } /** *填充url参数,通过参数key值替换 "{}" 里面的内容 *@param url "http://xxxx/crm/{userId}" 或者 "http://xxxx/crm/list?userId={userId}" *@param params {userId: "001"} *@return "http://xxxx/crm/001" 或者 "http://xxxx/crm/list?userId=001" */ , fillUrlParams: function fillUrlParams(url, params) { return UrlUtils.fillUrlParams(url, params); } /** * @desc 解析动态参数获取最终参数值 * @param 支持以下两类格式: * --------Function--------- * function(){ * return {myKey1:'myVal1',myKey2:'myVal2'} * } * --------Obejct内嵌Function(一级)--------- * { * key0:"value0" * ,key1:function(){ * return {key11:"value11"} * } * } * 当参数中存在function,会执行并获取其值。 * @return 最终返回简单格式的JSON对象 */ , getParams: function getParams(param) { return UrlUtils.getParams(param); } /** * @desc 将参数追加到URL后面,支持中文参数 * @param params{object}需要追加的参数 * @return 返回追加参数后的URL */ , appendToUrl: function appendToUrl(url, params) { return UrlUtils.appendToUrl(url, params); } }; export default ajax;