UNPKG

bmfe-vue2-base

Version:

BM 后台系统基础框架

193 lines (176 loc) 4.78 kB
/** * @Author: songqi * @Date: 2016-06-29 22:06:00 * @Email: songqi@benmu-health.com * @Last modified by: songqi * @Last modified time: 2017-02-20 */ var _ = require('lodash'), Ajax = require('./ajax'), Promise = Promise ? Promise : require('es6-promise').Promise; var pathMap = {}, // 路径配置 ajaxMap = {}, // ajax 对象 map paramMap = {}, // 请求参数 map errorFunction, // 全局错误回调 successFuction; // 全局成功回调 /** * [setConfig 初始化配置文件] * @author songqi * @date 2016-07-06 * @param {[Object]} options [配置选项] */ function setConfig(options){ if(_.isEmpty(options)){ return; } if(_.isPlainObject(options.pathMap)){ pathMap = options.pathMap; } if(_.isPlainObject(options.paramMap)){ paramMap = options.paramMap; } if(_.isFunction(options.errorFunction)){ errorFunction = options.errorFunction; } if(_.isFunction(options.successFuction)){ successFuction = options.successFuction; } } /** * [dealParam 处理传入的参数] * @author songqi * @date 2016-07-06 * @param {[String]} type [请求 method 类型] * @param {[Object]} param [传入的参数] * @return {[Object]} [参数列表] */ function dealParam(type, param){ if(!param.url){ return false; } param.url = pathMap[param.url] || param.url; return _.assignIn(_.cloneDeep(paramMap[type] || {}), param); } /** * [_abortAll abort 掉所有请求] * @author songqi * @date 2016-07-06 */ function _abortAll(){ for(var i in ajaxMap){ _abortAjax(i); } } /** * [_abortAjax abort 某个确定的 ajax] * @author songqi * @date 2016-07-06 * @param {[String]} name [ajax id] */ function _abortAjax(name){ if(ajaxMap[name]){ ajaxMap[name].abort(); delete ajaxMap[name]; return; } if(_.isArray(name)){ names.map(function(item){ _abortAjax(item); }); } } /** * [bindVM 和 vue 进行绑定] * @author songqi * @date 2016-07-06 * @param {[Object]} vm [vue component] * @param {[String]} times [ajax id] */ function bindVM(vm, times){ if(!vm._ajaxNames){ vm._ajaxNames = []; var _destory = vm.$destroy; vm.$destroy = function(){ _destory.apply(vm, arguments); vm.abortAjax(); }; } vm._ajaxNames.push(times); vm.abortAjax = function(){ vm._ajaxNames.map(function(item){ _abortAjax(item); }); }; } /** * [sendAjax 发送 ajax 请求] * @author songqi * @date 2016-07-06 * @param {[Sting]} type [发送类型] * @param {[Object]} param [参数] * @return {[Object]} [promise ajax] */ function sendAjax(type, param){ var _ajaxObj, times = +new Date(); param = dealParam(type, param); var _promiseAjax = new Promise(function(resolve, reject){ _ajaxObj = Ajax(_.assignIn({}, param, { success: function(resData){ if(resData && resData.resCode === 0 && !_.isUndefined(resData.data)){ !param.noDefaultSuccess && successFuction && successFuction(resData); resolve(resData); }else{ resData.type = 'RE'; !param.noDefaultError && errorFunction && errorFunction(resData); reject(resData); } }, error: function(err, type){ var resData = { resCode: -1, msg: '系统错误,请重试', type: type, errInfo: err }; !param.noDefaultError && errorFunction && errorFunction(resData); reject(resData); }, complete: function(){ delete ajaxMap[times]; } })); }); // 和 vm 绑定 param.vm && bindVM(param.vm, times); ajaxMap[times] = _ajaxObj; _promiseAjax.name = times; _promiseAjax.ajax = _ajaxObj; return _promiseAjax; } /** * [_post 对外提供的 post 方法] * @author songqi * @date 2016-07-06 * @param {[Object]} param [传入的参数] * @return {[Object]} [Promise ajax] */ function _post(param){ return sendAjax('post', param); } /** * [_get 对外提供的 post 方法] * @author songqi * @date 2016-07-06 * @param {[Object]} param [传入的参数] * @return {[Object]} [Promise ajax] */ function _get(param) { return sendAjax('get', param); } module.exports = { get: _get, post: _post, abortAll: _abortAll, setConfig: setConfig };