UNPKG

mvue-toolkit

Version:
1,920 lines (1,556 loc) 117 kB
(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