sunmao-sdk
Version:
榫卯-开箱即用赋能-sdk
332 lines (272 loc) • 11.8 kB
JavaScript
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
import { isArray, isInteger, isString } from "lodash";
import CP from "../config";
import moment from "moment";
import qs from "qs";
import { getHsfHost, sunmaoLog } from "../net/api";
import { redirectFetchPost } from "../net/service";
export var getUrlQuery = function getUrlQuery() {
try {
var _locData$search;
var locData = location || window.location;
var query = locData.query || qs.parse((_locData$search = locData.search) === null || _locData$search === void 0 ? void 0 : _locData$search.split("?")[1]);
return query;
} catch (_unused) {}
return {};
};
/**
* 是否 空对象
*/
export function isEmptyObj(obj) {
if (isObj(obj)) {
var arr = Object.getOwnPropertyNames(filterParams(obj));
return arr.length === 0;
}
return true;
}
/**
* 是否 对象
*/
export function isObj(obj) {
return Object.prototype.toString.call(obj) === "[object Object]";
}
/**
* 数组 转 Map
*/
export function arrayKeyToMap(array, key) {
if (!array || !Array.isArray(array)) return new Map();
return new Map(array.map(function (i) {
return [i[key], i];
}));
}
/**
* 过滤 空 属性
* 这个方法不会影响原来的对象,而是返回一个新对象
*/
export function filterParams(obj) {
var _newPar = {};
for (var key in obj) {
//如果对象属性的值不为空,就保存该属性(这里我做了限制,如果属性的值为0,保存该属性。如果属性的值全部是空格,属于为空。)
if ((obj[key] === 0 || obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, "") !== "") {
//记录属性
_newPar[key] = obj[key];
}
} //返回对象
return _newPar;
}
/**
* 跟据 , 分隔符 设置传参
*/
export function splitParams(obj) {
var _newPar = {};
for (var key in obj) {
var value = obj[key];
if (key.includes(",") && isArray(value)) {
var keys = key.split(","); // keys 与 value 取小值作为最大长度,避免数组溢出
var maxLength = Math.min(keys.length, value.length);
for (var i = 0; i < maxLength; i++) {
_newPar[keys[i]] = value[i];
}
} else {
_newPar[key] = value;
}
} //返回对象
return _newPar;
}
/**
* 获取第一个数组
* @param {对象} obj
* @returns 对象中第一个数组,包含对象本身 或 false
*/
export function getFirstList(obj) {
if (Array.isArray(obj)) return strToObjOfList(obj); //兼容万一,对象的话,找到第一个[],赋值,可再优化,根据key去匹配,
else if (_typeof(obj) === "object" && null != obj) {
for (var key in obj) {
if (Array.isArray(obj[key])) {
return strToObjOfList(obj[key]);
}
}
}
return false;
}
/**
* 如果是 string 数组
* 则将 string 数组 转为 obj数组
* @param {对象} obj
* @returns 对象中第一个数组,包含对象本身 或 false
*/
export function strToObjOfList(list) {
try {
// 如果首参为 string
if (isString(list[0])) {
return list.map(function (value) {
return {
key: value,
preName: value
};
});
}
} catch (_unused2) {}
return list;
}
/**
* 获取对应函数对象
* @param {函数名称} apiName
* @param {函数集合} apis
* @returns 有则返回函数对象 无则 false
*/
export function getFunc(apiName, apis) {
if (apis && apis[apiName] && typeof apis[apiName] === "function") return apis[apiName];else apiName && log("\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u51FD\u6570: ".concat(apiName));
return false;
}
export function getUrl() {
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var isHsf = url.substr(0, 16) == "/api/hsf/common?";
if (isHsf) {
url = getHsfHost() + url;
if (isObj(CP.getCPInfo().extParams)) {
url = url + (url.indexOf("?") > -1 ? "&" : "?") + Object.keys(CP.getCPInfo().extParams).map(function (key) {
var _CP$getCPInfo$extPara;
return "".concat(key, "=").concat(encodeURIComponent((_CP$getCPInfo$extPara = CP.getCPInfo().extParams[key]) === null || _CP$getCPInfo$extPara === void 0 ? void 0 : _CP$getCPInfo$extPara.toString()));
}).join("&");
}
}
return url.includes("https://") || url.includes("http://") || url.includes("//") ? url : (CP.getCPInfo().host || "") + url;
}
export function toStringArray(value) {
if (isArray(value) && isInteger(value === null || value === void 0 ? void 0 : value[0])) {
return value.map(function (i) {
return "".concat(i);
});
}
return value;
}
export function log() {
try {
var _info$;
for (var _len = arguments.length, info = new Array(_len), _key = 0; _key < _len; _key++) {
info[_key] = arguments[_key];
}
// 开发主动配置关闭devLog
// 线上环境 prod 不开启
// 内部url 不开启
if (CP.getCPInfo().devLog && CP.getSunmaoParams().env !== "prod" && !((_info$ = info[2]) === null || _info$ === void 0 ? void 0 : _info$.includes("/ext/"))) console.log(info);
} catch (_unused3) {}
}
/**
* 判断是否拥有acl权限
*/
export function getAclPermission(permissionList, tag) {
if (!tag) return true;
var retPermission = false;
var item = (permissionList || []).find(function (per) {
return per.permissionName == tag;
});
if (item) retPermission = item.accessible;
return retPermission;
}
/**
* 获取按键配置信息
* @param {第一优先级} disabled 按键能否操作
* @param {按键触发类型} funcType
* @param {权限码} perTag
* @param {权限集合} permissionList
* @returns 按键配置信息
*/
export function getBtnConfig(disabled, funcType, perTag, permissionList) {
var btnConfig = {}; // 按键是否弹框提示再触发
btnConfig.again = "35" === funcType; // 获取按键权限
var permission = getAclPermission(permissionList, perTag); // 配置按键权限 且 无权限
if (perTag && !permission) {
btnConfig.again = true; // 直接跳转页面链接
btnConfig.btnProps = {
disabled: disabled,
title: "暂无权限,是否前往申请?",
onConfirm: function onConfirm() {
return window.location.href = "https://acl.alibaba-inc.com/apply/cart/detail.htm?pnames=".concat(perTag);
}
};
}
return btnConfig;
}
var isApiString = function isApiString(str) {
if (typeof str !== "string") return false;
if (str.indexOf("$api.") === 0 || str.indexOf("$func.") === 0) return true;
return false;
};
var getApiName = function getApiName(str) {
if (str.indexOf("$api.") === 0) return str.substring(5);
if (str.indexOf("$func.") === 0) return str.substring(6);
return "";
};
export var buildSchema = function buildSchema(schema, api) {
if (_typeof(schema) !== "object" || schema === null) {
if (isApiString(schema)) {
var apiName = getApiName(schema);
if (api && api[apiName] && typeof api[apiName] === "function") {
return api[apiName];
} else {
return function () {
apiName && CP.error("\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u51FD\u6570: ".concat(apiName));
};
}
}
return schema;
}
if (Array.isArray(schema)) {
var _result = _toConsumableArray(schema);
return _result.map(function (item) {
return buildSchema(item, api);
});
} // 剩下是 result 是对象的情况
var result = _objectSpread({}, schema);
var keys = Object.keys(result);
keys.forEach(function (key) {
result[key] = buildSchema(result[key], api);
});
return result;
}; // 如果是函数,则解析,如果不是,直接返回值
export var parseFunctionValue = function parseFunctionValue(value, params, cb) {
var _value = value;
if (typeof _value === "function") {
_value = _value(params);
} else {
cb && typeof cb === "function" && cb();
}
return _value;
}; // 用户行为日志
export var behaviorLog = function behaviorLog(behaviorName) {
try {
var _CP$getCPInfo$extPara2, _CP$getCPInfo$extPara3;
// 组合日志信息
var logParams = {
methodName: "榫卯行为日志",
searchTag: behaviorName,
api: "榫卯行为日志",
remarks: "用户操作习惯记录-使用榫卯行为日志-" + behaviorName,
apiType: "OTHER",
applicationName: "榫卯平台",
requestParam: behaviorName,
responseParam: behaviorName,
directory: window.location.href,
success: 1,
interfaceTime: 1,
requestTime: moment().format("YYYY-MM-DD HH:mm:ss"),
operator: "".concat((_CP$getCPInfo$extPara2 = CP.getCPInfo().extParams) === null || _CP$getCPInfo$extPara2 === void 0 ? void 0 : _CP$getCPInfo$extPara2.bucWorkId, "(").concat((_CP$getCPInfo$extPara3 = CP.getCPInfo().extParams) === null || _CP$getCPInfo$extPara3 === void 0 ? void 0 : _CP$getCPInfo$extPara3.bucName, ")"),
envName: CP.getSunmaoParams().env,
hostName: CP.getCPInfo().host,
serverName: CP.getCPInfo().host,
sunmaoLogMethod: "insertAdminOperationLog"
};
redirectFetchPost(sunmaoLog, logParams);
} catch (_unused4) {}
};