mvue-toolkit
Version:
mvue project toolkit components
1,920 lines (1,556 loc) • 117 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["index"] = factory();
else
root["index"] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/test/dist";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 10);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_clone__ = __webpack_require__(11);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_clone__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_cloneDeep__ = __webpack_require__(12);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_cloneDeep___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_cloneDeep__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_endsWith__ = __webpack_require__(13);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_endsWith___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_endsWith__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_find__ = __webpack_require__(14);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_find___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_find__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_isEmpty__ = __webpack_require__(15);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_isEmpty___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isEmpty__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_lodash_merge__ = __webpack_require__(16);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_lodash_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_lodash_merge__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_lodash_startsWith__ = __webpack_require__(17);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_lodash_startsWith___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_lodash_startsWith__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_lodash_includes__ = __webpack_require__(18);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_lodash_includes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_lodash_includes__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_lodash_each__ = __webpack_require__(19);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_lodash_each___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_lodash_each__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_lodash_isFunction__ = __webpack_require__(20);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_lodash_isFunction__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_lodash_forEach__ = __webpack_require__(21);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_lodash_forEach___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_lodash_forEach__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_lodash_isNull__ = __webpack_require__(22);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_lodash_isNull___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_lodash_isNull__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_lodash_isString__ = __webpack_require__(23);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_lodash_isString___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_lodash_isString__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_lodash_toSafeInteger__ = __webpack_require__(24);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_lodash_toSafeInteger___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_lodash_toSafeInteger__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_lodash_isUndefined__ = __webpack_require__(25);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_lodash_isUndefined___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14_lodash_isUndefined__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_lodash_extend__ = __webpack_require__(26);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_lodash_extend___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_lodash_extend__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_lodash_has__ = __webpack_require__(27);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_lodash_has___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_16_lodash_has__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_lodash_toNumber__ = __webpack_require__(28);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_lodash_toNumber___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_17_lodash_toNumber__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_lodash_isInteger__ = __webpack_require__(29);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_lodash_isInteger___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_18_lodash_isInteger__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_lodash_isFinite__ = __webpack_require__(30);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_lodash_isFinite___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_19_lodash_isFinite__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_lodash_isNil__ = __webpack_require__(31);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_20_lodash_isNil__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_lodash_isArray__ = __webpack_require__(32);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_21_lodash_isArray__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22_lodash_uniqueId__ = __webpack_require__(33);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22_lodash_uniqueId___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_22_lodash_uniqueId__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23_lodash_assign__ = __webpack_require__(34);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23_lodash_assign___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_23_lodash_assign__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24_lodash_isEqual__ = __webpack_require__(35);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24_lodash_isEqual___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_24_lodash_isEqual__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25_lodash_now__ = __webpack_require__(36);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25_lodash_now___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_25_lodash_now__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26_lodash_forIn__ = __webpack_require__(37);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26_lodash_forIn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_26_lodash_forIn__);
/*
@desc: A modern JavaScript utility library delivering modularity, performance, & extras.
@detail: https://github.com/lodash/lodash
*/
var _lodash = {
clone: __WEBPACK_IMPORTED_MODULE_0_lodash_clone___default.a,
cloneDeep: __WEBPACK_IMPORTED_MODULE_1_lodash_cloneDeep___default.a,
endsWith: __WEBPACK_IMPORTED_MODULE_2_lodash_endsWith___default.a,
find: __WEBPACK_IMPORTED_MODULE_3_lodash_find___default.a,
isEmpty: __WEBPACK_IMPORTED_MODULE_4_lodash_isEmpty___default.a,
merge: __WEBPACK_IMPORTED_MODULE_5_lodash_merge___default.a,
startsWith: __WEBPACK_IMPORTED_MODULE_6_lodash_startsWith___default.a,
includes: __WEBPACK_IMPORTED_MODULE_7_lodash_includes___default.a,
each: __WEBPACK_IMPORTED_MODULE_8_lodash_each___default.a,
isFunction: __WEBPACK_IMPORTED_MODULE_9_lodash_isFunction___default.a,
forEach: __WEBPACK_IMPORTED_MODULE_10_lodash_forEach___default.a,
isNull: __WEBPACK_IMPORTED_MODULE_11_lodash_isNull___default.a,
isString: __WEBPACK_IMPORTED_MODULE_12_lodash_isString___default.a,
toSafeInteger: __WEBPACK_IMPORTED_MODULE_13_lodash_toSafeInteger___default.a,
isUndefined: __WEBPACK_IMPORTED_MODULE_14_lodash_isUndefined___default.a,
extend: __WEBPACK_IMPORTED_MODULE_15_lodash_extend___default.a,
has: __WEBPACK_IMPORTED_MODULE_16_lodash_has___default.a,
toNumber: __WEBPACK_IMPORTED_MODULE_17_lodash_toNumber___default.a,
isInteger: __WEBPACK_IMPORTED_MODULE_18_lodash_isInteger___default.a,
isNil: __WEBPACK_IMPORTED_MODULE_20_lodash_isNil___default.a,
isFinite: __WEBPACK_IMPORTED_MODULE_19_lodash_isFinite___default.a,
isArray: __WEBPACK_IMPORTED_MODULE_21_lodash_isArray___default.a,
uniqueId: __WEBPACK_IMPORTED_MODULE_22_lodash_uniqueId___default.a,
assign: __WEBPACK_IMPORTED_MODULE_23_lodash_assign___default.a,
isEqual: __WEBPACK_IMPORTED_MODULE_24_lodash_isEqual___default.a,
now: __WEBPACK_IMPORTED_MODULE_25_lodash_now___default.a,
forIn: __WEBPACK_IMPORTED_MODULE_26_lodash_forIn___default.a
};
/* harmony default export */ __webpack_exports__["default"] = (_lodash);
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
/**
* 系统相关配置信息
*/
var http = __webpack_require__(3);
var _ = __webpack_require__(0).default;
var utils = __webpack_require__(2).default;
if (!window.config) {
console.error("全局配置文件未引入,请检查项目代码");
}
var mergedConfig = _.extend({}, window.config);
function cachedConfigKey() {
return "_cachedConfig" + utils.getWebContext();
}
/**
* 根据配置项Key获取配置
* @param key 配置项Key
* @returns {*} 配置项的值
*/
function getConfigVal(key) {
return mergedConfig[key];
}
;
/**
* 加载服务端的配置
*/
function loadServerConfig() {
return new Promise(function (resolve, reject) {
var configUrl = getServerConfigUrl();
if (_.isEmpty(configUrl)) {
resolve(mergedConfig);
return;
}
http.get(getServerConfigUrl()).then(function (_ref) {
var data = _ref.data;
if (window.config.apiBaseUrl) {
delete data["apiBaseUrl"];
}
mergedConfig = _.assign(mergedConfig, data);
resolve(mergedConfig);
}).catch(function (error) {
var msg = "\u914D\u7F6E\u52A0\u8F7D\u4FE1\u606F\u5931\u8D25\uFF1A" + error.config.url;
console.error(msg);
if (error.response.status == 404) {
console.error("请确认配置服务器地址是否正确,配置地址如下:" + getServerConfigUrl());
} else {
alert(msg);
}
reject(error);
});
});
}
;
/**
* 获取配置服务地址
* @returns {string}
*/
function getServerConfigUrl() {
if (!window.config) {
return null;
}
if (window.config.configUrl) {
return window.config.configUrl;
}
if (window.config.apiBaseUrl) {
return window.config.apiBaseUrl + "/web.json";
}
return null;
}
;
/**
* 获取指定key对应的配置项值
* @param key
* @returns {*}
*/
mergedConfig.getConfigVal = function (key) {
return getConfigVal(key);
};
/**
* 从服务端加载配置项,返回Promise对象
*/
mergedConfig.loadServerConfig = function () {
return loadServerConfig();
};
/**
* 获取SSO服务器地址
* @returns {*}
*/
mergedConfig.getSSOServerUrl = function () {
var key = "oauth2.serverUrl";
return getConfigVal(key);
};
/**
* 授权码模式自定义tokenUrl
*/
mergedConfig.getOAuth2TokenUrl = function () {
var key = "oauth2.tokenUrl";
return getConfigVal(key);
};
/**
* 获取Token授权地址
* @returns {*}
*/
mergedConfig.getSSOAuthorizeUrl = function () {
var key = "oauth2.authorizeUrl";
return getConfigVal(key);
};
/**
* 获取SSO服务器版本号
* @returns {*}
*/
mergedConfig.getSSOVersion = function () {
var key = "oauth2.serverVersion";
return getConfigVal(key);
};
/**
* SSO中OAuth2的类型:implicit、accessCode、accessCodeProxy
* @returns {*}
*/
mergedConfig.getOAuth2FlowType = function () {
var key = "oauth2.flow";
var type = getConfigVal(key);
if (!isEmpty(type)) {
return type;
} //计算type的默认值
var authAccessCodeProxyUrl = this.getAuthAccessCodeProxyUrl();
if (authAccessCodeProxyUrl != null && authAccessCodeProxyUrl.length > 0) {
type = "accessCodeProxy";
} else {
var clientSecret = this.getClientSecret();
if (clientSecret != null && clientSecret.length > 0) {
type = "accessCode";
} else {
type = "implicit";
}
}
};
/**
* 登录地址
* @returns {*}
*/
mergedConfig.getLoginUrl = function () {
var key = "tplLoginUrl";
return getConfigVal(key);
};
/**
*
* @returns {*}
*/
mergedConfig.getLocalLoginUrl = function () {
var key = "loginUrl";
return getConfigVal(key);
};
mergedConfig.getLocalLogoutUrl = function () {
var key = "logoutUrl";
return getConfigVal(key);
};
/**
* 判断是否启用本地登录,oauth2.ssoServerUrl为空,并且loginUrl不为空,启用本地登录
* @returns {boolean}
*/
mergedConfig.isLocalLogin = function () {
var loginLoginUrl = this.getLocalLoginUrl();
var ssoServerUrl = this.getSSOServerUrl();
if (_.isEmpty(ssoServerUrl) && !_.isEmpty(loginLoginUrl)) {
return true;
}
return false;
};
/**
* 是否启用cookie,默认是启用
*/
mergedConfig.isCookiesEnabled = function () {
var enabled = getConfigVal('cookiesEnabled');
if (_.isUndefined(enabled) || _.isNull(enabled)) {
return true;
}
return enabled !== 'false' && !!enabled;
};
/**
*
* @returns {*}
*/
mergedConfig.getLocalUserInfoUrl = function () {
var key = "userInfoUrl";
return getConfigVal(key);
};
/**
* 获取服务器端代理验证授权码(accessCode)的地址
* @returns {*}
*/
mergedConfig.getAuthAccessCodeProxyUrl = function () {
var key = "oauth2.accessCode.proxyUrl";
return getConfigVal(key);
};
mergedConfig.getCookieName = function () {
var key = "cookie.name";
var cookieName = getConfigVal(key);
if (isEmpty(cookieName)) {
cookieName = "m_vue_session_id";
}
return cookieName;
};
/**
* 获取API服务器地址
* @returns {*}
*/
mergedConfig.getApiBaseUrl = function () {
var key = "apiBaseUrl";
var url = getConfigVal(key);
if (!isEmpty(url)) {
return url;
}
return getConfigVal("service.metad.api.endpoint");
};
/**
* 获取网关地址
* @returns {*}
*/
mergedConfig.getGatewayUrl = function () {
var key = "service.gateway.endpoint";
var url = getConfigVal(key);
if (isEmpty(url)) {
url = this.getApiBaseUrl();
}
return url;
};
/**
* 获取查询当前用户信息的接口
* @returns {*}
*/
mergedConfig.getUserInfoUrl = function () {
var key = "service.uam.endpoint";
var url = getConfigVal(key);
if (url != null || url.length > 0) {
return url + "/userinfo";
} //未配置时,默认使用oauth2的userInfo接口
url = this.getSSOServerUrl() + "/oauth2/userinfo";
};
/**
* 获取客户端的ClientId
* @returns {*}
*/
mergedConfig.getClientId = function () {
var key = "oauth2.clientId";
return getConfigVal(key);
};
/**
* 获取客户端密钥
* @returns {*}
*/
mergedConfig.getClientSecret = function () {
var key = "oauth2.clientSecret";
return getConfigVal(key);
};
/**
* 获取元数据服务的地址,包括表单、视图、套件和项目等基本信息获取接口
* @returns {*}
*/
mergedConfig.getMetaserviceUrl = function () {
return getConfigVal("service.metabase.endpoint");
};
/**
* 获取上传下载的服务器地址
* @returns {*}
*/
mergedConfig.getUploadUrl = function () {
var key = "service.stream.endpoint";
return getConfigVal(key);
};
/**
* 导入导出工具等工具服务地址
* @returns {*}
*/
mergedConfig.getToolEndpoint = function () {
return getConfigVal("service.tool.endpoint");
};
/**
* 统一服务地址
* @returns {*}
*/
mergedConfig.getUumEndpoint = function () {
return getConfigVal("service.uum.endpoint");
};
/**
* link web程序根路径
*/
mergedConfig.getLinkWebEndpoint = function () {
return getConfigVal("service.linkweb.endpoint");
};
/**
* 用户api访问地址
* @returns {*}
*/
mergedConfig.getUserApiUrl = function () {
var url = getConfigVal("userApiUrl");
if (!isEmpty(url)) {
return url;
}
var base = this.getUumEndpoint();
if (isEmpty(base)) {
return 'user';
}
return base + "/user";
};
/**
* 部门api访问地址
* @returns {*}
*/
mergedConfig.getOrgApiUrl = function () {
var url = getConfigVal("orgApiUrl");
if (!isEmpty(url)) {
return url;
}
var base = this.getUumEndpoint();
if (isEmpty(base)) {
return 'organization';
}
return base + "/organization";
};
/**
* 发表api访问地址
* @returns {*}
*/
mergedConfig.getBlogApiUrl = function () {
return getConfigVal("service.blog.endpoint");
};
/** * 获取link的基础地址 */
mergedConfig.getLinkEndpoint = function () {
return getConfigVal("service.link.endpoint");
};
/**
* 获取元数据api接口地址
* @return {*}
*/
mergedConfig.getMetadApiEndpoint = function () {
return getConfigVal("service.metad.api.endpoint");
};
function isEmpty(obj) {
if (obj == null || typeof obj == "undefined") {
return true;
}
if (typeof obj == "string" && obj.length == 0) {
return true;
}
return false;
}
module.exports = mergedConfig;
/***/ }),
/* 2 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/**
* 工具方法
* Created by tonyyls on 2016/10/28.
*/
var _ = __webpack_require__(0).default;
function getCurPos($textarea) {
var e = $textarea.get(0),
pos = e.value.length;
if (e.selectionStart) {
//FF
pos = e.selectionStart;
} else if (document.selection) {
//IE
var r = document.selection.createRange();
if (r == null) {
pos = e.value.length;
} else {
var re = e.createTextRange();
var rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
pos = rc.text.length;
}
}
return pos;
}
;
function setCurPos($textarea, pos) {
var e = $textarea.get(0);
e.focus();
if (e.setSelectionRange) {
e.setSelectionRange(pos, pos);
} else if (e.createTextRange) {
var range = e.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
; //在textarea的指定位置插入字符
function insertAtCursor($textarea, val) {
var $t = $textarea[0];
var startPos = getCurPos($textarea);
if (startPos === undefined) {
$t.value = $t.value + val;
} else {
$t.value = $t.value.substring(0, startPos) + val + $t.value.substring(startPos, $t.value.length);
}
setCurPos($textarea, startPos + val.length);
}
var utils = {
insertAtCursor: insertAtCursor,
appendParams: function appendParams(url, params) {
if (!url) {
return "";
}
if (!params || params.length < 1) {
return url + "";
}
var _url = url.indexOf("?") > -1 ? url + "&" : url + "?";
for (var i = 0; i < params.length; ++i) {
if (i == 0) {
_url += params[i].key + "=" + encodeURIComponent(params[i].value);
} else {
_url += "&" + params[i].key + "=" + encodeURIComponent(params[i].value);
}
}
return _url;
},
appendParam: function appendParam(url, paramName, paramVal) {
if (!paramName) {
return url + "";
}
if (paramVal == null || typeof paramVal == "undefined") {
paramVal = "";
}
var _url = url.indexOf("?") > 0 ? url + "&" : url + "?";
_url += paramName + "=" + encodeURIComponent(paramVal);
return _url;
},
urlPattern: function urlPattern(url, paramName, paramVal) {
if (!paramName) {
return url + "";
}
if (paramVal == null || typeof paramVal == "undefined") {
paramVal = "";
}
url = url.replace(":" + paramName, paramVal);
return url;
},
//复制model的数据,清除更新对象不需要的属性
reduceModelForUpdate: function reduceModelForUpdate(model, moreFields) {
var copyModel = _.cloneDeep(model);
if (_.has(copyModel, "id")) {
delete copyModel.id;
}
if (_.has(copyModel, "createdBy")) {
delete copyModel.createdBy;
}
if (_.has(copyModel, "createdAt")) {
delete copyModel.createdAt;
}
if (_.has(copyModel, "updatedBy")) {
delete copyModel.updatedBy;
}
if (_.has(copyModel, "updatedAt")) {
delete copyModel.updatedAt;
}
if (_.isString(moreFields) && _.has(copyModel, moreFields)) {
delete copyModel[moreFields];
} else if (_.isArray(moreFields)) {
_(moreFields).forEach(function (item) {
if (_.has(copyModel, item)) {
delete copyModel[item];
}
});
}
return copyModel;
},
//_this:当前vue实例
//_model:当前待验证的数据
smartValidate: function smartValidate(_this, _model, _validator, callback, failback) {
_this.changedQueue = _this.changedQueue || []; //如果数据变化,先往变化队列推一条数据
_this.changedQueue.push(true); //记录当前变化队列的长度
var length = _this.changedQueue.length;
var __validator = _validator || _this.$validator;
setTimeout(function () {
//再次计算变化队列的长度,如果和之前的长度一致则表示用户已经停止输入,可以做校验了;
//如果不一致说明用户正在快速输入暂时不做验证,等到用户停止输入了就继续验证
var _length = _this.changedQueue.length;
if (_length === length) {
_this.changedQueue = [];
__validator.validateAll(_model).then(function () {
_this.valid = true;
callback && callback();
}).catch(function () {
_this.valid = false;
failback && failback();
});
}
}, 500);
},
//_this:当前vue实例
//智能搜索包装器,在用户快速输入时先不查询,直到用户输入完毕再查询
smartSearch: function smartSearch(_this, callback, _changedQueueKey, _duration) {
utils.smartAction(_this, _changedQueueKey, callback, _duration);
},
//_this:当前vue实例
//_changedQueueKey:变化的队列key
//callback:执行的操作回调函数
//_duration:指定操作等待的时长毫秒为单位
//智能操作包装器,
smartAction: function smartAction(_this, _changedQueueKey, callback, _duration) {
var changedQueueKey = _changedQueueKey;
var duration = _duration || 500;
_this[changedQueueKey] = _this[changedQueueKey] || []; //如果数据变化,先往变化队列推一条数据
_this[changedQueueKey].push(true); //记录当前变化队列的长度
var length = _this[changedQueueKey].length;
setTimeout(function () {
//再次计算变化队列的长度,如果和之前的长度一致则表示等待时间到了,可以做相关操作了;
//如果不一致说明数据还在变化,等到数据不再持续变化了再继续执行操作
var _length = _this[changedQueueKey].length;
if (_length === length) {
_this[changedQueueKey] = [];
callback && callback();
}
}, duration);
},
randomString: function randomString(len) {
len = len || 32;
var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
/****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
var maxPos = $chars.length;
var pwd = '';
for (var i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
},
camelToUnderscore: function camelToUnderscore(str) {
str = str.replace(/([A-Z])/g, "_$1").toLowerCase();
if (str[0] == '_') str = str.slice(1);
return str;
},
closeWindow: function closeWindow() {
if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Chrome") != -1) {
window.location.href = "about:blank";
window.close();
} else {
window.opener = null;
window.open("", "_self");
window.close();
}
},
leapQueryValueEncode: function leapQueryValueEncode(value) {
//leap 框架查询值单引号需要转义
if (value) {
value = value + '';
value = value.replace(/'/g, '%27');
value = value.replace(/\(/g, '%28');
value = value.replace(/\)/g, '%29');
value = value.replace(/\[/g, '%5B');
value = value.replace(/\]/g, '%5D');
}
return value;
},
getMomentFormat: function getMomentFormat(format) {
//将iview组件日期的格式化串转为moment的格式化串
//iview:"yyyy-MM-dd HH:mm:ss" moment:"YYYY-MM-DD HH:mm:ss"
if (!format) {
return "YYYY-MM-DD HH:mm:ss";
}
return format.replace("yyyy", "YYYY").replace("dd", "DD");
},
/**
* 将userPermVal和operationPermVal求与,如果结果等于operationPermVal表示有权限,否则无权限
* @param {*} userPermVal 用户的权限,二进制对应的整数表示
* @param {*} operationPermVal 操作的权限,二进制对应的整数表示
*/
hasPerm: function hasPerm(userPermVal, operationPermVal) {
//如果数据没定义任何权限,那就不控制权限
if (!userPermVal) {
return true;
}
return (userPermVal & operationPermVal) === operationPermVal;
},
/** 快捷方法,判断当前用户是否对item数据的btn操作有权限
* @param {*} item 记录数据对象
* @param {*} btn 操作对象
*/
hasDataPerm: function hasDataPerm(item, btn) {
var userPermVal = item[utils.dataPermField]; //如果数据没定义任何权限,那就不控制权限
if (!userPermVal) {
return true;
}
var operationPermVal = btn[utils.dataPermField]; //如果未设置权限,则默认没有权限
if (!operationPermVal) {
return false;
}
return utils.hasPerm(userPermVal, operationPermVal);
},
dataPermField: "permVal",
permValues: {
"view": 1,
"create": 2,
"edit": 4,
"del": 8,
"publish": 16,
"manage": 32,
"changeOwner": 64
},
queryKeys: {
action: "_action",
hideSuiteNavbar: "_hideSuiteNavbar"
},
formActions: {
create: "create",
view: "view",
edit: "edit"
},
ignoreSpecialQuery: function ignoreSpecialQuery(query) {
var _query = _.cloneDeep(query);
_.forIn(utils.queryKeys, function (key) {
if (_.has(_query, key)) {
delete _query[key];
}
});
return _query;
},
getWebContext: function getWebContext() {
var webContext = window.location.pathname;
if (webContext.indexOf('/') > 1) {
webContext = webContext.substring(0, webContext.lastIndexOf('/'));
}
return webContext;
},
visitTree: function visitTree(tree, process, parent, indexOrKey) {
var _this2 = this;
if (_.isArray(tree)) {
_.forEach(tree, function (item, index) {
_this2.visitTree(item, process, parent, index);
});
}
process(tree, parent, indexOrKey);
if (tree.children) {
_.forEach(tree.children, function (item, key) {
_this2.visitTree(item, process, tree, key);
});
}
}
};
/* harmony default export */ __webpack_exports__["default"] = (utils);
/***/ }),
/* 3 */
/***/ (function(module, exports) {
module.exports = require("axios");
/***/ }),
/* 4 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/**
* 运行的vue上下文参数
*/
var context = {
vue: null
};
/* harmony default export */ __webpack_exports__["a"] = ({
init: function init(vue) {
context.vue = vue;
},
getContext: function getContext() {
return context;
},
getCurrentVue: function getCurrentVue() {
return context.vue;
}
});
/***/ }),
/* 5 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_asyncToGenerator__ = __webpack_require__(7);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_asyncToGenerator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_asyncToGenerator__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ssoclient__ = __webpack_require__(8);
/**
* 当前会话
*/
var Cookies = __webpack_require__(40);
var store = __webpack_require__(41);
var _ = __webpack_require__(0).default;
var utils = __webpack_require__(2).default;
var AES = __webpack_require__(42);
var encUTF8 = __webpack_require__(43);
var Config = __webpack_require__(1);
var sessionKeyPrefix = "_session_";
var sessionCookieKey = "m_vue_session_id";
var anonymousSession = {
sessionId: null,
loginTime: null,
expires: 0,
token: {
mode: "",
accessToken: null,
refreshToken: null,
expiresIn: 0
},
user: {
anonymous: true,
name: "匿名用户",
userId: ""
}
};
var session = _.extend({}, anonymousSession);
var events = {
onSignIn: [],
onSignOut: []
};
if (store.has(getSessionKey())) {
var storedSession = getStoredSession();
if (storedSession) {
session = storedSession;
}
}
function getCookieName() {
return Config.getCookieName() || sessionCookieKey;
}
function createLoginRouter(returnUrl) {
return {
path: '/login',
query: {
redirect: returnUrl
}
};
}
function isLoginAction(router) {
if (_.isEqual("/login", router.path)) {
return true;
}
return false;
}
function isSSOClientAction(router) {
if (_.isEqual("/ssoclient", router.path)) {
return true;
}
return false;
}
function onSSOCallback(callback) {
__WEBPACK_IMPORTED_MODULE_2__ssoclient__["a" /* default */].onSSOCallback(function (tokenInfo) {
signIn(tokenInfo);
if (callback) {
callback(tokenInfo);
}
});
}
/**
* 判断当前会话是否登录
* @returns {boolean}
*/
function _isLogin() {
var sessionId = loadSessionId();
if (_.isEmpty(sessionId) || sessionId != session.sessionId) {
return false;
}
if (_.now().valueOf() > session.expires) {
removeSession();
}
return true;
}
function signIn(_x) {
return _signIn.apply(this, arguments);
}
function _signIn() {
_signIn = __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_asyncToGenerator___default()(
/*#__PURE__*/
__WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.mark(function _callee4(tokenInfo) {
var sessionId, storeSession, crypto, i, func;
return __WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
//其它窗口已经登录,并且cookie值与store中的数据保存一致,丢弃该授权码,使用本地数据
sessionId = loadSessionId();
storeSession = getStoredSession();
if (!(storeSession && storeSession.sessionId == sessionId)) {
_context4.next = 5;
break;
}
session = storeSession;
return _context4.abrupt("return", session);
case 5:
//登录
session.token = tokenInfo;
session.user = tokenInfo.user || _.assign({}, anonymousSession.user);
session.user["anonymous"] = false;
session.loginTime = _.now().valueOf();
session.sessionId = "session_id_" + session.loginTime;
if (tokenInfo.expiresIn) {
session.expires = session.loginTime + tokenInfo.expiresIn * 1000 - 60000;
}
saveSessionId();
crypto = AES.encrypt(JSON.stringify(session), session.sessionId);
store.set(getSessionKey(), crypto.toString());
i = 0;
case 15:
if (!(i < events.onSignIn.length)) {
_context4.next = 22;
break;
}
func = events.onSignIn[i];
_context4.next = 19;
return func(session);
case 19:
i++;
_context4.next = 15;
break;
case 22:
return _context4.abrupt("return", session);
case 23:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
return _signIn.apply(this, arguments);
}
function getStoredSession() {
var sessionId = loadSessionId();
if (!sessionId) {
return null;
}
try {
var decrypt = AES.decrypt(store.get(getSessionKey()), sessionId);
session = JSON.parse(decrypt.toString(encUTF8));
return session;
} catch (ex) {
return null;
}
}
function saveSessionId() {
if (Config.isCookiesEnabled()) {
var scookie = {
path: utils.getWebContext()
};
if (window.location.protocol === 'https:') {
scookie['SameSite'] = 'None';
scookie['secure'] = true;
}
Cookies.set(getCookieName(), session.sessionId, scookie);
} else {
store.session.set(getCookieName(), session.sessionId);
}
}
function loadSessionId() {
if (Config.isCookiesEnabled()) {
return Cookies.get(getCookieName());
} else {
return store.session.get(getCookieName());
}
}
function removeSessionId() {
if (Config.isCookiesEnabled()) {
Cookies.remove(getCookieName(), {
path: utils.getWebContext()
});
} else {
store.session.remove(getCookieName());
}
}
function signOut(_x2) {
return _signOut.apply(this, arguments);
}
function _signOut() {
_signOut = __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_asyncToGenerator___default()(
/*#__PURE__*/
__WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.mark(function _callee5(returnUrl) {
var i, func;
return __WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
removeSession();
if (_.isEmpty(returnUrl)) {
returnUrl = window.location.href;
}
i = 0;
case 3:
if (!(i < events.onSignOut.length)) {
_context5.next = 10;
break;
}
func = events.onSignOut[i];
_context5.next = 7;
return func(session);
case 7:
i++;
_context5.next = 3;
break;
case 10:
__WEBPACK_IMPORTED_MODULE_2__ssoclient__["a" /* default */].ssoLogout(returnUrl);
case 11:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
return _signOut.apply(this, arguments);
}
function removeSession() {
session = _.extend({}, anonymousSession);
store.remove(getSessionKey());
removeSessionId();
console.log("session logout!");
}
function getSessionKey() {
return sessionKeyPrefix + utils.getWebContext();
}
/* harmony default export */ __webpack_exports__["a"] = ({
isLogin: function isLogin() {
return _isLogin();
},
getToken: function getToken() {
if (this.hasToken()) {
return session.token.accessToken;
}
return null;
},
hasToken: function hasToken() {
if (_isLogin() && session.token.accessToken) {
return true;
}
return false;
},
refreshToken: function () {
var _refreshToken = __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_asyncToGenerator___default()(
/*#__PURE__*/
__WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.mark(function _callee(params) {
var tokenInfo, reVal;
return __WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
tokenInfo = {
accessToken: params["access_token"],
expiresIn: params["expires_in"],
state: params["state"],
mode: "v3"
};
_context.next = 3;
return __WEBPACK_IMPORTED_MODULE_2__ssoclient__["a" /* default */].getUserInfo(tokenInfo);
case 3:
removeSession();
_context.next = 6;
return this.doSignIn(tokenInfo);
case 6:
reVal = _context.sent;
return _context.abrupt("return", reVal);
case 8:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function refreshToken(_x3) {
return _refreshToken.apply(this, arguments);
}
return refreshToken;
}(),
doSignIn: function () {
var _doSignIn = __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_asyncToGenerator___default()(
/*#__PURE__*/
__WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.mark(function _callee2(tokenInfo) {
return __WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt("return", signIn(tokenInfo));
case 1:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function doSignIn(_x4) {
return _doSignIn.apply(this, arguments);
}
return doSignIn;
}(),
doLogout: function () {
var _doLogout = __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_asyncToGenerator___default()(
/*#__PURE__*/
__WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.mark(function _callee3(returnUrl) {
return __WEBPACK_IMPORTED_MODULE_0__babel_runtime_regenerator___default.a.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
return _context3.abrupt("return", signOut(returnUrl));
case 1:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function doLogout(_x5) {
return _doLogout.apply(this, arguments);
}
return doLogout;
}(),
doLogin: function doLogin(returnUrl) {
store.remove(getSessionKey());
return __WEBPACK_IMPORTED_MODULE_2__ssoclient__["a" /* default */].gotoLogin(returnUrl);
},
getCurrentUser: function getCurrentUser() {
return session.user;
},
doFilter: function doFilter(to, from, next) {
//因为to.matched会从父到子放置所有匹配的路由,所以从最后一个路由向上判断是否定义了requiresAuth就可以确定了
var len = to.matched.length;
var requiresAuth = false;
for (var i = len - 1; i >= 0; --i) {
var m = to.matched[i];
if (m.meta.requiresAuth) {
//路由配置指定了需要验证
requiresAuth = true;
break;
} else if (m.meta.requiresAuth === false) {
//路由配置指定了匿名
requiresAuth = false;
break;
}
}
if (requiresAuth) {
if (this.isLogin()) {
// 通过vuex state获取当前的token是否存在
next();
} else {
//中转
var nextTo = __WEBPACK_IMPORTED_MODULE_2__ssoclient__["a" /* default */].gotoLogin(to.fullPath);
if (nextTo) {
next(nextTo);
}
}
} else {
next();
}
},
onSignIn: function onSignIn(func) {
events.onSignIn.push(func);
},
onSignOut: function onSignOut(func) {
events.onSignOut.push(func);
}
});
/***/ }),
/* 6 */
/***/ (function(module, exports) {
module.exports = require("@babel/runtime/regenerator");
/***/ }),
/* 7 */
/***/ (function(module, exports) {
module.exports = require("@babel/runtime/helpers/asyncToGenerator");
/***/ }),
/* 8 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tools_lodash_loader__ = __webpack_require__(0);
/**
* SSO客户端
*/
var Config = __webpack_require__(1);
var Base64 = __webpack_require__(38).Base64;
var http = __webpack_require__(3);
var qs = __webpack_require__(39);
/**
* 跳转到sso登录页面
*/
function _gotoLogin(returnUrl) {
var ssoclientUrl = window.location.href;
if (ssoclientUrl.indexOf("#") > 0) {
ssoclientUrl = ssoclientUrl.substring(0, ssoclientUrl.indexOf("#"));
}
ssoclientUrl += "#/ssoclient?returnUrl=" + encodeURIComponent(returnUrl);
var url = "";
if (Config.isLocalLogin()) {
url = buildLoginUrlForLocal(ssoclientUrl);
if (!url) {
console.error('SSO基础地址为空');
return;
}
} else if (Config.getSSOVersion() == "v2") {
url = buildLoginUrlForV2(ssoclientUrl);
if (!url) {
console.error('SSO基础地址为空');
return;
}
} else {
url = buildLoginUrlForV3(ssoclientUrl);
if (!url) {
console.error('SSO基础地址为空');
return;
}
if (Config.getOAuth2FlowType() == "implicit") {
url += "&response_type=token";
} else if (Config.getOAuth2FlowType() == "accessCode") {
url += "&response_type=code";
} else {
url += "&response_type=" + encodeURIComponent("code id_token");
}
}
if (!url) {
alert("未配置配置地址");
throw "未配置配置地址";
}
url += "&raw_return_url=" + encodeURIComponent(returnUrl);
if (url.charAt(0) == "#") {
return {
path: url.substring(1)
};
} else {
window.location = url;
}
}
function buildLoginUrlForLocal(returnUrl) {
var url = Config.getLocalLoginUrl();
if (!url) {
return null;
}
return url = url + "?return_url=" + encodeURIComponent(returnUrl);
}
function buildLoginUrlForV2(returnUrl) {
var url = Config.getSSOServerUrl();
if (!url) {
return null;
}
url += "/v2?openid.mode=checkid_setup&openid.ex.client_id=" + (Config.getClientId() || "clientId");
url += "&openid.return_to=" + encodeURIComponent(returnUrl);
return url;
}
function buildLoginUrlForV3(returnUrl) {
var url = Config.getSSOAuthorizeUrl();
if (!url) {
url = Config.getSSOServerUrl();
if (!url) {
return null;
}
url += "/oauth2/authorize";
}
if (url.charAt(0) == "#") {
returnUrl = returnUrl.substring(returnUrl.indexOf("#"));
}
url += "?client_id=" + Config.getClientId();
url += "&redirect_uri=" + encodeURIComponent(returnUrl);
url += "&logout_uri=" + encodeURIComponent(window.location.protocol + "//" + window.location.host + window.location.pathname + "?_d=" + new Date().valueOf() + "#/ssoclient?logout=1&_inframe=true");
return url;
}
/**
* 处理sso回调
*/
function _onSSOCallback(callback) {
if (Config.isLocalLogin()) {
return processCallbackLocal(callback);
}
if (Config.getSSOVersion() == "v2") {
return processCallbackForV2(callback);
}
return processCallbackForV3(callback);
}
/**
* 本地登录成功后的处理
* @param callback
* @returns {Promise<any>}
*/
function processCallbackLocal(callback) {
var params = resolveParams(window.location.href) || {};
if (hasError(params, true)) {
return null;
}
var url = Config.getLocalUserInfoUrl() + "?_=" + new Date().getTime();
return new Promise(function (resolve, reject) {
http.get(url).then(function (_ref) {
var data = _ref.data;
var tokenInfo = {
user: {},
mode: "local",
expiresIn: 7200
};
var user = __WEBPACK_IMPORTED_MODULE_0__tools_lodash_loader__["default"].assign({}, data, {
anonymous: false
});
tokenInfo["user"] = user;
if (callback) {
callback(tokenInfo);
}
resolve(tokenInfo);
}).catch(function (error) {
reject(null);
});
});
}
/**
* v2流程校验serviceticket,获取access_token
* @param callback
*/
function processCallbackForV2(callback) {
var params = resolveParams(window.location.href) || {};
var ticket = params["openid.ex.service_ticket"];
var tokenUrl = Config.getSSOServerUrl() + "/v2";
var reqParam = {
"openid.mode": "check_authentication",
"openid.ex.client_id": Config.getClientId(),
"openid.ex.client_secret": Config.getClientSecret(),
"openid.ex.service_ticke": ticket,
"openid.ex.logout_url": window.location.href + "#/logout",
"openid.ex.get_oauth_access_token": "y"
};
http.post(tokenUrl, qs.stringify(reqParam), {
"responseType": "text"
}).then(function (_ref2) {
var data = _ref2.data;
var arrItems = data.replace(/\r/g, "").split("\\n");
var respMap = {};
__WEBPACK_IMPORTED_MODULE_0__tools_lodash_loader__["default"].forEach(arrItems, function (item, index) {
if (__WEBPACK_IMPORTED_MODULE_0__tools_lodash_loader__["default"].isEmpty(item)) {
return;
}
var entry = item.split(":");
if (entry.length != 2) {
return;
}
respMap[entry[0]] = entry[1];
});
if (respMap["mode"] != "ok") {
console.error("ticket " + ticket + " 无效,错误信息:" + respMap["error"]);
return;
}
var tokenInfo = {
accessToken: respMap["ex.oauth_access_token"],
identity: respMap["identity"],
expiresIn: token["ex.oauth_access_token_expires"],
refreshToken: token["ex.oauth_refresh_token"],
user: {
name: respMap["identity"],
userId: respMap["identity"]
},
mode: "v2"
};
if (callback) {
callback(tokenInfo);
}
}).catch(function (error) {
console.log(error.response.data);
});
}
/**
* v3版SSO回调 ,验证accessCode获取access_token
* @param callback
*/
function processCallbackForV3(callback) {
var params = resolveParams(window.location.href) || {};
if (hasError(params, true)) {
return;
}
if (Config.getOAuth2FlowType() == "implicit") {
return onImplictFlow(params, callback);
} else {
return onAccessCodeFlow(params, callback);
}
}
/**
* 处理隐式流程
* @param callback
*/
function onImplictFlow(params, callback) {
var tokenInfo = {
accessToken: params["access_token"],
expiresIn: params["expires_in"],
state: params["state"],
mode: "v3",
modeMore: {
flowType: "implicit"
}
};
_getUserInfo(tokenInfo).then(function (userInfo) {
if (callback) {
callback(tokenInfo);
}
});
}
function _getUserInfo(tokenInfo) {
var url = Config.getSSOServerUrl() + "/oauth2/userinfo?_=" + new Date().getTime();
return new Promise(function (resolve, reject) {
http.get(url, {
"headers": {
"Authorization": "Bearer " + tokenInfo.accessToken
}
}).then(function (_ref3) {
var data = _ref3.data;
var user = __WEBPACK_IMPORTED_MODULE_0__tools_lodash_loader__["default"].assign({}, data, {
name: data["name"] || data["username"],
userId: data["sub"],
anonymous: false
});
tokenInfo["user"] = user;
resolve(user);
}).catch(function (error) {
resolve(null);
});
});
}
/**
* 处理授权码流程
* @param callback
*/
function onAccessCodeFlow(params, callback) {
var code = params["code"];
checkAccessCode(code, function (token) {
var tokenInfo = {
accessToken: token["access_token"],
expiresIn: token["expires_in"],
state: token["state"],
refreshToken: token["refresh_token"],
mode: "v3",
modeMore: {
flowType: "accessCode"
}
};
_getUserInfo(tokenInfo).then(function (userInfo) {
if (callback) {
callback(tokenInfo);
}
});
});
}
function checkAccessCode(accessCode, callback) {
//优先读取自定义的tokenUrl,自定义的tokenUrl,可以不需要clientSecret
var tokenUrl = Config.getOAuth2TokenUrl();
if (!tokenUrl) {
tokenUrl = Config.getSSOServerUrl() + "/oauth2/token";
}
var reqParam = {
"grant_type": "authorization_code",
"code": accessCode
};
var basicAuth = getClientAuth();
http.post(tokenUrl, qs.stringify(reqParam), {
headers: {
'Authorization': basicAuth
}
}).then(function (_ref4) {
var data = _ref4.data;
if (hasError(data, true)) {
return;
}
if (callback) {
callback(data);
}
}).catch(function (error) {
console.log(error.message);
});
}
function hasError(resp, throwError) {
if (resp["error"]) {
if (throwError) {
alert("登录出错:" + resp["error_description"]);
}
return true;
}
return false;
}
function resolveParams(url) {
if (!url) return;
url = url + '';
var index = url.indexOf('?');
if (index > -1) {
url = url.substring(index + 1, url.length);
}
var pairs = url.split('&'),
params = {};
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i];
var indexEq = pair.indexOf('='),
key = pair,
value = null;
if (indexEq > 0) {
key = pair.substring(0, indexEq);
value = decodeURIComp